From 139ef84d6f6ed5c1aa65a091c6018209c8da251a Mon Sep 17 00:00:00 2001 From: Cameron Katri Date: Sun, 19 Sep 2021 20:08:20 -0400 Subject: Remove mandoc man(1) patch --- man-1-Use-mandoc-1-man.patch | 1852 ------------------------------------------ 1 file changed, 1852 deletions(-) delete mode 100644 man-1-Use-mandoc-1-man.patch diff --git a/man-1-Use-mandoc-1-man.patch b/man-1-Use-mandoc-1-man.patch deleted file mode 100644 index d4c0a79..0000000 --- a/man-1-Use-mandoc-1-man.patch +++ /dev/null @@ -1,1852 +0,0 @@ -From a867d7705c78cce909bb05496339cd84b08fbaf3 Mon Sep 17 00:00:00 2001 -From: Cameron Katri -Date: Tue, 20 Jul 2021 13:25:03 -0400 -Subject: [PATCH] man(1): Remove FreeBSD's man(1) and use the man util from - mandoc - -This still includes manpath(1), because mandoc doesn't read -configuration files from /usr/local/etc/man.d/* ---- - usr.bin/Makefile | 2 +- - usr.bin/man/Makefile | 8 - - usr.bin/man/man.1 | 411 --------- - usr.bin/man/man.sh | 1032 ---------------------- - usr.bin/mandoc/Makefile | 4 +- - usr.bin/manpath/Makefile | 7 + - usr.bin/{man => manpath}/Makefile.depend | 0 - usr.bin/{man => manpath}/man.conf.5 | 0 - usr.bin/{man => manpath}/manpath.1 | 0 - usr.bin/manpath/manpath.sh | 289 ++++++ - 10 files changed, 300 insertions(+), 1453 deletions(-) - delete mode 100644 usr.bin/man/Makefile - delete mode 100644 usr.bin/man/man.1 - delete mode 100755 usr.bin/man/man.sh - create mode 100644 usr.bin/manpath/Makefile - rename usr.bin/{man => manpath}/Makefile.depend (100%) - rename usr.bin/{man => manpath}/man.conf.5 (100%) - rename usr.bin/{man => manpath}/manpath.1 (100%) - create mode 100755 usr.bin/manpath/manpath.sh - -diff --git a/usr.bin/Makefile b/usr.bin/Makefile -index 206da7154ac..072cf1122b8 100644 ---- a/usr.bin/Makefile -+++ b/usr.bin/Makefile -@@ -235,7 +235,7 @@ SUBDIR.${MK_MAIL}+= from - SUBDIR.${MK_MAIL}+= mail - SUBDIR.${MK_MAIL}+= msgs - SUBDIR.${MK_MAKE}+= bmake --SUBDIR.${MK_MAN_UTILS}+= man -+SUBDIR.${MK_MAN_UTILS}+= manpath - SUBDIR.${MK_NETCAT}+= nc - SUBDIR.${MK_NIS}+= ypcat - SUBDIR.${MK_NIS}+= ypmatch -diff --git a/usr.bin/man/Makefile b/usr.bin/man/Makefile -deleted file mode 100644 -index dc3748e2627..00000000000 ---- a/usr.bin/man/Makefile -+++ /dev/null -@@ -1,8 +0,0 @@ --# $FreeBSD$ -- --SCRIPTS= man.sh --LINKS= ${BINDIR}/man ${BINDIR}/manpath -- --MAN= man.1 manpath.1 man.conf.5 -- --.include -diff --git a/usr.bin/man/man.1 b/usr.bin/man/man.1 -deleted file mode 100644 -index 42fd60a8616..00000000000 ---- a/usr.bin/man/man.1 -+++ /dev/null -@@ -1,411 +0,0 @@ --.\"- --.\" Copyright (c) 2010 Gordon Tetlow --.\" All rights reserved. --.\" --.\" Redistribution and use in source and binary forms, with or without --.\" modification, are permitted provided that the following conditions --.\" are met: --.\" 1. Redistributions of source code must retain the above copyright --.\" notice, this list of conditions and the following disclaimer. --.\" 2. Redistributions in binary form must reproduce the above copyright --.\" notice, this list of conditions and the following disclaimer in the --.\" documentation and/or other materials provided with the distribution. --.\" --.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND --.\" ANY EXPRESS 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 AUTHOR OR 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. --.\" --.\" $FreeBSD$ --.\" --.Dd January 9, 2021 --.Dt MAN 1 --.Os --.Sh NAME --.Nm man --.Nd display online manual documentation pages --.Sh SYNOPSIS --.Nm --.Op Fl adho --.Op Fl t | w --.Op Fl M Ar manpath --.Op Fl P Ar pager --.Op Fl S Ar mansect --.Op Fl m Ar arch Ns Op : Ns Ar machine --.Op Fl p Op Ar eprtv --.Op Ar mansect --.Ar page ... --.Nm --.Fl f --.Ar keyword ... --.Nm --.Fl k --.Ar keyword ... --.Sh DESCRIPTION --The --.Nm --utility finds and displays online manual documentation pages. --If --.Ar mansect --is provided, --.Nm --restricts the search to the specific section of the manual. --.Pp --The sections of the manual are: --.Bl -enum -offset indent -compact --.It --.Fx --General Commands Manual --.It --.Fx --System Calls Manual --.It --.Fx --Library Functions Manual --.It --.Fx --Kernel Interfaces Manual --.It --.Fx --File Formats Manual --.It --.Fx --Games Manual --.It --.Fx --Miscellaneous Information Manual --.It --.Fx --System Manager's Manual --.It --.Fx --Kernel Developer's Manual --.El --.Pp --Options that --.Nm --understands: --.Bl -tag -width indent --.It Fl M Ar manpath --Forces a specific colon separated manual path instead of the default --search path. --See --.Xr manpath 1 . --Overrides the --.Ev MANPATH --environment variable. --.It Fl P Ar pager --Use specified pager. --Defaults to --.Dq Li "less -sR" --if color support is enabled, or --.Dq Li "less -s" . --Overrides the --.Ev MANPAGER --environment variable, which in turn overrides the --.Ev PAGER --environment variable. --.It Fl S Ar mansect --Restricts manual sections searched to the specified colon delimited list. --Defaults to --.Dq Li 1:8:2:3:3lua:n:4:5:6:7:9:l . --Overrides the --.Ev MANSECT --environment variable. --.It Fl a --Display all manual pages instead of just the first found for each --.Ar page --argument. --.It Fl d --Print extra debugging information. --Repeat for increased verbosity. --Does not display the manual page. --.It Fl f --Emulate --.Xr whatis 1 . --.It Fl h --Display short help message and exit. --.It Fl k --Emulate --.Xr apropos 1 . --.It Fl m Ar arch Ns Op : Ns Ar machine --Override the default architecture and machine settings allowing lookup of --other platform specific manual pages. --See --.Sx IMPLEMENTATION NOTES --for how this option changes the default behavior. --Overrides the --.Ev MACHINE_ARCH --and --.Ev MACHINE --environment variables. --.It Fl o --Force use of non-localized manual pages. --See --.Sx IMPLEMENTATION NOTES --for how locale specific searches work. --Overrides the --.Ev LC_ALL , LC_CTYPE , --and --.Ev LANG --environment variables. --.It Fl p Op Cm eprtv --Use the list of given preprocessors before running --.Xr nroff 1 --or --.Xr troff 1 . --Valid preprocessors arguments: --.Pp --.Bl -tag -width indent -compact --.It Cm e --.Xr eqn 1 --.It Cm p --.Xr pic 1 --.It Cm r --.Xr refer 1 --.It Cm t --.Xr tbl 1 --.It Cm v --.Xr vgrind 1 --.El --.Pp --Overrides the --.Ev MANROFFSEQ --environment variable. --.It Fl t --Send manual page source through --.Xr troff 1 --allowing transformation of the manual pages to other formats. --.It Fl w --Display the location of the manual page instead of the contents of --the manual page. --.El --.Sh IMPLEMENTATION NOTES --.Ss Locale Specific Searches --The --.Nm --utility supports manual pages in different locales. --The search behavior is dictated by the first of three --environment variables with a nonempty string: --.Ev LC_ALL , LC_CTYPE , --or --.Ev LANG . --If set, --.Nm --will search for locale specific manual pages using the following logic: --.Pp --.Bl -item -offset indent -compact --.It --.Va lang Ns _ Ns Va country Ns . Ns Va charset --.It --.Va lang Ns . Ns Va charset --.It --.Li en Ns . Ns Va charset --.El --.Pp --For example, if --.Ev LC_ALL --is set to --.Dq Li ja_JP.eucJP , --.Nm --will search the following paths when considering section 1 manual pages in --.Pa /usr/share/man : --.Pp --.Bl -item -offset indent -compact --.It --.Pa /usr/share/man/ja_JP.eucJP/man1 --.It --.Pa /usr/share/man/ja.eucJP/man1 --.It --.Pa /usr/share/man/en.eucJP/man1 --.It --.Pa /usr/share/man/man1 --.El --.Ss Platform Specific Searches --The --.Nm --utility supports platform specific manual pages. --The search behavior is dictated by the --.Fl m --option or the --.Ev MACHINE_ARCH --and --.Ev MACHINE --environment variables. --For example, if --.Ev MACHINE_ARCH --is set to --.Dq Li aarch64 --and --.Ev MACHINE --is set to --.Dq Li arm64 , --.Nm --will search the following paths when considering section 4 manual pages in --.Pa /usr/share/man : --.Pp --.Bl -item -offset indent -compact --.It --.Pa /usr/share/man/man4/aarch64 --.It --.Pa /usr/share/man/man4/arm64 --.It --.Pa /usr/share/man/man4 --.El --.Ss Displaying Specific Manual Files --The --.Nm --utility also supports displaying a specific manual page if passed a path --to the file as long as it contains a --.Ql / --character. --.Sh ENVIRONMENT --The following environment variables affect the execution of --.Nm : --.Bl -tag -width ".Ev MANROFFSEQ" --.It Ev LC_ALL , LC_CTYPE , LANG --Used to find locale specific manual pages. --Valid values can be found by running the --.Xr locale 1 --command. --See --.Sx IMPLEMENTATION NOTES --for details. --Influenced by the --.Fl o --option. --.It Ev MACHINE_ARCH , MACHINE --Used to find platform specific manual pages. --If unset, the output of --.Dq Li "sysctl hw.machine_arch" --and --.Dq Li "sysctl hw.machine" --is used respectively. --See --.Sx IMPLEMENTATION NOTES --for details. --Corresponds to the --.Fl m --option. --.It Ev MANPATH --The standard search path used by --.Xr man 1 --may be changed by specifying a path in the --.Ev MANPATH --environment variable. --Invalid paths, or paths without manual databases, are ignored. --Overridden by --.Fl M . --If --.Ev MANPATH --begins with a colon, it is appended to the default list; --if it ends with a colon, it is prepended to the default list; --or if it contains two adjacent colons, --the standard search path is inserted between the colons. --If none of these conditions are met, it overrides the --standard search path. --.It Ev MANROFFSEQ --Used to determine the preprocessors for the manual source before running --.Xr nroff 1 --or --.Xr troff 1 . --If unset, defaults to --.Xr tbl 1 . --Corresponds to the --.Fl p --option. --.It Ev MANSECT --Restricts manual sections searched to the specified colon delimited list. --Corresponds to the --.Fl S --option. --.It Ev MANWIDTH --If set to a numeric value, used as the width manpages should be displayed. --Otherwise, if set to a special value --.Dq Li tty , --and output is to a terminal, --the pages may be displayed over the whole width of the screen. --.It Ev MANCOLOR --If set, enables color support. --.It Ev MANPAGER --Program used to display files. --.Pp --If unset, and color support is enabled, --.Dq Li "less -sR" --is used. --.Pp --If unset, and color support is disabled, then --.Ev PAGER --is used. --If that has no value either, --.Dq Li "less -s" --is used. --.El --.Sh FILES --.Bl -tag -width indent -compact --.It Pa /etc/man.conf --System configuration file. --.It Pa /usr/local/etc/man.d/*.conf --Local configuration files. --.El --.Sh EXIT STATUS --.Ex -std --.Sh EXAMPLES --Show the manual page for --.Xr stat 2 : --.Bd -literal -offset indent --$ man 2 stat --.Ed --.Pp --Show all manual pages for --.Ql stat . --.Bd -literal -offset indent --$ man -a stat --.Ed --.Pp --List manual pages which match the regular expression either in the title or in --the body: --.Bd -literal -offset indent --$ man -k '\e.*archive' --.Ed --.Pp --Show the manual page for --.Xr ls 1 --and use --.Xr cat 1 --as pager: --.Bd -literal -offset indent --$ man -P cat ls --.Ed --.Pp --Show the location of the --.Xr ls 1 --manual page: --.Bd -literal -offset indent --$ man -w ls --.Ed --.Pp --.Sh SEE ALSO --.Xr apropos 1 , --.Xr intro 1 , --.Xr mandoc 1 , --.Xr manpath 1 , --.Xr whatis 1 , --.Xr intro 2 , --.Xr intro 3 , --.Xr intro 3lua , --.Xr intro 4 , --.Xr intro 5 , --.Xr man.conf 5 , --.Xr intro 6 , --.Xr intro 7 , --.Xr mdoc 7 , --.Xr intro 8 , --.Xr intro 9 -diff --git a/usr.bin/man/man.sh b/usr.bin/man/man.sh -deleted file mode 100755 -index f31c464fcc8..00000000000 ---- a/usr.bin/man/man.sh -+++ /dev/null -@@ -1,1032 +0,0 @@ --#! /bin/sh --# --# SPDX-License-Identifier: BSD-2-Clause-FreeBSD --# --# Copyright (c) 2010 Gordon Tetlow --# All rights reserved. --# --# Redistribution and use in source and binary forms, with or without --# modification, are permitted provided that the following conditions --# are met: --# 1. Redistributions of source code must retain the above copyright --# notice, this list of conditions and the following disclaimer. --# 2. Redistributions in binary form must reproduce the above copyright --# notice, this list of conditions and the following disclaimer in the --# documentation and/or other materials provided with the distribution. --# --# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND --# ANY EXPRESS 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 AUTHOR OR 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. --# --# $FreeBSD$ -- --# Usage: add_to_manpath path --# Adds a variable to manpath while ensuring we don't have duplicates. --# Returns true if we were able to add something. False otherwise. --add_to_manpath() { -- case "$manpath" in -- *:$1) decho " Skipping duplicate manpath entry $1" 2 ;; -- $1:*) decho " Skipping duplicate manpath entry $1" 2 ;; -- *:$1:*) decho " Skipping duplicate manpath entry $1" 2 ;; -- *) if [ -d "$1" ]; then -- decho " Adding $1 to manpath" -- manpath="$manpath:$1" -- return 0 -- fi -- ;; -- esac -- -- return 1 --} -- --# Usage: build_manlocales --# Builds a correct MANLOCALES variable. --build_manlocales() { -- # If the user has set manlocales, who are we to argue. -- if [ -n "$MANLOCALES" ]; then -- return -- fi -- -- parse_configs -- -- # Trim leading colon -- MANLOCALES=${manlocales#:} -- -- decho "Available manual locales: $MANLOCALES" --} -- --# Usage: build_manpath --# Builds a correct MANPATH variable. --build_manpath() { -- local IFS -- -- # If the user has set a manpath, who are we to argue. -- if [ -n "$MANPATH" ]; then -- case "$MANPATH" in -- *:) PREPEND_MANPATH=${MANPATH} ;; -- :*) APPEND_MANPATH=${MANPATH} ;; -- *::*) -- PREPEND_MANPATH=${MANPATH%%::*} -- APPEND_MANPATH=${MANPATH#*::} -- ;; -- *) return ;; -- esac -- fi -- -- if [ -n "$PREPEND_MANPATH" ]; then -- IFS=: -- for path in $PREPEND_MANPATH; do -- add_to_manpath "$path" -- done -- unset IFS -- fi -- -- search_path -- -- decho "Adding default manpath entries" -- IFS=: -- for path in $man_default_path; do -- add_to_manpath "$path" -- done -- unset IFS -- -- parse_configs -- -- if [ -n "$APPEND_MANPATH" ]; then -- IFS=: -- for path in $APPEND_MANPATH; do -- add_to_manpath "$path" -- done -- unset IFS -- fi -- # Trim leading colon -- MANPATH=${manpath#:} -- -- decho "Using manual path: $MANPATH" --} -- --# Usage: check_cat catglob --# Checks to see if a cat glob is available. --check_cat() { -- if exists "$1"; then -- use_cat=yes -- catpage=$found -- setup_cattool $catpage -- decho " Found catpage $catpage" -- return 0 -- else -- return 1 -- fi --} -- --# Usage: check_man manglob catglob --# Given 2 globs, figures out if the manglob is available, if so, check to --# see if the catglob is also available and up to date. --check_man() { -- if exists "$1"; then -- # We have a match, check for a cat page -- manpage=$found -- setup_cattool $manpage -- decho " Found manpage $manpage" -- -- if [ -n "${use_width}" ]; then -- # non-standard width -- unset use_cat -- decho " Skipping catpage: non-standard page width" -- elif exists "$2" && is_newer $found $manpage; then -- # cat page found and is newer, use that -- use_cat=yes -- catpage=$found -- setup_cattool $catpage -- decho " Using catpage $catpage" -- else -- # no cat page or is older -- unset use_cat -- decho " Skipping catpage: not found or old" -- fi -- return 0 -- fi -- -- return 1 --} -- --# Usage: decho "string" [debuglevel] --# Echoes to stderr string prefaced with -- if high enough debuglevel. --decho() { -- if [ $debug -ge ${2:-1} ]; then -- echo "-- $1" >&2 -- fi --} -- --# Usage: exists glob --# Returns true if glob resolves to a real file. --exists() { -- local IFS -- -- # Don't accidentally inherit callers IFS (breaks perl manpages) -- unset IFS -- -- # Use some globbing tricks in the shell to determine if a file -- # exists or not. -- set +f -- set -- "$1" $1 -- set -f -- -- if [ "$1" != "$2" -a -r "$2" ]; then -- found="$2" -- return 0 -- fi -- -- return 1 --} -- --# Usage: find_file path section subdir pagename --# Returns: true if something is matched and found. --# Search the given path/section combo for a given page. --find_file() { -- local manroot catroot mann man0 catn cat0 -- -- manroot="$1/man$2" -- catroot="$1/cat$2" -- if [ -n "$3" ]; then -- manroot="$manroot/$3" -- catroot="$catroot/$3" -- fi -- -- if [ ! -d "$manroot" -a ! -d "$catroot" ]; then -- return 1 -- fi -- decho " Searching directory $manroot" 2 -- -- mann="$manroot/$4.$2*" -- man0="$manroot/$4.0*" -- catn="$catroot/$4.$2*" -- cat0="$catroot/$4.0*" -- -- # This is the behavior as seen by the original man utility. -- # Let's not change that which doesn't seem broken. -- if check_man "$mann" "$catn"; then -- return 0 -- elif check_man "$man0" "$cat0"; then -- return 0 -- elif check_cat "$catn"; then -- return 0 -- elif check_cat "$cat0"; then -- return 0 -- fi -- -- return 1 --} -- --# Usage: is_newer file1 file2 --# Returns true if file1 is newer than file2 as calculated by mtime. --is_newer() { -- if ! [ "$1" -ot "$2" ]; then -- decho " mtime: $1 not older than $2" 3 -- return 0 -- else -- decho " mtime: $1 older than $2" 3 -- return 1 -- fi --} -- --# Usage: manpath_parse_args "$@" --# Parses commandline options for manpath. --manpath_parse_args() { -- local cmd_arg -- -- while getopts 'Ldq' cmd_arg; do -- case "${cmd_arg}" in -- L) Lflag=Lflag ;; -- d) debug=$(( $debug + 1 )) ;; -- q) qflag=qflag ;; -- *) manpath_usage ;; -- esac -- done >&2 --} -- --# Usage: manpath_usage --# Display usage for the manpath(1) utility. --manpath_usage() { -- echo 'usage: manpath [-Ldq]' >&2 -- exit 1 --} -- --# Usage: manpath_warnings --# Display some warnings to stderr. --manpath_warnings() { -- if [ -n "$Lflag" -a -n "$MANLOCALES" ]; then -- echo "(Warning: MANLOCALES environment variable set)" >&2 -- fi --} -- --# Usage: man_check_for_so page path --# Returns: True if able to resolve the file, false if it ended in tears. --# Detects the presence of the .so directive and causes the file to be --# redirected to another source file. --man_check_for_so() { -- local IFS line tstr -- -- unset IFS -- if [ -n "$catpage" ]; then -- return 0 -- fi -- -- # We need to loop to accommodate multiple .so directives. -- while true -- do -- line=$($cattool $manpage | head -1) -- case "$line" in -- .so*) trim "${line#.so}" -- decho "$manpage includes $tstr" -- # Glob and check for the file. -- if ! check_man "$path/$tstr*" ""; then -- decho " Unable to find $tstr" -- return 1 -- fi -- ;; -- *) break ;; -- esac -- done -- -- return 0 --} -- --# Usage: man_display_page --# Display either the manpage or catpage depending on the use_cat variable --man_display_page() { -- local IFS pipeline testline -- -- # We are called with IFS set to colon. This causes really weird -- # things to happen for the variables that have spaces in them. -- unset IFS -- -- # If we are supposed to use a catpage and we aren't using troff(1) -- # just zcat the catpage and we are done. -- if [ -z "$tflag" -a -n "$use_cat" ]; then -- if [ -n "$wflag" ]; then -- echo "$catpage (source: $manpage)" -- ret=0 -- else -- if [ $debug -gt 0 ]; then -- decho "Command: $cattool $catpage | $MANPAGER" -- ret=0 -- else -- eval "$cattool $catpage | $MANPAGER" -- ret=$? -- fi -- fi -- return -- fi -- -- # Okay, we are using the manpage, do we just need to output the -- # name of the manpage? -- if [ -n "$wflag" ]; then -- echo "$manpage" -- ret=0 -- return -- fi -- -- if [ -n "$use_width" ]; then -- mandoc_args="-O width=${use_width}" -- fi -- testline="mandoc -Tlint -Wunsupp >/dev/null 2>&1" -- if [ -n "$tflag" ]; then -- pipeline="mandoc -Tps $mandoc_args" -- else -- pipeline="mandoc $mandoc_args | $MANPAGER" -- fi -- -- if ! eval "$cattool $manpage | $testline" ;then -- if which -s groff; then -- man_display_page_groff -- else -- echo "This manpage needs groff(1) to be rendered" >&2 -- echo "First install groff(1): " >&2 -- echo "pkg install groff " >&2 -- ret=1 -- fi -- return -- fi -- -- if [ $debug -gt 0 ]; then -- decho "Command: $cattool $manpage | $pipeline" -- ret=0 -- else -- eval "$cattool $manpage | $pipeline" -- ret=$? -- fi --} -- --# Usage: man_display_page_groff --# Display the manpage using groff --man_display_page_groff() { -- local EQN NROFF PIC TBL TROFF REFER VGRIND -- local IFS l nroff_dev pipeline preproc_arg tool -- -- # So, we really do need to parse the manpage. First, figure out the -- # device flag (-T) we have to pass to eqn(1) and groff(1). Then, -- # setup the pipeline of commands based on the user's request. -- -- # If the manpage is from a particular charset, we need to setup nroff -- # to properly output for the correct device. -- case "${manpage}" in -- *.${man_charset}/*) -- # I don't pretend to know this; I'm just copying from the -- # previous version of man(1). -- case "$man_charset" in -- KOI8-R) nroff_dev="koi8-r" ;; -- ISO8859-1) nroff_dev="latin1" ;; -- ISO8859-15) nroff_dev="latin1" ;; -- UTF-8) nroff_dev="utf8" ;; -- *) nroff_dev="ascii" ;; -- esac -- -- NROFF="$NROFF -T$nroff_dev" -- EQN="$EQN -T$nroff_dev" -- -- # Iff the manpage is from the locale and not just the charset, -- # then we need to define the locale string. -- case "${manpage}" in -- */${man_lang}_${man_country}.${man_charset}/*) -- NROFF="$NROFF -dlocale=$man_lang.$man_charset" -- ;; -- */${man_lang}.${man_charset}/*) -- NROFF="$NROFF -dlocale=$man_lang.$man_charset" -- ;; -- esac -- -- # Allow language specific calls to override the default -- # set of utilities. -- l=$(echo $man_lang | tr [:lower:] [:upper:]) -- for tool in EQN NROFF PIC TBL TROFF REFER VGRIND; do -- eval "$tool=\${${tool}_$l:-\$$tool}" -- done -- ;; -- *) NROFF="$NROFF -Tascii" -- EQN="$EQN -Tascii" -- ;; -- esac -- -- if [ -z "$MANCOLOR" ]; then -- NROFF="$NROFF -P-c" -- fi -- -- if [ -n "${use_width}" ]; then -- NROFF="$NROFF -rLL=${use_width}n -rLT=${use_width}n" -- fi -- -- if [ -n "$MANROFFSEQ" ]; then -- set -- -$MANROFFSEQ -- while getopts 'egprtv' preproc_arg; do -- case "${preproc_arg}" in -- e) pipeline="$pipeline | $EQN" ;; -- g) ;; # Ignore for compatibility. -- p) pipeline="$pipeline | $PIC" ;; -- r) pipeline="$pipeline | $REFER" ;; -- t) pipeline="$pipeline | $TBL" ;; -- v) pipeline="$pipeline | $VGRIND" ;; -- *) usage ;; -- esac -- done -- # Strip the leading " | " from the resulting pipeline. -- pipeline="${pipeline#" | "}" -- else -- pipeline="$TBL" -- fi -- -- if [ -n "$tflag" ]; then -- pipeline="$pipeline | $TROFF" -- else -- pipeline="$pipeline | $NROFF | $MANPAGER" -- fi -- -- if [ $debug -gt 0 ]; then -- decho "Command: $cattool $manpage | $pipeline" -- ret=0 -- else -- eval "$cattool $manpage | $pipeline" -- ret=$? -- fi --} -- --# Usage: man_find_and_display page --# Search through the manpaths looking for the given page. --man_find_and_display() { -- local found_page locpath p path sect -- -- # Check to see if it's a file. But only if it has a '/' in -- # the filename. -- case "$1" in -- */*) if [ -f "$1" -a -r "$1" ]; then -- decho "Found a usable page, displaying that" -- unset use_cat -- manpage="$1" -- setup_cattool $manpage -- if man_check_for_so $manpage $(dirname $manpage); then -- found_page=yes -- man_display_page -- fi -- return -- fi -- ;; -- esac -- -- IFS=: -- for sect in $MANSECT; do -- decho "Searching section $sect" 2 -- for path in $MANPATH; do -- for locpath in $locpaths; do -- p=$path/$locpath -- p=${p%/.} # Rid ourselves of the trailing /. -- -- # Check if there is a MACHINE specific manpath. -- if find_file $p $sect $MACHINE "$1"; then -- if man_check_for_so $manpage $p; then -- found_page=yes -- man_display_page -- if [ -n "$aflag" ]; then -- continue 2 -- else -- return -- fi -- fi -- fi -- -- # Check if there is a MACHINE_ARCH -- # specific manpath. -- if find_file $p $sect $MACHINE_ARCH "$1"; then -- if man_check_for_so $manpage $p; then -- found_page=yes -- man_display_page -- if [ -n "$aflag" ]; then -- continue 2 -- else -- return -- fi -- fi -- fi -- -- # Check plain old manpath. -- if find_file $p $sect '' "$1"; then -- if man_check_for_so $manpage $p; then -- found_page=yes -- man_display_page -- if [ -n "$aflag" ]; then -- continue 2 -- else -- return -- fi -- fi -- fi -- done -- done -- done -- unset IFS -- -- # Nothing? Well, we are done then. -- if [ -z "$found_page" ]; then -- echo "No manual entry for $1" >&2 -- ret=1 -- return -- fi --} -- --# Usage: man_parse_args "$@" --# Parses commandline options for man. --man_parse_args() { -- local IFS cmd_arg -- -- while getopts 'M:P:S:adfhkm:op:tw' cmd_arg; do -- case "${cmd_arg}" in -- M) MANPATH=$OPTARG ;; -- P) MANPAGER=$OPTARG ;; -- S) MANSECT=$OPTARG ;; -- a) aflag=aflag ;; -- d) debug=$(( $debug + 1 )) ;; -- f) fflag=fflag ;; -- h) man_usage 0 ;; -- k) kflag=kflag ;; -- m) mflag=$OPTARG ;; -- o) oflag=oflag ;; -- p) MANROFFSEQ=$OPTARG ;; -- t) tflag=tflag ;; -- w) wflag=wflag ;; -- *) man_usage ;; -- esac -- done >&2 -- -- shift $(( $OPTIND - 1 )) -- -- # Check the args for incompatible options. -- case "${fflag}${kflag}${tflag}${wflag}" in -- fflagkflag*) echo "Incompatible options: -f and -k"; man_usage ;; -- fflag*tflag*) echo "Incompatible options: -f and -t"; man_usage ;; -- fflag*wflag) echo "Incompatible options: -f and -w"; man_usage ;; -- *kflagtflag*) echo "Incompatible options: -k and -t"; man_usage ;; -- *kflag*wflag) echo "Incompatible options: -k and -w"; man_usage ;; -- *tflagwflag) echo "Incompatible options: -t and -w"; man_usage ;; -- esac -- -- # Short circuit for whatis(1) and apropos(1) -- if [ -n "$fflag" ]; then -- do_whatis "$@" -- exit -- fi -- -- if [ -n "$kflag" ]; then -- do_apropos "$@" -- exit -- fi -- -- IFS=: -- for sect in $man_default_sections; do -- if [ "$sect" = "$1" ]; then -- decho "Detected manual section as first arg: $1" -- MANSECT="$1" -- shift -- break -- fi -- done -- unset IFS -- -- pages="$*" --} -- --# Usage: man_setup --# Setup various trivial but essential variables. --man_setup() { -- # Setup machine and architecture variables. -- if [ -n "$mflag" ]; then -- MACHINE_ARCH=${mflag%%:*} -- MACHINE=${mflag##*:} -- fi -- if [ -z "$MACHINE_ARCH" ]; then -- MACHINE_ARCH=$($SYSCTL -n hw.machine_arch) -- fi -- if [ -z "$MACHINE" ]; then -- MACHINE=$($SYSCTL -n hw.machine) -- fi -- decho "Using architecture: $MACHINE_ARCH:$MACHINE" -- -- setup_pager -- -- # Setup manual sections to search. -- if [ -z "$MANSECT" ]; then -- MANSECT=$man_default_sections -- fi -- decho "Using manual sections: $MANSECT" -- -- build_manpath -- man_setup_locale -- man_setup_width --} -- --# Usage: man_setup_width --# Set up page width. --man_setup_width() { -- local sizes -- -- unset use_width -- case "$MANWIDTH" in -- [0-9]*) -- if [ "$MANWIDTH" -gt 0 2>/dev/null ]; then -- use_width=$MANWIDTH -- fi -- ;; -- [Tt][Tt][Yy]) -- if { sizes=$($STTY size 0>&3 2>/dev/null); } 3>&1; then -- set -- $sizes -- if [ $2 -gt 80 ]; then -- use_width=$(($2-2)) -- fi -- fi -- ;; -- esac -- if [ -n "$use_width" ]; then -- decho "Using non-standard page width: ${use_width}" -- else -- decho 'Using standard page width' -- fi --} -- --# Usage: man_setup_locale --# Setup necessary locale variables. --man_setup_locale() { -- local lang_cc -- local locstr -- -- locpaths='.' -- man_charset='US-ASCII' -- -- # Setup locale information. -- if [ -n "$oflag" ]; then -- decho 'Using non-localized manpages' -- else -- # Use the locale tool to give us proper locale information -- eval $( $LOCALE ) -- -- if [ -n "$LANG" ]; then -- locstr=$LANG -- else -- locstr=$LC_CTYPE -- fi -- -- case "$locstr" in -- C) ;; -- C.UTF-8) ;; -- POSIX) ;; -- [a-z][a-z]_[A-Z][A-Z]\.*) -- lang_cc="${locstr%.*}" -- man_lang="${locstr%_*}" -- man_country="${lang_cc#*_}" -- man_charset="${locstr#*.}" -- locpaths="$locstr" -- locpaths="$locpaths:$man_lang.$man_charset" -- if [ "$man_lang" != "en" ]; then -- locpaths="$locpaths:en.$man_charset" -- fi -- locpaths="$locpaths:." -- ;; -- *) echo 'Unknown locale, assuming C' >&2 -- ;; -- esac -- fi -- -- decho "Using locale paths: $locpaths" --} -- --# Usage: man_usage [exitcode] --# Display usage for the man utility. --man_usage() { -- echo 'Usage:' -- echo ' man [-adho] [-t | -w] [-M manpath] [-P pager] [-S mansect]' -- echo ' [-m arch[:machine]] [-p [eprtv]] [mansect] page [...]' -- echo ' man -f page [...] -- Emulates whatis(1)' -- echo ' man -k page [...] -- Emulates apropos(1)' -- -- # When exit'ing with -h, it's not an error. -- exit ${1:-1} --} -- --# Usage: parse_configs --# Reads the end-user adjustable config files. --parse_configs() { -- local IFS file files -- -- if [ -n "$parsed_configs" ]; then -- return -- fi -- -- unset IFS -- -- # Read the global config first in case the user wants -- # to override config_local. -- if [ -r "$config_global" ]; then -- parse_file "$config_global" -- fi -- -- # Glob the list of files to parse. -- set +f -- files=$(echo $config_local) -- set -f -- -- for file in $files; do -- if [ -r "$file" ]; then -- parse_file "$file" -- fi -- done -- -- parsed_configs='yes' --} -- --# Usage: parse_file file --# Reads the specified config files. --parse_file() { -- local file line tstr var -- -- file="$1" -- decho "Parsing config file: $file" -- while read line; do -- decho " $line" 2 -- case "$line" in -- \#*) decho " Comment" 3 -- ;; -- MANPATH*) decho " MANPATH" 3 -- trim "${line#MANPATH}" -- add_to_manpath "$tstr" -- ;; -- MANLOCALE*) decho " MANLOCALE" 3 -- trim "${line#MANLOCALE}" -- manlocales="$manlocales:$tstr" -- ;; -- MANCONFIG*) decho " MANCONFIG" 3 -- trim "${line#MANCONFIG}" -- config_local="$tstr" -- ;; -- # Set variables in the form of FOO_BAR -- *_*[\ \ ]*) var="${line%%[\ \ ]*}" -- trim "${line#$var}" -- eval "$var=\"$tstr\"" -- decho " Parsed $var" 3 -- ;; -- esac -- done < "$file" --} -- --# Usage: search_path --# Traverse $PATH looking for manpaths. --search_path() { -- local IFS p path -- -- decho "Searching PATH for man directories" -- -- IFS=: -- for path in $PATH; do -- if add_to_manpath "$path/man"; then -- : -- elif add_to_manpath "$path/MAN"; then -- : -- else -- case "$path" in -- */bin) p="${path%/bin}/share/man" -- add_to_manpath "$p" -- p="${path%/bin}/man" -- add_to_manpath "$p" -- ;; -- esac -- fi -- done -- unset IFS -- -- if [ -z "$manpath" ]; then -- decho ' Unable to find any manpaths, using default' -- manpath=$man_default_path -- fi --} -- --# Usage: search_whatis cmd [arglist] --# Do the heavy lifting for apropos/whatis --search_whatis() { -- local IFS bad cmd f good key keywords loc opt out path rval wlist -- -- cmd="$1" -- shift -- -- whatis_parse_args "$@" -- -- build_manpath -- build_manlocales -- setup_pager -- -- if [ "$cmd" = "whatis" ]; then -- opt="-w" -- fi -- -- f='whatis' -- -- IFS=: -- for path in $MANPATH; do -- if [ \! -d "$path" ]; then -- decho "Skipping non-existent path: $path" 2 -- continue -- fi -- -- if [ -f "$path/$f" -a -r "$path/$f" ]; then -- decho "Found whatis: $path/$f" -- wlist="$wlist $path/$f" -- fi -- -- for loc in $MANLOCALES; do -- if [ -f "$path/$loc/$f" -a -r "$path/$loc/$f" ]; then -- decho "Found whatis: $path/$loc/$f" -- wlist="$wlist $path/$loc/$f" -- fi -- done -- done -- unset IFS -- -- if [ -z "$wlist" ]; then -- echo "$cmd: no whatis databases in $MANPATH" >&2 -- exit 1 -- fi -- -- rval=0 -- for key in $keywords; do -- out=$(grep -Ehi $opt -- "$key" $wlist) -- if [ -n "$out" ]; then -- good="$good\\n$out" -- else -- bad="$bad\\n$key: nothing appropriate" -- rval=1 -- fi -- done -- -- # Strip leading carriage return. -- good=${good#\\n} -- bad=${bad#\\n} -- -- if [ -n "$good" ]; then -- echo -e "$good" | $MANPAGER -- fi -- -- if [ -n "$bad" ]; then -- echo -e "$bad" >&2 -- fi -- -- exit $rval --} -- --# Usage: setup_cattool page --# Finds an appropriate decompressor based on extension --setup_cattool() { -- case "$1" in -- *.bz) cattool='/usr/bin/bzcat' ;; -- *.bz2) cattool='/usr/bin/bzcat' ;; -- *.gz) cattool='/usr/bin/zcat' ;; -- *.lzma) cattool='/usr/bin/lzcat' ;; -- *.xz) cattool='/usr/bin/xzcat' ;; -- *) cattool='/usr/bin/zcat -f' ;; -- esac --} -- --# Usage: setup_pager --# Correctly sets $MANPAGER --setup_pager() { -- # Setup pager. -- if [ -z "$MANPAGER" ]; then -- if [ -n "$MANCOLOR" ]; then -- MANPAGER="less -sR" -- else -- if [ -n "$PAGER" ]; then -- MANPAGER="$PAGER" -- else -- MANPAGER="less -s" -- fi -- fi -- fi -- decho "Using pager: $MANPAGER" --} -- --# Usage: trim string --# Trims whitespace from beginning and end of a variable --trim() { -- tstr=$1 -- while true; do -- case "$tstr" in -- [\ \ ]*) tstr="${tstr##[\ \ ]}" ;; -- *[\ \ ]) tstr="${tstr%%[\ \ ]}" ;; -- *) break ;; -- esac -- done --} -- --# Usage: whatis_parse_args "$@" --# Parse commandline args for whatis and apropos. --whatis_parse_args() { -- local cmd_arg -- while getopts 'd' cmd_arg; do -- case "${cmd_arg}" in -- d) debug=$(( $debug + 1 )) ;; -- *) whatis_usage ;; -- esac -- done >&2 -- -- shift $(( $OPTIND - 1 )) -- -- keywords="$*" --} -- --# Usage: whatis_usage --# Display usage for the whatis/apropos utility. --whatis_usage() { -- echo "usage: $cmd [-d] keyword [...]" -- exit 1 --} -- -- -- --# Supported commands --do_apropos() { -- [ $(stat -f %i /usr/bin/man) -ne $(stat -f %i /usr/bin/apropos) ] && \ -- exec apropos "$@" -- search_whatis apropos "$@" --} -- --do_man() { -- man_parse_args "$@" -- if [ -z "$pages" ]; then -- echo 'What manual page do you want?' >&2 -- exit 1 -- fi -- man_setup -- -- for page in $pages; do -- decho "Searching for $page" -- man_find_and_display "$page" -- done -- -- exit ${ret:-0} --} -- --do_manpath() { -- manpath_parse_args "$@" -- if [ -z "$qflag" ]; then -- manpath_warnings -- fi -- if [ -n "$Lflag" ]; then -- build_manlocales -- echo $MANLOCALES -- else -- build_manpath -- echo $MANPATH -- fi -- exit 0 --} -- --do_whatis() { -- [ $(stat -f %i /usr/bin/man) -ne $(stat -f %i /usr/bin/whatis) ] && \ -- exec whatis "$@" -- search_whatis whatis "$@" --} -- --# User's PATH setting decides on the groff-suite to pick up. --EQN=eqn --NROFF='groff -S -P-h -Wall -mtty-char -man' --PIC=pic --REFER=refer --TBL=tbl --TROFF='groff -S -man' --VGRIND=vgrind -- --LOCALE=/usr/bin/locale --STTY=/bin/stty --SYSCTL=/sbin/sysctl -- --debug=0 --man_default_sections='1:8:2:3:3lua:n:4:5:6:7:9:l' --man_default_path='/usr/share/man:/usr/share/openssl/man:/usr/local/share/man:/usr/local/man' --cattool='/usr/bin/zcat -f' -- --config_global='/etc/man.conf' -- --# This can be overridden via a setting in /etc/man.conf. --config_local='/usr/local/etc/man.d/*.conf' -- --# Set noglobbing for now. I don't want spurious globbing. --set -f -- --case "$0" in --*apropos) do_apropos "$@" ;; --*manpath) do_manpath "$@" ;; --*whatis) do_whatis "$@" ;; --*) do_man "$@" ;; --esac -diff --git a/usr.bin/mandoc/Makefile b/usr.bin/mandoc/Makefile -index 55e13fa6485..7b323e4ee55 100644 ---- a/usr.bin/mandoc/Makefile -+++ b/usr.bin/mandoc/Makefile -@@ -10,10 +10,12 @@ MAN= mandoc.1 eqn.7 mandoc_char.7 tbl.7 man.7 mdoc.7 roff.7 - MLINKS= mandoc.1 mdocml.1 - .if ${MK_MAN_UTILS} != no - MAN+= apropos.1 makewhatis.8 -+MAN+= man.1 - MLINKS+= apropos.1 whatis.1 - LINKS= ${BINDIR}/mandoc ${BINDIR}/whatis \ - ${BINDIR}/mandoc ${BINDIR}/makewhatis \ -- ${BINDIR}/mandoc ${BINDIR}/apropos -+ ${BINDIR}/mandoc ${BINDIR}/apropos \ -+ ${BINDIR}/mandoc ${BINDIR}/man - .elif defined(BOOTSTRAPPING) - .error "MK_MAN_UTILS should be set to yes when bootstrapping" - .endif -diff --git a/usr.bin/manpath/Makefile b/usr.bin/manpath/Makefile -new file mode 100644 -index 00000000000..20a05f68a62 ---- /dev/null -+++ b/usr.bin/manpath/Makefile -@@ -0,0 +1,7 @@ -+# $FreeBSD$ -+ -+SCRIPTS= manpath.sh -+ -+MAN= manpath.1 man.conf.5 -+ -+.include -diff --git a/usr.bin/man/Makefile.depend b/usr.bin/manpath/Makefile.depend -similarity index 100% -rename from usr.bin/man/Makefile.depend -rename to usr.bin/manpath/Makefile.depend -diff --git a/usr.bin/man/man.conf.5 b/usr.bin/manpath/man.conf.5 -similarity index 100% -rename from usr.bin/man/man.conf.5 -rename to usr.bin/manpath/man.conf.5 -diff --git a/usr.bin/man/manpath.1 b/usr.bin/manpath/manpath.1 -similarity index 100% -rename from usr.bin/man/manpath.1 -rename to usr.bin/manpath/manpath.1 -diff --git a/usr.bin/manpath/manpath.sh b/usr.bin/manpath/manpath.sh -new file mode 100755 -index 00000000000..1bec8ef4882 ---- /dev/null -+++ b/usr.bin/manpath/manpath.sh -@@ -0,0 +1,289 @@ -+#! /bin/sh -+# -+# SPDX-License-Identifier: BSD-2-Clause-FreeBSD -+# -+# Copyright (c) 2010 Gordon Tetlow -+# All rights reserved. -+# -+# Redistribution and use in source and binary forms, with or without -+# modification, are permitted provided that the following conditions -+# are met: -+# 1. Redistributions of source code must retain the above copyright -+# notice, this list of conditions and the following disclaimer. -+# 2. Redistributions in binary form must reproduce the above copyright -+# notice, this list of conditions and the following disclaimer in the -+# documentation and/or other materials provided with the distribution. -+# -+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -+# ANY EXPRESS 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 AUTHOR OR 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. -+# -+# $FreeBSD$ -+ -+# Usage: add_to_manpath path -+# Adds a variable to manpath while ensuring we don't have duplicates. -+# Returns true if we were able to add something. False otherwise. -+add_to_manpath() { -+ case "$manpath" in -+ *:$1) decho " Skipping duplicate manpath entry $1" 2 ;; -+ $1:*) decho " Skipping duplicate manpath entry $1" 2 ;; -+ *:$1:*) decho " Skipping duplicate manpath entry $1" 2 ;; -+ *) if [ -d "$1" ]; then -+ decho " Adding $1 to manpath" -+ manpath="$manpath:$1" -+ return 0 -+ fi -+ ;; -+ esac -+ -+ return 1 -+} -+ -+# Usage: build_manlocales -+# Builds a correct MANLOCALES variable. -+build_manlocales() { -+ # If the user has set manlocales, who are we to argue. -+ if [ -n "$MANLOCALES" ]; then -+ return -+ fi -+ -+ parse_configs -+ -+ # Trim leading colon -+ MANLOCALES=${manlocales#:} -+ -+ decho "Available manual locales: $MANLOCALES" -+} -+ -+# Usage: build_manpath -+# Builds a correct MANPATH variable. -+build_manpath() { -+ local IFS -+ -+ # If the user has set a manpath, who are we to argue. -+ if [ -n "$MANPATH" ]; then -+ case "$MANPATH" in -+ *:) PREPEND_MANPATH=${MANPATH} ;; -+ :*) APPEND_MANPATH=${MANPATH} ;; -+ *::*) -+ PREPEND_MANPATH=${MANPATH%%::*} -+ APPEND_MANPATH=${MANPATH#*::} -+ ;; -+ *) return ;; -+ esac -+ fi -+ -+ if [ -n "$PREPEND_MANPATH" ]; then -+ IFS=: -+ for path in $PREPEND_MANPATH; do -+ add_to_manpath "$path" -+ done -+ unset IFS -+ fi -+ -+ search_path -+ -+ decho "Adding default manpath entries" -+ IFS=: -+ for path in $man_default_path; do -+ add_to_manpath "$path" -+ done -+ unset IFS -+ -+ parse_configs -+ -+ if [ -n "$APPEND_MANPATH" ]; then -+ IFS=: -+ for path in $APPEND_MANPATH; do -+ add_to_manpath "$path" -+ done -+ unset IFS -+ fi -+ # Trim leading colon -+ MANPATH=${manpath#:} -+ -+ decho "Using manual path: $MANPATH" -+} -+ -+# Usage: decho "string" [debuglevel] -+# Echoes to stderr string prefaced with -- if high enough debuglevel. -+decho() { -+ if [ $debug -ge ${2:-1} ]; then -+ echo "-- $1" >&2 -+ fi -+} -+ -+# Usage: manpath_parse_args "$@" -+# Parses commandline options for manpath. -+manpath_parse_args() { -+ local cmd_arg -+ -+ while getopts 'Ldq' cmd_arg; do -+ case "${cmd_arg}" in -+ L) Lflag=Lflag ;; -+ d) debug=$(( $debug + 1 )) ;; -+ q) qflag=qflag ;; -+ *) manpath_usage ;; -+ esac -+ done >&2 -+} -+ -+# Usage: manpath_usage -+# Display usage for the manpath(1) utility. -+manpath_usage() { -+ echo 'usage: manpath [-Ldq]' >&2 -+ exit 1 -+} -+ -+# Usage: manpath_warnings -+# Display some warnings to stderr. -+manpath_warnings() { -+ if [ -n "$Lflag" -a -n "$MANLOCALES" ]; then -+ echo "(Warning: MANLOCALES environment variable set)" >&2 -+ fi -+} -+ -+# Usage: parse_configs -+# Reads the end-user adjustable config files. -+parse_configs() { -+ local IFS file files -+ -+ if [ -n "$parsed_configs" ]; then -+ return -+ fi -+ -+ unset IFS -+ -+ # Read the global config first in case the user wants -+ # to override config_local. -+ if [ -r "$config_global" ]; then -+ parse_file "$config_global" -+ fi -+ -+ # Glob the list of files to parse. -+ set +f -+ files=$(echo $config_local) -+ set -f -+ -+ for file in $files; do -+ if [ -r "$file" ]; then -+ parse_file "$file" -+ fi -+ done -+ -+ parsed_configs='yes' -+} -+ -+# Usage: parse_file file -+# Reads the specified config files. -+parse_file() { -+ local file line tstr var -+ -+ file="$1" -+ decho "Parsing config file: $file" -+ while read line; do -+ decho " $line" 2 -+ case "$line" in -+ \#*) decho " Comment" 3 -+ ;; -+ MANPATH*) decho " MANPATH" 3 -+ trim "${line#MANPATH}" -+ add_to_manpath "$tstr" -+ ;; -+ MANLOCALE*) decho " MANLOCALE" 3 -+ trim "${line#MANLOCALE}" -+ manlocales="$manlocales:$tstr" -+ ;; -+ MANCONFIG*) decho " MANCONFIG" 3 -+ trim "${line#MANCONFIG}" -+ config_local="$tstr" -+ ;; -+ # Set variables in the form of FOO_BAR -+ *_*[\ \ ]*) var="${line%%[\ \ ]*}" -+ trim "${line#$var}" -+ eval "$var=\"$tstr\"" -+ decho " Parsed $var" 3 -+ ;; -+ esac -+ done < "$file" -+} -+ -+# Usage: search_path -+# Traverse $PATH looking for manpaths. -+search_path() { -+ local IFS p path -+ -+ decho "Searching PATH for man directories" -+ -+ IFS=: -+ for path in $PATH; do -+ if add_to_manpath "$path/man"; then -+ : -+ elif add_to_manpath "$path/MAN"; then -+ : -+ else -+ case "$path" in -+ */bin) p="${path%/bin}/share/man" -+ add_to_manpath "$p" -+ p="${path%/bin}/man" -+ add_to_manpath "$p" -+ ;; -+ esac -+ fi -+ done -+ unset IFS -+ -+ if [ -z "$manpath" ]; then -+ decho ' Unable to find any manpaths, using default' -+ manpath=$man_default_path -+ fi -+} -+ -+# Usage: trim string -+# Trims whitespace from beginning and end of a variable -+trim() { -+ tstr=$1 -+ while true; do -+ case "$tstr" in -+ [\ \ ]*) tstr="${tstr##[\ \ ]}" ;; -+ *[\ \ ]) tstr="${tstr%%[\ \ ]}" ;; -+ *) break ;; -+ esac -+ done -+} -+ -+do_manpath() { -+ manpath_parse_args "$@" -+ if [ -z "$qflag" ]; then -+ manpath_warnings -+ fi -+ if [ -n "$Lflag" ]; then -+ build_manlocales -+ echo $MANLOCALES -+ else -+ build_manpath -+ echo $MANPATH -+ fi -+ exit 0 -+} -+ -+debug=0 -+man_default_path='/usr/share/man:/usr/share/openssl/man:/usr/local/share/man:/usr/local/man' -+ -+config_global='/etc/man.conf' -+ -+# This can be overridden via a setting in /etc/man.conf. -+config_local='/usr/local/etc/man.d/*.conf' -+ -+# Set noglobbing for now. I don't want spurious globbing. -+set -f -+ -+do_manpath "$@" --- -2.32.0 - -- cgit v1.2.3-56-ge451