Hi, you may have noticed a flurry of mandoc commits lately: mandoc is now able to format the manual pages of the GNU troff package. As usual, a few unimportant formatting differences remain, mostly whitespace, but nothing very serious.
So i think it is time for groff to switch over to install manual page sources and have mandoc do the formatting on demand like for (almost) every other package. You might wonder whether this is a good idea - couldn't it happen that groff might use even more crazy stuff in its manual pages in the future, putting unfair workload on the maintainer of the groff port for future updates? There are five answers to that: 1. That maintainer is - schwarze@. So in the worst case, i'm hurting myself. But i care a lot about groff/mandoc compatibility in the first place, so such future changes would cause grief for me either way. 2. We already know that the manual pages of the next release, 1.22.4, will also be fine with mandoc. 3. It isn't actually likely to get worse quickly because groff isn't a fast-moving target nowadays, quite to the contrary. 4. Even if somebody pops up and threatens to commit bad stuff, i'll notice right away because i have commit access to groff upstream, and i'll certainly try to forestall further upstream degradation of quality. 5. It's actually likely that i will be able to talk people out of making things worse. The other groff developers pay more attention to portability nowadays, compared to years ago when groff was practically the only maintained roff implementation. There is one weird special case: the manual page documenting the groff_www(7) macro set stupidly uses a few of its own macros for formatting instead of just using macros of identical functionality that are available in the man(7) language, or more precisely, in the man-ext GNU extensions which everyone has to support anyway. For now, i'm patching that up in a minimal way using .de and .als, but i'm in the process of pushing a real fix upstream for the groff-1.22.4 release. (A few years ago, i would have run off screaming when finding .de and .als in a manual page; now they can be used in a routine fashion to patch up stuff that is even more broken. But don't you dare attempting to use those in base =;-). OK? Ingo Index: Makefile =================================================================== RCS file: /cvs/ports/textproc/groff/Makefile,v retrieving revision 1.38 diff -u -p -r1.38 Makefile --- Makefile 22 Aug 2017 23:28:52 -0000 1.38 +++ Makefile 25 Aug 2018 19:42:57 -0000 @@ -4,7 +4,7 @@ COMMENT = GNU troff typesetter VERSION = 1.22.3 SUBST_VARS = VERSION DISTNAME = groff-${VERSION} -REVISION = 8 +REVISION = 9 CATEGORIES = textproc DPB_PROPERTIES = parallel Index: patches/patch-Makefile_comm =================================================================== RCS file: patches/patch-Makefile_comm diff -N patches/patch-Makefile_comm --- patches/patch-Makefile_comm 6 Nov 2014 22:15:22 -0000 1.3 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,60 +0,0 @@ -$OpenBSD: patch-Makefile_comm,v 1.3 2014/11/06 22:15:22 schwarze Exp $ -# Install preformatted manuals -# since mandoc(1) does not format the groff manuals well. -# But install groff_mdoc(7) as source -# because mandoc(1) handles that one better than groff. ---- Makefile.comm.orig Mon Oct 13 00:16:08 2014 -+++ Makefile.comm Mon Oct 13 00:32:56 2014 -@@ -172,27 +172,44 @@ install_man: - -test -d $(DESTDIR)$(man1dir) || $(mkinstalldirs) $(DESTDIR)$(man1dir) - @-pages="$(MAN1)"; \ - for p in $$pages; do \ -- prog=`basename $$p .n`; \ -- target=$(DESTDIR)$(man1dir)/$(NAMEPREFIX)$$prog.$(man1ext); \ -+ p0="$${p%.n}.0"; \ -+ echo "groff -t -mandoc -Tascii -P -c $$p > $$p0"; \ -+ $(top_srcdir)/test-groff -t -mandoc -Tascii -P -c $$p > $$p0; \ -+ target=$(DESTDIR)$(man1dir)/$(NAMEPREFIX)$$p0; \ - rm -f $$target; \ -- echo $(INSTALL_DATA) $$p $$target; \ -- $(INSTALL_DATA) $$p $$target; \ -+ echo $(INSTALL_DATA) $$p0 $$target; \ -+ $(INSTALL_DATA) $$p0 $$target; \ - done - -test -d $(DESTDIR)$(man5dir) || $(mkinstalldirs) $(DESTDIR)$(man5dir) - @-pages="$(MAN5)"; \ - for p in $$pages; do \ -- target=$(DESTDIR)$(man5dir)/`basename $$p .n`.$(man5ext); \ -+ p0="$${p%.n}.0"; \ -+ echo "groff -t -mandoc -Tascii -P -c $$p > $$p0"; \ -+ $(top_srcdir)/test-groff -t -mandoc -Tascii -P -c $$p > $$p0; \ -+ target=$(DESTDIR)$(man5dir)/$$p0; \ - rm -f $$target; \ -- echo $(INSTALL_DATA) $$p $$target; \ -- $(INSTALL_DATA) $$p $$target; \ -+ echo $(INSTALL_DATA) $$p0 $$target; \ -+ $(INSTALL_DATA) $$p0 $$target; \ - done - -test -d $(DESTDIR)$(man7dir) || $(mkinstalldirs) $(DESTDIR)$(man7dir) - @-pages="$(MAN7)"; \ - for p in $$pages; do \ -- target=$(DESTDIR)$(man7dir)/`basename $$p .n`.$(man7ext); \ -+ if [ "X$$p" = "Xgroff_mdoc.n" ]; then \ -+ mdocdir=$(DESTDIR)$(manroot)/man$(man7ext); \ -+ test -d $$mdocdir || $(mkinstalldirs) $$mdocdir; \ -+ target=$$mdocdir/groff_mdoc.7; \ - rm -f $$target; \ - echo $(INSTALL_DATA) $$p $$target; \ - $(INSTALL_DATA) $$p $$target; \ -+ else \ -+ p0="$${p%.n}.0"; \ -+ echo "groff -t -mandoc -Tascii -P -c $$p > $$p0"; \ -+ $(top_srcdir)/test-groff -t -mandoc -Tascii -P -c $$p > $$p0; \ -+ target=$(DESTDIR)$(man7dir)/$$p0; \ -+ rm -f $$target; \ -+ echo $(INSTALL_DATA) $$p0 $$target; \ -+ $(INSTALL_DATA) $$p0 $$target; \ -+ fi; \ - done - - .PHONY: uninstall_man Index: patches/patch-Makefile_in =================================================================== RCS file: /cvs/ports/textproc/groff/patches/patch-Makefile_in,v retrieving revision 1.7 diff -u -p -r1.7 patch-Makefile_in --- patches/patch-Makefile_in 13 Sep 2016 11:17:21 -0000 1.7 +++ patches/patch-Makefile_in 25 Aug 2018 19:42:57 -0000 @@ -1,29 +1,9 @@ $OpenBSD: patch-Makefile_in,v 1.7 2016/09/13 11:17:21 schwarze Exp $ -chunk 1: Install preformatted manuals, not source pages (local change). -chunk 2: src/devices/gropdf depends on arch/misc. -chunk 3: avoid bogus "is up to date" during fake. -Regarding chunks 2 & 3, current upstream code is completely different now. +chunk 1: src/devices/gropdf depends on arch/misc. +chunk 2: avoid bogus "is up to date" during fake. +Upstream code is completely different now. --- Makefile.in.orig Tue Nov 4 09:38:35 2014 +++ Makefile.in Thu Sep 8 22:27:19 2016 -@@ -253,15 +253,15 @@ manroot=$(mandir) - - # `man1ext' is the man section for user commands. - man1ext=1 --man1dir=$(manroot)/man$(man1ext) -+man1dir=$(manroot)/cat$(man1ext) - - # `man5ext' is the man section for file formats. - man5ext=5 --man5dir=$(manroot)/man$(man5ext) -+man5dir=$(manroot)/cat$(man5ext) - - # `man7ext' is the man section for macros. - man7ext=7 --man7dir=$(manroot)/man$(man7ext) -+man7dir=$(manroot)/cat$(man7ext) - - # `dist' target is disallowed in some `configure' combinations. - doc_dist_target_ok=@doc_dist_target_ok@ @@ -896,6 +896,8 @@ $(GNULIBDIRS): FORCE $(MAKE) ACLOCAL=: AUTOCONF=: AUTOHEADER=: AUTOMAKE=: $(do) ;; \ esac Index: patches/patch-tmac_groff_www_man =================================================================== RCS file: patches/patch-tmac_groff_www_man diff -N patches/patch-tmac_groff_www_man --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-tmac_groff_www_man 25 Aug 2018 19:42:57 -0000 @@ -0,0 +1,21 @@ +$OpenBSD$ + +This manual page uses the groff_www(7) macro set. +Map that to the usual man-ext macros. +I'm pushing a slightly more invasive fix upstream. + +Index: tmac/groff_www.man +--- tmac/groff_www.man.orig ++++ tmac/groff_www.man +@@ -1,4 +1,11 @@ + .TH GROFF_WWW @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@" ++.de URL ++. UR \\$1 ++. nop \\$2 ++. UE \\$3\\& ++.. ++.als FTP URL ++.als MTO URL + .SH NAME + groff_www \- groff macros for authoring web pages + . Index: pkg/PLIST =================================================================== RCS file: /cvs/ports/textproc/groff/pkg/PLIST,v retrieving revision 1.7 diff -u -p -r1.7 PLIST --- pkg/PLIST 6 Nov 2014 22:15:23 -0000 1.7 +++ pkg/PLIST 25 Aug 2018 19:42:57 -0000 @@ -68,71 +68,71 @@ lib/groff/grog/ lib/groff/grog/subs.pl lib/groff/refer/ lib/groff/site-tmac/ -@man man/cat1/addftinfo.0 -@man man/cat1/afmtodit.0 -@man man/cat1/chem.0 -@man man/cat1/eqn.0 -@man man/cat1/eqn2graph.0 -@man man/cat1/gdiffmk.0 -@man man/cat1/glilypond.0 -@man man/cat1/gperl.0 -@man man/cat1/gpinyin.0 -@man man/cat1/grap2graph.0 -@man man/cat1/grn.0 -@man man/cat1/grodvi.0 -@man man/cat1/groff.0 -@man man/cat1/groffer.0 -@man man/cat1/grog.0 -@man man/cat1/grohtml.0 -@man man/cat1/grolbp.0 -@man man/cat1/grolj4.0 -@man man/cat1/gropdf.0 -@man man/cat1/grops.0 -@man man/cat1/grotty.0 -@man man/cat1/hpftodit.0 -@man man/cat1/indxbib.0 -@man man/cat1/lkbib.0 -@man man/cat1/lookbib.0 -@man man/cat1/mmroff.0 -@man man/cat1/neqn.0 -@man man/cat1/nroff.0 -@man man/cat1/pdfmom.0 -@man man/cat1/pdfroff.0 -@man man/cat1/pfbtops.0 -@man man/cat1/pic.0 -@man man/cat1/pic2graph.0 -@man man/cat1/preconv.0 -@man man/cat1/refer.0 -@man man/cat1/roff2dvi.0 -@man man/cat1/roff2html.0 -@man man/cat1/roff2pdf.0 -@man man/cat1/roff2ps.0 -@man man/cat1/roff2text.0 -@man man/cat1/roff2x.0 -@man man/cat1/soelim.0 -@man man/cat1/tbl.0 -@man man/cat1/tfmtodit.0 -@man man/cat1/troff.0 -@man man/cat5/groff_font.0 -@man man/cat5/groff_out.0 -@man man/cat5/groff_tmac.0 -@man man/cat5/lj4_font.0 -@man man/cat7/ditroff.0 -@man man/cat7/groff.0 -@man man/cat7/groff_char.0 -@man man/cat7/groff_diff.0 -@man man/cat7/groff_filenames.0 -@man man/cat7/groff_hdtbl.0 -@man man/cat7/groff_man.0 -@man man/cat7/groff_me.0 -@man man/cat7/groff_mm.0 -@man man/cat7/groff_mmse.0 -@man man/cat7/groff_mom.0 -@man man/cat7/groff_ms.0 -@man man/cat7/groff_trace.0 -@man man/cat7/groff_www.0 -@man man/cat7/roff.0 +@man man/man1/addftinfo.1 +@man man/man1/afmtodit.1 +@man man/man1/chem.1 +@man man/man1/eqn.1 +@man man/man1/eqn2graph.1 +@man man/man1/gdiffmk.1 +@man man/man1/glilypond.1 +@man man/man1/gperl.1 +@man man/man1/gpinyin.1 +@man man/man1/grap2graph.1 +@man man/man1/grn.1 +@man man/man1/grodvi.1 +@man man/man1/groff.1 +@man man/man1/groffer.1 +@man man/man1/grog.1 +@man man/man1/grohtml.1 +@man man/man1/grolbp.1 +@man man/man1/grolj4.1 +@man man/man1/gropdf.1 +@man man/man1/grops.1 +@man man/man1/grotty.1 +@man man/man1/hpftodit.1 +@man man/man1/indxbib.1 +@man man/man1/lkbib.1 +@man man/man1/lookbib.1 +@man man/man1/mmroff.1 +@man man/man1/neqn.1 +@man man/man1/nroff.1 +@man man/man1/pdfmom.1 +@man man/man1/pdfroff.1 +@man man/man1/pfbtops.1 +@man man/man1/pic.1 +@man man/man1/pic2graph.1 +@man man/man1/preconv.1 +@man man/man1/refer.1 +@man man/man1/roff2dvi.1 +@man man/man1/roff2html.1 +@man man/man1/roff2pdf.1 +@man man/man1/roff2ps.1 +@man man/man1/roff2text.1 +@man man/man1/roff2x.1 +@man man/man1/soelim.1 +@man man/man1/tbl.1 +@man man/man1/tfmtodit.1 +@man man/man1/troff.1 +@man man/man5/groff_font.5 +@man man/man5/groff_out.5 +@man man/man5/groff_tmac.5 +@man man/man5/lj4_font.5 +@man man/man7/ditroff.7 +@man man/man7/groff.7 +@man man/man7/groff_char.7 +@man man/man7/groff_diff.7 +@man man/man7/groff_filenames.7 +@man man/man7/groff_hdtbl.7 +@man man/man7/groff_man.7 @man man/man7/groff_mdoc.7 +@man man/man7/groff_me.7 +@man man/man7/groff_mm.7 +@man man/man7/groff_mmse.7 +@man man/man7/groff_mom.7 +@man man/man7/groff_ms.7 +@man man/man7/groff_trace.7 +@man man/man7/groff_www.7 +@man man/man7/roff.7 share/doc/groff/ share/doc/groff/html/ share/doc/groff/html/mom/