makedocs 6.6 KB
Newer Older
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
#!/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;
}

30
31
32
33
34
get_short_revision_number()
{    
    RESULT=`hg log -r $1 | grep changeset | awk '{print $2}' | sed -e 's/:.*//'`  
}

35
36
37
38
39
40
41
42
43
makedocs ()
{

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



44
45
46
47
# figure out the short number that identifies this particular changeset
    get_short_revision_number `cat $REVNUM_FILE`
    LOGGER_REVNUM=$RESULT

48
49
50
51
52
53
54
    XSLT_OPTIONS="--nodtdattr   --nonet   --novalid"
    DATE=`date --date= "+%b %d, %Y"`;




# The revision number we are currently at
55
56
57
    CHANGESET_ID=`hg id -i | sed -e 's/\+//'`
    get_short_revision_number $CHANGESET_ID 
    REVISION=$RESULT
58
59
60
61
62
63
64
65
66
67
68


    if [ "$1" = "snapshot" ] 
        then
        RELEASE="developmental snapshot $REVISION"
    else
        MAJOR_NUM=`cat $COUNTER_FILE` 
        MINOR_NUM=`cat $MINOR_COUTNER_FILE` 
        RELEASE=${MAJOR_NUM}.${MINOR_NUM} 
    fi;

69
70
# get XML versions of the change logs
    BASE_LOGGER_REVNUM=`echo $LOGGER_REVNUM - 1000 | bc`
71
72
73
    NEXT_LOGGER_REVNUM=`echo $LOGGER_REVNUM + 1 | bc`
    echo Getting the mercurial change logs for revisions $NEXT_LOGGER_REVNUM:$REVISION
    hg log ../dlib --style=xml  -r$NEXT_LOGGER_REVNUM:$REVISION > docs/log.txt || report_failure
74
75
    echo Getting the mercurial change logs for revisions $BASE_LOGGER_REVNUM:$LOGGER_REVNUM
    hg log ../dlib --style=xml  -r$BASE_LOGGER_REVNUM:$LOGGER_REVNUM > docs/old_log.txt || report_failure 
76

77
78
79
# grab a clean copy of the repository 
    rm -rf docs/cache
    rm -rf cache.$$
80
    hg archive cache.$$ || report_failure
81
82
83
84
85
# put the stuff we need into the docs/cache folder
    mkdir docs/cache
    mv cache.$$/dlib docs/cache/
    mv cache.$$/examples docs/cache/
    rm -rf cache.$$
86
87


88
89
90
    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
91
92
93
    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
94
95
96
    echo "#endif"                           >> docs/cache/dlib/revision.h


97
98
99
100
    rm -rf docs/web
    rm -rf docs/chm/docs
    mkdir docs/web
    mkdir docs/chm/docs
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

    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



    # make the web page version
    echo Generate web page from XML and XSLT style sheet
    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
    \ls docs/*.xml | xargs -i echo -o {} docs/stylesheet.$$.xsl {} | \
        sed -e "s/\.xml /\.html /" | sed -e "s/-o docs/-o docs\/web/" | \
        grep -v main_menu. |\
        xargs -l xsltproc $XSLT_OPTIONS
    rm docs/stylesheet.$$.xsl

    # make the chm version
    echo Generate non-web page version from XML and XSLT style sheet
    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
    \ls docs/*.xml | xargs -i echo -o {} docs/stylesheet.$$.xsl {} | \
        sed -e "s/\.xml /\.html /" | sed -e "s/-o docs/-o docs\/chm\/docs/" | \
        grep -v main_menu. |\
        xargs -l xsltproc $XSLT_OPTIONS
    rm docs/stylesheet.$$.xsl


    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
176
    find . -name "*.html" |  awk '{ print "http://dlib.net" substr($1,2)}' > sitemap.txt
177
178
179
180
181
182

    # 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

183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
    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