On Mon, Feb 18, 2008 at 02:35:01PM +0100, Pieter Verberne wrote: > Why is Groff not updated? OpenBSD 4.2 has Groff 1.15 from 1999. > Some compatability issues?
I've been thinking this too, and went ahead and tried doing it... It's a bit of a pain actually, some problems: the directory layout has changed, and as there are some patches in the current OpenBSD version, one should track how those map into new files. New Groff (1.19.2) enforces ``-R'' option for more/less for manpage viewing, that breaks makewhatis, NetBSD tree has a fix (for Groff) for that. I tried building release(8) with it, got some errors on mdoc-macros, as I tried using the current mdoc-macros in OpenBSD. In short: it's not a trivial update, brings new code into the tree (with unsafe string functions, should be audited), and it's more GPL which some may find offensive. As there's only two things that I want from new Groff, I figured taking another route. One thing is a missing euro-symbol (which would be nice), and the other issue is fixed with the following patch (haven't tested this extensively, but seems okay and I'm building release(8) with it right now). ---------------------------------------------------------------------- This modifies default manpage handling: one long page for ttys, instead of with page breaks sprinkled. Default for nroff. Code basically backported from groff 1.19.2. cd /usr/src && patch < /path/to/groff_nomanpage_breaks.patch cd gnu/usr.bin/groff make -f Makefile.bsd-wrapper obj make -f Makefile.bsd-wrapper make -f Makefile.bsd-wrapper install Index: gnu/usr.bin/groff/tmac/tmac.an =================================================================== RCS file: /cvs/src/gnu/usr.bin/groff/tmac/tmac.an,v retrieving revision 1.1.1.2 diff -u -p -r1.1.1.2 tmac.an --- gnu/usr.bin/groff/tmac/tmac.an 9 Apr 2000 07:58:30 -0000 1.1.1.2 +++ gnu/usr.bin/groff/tmac/tmac.an 18 Feb 2008 12:17:18 -0000 @@ -17,6 +17,9 @@ .\"with groff; see the file COPYING. If not, write to the Free Software .\"Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. .\" +.\" -rcR=1 => Create a single, very long page instead of multiple pages. +.\" Useful for online display. Default in nroff mode. +.\" Deactivate with -rcR=0. .\" -rC1 => number pages continuously, rather than start each at 1 .\" -rD1 => double-sided printing, ie different odd and even page footers .\" -rPnnn => number first page nnn @@ -31,6 +34,36 @@ .if !rD .nr D 0 .if !rC .nr C 0 .if rP .pn 0\nP +.if !r cR \{\ +. ie n .nr cR 1 +. el .nr cR 0 +.\} +. +.nr an-first 1 +. +.\" we redefine .ne to avoid page breaks if cR is set; instead, the page +.\" length is increased to the necessary amount (this is needed for tables) +.\" +.\" similarly, we redefine .bp if cR is set, adjusting the page length to +.\" the current position so that no empty lines are inserted +.if \n[cR] \{\ +.de ne +. ie \\n[.$] \ +. nr an-ne (v;\\$*) +. el \ +. nr an-ne 1v +. if (\\n[an-ne] >= \\n[.t]) \ +. pl +(\\n[an-ne]u - \\n[.t]u + 1v) +.. +. +.rn bp an-bp +.de bp +. br +. pl \\n[nl]u +. an-bp \\$* +.. +.\} +. .de set-an-margin . ie '\*(.T'html' \{\ . nr an-margin 0i @@ -70,12 +103,17 @@ .nr an-no-space-flag 0 .nr an-break-flag 0 .nr an-div? 0 -.wh 0 an-header -.wh -1i an-footer -.wh -.5i an-p-footer -.if \\n[nl]>0 \{\ -. ie \\nC .bp \\n%+1 -. el .bp 1 +. +.ie \\n[cR] \ +. an-header +.el \{\ +. wh 0 an-header +. wh -1i an-footer +. wh -.5i an-p-footer +. if \\n[nl]>0 \{\ +. ie \\nC .bp \\n%+1 +. el .bp 1 +. \} .\} .. .de DT @@ -85,16 +123,37 @@ .ie \\n[.$] .nr PD (v;\\$1) .el .nr PD .4v>?\n[.V] .. +.de PT +. tl '\\*[an-title](\\*[an-section])'\\*[an-extra3]'\\*[an-title](\\*[an-section])' +.. +.de BT +. ie \\n[D] \{\ +. if o .tl '\\*[an-extra2]'\\*[an-extra1]'\\*[an-page-string]' +. if e .tl '\\*[an-page-string]'\\*[an-extra1]'\\*[an-extra2]' +. \} +. el \ +. tl '\\*[an-extra2]'\\*[an-extra1]'\\*[an-page-string]' +.. .de an-header .an-init -.ev 1 -.ie '\*(.T'html' \{\ -. tl '''' +.if \\n[cR] \{\ +. ie \\n[an-first] \ +. nr an-first 0 +. el \ +. sp .5i .\} +.ev 1 +.ps \\n[PS] +.ie '\*(.T'html' \ +. tl '''' .el \{\ -. sp .5i -. tl '\\*[an-title](\\*[an-section])'\\*[an-extra3]'\\*[an-title](\\*[an-section])' -. sp |1i +. if !\\n[cR] \ +. sp .5i +. PT +. ie !\\n[cR] \ +. sp |1i +. el \ +. sp .5i .\} .ev .ns @@ -105,27 +164,42 @@ .af an-page-letter a .de an-p-footer .ev 1 +.ps \\n[PS] .ie '\*(.T'html' \{\ . ds an-page-string " . ds an-extra1 " . ds an-extra2 " .\} -.el .ds an-page-string \\n% -.if rX \{\ -. if \\n%>\\nX \{\ -. nr an-page-letter \\n%-\\nX -. ds an-page-string \\nX\\n[an-page-letter] -.\}\} -.ie \\nD \{\ -. if o .tl '\\*[an-extra2]'\\*[an-extra1]'\\*[an-page-string]' -. if e .tl '\\*[an-page-string]'\\*[an-extra1]'\\*[an-extra2]' +.el \{\ +. ie r X \{\ +. if (\\n[%] > \\n[X]) \{\ +. nr an-page-letter (\\n[%] - \\n[X]) +. ds an-page-string \\n[X]\\n[an-page-letter] +. \} +. \} +. el \{\ +. ie \\n[cR] \ +. ds an-page-string "\\*[an-title](\\*[an-section]) +. el \ +. ds an-page-string \\n[%] +. \} .\} -.el .tl '\\*[an-extra2]'\\*[an-extra1]'\\*[an-page-string]' +.BT .if '\*(.T'html' \{\ . tl '''' .\} .ev .. +.de an-end +. nr % 1 +. pl +4v +. fl +. sp 3 +. an-p-footer +. pl \\n[nl]u +.. +.if \n[cR] .em an-end +. .de SH .sp \\n[PD]u .nr an-level 1