makedocs 8.6 KB
Newer Older
1
2
3
4
5
6
7
8
#!/bin/bash

report_failure ()
{
    echo "  **** failed to complete **** "
    exit 1
}

9
10
11
12
13
htmlify_python_file ()
{
    pygmentize -f html -O full,style=vs $1 > $1.html
}

Davis King's avatar
Davis King committed
14
15
16
17
18
19
20
21
22
23
build_python_interface ()
{
    pushd ../python_examples
    mkdir build 
    cd build                 || report_failure
    cmake ../../tools/python || report_failure
    make -j4 install         || report_failure
    popd
}

24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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;

42
43
44
45
46
47
48
49
50
51
52
    echo "</pre></body></html>" >> $1.html;
}

htmlify_python()
{
    FILES=`\ls $1/*.py`
    for i in $FILES
    do
        htmlify_python_file ${i}
        rm ${i}
    done
53
54
}

55
56
57
58
59
get_short_revision_number()
{    
    RESULT=`hg log -r $1 | grep changeset | awk '{print $2}' | sed -e 's/:.*//'`  
}

60
61
62
63
64
get_last_modified_date()
{
    RESULT=`hg log $1 -l1 --template '{date|date}\n' | awk '{ print $2" "$3", " $5}'`
}

65
66
67
68
69
70
71
72
73
makedocs ()
{

    COUNTER_FILE=.current_release_number
    MINOR_COUTNER_FILE=.current_minor_release_number
    REVNUM_FILE=.logger_revnum



74
75
76
77
# figure out the short number that identifies this particular changeset
    get_short_revision_number `cat $REVNUM_FILE`
    LOGGER_REVNUM=$RESULT

78
    XSLT_OPTIONS="--nodtdattr   --nonet   --novalid"
79
    DATE_TODAY=`date --date= "+%b %d, %Y"`;
80
81
82
83
84




# The revision number we are currently at
85
86
87
    CHANGESET_ID=`hg id -i | sed -e 's/\+//'`
    get_short_revision_number $CHANGESET_ID 
    REVISION=$RESULT
88
89


90
91
    MAJOR_NUM=`cat $COUNTER_FILE` 
    MINOR_NUM=`cat $MINOR_COUTNER_FILE` 
92
93
94
95
96
97
    if [ "$1" = "makerel" ] 
        then
        RELEASE=${MAJOR_NUM}.${MINOR_NUM} 
    else
        RELEASE=${MAJOR_NUM}.`echo ${MINOR_NUM}+1|bc`-RC
    fi;
98

99
100
# get XML versions of the change logs
    BASE_LOGGER_REVNUM=`echo $LOGGER_REVNUM - 1000 | bc`
101
102
    NEXT_LOGGER_REVNUM=`echo $LOGGER_REVNUM + 1 | bc`
    echo Getting the mercurial change logs for revisions $NEXT_LOGGER_REVNUM:$REVISION
103
    hg log -v ../dlib --style=xml  -r$NEXT_LOGGER_REVNUM:$REVISION > docs/log.txt || report_failure
104
    echo Getting the mercurial change logs for revisions $BASE_LOGGER_REVNUM:$LOGGER_REVNUM
105
    hg log -v ../dlib --style=xml  -r$BASE_LOGGER_REVNUM:$LOGGER_REVNUM > docs/old_log.txt || report_failure 
106

107
108
# grab a clean copy of the repository 
    rm -rf docs/cache
109
110
    rm -rf docs/web
    rm -rf docs/chm/docs
111
    rm -rf cache.$$
112
    hg archive cache.$$ || report_failure
113
114
115
116
# put the stuff we need into the docs/cache folder
    mkdir docs/cache
    mv cache.$$/dlib docs/cache/
    mv cache.$$/examples docs/cache/
117
    mv cache.$$/python_examples docs/cache/
118
    mv cache.$$/tools docs/cache/
119
    rm -rf cache.$$
120
121


122
123
124
    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
125
126
127
    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
128
129
130
    echo "#endif"                           >> docs/cache/dlib/revision.h


131
132
133
134
    rm -rf docs/web
    rm -rf docs/chm/docs
    mkdir docs/web
    mkdir docs/chm/docs
135
136
137
138
139
140
141
142
143
144
145

    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.$$

Davis King's avatar
Davis King committed
146
147
148
    # 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" ] 
149
    then
Davis King's avatar
Davis King committed
150
        build_python_interface
Davis King's avatar
Davis King committed
151
152
        sphinx-build -b html docs/python sphinx.$$ || report_failure
    else
Davis King's avatar
Davis King committed
153
154
155
156
        if [ "$1" != "fast" ]
        then
            build_python_interface
        fi;
Davis King's avatar
Davis King committed
157
158
159
160
161
162
        sphinx-build -b html docs/python sphinx.$$
    fi;

    cp -r sphinx.$$ docs/web/python
    mv  sphinx.$$ docs/chm/docs/python

163
164
165
166
167
168
169
170
171
172
173
    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
174
175
176
177
178
    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/
179

180
181
    cp docs/*.gif docs/web
    cp docs/*.gif docs/chm/docs
182
183
    cp docs/ml_guide.svg docs/web
    cp docs/ml_guide.svg docs/chm/docs
184
185
    cp -r docs/guipics docs/web
    cp -r docs/guipics docs/chm/docs
186
187
188
    cp docs/*.html docs/web
    cp docs/*.html docs/chm/docs
    cp docs/*.png docs/web
189
    cp docs/*.ico docs/web
190
    cp docs/*.png docs/chm/docs
191
    cp docs/*.ico docs/chm/docs
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207

    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



208
209
210
211
212
    # 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
213

214
        # The last modified date for these files should always be the release date (regardless of when the actual xml files were modified). 
Davis King's avatar
Davis King committed
215
        if [ "${i}" = "docs/release_notes.xml" -o ${i} = "docs/old_release_notes.xml" \
216
217
             -o ${i} = "docs/change_log.xml" -o ${i} = "docs/old_change_log.xml" \
             -o ${i} = "docs/index.xml" ] 
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
        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
239

240
241
242
243
244
245
246
# 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
247
248
249
250


    echo Generating sitemap
    cd docs/web || report_failure
251
    find . -name "*.html" |  awk '{ print "http://dlib.net" substr($1,2)}' > sitemap.txt
252
253
254
255
256
257

    # 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

258
259
260
261
262
263
264
265
266
267
    cd ../..
}


./testenv || report_failure




# build all the html documentation
268
makedocs $1
269
270
271
272
273

# 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