aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCameron Katri <me@cameronkatri.com>2021-09-19 20:08:20 -0400
committerCameron Katri <me@cameronkatri.com>2021-09-19 20:08:20 -0400
commit139ef84d6f6ed5c1aa65a091c6018209c8da251a (patch)
tree8059efe0587d6cc1bf3987ea9fdc9d182161cb2a
parentb62e9ab61fda19aec2f615fe2c0aa5912152ae69 (diff)
downloadfreebsd-patches-139ef84d6f6ed5c1aa65a091c6018209c8da251a.tar.gz
freebsd-patches-139ef84d6f6ed5c1aa65a091c6018209c8da251a.tar.zst
freebsd-patches-139ef84d6f6ed5c1aa65a091c6018209c8da251a.zip
Remove mandoc man(1) patch
-rw-r--r--man-1-Use-mandoc-1-man.patch1852
1 files changed, 0 insertions, 1852 deletions
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 <me@cameronkatri.com>
-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 <bsd.prog.mk>
-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<copy\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 <bsd.prog.mk>
-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
-