Browse files

Changes in version 1.14.1, released on February 21, 2017

 * apropos(1): Reimplement complete semantic search functionality
   without the dependency on SQLite3, using only POSIX APIs.
   This comes with a completely new mandoc.db(5) file format.
 * man(1): Support more than one tag entry for the same search term,
   plus some minor improvements to the less(1) :t support.
 * -Thtml: Use real macro names for CSS classes.
   Systematic cleanup of and many improvements to mandoc.css.
 * -Thtml: Produce human readable HTML code by using indentation
   and better line breaks.  Improve various HTML elements,
   and trim several useless ones.
 * New catman(8) utility, still somewhat experimental.
 * Now includes a portable version of the OpenBSD mandoc regression
   suite, see regress/ for details.
 * Operating systems that don't provide mmap(3) are no longer supported.
 * Drop support for manpath(1).  Even if your system has manpath(1),
   it is simpler to use MANPATH_DEFAULT in configure.local for
   operating system defaults, man.conf(5) for machine-specific
   modifications, and ${MANPATH}, -m, and -M for user preferences
   than to bother with the complexity of manpath(1).
 * makewhatis(8) -p: No longer warn about missing MLINKS since these
   are no longer needed for anything.
 * mdoc(7): Warn about invalid punctuation and content below NAME.
 * mdoc(7): Warn about .Xr lacking the second argument (section).
 * mdoc(7): Warn about violations of the rule "new sentence, new line".
 * roff(7): Warn about trailing whitespace at the end of comments.
 * mdoc(7): Improve rendering of double quotes.
 * mdoc(7): Always do text production in the validator, never in the
   formatters.  Cleaner, simpler, shorter, helps NetBSD apropos(1)
   and also makes -Ttree output more useful.
 * -Ttree: Show metadata and some additional node flags.
   New -Onoval output option to show the unvalidated tree.
 * man(1): Make "man -l" work with standard input from a pipe or file,
   as long as standard output is a terminal.
 * man(7): Fix out of bounds read access if a text node immediately
   preceded the first .SH header.
 * mdoc(7): Fix out of bounds read access for .Bl without a type
   but with a width.
 * mdoc(7): Fix out of bounds read access for .Bl -column starting
   with a tab character instead of a child .It macro.
 * mdoc(7): Fix syntax tree corruption leading to segfaults caused
   by stray block end macros in nested blocks of mismatching type.
 * man(1): Fix NULL dereference when the first of multiple pages
   shown was preformatted.
 * mdoc(7): Fix syntax tree corruption leading to NULL dereference
   caused by partial implicit macros inside .Bl -column table cells.
 * mdoc(7): Fix syntax tree corruption leading to NULL dereference
   for macro sequences like .Bl .Bl .It Bo .El .It.
 * mdoc(7): Fix syntax tree corruption leading to NULL dereference
   caused by .Ta following a nested .Bl -column breaking another block.
 * mdoc(7): Fix syntax tree corruption sometimes leading to NULL
   dereference caused by indirectly broken .Nd or .Nm blocks.
 * mdoc(7) -Thtml: Fix a NULL dereference for .Bl -column with 0 columns.
 * mdoc(7): Fix NULL dereference in some specific cases of a
   block-end macro calling another block-end macro.
 * mdoc(7): Fix NULL dereference if the only child of the head
   of the first .Sh was an empty in-line macro.
 * eqn(7): Fix NULL dereference in the terminal formatter
   for empty matrices and empty square roots.
 * mdoc(7): Fix an assertion failure for a .Bd without a type that
   breaks another block.
 * mdoc(7): Fix an assertion failure that happened for some .Bl -column
   lists containing a column width of "-4n", "-3n", or "-2n".
 * mdoc(7): Fix an assertion failure caused by .Bl -column without .It
   but containing eqn(7) or tbl(7) code.
 * roff(7): Fix an assertion failure caused by \z\[u00FF] with -Tps/-Tpdf.
 * roff(7): Fix an assertion failures caused by whitespace inside \o''
   (overstrike) sequences.
 * -Thtml: Fix an assertion failure caused by -Oman or -Oincludes of
   excessive length.
 * man(1): Do not mix stdio narrow and wide stream orientation
   on stdout, which could cause output corruption on glibc.
 * mandoc(1): Autodetect a suitable locale for -Tutf8 mode.
 * ./configure: Autodetect whether PATH_MAX and O_DIRECTORY are defined.
 * ./configure: Autodetect if nanosleep(3) needs -lrt.
 * ./configure: Provide an ${LN} configuration variable.
 * ./configure: Put compiler arguments that may contain -l at the end.
    --- MINOR BUGFIXES ---
 * mdoc(7): Fix SYNOPSIS output if the first child of .Nm is a macro.
 * mdoc(7) -Thtml: Improve formatting of .Bl -tag with short tags.
 * man(7) -Thtml: Preserve whitespace in .nf (nofill) mode.
 * mandoc(1): Error out on invalid output options on the command line.
    --- STRUCTURAL CHANGES, no functional change ---
 * Redesign part of the mandoc_html(3) interfaces, making them much
   easier to use and reducing the amount of code by a few hundred lines.
    --- THANKS TO ---
 * Michael Stapelberg (Debian) for designing the new mandocd(8)
   and parts of the new catman(8), for release testing, and for a
   number of patches and bug reports.
 * Baptiste Daroussin (FreeBSD) for profiling the new makewhatis(8)
   implementation and suggesting an algorithmic improvement which
   more than doubled performance, and for a few bug reports.
 * Ed Maste (FreeBSD) for an important patch improving reproducibility
   of builds in makewhatis(8), and for a few bug reports.
 * Theo Buehler (OpenBSD) for almost twenty important bug reports,
   most of them found by systematic afl(1) fuzzing.
 * Benny Lofgren, David Dahlberg, and in particular Vadim Zhukov
   for crucial help in getting .Bl -tag CSS formatting fixed.
 * Svyatoslav Mishyn (Crux Linux) for an initial version of the
   patch to autodetect a suitable locale for -Tutf8 mode
   and for release testing.
 * Jason McIntyre (OpenBSD) for multiple useful discussions
   and a number of bug reports.
 * Sevan Janiyan (NetBSD) for extensive release testing and multiple
   bug reports.
 * Thomas Klausner and Christos Zoulas (NetBSD), Yuri Pankov (illumos),
   and Leah Neukirchen (Void Linux) for release testing and bug reports.
 * Ulrich Spoerlein (FreeBSD) for release testing.
 * Alexander Bluhm, Andrew Fresh, Antoine Jacoutot, Antony Bentley,
   Christian Weisgerber, Jonathan Gray, Marc Espie, Martijn van Duren,
   Stuart Henderson, Ted Unangst, Theo de Raadt (OpenBSD), Abhinav
   Upadhyay, Kamil Rytarowski (NetBSD), Aaron M. Ucko, Bdale Garbee,
   Reiner Herrmann, Shane Kerr (Debian), Daniel Sabogal (Alpine Linux),
   Carsten Kunze (Heirloom roff), Kristaps Dzonsons (,
   Anton Lindqvist, Jan Stary, Jeremy A. Mates, Mark Patruck,
   Pavan Maddamsetti, Sean Levy <>, and
   Tiago Silva for bug reports.
 * Brent Cook, Marc Espie, Philip Guenther, Todd Miller (OpenBSD)
   and Markus Waldeck for useful discussions.
 * And as usual, OpenCSW for providing me with a Solaris 9/10/11
   testing environment.
  • Loading branch information...
1 parent 99ae5a0 commit fd0332517f4f63930998000c872a164f445d1914 christos committed Mar 18, 2017
Showing with 8,675 additions and 4,972 deletions.
  1. +37 −40 external/bsd/mdocml/dist/INSTALL
  2. +6 −4 external/bsd/mdocml/dist/LICENSE
  3. +175 −61 external/bsd/mdocml/dist/Makefile
  4. +13 −7 external/bsd/mdocml/dist/Makefile.depend
  5. +130 −2 external/bsd/mdocml/dist/NEWS
  6. +33 −91 external/bsd/mdocml/dist/TODO
  7. +6 −2 external/bsd/mdocml/dist/apropos.1
  8. +153 −78 external/bsd/mdocml/dist/catman.8
  9. +195 −446 external/bsd/mdocml/dist/catman.c
  10. +54 −57 external/bsd/mdocml/dist/cgi.c
  11. +3 −3 external/bsd/mdocml/dist/chars.c
  12. +73 −29 external/bsd/mdocml/dist/compat_fts.c
  13. +5 −1 external/bsd/mdocml/dist/compat_fts.h
  14. +156 −101 external/bsd/mdocml/dist/configure
  15. +93 −75 external/bsd/mdocml/dist/configure.local.example
  16. +508 −0 external/bsd/mdocml/dist/dba.c
  17. +50 −0 external/bsd/mdocml/dist/dba.h
  18. +188 −0 external/bsd/mdocml/dist/dba_array.c
  19. +47 −0 external/bsd/mdocml/dist/dba_array.h
  20. +72 −0 external/bsd/mdocml/dist/dba_read.c
  21. +127 −0 external/bsd/mdocml/dist/dba_write.c
  22. +30 −0 external/bsd/mdocml/dist/dba_write.h
  23. +480 −0 external/bsd/mdocml/dist/dbm.c
  24. +68 −0 external/bsd/mdocml/dist/dbm.h
  25. +194 −0 external/bsd/mdocml/dist/dbm_map.c
  26. +29 −0 external/bsd/mdocml/dist/dbm_map.h
  27. +3 −3 external/bsd/mdocml/dist/demandoc.c
  28. +29 −35 external/bsd/mdocml/dist/eqn_html.c
  29. +8 −5 external/bsd/mdocml/dist/eqn_term.c
  30. +2 −2 external/bsd/mdocml/dist/gmdiff
  31. +463 −270 external/bsd/mdocml/dist/html.c
  32. +14 −60 external/bsd/mdocml/dist/html.h
  33. +5 −1 external/bsd/mdocml/dist/
  34. +4 −6 external/bsd/mdocml/dist/libmandoc.h
  35. +2 −2 external/bsd/mdocml/dist/libmdoc.h
  36. +92 −85 external/bsd/mdocml/dist/main.c
  37. +1 −3 external/bsd/mdocml/dist/main.h
  38. +2 −4 external/bsd/mdocml/dist/makewhatis.8
  39. +39 −17 external/bsd/mdocml/dist/man.1
  40. +5 −5 external/bsd/mdocml/dist/man.c
  41. +3 −3 external/bsd/mdocml/dist/man.conf.5
  42. +1,326 −0 external/bsd/mdocml/dist/man.options.1
  43. +3 −1 external/bsd/mdocml/dist/man_hash.c
  44. +187 −189 external/bsd/mdocml/dist/man_html.c
  45. +6 −6 external/bsd/mdocml/dist/man_macro.c
  46. +15 −11 external/bsd/mdocml/dist/man_term.c
  47. +2 −1 external/bsd/mdocml/dist/manconf.h
  48. +70 −21 external/bsd/mdocml/dist/mandoc.1
  49. +29 −4 external/bsd/mdocml/dist/mandoc.3
  50. +186 −156 external/bsd/mdocml/dist/mandoc.css
  51. +153 −81 external/bsd/mdocml/dist/mandoc.db.5
  52. +8 −4 external/bsd/mdocml/dist/mandoc.h
  53. +3 −2 external/bsd/mdocml/dist/mandoc_aux.h
  54. +26 −2 external/bsd/mdocml/dist/mandoc_char.7
  55. +152 −46 external/bsd/mdocml/dist/mandoc_html.3
  56. +198 −0 external/bsd/mdocml/dist/mandocd.8
  57. +285 −0 external/bsd/mdocml/dist/mandocd.c
  58. +352 −576 external/bsd/mdocml/dist/mandocdb.c
  59. +72 −81 external/bsd/mdocml/dist/manpath.c
  60. +472 −573 external/bsd/mdocml/dist/mansearch.c
  61. +14 −7 external/bsd/mdocml/dist/mansearch.h
  62. +34 −17 external/bsd/mdocml/dist/mdoc.7
  63. +42 −49 external/bsd/mdocml/dist/mdoc.c
  64. +3 −2 external/bsd/mdocml/dist/mdoc_argv.c
  65. +3 −1 external/bsd/mdocml/dist/mdoc_hash.c
  66. +398 −760 external/bsd/mdocml/dist/mdoc_html.c
  67. +90 −55 external/bsd/mdocml/dist/mdoc_macro.c
  68. +41 −156 external/bsd/mdocml/dist/mdoc_man.c
  69. +2 −2 external/bsd/mdocml/dist/mdoc_state.c
  70. +105 −218 external/bsd/mdocml/dist/mdoc_term.c
  71. +392 −235 external/bsd/mdocml/dist/mdoc_validate.c
  72. +7 −7 external/bsd/mdocml/dist/preconv.c
  73. +36 −47 external/bsd/mdocml/dist/read.c
  74. +27 −25 external/bsd/mdocml/dist/roff.c
  75. +13 −15 external/bsd/mdocml/dist/roff.h
  76. +58 −13 external/bsd/mdocml/dist/tag.c
  77. +11 −22 external/bsd/mdocml/dist/tbl_html.c
  78. +19 −5 external/bsd/mdocml/dist/term.c
  79. +2 −2 external/bsd/mdocml/dist/term_ascii.c
  80. +48 −62 external/bsd/mdocml/dist/term_ps.c
  81. +7 −0 external/bsd/mdocml/dist/test-EFTYPE.c
  82. +7 −0 external/bsd/mdocml/dist/test-O_DIRECTORY.c
  83. +30 −0 external/bsd/mdocml/dist/test-PATH_MAX.c
  84. +11 −0 external/bsd/mdocml/dist/test-be32toh.c
  85. +13 −0 external/bsd/mdocml/dist/test-cmsg.c
  86. +18 −1 external/bsd/mdocml/dist/test-fts.c
  87. +17 −0 external/bsd/mdocml/dist/test-nanosleep.c
  88. +7 −0 external/bsd/mdocml/dist/test-ntohl.c
  89. +21 −3 external/bsd/mdocml/dist/test-ohash.c
  90. +8 −0 external/bsd/mdocml/dist/test-recvmsg.c
  91. +5 −2 external/bsd/mdocml/dist/test-vasprintf.c
  92. +4 −4 external/bsd/mdocml/dist/test-wchar.c
  93. +40 −10 external/bsd/mdocml/dist/tree.c
@@ -1,4 +1,4 @@
-Id: INSTALL,v 1.15 2016/07/14 11:09:06 schwarze Exp
+Id: INSTALL,v 1.18 2017/02/08 12:24:10 schwarze Exp
About mdocml, the portable mandoc distribution
@@ -16,7 +16,7 @@ tech@ mailing list, too.
Enjoy using the mandoc toolset!
-Ingo Schwarze, Karlsruhe, July 2016
+Ingo Schwarze, Karlsruhe, February 2017
@@ -31,11 +31,21 @@ Regarding how packages and ports are maintained for your operating
system, please consult your operating system documentation.
To install mandoc manually, the following steps are needed:
-1. If you want to build the CGI program, man.cgi(8), too, run the
-command "echo BUILD_CGI=1 > configure.local". Then run "cp
-cgi.h.examples cgi.h" and edit cgi.h as desired.
+1. If you want to build the CGI program, man.cgi(8), too,
+run the command "echo BUILD_CGI=1 >> configure.local".
+Then run "cp cgi.h.example cgi.h" and edit cgi.h as desired.
-2. Run "./configure".
+2. If you also want to build the new catman(8) utility, run the
+command "echo BUILD_CATMAN=1 >> configure.local". Note that it
+is unlikely to be a drop-in replacement providing the same
+functionality as your system's "catman", if your operating
+system contains one.
+3. Define MANPATH_DEFAULT in configure.local
+if /usr/share/man:/usr/X11R6/man:/usr/local/man is not appropriate
+for your operating system.
+4. Run "./configure".
This script attempts autoconfiguration of mandoc for your system.
Read both its standard output and the file "Makefile.local" it
generates. If anything looks wrong or different from what you
@@ -45,34 +55,31 @@ result seems right to you.
On Solaris 10 and earlier, you may have to run "ksh ./configure"
because the native /bin/sh lacks some POSIX features.
-3. Run "make".
+5. Run "make".
Any POSIX-compatible make, in particular both BSD make and GNU make,
should work. If the build fails, look at "configure.local.example"
and go back to step 2.
-4. Run "make -n install" and check whether everything will be
+6. Run "make -n install" and check whether everything will be
installed to the intended places. Otherwise, put some *DIR or *NM*
-variables into "configure.local" and go back to step 2.
+variables into "configure.local" and go back to step 4.
+7. Optionally run the regression suite.
+Basically, that amounts to "cd regress && ./".
+But you should probably look at "./mandoc -l regress/"
-5. Run "sudo make install". If you intend to build a binary
+8. Run "sudo make install". If you intend to build a binary
package using some kind of fake root mechanism, you may need a
command like "make DESTDIR=... install". Read the *-install targets
in the "Makefile" to understand how DESTDIR is used.
-6. If you want to use the integrated man(1) and your system uses
-manpath(1), make sure it is configured correctly, in particular,
-it returns all directory trees where manual pages are installed.
-Otherwise, if your system uses man.conf(5), make sure it contains
-a "manpath" line for each directory tree, and the order of these
-lines meets your wishes.
+9. Run the command "sudo makewhatis" to build mandoc.db(5) databases
+in all the directory trees configured in step 6. Whenever installing
+new manual pages, re-run makewhatis(8) to update the databases, or
+apropos(1) will not find the new pages.
-7. If you compiled with database support, run the command "sudo
-makewhatis" to build mandoc.db(5) databases in all the directory
-trees configured in step 6. Whenever installing new manual pages,
-re-run makewhatis(8) to update the databases, or apropos(1) will
-not find the new pages.
-8. To set up a man.cgi(8) server, read its manual page.
+10. To set up a man.cgi(8) server, read its manual page.
Note that some man(7) pages may contain low-level roff(7) markup
that mandoc does not yet understand. On some BSD systems using
@@ -84,26 +91,16 @@ manual page source.
Understanding mandoc dependencies
-The mandoc(1), man(1), and demandoc(1) utilities only depend
-on the zlib library for decompressing gzipped manual pages,
-but makewhatis(8) and apropos(1) depend on the following
-additional software:
-1. The SQLite database system, see <>.
-The recommended version of SQLite is or newer. The mandoc
-toolset is known to work with version 3.7.5 or newer. Versions
-older than 3.8.3 may not achieve full performance due to the
-missing SQLITE_DETERMINISTIC optimization flag. Versions older
-than 3.8.0 may not show full error information if opening a database
-fails due to the missing sqlite3_errstr() API. Both are very minor
-problems, apropos(1) is fully usable with SQLite 3.7.5. Versions
-older than 3.7.5 may or may not work, they have not been tested.
+The following libraries are required:
+1. zlib for decompressing gzipped manual pages.
2. The fts(3) directory traversion functions.
If your system does not have them, the bundled compatibility version
-will be used, so you need not worry in that case. But be careful: the
-glibc version of fts(3) is known to be broken on 32bit platforms,
-see <>.
+will be used, so you need not worry in that case. But be careful: old
+glibc versions of fts(3) were known to be broken on 32bit platforms,
+see <>.
+That was presumably fixed in glibc-2.23.
If you run into that problem, set "HAVE_FTS=0" in configure.local.
3. Marc Espie's ohash(3) library.
@@ -1,14 +1,16 @@
-Id: LICENSE,v 1.12 2016/07/07 23:46:36 schwarze Exp
+Id: LICENSE,v 1.14 2017/02/08 12:24:10 schwarze Exp
With the exceptions noted below, all code and documentation
contained in the mdocml toolkit is protected by the Copyright
of the following developers:
Copyright (c) 2008-2012, 2014 Kristaps Dzonsons <>
-Copyright (c) 2010-2016 Ingo Schwarze <>
+Copyright (c) 2010-2017 Ingo Schwarze <>
Copyright (c) 2009, 2010, 2011, 2012 Joerg Sonnenberger <>
Copyright (c) 2013 Franco Fichtner <>
-Copyright (c) 2014 Baptiste Daroussin <>
+Copyright (c) 2014 Baptiste Daroussin <>
+Copyright (c) 2016 Ed Maste <>
+Copyright (c) 2017 Michael Stapelberg <>
Copyright (c) 1999, 2004 Marc Espie <>
Copyright (c) 1998, 2004, 2010 Todd C. Miller <>
Copyright (c) 2008 Otto Moerbeek <>
@@ -41,7 +43,7 @@ other people's Copyright and are distributed under various 2-clause
and 3-clause BSD licenses; see these individual files for details.
soelim.c, soelim.1:
-Copyright (c) 2014 Baptiste Daroussin <>
+Copyright (c) 2014 Baptiste Daroussin <>
compat_err.c, compat_fts.c, compat_fts.h,
compat_getsubopt.c, compat_strcasestr.c, compat_strsep.c,
Oops, something went wrong.

0 comments on commit fd03325

Please sign in to comment.