]>
Commit | Line | Data |
---|---|---|
f9cbcbbc | 1 | #!/bin/sh |
3b2e2805 | 2 | |
3 | # Generate HTML documentation from GCC Texinfo docs. | |
66714cdc | 4 | # |
5 | # If you want to run this on a machine different from gcc.gnu.org, you | |
6 | # may need to adjust SVNROOT and WWWBASE below (or override them via the | |
7 | # environment). | |
3b2e2805 | 8 | |
b6fd6af0 | 9 | set -e |
10 | ||
3b2e2805 | 11 | # Run this from /tmp. |
12 | SVNROOT=${SVNROOT:-"file:///svn/gcc"} | |
13 | export SVNROOT | |
14 | ||
15 | PATH=/usr/local/bin:$PATH | |
16 | ||
d2517547 | 17 | MANUALS="cpp |
18 | cppinternals | |
19 | fastjar | |
20 | gcc | |
363add13 | 21 | gccgo |
d2517547 | 22 | gccint |
23 | gcj | |
d2517547 | 24 | gfortran |
25 | gfc-internals | |
d7e069ab | 26 | gnat_ugn |
d2517547 | 27 | gnat-style |
28 | gnat_rm | |
29 | libgomp | |
54e5af92 | 30 | libitm |
1513d233 | 31 | libquadmath |
d2517547 | 32 | libiberty |
33 | porting" | |
34 | ||
4cfa6404 | 35 | CSS=/gcc.css |
36 | ||
66714cdc | 37 | WWWBASE=${WWWBASE:-"/www/gcc/htdocs"} |
3b2e2805 | 38 | WWWBASE_PREFORMATTED=/www/gcc/htdocs-preformatted |
39 | WWWPREPROCESS='/www/gcc/bin/preprocess -r' | |
40 | ||
41 | # Process options -rrelease and -ddirectory | |
42 | RELEASE="" | |
43 | SUBDIR="" | |
44 | ||
45 | while [ $# -gt 0 ]; do | |
46 | case $1 in | |
47 | -r*) | |
48 | if [ -n "$RELEASE" ]; then | |
49 | echo "Multiple releases specified" >&2 | |
50 | exit 1 | |
51 | fi | |
52 | RELEASE="${1#-r}" | |
53 | if [ -z "$RELEASE" ]; then | |
54 | shift | |
55 | RELEASE="$1" | |
56 | if [ -z "$RELEASE" ]; then | |
57 | echo "No release specified with -r" >&2 | |
58 | exit 1 | |
59 | fi | |
60 | fi | |
61 | ;; | |
62 | -d*) | |
63 | if [ -n "$SUBDIR" ]; then | |
64 | echo "Multiple subdirectories specified" >&2 | |
65 | exit 1 | |
66 | fi | |
67 | SUBDIR="${1#-d}" | |
68 | if [ -z "$SUBDIR" ]; then | |
69 | shift | |
70 | SUBDIR="$1" | |
71 | if [ -z "$SUBDIR" ]; then | |
72 | echo "No subdirectory specified with -d" >&2 | |
73 | exit 1 | |
74 | fi | |
75 | fi | |
76 | ;; | |
77 | *) | |
78 | echo "Unknown argument \"$1\"" >&2 | |
79 | exit 1 | |
80 | ;; | |
81 | esac | |
82 | shift | |
83 | done | |
84 | ||
85 | if [ -n "$RELEASE" ] && [ -z "$SUBDIR" ]; then | |
86 | echo "Release specified without subdirectory" >&2 | |
87 | exit 1 | |
88 | fi | |
89 | ||
90 | if [ -z "$SUBDIR" ]; then | |
91 | DOCSDIR=$WWWBASE/onlinedocs | |
92 | else | |
93 | DOCSDIR=$WWWBASE/onlinedocs/$SUBDIR | |
94 | fi | |
95 | ||
66714cdc | 96 | if [ ! -d $WWWBASE ]; then |
97 | echo "WWW base directory \"$WWWBASE\" does not exist." >&2 | |
98 | exit 1 | |
99 | fi | |
100 | ||
3b2e2805 | 101 | if [ ! -d $DOCSDIR ]; then |
102 | mkdir $DOCSDIR | |
4fcdf6ae | 103 | chmod g+w $DOCSDIR |
3b2e2805 | 104 | fi |
105 | ||
106 | if [ -z "$RELEASE" ]; then | |
107 | RELEASE=trunk | |
108 | fi | |
109 | ||
110 | WORKDIR=/tmp/gcc-doc-update.$$ | |
111 | ||
b6fd6af0 | 112 | rm -rf $WORKDIR |
113 | mkdir $WORKDIR | |
3b2e2805 | 114 | cd $WORKDIR |
3b2e2805 | 115 | if [ "$RELEASE" = "trunk" ]; then |
2fe86132 | 116 | svn -q export $SVNROOT/$RELEASE gcc |
3b2e2805 | 117 | else |
2fe86132 | 118 | svn -q export $SVNROOT/tags/$RELEASE gcc |
3b2e2805 | 119 | fi |
120 | ||
9f4e01f8 | 121 | # Remove all unwanted files. This is needed to avoid packaging all the |
122 | # sources instead of only documentation sources. | |
6101e2f5 | 123 | # Note that we have to preserve gcc/jit/docs since the jit docs are |
124 | # not .texi files (Makefile, .rst and .png), and the jit docs use | |
125 | # include directives to pull in content from jit/jit-common.h and | |
126 | # jit/notes.txt, so we have to preserve those also. | |
b6fd6af0 | 127 | find gcc -type f \( -name '*.texi' \ |
128 | -o -path gcc/gcc/doc/install.texi2html \ | |
129 | -o -path gcc/gcc/doc/include/texinfo.tex \ | |
b6fd6af0 | 130 | -o -path gcc/gcc/BASE-VER \ |
131 | -o -path gcc/gcc/DEV-PHASE \ | |
57492b0f | 132 | -o -path "gcc/gcc/ada/doc/gnat_ugn/*.png" \ |
6101e2f5 | 133 | -o -path "gcc/gcc/jit/docs/*" \ |
134 | -o -path "gcc/gcc/jit/jit-common.h" \ | |
135 | -o -path "gcc/gcc/jit/notes.txt" \ | |
b6fd6af0 | 136 | -o -print0 \) | xargs -0 rm -f |
137 | ||
3b2e2805 | 138 | # Build a tarball of the sources. |
139 | tar cf docs-sources.tar gcc | |
140 | ||
141 | # The directory to pass to -I; this is the one with texinfo.tex | |
142 | # and fdl.texi. | |
143 | includedir=gcc/gcc/doc/include | |
144 | ||
3b2e2805 | 145 | # Generate gcc-vers.texi. |
146 | ( | |
147 | echo "@set version-GCC $(cat gcc/gcc/BASE-VER)" | |
148 | if [ "$(cat gcc/gcc/DEV-PHASE)" = "experimental" ]; then | |
149 | echo "@set DEVELOPMENT" | |
150 | else | |
151 | echo "@clear DEVELOPMENT" | |
152 | fi | |
74e1860e | 153 | echo "@set srcdir $WORKDIR/gcc/gcc" |
d25dc80e | 154 | echo "@set VERSION_PACKAGE (GCC)" |
9282b02e | 155 | echo "@set BUGURL @uref{http://gcc.gnu.org/bugs/}" |
3b2e2805 | 156 | ) > $includedir/gcc-vers.texi |
157 | ||
a26f5cbe | 158 | # Generate libquadmath-vers.texi. |
159 | echo "@set BUGURL @uref{http://gcc.gnu.org/bugs/}" \ | |
160 | > $includedir/libquadmath-vers.texi | |
161 | ||
3b2e2805 | 162 | # Now convert the relevant files from texi to HTML, PDF and PostScript. |
163 | for file in $MANUALS; do | |
164 | filename=`find . -name ${file}.texi` | |
165 | if [ "${filename}" ]; then | |
0abcc6ce | 166 | includes="-I ${includedir} -I `dirname ${filename}`" |
d7e069ab | 167 | if [ "$file" = "gnat_ugn" ]; then |
2e8a4fd8 | 168 | includes="$includes -I gcc/gcc/ada -I gcc/gcc/ada/doc/gnat_ugn" |
0abcc6ce | 169 | fi |
4cfa6404 | 170 | makeinfo --html --css-ref $CSS $includes -o ${file} ${filename} |
3b2e2805 | 171 | tar cf ${file}-html.tar ${file}/*.html |
0abcc6ce | 172 | texi2dvi $includes -o ${file}.dvi ${filename} </dev/null >/dev/null && dvips -o ${file}.ps ${file}.dvi |
173 | texi2pdf $includes -o ${file}.pdf ${filename} </dev/null | |
3b2e2805 | 174 | mkdir -p $DOCSDIR/$file |
175 | fi | |
176 | done | |
177 | ||
6101e2f5 | 178 | # The jit is a special-case, using sphinx rather than texinfo. |
abc57c6a | 179 | # Specifically, the jit docs need sphinx 1.0 or later. |
180 | # | |
181 | # The jit/docs Makefile uses the executable $(SPHINXBUILD), | |
182 | # defaulting to "sphinx-build". | |
183 | # | |
184 | # sphinx is packaged in Fedora and EPEL 6 within "python-sphinx", | |
185 | # and in openSUSE within "python-Sphinx". | |
186 | # | |
187 | # For EPEL6, python-sphinx is sphinx 0.6.6, which is missing various | |
188 | # directives (e.g. ":c:macro:"), so we need the variant | |
189 | # python-sphinx10 package. The latter installs its executable as | |
190 | # /usr/bin/sphinx-1.0-build | |
191 | # so we need to override SPHINXBUILD with this when invoking "make". | |
6101e2f5 | 192 | pushd gcc/gcc/jit/docs |
abc57c6a | 193 | make SPHINXBUILD=/usr/bin/sphinx-1.0-build html |
6101e2f5 | 194 | popd |
195 | cp -a gcc/gcc/jit/docs/_build/html jit | |
196 | mkdir -p $DOCSDIR/jit | |
197 | ||
5a280a92 | 198 | # Work around makeinfo generated file names and references with |
199 | # "_002d" instead of "-". | |
200 | find . -name '*.html' | while read f; do | |
201 | # Do this for the contents of each file. | |
202 | sed -i -e 's/_002d/-/g' "$f" | |
203 | # And rename files if necessary. | |
204 | ff=`echo $f | sed -e 's/_002d/-/g'`; | |
205 | if [ "$f" != "$ff" ]; then | |
206 | printf "Renaming %s to %s\n" "$f" "$ff" | |
207 | mv "$f" "$ff" | |
208 | fi | |
209 | done | |
210 | ||
3b2e2805 | 211 | # Then build a gzipped copy of each of the resulting .html, .ps and .tar files |
212 | for file in */*.html *.ps *.pdf *.tar; do | |
213 | cat $file | gzip --best > $file.gz | |
214 | done | |
215 | ||
216 | # On the 15th of the month, wipe all the old files from the | |
217 | # web server. | |
218 | today=`date +%d` | |
219 | if test $today = 15; then | |
220 | find $DOCSDIR -type f -maxdepth 1 -print | grep -v index.html | xargs rm | |
221 | for m in $MANUALS; do | |
b6fd6af0 | 222 | rm -f $DOCSDIR/$m/*.html $DOCSDIR/$m/*.html.gz |
3b2e2805 | 223 | done |
224 | fi | |
225 | ||
1bbc2a84 | 226 | # And copy the resulting files to the web server |
3b2e2805 | 227 | for file in */*.html *.ps *.pdf *.tar; do |
b6fd6af0 | 228 | if [ -f $DOCSDIR/$file ]; then |
229 | cat $DOCSDIR/$file | | |
230 | sed -e '/^<meta name=generator/d' \ | |
231 | -e '/^%DVIPSSource:/d' > file1 | |
232 | fi | |
3b2e2805 | 233 | cat $file | |
234 | sed -e '/^<meta name=generator/d' \ | |
235 | -e '/^%DVIPSSource:/d' > file2 | |
236 | if cmp -s file1 file2; then | |
237 | : | |
238 | else | |
239 | cp $file $DOCSDIR/$file | |
240 | cp $file.gz $DOCSDIR/$file.gz | |
241 | fi | |
242 | done | |
243 | ||
6101e2f5 | 244 | # Again, the jit is a special case, with nested subdirectories |
245 | # below "jit", and with some non-HTML files (.png images from us, | |
dab7110f | 246 | # plus .css and .js supplied by sphinx, and source files, renamed |
247 | # from .rst to .txt). | |
6101e2f5 | 248 | find jit \ |
249 | -name "*.html" -o -name "*.png" \ | |
dab7110f | 250 | -o -name "*.css" -o -name "*.js" \ |
251 | -o -name "*.txt" | | |
6101e2f5 | 252 | while read file ; do |
253 | # Note that $file here will contain path fragments beginning | |
254 | # with "jit/", e.g. "jit/cp/topics/functions.html" | |
255 | mkdir -p $(dirname $DOCSDIR/$file) | |
256 | cp $file $DOCSDIR/$file | |
257 | done | |
258 | ||
3b2e2805 | 259 | cd $DOCSDIR |
260 | ||
1bbc2a84 | 261 | # Finally, generate the installation documentation |
3b2e2805 | 262 | if [ "$RELEASE" = "trunk" ]; then |
263 | SOURCEDIR=$WORKDIR/gcc/gcc/doc | |
264 | DESTDIR=$WWWBASE_PREFORMATTED/install | |
265 | export SOURCEDIR | |
266 | export DESTDIR | |
267 | $WORKDIR/gcc/gcc/doc/install.texi2html | |
3b2e2805 | 268 | |
1bbc2a84 | 269 | # Preprocess the entire web site, not just the install docs! |
270 | echo "Invoking $WWWPREPROCESS" | |
271 | $WWWPREPROCESS |grep -v '^ Warning: Keeping' | |
272 | fi | |
d2517547 | 273 | |
3b2e2805 | 274 | # Clean up behind us. |
275 | ||
276 | rm -rf $WORKDIR |