blob: 3d5fa7b6a3fe63a46892b086d438e147162209cf (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
#!/bin/sh
########################################################################
### Parse Options
###
Gzip=:
Sym=""
Loc=""
Gz=""
Suffix=""
while true; do
case $1 in
-s | --symlinks ) Sym="-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 "$Sym" && Loc="$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/,/^\./{
/^\./!{
# Remove all commas...
s/,//g
# ... and backslash-escaped spaces.
s/\\\ //g
/\\\-.*/{
# Delete from \- to the end of line
s/ \\\-.*//
h
s/.*/./
x
}
# Convert all non-space non-alphanum sequences
# to single underscores.
s/[^ A-Za-z0-9][^ A-Za-z0-9]*/_/g
p
g
/^\./{
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 $Sym"$Loc$First$Gz" "$Dir/$Target$Gz"
fi
done
########################################################################
exit 0
|