summaryrefslogtreecommitdiff
path: root/etc/generate-doc.sh
blob: 50b4190a6a0673b7a5dcea0f7c84c345f21f8d23 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/bin/sh
# Copyright 2022 Huawei Cloud Computing Technology Co., Ltd.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

set -eu

readonly ROOT=$(readlink -f $(dirname $0)/..)

: ${OUTFILE:=README.md}

doc2md() {
  local MAIN="$1"
  local MODULE="$2"
  local RULE="$3"

  local RULE_DOC="$(just-mr --main "$MAIN" describe --rule --json "$MODULE" "$RULE")"
  local DOC="$(echo "$RULE_DOC" | jq -r '.doc')"
  local FIELD_DOC="$(echo "$RULE_DOC" | jq -r '.field_doc')"
  local CONFIG_DOC="$(echo "$RULE_DOC" | jq -r '.config_doc | delpaths([["AR"], ["CC"], ["CXX"], ["CFLAGS"], ["CXXFLAGS"],["LDFLAGS"], ["ADD_CFLAGS"], ["ADD_CXXFLAGS"], ["ADD_LDFLAGS"], ["ENV"], ["BUILD_POSITION_INDEPENDENT"]])')"

  echo "### Rule \`[\"$MODULE\", \"$RULE\"]\`"
  echo
  echo "$DOC" \
    | jq -r '[.[] as $v | if ($v == "") then "\n\n" else $v end] | join(" ")' \
    | sed 's/\("[^"]*"\|\[[^]]*\]\|{[^}]*}\)/`\1`/g'
  echo
  echo "| Field | Description |"
  echo "| ----- | ----------- |"
  echo "$FIELD_DOC" \
    | jq -r 'keys_unsorted[] as $k | "| \"\($k)\" | \(.[$k] | join(" ")) |"' \
    | sed 's/\("[^"]*"\|\[[^]]*\]\|{[^}]*}\)/`\1`/g'
  echo
  if [ "$(echo "$CONFIG_DOC" | jq -r 'length')" -gt 0 ]
  then
      echo "| Config variable | Description |"
      echo "| --------------- | ----------- |"
      echo "$CONFIG_DOC" \
        | jq -r 'keys_unsorted[] as $k | "| \"\($k)\" | \(.[$k] | join(" ")) |"' \
        | sed 's/\("[^"]*"\|\[[^]]*\]\|{[^}]*}\)/`\1`/g'
      echo
  fi
}

rm -f "$OUTFILE"
( cat "$ROOT/etc/README.template.md"
  doc2md rules CC defaults
  doc2md rules CC/proto defaults
  doc2md rules CC/foreign defaults
  doc2md rules patch defaults
  doc2md rules CC binary
  doc2md rules CC library
  doc2md rules CC/prebuilt library
  doc2md rules CC/pkgconfig system_library
  doc2md rules CC install-with-deps
  doc2md rules CC/test test
  doc2md rules shell defaults
  doc2md rules shell cmds
  doc2md rules shell/test script
  doc2md rules CC/foreign/cmake library
  doc2md rules CC/foreign/cmake data
  doc2md rules CC/foreign/make library
  doc2md rules CC/foreign/make data
  doc2md rules CC/foreign/shell library
  doc2md rules CC/foreign/shell data
  doc2md rules proto library
  doc2md rules data staged
  doc2md rules patch file
  doc2md rules CC/auto config
  doc2md rules CC/auto config_file
  doc2md rules test suite
  doc2md rules lint targets
  doc2md rules lint defaults
) >> "$OUTFILE"