File: makedocs

package info (click to toggle)
dlib 19.24%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 284,176 kB
  • sloc: cpp: 316,461; xml: 26,260; python: 1,628; sh: 356; java: 229; makefile: 179; javascript: 73; perl: 18
file content (279 lines) | stat: -rwxr-xr-x 9,275 bytes parent folder | download | duplicates (2)
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
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
#!/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
}


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



    LOGGER_REVNUM=`cat $REVNUM_FILE`

    XSLT_OPTIONS="--nodtdattr   --nonet   --novalid"
    DATE_TODAY=`date --date= "+%b %d, %Y"`;


    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
    echo Getting the git change logs for $LOGGER_REVNUM..HEAD 
    git_logs_as_xml $LOGGER_REVNUM..HEAD docs/git-logs.xml || report_failure

    # grab a clean copy of the repository 
    rm -rf docs/cache
    rm -rf docs/web
    rm -rf docs/chm/docs
    cd ..
    mkdir -p docs/docs/cache
    git archive HEAD | tar -xC docs/docs/cache
    cd docs
    rm -rf docs/cache/docs

    CHANGESET_ID=`git log -1 --pretty=format:%H`
    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 "// Git Changeset 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 unless you say ./makedocs fast
    if [ "$1" != "fast" ] 
    then
        cd ..
        python setup.py build || report_failure
        python setup.py build_sphinx -c docs/docs/python --build-dir docs/sphinx.$$ || report_failure
        # sphinx will read in the _dlib_pybind11 module and use that to name everything.  But that's
        # not what we want, so we rename that to dlib everywhere.  You would think sphinx would be
        # able to deal with the dlib/__init__.py file and this wouldn't be necessary, but that
        # doesn't seem to be the case.
        find docs/sphinx.$$ -type f | xargs sed -i -e "s/_dlib_pybind11/dlib/g"
        cd docs
        cp -r sphinx.$$/html docs/web/python
        mv  sphinx.$$/html docs/chm/docs/python
        rm -rf sphinx.$$
    fi;


    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 -r docs/images docs/web
    cp -r docs/images 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/*.pdf docs/web
    cp docs/*.jpg docs/web
    cp docs/*.webm docs/web
    cp docs/*.ico docs/web
    cp docs/*.png docs/chm/docs
    cp docs/*.pdf docs/chm/docs
    cp docs/*.jpg docs/chm/docs
    cp docs/*.webm 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/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