summaryrefslogtreecommitdiff
path: root/system
diff options
context:
space:
mode:
authorA. Wilcox <awilcox@wilcox-tech.com>2020-06-15 21:01:43 +0000
committerA. Wilcox <awilcox@wilcox-tech.com>2020-06-15 21:01:43 +0000
commit00232199464eaa13cd475988b17886a7635e8758 (patch)
tree07022c77daeabfcd5cb9756075265db3e2f204c5 /system
parent5e30a49b7a4cd903d446302f3a7f4ac685b53f2d (diff)
parentabe028b0d7927e92ab1dda0920a70955ef839be4 (diff)
downloadpackages-00232199464eaa13cd475988b17886a7635e8758.tar.gz
packages-00232199464eaa13cd475988b17886a7635e8758.tar.bz2
packages-00232199464eaa13cd475988b17886a7635e8758.tar.xz
packages-00232199464eaa13cd475988b17886a7635e8758.zip
Merge branch 'new/mandoc' into 'master'
Switch from man-db to mandoc See merge request adelie/packages!458
Diffstat (limited to 'system')
-rw-r--r--system/adelie-base/APKBUILD4
-rw-r--r--system/man-db/APKBUILD44
-rw-r--r--system/man-db/man-db-2.8.5-iconv.patch65
-rw-r--r--system/man-db/man-db.trigger3
-rw-r--r--system/mandoc/APKBUILD94
-rw-r--r--system/mandoc/cgi-adelie.patch60
-rw-r--r--system/mandoc/cgi-gz.patch77
-rw-r--r--system/mandoc/cgi-search.patch48
-rw-r--r--system/mandoc/configure.patch21
-rw-r--r--system/mandoc/doc.patch132
-rw-r--r--system/mandoc/empty-tbl-null-deref.patch62
-rw-r--r--system/mandoc/less.patch58
-rw-r--r--system/mandoc/mandoc.post-deinstall3
-rw-r--r--system/mandoc/mandoc.trigger3
-rw-r--r--system/mandoc/tbl-colwidth-oob.patch62
15 files changed, 622 insertions, 114 deletions
diff --git a/system/adelie-base/APKBUILD b/system/adelie-base/APKBUILD
index 8b06a3699..7cd92003d 100644
--- a/system/adelie-base/APKBUILD
+++ b/system/adelie-base/APKBUILD
@@ -2,7 +2,7 @@
# Maintainer: A. Wilcox <awilfox@adelielinux.org>
pkgname=adelie-base
pkgver=0.9.4
-pkgrel=1
+pkgrel=2
pkgdesc="The Adélie Linux Base System"
url="https://www.adelielinux.org/"
arch="noarch"
@@ -14,7 +14,7 @@ _core_depends="apk-tools adelie-keys musl-utils shadow
util-linux net-tools
nvi sed psmisc less tzdata"
depends="adelie-core binutils debianutils file gettys-openrc
- kbd libarchive-tools man-db patch sed sharutils sysklogd zsh"
+ kbd libarchive-tools mandoc patch sed sharutils sysklogd zsh"
makedepends=""
makedepends_host="$depends"
subpackages="adelie-core:core $pkgname-doc $pkgname-posix $pkgname-lsb dev
diff --git a/system/man-db/APKBUILD b/system/man-db/APKBUILD
deleted file mode 100644
index 136e0720d..000000000
--- a/system/man-db/APKBUILD
+++ /dev/null
@@ -1,44 +0,0 @@
-# Contributor: A. Wilcox <awilfox@adelielinux.org>
-# Maintainer: A. Wilcox <awilfox@adelielinux.org>
-pkgname=man-db
-pkgver=2.9.1
-pkgrel=0
-pkgdesc="The man command and related utilities for examining on-line help files"
-url="https://www.nongnu.org/man-db/"
-arch="all"
-options="!check" # requires //IGNORE in iconv
-license="GPL-2.0+"
-depends="groff gzip less"
-makedepends_host="db-dev libpipeline-dev zlib-dev"
-subpackages="$pkgname-doc $pkgname-lang"
-triggers="man-db.trigger=/usr/share/man"
-source="https://download.savannah.nongnu.org/releases/man-db/man-db-$pkgver.tar.xz
- man-db-2.8.5-iconv.patch
- "
-
-build() {
- ./configure \
- --build=$CBUILD \
- --host=$CHOST \
- --prefix=/usr \
- --sysconfdir=/etc \
- --mandir=/usr/share/man \
- --localstatedir=/var \
- --disable-setuid \
- --with-sections="1 1p 1x 2 2x 3 3p 3x 4 4x 5 5x 6 6x 7 7x 8 8x 9 0p tcl n l p o" \
- --enable-nls \
- --with-db=db
- make
-}
-
-check() {
- make check
-}
-
-package() {
- make DESTDIR="$pkgdir" install
- rm -r "${pkgdir}"/usr/lib/tmpfiles.d # systemd
-}
-
-sha512sums="ae2d1e9f293795c63f5a9a1a765478a9a59cbe5fe6f759647be5057c1ae53f90baee8d5467921f3d0102300f2111a5026eeb25f78401bcb16ce45ad790634977 man-db-2.9.1.tar.xz
-0a68260fc48488408dc11855858aa2569efa3aeefd765c425b8fc988e7fee3e1d42e19eb299e518afc9b2ae54c5d37911176127124a43d5041f1137af0457097 man-db-2.8.5-iconv.patch"
diff --git a/system/man-db/man-db-2.8.5-iconv.patch b/system/man-db/man-db-2.8.5-iconv.patch
deleted file mode 100644
index c2232920d..000000000
--- a/system/man-db/man-db-2.8.5-iconv.patch
+++ /dev/null
@@ -1,65 +0,0 @@
---- man-db-2.8.5/src/man.c 2018-06-18 22:44:35.672743065 -0500
-+++ man-db-2.8.5/src/man.c 2018-06-18 22:46:35.032624890 -0500
-@@ -1516,15 +1516,13 @@
- {
- debug ("add_output_iconv: source %s, target %s\n", source, target);
- if (source && target && !STREQ (source, target)) {
-- char *target_translit = xasprintf ("%s//TRANSLIT", target);
- pipecmd *iconv_cmd;
- iconv_cmd = pipecmd_new_args
-- ("iconv", "-c", "-f", source, "-t", target_translit,
-+ ("iconv", "-c", "-f", source, "-t", target,
- (void *) 0);
- pipecmd_pre_exec (iconv_cmd, sandbox_load, sandbox_free,
- sandbox);
- pipeline_command (p, iconv_cmd);
-- free (target_translit);
- }
- }
-
---- man-db-2.8.5/src/manconv.c
-+++ man-db-2.8.5/src/manconv.c
-@@ -111,6 +111,5 @@ static int try_iconv (pipeline *p, const char *try_from_code, const char *to,
- iconv_t cd_utf8, cd = NULL;
-- bool to_utf8 = STREQ (try_to_code, "UTF-8") ||
-- STRNEQ (try_to_code, "UTF-8//", 7);
-- const char *utf8_target = last ? "UTF-8//IGNORE" : "UTF-8";
-- bool ignore_errors = (strstr (try_to_code, "//IGNORE") != NULL);
-+ bool to_utf8 = STREQ (try_to_code, "UTF-8");
-+ const char *utf8_target = "UTF-8";
-+ bool ignore_errors = 0;
- int ret = 0;
---- man-db-2.8.5/src/manconv_client.c
-+++ man-db-2.8.5/src/manconv_client.c
-@@ -102,7 +102,7 @@ void add_manconv (pipeline *p, const char *source, const char *target)
- codes->from[2] = NULL;
- name = appendstr (name, "UTF-8:", source, (void *) 0);
- }
-- codes->to = xasprintf ("%s//IGNORE", target);
-+ codes->to = xstrdup (target);
- /* informational only; no shell quoting concerns */
- name = appendstr (name, " -t ", codes->to, (void *) 0);
- if (quiet >= 2)
---- man-db-2.8.5/src/manconv_main.c
-+++ man-db-2.8.5/src/manconv_main.c
-@@ -106,9 +106,6 @@ static error_t parse_opt (int key, char *arg, struct argp_state *state)
- return 0;
- case 't':
- to_code = xstrdup (arg);
-- if (!strstr (to_code, "//"))
-- to_code = appendstr (to_code, "//TRANSLIT",
-- (void *) 0);
- return 0;
- case 'd':
- debug_level = 1;
---- man-db-2.8.5/src/whatis.c
-+++ man-db-2.8.5/src/whatis.c
-@@ -945,7 +945,7 @@ int main (int argc, char *argv[])
- display_seen = hashtable_create (&null_hashtable_free);
-
- #ifdef HAVE_ICONV
-- locale_charset = xasprintf ("%s//IGNORE", get_locale_charset ());
-+ locale_charset = xstrdup (get_locale_charset ());
- conv_to_locale = iconv_open (locale_charset, "UTF-8");
- free (locale_charset);
- #endif /* HAVE_ICONV */
diff --git a/system/man-db/man-db.trigger b/system/man-db/man-db.trigger
deleted file mode 100644
index f9de5961c..000000000
--- a/system/man-db/man-db.trigger
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-exec /usr/bin/mandb /usr/share/man >/dev/null
diff --git a/system/mandoc/APKBUILD b/system/mandoc/APKBUILD
new file mode 100644
index 000000000..b3a4c018c
--- /dev/null
+++ b/system/mandoc/APKBUILD
@@ -0,0 +1,94 @@
+# Maintainer: Max Rees <maxcrees@me.com>
+pkgname=mandoc
+pkgver=1.14.5
+pkgrel=0
+pkgdesc="Manual page database, compiler, and viewer"
+url="https://mandoc.bsd.lv/"
+arch="all"
+license="ISC AND BSD-2-Clause AND BSD-3-Clause"
+replaces="man-db"
+depends="less"
+makedepends="zlib-dev"
+checkdepends="perl"
+subpackages="$pkgname-doc $pkgname-cgi"
+install="$pkgname.post-deinstall"
+triggers="$pkgname.trigger=/usr/share/man"
+source="https://mandoc.bsd.lv/snapshots/mandoc-$pkgver.tar.gz
+ configure.patch
+ empty-tbl-null-deref.patch
+ tbl-colwidth-oob.patch
+ less.patch
+ doc.patch
+ cgi-adelie.patch
+ cgi-gz.patch
+ cgi-search.patch
+ "
+
+prepare() {
+ default_prepare
+ cat >"configure.local" <<-EOF
+ PREFIX=/usr
+ MANDIR=/usr/share/man
+ WWWPREFIX=/var/lib/mandoc-cgi
+ # remove /usr/X11R6 from the following.
+ MANPATH_BASE=/usr/share/man
+ MANPATH_DEFAULT=/usr/share/man:/usr/local/share/man
+ # groff also provides a soelim.
+ BINM_SOELIM=mandoc-soelim
+
+ CFLAGS="$CFLAGS"
+ LDFLAGS="$LDFLAGS"
+ LN="ln -sf"
+ OSNAME="Adelie Linux"
+ UTF8_LOCALE=C.UTF-8
+
+ BUILD_CATMAN=1
+ BUILD_CGI=1
+ EOF
+
+ cat >"cgi.h" <<-EOF
+ #define SCRIPT_NAME ""
+ #define MAN_DIR "/var/lib/mandoc-cgi"
+ #define CSS_DIR ""
+ #define CUSTOMIZE_TITLE "Adelie Linux manual pages"
+ EOF
+}
+
+build() {
+ ./configure
+ make
+}
+
+check() {
+ make regress
+}
+
+package() {
+ make DESTDIR="$pkgdir" install
+ install -Dm644 -t "$pkgdir"/usr/share/man/man8 man.cgi.8
+
+ mkdir -p "$pkgdir"/etc
+ cat >"$pkgdir"/etc/man.conf <<-EOF
+ # See man.conf(5).
+ #manpath /usr/share/man
+ #manpath /usr/local/share/man
+ EOF
+}
+
+cgi() {
+ pkgdesc="$pkgdesc (web interface)"
+ depends="$pkgname=$pkgver-r$pkgrel"
+ mkdir -p "$subpkgdir"/var/lib
+ mv "$pkgdir"/var/lib/mandoc-cgi \
+ "$subpkgdir"/var/lib
+}
+
+sha512sums="848f290847f3095757f25647e6d73eb7044018b145bf6f9dc8b5db164b1421911efdc5b3b9022ec3a2c5af9687a84d5acedee810f2bd2f7caaa9242dadb2cc52 mandoc-1.14.5.tar.gz
+074dc73b45c71b5c178750db6c7a4a45e97d97b5388fa5d6028faa90600358dd2b954781280ca41d17da3c577ad5a1a7a13ddc4dbea72ac5e86f1652e03ecde7 configure.patch
+c4055371a92be958f0d385c83b4788dc4c18bc990b1f780137309c83e174b8d3e65cae077aba3c5286a97fcee1514d61f6b7507ca25bd5155b8d577a7e8acd3a empty-tbl-null-deref.patch
+9a8953f17e2db75bf3667e1d51c7db21ccc5e3042c59035ed6178094963eac919b7367f96708c9bcc81450ffc13842d12c23edd9bca3330be730149625db88e7 tbl-colwidth-oob.patch
+4b17b144b53ee30f9aae87c7824597151e16e6f5ad795e7b03e701f2d13ca47a62c696cb837689c75d5f34d3c190255c8f0583bc91a0f83f61afde7563a6fb2b less.patch
+f35268ed507d5c6431f8cafe5a311d1ffe990083c6e1d22f5db479e19745d486cd45a699b64c4fb6757d1c0ab588c3e8d0778bfd75e98e751d1a786e89e8b925 doc.patch
+0dfe9e39570a2b6764303708b98f29b2b57114e124a0f37e9c77d4d33f25d474a79d271df46babd700e4cc93e3385a02356f19caa44ebe4e9b056fa4be96b95b cgi-adelie.patch
+957bbaef888fb2ea15f9b795b15952332e65aed70d2e70f3142305a4fb9313ade455eae6dfc923af3ef008834e771b1a85d71389b86cd0ff9a1c31e84fef861c cgi-gz.patch
+37be119308814b060ed9d5517b54eb02b210d677ffb085385929b6aa0e8e8bef2c6c1ab2055713ed8c72f2bc85593bf8744d2d0f163dd1aff65ce439c474b640 cgi-search.patch"
diff --git a/system/mandoc/cgi-adelie.patch b/system/mandoc/cgi-adelie.patch
new file mode 100644
index 000000000..66ce6a9ba
--- /dev/null
+++ b/system/mandoc/cgi-adelie.patch
@@ -0,0 +1,60 @@
+Adjustments for Adélie manual sections and architecture names.
+
+--- mandoc-1.14.5/cgi.c 2019-03-10 04:56:43.000000000 -0500
++++ mandoc-1.14.5/cgi.c 2020-06-05 15:54:05.681060852 -0500
+@@ -101,36 +101,28 @@ static const char *scriptname = SCRIPT_
+
+ static const int sec_prios[] = {1, 4, 5, 8, 6, 3, 7, 2, 9};
+ static const char *const sec_numbers[] = {
+- "0", "1", "2", "3", "3p", "4", "5", "6", "7", "8", "9"
++ "0", "0p", "1", "1p", "2", "3", "3p", "3pm", "4", "5", "6", "7", "8"
+ };
+ static const char *const sec_names[] = {
+ "All Sections",
++ "0p - POSIX C Headers",
+ "1 - General Commands",
++ "1p - POSIX Commands",
+ "2 - System Calls",
+ "3 - Library Functions",
+- "3p - Perl Library",
++ "3p - POSIX C Library Functions",
++ "3pm - Perl Library",
+ "4 - Device Drivers",
+- "5 - File Formats",
++ "5 - File formats and configuration files",
+ "6 - Games",
+- "7 - Miscellaneous Information",
+- "8 - System Manager\'s Manual",
+- "9 - Kernel Developer\'s Manual"
++ "7 - Overview, conventions, and miscellaneous",
++ "8 - System Administrator\'s Manual"
+ };
+ static const int sec_MAX = sizeof(sec_names) / sizeof(char *);
+
+ static const char *const arch_names[] = {
+- "amd64", "alpha", "armv7", "arm64",
+- "hppa", "i386", "landisk",
+- "loongson", "luna88k", "macppc", "mips64",
+- "octeon", "sgi", "socppc", "sparc64",
+- "amiga", "arc", "armish", "arm32",
+- "atari", "aviion", "beagle", "cats",
+- "hppa64", "hp300",
+- "ia64", "mac68k", "mvme68k", "mvme88k",
+- "mvmeppc", "palm", "pc532", "pegasos",
+- "pmax", "powerpc", "solbourne", "sparc",
+- "sun3", "vax", "wgrisc", "x68k",
+- "zaurus"
++ "aarch64", "armv7", "pmmx",
++ "ppc", "ppc64", "x86_64",
+ };
+ static const int arch_MAX = sizeof(arch_names) / sizeof(char *);
+
+@@ -655,7 +661,7 @@ pg_searchres(const struct req *req, stru
+ == NULL) ? 3 :
+ ((archend = strchr(arch + 1, '/'))
+ == NULL) ? 0 :
+- strncmp(arch, "amd64/",
++ strncmp(arch, "ppc64/",
+ archend - arch) ? 2 : 1;
+ if (archprio < archpriouse) {
+ archpriouse = archprio;
diff --git a/system/mandoc/cgi-gz.patch b/system/mandoc/cgi-gz.patch
new file mode 100644
index 000000000..ac506b797
--- /dev/null
+++ b/system/mandoc/cgi-gz.patch
@@ -0,0 +1,77 @@
+Handle the case where some of the entries in the manpath are gzipped by
+removing the .gz extension and allowing mparse_open to add it back and
+mark the page as gzipped. This is part of the documented contract for
+mparse_open, see mandoc(3).
+
+--- mandoc-1.14.5/cgi.c 2019-03-10 04:56:43.000000000 -0500
++++ mandoc-1.14.5/cgi.c 2020-06-05 15:54:05.681060852 -0500
+@@ -93,7 +93,7 @@ static void resp_searchform(const stru
+ static void resp_show(const struct req *, const char *);
+ static void set_query_attr(char **, char **);
+ static int validate_arch(const char *);
+-static int validate_filename(const char *);
++static int validate_filename(char *);
+ static int validate_manpath(const struct req *, const char *);
+ static int validate_urifrag(const char *);
+
+@@ -517,8 +509,13 @@ validate_arch(const char *arch)
+ }
+
+ static int
+-validate_filename(const char *file)
++validate_filename(char *file)
+ {
++ char *cp;
++
++ cp = strrchr(file, '.');
++ if (cp != NULL && ! strcmp(cp + 1, "gz"))
++ *cp = '\0';
+
+ if ('.' == file[0] && '/' == file[1])
+ file += 2;
+@@ -854,14 +862,15 @@ resp_format(const struct req *req, const
+ int fd;
+ int usepath;
+
+- if (-1 == (fd = open(file, O_RDONLY, 0))) {
+- puts("<p>You specified an invalid manual file.</p>");
+- return;
+- }
+-
+ mchars_alloc();
+ mp = mparse_alloc(MPARSE_SO | MPARSE_UTF8 | MPARSE_LATIN1 |
+ MPARSE_VALIDATE, MANDOC_OS_OTHER, req->q.manpath);
++
++ if (-1 == (fd = mparse_open(mp, file))) {
++ puts("<p>You specified an invalid manual file.</p>");
++ goto out;
++ }
++
+ mparse_readfd(mp, fd, file);
+ close(fd);
+ meta = mparse_result(mp);
+@@ -882,10 +891,11 @@ resp_format(const struct req *req, const
+ html_man(vp, meta);
+
+ html_free(vp);
+- mparse_free(mp);
+- mchars_free();
+ free(conf.man);
+ free(conf.style);
++out:
++ mparse_free(mp);
++ mchars_free();
+ }
+
+ static void
+@@ -904,8 +914,8 @@ resp_show(const struct req *req, const c
+ static void
+ pg_show(struct req *req, const char *fullpath)
+ {
+- char *manpath;
+- const char *file;
++ char *manpath;
++ char *file;
+
+ if ((file = strchr(fullpath, '/')) == NULL) {
+ pg_error_badrequest(
diff --git a/system/mandoc/cgi-search.patch b/system/mandoc/cgi-search.patch
new file mode 100644
index 000000000..dd74be9ef
--- /dev/null
+++ b/system/mandoc/cgi-search.patch
@@ -0,0 +1,48 @@
+Don't exit immediately if mansearch returns some paths that man.cgi
+considers invalid, in particular translated manpages (e.g.
+./de/man1/chfn.1). Just mark them as invalid (section 10, see struct
+manpage in mansearch.h) and skip them later.
+
+--- mandoc-1.14.5/cgi.c 2019-03-10 04:56:43.000000000 -0500
++++ mandoc-1.14.5/cgi.c 2020-06-05 15:54:05.681060852 -0500
+@@ -605,13 +602,20 @@ pg_searchres(const struct req *req, stru
+ size_t i, iuse;
+ int archprio, archpriouse;
+ int prio, priouse;
++ int results = 0;
+
+ for (i = 0; i < sz; i++) {
+- if (validate_filename(r[i].file))
++ if (validate_filename(r[i].file)) {
++ results = 1;
+ continue;
++ }
+ warnx("invalid filename %s in %s database",
+ r[i].file, req->q.manpath);
+- pg_error_internal();
++ r[i].sec = 10;
++ }
++
++ if (! results) {
++ pg_noresult(req, "No results found.");
+ return;
+ }
+
+@@ -642,6 +646,8 @@ pg_searchres(const struct req *req, stru
+ priouse = 20;
+ archpriouse = 3;
+ for (i = 0; i < sz; i++) {
++ if (r[i].sec == 10)
++ continue;
+ sec = r[i].file;
+ sec += strcspn(sec, "123456789");
+ if (sec[0] == '\0')
+@@ -681,6 +687,8 @@ pg_searchres(const struct req *req, stru
+ if (sz > 1) {
+ puts("<table class=\"results\">");
+ for (i = 0; i < sz; i++) {
++ if (r[i].sec == 10)
++ continue;
+ printf(" <tr>\n"
+ " <td>"
+ "<a class=\"Xr\" href=\"/");
diff --git a/system/mandoc/configure.patch b/system/mandoc/configure.patch
new file mode 100644
index 000000000..2fda25409
--- /dev/null
+++ b/system/mandoc/configure.patch
@@ -0,0 +1,21 @@
+--- mandoc-1.14.5/test-recvmsg.c 2019-03-10 04:56:43.000000000 -0500
++++ mandoc-1.14.5/test-recvmsg.c 2020-06-04 20:08:33.420299034 -0500
+@@ -4,5 +4,6 @@
+ int
+ main(void)
+ {
+- return recvmsg(-1, NULL, 0) != -1;
++ struct msghdr buf;
++ return recvmsg(-1, &buf, 0) != -1;
+ }
+--- mandoc-1.14.5/configure 2019-03-10 04:56:43.000000000 -0500
++++ mandoc-1.14.5/configure 2020-06-04 20:03:24.790295729 -0500
+@@ -41,7 +41,7 @@ OSENUM=
+ OSNAME=
+ UTF8_LOCALE=
+
+-CC=`printf "all:\\n\\t@echo \\\$(CC)\\n" | env -i make -sf -`
++CC=cc
+ CFLAGS=
+ LDADD=
+ LDFLAGS=
diff --git a/system/mandoc/doc.patch b/system/mandoc/doc.patch
new file mode 100644
index 000000000..955a5f205
--- /dev/null
+++ b/system/mandoc/doc.patch
@@ -0,0 +1,132 @@
+--- mandoc-1.14.5/mandoc.1 2019-03-10 04:56:43.000000000 -0500
++++ mandoc-1.14.5/mandoc.1 2020-06-05 02:12:50.320533119 -0500
+@@ -897,7 +897,7 @@ An
+ macro references a manual page that is not found in the base system.
+ The path to look for base system manuals is configurable at compile
+ time and defaults to
+-.Pa /usr/share/man : /usr/X11R6/man .
++.Pa /usr/share/man .
+ .El
+ .Ss Style suggestions
+ .Bl -ohang
+--- mandoc-1.14.5/mandoc.db.5 2019-03-10 04:56:43.000000000 -0500
++++ mandoc-1.14.5/mandoc.db.5 2020-06-05 02:14:48.380534383 -0500
+@@ -189,10 +189,6 @@ followed by the number 0.
+ .Bl -tag -width /usr/share/man/mandoc.db -compact
+ .It Pa /usr/share/man/mandoc.db
+ The manual page database for the base system.
+-.It Pa /usr/X11R6/man/mandoc.db
+-The same for the
+-.Xr X 7
+-Window System.
+ .It Pa /usr/local/man/mandoc.db
+ The same for
+ .Xr packages 7 .
+--- mandoc-1.14.5/man.conf.5 2019-03-10 04:56:43.000000000 -0500
++++ mandoc-1.14.5/man.conf.5 2020-06-05 02:11:34.650532308 -0500
+@@ -117,7 +117,6 @@ installing it is equivalent to not havin
+ file at all.
+ .Bd -literal -offset indent
+ manpath /usr/share/man
+-manpath /usr/X11R6/man
+ manpath /usr/local/man
+ .Ed
+ .Sh SEE ALSO
+
+--- mandoc-1.14.5/man.1 2019-03-10 04:56:43.000000000 -0500
++++ mandoc-1.14.5/man.1 2020-06-05 02:51:15.910557811 -0500
+@@ -174,28 +174,32 @@ Only select manuals from the specified
+ The currently available sections are:
+ .Pp
+ .Bl -tag -width "localXXX" -offset indent -compact
++.It 0p
++POSIX C headers.
+ .It 1
+ General commands
+ .Pq tools and utilities .
++.It 1p
++POSIX commands.
+ .It 2
+ System calls and error numbers.
+ .It 3
+ Library functions.
+ .It 3p
++POSIX C library functions.
++.It 3pm
+ .Xr perl 1
+ programmer's reference guide.
+ .It 4
+ Device drivers.
+ .It 5
+-File formats.
++File formats and configuration files.
+ .It 6
+ Games.
+ .It 7
+-Miscellaneous information.
++Overview, conventions, and miscellaneous information.
+ .It 8
+ System maintenance and operation commands.
+-.It 9
+-Kernel internals.
+ .El
+ .Pp
+ If not specified and a match is found in more than one section,
+--- mandoc-1.14.5/man.cgi.8 2019-03-10 04:56:43.000000000 -0500
++++ mandoc-1.14.5/man.cgi.8 2020-06-05 16:26:12.541081488 -0500
+@@ -342,7 +342,7 @@ page to acquire the named parameters it
+ .El
+ .Sh FILES
+ .Bl -tag -width Ds
+-.It Pa /var/www
++.It Pa /var/lib/mandoc-cgi
+ Default web server
+ .Xr chroot 2
+ directory.
+@@ -366,13 +366,7 @@ This is part of the web server configura
+ A style sheet for
+ .Xr mandoc 1
+ HTML styling, referenced from each generated HTML page.
+-.It Pa /man
+-Default
+-.Nm
+-data directory containing all the manual trees.
+-Can be overridden by
+-.Dv MAN_DIR .
+-.It Pa /man/manpath.conf
++.It Pa /manpath.conf
+ The list of available manpaths, one per line.
+ If any of the lines in this file contains a slash
+ .Pq Sq /
+@@ -380,13 +374,13 @@ or any character not contained in the
+ .Sx Restricted character set ,
+ .Nm
+ reports an internal server error and exits without doing anything.
+-.It Pa /man/header.html
++.It Pa /header.html
+ An optional file containing static HTML code to be inserted right
+ after opening the <BODY> element.
+-.It Pa /man/footer.html
++.It Pa /footer.html
+ An optional file containing static HTML code to be inserted right
+ before closing the <BODY> element.
+-.It Pa /man/OpenBSD-current/man1/mandoc.1
++.It Pa /OpenBSD-current/man1/mandoc.1
+ An example
+ .Xr mdoc 7
+ source file located below the
+--- mandoc-1.14.5/soelim.1 2019-03-10 04:56:43.000000000 -0500
++++ mandoc-1.14.5/soelim.1 2020-06-05 16:38:40.101089494 -0500
+@@ -25,10 +25,10 @@
+ .\" SUCH DAMAGE.
+ .\"
+ .Dd $Mdocdate: July 4 2017 $
+-.Dt SOELIM 1
++.Dt MANDOC-SOELIM 1
+ .Os
+ .Sh NAME
+-.Nm soelim
++.Nm mandoc-soelim
+ .Nd interpret .so requests in manpages
+ .Sh SYNOPSIS
+ .Nm
diff --git a/system/mandoc/empty-tbl-null-deref.patch b/system/mandoc/empty-tbl-null-deref.patch
new file mode 100644
index 000000000..3e14ce32b
--- /dev/null
+++ b/system/mandoc/empty-tbl-null-deref.patch
@@ -0,0 +1,62 @@
+From mboxrd@z Thu Jan 1 00:00:00 1970
+Received: from localhost (fantadrom.bsd.lv [local])
+ by fantadrom.bsd.lv (OpenSMTPD) with ESMTPA id 25e99424
+ for <source@mandoc.bsd.lv>;
+ Mon, 18 Mar 2019 03:01:04 -0500 (EST)
+Date: Mon, 18 Mar 2019 03:01:04 -0500 (EST)
+X-Mailinglist: mandoc-source
+Reply-To: source@mandoc.bsd.lv
+MIME-Version: 1.0
+From: schwarze@mandoc.bsd.lv
+To: source@mandoc.bsd.lv
+Subject: mandoc: fix a NULL pointer access on empty tbl(7) data cells that
+X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/
+Content-Type: text/plain; charset=utf-8
+Message-ID: <e3f22222366ad31d@fantadrom.bsd.lv>
+Archived-At: <http://inbox.vuxu.org/mandoc-source/e3f22222366ad31d@fantadrom.bsd.lv/>
+List-Archive: <http://inbox.vuxu.org/mandoc-source/>
+List-Post: <mailto:source@mandoc.bsd.lv>
+
+Log Message:
+-----------
+fix a NULL pointer access on empty tbl(7) data cells
+that bentley@ found in syncthing-bep(7)
+
+Modified Files:
+--------------
+ mandoc:
+ tbl_term.c
+
+Revision Data
+-------------
+Index: tbl_term.c
+===================================================================
+RCS file: /home/cvs/mandoc/mandoc/tbl_term.c,v
+retrieving revision 1.69
+retrieving revision 1.70
+diff -Ltbl_term.c -Ltbl_term.c -u -p -r1.69 -r1.70
+--- a/tbl_term.c
++++ b/tbl_term.c
+@@ -629,7 +629,8 @@ tbl_hrule(struct termp *tp, const struct
+
+ lw = cpp == NULL || cpn == NULL ||
+ (cpn->pos != TBL_CELL_DOWN &&
+- (dpn == NULL || strcmp(dpn->string, "\\^") != 0))
++ (dpn == NULL || dpn->string == NULL ||
++ strcmp(dpn->string, "\\^") != 0))
+ ? hw : 0;
+ tbl_direct_border(tp, BHORIZ * lw,
+ col->width + col->spacing / 2);
+@@ -675,7 +676,8 @@ tbl_hrule(struct termp *tp, const struct
+
+ rw = cpp == NULL || cpn == NULL ||
+ (cpn->pos != TBL_CELL_DOWN &&
+- (dpn == NULL || strcmp(dpn->string, "\\^") != 0))
++ (dpn == NULL || dpn->string == NULL ||
++ strcmp(dpn->string, "\\^") != 0))
+ ? hw : 0;
+
+ /* The line crossing at the end of this column. */
+--
+ To unsubscribe send an email to source+unsubscribe@mandoc.bsd.lv
+
diff --git a/system/mandoc/less.patch b/system/mandoc/less.patch
new file mode 100644
index 000000000..19d567365
--- /dev/null
+++ b/system/mandoc/less.patch
@@ -0,0 +1,58 @@
+Default to using less(1) instead of more(1) if MANPAGER and PAGER are
+unset, and also set a pretty prompt and smart case searching like man-db
+does if less is used as a pager.
+
+The name of the manpage is not available in the scope of the patched
+function - maybe add it at some point.
+
+--- mandoc-1.14.5/main.c 2019-03-10 04:56:43.000000000 -0500
++++ mandoc-1.14.5/main.c 2020-06-05 01:59:10.640524340 -0500
+@@ -1170,8 +1170,9 @@ spawn_pager(struct tag_files *tag_files)
+ pager = getenv("MANPAGER");
+ if (pager == NULL || *pager == '\0')
+ pager = getenv("PAGER");
+- if (pager == NULL || *pager == '\0')
+- pager = "more -s";
++ if (pager == NULL || *pager == '\0') {
++ pager = "less";
++ }
+ cp = mandoc_strdup(pager);
+
+ /*
+@@ -1195,10 +1196,24 @@ spawn_pager(struct tag_files *tag_files)
+ /* For less(1), use the tag file. */
+
+ use_ofn = 1;
+-#if HAVE_LESS_T
+ if ((cmdlen = strlen(argv[0])) >= 4) {
+ cp = argv[0] + cmdlen - 4;
+ if (strcmp(cp, "less") == 0) {
++ /*
++ * Set a few options like man-db does.
++ * -i: smart case search
++ * -mPm: set prompt to following string terminated by $
++ */
++ argv[argc++] = "-imPm" \
++ " Manual page" \
++ /*
++ * print " (END)" if EOF, else % in file followed by % sign.
++ * ?X if X:else not X.
++ */
++ "?e (END):?pB %pB\\%.. " \
++ "(press h for help or q to quit)" \
++ "$";
++#if HAVE_LESS_T
+ argv[argc++] = mandoc_strdup("-T");
+ argv[argc++] = tag_files->tfn;
+ if (tag_files->tagname != NULL) {
+@@ -1206,9 +1221,9 @@ spawn_pager(struct tag_files *tag_files)
+ argv[argc++] = tag_files->tagname;
+ use_ofn = 0;
+ }
++#endif
+ }
+ }
+-#endif
+ if (use_ofn)
+ argv[argc++] = tag_files->ofn;
+ argv[argc] = NULL;
diff --git a/system/mandoc/mandoc.post-deinstall b/system/mandoc/mandoc.post-deinstall
new file mode 100644
index 000000000..0a8d5b9df
--- /dev/null
+++ b/system/mandoc/mandoc.post-deinstall
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+exec rm -f /usr/share/man/mandoc.db 2>/dev/null
diff --git a/system/mandoc/mandoc.trigger b/system/mandoc/mandoc.trigger
new file mode 100644
index 000000000..34fc1decc
--- /dev/null
+++ b/system/mandoc/mandoc.trigger
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+exec makewhatis -a -T utf8 "$@"
diff --git a/system/mandoc/tbl-colwidth-oob.patch b/system/mandoc/tbl-colwidth-oob.patch
new file mode 100644
index 000000000..0b7b0acad
--- /dev/null
+++ b/system/mandoc/tbl-colwidth-oob.patch
@@ -0,0 +1,62 @@
+From mboxrd@z Thu Jan 1 00:00:00 1970
+Received: from localhost (fantadrom.bsd.lv [local])
+ by fantadrom.bsd.lv (OpenSMTPD) with ESMTPA id 0ff00a97
+ for <source@mandoc.bsd.lv>;
+ Fri, 29 Mar 2019 16:27:36 -0500 (EST)
+Date: Fri, 29 Mar 2019 16:27:36 -0500 (EST)
+X-Mailinglist: mandoc-source
+Reply-To: source@mandoc.bsd.lv
+MIME-Version: 1.0
+From: schwarze@mandoc.bsd.lv
+To: source@mandoc.bsd.lv
+Subject: mandoc: Set the maximum column index in a tbl(7) to the maximum *right*
+X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/
+Content-Type: text/plain; charset=utf-8
+Message-ID: <e3fceff42218668d@fantadrom.bsd.lv>
+Archived-At: <http://inbox.vuxu.org/mandoc-source/e3fceff42218668d@fantadrom.bsd.lv/>
+List-Archive: <http://inbox.vuxu.org/mandoc-source/>
+List-Post: <mailto:source@mandoc.bsd.lv>
+
+Log Message:
+-----------
+Set the maximum column index in a tbl(7) to the maximum *right* edge
+of any cell span, not to the maximum *left* edge, which may be smaller
+if the last column of the table is only reached by horizontal spans,
+but not by any regular cell in any row of the table.
+Otherwise, the algorithm calculating column widths accessed memomy
+after the end of the colwidth[] array, while it was trying to handle
+the rightmost column(s).
+
+Crash reported by Jason Thorpe <thorpej at NetBSD>
+via https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=54069
+and via Thomas Klausner (wiz@).
+Christos@ Zoulas sent a (correct, but slightly confusing) patch.
+The patch i'm committing here is easier to understand.
+
+Modified Files:
+--------------
+ mandoc:
+ out.c
+
+Revision Data
+-------------
+Index: out.c
+===================================================================
+RCS file: /home/cvs/mandoc/mandoc/out.c,v
+retrieving revision 1.77
+retrieving revision 1.78
+diff -Lout.c -Lout.c -u -p -r1.77 -r1.78
+--- a/out.c
++++ b/out.c
+@@ -149,7 +149,7 @@ tblcalc(struct rofftbl *tbl, const struc
+ gp = &first_group;
+ for (dp = sp->first; dp != NULL; dp = dp->next) {
+ icol = dp->layout->col;
+- while (icol > maxcol)
++ while (maxcol < icol + dp->hspans)
+ tbl->cols[++maxcol].spacing = SIZE_MAX;
+ col = tbl->cols + icol;
+ col->flags |= dp->layout->flags;
+--
+ To unsubscribe send an email to source+unsubscribe@mandoc.bsd.lv
+