Merge remote-tracking branch 'local-2.0/stable-2.0'
[bpt/guile.git] / build-aux / gendocs.sh
CommitLineData
61cd9dc9 1#!/bin/sh -e
c84bdaf6
LC
2# gendocs.sh -- generate a GNU manual in many formats. This script is
3# mentioned in maintain.texi. See the help message below for usage details.
4
dd7d0148 5scriptversion=2011-04-08.14
c84bdaf6 6
ab4d62ad
LC
7# Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
8# Foundation, Inc.
c84bdaf6
LC
9#
10# This program is free software: you can redistribute it and/or modify
11# it under the terms of the GNU General Public License as published by
12# the Free Software Foundation; either version 3 of the License, or
13# (at your option) any later version.
14#
15# This program is distributed in the hope that it will be useful,
16# but WITHOUT ANY WARRANTY; without even the implied warranty of
17# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18# GNU General Public License for more details.
19#
20# You should have received a copy of the GNU General Public License
21# along with this program. If not, see <http://www.gnu.org/licenses/>.
22#
23# Original author: Mohit Agarwal.
24# Send bug reports and any other correspondence to bug-texinfo@gnu.org.
0f00f2c3
LC
25#
26# The latest version of this script, and the companion template, is
27# available from Texinfo CVS:
28# http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs.sh
29# http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs_template
30#
31# An up-to-date copy is also maintained in Gnulib (gnu.org/software/gnulib).
c84bdaf6
LC
32
33prog=`basename "$0"`
34srcdir=`pwd`
35
36scripturl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs.sh"
37templateurl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs_template"
38
39: ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="}
40: ${MAKEINFO="makeinfo"}
41: ${TEXI2DVI="texi2dvi -t @finalout"}
42: ${DVIPS="dvips"}
43: ${DOCBOOK2HTML="docbook2html"}
44: ${DOCBOOK2PDF="docbook2pdf"}
45: ${DOCBOOK2PS="docbook2ps"}
46: ${DOCBOOK2TXT="docbook2txt"}
47: ${GENDOCS_TEMPLATE_DIR="."}
48: ${TEXI2HTML="texi2html"}
49unset CDPATH
50unset use_texi2html
51
52version="gendocs.sh $scriptversion
53
9157d901 54Copyright 2010 Free Software Foundation, Inc.
c84bdaf6
LC
55There is NO warranty. You may redistribute this software
56under the terms of the GNU General Public License.
57For more information about these matters, see the files named COPYING."
58
59usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE
60
61Generate various output formats from PACKAGE.texinfo (or .texi or .txi) source.
62See the GNU Maintainers document for a more extensive discussion:
63 http://www.gnu.org/prep/maintain_toc.html
64
65Options:
dde9c5a4 66 -s SRCFILE read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi}
c84bdaf6
LC
67 -o OUTDIR write files into OUTDIR, instead of manual/.
68 --email ADR use ADR as contact in generated web pages.
69 --docbook convert to DocBook too (xml, txt, html, pdf and ps).
70 --html ARG pass indicated ARG to makeinfo or texi2html for HTML targets.
71 --texi2html use texi2html to generate HTML targets.
72 --help display this help and exit successfully.
73 --version display version information and exit successfully.
74
75Simple example: $prog --email bug-gnu-emacs@gnu.org emacs \"GNU Emacs Manual\"
76
77Typical sequence:
78 cd PACKAGESOURCE/doc
79 wget \"$scripturl\"
80 wget \"$templateurl\"
81 $prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\"
82
83Output will be in a new subdirectory \"manual\" (by default, use -o OUTDIR
84to override). Move all the new files into your web CVS tree, as
85explained in the Web Pages node of maintain.texi.
86
87Please use the --email ADDRESS option to specify your bug-reporting
88address in the generated HTML pages.
89
90MANUAL-TITLE is included as part of the HTML <title> of the overall
91manual/index.html file. It should include the name of the package being
92documented. manual/index.html is created by substitution from the file
93$GENDOCS_TEMPLATE_DIR/gendocs_template. (Feel free to modify the
94generic template for your own purposes.)
95
96If you have several manuals, you'll need to run this script several
97times with different MANUAL values, specifying a different output
98directory with -o each time. Then write (by hand) an overall index.html
99with links to them all.
100
101If a manual's Texinfo sources are spread across several directories,
102first copy or symlink all Texinfo sources into a single directory.
103(Part of the script's work is to make a tar.gz of the sources.)
104
9157d901
LC
105You can set the environment variables MAKEINFO, TEXI2DVI, TEXI2HTML, and
106DVIPS to control the programs that get executed, and
107GENDOCS_TEMPLATE_DIR to control where the gendocs_template file is
108looked for. With --docbook, the environment variables DOCBOOK2HTML,
109DOCBOOK2PDF, DOCBOOK2PS, and DOCBOOK2TXT are also respected.
c84bdaf6 110
9157d901
LC
111By default, makeinfo and texi2dvi are run in the default (English)
112locale, since that's the language of most Texinfo manuals. If you
113happen to have a non-English manual and non-English web site, see the
114SETLANG setting in the source.
c84bdaf6
LC
115
116Email bug reports or enhancement requests to bug-texinfo@gnu.org.
117"
118
119calcsize()
120{
121 size=`ls -ksl $1 | awk '{print $1}'`
122 echo $size
123}
124
125MANUAL_TITLE=
126PACKAGE=
127EMAIL=webmasters@gnu.org # please override with --email
128htmlarg=
129outdir=manual
dde9c5a4 130srcfile=
c84bdaf6
LC
131
132while test $# -gt 0; do
133 case $1 in
134 --email) shift; EMAIL=$1;;
135 --help) echo "$usage"; exit 0;;
136 --version) echo "$version"; exit 0;;
dde9c5a4 137 -s) shift; srcfile=$1;;
c84bdaf6
LC
138 -o) shift; outdir=$1;;
139 --docbook) docbook=yes;;
140 --html) shift; htmlarg=$1;;
141 --texi2html) use_texi2html=1;;
142 -*)
143 echo "$0: Unknown option \`$1'." >&2
144 echo "$0: Try \`--help' for more information." >&2
145 exit 1;;
146 *)
147 if test -z "$PACKAGE"; then
148 PACKAGE=$1
149 elif test -z "$MANUAL_TITLE"; then
150 MANUAL_TITLE=$1
151 else
152 echo "$0: extra non-option argument \`$1'." >&2
153 exit 1
154 fi;;
155 esac
156 shift
157done
158
a927b6c1
LC
159# For most of the following, the base name is just $PACKAGE
160base=$PACKAGE
161
dde9c5a4 162if test -n "$srcfile"; then
a927b6c1
LC
163 # but here, we use the basename of $srcfile
164 base=`basename "$srcfile"`
165 case $base in
166 *.txi|*.texi|*.texinfo) base=`echo "$base"|sed 's/\.[texinfo]*$//'`;;
167 esac
168 PACKAGE=$base
dde9c5a4 169elif test -s "$srcdir/$PACKAGE.texinfo"; then
c84bdaf6
LC
170 srcfile=$srcdir/$PACKAGE.texinfo
171elif test -s "$srcdir/$PACKAGE.texi"; then
172 srcfile=$srcdir/$PACKAGE.texi
173elif test -s "$srcdir/$PACKAGE.txi"; then
174 srcfile=$srcdir/$PACKAGE.txi
175else
176 echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2
177 exit 1
178fi
179
180if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then
181 echo "$0: cannot read $GENDOCS_TEMPLATE_DIR/gendocs_template." >&2
182 echo "$0: it is available from $templateurl." >&2
183 exit 1
184fi
185
186case $outdir in
0f00f2c3
LC
187 /*) abs_outdir=$outdir;;
188 *) abs_outdir=$srcdir/$outdir;;
c84bdaf6
LC
189esac
190
191echo Generating output formats for $srcfile
192
193cmd="$SETLANG $MAKEINFO -o $PACKAGE.info \"$srcfile\""
194echo "Generating info files... ($cmd)"
195eval "$cmd"
0f00f2c3
LC
196mkdir -p "$outdir/"
197tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info*
198info_tgz_size=`calcsize "$outdir/$PACKAGE.info.tar.gz"`
c84bdaf6
LC
199# do not mv the info files, there's no point in having them available
200# separately on the web.
201
9157d901 202cmd="$SETLANG ${TEXI2DVI} \"$srcfile\""
c84bdaf6
LC
203echo "Generating dvi ... ($cmd)"
204eval "$cmd"
205
206# now, before we compress dvi:
207echo Generating postscript...
208${DVIPS} $PACKAGE -o
209gzip -f -9 $PACKAGE.ps
210ps_gz_size=`calcsize $PACKAGE.ps.gz`
0f00f2c3 211mv $PACKAGE.ps.gz "$outdir/"
c84bdaf6
LC
212
213# compress/finish dvi:
214gzip -f -9 $PACKAGE.dvi
215dvi_gz_size=`calcsize $PACKAGE.dvi.gz`
0f00f2c3 216mv $PACKAGE.dvi.gz "$outdir/"
c84bdaf6 217
9157d901 218cmd="$SETLANG ${TEXI2DVI} --pdf \"$srcfile\""
c84bdaf6
LC
219echo "Generating pdf ... ($cmd)"
220eval "$cmd"
221pdf_size=`calcsize $PACKAGE.pdf`
0f00f2c3 222mv $PACKAGE.pdf "$outdir/"
c84bdaf6
LC
223
224cmd="$SETLANG $MAKEINFO -o $PACKAGE.txt --no-split --no-headers \"$srcfile\""
225echo "Generating ASCII... ($cmd)"
226eval "$cmd"
227ascii_size=`calcsize $PACKAGE.txt`
0f00f2c3
LC
228gzip -f -9 -c $PACKAGE.txt >"$outdir/$PACKAGE.txt.gz"
229ascii_gz_size=`calcsize "$outdir/$PACKAGE.txt.gz"`
230mv $PACKAGE.txt "$outdir/"
c84bdaf6
LC
231
232html_split()
233{
234 opt="--split=$1 $htmlarg --node-files"
235 cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\""
236 echo "Generating html by $1... ($cmd)"
237 eval "$cmd"
238 split_html_dir=$PACKAGE.html
239 (
240 cd ${split_html_dir} || exit 1
241 ln -sf ${PACKAGE}.html index.html
0f00f2c3 242 tar -czf "$abs_outdir/${PACKAGE}.html_$1.tar.gz" -- *.html
c84bdaf6 243 )
0f00f2c3
LC
244 eval html_$1_tgz_size=`calcsize "$outdir/${PACKAGE}.html_$1.tar.gz"`
245 rm -f "$outdir"/html_$1/*.html
246 mkdir -p "$outdir/html_$1/"
247 mv ${split_html_dir}/*.html "$outdir/html_$1/"
c84bdaf6
LC
248 rmdir ${split_html_dir}
249}
250
251if test -z "$use_texi2html"; then
252 opt="--no-split --html -o $PACKAGE.html $htmlarg"
253 cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
254 echo "Generating monolithic html... ($cmd)"
255 rm -rf $PACKAGE.html # in case a directory is left over
256 eval "$cmd"
257 html_mono_size=`calcsize $PACKAGE.html`
0f00f2c3
LC
258 gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz"
259 html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"`
260 mv $PACKAGE.html "$outdir/"
c84bdaf6
LC
261
262 cmd="$SETLANG $MAKEINFO --html -o $PACKAGE.html $htmlarg \"$srcfile\""
263 echo "Generating html by node... ($cmd)"
264 eval "$cmd"
265 split_html_dir=$PACKAGE.html
266 (
267 cd ${split_html_dir} || exit 1
0f00f2c3 268 tar -czf "$abs_outdir/${PACKAGE}.html_node.tar.gz" -- *.html
c84bdaf6 269 )
0f00f2c3
LC
270 html_node_tgz_size=`calcsize "$outdir/${PACKAGE}.html_node.tar.gz"`
271 rm -f "$outdir"/html_node/*.html
272 mkdir -p "$outdir/html_node/"
273 mv ${split_html_dir}/*.html "$outdir/html_node/"
c84bdaf6
LC
274 rmdir ${split_html_dir}
275else
276 cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $htmlarg \"$srcfile\""
277 echo "Generating monolithic html... ($cmd)"
278 rm -rf $PACKAGE.html # in case a directory is left over
279 eval "$cmd"
280 html_mono_size=`calcsize $PACKAGE.html`
0f00f2c3
LC
281 gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz"
282 html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"`
283 mv $PACKAGE.html "$outdir/"
c84bdaf6
LC
284
285 html_split node
286 html_split chapter
287 html_split section
288fi
289
290echo Making .tar.gz for sources...
dde9c5a4 291d=`dirname $srcfile`
0f00f2c3
LC
292(
293 cd "$d"
294 srcfiles=`ls *.texinfo *.texi *.txi *.eps 2>/dev/null` || true
295 tar cvzfh "$abs_outdir/$PACKAGE.texi.tar.gz" $srcfiles
296)
297texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"`
c84bdaf6
LC
298
299if test -n "$docbook"; then
300 cmd="$SETLANG $MAKEINFO -o - --docbook \"$srcfile\" > ${srcdir}/$PACKAGE-db.xml"
dde9c5a4 301 echo "Generating docbook XML... ($cmd)"
c84bdaf6
LC
302 eval "$cmd"
303 docbook_xml_size=`calcsize $PACKAGE-db.xml`
0f00f2c3
LC
304 gzip -f -9 -c $PACKAGE-db.xml >"$outdir/$PACKAGE-db.xml.gz"
305 docbook_xml_gz_size=`calcsize "$outdir/$PACKAGE-db.xml.gz"`
306 mv $PACKAGE-db.xml "$outdir/"
c84bdaf6 307
dd7d0148 308 split_html_db_dir=html_node_db
0f00f2c3 309 cmd="${DOCBOOK2HTML} -o $split_html_db_dir \"${outdir}/$PACKAGE-db.xml\""
c84bdaf6
LC
310 echo "Generating docbook HTML... ($cmd)"
311 eval "$cmd"
c84bdaf6
LC
312 (
313 cd ${split_html_db_dir} || exit 1
0f00f2c3 314 tar -czf "$abs_outdir/${PACKAGE}.html_node_db.tar.gz" -- *.html
c84bdaf6 315 )
0f00f2c3
LC
316 html_node_db_tgz_size=`calcsize "$outdir/${PACKAGE}.html_node_db.tar.gz"`
317 rm -f "$outdir"/html_node_db/*.html
318 mkdir -p "$outdir/html_node_db"
319 mv ${split_html_db_dir}/*.html "$outdir/html_node_db/"
c84bdaf6
LC
320 rmdir ${split_html_db_dir}
321
0f00f2c3 322 cmd="${DOCBOOK2TXT} \"${outdir}/$PACKAGE-db.xml\""
c84bdaf6
LC
323 echo "Generating docbook ASCII... ($cmd)"
324 eval "$cmd"
325 docbook_ascii_size=`calcsize $PACKAGE-db.txt`
0f00f2c3 326 mv $PACKAGE-db.txt "$outdir/"
c84bdaf6 327
0f00f2c3 328 cmd="${DOCBOOK2PS} \"${outdir}/$PACKAGE-db.xml\""
dde9c5a4 329 echo "Generating docbook PS... ($cmd)"
c84bdaf6 330 eval "$cmd"
0f00f2c3
LC
331 gzip -f -9 -c $PACKAGE-db.ps >"$outdir/$PACKAGE-db.ps.gz"
332 docbook_ps_gz_size=`calcsize "$outdir/$PACKAGE-db.ps.gz"`
333 mv $PACKAGE-db.ps "$outdir/"
c84bdaf6 334
0f00f2c3 335 cmd="${DOCBOOK2PDF} \"${outdir}/$PACKAGE-db.xml\""
c84bdaf6
LC
336 echo "Generating docbook PDF... ($cmd)"
337 eval "$cmd"
338 docbook_pdf_size=`calcsize $PACKAGE-db.pdf`
0f00f2c3 339 mv $PACKAGE-db.pdf "$outdir/"
c84bdaf6
LC
340fi
341
342echo "Writing index file..."
343if test -z "$use_texi2html"; then
344 CONDS="/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\
345 /%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d"
346else
347 CONDS="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d"
348fi
349curdate=`$SETLANG date '+%B %d, %Y'`
350sed \
351 -e "s!%%TITLE%%!$MANUAL_TITLE!g" \
352 -e "s!%%EMAIL%%!$EMAIL!g" \
353 -e "s!%%PACKAGE%%!$PACKAGE!g" \
354 -e "s!%%DATE%%!$curdate!g" \
355 -e "s!%%HTML_MONO_SIZE%%!$html_mono_size!g" \
356 -e "s!%%HTML_MONO_GZ_SIZE%%!$html_mono_gz_size!g" \
357 -e "s!%%HTML_NODE_TGZ_SIZE%%!$html_node_tgz_size!g" \
358 -e "s!%%HTML_SECTION_TGZ_SIZE%%!$html_section_tgz_size!g" \
359 -e "s!%%HTML_CHAPTER_TGZ_SIZE%%!$html_chapter_tgz_size!g" \
360 -e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \
361 -e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \
362 -e "s!%%PDF_SIZE%%!$pdf_size!g" \
363 -e "s!%%PS_GZ_SIZE%%!$ps_gz_size!g" \
364 -e "s!%%ASCII_SIZE%%!$ascii_size!g" \
365 -e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \
366 -e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \
367 -e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \
368 -e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \
369 -e "s!%%DOCBOOK_PS_GZ_SIZE%%!$docbook_ps_gz_size!g" \
370 -e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \
371 -e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \
372 -e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \
373 -e "s,%%SCRIPTURL%%,$scripturl,g" \
374 -e "s!%%SCRIPTNAME%%!$prog!g" \
375 -e "$CONDS" \
0f00f2c3 376$GENDOCS_TEMPLATE_DIR/gendocs_template >"$outdir/index.html"
c84bdaf6
LC
377
378echo "Done, see $outdir/ subdirectory for new files."
379
380# Local variables:
381# eval: (add-hook 'write-file-hooks 'time-stamp)
382# time-stamp-start: "scriptversion="
383# time-stamp-format: "%:y-%02m-%02d.%02H"
384# time-stamp-end: "$"
385# End: