aboutsummaryrefslogtreecommitdiffhomepage
path: root/build_tools/build_documentation.sh
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2012-12-27 17:31:13 -0800
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2012-12-27 17:31:13 -0800
commitefa6e3874162843b806eabd066e9ede915971905 (patch)
treec3138b9fdb78ef9886ee87893dd57d76596a467a /build_tools/build_documentation.sh
parent183aea5c9602b43f42a0ecdbc8a500a9d90d9c03 (diff)
Factored out help_doc generation into build_tools/build_documentation.sh
Diffstat (limited to 'build_tools/build_documentation.sh')
-rwxr-xr-xbuild_tools/build_documentation.sh95
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