diff options
author | ridiculousfish <corydoras@ridiculousfish.com> | 2012-12-27 17:31:13 -0800 |
---|---|---|
committer | ridiculousfish <corydoras@ridiculousfish.com> | 2012-12-27 17:31:13 -0800 |
commit | efa6e3874162843b806eabd066e9ede915971905 (patch) | |
tree | c3138b9fdb78ef9886ee87893dd57d76596a467a /build_tools/build_documentation.sh | |
parent | 183aea5c9602b43f42a0ecdbc8a500a9d90d9c03 (diff) |
Factored out help_doc generation into build_tools/build_documentation.sh
Diffstat (limited to 'build_tools/build_documentation.sh')
-rwxr-xr-x | build_tools/build_documentation.sh | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/build_tools/build_documentation.sh b/build_tools/build_documentation.sh new file mode 100755 index 00000000..232f3469 --- /dev/null +++ b/build_tools/build_documentation.sh @@ -0,0 +1,95 @@ +#!/bin/sh + +# This script is run as part of the build process +# It looks for doc_src, and then builds documentation out of it +# into either help_doc or $BUILT_PRODUCTS_DIR (if set) + +# If running from Xcode, the fish directory is in SRCROOT; +# otherwise assume it's the current directory +FISHDIR=`pwd` +if test -n "$SRCROOT"; then + FISHDIR="$SRCROOT" +fi + +# Make sure doc_src is found +if test ! -d "${FISHDIR}/doc_src"; then + echo >&2 "doc_src not found in '${FISHDIR}'" + exit 1 +fi + +# Make sure doxygen is found +DOXYGENPATH=`command -v doxygen` +if test -z "$DOXYGENPATH" ; then + for i in /usr/local/bin/doxygen /opt/bin/doxygen; do + if test -f "$i"; then + DOXYGENPATH="$i" + break + fi + done +fi + +if test -z "$DOXYGENPATH"; then + echo >&2 "doxygen is not installed, so documentation will not be built." + exit 0 +fi + +# Determine where our output should go +OUTPUTDIR="${FISHDIR}/help_doc" +if test -n "$BUILT_PRODUCTS_DIR"; then + OUTPUTDIR="$BUILT_PRODUCTS_DIR" +fi +mkdir -p "${OUTPUTDIR}" + + +# Make a temporary directory +TMPLOC=`mktemp -d -t fish_doc_build` || { echo >&2 "Could not build documentation because mktemp failed"; exit 1; } + +# Copy stuff to the temp directory +for i in "$FISHDIR"/doc_src/*.txt; do + DOXYFILE=$TMPLOC/`basename $i .txt`.doxygen + echo "/** \page" `basename $i .txt` >$DOXYFILE; + cat $i >>$DOXYFILE; + echo "*/" >>$DOXYFILE; +done + +# Make some extra stuff to pass to doxygen +# Input is kept as . because we cd to the input directory beforehand +# This prevents doxygen from generating "documentation" for intermediate directories +read -d '' DOXYPARAMS <<EOF +PROJECT_NUMBER=2.0.0 +INPUT=. +OUTPUT_DIRECTORY=$OUTPUTDIR +QUIET=YES +EOF + +# echo "$DOXYPARAMS" + +# Clear out the output directory first +find "${OUTPUTDIR}" -name "*.1" -delete + +# Run doxygen +cd "$TMPLOC" +(cat "${FISHDIR}/Doxyfile.help" ; echo "$DOXYPARAMS";) | "$DOXYGENPATH" - + +# Remember errors +RESULT=$? + +if test $RESULT == 0; then + # Postprocess the files + for i in "$FISHDIR"/doc_src/*.txt; do + CMD_NAME=`basename "$i" .txt`; + sed -i '' -e "s/\(.\)\\.SH/\1/" -e "s/$CMD_NAME *\\\\- *\"\(.*\)\"/\1/" "${OUTPUTDIR}/man/man1/${CMD_NAME}.1" + done +fi + +# Destroy TMPLOC +echo "Cleaning up '$TMPLOC'" +#rm -Rf "$TMPLOC" + +if test $RESULT == 0; then + # Tell the user what we did + echo "Output man pages into '${OUTPUTDIR}'" +else + echo "Doxygen failed. See the output log for details." +fi +exit $RESULT |