dlib/docs/makedocs

199 lines
6.6 KiB
Plaintext
Raw Normal View History

#!/bin/bash
report_failure ()
{
echo " **** failed to complete **** "
exit 1
}
htmlify_cmake ()
{
echo "<html><head><title>" > $1.html;
echo $1 >> $1.html;
echo "</title></head><body bgcolor='white'><pre>" >> $1.html;
# line 1: make comments green
# line 2: add links into the add_subdirectory directives
# line 3: make literal quotes red
# line 4: make the directives show up blue
# line 5: make variable names show up purple
sed -e "s/^\([ ]*#.*\)/<font color='#009900'>\1<\/font>/" \
-e "s/add_subdirectory\([ ]*\)(\([ ]*\)\([^ ]*\)\([ ]*\)\([^ )]*\)/add_subdirectory\1(\2\3\4<a href='\3\/CMakeLists.txt.html'>\5<\/a>/" \
-e "s/\"\([^\"]*\)\"/\"<font color='#CC0000'>\1<\/font>\"/g" \
-e "s/^\([ ]*[^( ]*[ ]*\)(/<font color='blue'>\1<\/font>(/" \
-e "s/{\([^}]*\)}/\{<font color='#BB00BB'>\1<\/font>}/g" \
$1 >> $1.html;
echo "</pre></body></html>" >> $1;
}
get_short_revision_number()
{
RESULT=`hg log -r $1 | grep changeset | awk '{print $2}' | sed -e 's/:.*//'`
}
makedocs ()
{
COUNTER_FILE=.current_release_number
MINOR_COUTNER_FILE=.current_minor_release_number
REVNUM_FILE=.logger_revnum
# figure out the short number that identifies this particular changeset
get_short_revision_number `cat $REVNUM_FILE`
LOGGER_REVNUM=$RESULT
XSLT_OPTIONS="--nodtdattr --nonet --novalid"
DATE=`date --date= "+%b %d, %Y"`;
# The revision number we are currently at
CHANGESET_ID=`hg id -i | sed -e 's/\+//'`
get_short_revision_number $CHANGESET_ID
REVISION=$RESULT
if [ "$1" = "snapshot" ]
then
RELEASE="developmental snapshot $REVISION"
else
MAJOR_NUM=`cat $COUNTER_FILE`
MINOR_NUM=`cat $MINOR_COUTNER_FILE`
RELEASE=${MAJOR_NUM}.${MINOR_NUM}
fi;
# get XML versions of the change logs
BASE_LOGGER_REVNUM=`echo $LOGGER_REVNUM - 1000 | bc`
NEXT_LOGGER_REVNUM=`echo $LOGGER_REVNUM + 1 | bc`
echo Getting the mercurial change logs for revisions $NEXT_LOGGER_REVNUM:$REVISION
hg log ../dlib --style=xml -r$NEXT_LOGGER_REVNUM:$REVISION > docs/log.txt || report_failure
echo Getting the mercurial change logs for revisions $BASE_LOGGER_REVNUM:$LOGGER_REVNUM
hg log ../dlib --style=xml -r$BASE_LOGGER_REVNUM:$LOGGER_REVNUM > docs/old_log.txt || report_failure
# grab a clean copy of the repository
rm -rf docs/cache
rm -rf cache.$$
hg archive cache.$$ || report_failure
# put the stuff we need into the docs/cache folder
mkdir docs/cache
mv cache.$$/dlib docs/cache/
mv cache.$$/examples docs/cache/
rm -rf cache.$$
echo "#ifndef DLIB_REVISION_H" > docs/cache/dlib/revision.h
echo "// Version: " $RELEASE >> docs/cache/dlib/revision.h
echo "// Date: " `date` >> docs/cache/dlib/revision.h
echo "// Mercurial Revision ID: " $CHANGESET_ID >> docs/cache/dlib/revision.h
echo "#define DLIB_MAJOR_VERSION " $MAJOR_NUM >> docs/cache/dlib/revision.h
echo "#define DLIB_MINOR_VERSION " $MINOR_NUM >> docs/cache/dlib/revision.h
echo "#endif" >> docs/cache/dlib/revision.h
rm -rf docs/web
rm -rf docs/chm/docs
mkdir docs/web
mkdir docs/chm/docs
echo Creating HTML version of the source
htmlify --title "dlib C++ Library - " -i docs/cache -o htmltemp.$$
echo Copying files around...
cp -r htmltemp.$$/dlib docs/web
cp -r htmltemp.$$/dlib docs/chm/docs
cp -r htmltemp.$$/examples/* docs/web
cp -r htmltemp.$$/examples/* docs/chm/docs
rm -rf htmltemp.$$
cp docs/cache/dlib/test/makefile docs/web/dlib/test
cp docs/cache/dlib/test/makefile docs/chm/docs/dlib/test
cp docs/cache/dlib/test/CMakeLists.txt docs/web/dlib/test
cp docs/cache/dlib/test/CMakeLists.txt docs/chm/docs/dlib/test
cp docs/cache/dlib/CMakeLists.txt docs/web/dlib
cp docs/cache/dlib/CMakeLists.txt docs/chm/docs/dlib
mkdir docs/web/examples || report_failure
cp docs/cache/examples/CMakeLists.txt docs/web/examples
mkdir docs/chm/docs/examples || report_failure
cp docs/cache/examples/CMakeLists.txt docs/chm/docs/examples
cp docs/*.gif docs/web
cp docs/*.gif docs/chm/docs
cp docs/*.html docs/web
cp docs/*.html docs/chm/docs
cp docs/*.png docs/web
cp docs/*.png docs/chm/docs
cd docs/chm/docs || report_failure
htmlify_cmake dlib/CMakeLists.txt;
htmlify_cmake examples/CMakeLists.txt;
htmlify_cmake dlib/test/CMakeLists.txt;
cd ../../.. || report_failure
cd docs/web || report_failure
htmlify_cmake dlib/CMakeLists.txt;
htmlify_cmake examples/CMakeLists.txt;
htmlify_cmake dlib/test/CMakeLists.txt;
cd ../.. || report_failure
find docs/web docs/chm -name "CMakeLists.txt" | xargs rm
# make the web page version
echo Generate web page from XML and XSLT style sheet
cat docs/stylesheet.xsl | sed -e 's/"is_chm">[^<]*/"is_chm">false/' -e "s/_CURRENT_RELEASE_/$RELEASE/" -e "s/_LAST_MODIFIED_DATE_/$DATE/" \
> docs/stylesheet.$$.xsl
\ls docs/*.xml | xargs -i echo -o {} docs/stylesheet.$$.xsl {} | \
sed -e "s/\.xml /\.html /" | sed -e "s/-o docs/-o docs\/web/" | \
grep -v main_menu. |\
xargs -l xsltproc $XSLT_OPTIONS
rm docs/stylesheet.$$.xsl
# make the chm version
echo Generate non-web page version from XML and XSLT style sheet
cat docs/stylesheet.xsl | sed -e 's/"is_chm">[^<]*/"is_chm">true/' -e "s/_CURRENT_RELEASE_/$RELEASE/" -e "s/_LAST_MODIFIED_DATE_/$DATE/" \
> docs/stylesheet.$$.xsl
\ls docs/*.xml | xargs -i echo -o {} docs/stylesheet.$$.xsl {} | \
sed -e "s/\.xml /\.html /" | sed -e "s/-o docs/-o docs\/chm\/docs/" | \
grep -v main_menu. |\
xargs -l xsltproc $XSLT_OPTIONS
rm docs/stylesheet.$$.xsl
FILES=`find docs/chm docs/web -iname "*.html" -type f`
for i in $FILES
do
sed -e '/<!DOCTYPE/d' ${i} > temp.$$;
mv temp.$$ ${i};
done
echo Generating sitemap
cd docs/web || report_failure
find . -name "*.html" | awk '{ print "http://dlib.net" substr($1,2)}' > sitemap.txt
# make the main index have a 301 redirect. Use php to do this
echo '<?php if ($_SERVER["SERVER_NAME"] != "dlib.net") { header("Location: http://dlib.net/", true, 301); exit; } ?>' > index.php
cat index.html >> index.php
rm index.html
cd ../..
}
./testenv || report_failure
# build all the html documentation
makedocs $1;
# now make the table of contents for the chm file
echo Generating the table of contents for the chm file
xsltproc -o docs/chm/Table\ of\ Contents.hhc docs/chm/htmlhelp_stylesheet.xsl docs/chm/toc.xml