summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordkf <donal.k.fellows@manchester.ac.uk>2010-02-19 13:45:39 (GMT)
committerdkf <donal.k.fellows@manchester.ac.uk>2010-02-19 13:45:39 (GMT)
commit471b2df9228c4a0d62e3cb5af2f0a3e3ff10ae69 (patch)
tree05de98540cc1f11fc78b7865d9bd73c817bc7ce7
parent02f1403c00f04aab73f988a2ebdc0195d6feaed5 (diff)
downloadtk-471b2df9228c4a0d62e3cb5af2f0a3e3ff10ae69.zip
tk-471b2df9228c4a0d62e3cb5af2f0a3e3ff10ae69.tar.gz
tk-471b2df9228c4a0d62e3cb5af2f0a3e3ff10ae69.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).
-rw-r--r--ChangeLog18
-rwxr-xr-xunix/installManPage133
2 files changed, 102 insertions, 49 deletions
diff --git a/ChangeLog b/ChangeLog
index 554dcee..a7bd389 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2010-02-19 Donal K. Fellows <dkf@users.sf.net>
+
+ * unix/installManPage: [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).
+
2010-02-19 Stuart Cassoff <stwo@users.sourceforge.net>
* tcl.m4: Correct compiler/linker flags
@@ -6,14 +13,13 @@
2010-02-17 Joe English <jenglish@users.sourceforge.net>
- * generic/tkMenu.c: Defer TkMenuOptionTables cleanup
- to CallWhenDeleted() time, to ensure that the record
- doesn't get freed until after all widget instance commands
- have been deleted (Fixes [Bug#2952745]).
+ * generic/tkMenu.c: [Bug 2952745]: Defer TkMenuOptionTables cleanup to
+ CallWhenDeleted() time, to ensure that the record doesn't get freed
+ until after all widget instance commands have been deleted.
2010-02-16 Jan Nijtmans <nijtmans@users.sf.net>
- * unix/tkUnixWm.c make TkSetTransientFor static
+ * unix/tkUnixWm.c make TkSetTransientFor static
2010-02-07 Jan Nijtmans <nijtmans@users.sf.net>
@@ -162,7 +168,7 @@
2009-12-27 Pat Thoyts <patthoyts@users.sourceforge.net>
- * win/tkWinMenu.c: [Bug 2879927]: Highlight for cascade items in
+ * win/tkWinMenu.c: [Bug 2879927]: Highlight for cascade items in
torn-off menus is incorrect on Windows.
2009-12-25 Donal K. Fellows <dkf@users.sf.net>
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