]> begriffs open source - cmsis/blob - CMSIS/DoxyGen/gen_doc.sh
Initial intros about external CMSIS-components.
[cmsis] / CMSIS / DoxyGen / gen_doc.sh
1 #!/usr/bin/env bash
2 # Version: 2.3
3 # Date: 2023-06-06
4 # This bash script generates CMSIS-Core documentation
5 #
6 # Pre-requisites:
7 # - bash shell (for Windows: install git for Windows)
8 # - doxygen 1.9.6
9 # - mscgen 0.20
10
11 set -o pipefail
12
13 # Set version of gen pack library
14 # For available versions see https://github.com/Open-CMSIS-Pack/gen-pack/tags.
15 # Use the tag name without the prefix "v", e.g., 0.7.0
16 REQUIRED_GEN_PACK_LIB="0.8.4"
17
18 DIRNAME=$(dirname $(readlink -f $0))
19 GENDIR=../Documentation
20 REQ_DXY_VERSION="1.9.6"
21 REQ_MSCGEN_VERSION="0.20"
22
23 ############ DO NOT EDIT BELOW ###########
24
25 function install_lib() {
26   local URL="https://github.com/Open-CMSIS-Pack/gen-pack/archive/refs/tags/v$1.tar.gz"
27   local STATUS=$(curl -sLI "${URL}" | grep "^HTTP" | tail -n 1 | cut -d' ' -f2 || echo "$((600+$?))")
28   if [[ $STATUS -ge 400 ]]; then
29     echo "Wrong/unavailable gen-pack lib version '$1'!" >&2
30     echo "Check REQUIRED_GEN_PACK_LIB variable."  >&2
31     echo "For available versions see https://github.com/Open-CMSIS-Pack/gen-pack/tags." >&2
32     exit 1
33   fi
34   echo "Downloading gen-pack lib version '$1' to '$2' ..."
35   mkdir -p "$2"
36   curl -L "${URL}" -s | tar -xzf - --strip-components 1 -C "$2" || exit 1
37 }
38
39 function load_lib() {
40   if [[ -d ${GEN_PACK_LIB} ]]; then
41     . "${GEN_PACK_LIB}/gen-pack"
42     return 0
43   fi
44   local GLOBAL_LIB="/usr/local/share/gen-pack/${REQUIRED_GEN_PACK_LIB}"
45   local USER_LIB="${HOME}/.local/share/gen-pack/${REQUIRED_GEN_PACK_LIB}"
46   if [[ ! -d "${GLOBAL_LIB}" && ! -d "${USER_LIB}" ]]; then
47     echo "Required gen-pack lib not found!" >&2
48     install_lib "${REQUIRED_GEN_PACK_LIB}" "${USER_LIB}"
49   fi
50
51   if [[ -d "${GLOBAL_LIB}" ]]; then
52     . "${GLOBAL_LIB}/gen-pack"
53   elif [[ -d "${USER_LIB}" ]]; then
54     . "${USER_LIB}/gen-pack"
55   else
56     echo "Required gen-pack lib is not installed!" >&2
57     exit 1
58   fi
59 }
60
61 load_lib
62 find_git
63 find_doxygen "${REQ_DXY_VERSION}"
64 find_utility "mscgen" "-l | grep 'Mscgen version' | sed -r -e 's/Mscgen version ([^,]+),.*/\1/'" "${REQ_MSCGEN_VERSION}"
65
66 if [ -z "${VERSION_FULL}" ]; then
67   VERSION_FULL=$(git_describe "v")
68 fi
69
70 pushd "${DIRNAME}" > /dev/null
71
72 echo "Generating documentation ..."
73
74 function generate() {
75   pushd $1 > /dev/null
76
77   projectName=$(grep -E "PROJECT_NAME\s+=" $1.dxy.in | sed -r -e 's/[^"]*"([^"]+)".*/\1/')
78   projectNumberFull="$2"
79   if [ -z "${projectNumberFull}" ]; then
80     projectNumberFull=$(grep -E "PROJECT_NUMBER\s+=" $1.dxy.in | sed -r -e 's/[^"]*"[^0-9]*([0-9]+\.[0-9]+(\.[0-9]+)?(-.+)?)".*/\1/')
81   fi
82   projectNumber="${projectNumberFull%+*}"
83   datetime=$(date -u +'%a %b %e %Y %H:%M:%S')
84   year=$(date -u +'%Y')
85
86   sed -e "s/{projectNumber}/${projectNumber}/" $1.dxy.in > $1.dxy
87
88   # git_changelog -f html -p "v" > src/history.txt
89
90   echo "\"${UTILITY_DOXYGEN}\" $1.dxy"
91   "${UTILITY_DOXYGEN}" $1.dxy
92
93   mkdir -p "${DIRNAME}/${GENDIR}/$1/html/search/"
94   cp -f "${DIRNAME}/Doxygen_Templates/search.css" "${DIRNAME}/${GENDIR}/$1/html/search/"
95   cp -f "${DIRNAME}/Doxygen_Templates/navtree.js" "${DIRNAME}/${GENDIR}/$1/html/"
96
97   sed -e "s/{datetime}/${datetime}/" "${DIRNAME}/Doxygen_Templates/footer.js.in" \
98     | sed -e "s/{year}/${year}/" \
99     | sed -e "s/{projectName}/${projectName}/" \
100     | sed -e "s/{projectNumber}/${projectNumber}/" \
101     | sed -e "s/{projectNumberFull}/${projectNumberFull}/" \
102     > "${DIRNAME}/${GENDIR}/$1/html/footer.js"
103
104   popd > /dev/null
105 }
106
107 generate "General" "${VERSION_FULL}"
108 generate "Core_A"
109 generate "Core"
110 generate "Driver"
111 generate "RTOS2"
112 generate "DSP"
113 generate "NN"
114 generate "DAP"
115 generate "View"
116 generate "Compiler"
117 generate "Toolbox"
118 generate "Stream"
119 generate "Zone"
120
121 popd > /dev/null
122
123 exit 0