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.
5 scriptversion
=2010-11-29.11
7 # Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
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.
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.
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/>.
23 # Original author: Mohit Agarwal.
24 # Send bug reports and any other correspondence to bug-texinfo@gnu.org.
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
31 # An up-to-date copy is also maintained in Gnulib (gnu.org/software/gnulib).
36 scripturl
="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs.sh"
37 templateurl
="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs_template"
39 : ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="}
40 : ${MAKEINFO="makeinfo"}
41 : ${TEXI2DVI="texi2dvi -t @finalout"}
43 : ${DOCBOOK2HTML="docbook2html"}
44 : ${DOCBOOK2PDF="docbook2pdf"}
45 : ${DOCBOOK2PS="docbook2ps"}
46 : ${DOCBOOK2TXT="docbook2txt"}
47 : ${GENDOCS_TEMPLATE_DIR="."}
48 : ${TEXI2HTML="texi2html"}
52 version
="gendocs.sh $scriptversion
54 Copyright 2010 Free Software Foundation, Inc.
55 There is NO warranty. You may redistribute this software
56 under the terms of the GNU General Public License.
57 For more information about these matters, see the files named COPYING."
59 usage
="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE
61 Generate various output formats from PACKAGE.texinfo (or .texi or .txi) source.
62 See the GNU Maintainers document for a more extensive discussion:
63 http://www.gnu.org/prep/maintain_toc.html
66 -s SRCFILE read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi}
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.
75 Simple example: $prog --email bug-gnu-emacs@gnu.org emacs \"GNU Emacs Manual\"
81 $prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\"
83 Output will be in a new subdirectory \"manual\" (by default, use -o OUTDIR
84 to override). Move all the new files into your web CVS tree, as
85 explained in the Web Pages node of maintain.texi.
87 Please use the --email ADDRESS option to specify your bug-reporting
88 address in the generated HTML pages.
90 MANUAL-TITLE is included as part of the HTML <title> of the overall
91 manual/index.html file. It should include the name of the package being
92 documented. manual/index.html is created by substitution from the file
93 $GENDOCS_TEMPLATE_DIR/gendocs_template. (Feel free to modify the
94 generic template for your own purposes.)
96 If you have several manuals, you'll need to run this script several
97 times with different MANUAL values, specifying a different output
98 directory with -o each time. Then write (by hand) an overall index.html
99 with links to them all.
101 If a manual's Texinfo sources are spread across several directories,
102 first 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.)
105 You can set the environment variables MAKEINFO, TEXI2DVI, TEXI2HTML, and
106 DVIPS to control the programs that get executed, and
107 GENDOCS_TEMPLATE_DIR to control where the gendocs_template file is
108 looked for. With --docbook, the environment variables DOCBOOK2HTML,
109 DOCBOOK2PDF, DOCBOOK2PS, and DOCBOOK2TXT are also respected.
111 By default, makeinfo and texi2dvi are run in the default (English)
112 locale, since that's the language of most Texinfo manuals. If you
113 happen to have a non-English manual and non-English web site, see the
114 SETLANG setting in the source.
116 Email bug reports or enhancement requests to bug-texinfo@gnu.org.
121 size
=`ls -ksl $1 | awk '{print $1}'`
127 EMAIL
=webmasters@gnu.org
# please override with --email
132 while test $# -gt 0; do
134 --email) shift; EMAIL
=$1;;
135 --help) echo "$usage"; exit 0;;
136 --version) echo "$version"; exit 0;;
137 -s) shift; srcfile
=$1;;
138 -o) shift; outdir
=$1;;
139 --docbook) docbook
=yes;;
140 --html) shift; htmlarg
=$1;;
141 --texi2html) use_texi2html
=1;;
143 echo "$0: Unknown option \`$1'." >&2
144 echo "$0: Try \`--help' for more information." >&2
147 if test -z "$PACKAGE"; then
149 elif test -z "$MANUAL_TITLE"; then
152 echo "$0: extra non-option argument \`$1'." >&2
159 # For most of the following, the base name is just $PACKAGE
162 if test -n "$srcfile"; then
163 # but here, we use the basename of $srcfile
164 base
=`basename "$srcfile"`
166 *.txi|
*.texi|
*.texinfo
) base
=`echo "$base"|sed 's/\.[texinfo]*$//'`;;
169 elif test -s "$srcdir/$PACKAGE.texinfo"; then
170 srcfile
=$srcdir/$PACKAGE.texinfo
171 elif test -s "$srcdir/$PACKAGE.texi"; then
172 srcfile
=$srcdir/$PACKAGE.texi
173 elif test -s "$srcdir/$PACKAGE.txi"; then
174 srcfile
=$srcdir/$PACKAGE.txi
176 echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2
180 if 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
187 /*) abs_outdir
=$outdir;;
188 *) abs_outdir
=$srcdir/$outdir;;
191 echo Generating output formats
for $srcfile
193 cmd
="$SETLANG $MAKEINFO -o $PACKAGE.info \"$srcfile\""
194 echo "Generating info files... ($cmd)"
197 tar czf
"$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info
*
198 info_tgz_size
=`calcsize "$outdir/$PACKAGE.info.tar.gz"`
199 # do not mv the info files, there's no point in having them available
200 # separately on the web.
202 cmd
="$SETLANG ${TEXI2DVI} \"$srcfile\""
203 echo "Generating dvi ... ($cmd)"
206 # now, before we compress dvi:
207 echo Generating postscript...
209 gzip -f -9 $PACKAGE.ps
210 ps_gz_size
=`calcsize $PACKAGE.ps.gz`
211 mv $PACKAGE.ps.gz
"$outdir/"
213 # compress/finish dvi:
214 gzip -f -9 $PACKAGE.dvi
215 dvi_gz_size
=`calcsize $PACKAGE.dvi.gz`
216 mv $PACKAGE.dvi.gz
"$outdir/"
218 cmd
="$SETLANG ${TEXI2DVI} --pdf \"$srcfile\""
219 echo "Generating pdf ... ($cmd)"
221 pdf_size
=`calcsize $PACKAGE.pdf`
222 mv $PACKAGE.pdf
"$outdir/"
224 cmd
="$SETLANG $MAKEINFO -o $PACKAGE.txt --no-split --no-headers \"$srcfile\""
225 echo "Generating ASCII... ($cmd)"
227 ascii_size
=`calcsize $PACKAGE.txt`
228 gzip -f -9 -c $PACKAGE.txt
>"$outdir/$PACKAGE.txt.gz"
229 ascii_gz_size
=`calcsize "$outdir/$PACKAGE.txt.gz"`
230 mv $PACKAGE.txt
"$outdir/"
234 opt
="--split=$1 $htmlarg --node-files"
235 cmd
="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\""
236 echo "Generating html by $1... ($cmd)"
238 split_html_dir
=$PACKAGE.html
240 cd ${split_html_dir} ||
exit 1
241 ln -sf ${PACKAGE}.html index.html
242 tar -czf "$abs_outdir/${PACKAGE}.html_$1.tar.gz" -- *.html
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/"
248 rmdir ${split_html_dir}
251 if 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
257 html_mono_size
=`calcsize $PACKAGE.html`
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/"
262 cmd
="$SETLANG $MAKEINFO --html -o $PACKAGE.html $htmlarg \"$srcfile\""
263 echo "Generating html by node... ($cmd)"
265 split_html_dir
=$PACKAGE.html
267 cd ${split_html_dir} ||
exit 1
268 tar -czf "$abs_outdir/${PACKAGE}.html_node.tar.gz" -- *.html
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/"
274 rmdir ${split_html_dir}
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
280 html_mono_size
=`calcsize $PACKAGE.html`
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/"
290 echo Making .
tar.gz
for sources...
294 srcfiles
=`ls *.texinfo *.texi *.txi *.eps 2>/dev/null` || true
295 tar cvzfh
"$abs_outdir/$PACKAGE.texi.tar.gz" $srcfiles
297 texi_tgz_size
=`calcsize "$outdir/$PACKAGE.texi.tar.gz"`
299 if test -n "$docbook"; then
300 cmd
="$SETLANG $MAKEINFO -o - --docbook \"$srcfile\" > ${srcdir}/$PACKAGE-db.xml"
301 echo "Generating docbook XML... ($cmd)"
303 docbook_xml_size
=`calcsize $PACKAGE-db.xml`
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/"
308 cmd
="${DOCBOOK2HTML} -o $split_html_db_dir \"${outdir}/$PACKAGE-db.xml\""
309 echo "Generating docbook HTML... ($cmd)"
311 split_html_db_dir
=html_node_db
313 cd ${split_html_db_dir} ||
exit 1
314 tar -czf "$abs_outdir/${PACKAGE}.html_node_db.tar.gz" -- *.html
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/"
320 rmdir ${split_html_db_dir}
322 cmd
="${DOCBOOK2TXT} \"${outdir}/$PACKAGE-db.xml\""
323 echo "Generating docbook ASCII... ($cmd)"
325 docbook_ascii_size
=`calcsize $PACKAGE-db.txt`
326 mv $PACKAGE-db.txt
"$outdir/"
328 cmd
="${DOCBOOK2PS} \"${outdir}/$PACKAGE-db.xml\""
329 echo "Generating docbook PS... ($cmd)"
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/"
335 cmd
="${DOCBOOK2PDF} \"${outdir}/$PACKAGE-db.xml\""
336 echo "Generating docbook PDF... ($cmd)"
338 docbook_pdf_size
=`calcsize $PACKAGE-db.pdf`
339 mv $PACKAGE-db.pdf
"$outdir/"
342 echo "Writing index file..."
343 if test -z "$use_texi2html"; then
344 CONDS
="/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\
345 /%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d"
347 CONDS
="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d"
349 curdate
=`$SETLANG date '+%B %d, %Y'`
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" \
376 $GENDOCS_TEMPLATE_DIR/gendocs_template
>"$outdir/index.html"
378 echo "Done, see $outdir/ subdirectory for new files."
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: "$"