OpenFPGA/libs/EXTERNAL/tcl8.6.12/unix/installManPage

126 lines
3.2 KiB
Bash
Executable File

#!/bin/sh
########################################################################
### Parse Options
###
Gzip=:
SymOrLoc=""
Gz=""
Suffix=""
while true; do
case $1 in
-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
done
if test "$#" != 2; then
echo "Usage: installManPages <options> file dir"
exit 1
fi
########################################################################
### 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.
#
# Backslashes are trippled in the sed script, because it is in
# backticks which doesn't pass backslashes literally.
#
Names=`sed -n '
# Look for a line that starts with .SH NAME
/^\.SH NAME/{
# Read next line
n
# Remove all commas ...
s/,//g
# ... and backslash-escaped spaces.
s/\\\ //g
# Delete from \- to the end of line
s/ \\\-.*//
# Convert all non-space non-alphanum sequences
# to single underscores.
s/[^ A-Za-z0-9][^ A-Za-z0-9]*/_/g
# 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
###
case $ManPage in
*.1) Section=1 ;;
*.3) Section=3 ;;
*.n) Section=n ;;
*) echo "unknown section for $ManPage"
exit 2 ;;
esac
Name=`basename $ManPage .$Section`
SrcDir=`dirname $ManPage`
########################################################################
### Process Page to Create Target Pages
###
Specials="DString Thread Notifier RegExp library packagens pkgMkIndex safesock FindPhoto FontId MeasureChar"
for n in $Specials; do
if [ "$Name" = "$n" ] ; then
Names="$n $Names"
fi
done
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 644 "$Dir/$First"
$Gzip "$Dir/$First"
else
ln $SymOrLoc"$First$Gz" "$Dir/$Target$Gz"
fi
done
########################################################################
exit 0