mirror of
https://github.com/davisking/dlib.git
synced 2024-11-01 10:14:53 +08:00
f02f06355b
dlib/CMakeLists.txt file is keeping the version numbers. Also changed all relevant scripts to grab the version information from CMakeLists.txt.
307 lines
9.9 KiB
Bash
Executable File
307 lines
9.9 KiB
Bash
Executable File
#!/bin/bash
|
|
. bash_helper_functions
|
|
|
|
report_failure ()
|
|
{
|
|
echo " **** failed to complete **** "
|
|
exit 1
|
|
}
|
|
|
|
htmlify_python_file ()
|
|
{
|
|
pygmentize -f html -O full,style=vs $1 > $1.html
|
|
}
|
|
|
|
build_python_interface ()
|
|
{
|
|
pushd ../python_examples
|
|
mkdir build
|
|
cd build || report_failure
|
|
cmake ../../tools/python || report_failure
|
|
make -j4 install || report_failure
|
|
|
|
|
|
# Check if we should run all the python examples to make sure they
|
|
# work without generating an error.
|
|
if [ $1 == "test-python" ]
|
|
then
|
|
cd ..
|
|
FILES=`ls *.py`
|
|
for f in $FILES
|
|
do
|
|
python $f > /dev/null < /dev/null || report_failure
|
|
done
|
|
fi
|
|
|
|
popd
|
|
}
|
|
|
|
add_links_between_example_programs()
|
|
{
|
|
EXT=$3
|
|
# Get the list of example program filenames
|
|
pushd $1 > /dev/null
|
|
FILES=`ls *.$EXT`
|
|
popd > /dev/null
|
|
|
|
# Now run sed on all the htmlified example programs to add the links between them.
|
|
for f in $FILES
|
|
do
|
|
#escape the . in the filename
|
|
escaped_name=`echo $f | sed -e 's/\./\\\./g'`
|
|
pushd $1 > /dev/null
|
|
# get a list of all the html example files that contain the name
|
|
matching_html_files=`grep -e "\b$escaped_name\b" -l *.$EXT | sed -e "s/\.$EXT\b/.$EXT.html/g"`
|
|
popd > /dev/null
|
|
|
|
# now actually run sed to add the links
|
|
pushd $2 > /dev/null
|
|
if [ -n "$matching_html_files" ]
|
|
then
|
|
sed -i -e "s/\b$escaped_name\b/<a href=\"$escaped_name.html\">$escaped_name<\/a>/g" $matching_html_files
|
|
fi
|
|
popd > /dev/null
|
|
done
|
|
|
|
}
|
|
|
|
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.html;
|
|
}
|
|
|
|
htmlify_python()
|
|
{
|
|
FILES=`\ls $1/*.py`
|
|
for i in $FILES
|
|
do
|
|
htmlify_python_file ${i}
|
|
rm ${i}
|
|
done
|
|
}
|
|
|
|
|
|
makedocs ()
|
|
{
|
|
|
|
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_TODAY=`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" = "makerel" ]
|
|
then
|
|
RELEASE=${MAJOR_NUM}.${MINOR_NUM}
|
|
else
|
|
RELEASE=${MAJOR_NUM}.${MINOR_NUM}.${PATCH_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 -v ../dlib ../examples ../tools ../python_examples --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 -v ../dlib ../examples ../tools ../python_examples --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 docs/web
|
|
rm -rf docs/chm/docs
|
|
hg archive docs/cache || report_failure
|
|
# Don't need the docs folder in the cache, moreover, deleting it here avoids letting the makerel script include it in the dlib tar balls.
|
|
rm -rf docs/cache/docs
|
|
rm docs/cache/README.txt
|
|
|
|
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 "#define DLIB_PATCH_VERSION " $PATCH_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.$$
|
|
add_links_between_example_programs docs/cache/examples htmltemp.$$/examples cpp
|
|
|
|
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.$$
|
|
|
|
# Create python docs. If we are making a release then stop immediately if
|
|
# the python docs can't be created (this happens if the .so file isn't compiled)
|
|
if [ "$1" = "makerel" ]
|
|
then
|
|
build_python_interface test-python
|
|
sphinx-build -b html docs/python sphinx.$$ || report_failure
|
|
else
|
|
if [ "$1" != "fast" ]
|
|
then
|
|
build_python_interface no-test-python
|
|
fi;
|
|
sphinx-build -b html docs/python sphinx.$$
|
|
fi;
|
|
|
|
cp -r sphinx.$$ docs/web/python
|
|
mv sphinx.$$ docs/chm/docs/python
|
|
|
|
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/cache/python_examples/*.py docs/chm/docs/
|
|
cp docs/cache/python_examples/*.py docs/web/
|
|
|
|
htmlify_python docs/chm/docs/
|
|
htmlify_python docs/web/
|
|
add_links_between_example_programs docs/cache/python_examples docs/chm/docs py
|
|
add_links_between_example_programs docs/cache/python_examples docs/web py
|
|
|
|
cp docs/*.gif docs/web
|
|
cp docs/*.gif docs/chm/docs
|
|
cp docs/ml_guide.svg docs/web
|
|
cp docs/ml_guide.svg docs/chm/docs
|
|
cp -r docs/guipics docs/web
|
|
cp -r docs/guipics docs/chm/docs
|
|
cp docs/*.html docs/web
|
|
cp docs/*.html docs/chm/docs
|
|
cp docs/*.css docs/web
|
|
cp docs/*.css docs/chm/docs
|
|
cp docs/*.js docs/web
|
|
cp docs/*.js docs/chm/docs
|
|
cp docs/*.png docs/web
|
|
cp docs/*.ico docs/web
|
|
cp docs/*.png docs/chm/docs
|
|
cp docs/*.ico 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
|
|
|
|
|
|
|
|
# generate the HTML docs
|
|
echo Generate HTML docs from XML and XSLT style sheet
|
|
FILES=`\ls docs/*.xml | grep -v main_menu.xml`
|
|
for i in $FILES
|
|
do
|
|
|
|
# The last modified date for these files should always be the release date (regardless of when the actual xml files were modified).
|
|
if [ "${i}" = "docs/release_notes.xml" -o ${i} = "docs/old_release_notes.xml" \
|
|
-o ${i} = "docs/change_log.xml" -o ${i} = "docs/old_change_log.xml" \
|
|
-o ${i} = "docs/index.xml" ]
|
|
then
|
|
DATE=$DATE_TODAY
|
|
else
|
|
get_last_modified_date ${i}
|
|
DATE=$RESULT
|
|
fi;
|
|
|
|
#make web version
|
|
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
|
|
OUT_FILE=$(echo ${i} | sed -e "s/\.xml/\.html/" | sed -e "s/docs\//docs\/web\//")
|
|
xsltproc $XSLT_OPTIONS -o $OUT_FILE docs/stylesheet.$$.xsl ${i}
|
|
|
|
#make chm version
|
|
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
|
|
OUT_FILE=$(echo ${i} | sed -e "s/\.xml/\.html/" | sed -e "s/docs\//docs\/chm\/docs\//")
|
|
xsltproc $XSLT_OPTIONS -o $OUT_FILE docs/stylesheet.$$.xsl ${i}
|
|
|
|
rm docs/stylesheet.$$.xsl
|
|
done
|
|
|
|
# Delete doc type header stuff
|
|
# 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
|
|
|