Commit | Line | Data |
---|---|---|
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 | 5 | scriptversion=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 | |
33 | prog=`basename "$0"` | |
34 | srcdir=`pwd` | |
35 | ||
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" | |
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"} | |
49 | unset CDPATH | |
50 | unset use_texi2html | |
51 | ||
52 | version="gendocs.sh $scriptversion | |
53 | ||
9157d901 | 54 | Copyright 2010 Free Software Foundation, Inc. |
c84bdaf6 LC |
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." | |
58 | ||
59 | usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE | |
60 | ||
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 | |
64 | ||
65 | Options: | |
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 | ||
75 | Simple example: $prog --email bug-gnu-emacs@gnu.org emacs \"GNU Emacs Manual\" | |
76 | ||
77 | Typical sequence: | |
78 | cd PACKAGESOURCE/doc | |
79 | wget \"$scripturl\" | |
80 | wget \"$templateurl\" | |
81 | $prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\" | |
82 | ||
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. | |
86 | ||
87 | Please use the --email ADDRESS option to specify your bug-reporting | |
88 | address in the generated HTML pages. | |
89 | ||
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.) | |
95 | ||
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. | |
100 | ||
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.) | |
104 | ||
9157d901 LC |
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. | |
c84bdaf6 | 110 | |
9157d901 LC |
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. | |
c84bdaf6 LC |
115 | |
116 | Email bug reports or enhancement requests to bug-texinfo@gnu.org. | |
117 | " | |
118 | ||
119 | calcsize() | |
120 | { | |
121 | size=`ls -ksl $1 | awk '{print $1}'` | |
122 | echo $size | |
123 | } | |
124 | ||
125 | MANUAL_TITLE= | |
126 | PACKAGE= | |
127 | EMAIL=webmasters@gnu.org # please override with --email | |
128 | htmlarg= | |
129 | outdir=manual | |
dde9c5a4 | 130 | srcfile= |
c84bdaf6 LC |
131 | |
132 | while 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 | |
157 | done | |
158 | ||
a927b6c1 LC |
159 | # For most of the following, the base name is just $PACKAGE |
160 | base=$PACKAGE | |
161 | ||
dde9c5a4 | 162 | if 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 | 169 | elif test -s "$srcdir/$PACKAGE.texinfo"; then |
c84bdaf6 LC |
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 | |
175 | else | |
176 | echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2 | |
177 | exit 1 | |
178 | fi | |
179 | ||
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 | |
183 | exit 1 | |
184 | fi | |
185 | ||
186 | case $outdir in | |
0f00f2c3 LC |
187 | /*) abs_outdir=$outdir;; |
188 | *) abs_outdir=$srcdir/$outdir;; | |
c84bdaf6 LC |
189 | esac |
190 | ||
191 | echo Generating output formats for $srcfile | |
192 | ||
193 | cmd="$SETLANG $MAKEINFO -o $PACKAGE.info \"$srcfile\"" | |
194 | echo "Generating info files... ($cmd)" | |
195 | eval "$cmd" | |
0f00f2c3 LC |
196 | mkdir -p "$outdir/" |
197 | tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info* | |
198 | info_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 | 202 | cmd="$SETLANG ${TEXI2DVI} \"$srcfile\"" |
c84bdaf6 LC |
203 | echo "Generating dvi ... ($cmd)" |
204 | eval "$cmd" | |
205 | ||
206 | # now, before we compress dvi: | |
207 | echo Generating postscript... | |
208 | ${DVIPS} $PACKAGE -o | |
209 | gzip -f -9 $PACKAGE.ps | |
210 | ps_gz_size=`calcsize $PACKAGE.ps.gz` | |
0f00f2c3 | 211 | mv $PACKAGE.ps.gz "$outdir/" |
c84bdaf6 LC |
212 | |
213 | # compress/finish dvi: | |
214 | gzip -f -9 $PACKAGE.dvi | |
215 | dvi_gz_size=`calcsize $PACKAGE.dvi.gz` | |
0f00f2c3 | 216 | mv $PACKAGE.dvi.gz "$outdir/" |
c84bdaf6 | 217 | |
9157d901 | 218 | cmd="$SETLANG ${TEXI2DVI} --pdf \"$srcfile\"" |
c84bdaf6 LC |
219 | echo "Generating pdf ... ($cmd)" |
220 | eval "$cmd" | |
221 | pdf_size=`calcsize $PACKAGE.pdf` | |
0f00f2c3 | 222 | mv $PACKAGE.pdf "$outdir/" |
c84bdaf6 LC |
223 | |
224 | cmd="$SETLANG $MAKEINFO -o $PACKAGE.txt --no-split --no-headers \"$srcfile\"" | |
225 | echo "Generating ASCII... ($cmd)" | |
226 | eval "$cmd" | |
227 | ascii_size=`calcsize $PACKAGE.txt` | |
0f00f2c3 LC |
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/" | |
c84bdaf6 LC |
231 | |
232 | html_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 | ||
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 | |
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} |
275 | else | |
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 | |
288 | fi | |
289 | ||
290 | echo Making .tar.gz for sources... | |
dde9c5a4 | 291 | d=`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 | ) | |
297 | texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"` | |
c84bdaf6 LC |
298 | |
299 | if 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 |
340 | fi |
341 | ||
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" | |
346 | else | |
347 | CONDS="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d" | |
348 | fi | |
349 | curdate=`$SETLANG date '+%B %d, %Y'` | |
350 | sed \ | |
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 | |
378 | echo "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: |