diff options
author | donal.k.fellows@manchester.ac.uk <dkf> | 2010-02-19 13:45:39 (GMT) |
---|---|---|
committer | donal.k.fellows@manchester.ac.uk <dkf> | 2010-02-19 13:45:39 (GMT) |
commit | b1185e5eb5f5906ffc9806651998ef5aa8e1904e (patch) | |
tree | 05de98540cc1f11fc78b7865d9bd73c817bc7ce7 /unix/installManPage | |
parent | ede13b90afaf3617eb6a924aa3f1dcd811ee22d5 (diff) | |
download | tk-b1185e5eb5f5906ffc9806651998ef5aa8e1904e.zip tk-b1185e5eb5f5906ffc9806651998ef5aa8e1904e.tar.gz tk-b1185e5eb5f5906ffc9806651998ef5aa8e1904e.tar.bz2 |
[Tcl Bug 2954638]: Correct behaviour of manual page installer. Also added
armouring to check that assumptions about the initial state are actually valid
(e.g., look for existing input file).
Diffstat (limited to 'unix/installManPage')
-rwxr-xr-x | unix/installManPage | 133 |
1 files changed, 90 insertions, 43 deletions
diff --git a/unix/installManPage b/unix/installManPage index 98cd899..e636db7 100755 --- a/unix/installManPage +++ b/unix/installManPage @@ -1,12 +1,29 @@ #!/bin/sh -ZIP=: +######################################################################## +### Parse Options +### + +Gzip=: +SymOrLoc="" +Gz="" +Suffix="" + while true; do case $1 in - -s | --symlinks ) S="-s ";; - -z | --compress ) ZIP=$2; shift ;; - -e | --extension ) Z=$2; shift ;; - -s | --suffix ) SUFFIX=$2; shift ;; + -s | --symlinks ) SymOrLoc="-s " ;; + -z | --compress ) Gzip=$2; shift ;; + -e | --extension ) Gz=$2; shift ;; + -x | --suffix ) Suffix=$2; shift ;; + -*) cat <<EOF +Unknown option "$1". Supported options: + -s Use symbolic links for manpages with multiple names. + -z PROG Use PROG to compress manual pages. + -e EXT Defines the extension added by -z PROG when compressing. + -x SUFF Defines an extra extension suffix to use. +Option names may not be combined getopt-style. +EOF + exit 1 ;; *) break ;; esac shift @@ -16,54 +33,84 @@ if test "$#" != 2; then exit 1 fi -MANPAGE=$1 -DIR=$2 -test -z "$S" && S="$DIR/" +######################################################################## +### Parse Required Arguments +### + +ManPage=$1 +Dir=$2 +if test -f $ManPage ; then : ; else + echo "source manual page file must exist" + exit 1 +fi +if test -d $Dir ; then : ; else + echo "target directory must exist" + exit 1 +fi +test -z "$SymOrLoc" && SymOrLoc="$Dir/" + +######################################################################## +### Extract Target Names from Manual Page +### # A sed script to parse the alternative names out of a man page. # -# /^\\.SH NAME/{ ;# Look for a line, that starts with .SH NAME -# s/^.*$// ;# Delete the content of this line from the buffer -# n ;# Read next line -# s/,//g ;# Remove all commas ... -# s/\\\ //g ;# .. and backslash-escaped spaces. -# s/::/_/g ;# Convert '::' to '_' -# s/ \\\-.*// ;# Delete from \- to the end of line -# p ;# print the result -# q ;# exit -# } -# # Backslashes are trippled in the sed script, because it is in -# backticks which don't pass backslashes literally. +# backticks which doesn't pass backslashes literally. # -# Please keep the commented version above updated if you -# change anything to the script below. -NAMES=`sed -n ' - /^\\.SH NAME/{ - s/^.*$// +Names=`sed -n ' +# Look for a line, that starts with .SH NAME +# optionally allow NAME to be surrounded +# by quotes. + /^\.SH NAME/{ +# Read next line n +# Remove all commas ... s/,//g +# ... and backslash-escaped spaces. s/\\\ //g - s/::/_/g +# Delete from \- to the end of line s/ \\\-.*// - p - q - }' $MANPAGE` +# print the result and exit + p;q + }' $ManPage` + +if test -z $Names ; then + echo "warning: no target names found in $ManPage" +fi + +######################################################################## +### Remaining Set Up +### -SECTION=`echo $MANPAGE | sed 's/.*\(.\)$/\1/'` -SRCDIR=`dirname $MANPAGE` -FIRST="" -for f in $NAMES; do - f=$f.$SECTION$SUFFIX - if test -z "$FIRST" ; then - FIRST=$f - rm -f $DIR/$FIRST $DIR/$FIRST.* - sed -e "/man\.macros/r $SRCDIR/man.macros" -e "/man\.macros/d" \ - $MANPAGE > $DIR/$FIRST - chmod 444 $DIR/$FIRST - $ZIP $DIR/$FIRST +case $ManPage in + *.1) Section=1 ;; + *.3) Section=3 ;; + *.n) Section=n ;; + *) echo "unknown section for $ManPage" + exit 2 ;; +esac + +SrcDir=`dirname $ManPage` + +######################################################################## +### Process Page to Create Target Pages +### + +First="" +for Target in $Names; do + Target=$Target.$Section$Suffix + rm -f $Dir/$Target $Dir/$Target.* + if test -z "$First" ; then + First=$Target + sed -e "/man\.macros/r $SrcDir/man.macros" -e "/man\.macros/d" \ + $ManPage > $Dir/$First + chmod 444 $Dir/$First + $Gzip $Dir/$First else - rm -f $DIR/$f $DIR/$f.* - ln $S$FIRST$Z $DIR/$f$Z + ln $SymOrLoc$First$Gz $Dir/$Target$Gz fi done + +######################################################################## +exit 0 |