diff -r 333964c621f1 -r cb59d6afeb61 openpkg/man.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/openpkg/man.sh Tue Jan 06 23:40:39 2009 +0100 @@ -0,0 +1,154 @@ +#!@l_prefix@/lib/openpkg/bash +## +## man -- OpenPKG Tool Chain "man" command +## Copyright (c) 2000-2007 OpenPKG Foundation e.V. +## Copyright (c) 2000-2007 Ralf S. Engelschall +## +## Permission to use, copy, modify, and distribute this software for +## any purpose with or without fee is hereby granted, provided that +## the above copyright notice and this permission notice appear in all +## copies. +## +## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED +## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR +## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +## SUCH DAMAGE. +## + +# configuration +prefix="@l_prefix@" + +# minimum command line parsing +opt_h=no +while [ 1 ]; do + case "$1" in + -h | --help ) opt_h=yes; shift ;; + * ) break ;; + esac +done +if [ ".$opt_h" = .yes ]; then + echo "openpkg:man:USAGE: openpkg man [--help] [
] " + exit 0 +fi +if [ $# -eq 1 ]; then + man_page="$1" +elif [ $# -eq 2 ]; then + man_sect="$1" + man_page="$2" +else + echo "openpkg:man:ERROR: invalid number of arguments" 1>&2 + exit 1 +fi + +# determine path to commands +openpkg_tools="${OPENPKG_TOOLS}" +openpkg_tools_cmdpath="${OPENPKG_TOOLS_CMDPATH}" +if [ ".${openpkg_tools}" != . -a ".${openpkg_tools_cmdpath}" = . ]; then + openpkg_tools_cmdpath="${openpkg_tools}/cmd:@" +fi +cmdpath="${prefix}/libexec/openpkg" +if [ -d "${prefix}/libexec/openpkg-tools" ]; then + cmdpath="${prefix}/libexec/openpkg-tools:${cmdpath}" +fi +if [ -d "${prefix}/libexec/openpkg-audit" ]; then + cmdpath="${prefix}/libexec/openpkg-audit:${cmdpath}" +fi +if [ ".${openpkg_tools_cmdpath}" != . ]; then + cmdpath=`echo "${openpkg_tools_cmdpath}" | sed -e "s;@;${cmdpath};"` +fi +openpkg_tools_cmdpath=`echo "${cmdpath}" | sed -e 's/::/:/g' -e 's/^://' -e 's/:$//'` + +# search for manual page in OpenPKG Tool Chain +man_file="" +man_type="" +OIFS="$IFS"; IFS=":" +for dir in ${openpkg_tools_cmdpath}; do + IFS="$OIFS" + for file in $dir/$man_page.${man_sect-"1"} $dir/$man_page.[1-9]; do + if [ -f "$file" ]; then + man_file="$file" + man_type="roff" + if [ ".$man_sect" = . ]; then + man_sect=`echo "$man_file" |\ + sed -e 's;^;X;' -e 's;^X.*\.\([1-9]\)$;\1;' -e 's;^X.*;;'` + fi + break + fi + done + if [ ".$man_type" = . ]; then + for file in $dir/$man_page.pod $dir/$man_page.pl $dir/$man_page.sh; do + if [ -f "$file" ]; then + if [ ".`grep '^=pod' $file`" != . ]; then + man_file="$file" + man_type="pod" + break + fi + fi + done + fi + if [ ".$man_type" != . ]; then + break + fi +done +IFS="$OIFS" +if [ ".$man_type" != . ]; then + # determine POD to Roff converter + pod2roff="" + if [ ".$man_type" = .pod ]; then + pod2roff=`$prefix/lib/openpkg/shtool path -p "$prefix/bin:$PATH" pod2man` + if [ ".$pod2roff" = . ]; then + echo "openpkg:man:ERROR: unable to find POD to Roff converter (pod2man)" 1>&2 + exit 1 + fi + if [ ".$man_sect" = . ]; then + man_sect=1 + fi + pod2roff="$pod2roff --section=${man_sect}" + pod2roff="$pod2roff --release=\"$man_page(${man_sect})\"" + pod2roff="$pod2roff --center=OpenPKG --date=OpenPKG" + pod2roff="$pod2roff --quotes=none" + fi + + # determine Roff to ASCII converter + roff2ascii=`$prefix/lib/openpkg/shtool path -p "$prefix/bin:$PATH" nroff groff` + if [ ".$roff2ascii" = . ]; then + echo "openpkg:man:ERROR: unable to find Roff to ASCII converter (nroff, groff)" 1>&2 + exit 1 + fi + roff2ascii="$roff2ascii -man" + case "$roff2ascii" in + */groff ) roff2ascii="$roff2ascii -Tascii" ;; + esac + + # determine pager + pager="$PAGER" + if [ ".$pager" = . ]; then + pager=`$prefix/lib/openpkg/shtool path -p "$prefix/bin:$PATH" less more cat` + fi + if [ ".$pager" = . ]; then + echo "openpkg:man:ERROR: unable to find text viewer ($PAGER, less, more, cat)" 1>&2 + exit 1 + fi + + # render the manual page to the TTY + if [ ".$man_type" = .roff ]; then + eval "$roff2ascii $man_file | $pager" + elif [ ".$man_type" = .pod ]; then + eval "$pod2roff $man_file | $roff2ascii | $pager" + fi + exit 0 +fi + +# fallback to the man(1) command +MANPATH="$prefix/man:$prefix/local/man:${MANPATH-/usr/man}:/usr/man:/usr/share/man" +export MANPATH +eval "exec man $man_sect $man_page" +