#!/bin/sh
# Build html versions of sections of lilypond documentation
#
# Usage: ./doc-section.sh MANUAL SECTION
#
# where MANUAL is the manual and SECTION is the section to be
# built.
#
# For example, NR 1.2 would be built by
# ./doc-section.sh notation rhythms
#
# and LM 1 would be built by
# ./doc-section.sh learning tutorial
#
# At the end of the run, the user is prompted whether or not to
# remove the generated files.
#
# According to http://code.google.com/p/lilypond/issues/detail?id=1236
# the location of the lilypond git tree is taken from $LILYPOND_GIT
# if specified, otherwise it is auto-detected.
#
# It is assumed that compilation takes place in the build/
# subdirectory, but this can be overridden by setting the environment
# variable LILYPOND_BUILD_DIR.
#
# Similarly, output defaults to build/tempdocs/ but this can be
# overridden by setting the environment variable LILYPOND_TEMPDOCS.
#
#
# Known limitations:
#
# * Doesn't use website css files
# * Bitmap images aren't loaded properly
# * Won't build Contributors' Guide; see scripts/auxiliar/cg-section.sh
#
usage () {
cat <&2
Usage: $0 MANUAL SECTION
e.g. $0 notation rhythms
EOF
exit "$1"
}
if [ "$1" = '-h' ] || [ "$1" = '--help' ]; then
usage 0
fi
[ $# = 2 ] || usage 1
if [ -n "$LILYPOND_GIT" ]; then
echo "Using source tree from value of \$LILYPOND_GIT: $LILYPOND_GIT"
else
cd "`dirname $0`"
cd ../..
LILYPOND_GIT="`pwd`"
echo "\$LILYPOND_GIT was not set; auto-detected source tree at $LILYPOND_GIT"
fi
if [ -n "$BROWSER" ]; then
echo "Using browser from \$BROWSER: $BROWSER"
else
echo "\$BROWSER not set; using firefox as default"
BROWSER="firefox"
fi
if test ! -e "$LILYPOND_GIT/DEDICATION"; then
echo "Error: $LILYPOND_GIT did not look like a LilyPond source tree; aborting." >&2
exit 1
fi
: "${LILYPOND_BUILD_DIR:=$LILYPOND_GIT/build}"
DOC_DIR="${LILYPOND_TEMPDOCS:-$LILYPOND_BUILD_DIR/tempdocs}"
LILYPOND_BOOK="$LILYPOND_BUILD_DIR/out/bin/lilypond-book"
TEXI2HTML="texi2html"
REFCHECK="$LILYPOND_GIT/scripts/auxiliar/ref_check.py"
MANUAL="$1"
SECTION="$2"
OUTPUT_DIR="$DOC_DIR/$SECTION"
MANUAL_PATH="$LILYPOND_GIT/Documentation/$MANUAL"
SECTION_PATH="$MANUAL_PATH/$SECTION.itely"
if test ! -d "$LILYPOND_BUILD_DIR"; then
echo "$LILYPOND_BUILD_DIR did not exist; check your setting of LILYPOND_BUILD_DIR. Aborting." >&2
exit 1
fi
if test ! -d "$MANUAL_PATH"; then
echo "$MANUAL_PATH was not a valid directory; is $MANUAL a valid manual?" >&2
exit 1
fi
if test ! -e "$SECTION_PATH"; then
echo "$SECTION_PATH did not exist; is $SECTION a valid section in the $MANUAL manual?" >&2
exit 1
fi
if test ! -d "$DOC_DIR"; then
mkdir "$DOC_DIR"
cp "$LILYPOND_BUILD_DIR/Documentation/out/version.itexi" "$DOC_DIR"
fi
if test ! -d "$OUTPUT_DIR"; then
mkdir "$OUTPUT_DIR"
fi
if test ! -d "$OUTPUT_DIR/out"; then
mkdir "$OUTPUT_DIR/out"
fi
cp "$LILYPOND_GIT/Documentation/common-macros.itexi" "$OUTPUT_DIR/common-macros.itexi"
cp "$LILYPOND_GIT/Documentation/macros.itexi" "$DOC_DIR/macros.itexi"
cp "$DOC_DIR/version.itexi" "$OUTPUT_DIR/version.itexi"
cp -r "$LILYPOND_GIT/Documentation/pictures/" "$OUTPUT_DIR/out/pictures"
if test -e "$OUTPUT_DIR/$SECTION.html"; then
rm "$OUTPUT_DIR/$SECTION.html"
fi
if test -e "$OUTPUT_DIR/out/$SECTION.texi"; then
rm "$OUTPUT_DIR/out/$SECTION.texi"
fi
echo "Running $LILYPOND_BOOK"
"$LILYPOND_BOOK" \
-f texi-html \
-I "$LILYPOND_GIT/Documentation/snippets" \
-I "$LILYPOND_GIT/Documentation/snippets/new" \
-I "$LILYPOND_GIT/input/manual" \
-I "$LILYPOND_GIT/Documentation" \
-I "$LILYPOND_GIT/Documentation/included" \
-I "$LILYPOND_GIT/Documentation/pictures" \
-o "$OUTPUT_DIR/out" \
"$SECTION_PATH"
BOOKRC=$?
if [ "$BOOKRC" != 0 ]; then
echo "Lilypond-book returned code $BOOKRC"
exit $BOOKRC
fi
echo "Running RefCheck"
python "$REFCHECK"
cd "$DOC_DIR"
if test -f "$OUTPUT_DIR/out/$SECTION.texi"; then
echo "Running $TEXI2HTML"
cat "$DOC_DIR/macros.itexi" "$OUTPUT_DIR/out/$SECTION.texi" > "$OUTPUT_DIR/$SECTION.texi"
"$TEXI2HTML" \
--no-validate \
--output="$OUTPUT_DIR/out/$SECTION.html" \
--I="$OUTPUT_DIR/out" \
"$OUTPUT_DIR/$SECTION.texi"
fi
echo "Displaying output in $BROWSER; close browser window when done."
$BROWSER $OUTPUT_DIR/out/$SECTION.html
cat <