#! /usr/bin/env bash # This script may be invoked by naming it directly or via a shell alias, # but NOT through a symbolic link. Perhaps a future version will allow # the use of a symbolic link. # # Using a symbolic link will cause the script to not be able to locate # its support files. MYDIR=`dirname $0` WORKDIR=`pwd` cd $MYDIR MYDIR=`pwd` cd .. TOPDIR=`pwd` cd $WORKDIR # DEFAULT_FORMAT must be upper case... DEFAULT_FORMAT=PDF USE_DEFAULT_FORMAT=true DISCARD_TEMPS=true ICONSERVER='' TEMPBASE=mkhowto-$LOGNAME-$$ L2H_INIT_FILE=$TOPDIR/perl/l2hinit.perl L2H_AUX_INIT_FILE=/usr/tmp/$TEMPBASE.perl LOGFILE=/usr/tmp/$TEMPBASE.how LOGGING='' usage() { MYNAME=`basename $0` echo "usage: $MYNAME [options...] file ..." cat < MYFILE=$1 MYLATEX=$2 # # We really have to do it three times to get all the page numbers right, # since the length of the ToC makes a real difference. # $MYDIR/newind.py >$MYFILE.ind $MYDIR/newind.py modindex >mod$MYFILE.ind $MYLATEX $MYFILE || exit $? if [ -f mod$MYFILE.idx ] ; then makeindex mod$MYFILE.idx fi if [ -f $MYFILE.idx ] ; then $MYDIR/fix_hack $MYFILE.idx makeindex $MYFILE.idx $MYDIR/indfix.py $MYFILE.ind fi if [ -f $MYFILE.syn ] ; then # This hack is due to a bug with the module synopsis support that # causes the last module synopsis to be written out twice in # howto documents (not present for manuals). Repeated below. uniq $MYFILE.syn >TEMP.syn && mv TEMP.syn $MYFILE.syn || exit $? fi $MYLATEX $MYFILE || exit $? if [ -f mod$MYFILE.idx ] ; then makeindex mod$MYFILE.idx fi if [ -f $MYFILE.idx ] ; then $MYDIR/fix_hack $MYFILE.idx || exit $? makeindex -s $TOPDIR/texinputs/myindex.ist $MYFILE.idx || exit $? fi if [ -f $MYFILE.toc -a $MYLATEX = pdflatex ] ; then $MYDIR/toc2bkm.py -c section $MYFILE fi if [ -f $MYFILE.syn ] ; then uniq $MYFILE.syn >TEMP.syn && mv TEMP.syn $MYFILE.syn || exit $? fi $MYLATEX $MYFILE || exit $? } build_dvi() { use_latex $1 latex } build_pdf() { use_latex $1 pdflatex } build_ps() { dvips -N0 -o $1.ps $1 || exit $? } build_text() { lynx -nolist -dump $2/index.html >$1.txt } l2hoption() { if [ "$2" ] ; then echo "\$$1 = \"$2\";" >>$L2H_AUX_INIT_FILE fi } cleanup() { rm -f $1.aux $1.log $1.out $1.toc $1.bkm $1.idx $1.ilg $1.ind $1.syn rm -f mod$1.idx mod$1.ilg mod$1.ind if [ ! "$BUILD_DVI" ] ; then rm -f $1.dvi fi rm -rf $1.temp-html rm -f $1/IMG* $1/*.pl $1/WARNINGS $1/index.dat $1/modindex.dat } parse_option() { # When using a long option with a parameter separated by '=', # generalize the parsing of the two: OPTION="$1" unset VALUE STUFF=`echo "$1" | grep '^--[-a-zA-Z0-9]*='` if [ "$STUFF" ] ; then # This leaves OPTION=--option= and VALUE=value OPTION=`echo "$STUFF" | sed 's/^\(--[-a-zA-Z0-9]*=\)\(.*\)$/\1/'` VALUE=`echo "$STUFF" | sed 's/^\(--[-a-zA-Z0-9]*=\)\(.*\)$/\2/'` fi } # figure out what our targets are: while [ "$1" ] ; do parse_option "$1" case "$OPTION" in --all|--al) BUILD_PDF=true BUILD_PS=true BUILD_DVI=true BUILD_HTML=true BUILD_TEXT=true USE_DEFAULT_FORMAT=false shift 1 ;; --pdf|--pd) BUILD_PDF=true USE_DEFAULT_FORMAT=false shift 1 ;; --ps|--postscript|--postscrip|--postscri|--postscr|--postsc|--posts|--post|--pos|--po) BUILD_PS=true USE_DEFAULT_FORMAT=false shift 1 ;; --dvi|--dv|--d) BUILD_DVI=true USE_DEFAULT_FORMAT=false shift 1 ;; --html|--htm|--ht) BUILD_HTML=true USE_DEFAULT_FORMAT=false shift 1 ;; --text|--tex|--te|--t) BUILD_TEXT=true USE_DEFAULT_FORMAT=false shift 1 ;; -H|--help|--hel|--he) usage 0 ;; -i|--iconserver|--iconserve|--iconserv|--iconser|--iconse|--icons|--icon|--ico|--ic|--i) ICONSERVER="$2" shift 2 ;; --iconserver=*|--iconserve=*|--iconserv=*|--iconser=*|--iconse=*|--icons=*|--icon=*|--ico=*|--ic=*|--i=*) ICONSERVER="$VALUE" shift 1 ;; -a|--address|--addres|--addre|-addr|--add|--ad) ADDRESS="$2" shift 2 ;; --address=*|--addres=*|--addre=*|-addr=*|--add=*|--ad=*) ADDRESS="$VALUE" shift 1 ;; --a4) TEXINPUTS=$TOPDIR/paper-a4:$TEXINPUTS shift 1 ;; --letter|--lette|--lett|--let|--le) shift 1 ;; --link|--lin|--li) LINK="$2" shift 2 ;; --link=*|--lin=*|--li=*) LINK="$VALUE" shift 1 ;; -s|--split|--spli|--spl|--sp|--s) MAX_SPLIT_DEPTH="$2" shift 2 ;; --split=|--spli=|--spl=|--sp=|--s=) MAX_SPLIT_DEPTH="$VALUE" shift 1 ;; -l|--logging|--loggin|--loggi|--logg|--log|--lo) LOGGING=true shift 1 ;; -D|--debugging|--debuggin|--debuggi|--debugg|--debug|--debu|--deb|--de) DEBUGGING=true shift 1 ;; -k|--keep|--kee|--ke|--k) DISCARD_TEMPS='' shift 1 ;; -q|--quiet|--quie|--qui|--qu|--q) QUIET=true shift 1 ;; --) shift 1 break ;; -*) usage 2 "Unknown option: ${VALUE%=}" ;; *) break;; esac done if [ $# = 0 ] ; then # check for a single .tex file in . COUNT=`ls -1 *.tex | wc -l | sed 's/[ ]//g'` if [ "$COUNT" -eq 1 ] ; then set -- `ls -1 *.tex` elif [ "$COUNT" -gt 1 ] ; then usage 2 "Could not deduce which file(s) to process as HOWTO documents." else usage 2 "No file to process." fi fi if [ $USE_DEFAULT_FORMAT = true ] ; then eval "BUILD_$DEFAULT_FORMAT=true" fi if [ "$QUIET" ] ; then exec >/dev/null fi if [ "$DEBUGGING" ] ; then set -x fi echo '# auxillary init file for latex2html' >$L2H_AUX_INIT_FILE echo '# generated by mkhowto.sh -- do no edit' >>$L2H_AUX_INIT_FILE if [ "$ICONSERVER" ] ; then ICONSERVER="${ICONSERVER%/}" fi l2hoption ICONSERVER "$ICONSERVER" l2hoption ADDRESS "$ADDRESS" l2hoption MAX_LINK_DEPTH "$MAX_LINK_DEPTH" l2hoption MAX_SPLIT_DEPTH "$MAX_SPLIT_DEPTH" echo '1;' >>$L2H_AUX_INIT_FILE for FILE in $@ ; do FILEDIR=`dirname $FILE` FILE=`basename $FILE .tex` # # Put the directory the .tex file is in is also the first directory in # TEXINPUTS, to allow files there to override files in the common area. # TEXINPUTS=$FILEDIR:$TOPDIR/texinputs:$TEXINPUTS export TEXINPUTS # if [ "$BUILD_DVI" -o "$BUILD_PS" ] ; then build_dvi $FILE 2>&1 | tee -a $LOGFILE HAVE_TEMPS=true fi if [ "$BUILD_PDF" ] ; then build_pdf $FILE 2>&1 | tee -a $LOGFILE HAVE_TEMPS=true fi if [ "$BUILD_PS" ] ; then build_ps $FILE 2>&1 | tee -a $LOGFILE fi if [ "$BUILD_HTML" ] ; then if [ ! "$HAVE_TEMPS" ] ; then # need to get aux file build_dvi $FILE 2>&1 | tee -a $LOGFILE HAVE_TEMPS=true fi build_html $FILE $FILE 2>&1 | tee -a $LOGFILE fi if [ "$BUILD_TEXT" ] ; then if [ ! "$HAVE_TEMPS" ] ; then # need to get aux file build_dvi $FILE 2>&1 | tee -a $LOGFILE HAVE_TEMPS=true fi # this is why building text really has to be last: if [ "$MAX_SPLIT_DEPTH" -ne 1 ] ; then echo '# re-hack this file for --text:' >>$L2H_AUX_INIT_FILE l2hoption MAX_SPLIT_DEPTH 1 echo '1;' >>$L2H_AUX_INIT_FILE TEMPDIR=$FILE.temp-html build_html $FILE $TEMPDIR 2>&1 | tee -a $LOGFILE else TEMPDIR=$FILE fi build_text $FILE $TEMPDIR 2>&1 | tee -a $LOGFILE fi if [ "$DISCARD_TEMPS" ] ; then cleanup $FILE 2>&1 | tee -a $LOGFILE fi # keep the logfile around if [ "$LOGGING" ] ; then cp $LOGFILE $FILE.how fi rm -f $LOGFILE done if [ ! "$DEBUGGING" ] ; then rm -f $L2H_AUX_INIT_FILE fi