openpkg/man.sh

changeset 53
11a94c8e617e
child 428
f880f219c566
equal deleted inserted replaced
-1:000000000000 0:ba8aac2216e8
1 #!@l_prefix@/lib/openpkg/bash
2 ##
3 ## man -- OpenPKG Tool Chain "man" command
4 ## Copyright (c) 2000-2007 OpenPKG Foundation e.V. <http://openpkg.net/>
5 ## Copyright (c) 2000-2007 Ralf S. Engelschall <http://engelschall.com/>
6 ##
7 ## Permission to use, copy, modify, and distribute this software for
8 ## any purpose with or without fee is hereby granted, provided that
9 ## the above copyright notice and this permission notice appear in all
10 ## copies.
11 ##
12 ## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
13 ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
14 ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
15 ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
16 ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
17 ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
18 ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
19 ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
20 ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
21 ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
22 ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23 ## SUCH DAMAGE.
24 ##
25
26 # configuration
27 prefix="@l_prefix@"
28
29 # minimum command line parsing
30 opt_h=no
31 while [ 1 ]; do
32 case "$1" in
33 -h | --help ) opt_h=yes; shift ;;
34 * ) break ;;
35 esac
36 done
37 if [ ".$opt_h" = .yes ]; then
38 echo "openpkg:man:USAGE: openpkg man [--help] [<section>] <command>"
39 exit 0
40 fi
41 if [ $# -eq 1 ]; then
42 man_page="$1"
43 elif [ $# -eq 2 ]; then
44 man_sect="$1"
45 man_page="$2"
46 else
47 echo "openpkg:man:ERROR: invalid number of arguments" 1>&2
48 exit 1
49 fi
50
51 # determine path to commands
52 openpkg_tools="${OPENPKG_TOOLS}"
53 openpkg_tools_cmdpath="${OPENPKG_TOOLS_CMDPATH}"
54 if [ ".${openpkg_tools}" != . -a ".${openpkg_tools_cmdpath}" = . ]; then
55 openpkg_tools_cmdpath="${openpkg_tools}/cmd:@"
56 fi
57 cmdpath="${prefix}/libexec/openpkg"
58 if [ -d "${prefix}/libexec/openpkg-tools" ]; then
59 cmdpath="${prefix}/libexec/openpkg-tools:${cmdpath}"
60 fi
61 if [ -d "${prefix}/libexec/openpkg-audit" ]; then
62 cmdpath="${prefix}/libexec/openpkg-audit:${cmdpath}"
63 fi
64 if [ ".${openpkg_tools_cmdpath}" != . ]; then
65 cmdpath=`echo "${openpkg_tools_cmdpath}" | sed -e "s;@;${cmdpath};"`
66 fi
67 openpkg_tools_cmdpath=`echo "${cmdpath}" | sed -e 's/::/:/g' -e 's/^://' -e 's/:$//'`
68
69 # search for manual page in OpenPKG Tool Chain
70 man_file=""
71 man_type=""
72 OIFS="$IFS"; IFS=":"
73 for dir in ${openpkg_tools_cmdpath}; do
74 IFS="$OIFS"
75 for file in $dir/$man_page.${man_sect-"1"} $dir/$man_page.[1-9]; do
76 if [ -f "$file" ]; then
77 man_file="$file"
78 man_type="roff"
79 if [ ".$man_sect" = . ]; then
80 man_sect=`echo "$man_file" |\
81 sed -e 's;^;X;' -e 's;^X.*\.\([1-9]\)$;\1;' -e 's;^X.*;;'`
82 fi
83 break
84 fi
85 done
86 if [ ".$man_type" = . ]; then
87 for file in $dir/$man_page.pod $dir/$man_page.pl $dir/$man_page.sh; do
88 if [ -f "$file" ]; then
89 if [ ".`grep '^=pod' $file`" != . ]; then
90 man_file="$file"
91 man_type="pod"
92 break
93 fi
94 fi
95 done
96 fi
97 if [ ".$man_type" != . ]; then
98 break
99 fi
100 done
101 IFS="$OIFS"
102 if [ ".$man_type" != . ]; then
103 # determine POD to Roff converter
104 pod2roff=""
105 if [ ".$man_type" = .pod ]; then
106 pod2roff=`$prefix/lib/openpkg/shtool path -p "$prefix/bin:$PATH" pod2man`
107 if [ ".$pod2roff" = . ]; then
108 echo "openpkg:man:ERROR: unable to find POD to Roff converter (pod2man)" 1>&2
109 exit 1
110 fi
111 if [ ".$man_sect" = . ]; then
112 man_sect=1
113 fi
114 pod2roff="$pod2roff --section=${man_sect}"
115 pod2roff="$pod2roff --release=\"$man_page(${man_sect})\""
116 pod2roff="$pod2roff --center=OpenPKG --date=OpenPKG"
117 pod2roff="$pod2roff --quotes=none"
118 fi
119
120 # determine Roff to ASCII converter
121 roff2ascii=`$prefix/lib/openpkg/shtool path -p "$prefix/bin:$PATH" nroff groff`
122 if [ ".$roff2ascii" = . ]; then
123 echo "openpkg:man:ERROR: unable to find Roff to ASCII converter (nroff, groff)" 1>&2
124 exit 1
125 fi
126 roff2ascii="$roff2ascii -man"
127 case "$roff2ascii" in
128 */groff ) roff2ascii="$roff2ascii -Tascii" ;;
129 esac
130
131 # determine pager
132 pager="$PAGER"
133 if [ ".$pager" = . ]; then
134 pager=`$prefix/lib/openpkg/shtool path -p "$prefix/bin:$PATH" less more cat`
135 fi
136 if [ ".$pager" = . ]; then
137 echo "openpkg:man:ERROR: unable to find text viewer ($PAGER, less, more, cat)" 1>&2
138 exit 1
139 fi
140
141 # render the manual page to the TTY
142 if [ ".$man_type" = .roff ]; then
143 eval "$roff2ascii $man_file | $pager"
144 elif [ ".$man_type" = .pod ]; then
145 eval "$pod2roff $man_file | $roff2ascii | $pager"
146 fi
147 exit 0
148 fi
149
150 # fallback to the man(1) command
151 MANPATH="$prefix/man:$prefix/local/man:${MANPATH-/usr/man}:/usr/man:/usr/share/man"
152 export MANPATH
153 eval "exec man $man_sect $man_page"
154

mercurial