123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352 |
- #!/bin/sh
- # gendocs.sh -- generate a GNU manual in many formats. This script is
- # mentioned in maintain.texi. See the help message below for usage details.
- scriptversion=2008-03-05.14
- # Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008
- # Free Software Foundation, Inc.
- #
- # This program is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 3 of the License,
- # or (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
- #
- # Original author: Mohit Agarwal.
- # Send bug reports and any other correspondence to bug-texinfo@gnu.org.
- prog=`basename "$0"`
- srcdir=`pwd`
- scripturl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs.sh"
- templateurl="http://savannah.gnu.org/cgi-bin/viewcvs/~checkout~/texinfo/texinfo/util/gendocs_template"
- : ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="}
- : ${MAKEINFO="makeinfo"}
- : ${TEXI2DVI="texi2dvi -t @finalout"}
- : ${DVIPS="dvips"}
- : ${DOCBOOK2HTML="docbook2html"}
- : ${DOCBOOK2PDF="docbook2pdf"}
- : ${DOCBOOK2PS="docbook2ps"}
- : ${DOCBOOK2TXT="docbook2txt"}
- : ${GENDOCS_TEMPLATE_DIR="."}
- : ${TEXI2HTML="texi2html"}
- unset CDPATH
- unset use_texi2html
- version="gendocs.sh $scriptversion
- Copyright (C) 2007 Free Software Foundation, Inc.
- There is NO warranty. You may redistribute this software
- under the terms of the GNU General Public License.
- For more information about these matters, see the files named COPYING."
- usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE
- Generate various output formats from PACKAGE.texinfo (or .texi or .txi) source.
- See the GNU Maintainers document for a more extensive discussion:
- http://www.gnu.org/prep/maintain_toc.html
- Options:
- -o OUTDIR write files into OUTDIR, instead of manual/.
- --docbook convert to DocBook too (xml, txt, html, pdf and ps).
- --html ARG pass indicated ARG to makeinfo or texi2html for HTML targets.
- --texi2html use texi2html to generate HTML targets.
- --help display this help and exit successfully.
- --version display version information and exit successfully.
- Simple example: $prog emacs \"GNU Emacs Manual\"
- Typical sequence:
- cd YOURPACKAGESOURCE/doc
- wget \"$scripturl\"
- wget \"$templateurl\"
- $prog YOURMANUAL \"GNU YOURMANUAL - One-line description\"
- Output will be in a new subdirectory \"manual\" (by default, use -o OUTDIR
- to override). Move all the new files into your web CVS tree, as
- explained in the Web Pages node of maintain.texi.
- MANUAL-TITLE is included as part of the HTML <title> of the overall
- manual/index.html file. It should include the name of the package being
- documented. manual/index.html is created by substitution from the file
- $GENDOCS_TEMPLATE_DIR/gendocs_template. (Feel free to modify the
- generic template for your own purposes.)
- If you have several manuals, you'll need to run this script several
- times with different YOURMANUAL values, specifying a different output
- directory with -o each time. Then write (by hand) an overall index.html
- with links to them all.
- If a manual's texinfo sources are spread across several directories,
- first copy or symlink all Texinfo sources into a single directory.
- (Part of the script's work is to make a tar.gz of the sources.)
- You can set the environment variables MAKEINFO, TEXI2DVI, and DVIPS to
- control the programs that get executed, and GENDOCS_TEMPLATE_DIR to
- control where the gendocs_template file is looked for. (With --docbook,
- the environment variables DOCBOOK2HTML, DOCBOOK2PDF, DOCBOOK2PS, and
- DOCBOOK2TXT are also respected.)
- By default, makeinfo is run in the default (English) locale, since
- that's the language of most Texinfo manuals. If you happen to have a
- non-English manual and non-English web site, check the SETLANG setting
- in the source.
- Email bug reports or enhancement requests to bug-texinfo@gnu.org.
- "
- calcsize()
- {
- size=`ls -ksl $1 | awk '{print $1}'`
- echo $size
- }
- outdir=manual
- html=
- PACKAGE=
- MANUAL_TITLE=
- while test $# -gt 0; do
- case $1 in
- --help) echo "$usage"; exit 0;;
- --version) echo "$version"; exit 0;;
- -o) shift; outdir=$1;;
- --docbook) docbook=yes;;
- --html) shift; html=$1;;
- --texi2html) use_texi2html=1;;
- -*)
- echo "$0: Unknown or ambiguous option \`$1'." >&2
- echo "$0: Try \`--help' for more information." >&2
- exit 1;;
- *)
- if test -z "$PACKAGE"; then
- PACKAGE=$1
- elif test -z "$MANUAL_TITLE"; then
- MANUAL_TITLE=$1
- else
- echo "$0: extra non-option argument \`$1'." >&2
- exit 1
- fi;;
- esac
- shift
- done
- if test -s "$srcdir/$PACKAGE.texinfo"; then
- srcfile=$srcdir/$PACKAGE.texinfo
- elif test -s "$srcdir/$PACKAGE.texi"; then
- srcfile=$srcdir/$PACKAGE.texi
- elif test -s "$srcdir/$PACKAGE.txi"; then
- srcfile=$srcdir/$PACKAGE.txi
- else
- echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2
- exit 1
- fi
- if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then
- echo "$0: cannot read $GENDOCS_TEMPLATE_DIR/gendocs_template." >&2
- echo "$0: it is available from $templateurl." >&2
- exit 1
- fi
- case $outdir in
- /*) dotdot_outdir="$outdir";;
- *) dotdot_outdir="../$outdir";;
- esac
- echo Generating output formats for $srcfile
- cmd="$SETLANG $MAKEINFO -o $PACKAGE.info \"$srcfile\""
- echo "Generating info files... ($cmd)"
- eval "$cmd"
- mkdir -p $outdir/
- tar czf $outdir/$PACKAGE.info.tar.gz $PACKAGE.info*
- info_tgz_size=`calcsize $outdir/$PACKAGE.info.tar.gz`
- # do not mv the info files, there's no point in having them available
- # separately on the web.
- cmd="${TEXI2DVI} \"$srcfile\""
- echo "Generating dvi ... ($cmd)"
- eval "$cmd"
- # now, before we compress dvi:
- echo Generating postscript...
- ${DVIPS} $PACKAGE -o
- gzip -f -9 $PACKAGE.ps
- ps_gz_size=`calcsize $PACKAGE.ps.gz`
- mv $PACKAGE.ps.gz $outdir/
- # compress/finish dvi:
- gzip -f -9 $PACKAGE.dvi
- dvi_gz_size=`calcsize $PACKAGE.dvi.gz`
- mv $PACKAGE.dvi.gz $outdir/
- cmd="${TEXI2DVI} --pdf \"$srcfile\""
- echo "Generating pdf ... ($cmd)"
- eval "$cmd"
- pdf_size=`calcsize $PACKAGE.pdf`
- mv $PACKAGE.pdf $outdir/
- cmd="$SETLANG $MAKEINFO -o $PACKAGE.txt --no-split --no-headers \"$srcfile\""
- echo "Generating ASCII... ($cmd)"
- eval "$cmd"
- ascii_size=`calcsize $PACKAGE.txt`
- gzip -f -9 -c $PACKAGE.txt >$outdir/$PACKAGE.txt.gz
- ascii_gz_size=`calcsize $outdir/$PACKAGE.txt.gz`
- mv $PACKAGE.txt $outdir/
- html_split() {
- cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html --split=$1 $html --node-files \"$srcfile\""
- echo "Generating html by $1... ($cmd)"
- eval "$cmd"
- split_html_dir=$PACKAGE.html
- (
- cd ${split_html_dir} || exit 1
- ln -sf ${PACKAGE}.html index.html
- tar -czf $dotdot_outdir/${PACKAGE}.html_$1.tar.gz -- *.html
- )
- eval html_$1_tgz_size=`calcsize $outdir/${PACKAGE}.html_$1.tar.gz`
- rm -f $outdir/html_$1/*.html
- mkdir -p $outdir/html_$1/
- mv ${split_html_dir}/*.html $outdir/html_$1/
- rmdir ${split_html_dir}
- }
- if test -z "$use_texi2html"; then
- cmd="$SETLANG $MAKEINFO --no-split --html -o $PACKAGE.html $html \"$srcfile\""
- echo "Generating monolithic html... ($cmd)"
- rm -rf $PACKAGE.html # in case a directory is left over
- eval "$cmd"
- html_mono_size=`calcsize $PACKAGE.html`
- gzip -f -9 -c $PACKAGE.html >$outdir/$PACKAGE.html.gz
- html_mono_gz_size=`calcsize $outdir/$PACKAGE.html.gz`
- mv $PACKAGE.html $outdir/
- cmd="$SETLANG $MAKEINFO --html -o $PACKAGE.html $html \"$srcfile\""
- echo "Generating html by node... ($cmd)"
- eval "$cmd"
- split_html_dir=$PACKAGE.html
- (
- cd ${split_html_dir} || exit 1
- tar -czf $dotdot_outdir/${PACKAGE}.html_node.tar.gz -- *.html
- )
- html_node_tgz_size=`calcsize $outdir/${PACKAGE}.html_node.tar.gz`
- rm -f $outdir/html_node/*.html
- mkdir -p $outdir/html_node/
- mv ${split_html_dir}/*.html $outdir/html_node/
- rmdir ${split_html_dir}
- else
- cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $html \"$srcfile\""
- echo "Generating monolithic html... ($cmd)"
- rm -rf $PACKAGE.html # in case a directory is left over
- eval "$cmd"
- html_mono_size=`calcsize $PACKAGE.html`
- gzip -f -9 -c $PACKAGE.html >$outdir/$PACKAGE.html.gz
- html_mono_gz_size=`calcsize $outdir/$PACKAGE.html.gz`
- mv $PACKAGE.html $outdir/
- html_split node
- html_split chapter
- html_split section
- fi
- echo Making .tar.gz for sources...
- srcfiles=`ls *.texinfo *.texi *.txi *.eps 2>/dev/null`
- tar cvzfh $outdir/$PACKAGE.texi.tar.gz $srcfiles
- texi_tgz_size=`calcsize $outdir/$PACKAGE.texi.tar.gz`
- if test -n "$docbook"; then
- cmd="$SETLANG $MAKEINFO -o - --docbook \"$srcfile\" > ${srcdir}/$PACKAGE-db.xml"
- echo "Generating docbook XML... $(cmd)"
- eval "$cmd"
- docbook_xml_size=`calcsize $PACKAGE-db.xml`
- gzip -f -9 -c $PACKAGE-db.xml >$outdir/$PACKAGE-db.xml.gz
- docbook_xml_gz_size=`calcsize $outdir/$PACKAGE-db.xml.gz`
- mv $PACKAGE-db.xml $outdir/
- cmd="${DOCBOOK2HTML} -o $split_html_db_dir ${outdir}/$PACKAGE-db.xml"
- echo "Generating docbook HTML... ($cmd)"
- eval "$cmd"
- split_html_db_dir=html_node_db
- (
- cd ${split_html_db_dir} || exit 1
- tar -czf $dotdot_outdir/${PACKAGE}.html_node_db.tar.gz -- *.html
- )
- html_node_db_tgz_size=`calcsize $outdir/${PACKAGE}.html_node_db.tar.gz`
- rm -f $outdir/html_node_db/*.html
- mkdir -p $outdir/html_node_db
- mv ${split_html_db_dir}/*.html $outdir/html_node_db/
- rmdir ${split_html_db_dir}
- cmd="${DOCBOOK2TXT} ${outdir}/$PACKAGE-db.xml"
- echo "Generating docbook ASCII... ($cmd)"
- eval "$cmd"
- docbook_ascii_size=`calcsize $PACKAGE-db.txt`
- mv $PACKAGE-db.txt $outdir/
- cmd="${DOCBOOK2PS} ${outdir}/$PACKAGE-db.xml"
- echo "Generating docbook PS... $(cmd)"
- eval "$cmd"
- gzip -f -9 -c $PACKAGE-db.ps >$outdir/$PACKAGE-db.ps.gz
- docbook_ps_gz_size=`calcsize $outdir/$PACKAGE-db.ps.gz`
- mv $PACKAGE-db.ps $outdir/
- cmd="${DOCBOOK2PDF} ${outdir}/$PACKAGE-db.xml"
- echo "Generating docbook PDF... ($cmd)"
- eval "$cmd"
- docbook_pdf_size=`calcsize $PACKAGE-db.pdf`
- mv $PACKAGE-db.pdf $outdir/
- fi
- echo Writing index file...
- if test -z "$use_texi2html"; then
- CONDS="/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\
- /%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d"
- else
- CONDS="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d"
- fi
- curdate=`$SETLANG date '+%B %d, %Y'`
- sed \
- -e "s!%%TITLE%%!$MANUAL_TITLE!g" \
- -e "s!%%DATE%%!$curdate!g" \
- -e "s!%%PACKAGE%%!$PACKAGE!g" \
- -e "s!%%HTML_MONO_SIZE%%!$html_mono_size!g" \
- -e "s!%%HTML_MONO_GZ_SIZE%%!$html_mono_gz_size!g" \
- -e "s!%%HTML_NODE_TGZ_SIZE%%!$html_node_tgz_size!g" \
- -e "s!%%HTML_SECTION_TGZ_SIZE%%!$html_section_tgz_size!g" \
- -e "s!%%HTML_CHAPTER_TGZ_SIZE%%!$html_chapter_tgz_size!g" \
- -e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \
- -e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \
- -e "s!%%PDF_SIZE%%!$pdf_size!g" \
- -e "s!%%PS_GZ_SIZE%%!$ps_gz_size!g" \
- -e "s!%%ASCII_SIZE%%!$ascii_size!g" \
- -e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \
- -e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \
- -e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \
- -e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \
- -e "s!%%DOCBOOK_PS_GZ_SIZE%%!$docbook_ps_gz_size!g" \
- -e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \
- -e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \
- -e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \
- -e "s,%%SCRIPTURL%%,$scripturl,g" \
- -e "s!%%SCRIPTNAME%%!$prog!g" \
- -e "$CONDS" \
- $GENDOCS_TEMPLATE_DIR/gendocs_template >$outdir/index.html
- echo "Done! See $outdir/ subdirectory for new files."
- # Local variables:
- # eval: (add-hook 'write-file-hooks 'time-stamp)
- # time-stamp-start: "scriptversion="
- # time-stamp-format: "%:y-%02m-%02d.%02H"
- # time-stamp-end: "$"
- # End:
|