forked from davisking/dlib
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmakedocs
executable file
·216 lines (165 loc) · 7.16 KB
/
makedocs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
#!/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/:.*//'`
}
get_last_modified_date()
{
RESULT=`hg log $1 -l1 --template '{date|date}\n' | awk '{ print $2" "$3", " $5}'`
}
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_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
MAJOR_NUM=`cat $COUNTER_FILE`
MINOR_NUM=`cat $MINOR_COUTNER_FILE`
if [ "$1" = "makerel" ]
then
RELEASE=${MAJOR_NUM}.${MINOR_NUM}
else
RELEASE=${MAJOR_NUM}.`echo ${MINOR_NUM}+1|bc`-RC
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 --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 --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/
mv cache.$$/tools 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
# 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
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