File: nsinstall-man.sh

package info (click to toggle)
aolserver4 4.5.1-18.1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 12,008 kB
  • sloc: ansic: 45,126; tcl: 5,533; sh: 1,037; makefile: 380; pascal: 219; php: 13
file content (144 lines) | stat: -rwxr-xr-x 2,904 bytes parent folder | download | duplicates (2)
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
142
143
144
#!/bin/sh

#
# nsinstall-man.sh --
#
#	Install a man or HTML page, making links to all functions/commands
#	documented in the file.  Modified from the Tcl source.
#
# $Id: nsinstall-man.sh,v 1.4 2006/04/28 13:47:45 jgdavidson Exp $
#

ECHO=:
LN=ln
RM="rm -f"
MD="mkdir -p"
SED=sed
CAT=cat
CHMOD=chmod
MODE=0444
GROFF=groff
HTM=""

while true; do
    case $1 in
        -v | --verbose)  	  ECHO=echo;;
        -s | --symlinks)  	  LN="$LN -s ";;
	-h | --html)		  HTM=".htm";;
	*)  break ;;
    esac
    shift
done
if test "$#" -ne 1 -a "$#" -ne 2; then
    echo "Usage: $0 <options> file ?dir?"
    exit 1
fi
if test "$#" -eq 2; then
    DIR=$2
else
    DIR=$AOLSERVER
fi
if test -z "$DIR"; then
    echo "Must specify output directory or set AOLSERVER environment variable."
    exit 1
fi
MANPAGE=$1
SECTION=`echo $MANPAGE | $SED 's/.*\(.\)$/\1/'`

#
# Search for man.macros in common locations.
#

MACROS=""
for d in \
	`dirname $MANPAGE` \
	$AOLSERVER/include \
	`dirname $0`/../include \
	../doc \
	./aolserver/doc
do
	f="$d/man.macros"
	if test -r $f; then
		MACROS=$f
		break
	fi
done
if test -z "$MACROS"; then
    echo "Can not locate required man.macros"
    exit 1
fi

#
# 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/ \\\-.*//   ;# 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.
#
# Please keep the commented version above updated if you
# change anything to the script below.
NAMES=`$SED -n '
    /^\\.SH NAME/{
	s/^.*$//
	n
	s/,//g
	s/\\\ //g
	s/ \\\-.*//
	p
	q
    }' $MANPAGE`

#
# Create or link man pages for each name.
#

if [ "$SECTION" = "n" ]; then
	SECTION=3
fi
if test -z "$HTM"; then
    DIR=$DIR/man$SECTION
    MAN2HTM=$CAT
else
    DIR=$DIR
    MAN2HTM="$GROFF -Thtml -man"
fi

FIRST=""
$MD $DIR
for name in $NAMES
do
    tail=$name.$SECTION
    file=$DIR/$tail$HTM
    $RM $file
    if test -z "$FIRST"; then
	FIRST=$file
	if test -z "$HTM"; then
		$SED -e "/man\.macros/r $MACROS" -e "/man\.macros/d" $MANPAGE | \
			$SED 's/\(\.TH\) \(\w\+\) [n3] \(.*\)/\1 \2 3aolserver \3/' | \
			$MAN2HTM | gzip -9 > ${file}aolserver.gz
		$CHMOD $MODE ${file}aolserver.gz
    		$ECHO "created: ${file}aolserver.gz ($MODE)"
	else
		$SED -e "/man\.macros/r $MACROS" -e "/man\.macros/d" $MANPAGE | \
			$MAN2HTM > $file
		$CHMOD $MODE $file
    		$ECHO "created: $file ($MODE)"
	fi
    else
	if test -z "$HTM"; then
		$LN `basename $FIRST`aolserver.gz ${file}aolserver.gz
	else
		$LN `basename $FIRST` $file
	fi
    	$ECHO "linked: $file"
    fi
done