#!/bin/bash dtxname=ctable dtxtype=package ext=sty delete=($dtxname.$ext README.tex doc/\*.tex) dtxversion=$(grep " v[0-9.]\+[a-z]\{0,1\} $dtxname $dtxtype" $dtxname.dtx |sed 's/.* v\([0-9.]\+[a-z]\{,1\}\) .*/\1/') executables=(mk texlog_extract zip getopt pdfseparate pdflatex) version=1.00 myname=$(basename $0) <<'DOC' = inst - install ctable = Synopsis inst [options] Without any options, inst installs ctable in the first writable TEXMFMAIN, TEXMFLOCAL or TEXMFHOME tree. Options: -h,--help print this help and exit -H,--Help print full documentation via less and exit -V,--version print version and exit = Description inst must be run in its own directory (|./inst|) and then does the following: - generates the documentation for isodoc, - installs ctable in one of your TeX trees: TEXMFMAIN, TEXMFLOCAL or TEXMFHOME. The first one writable by you will chosen. - creates a zip file named |ctable-x.yy.zip| for upload to CTAN - cleans up = Author and copyright Author Wybo Dekker Email U{wybo@dekkerdocumenten.nl}{wybo@dekkerdocumenten.nl} License Released under the U{www.gnu.org/copyleft/gpl.html}{GNU General Public License} DOC die() { echo -e "$myname: $Err$@$Nor" 1>&2; exit 1; } help() { sed -n '/^= Synopsis/,/^= /p' $0|sed '1s/.*/Usage:/;/^= /d'; exit; } helpall() { sed -n '/^<<.DOC.$/,/^DOC$/p' $0|sed -n '1d;$d;p'|less; exit; } version() { echo $version; exit; } Nor='\e[0m' # reset color ] Err='\e[31;1m' # light red ] setdir() { # create installation directory for i in MAIN LOCAL HOME; do tree=$(kpsewhich --expand-var \$TEXMF$i) test -w $tree && break tree= done [[ -n $tree ]] || die "Could not find a writable TeX tree" insttex=${tree}/tex/latex/$dtxname instsrc=$tree/source/latex/$dtxname instdoc=$tree/doc/latex/$dtxname mkdir -p $insttex || die could not create $insttex mkdir -p $instsrc || die could not create $instsrc mkdir -p $instdoc || die could not create $instdoc } testexecs() { # test presence of executables for i in ${executables[*]}; do type $i &> /dev/null || die executable $i not found done } readme() { # generate the README file sed -n '/^%<\*readme>/,/^%<\/readme>/p /\\changes{v'$dtxversion'}/,/^% }/p' $dtxname.dtx | sed 's/^%//;s/\\\\$// / Author:/i\ Version:| '$dtxversion' /<.readme>/d /^ }/d s/ \\changes.*/Changes in version '$dtxversion':/ s/$\\Rightarrow\$/=>/g s/\\textbackslash/\\/g s/\\text\(sl\|it\){\([^}]\+\)}/\/\2\//g # \textsl{...} -> /.../ s/{\([^}]*\)}/\1/g # keep last, removes all {...} ' >README grep "Changes in version" README >/dev/null || die changes not detected } makeall() { grep '%<\*install>' $dtxname.dtx >/dev/null && # for self-extracting dtx files delete+=($dtxname.ins) || echo y |tex $dtxname.ins >/dev/null # install any .ttf files mkdir -p ~/.fonts find doc -name '*.ttf' -exec cp {} ~/.fonts \; fc-cache ~/.fonts readme # create the README file # compile all examples cd doc ln -sf ../$dtxname.sty || exit 1 # use the version to be installed for i in [0-9][0-9]?; do if [ ! -f $i.pdf -o ! -f s$i.pdf ]; then ./doit || exit 1 break fi done cd .. mk --noprint --noview $dtxname.dtx && mk -c $dtxname.dtx # make $dtxname.pdf } installall() { # install and cleanup echo installing in $tree rm -rf $insttex/* $instsrc/* $instdoc/* find doc \( -type l -o -name '*.pdf' \) -delete cp -f $dtxname.$ext $insttex cp -a $dtxname.{ins,dtx} $instsrc cp -a README inst $dtxname.pdf $instdoc mktexlsr $tree 2>/dev/null for i in ${delete[@]}; do rm -f $i; done cd .. zipfile=$dtxname/$dtxname-$dtxversion.zip rm -f $zipfile zip -rq $zipfile $dtxname/* -x $dtxname/test\* cd $dtxname } options=$(getopt \ -n $myname \ -o hHV \ -l help,Help,version \ -- "$@" ) || exit 1 eval set -- "$options" while [ $# -gt 0 ]; do case $1 in (-h|--help) help;; (-H|--Help) helpall;; (-V|--version) version;; (--) shift; break;; (*) break;; esac done [[ -z $1 ]] || die No arguments expected testexecs setdir makeall installall