]> git.cameronkatri.com Git - freebsd-patches.git/commitdiff
Remove mandoc man(1) patch
authorCameron Katri <me@cameronkatri.com>
Mon, 20 Sep 2021 00:08:20 +0000 (20:08 -0400)
committerCameron Katri <me@cameronkatri.com>
Mon, 20 Sep 2021 00:08:20 +0000 (20:08 -0400)
man-1-Use-mandoc-1-man.patch [deleted file]

diff --git a/man-1-Use-mandoc-1-man.patch b/man-1-Use-mandoc-1-man.patch
deleted file mode 100644 (file)
index d4c0a79..0000000
+++ /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
-