]> begriffs open source - cmsis/blob - CMSIS/DoxyGen/gen_doc.sh
Update develop documentation on gh-pages using gh-action.
[cmsis] / CMSIS / DoxyGen / gen_doc.sh
1 #!/bin/bash
2 # Version: 1.0
3 # Date: 2021-05-05
4 # This bash script generates CMSIS Documentation:
5 #
6 # Pre-requisites:
7 # - bash shell (for Windows: install git for Windows)
8 # - doxygen 1.8.6
9 # - mscgen 0.20
10
11 set -o pipefail
12
13 DIRNAME=$(dirname $(readlink -f $0))
14 DOXYGEN=$(which doxygen)
15 MSCGEN=$(which mscgen)
16 REGEN=0
17 ALLPARTS=($(find ${DIRNAME} -mindepth 1 -maxdepth 1 -type d -exec basename {} \;))
18 PARTS=()
19
20 if [[ -z "$*" ]]; then
21     REGEN=1
22 else
23     for part in "$*"; do
24         if [[ " ${ALLPARTS[@]} " =~ " $part " ]]; then
25             PARTS+=($part)
26         fi
27     done
28 fi
29
30 if [[ ! -f "${DOXYGEN}" ]]; then
31     echo "Doxygen not found!" >&2
32     echo "Did you miss to add it to PATH?"
33     exit 1
34 else
35     version=$("${DOXYGEN}" --version)
36     echo "DOXYGEN is ${DOXYGEN} at version ${version}"
37     if [[ "${version}" != "1.8.6" ]]; then
38         echo " >> Version is different from 1.8.6 !" >&2
39     fi
40 fi
41
42 if [[ ! -f "${MSCGEN}" ]]; then
43     echo "mscgen not found!" >&2
44     echo "Did you miss to add it to PATH?"
45     exit 1
46 else
47     version=$("${MSCGEN}" 2>/dev/null | grep "Mscgen version" | sed -r -e 's/Mscgen version ([^,]+),.*/\1/')
48     echo "MSCGEN is ${MSCGEN} at version ${version}"
49     if [[ "${version}" != "0.20" ]]; then
50         echo " >> Version is different from 0.20 !" >&2
51     fi
52 fi
53
54 function doxygen {
55     partname=$(basename $(dirname $1))
56     if [[ $REGEN != 0 ]] || [[ " ${PARTS[@]} " =~ " ${partname} " ]]; then
57         pushd "$(dirname $1)" > /dev/null
58         echo "${DOXYGEN} $1"
59         "${DOXYGEN}" $(basename "$1")
60         popd > /dev/null
61         
62         if [[ $2 != 0 ]]; then
63             cp -f "${DIRNAME}/Doxygen_Templates/search.css" "${DIRNAME}/../Documentation/${partname}/html/search/"
64         fi
65         
66         projectName=$(grep -E "PROJECT_NAME\s+=" $1 | sed -r -e 's/[^"]*"([^"]+)"/\1/')
67         projectNumber=$(grep -E "PROJECT_NUMBER\s+=" $1 | sed -r -e 's/[^"]*"([^"]+)"/\1/')
68         datetime=$(date -u +'%a %b %e %Y %H:%M:%S')
69         sed -e "s/{datetime}/${datetime}/" "${DIRNAME}/Doxygen_Templates/cmsis_footer.js" \
70           | sed -e "s/{projectName}/${projectName}/" \
71           | sed -e "s/{projectNumber}/${projectNumber}/" \
72           > "${DIRNAME}/../Documentation/${partname}/html/cmsis_footer.js"
73     fi
74 }
75
76 if [[ $REGEN != 0 ]]; then
77     echo "Cleaning existing documentation ..."
78     find "${DIRNAME}/../Documentation/" -mindepth 1 -maxdepth 1 -type d -exec rm -rf {} +
79 fi
80
81 echo "Generating documentation ..."
82 doxygen "${DIRNAME}/Build/Build.dxy" 1
83 doxygen "${DIRNAME}/Core/core.dxy" 1
84 doxygen "${DIRNAME}/Core_A/core_A.dxy" 1
85 doxygen "${DIRNAME}/DAP/dap.dxy" 1
86 doxygen "${DIRNAME}/Driver/Driver.dxy" 1
87 doxygen "${DIRNAME}/DSP/dsp.dxy" 1
88 doxygen "${DIRNAME}/General/general.dxy" 0
89 doxygen "${DIRNAME}/DAP/dap.dxy" 1
90 doxygen "${DIRNAME}/NN/nn.dxy" 1
91 doxygen "${DIRNAME}/Pack/Pack.dxy" 1
92 doxygen "${DIRNAME}/RTOS/rtos.dxy" 1
93 doxygen "${DIRNAME}/RTOS2/rtos.dxy" 1
94 doxygen "${DIRNAME}/SVD/svd.dxy" 0
95 doxygen "${DIRNAME}/Zone/zone.dxy" 1
96
97 exit 0