gendocs.sh 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505
  1. #!/bin/sh -e
  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. scriptversion=2016-12-31.18
  5. # Copyright 2003-2017 Free Software Foundation, Inc.
  6. #
  7. # This program is free software: you can redistribute it and/or modify
  8. # it under the terms of the GNU General Public License as published by
  9. # the Free Software Foundation; either version 3 of the License, or
  10. # (at your option) any later version.
  11. #
  12. # This program is distributed in the hope that it will be useful,
  13. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. # GNU General Public License for more details.
  16. #
  17. # You should have received a copy of the GNU General Public License
  18. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  19. #
  20. # Original author: Mohit Agarwal.
  21. # Send bug reports and any other correspondence to bug-gnulib@gnu.org.
  22. #
  23. # The latest version of this script, and the companion template, is
  24. # available from the Gnulib repository:
  25. #
  26. # http://git.savannah.gnu.org/cgit/gnulib.git/tree/build-aux/gendocs.sh
  27. # http://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template
  28. # TODO:
  29. # - image importing was only implemented for HTML generated by
  30. # makeinfo. But it should be simple enough to adjust.
  31. # - images are not imported in the source tarball. All the needed
  32. # formats (PDF, PNG, etc.) should be included.
  33. prog=`basename "$0"`
  34. srcdir=`pwd`
  35. scripturl="http://git.savannah.gnu.org/cgit/gnulib.git/plain/build-aux/gendocs.sh"
  36. templateurl="http://git.savannah.gnu.org/cgit/gnulib.git/plain/doc/gendocs_template"
  37. : ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="}
  38. : ${MAKEINFO="makeinfo"}
  39. : ${TEXI2DVI="texi2dvi"}
  40. : ${DOCBOOK2HTML="docbook2html"}
  41. : ${DOCBOOK2PDF="docbook2pdf"}
  42. : ${DOCBOOK2TXT="docbook2txt"}
  43. : ${GENDOCS_TEMPLATE_DIR="."}
  44. : ${PERL='perl'}
  45. : ${TEXI2HTML="texi2html"}
  46. unset CDPATH
  47. unset use_texi2html
  48. MANUAL_TITLE=
  49. PACKAGE=
  50. EMAIL=webmasters@gnu.org # please override with --email
  51. commonarg= # passed to all makeinfo/texi2html invcations.
  52. dirargs= # passed to all tools (-I dir).
  53. dirs= # -I directories.
  54. htmlarg="--css-ref=/software/gnulib/manual.css -c TOP_NODE_UP_URL=/manual"
  55. infoarg=--no-split
  56. generate_ascii=true
  57. generate_html=true
  58. generate_info=true
  59. generate_tex=true
  60. outdir=manual
  61. source_extra=
  62. split=node
  63. srcfile=
  64. texarg="-t @finalout"
  65. version="gendocs.sh $scriptversion
  66. Copyright 2017 Free Software Foundation, Inc.
  67. There is NO warranty. You may redistribute this software
  68. under the terms of the GNU General Public License.
  69. For more information about these matters, see the files named COPYING."
  70. usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE
  71. Generate output in various formats from PACKAGE.texinfo (or .texi or
  72. .txi) source. See the GNU Maintainers document for a more extensive
  73. discussion:
  74. http://www.gnu.org/prep/maintain_toc.html
  75. Options:
  76. --email ADR use ADR as contact in generated web pages; always give this.
  77. -s SRCFILE read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi}
  78. -o OUTDIR write files into OUTDIR, instead of manual/.
  79. -I DIR append DIR to the Texinfo search path.
  80. --common ARG pass ARG in all invocations.
  81. --html ARG pass ARG to makeinfo or texi2html for HTML targets,
  82. instead of '$htmlarg'.
  83. --info ARG pass ARG to makeinfo for Info, instead of --no-split.
  84. --no-ascii skip generating the plain text output.
  85. --no-html skip generating the html output.
  86. --no-info skip generating the info output.
  87. --no-tex skip generating the dvi and pdf output.
  88. --source ARG include ARG in tar archive of sources.
  89. --split HOW make split HTML by node, section, chapter; default node.
  90. --tex ARG pass ARG to texi2dvi for DVI and PDF, instead of -t @finalout.
  91. --texi2html use texi2html to make HTML target, with all split versions.
  92. --docbook convert through DocBook too (xml, txt, html, pdf).
  93. --help display this help and exit successfully.
  94. --version display version information and exit successfully.
  95. Simple example: $prog --email bug-gnu-emacs@gnu.org emacs \"GNU Emacs Manual\"
  96. Typical sequence:
  97. cd PACKAGESOURCE/doc
  98. wget \"$scripturl\"
  99. wget \"$templateurl\"
  100. $prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\"
  101. Output will be in a new subdirectory \"manual\" (by default;
  102. use -o OUTDIR to override). Move all the new files into your web CVS
  103. tree, as explained in the Web Pages node of maintain.texi.
  104. Please use the --email ADDRESS option so your own bug-reporting
  105. address will be used in the generated HTML pages.
  106. MANUAL-TITLE is included as part of the HTML <title> of the overall
  107. manual/index.html file. It should include the name of the package being
  108. documented. manual/index.html is created by substitution from the file
  109. $GENDOCS_TEMPLATE_DIR/gendocs_template. (Feel free to modify the
  110. generic template for your own purposes.)
  111. If you have several manuals, you'll need to run this script several
  112. times with different MANUAL values, specifying a different output
  113. directory with -o each time. Then write (by hand) an overall index.html
  114. with links to them all.
  115. If a manual's Texinfo sources are spread across several directories,
  116. first copy or symlink all Texinfo sources into a single directory.
  117. (Part of the script's work is to make a tar.gz of the sources.)
  118. As implied above, by default monolithic Info files are generated.
  119. If you want split Info, or other Info options, use --info to override.
  120. You can set the environment variables MAKEINFO, TEXI2DVI, TEXI2HTML,
  121. and PERL to control the programs that get executed, and
  122. GENDOCS_TEMPLATE_DIR to control where the gendocs_template file is
  123. looked for. With --docbook, the environment variables DOCBOOK2HTML,
  124. DOCBOOK2PDF, and DOCBOOK2TXT are also consulted.
  125. By default, makeinfo and texi2dvi are run in the default (English)
  126. locale, since that's the language of most Texinfo manuals. If you
  127. happen to have a non-English manual and non-English web site, see the
  128. SETLANG setting in the source.
  129. Email bug reports or enhancement requests to bug-gnulib@gnu.org.
  130. "
  131. while test $# -gt 0; do
  132. case $1 in
  133. -s) shift; srcfile=$1;;
  134. -o) shift; outdir=$1;;
  135. -I) shift; dirargs="$dirargs -I '$1'"; dirs="$dirs $1";;
  136. --common) shift; commonarg=$1;;
  137. --docbook) docbook=yes;;
  138. --email) shift; EMAIL=$1;;
  139. --html) shift; htmlarg=$1;;
  140. --info) shift; infoarg=$1;;
  141. --no-ascii) generate_ascii=false;;
  142. --no-html) generate_ascii=false;;
  143. --no-info) generate_info=false;;
  144. --no-tex) generate_tex=false;;
  145. --source) shift; source_extra=$1;;
  146. --split) shift; split=$1;;
  147. --tex) shift; texarg=$1;;
  148. --texi2html) use_texi2html=1;;
  149. --help) echo "$usage"; exit 0;;
  150. --version) echo "$version"; exit 0;;
  151. -*)
  152. echo "$0: Unknown option \`$1'." >&2
  153. echo "$0: Try \`--help' for more information." >&2
  154. exit 1;;
  155. *)
  156. if test -z "$PACKAGE"; then
  157. PACKAGE=$1
  158. elif test -z "$MANUAL_TITLE"; then
  159. MANUAL_TITLE=$1
  160. else
  161. echo "$0: extra non-option argument \`$1'." >&2
  162. exit 1
  163. fi;;
  164. esac
  165. shift
  166. done
  167. # makeinfo uses the dirargs, but texi2dvi doesn't.
  168. commonarg=" $dirargs $commonarg"
  169. # For most of the following, the base name is just $PACKAGE
  170. base=$PACKAGE
  171. if test -n "$srcfile"; then
  172. # but here, we use the basename of $srcfile
  173. base=`basename "$srcfile"`
  174. case $base in
  175. *.txi|*.texi|*.texinfo) base=`echo "$base"|sed 's/\.[texinfo]*$//'`;;
  176. esac
  177. PACKAGE=$base
  178. elif test -s "$srcdir/$PACKAGE.texinfo"; then
  179. srcfile=$srcdir/$PACKAGE.texinfo
  180. elif test -s "$srcdir/$PACKAGE.texi"; then
  181. srcfile=$srcdir/$PACKAGE.texi
  182. elif test -s "$srcdir/$PACKAGE.txi"; then
  183. srcfile=$srcdir/$PACKAGE.txi
  184. else
  185. echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2
  186. exit 1
  187. fi
  188. if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then
  189. echo "$0: cannot read $GENDOCS_TEMPLATE_DIR/gendocs_template." >&2
  190. echo "$0: it is available from $templateurl." >&2
  191. exit 1
  192. fi
  193. # Function to return size of $1 in something resembling kilobytes.
  194. calcsize()
  195. {
  196. size=`ls -ksl $1 | awk '{print $1}'`
  197. echo $size
  198. }
  199. # copy_images OUTDIR HTML-FILE...
  200. # -------------------------------
  201. # Copy all the images needed by the HTML-FILEs into OUTDIR.
  202. # Look for them in . and the -I directories; this is simpler than what
  203. # makeinfo supports with -I, but hopefully it will suffice.
  204. copy_images()
  205. {
  206. local odir
  207. odir=$1
  208. shift
  209. $PERL -n -e "
  210. BEGIN {
  211. \$me = '$prog';
  212. \$odir = '$odir';
  213. @dirs = qw(. $dirs);
  214. }
  215. " -e '
  216. /<img src="(.*?)"/g && ++$need{$1};
  217. END {
  218. #print "$me: @{[keys %need]}\n"; # for debugging, show images found.
  219. FILE: for my $f (keys %need) {
  220. for my $d (@dirs) {
  221. if (-f "$d/$f") {
  222. use File::Basename;
  223. my $dest = dirname ("$odir/$f");
  224. #
  225. use File::Path;
  226. -d $dest || mkpath ($dest)
  227. || die "$me: cannot mkdir $dest: $!\n";
  228. #
  229. use File::Copy;
  230. copy ("$d/$f", $dest)
  231. || die "$me: cannot copy $d/$f to $dest: $!\n";
  232. next FILE;
  233. }
  234. }
  235. die "$me: $ARGV: cannot find image $f\n";
  236. }
  237. }
  238. ' -- "$@" || exit 1
  239. }
  240. case $outdir in
  241. /*) abs_outdir=$outdir;;
  242. *) abs_outdir=$srcdir/$outdir;;
  243. esac
  244. echo "Making output for $srcfile"
  245. echo " in `pwd`"
  246. mkdir -p "$outdir/"
  247. #
  248. if $generate_info; then
  249. cmd="$SETLANG $MAKEINFO -o $PACKAGE.info $commonarg $infoarg \"$srcfile\""
  250. echo "Generating info... ($cmd)"
  251. rm -f $PACKAGE.info* # get rid of any strays
  252. eval "$cmd"
  253. tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info*
  254. ls -l "$outdir/$PACKAGE.info.tar.gz"
  255. info_tgz_size=`calcsize "$outdir/$PACKAGE.info.tar.gz"`
  256. # do not mv the info files, there's no point in having them available
  257. # separately on the web.
  258. fi # end info
  259. #
  260. if $generate_tex; then
  261. cmd="$SETLANG $TEXI2DVI $dirargs $texarg \"$srcfile\""
  262. printf "\nGenerating dvi... ($cmd)\n"
  263. eval "$cmd"
  264. # compress/finish dvi:
  265. gzip -f -9 $PACKAGE.dvi
  266. dvi_gz_size=`calcsize $PACKAGE.dvi.gz`
  267. mv $PACKAGE.dvi.gz "$outdir/"
  268. ls -l "$outdir/$PACKAGE.dvi.gz"
  269. cmd="$SETLANG $TEXI2DVI --pdf $dirargs $texarg \"$srcfile\""
  270. printf "\nGenerating pdf... ($cmd)\n"
  271. eval "$cmd"
  272. pdf_size=`calcsize $PACKAGE.pdf`
  273. mv $PACKAGE.pdf "$outdir/"
  274. ls -l "$outdir/$PACKAGE.pdf"
  275. fi # end tex (dvi + pdf)
  276. #
  277. if $generate_ascii; then
  278. opt="-o $PACKAGE.txt --no-split --no-headers $commonarg"
  279. cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
  280. printf "\nGenerating ascii... ($cmd)\n"
  281. eval "$cmd"
  282. ascii_size=`calcsize $PACKAGE.txt`
  283. gzip -f -9 -c $PACKAGE.txt >"$outdir/$PACKAGE.txt.gz"
  284. ascii_gz_size=`calcsize "$outdir/$PACKAGE.txt.gz"`
  285. mv $PACKAGE.txt "$outdir/"
  286. ls -l "$outdir/$PACKAGE.txt" "$outdir/$PACKAGE.txt.gz"
  287. fi
  288. #
  289. if $generate_html; then
  290. # Split HTML at level $1. Used for texi2html.
  291. html_split()
  292. {
  293. opt="--split=$1 --node-files $commonarg $htmlarg"
  294. cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\""
  295. printf "\nGenerating html by $1... ($cmd)\n"
  296. eval "$cmd"
  297. split_html_dir=$PACKAGE.html
  298. (
  299. cd ${split_html_dir} || exit 1
  300. ln -sf ${PACKAGE}.html index.html
  301. tar -czf "$abs_outdir/${PACKAGE}.html_$1.tar.gz" -- *.html
  302. )
  303. eval html_$1_tgz_size=`calcsize "$outdir/${PACKAGE}.html_$1.tar.gz"`
  304. rm -f "$outdir"/html_$1/*.html
  305. mkdir -p "$outdir/html_$1/"
  306. mv ${split_html_dir}/*.html "$outdir/html_$1/"
  307. rmdir ${split_html_dir}
  308. }
  309. if test -z "$use_texi2html"; then
  310. opt="--no-split --html -o $PACKAGE.html $commonarg $htmlarg"
  311. cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
  312. printf "\nGenerating monolithic html... ($cmd)\n"
  313. rm -rf $PACKAGE.html # in case a directory is left over
  314. eval "$cmd"
  315. html_mono_size=`calcsize $PACKAGE.html`
  316. gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz"
  317. html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"`
  318. copy_images "$outdir/" $PACKAGE.html
  319. mv $PACKAGE.html "$outdir/"
  320. ls -l "$outdir/$PACKAGE.html" "$outdir/$PACKAGE.html.gz"
  321. # Before Texinfo 5.0, makeinfo did not accept a --split=HOW option,
  322. # it just always split by node. So if we're splitting by node anyway,
  323. # leave it out.
  324. if test "x$split" = xnode; then
  325. split_arg=
  326. else
  327. split_arg=--split=$split
  328. fi
  329. #
  330. opt="--html -o $PACKAGE.html $split_arg $commonarg $htmlarg"
  331. cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
  332. printf "\nGenerating html by $split... ($cmd)\n"
  333. eval "$cmd"
  334. split_html_dir=$PACKAGE.html
  335. copy_images $split_html_dir/ $split_html_dir/*.html
  336. (
  337. cd $split_html_dir || exit 1
  338. tar -czf "$abs_outdir/$PACKAGE.html_$split.tar.gz" -- *
  339. )
  340. eval \
  341. html_${split}_tgz_size=`calcsize "$outdir/$PACKAGE.html_$split.tar.gz"`
  342. rm -rf "$outdir/html_$split/"
  343. mv $split_html_dir "$outdir/html_$split/"
  344. du -s "$outdir/html_$split/"
  345. ls -l "$outdir/$PACKAGE.html_$split.tar.gz"
  346. else # use texi2html:
  347. opt="--output $PACKAGE.html $commonarg $htmlarg"
  348. cmd="$SETLANG $TEXI2HTML $opt \"$srcfile\""
  349. printf "\nGenerating monolithic html with texi2html... ($cmd)\n"
  350. rm -rf $PACKAGE.html # in case a directory is left over
  351. eval "$cmd"
  352. html_mono_size=`calcsize $PACKAGE.html`
  353. gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz"
  354. html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"`
  355. mv $PACKAGE.html "$outdir/"
  356. html_split node
  357. html_split chapter
  358. html_split section
  359. fi
  360. fi # end html
  361. #
  362. printf "\nMaking .tar.gz for sources...\n"
  363. d=`dirname $srcfile`
  364. (
  365. cd "$d"
  366. srcfiles=`ls -d *.texinfo *.texi *.txi *.eps $source_extra 2>/dev/null` || true
  367. tar czfh "$abs_outdir/$PACKAGE.texi.tar.gz" $srcfiles
  368. ls -l "$abs_outdir/$PACKAGE.texi.tar.gz"
  369. )
  370. texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"`
  371. #
  372. # Do everything again through docbook.
  373. if test -n "$docbook"; then
  374. opt="-o - --docbook $commonarg"
  375. cmd="$SETLANG $MAKEINFO $opt \"$srcfile\" >${srcdir}/$PACKAGE-db.xml"
  376. printf "\nGenerating docbook XML... ($cmd)\n"
  377. eval "$cmd"
  378. docbook_xml_size=`calcsize $PACKAGE-db.xml`
  379. gzip -f -9 -c $PACKAGE-db.xml >"$outdir/$PACKAGE-db.xml.gz"
  380. docbook_xml_gz_size=`calcsize "$outdir/$PACKAGE-db.xml.gz"`
  381. mv $PACKAGE-db.xml "$outdir/"
  382. split_html_db_dir=html_node_db
  383. opt="$commonarg -o $split_html_db_dir"
  384. cmd="$DOCBOOK2HTML $opt \"${outdir}/$PACKAGE-db.xml\""
  385. printf "\nGenerating docbook HTML... ($cmd)\n"
  386. eval "$cmd"
  387. (
  388. cd ${split_html_db_dir} || exit 1
  389. tar -czf "$abs_outdir/${PACKAGE}.html_node_db.tar.gz" -- *.html
  390. )
  391. html_node_db_tgz_size=`calcsize "$outdir/${PACKAGE}.html_node_db.tar.gz"`
  392. rm -f "$outdir"/html_node_db/*.html
  393. mkdir -p "$outdir/html_node_db"
  394. mv ${split_html_db_dir}/*.html "$outdir/html_node_db/"
  395. rmdir ${split_html_db_dir}
  396. cmd="$DOCBOOK2TXT \"${outdir}/$PACKAGE-db.xml\""
  397. printf "\nGenerating docbook ASCII... ($cmd)\n"
  398. eval "$cmd"
  399. docbook_ascii_size=`calcsize $PACKAGE-db.txt`
  400. mv $PACKAGE-db.txt "$outdir/"
  401. cmd="$DOCBOOK2PDF \"${outdir}/$PACKAGE-db.xml\""
  402. printf "\nGenerating docbook PDF... ($cmd)\n"
  403. eval "$cmd"
  404. docbook_pdf_size=`calcsize $PACKAGE-db.pdf`
  405. mv $PACKAGE-db.pdf "$outdir/"
  406. fi
  407. #
  408. printf "\nMaking index.html for $PACKAGE...\n"
  409. if test -z "$use_texi2html"; then
  410. CONDS="/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\
  411. /%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d"
  412. else
  413. # should take account of --split here.
  414. CONDS="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d"
  415. fi
  416. curdate=`$SETLANG date '+%B %d, %Y'`
  417. sed \
  418. -e "s!%%TITLE%%!$MANUAL_TITLE!g" \
  419. -e "s!%%EMAIL%%!$EMAIL!g" \
  420. -e "s!%%PACKAGE%%!$PACKAGE!g" \
  421. -e "s!%%DATE%%!$curdate!g" \
  422. -e "s!%%HTML_MONO_SIZE%%!$html_mono_size!g" \
  423. -e "s!%%HTML_MONO_GZ_SIZE%%!$html_mono_gz_size!g" \
  424. -e "s!%%HTML_NODE_TGZ_SIZE%%!$html_node_tgz_size!g" \
  425. -e "s!%%HTML_SECTION_TGZ_SIZE%%!$html_section_tgz_size!g" \
  426. -e "s!%%HTML_CHAPTER_TGZ_SIZE%%!$html_chapter_tgz_size!g" \
  427. -e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \
  428. -e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \
  429. -e "s!%%PDF_SIZE%%!$pdf_size!g" \
  430. -e "s!%%ASCII_SIZE%%!$ascii_size!g" \
  431. -e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \
  432. -e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \
  433. -e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \
  434. -e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \
  435. -e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \
  436. -e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \
  437. -e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \
  438. -e "s,%%SCRIPTURL%%,$scripturl,g" \
  439. -e "s!%%SCRIPTNAME%%!$prog!g" \
  440. -e "$CONDS" \
  441. $GENDOCS_TEMPLATE_DIR/gendocs_template >"$outdir/index.html"
  442. echo "Done, see $outdir/ subdirectory for new files."
  443. # Local variables:
  444. # eval: (add-hook 'write-file-hooks 'time-stamp)
  445. # time-stamp-start: "scriptversion="
  446. # time-stamp-format: "%:y-%02m-%02d.%02H"
  447. # time-stamp-end: "$"
  448. # End: