makedocs 7.78 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
}

14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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;

32
33
34
35
36
37
38
39
40
41
42
    echo "</pre></body></html>" >> $1.html;
}

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

45
46
47
48
49
get_short_revision_number()
{    
    RESULT=`hg log -r $1 | grep changeset | awk '{print $2}' | sed -e 's/:.*//'`  
}

50
51
52
53
54
get_last_modified_date()
{
    RESULT=`hg log $1 -l1 --template '{date|date}\n' | awk '{ print $2" "$3", " $5}'`
}

55
56
57
58
59
60
61
62
63
makedocs ()
{

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



64
65
66
67
# figure out the short number that identifies this particular changeset
    get_short_revision_number `cat $REVNUM_FILE`
    LOGGER_REVNUM=$RESULT

68
    XSLT_OPTIONS="--nodtdattr   --nonet   --novalid"
69
    DATE_TODAY=`date --date= "+%b %d, %Y"`;
70
71
72
73
74




# The revision number we are currently at
75
76
77
    CHANGESET_ID=`hg id -i | sed -e 's/\+//'`
    get_short_revision_number $CHANGESET_ID 
    REVISION=$RESULT
78
79


80
81
    MAJOR_NUM=`cat $COUNTER_FILE` 
    MINOR_NUM=`cat $MINOR_COUTNER_FILE` 
82
83
84
85
86
87
    if [ "$1" = "makerel" ] 
        then
        RELEASE=${MAJOR_NUM}.${MINOR_NUM} 
    else
        RELEASE=${MAJOR_NUM}.`echo ${MINOR_NUM}+1|bc`-RC
    fi;
88

89
90
# get XML versions of the change logs
    BASE_LOGGER_REVNUM=`echo $LOGGER_REVNUM - 1000 | bc`
91
92
    NEXT_LOGGER_REVNUM=`echo $LOGGER_REVNUM + 1 | bc`
    echo Getting the mercurial change logs for revisions $NEXT_LOGGER_REVNUM:$REVISION
93
    hg log -v ../dlib --style=xml  -r$NEXT_LOGGER_REVNUM:$REVISION > docs/log.txt || report_failure
94
    echo Getting the mercurial change logs for revisions $BASE_LOGGER_REVNUM:$LOGGER_REVNUM
95
    hg log -v ../dlib --style=xml  -r$BASE_LOGGER_REVNUM:$LOGGER_REVNUM > docs/old_log.txt || report_failure 
96

97
98
# grab a clean copy of the repository 
    rm -rf docs/cache
99
100
    rm -rf docs/web
    rm -rf docs/chm/docs
101
    rm -rf cache.$$
102
    hg archive cache.$$ || report_failure
103
104
105
106
# put the stuff we need into the docs/cache folder
    mkdir docs/cache
    mv cache.$$/dlib docs/cache/
    mv cache.$$/examples docs/cache/
107
    mv cache.$$/python_examples docs/cache/
108
    mv cache.$$/tools docs/cache/
109
    rm -rf cache.$$
110
111


112
113
114
    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
115
116
117
    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
118
119
120
    echo "#endif"                           >> docs/cache/dlib/revision.h


121
122
123
124
    rm -rf docs/web
    rm -rf docs/chm/docs
    mkdir docs/web
    mkdir docs/chm/docs
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146

    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
147
148
149
150
151
    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/
152

153
154
    cp docs/*.gif docs/web
    cp docs/*.gif docs/chm/docs
155
156
    cp -r docs/guipics docs/web
    cp -r docs/guipics docs/chm/docs
157
158
159
    cp docs/*.html docs/web
    cp docs/*.html docs/chm/docs
    cp docs/*.png docs/web
160
    cp docs/*.ico docs/web
161
    cp docs/*.png docs/chm/docs
162
    cp docs/*.ico docs/chm/docs
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178

    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



179
180
181
182
183
    # 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
184

185
        # 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
186
        if [ "${i}" = "docs/release_notes.xml" -o ${i} = "docs/old_release_notes.xml" \
187
188
             -o ${i} = "docs/change_log.xml" -o ${i} = "docs/old_change_log.xml" \
             -o ${i} = "docs/index.xml" ] 
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
        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
210

211
212
213
214
215
216
217
# 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
218
219
220
221


    echo Generating sitemap
    cd docs/web || report_failure
222
    find . -name "*.html" |  awk '{ print "http://dlib.net" substr($1,2)}' > sitemap.txt
223
224
225
226
227
228

    # 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

229
230
231
232
233
234
235
236
237
238
    cd ../..
}


./testenv || report_failure




# build all the html documentation
239
makedocs $1
240
241
242
243
244

# 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