groff 1.25.0 release candidate 3, 1.25.0.rc3, is now available from GNU's alpha site. You may download the distribution archive from there.
https://alpha.gnu.org/gnu/groff/ Ensure the integrity of your download by checking this source code archive's cryptographic signature; see "Obtaining groff" below. What is groff? ============== groff (GNU roff) is a typesetting system that reads plain text input that includes formatting commands to produce output in PostScript, PDF, HTML, or DVI formats or for display to a terminal. Formatting commands can be low-level typesetting primitives, macros from a supplied package, or user-defined macros. All three approaches can be combined. A reimplementation and extension of troff and other programs from AT&T Unix, groff is widely available on POSIX and other systems owing to its long association with Unix manuals, including man pages. It and its predecessor have produced several best-selling software engineering texts. groff can create typographically sophisticated documents while consuming minimal system resources. https://www.gnu.org/software/groff/ Changes since groff 1.25.0.rc2 ============================== Since the groff 1.25.0.rc2 release candidate was made available on 1 August, 6 people have authored a total of 310 commits. $ git shortlog --summary 1.25.0.rc2..1.25.0.rc3 1 Bjarni Ingi Gislason 7 Bruno Haible 1 Dave Kemper 7 Deri James 293 G. Branden Robinson 1 Álvar Ibeas Thanks to Alex Colomar, Brahmajit Das, Bruno Haible, Hans Bezemer, Ingo Schwarze, Jakub Kulik, Jeff Conrad, Larry Kollar, and Pavol Sloboda for reporting defects in rc2. For this RC we gave intense attention to improving groff programs' and (static) libraries' memory safety. We also incorporated fixes for long-standing security vulnerabilities in the programs mmroff, pdfmom, and pre-grohtml that had gone unreported for between 14 and 26 years. We released a groff 1.24.2 stable update to get their fixes into users' and distributors' hands more quickly. Here are some highlights of this release candidate. 8d9650846 [pdfmom]: Fix Savannah #68765. cbed1f24d [grohtml]: Fix Savannah #68688 (2/2). 82ab38c6c [troff]: Fix Savannah #68688 (1/2). e86137926 [pre-grohtml]: Regression-test Savannah #68688. 08a0aa4a0 [mm]: Fix Savannah #68689. 3d1bcd53e [mm]: Regression-test Savannah #68689. 85e365b71 [pdfmom]: Fix Savannah #68687. 5c67befd2 [pdfmom]: Regression-test Savannah #68687. 5f6104b10 doc/doc.am: Strip `%%CreationDate` from EPS file. ab8c064ee [man]: Add AT&T arg count checker to `CHECKSTYLE`. d6cc8ade1 [man]: Ensure correct generation of groff.7.man. a2f013488 [eqn]: `neqn` script locates `eqn` more reliably. 8fb8b7b96 [libdriver]: Migrate to ISO C++98 `try/new/catch`. 9b08db644 ANNOUNCE,PROBLEMS: Tweak Solaris testing advice. 3f83bb6e6 man/man.am: Fix man/groff.7.man generation, try 3. bd35d413c Stop letting code coverage crash Solaris build. e3ecdc21a ANNOUNCE: Add note for Solaris 11.4 users. 4516f8e09 groff_char(7): Fix Savannah #68741. c44e62ddc [mm]: Adapt test to {Free,Net,Open}BSD od(1). bd0f127ed [grn]: Fix Savannah #68686. d9332be66 [grn]: Regression-test Savannah #68686. 971b12760 [mm]: Fix Savannah #68727. 668bd4429 [mm]: Regression-test Savannah #68727. 4f34230ab [mm]: Fix Savannah #68733. 7bc859d7b HACKING: Revise and expand. 135f0e1e1 doc/doc.am: Fix *.html generation with BSD Make. b022f5086 Fix Savannah #68716. b0ddddde5 [hpftodit]: Migrate to ISO C++98 `try/new/catch`. 331559454 [hpftodit]: Fix Savannah #68684. 864a79816 [hpftodit]: Regression test Savannah #68684. 47391f317 [hpftodit]: Migrate to ISO C++98 `try/new/catch`. cca6188a8 [hpftodit]: Fix Savannah #68680. be37b22df [hpftodit]: Regression-test Savannah #68680. 336f51191 Unsplit groff's Info manual. 119d63aa8 doc/doc.am: Avoid use of GNU Make extension. 7c656f0f2 [eqn]: Fix Savannah #68683. 08e99ff84 [eqn]: Regression-test Savannah #68683. d31fbc2b9 [gropdf]: Inkscape exported pdfs fail to load. 954230c53 [man,mdoc]: Break line before any table region. 596015539 [tbl]: Cancel temp indent before table region. 72edc0478 [tbl]: Cancel right-alignment before table region. 85f79ee8f [libbib]: Fix Savannah #68685. a5667ad70 [refer]: Regression-test Savannah #68685. cd999c600 [libbib]: Fix Savannah #68682 (2/2). 0f9635654 [libbib]: Fix Savannah #68682 (1/2). 879108fbd [refer]: Regression-test Savannah #68682. 089e72294 [libbib,indxbib]: Fix Savannah #68703 (4/4). 6837e0dce [libbib,indxbib]: Fix Savannah #68703 (3/4). 4f6c9b705 [libbib,indxbib]: Fix Savannah #68703 (2/4). 0bf5a484b [libbib,indxbib]: Fix Savannah #68703 (1/4). 5b228fbfc [libbib]: Fix Savannah #68681. 765d6cf03 [refer]: Regression-test Savannah #68681. e662fa0f3 [libbib]: Fix Savannah #68679. 360c8ea28 [refer]: Regression-test Savannah #68679. 9cfe8d43a [mm]: Fix Savannah #68667. bdee68b15 [mm]: Regression-test Savannah #68667. 936361f81 tmac/s.tmac (KF): Break the line just as KS does. 7276437c5 [ms]: Fix Savannah #64466. d79346025 configure.ac: Defeat C23/C++23 presumption. 0008c57e5 gnulib: Update stable/2026-07 branch. 5cbf279b2 [groff]: Fix Savannah #68676. 744d3a8f6 [gropdf]: Behave the same as grops wrt stroked line width. da3dbb3a1 [man]: Fix Savannah #68658. 71bfafb0d [man]: Regression-test Savannah #68658. fbda4a4d3 [man]: Fix Savannah #68656. 156872adc [man]: Regression-test Savannah #68656. b7d51a93d [troff]: Fix Savannah #68642. f6caa62c1 [grog]: Fix Savannah #68635. f5c8144d6 [troff]: Fix Savannah #68616. [recte: #68618] fc80908ba [troff]: Regression-test Savannah #68618. 8427b5ae1 bootstrap.conf: Fix Savannah #68566. e0ce52297 [eqn]: Fix Savannah #68601. e8e78aad5 pic: Fix undefined behaviour, part 2. 36b167208 pic: Fix undefined behaviour, part 1. 17883bb19 eqn: Fix undefined behaviour, part 2. 0f74adb41 eqn: Fix undefined behaviour, part 1. 8ef98cfb0 tbl: Fix undefined behaviour. We furthermore made the usual clarifications of diagnostic messages and improvements to documentation. Details ------- For a comprehensive list of feature changes, see "News" below. Much attention has been given to fixing bugs, validating input, clarifying diagnostic messages, improving memory management, and correcting and expanding documentation. The previous release shipped with 314 automated tests; this one ships with over 370. As of this writing, per the GNU Savannah bug tracker, the groff project has resolved 124 issues as fixed for the 1.25.0 release. Classifying these issues by type and the component of the project to which they apply, we find the following. Type Component ---- --------- Build/installation 14 Formatter 55 Crash/unresponsive 14 Driver: grohtml 1 Documentation 11 Driver: gropdf 3 Feature change 15 Driver: grops 2 Incorrect behavior 45 Driver: grotty 1 Lint 1 Driver: others/general 0 Refactoring 4 Font: devpdf 1 Rendering/cosmetics 6 Font: devps 0 Test 2 Font: others/general 2 Warning/suspicious behavior 9 General 18 Macros: man 5 Macros: mdoc 1 Macros: me 0 Macros: mm 6 Macros: mom 1 Macros: ms 4 Macros: others/general 3 Preprocessor: eqn 5 Preprocessor: grn 2 Preprocessor: html 1 Preprocessor: pic 1 Preprocessor: preconv 0 Preprocessor: refer 5 Preprocessor: soelim 0 Preprocessor: tbl 2 Preprocessor: others/general 2 Utilities 3 Another way of capturing the amount of revision is as follows. $ git diff --stat 1.25.0.rc2 1.25.0.rc3 | tail -n 1 118 files changed, 4553 insertions(+), 1373 deletions(-) ...and since the last stable release, we have the following. $ git diff --stat 1.24.2 1.25.0.rc3 | tail -n 1 435 files changed, 55505 insertions(+), 34577 deletions(-) Obtaining groff =============== Here are the compressed sources and a GPG detached signature[*]. https://alpha.gnu.org/gnu/groff/groff-1.25.0.rc3.tar.gz https://alpha.gnu.org/gnu/groff/groff-1.25.0.rc3.tar.gz.sig Here are the SHA-1 and SHA-256 checksums. 1abf7692c02b3d03195d3c0f3a0ad6c92a0bb4b3 groff-1.25.0.rc3.tar.gz vX+CBhQ9ZBKpNZQdt4nTokjXjBhVMSzZq0ALodwXC0o= groff-1.25.0.rc3.tar.gz The SHA-256 checksum is encoded in Base64 instead of the hexadecimal form that most checksum tools default to. The mechanism follows. sha256sum < groff-1.25.0.rc3.tar.gz | cut -f1 -d\ | xxd -r -p | base64 (Because "base64" reads from a pipe, it doesn't know the file name, and so the file name will not appear in the output.) [*] Use a .sig file to verify that the corresponding file (without the .sig suffix) is intact. First, be sure to download both the .sig file and the corresponding archive. Then, verify the archive. gpg --verify groff-1.25.0.rc3.tar.gz{.sig,} If that command fails because you don't have the required public key, you can import it. wget -O 108747.asc \ 'https://savannah.gnu.org/people/viewgpg.php?user_id=108747' gpg --import 108747.asc Run the 'gpg --verify' command above again subsequently. Caveats ======= * To build groff on Solaris 11.4, you must pass the option `--disable-dependency-tracking` to its "configure" script, or use GNU Make, for example with `./configure MAKE=gmake`. * GNU tools, or otherwise POSIX-conforming ones, are generally required to build on Solaris 10 or 11. See the "PROBLEMS" file in the distribution archive. * Solaris 10 and 11 have known problems with automated tests; see the "PROBLEMS" file in the distribution archive. News ==== There is one new news item for 1.25.0.rc3. * The an (man) package now checks for certain portability problems to AT&T troff's man(7) if the `CHECKSTYLE` register, introduced in groff 1.23.0 and documented in 1.24.0, is given a value of 100 or greater. This feature is experimental and subject to change. There was one new news item in 1.25.0.rc2. * Building groff from its Git repository now requires the `--enable-maintainer-mode` option to its 'configure' script. The remaining feature changes below were present in rc1. troff ----- * GNU troff, the formatter, now employs the unusual Roman numerals "W" and "Z" of AT&T troff only in compatibility mode. * The `dt` request, when given invalid arguments, now does nothing instead of removing any existing diversion trap. This change is inconsistent with AT&T troff but more consistent with general *roff syntax; as a rule, requests given invalid arguments (and that don't process a list of similar objects, as `rm` and `rr` do) perform no operation. (However, see "Other differences" in groff_diff(7) or groff's Texinfo manual regarding `rm` and `rr` request behavior that is discrepant among various troffs.) * The `dt` and `wh` requests now enforce their requirement of space between their arguments. While consistent with GNU troff input syntax, said enforcement is not consistent with AT&T troff. We did not add support in groff's AT&T troff compatibility mode because we're aware of no legacy documents that require it. Example: `.wh9i+.5+\n(xxuPT`, while it validly plants a trap calling the `PT` macro in AT&T troff, is an input considerably more cryptic than any specimens known to us. * The formatter now enables the "delim", "syntax", and "escape" warning categories by default. * The `trf` (transparent file throughput) request now discards input characters that are invalid in GNU troff's output format, meaning all character codes less than decimal 32 (except 10, the line feed) and greater than decimal 127. * A new read-only register `.ul` reports the count of productive input lines remaining to be be underlined in the environment (as configured by either the `cu` or `ul` requests). * The formatter supports a new warning category, "style". It is used to diagnose input that is non-idiomatic or likely to produce an unexpected result (or none at all), but is not invalid. * When issuing warning diagnostic messages, GNU troff now reports the warning category governing its emission. This change is to make it easier for users to select warnings of interest. * When the `substring` request is given two index arguments whose magnitudes both exceed the operand string, macro, or diversion's length, it now ignores the request (and issues a warning in category "range"), leaving the operand (first request argument) unchanged instead of emptying it. * When the `ti` request is given no arguments, the formatter now cancels any pending temporary indentation. (Formerly, it did nothing in any troff, except, in GNU troff, issuing a warning in category "missing".) * The `phw` request now accepts arguments. Each is interpreted as a possible hyphenation word (ignoring hyphens in the input), looked up in the hyphenation exception list for the hyphenation language, and if found, is reported with its hyphenation points. Only hyphenation exceptions defined by the `hw` request are reported. * The `pwh` request, when invoked while the diversion is not the top-level diversion, now reports the name and location of any configured diversion trap instead of reporting nothing. * A new request, `rhw`, removes user-defined hyphenation exception words from the current hyphenation language's list thereof. Those supplied by files like "tmac/hyphenex.{cs,en,pl}" are retained. * The built-in, read-only register `.zoom` is now named `.fzoom` for consistency with other GNU troff extensions, which largely pair names of requests with those of read-only registers they affect. The old name remains as an alias configured by the default "troffrc" file. grn --- * The `-M` command-line option is renamed to `-I`, better paralleling troff(1). Inclusions are not the same things as macro file resources. The program accepts `-L` (the original Berkeley name for this option), and `-M` (groff grn prior to this point) synonymously. groff ----- * groff now passes `-I` options as-is to grn(1), instead of translating the option name to `-M`. * groff's `-I` option no longer implies `-g` or `-s`; if your document needs to be piped through grn(1) and/or soelim(1), specify the foregoing options as appropriate. pic --- * groff's pic(1) manual, "Making Pictures With GNU PIC", is now built and installed as a PDF rather than a PostScript document. Thanks to Deri James. Macro packages -------------- * The an (man) package offers new macros to ease the formatting of lists. Enclose paragraphing macros between `LS` and `LE` to identify them as list items. Doing so can mark them as "compact", ease management of their indentation, and supply hints to the output driver to improve their rendering (as with HTML). Lists can be nested. (Sub)sectioning macro calls, and the end of the document, close all open lists. See groff_man(7) for details, and groff_man_style(7) for an example. Thanks to Alex Colomar, Chet Ramey, Pádraig Brady, and Stephen Gildea for consultation and encouragement, and to Alex for selecting these macros' names. Because these macros format no text, documents employing them risk no damage to their content if the formatter does not support them. A man(7) document author can choose either to transition to these macros, to manage list "compactness" and item indentation with existing man(7) package facilities, or to employ both approaches. * The m (mm) macro package's `IA` and `WA` macros--used only with the "letter" document type configured by calling the `LT` macro--no longer disable the escape character, and their counterparts `IE` and `WE` no longer reënable it. This change makes groff mm consistent with DWB 3.3 mm. If you require the previous groff mm behavior, consider writing and using wrapper macros such as the following in your document. .de iA .IA .eo .. .de iE .ec .IE .. These macro definitions are harmlessly redundant when formatting such a document with an older version of groff mm. * The s (ms) macro package now supports PDF features. Pass groff (or troff) the command-line option `-r PDFFEAT=1` to enable them when used with the "pdf" output device ("-T pdf"). The PDF thus produced shows an overview bookmark panel or navigation pane (viewer application support allowing); the viewer's interface to document properties includes the document title and author(s), if specified by the `TL` and `AU` macros, respectively; if the document calls the package's `TC` macro, the table of contents entries it produces are hyperlinked to navigate the document (even if it does not use the `XN` macro introduced in groff 1.23.0); and if the document calls `RP` to configure a cover page, the table of contents relocates to follow it. The new macros `XM` and `XR` respectively anchor a location within the document and format text that hyperlinks to it, respectively. These changes were inspired by Keith Marshall's "spdf.tmac" which was withdrawn from groff in 1.24.0, but continues to be developed at: https://savannah.nongnu.org/projects/groff-pdfmark/ ...though groff ms(7) differs in some respects. Our objective is to enable and support PDF features in any ms document without requiring its author to update its content. We welcome feedback on these extensions to the package's macro interface. We expect to finalize these changes in a future release, and effectively default `PDFFEAT` "on". Thanks to Deri James. * The s (ms) macro package now supports the use of automatically numbered footnote marks (interpolated via `\**` or `\*[*]`) in tbl(1) table entries. Other implementations of ms do not. Thanks to Deri James. * groff's ms(7) manual, "Using groff with the ms macros", is now built and installed as a PDF rather than a PostScript document. Thanks to Deri James. Miscellaneous ------------- * The new document "Groff PDF Features" is built and installed as a PDF. It surveys the PDF features that groff enables and exposes in its full-service macro packages. Thanks to Deri James. * The grn command now exits with status 2 instead of 8 on usage errors arising from missing arguments to command-line options. It now exits with the POSIX standard `EXIT_FAILURE` status (1) instead of 8 when reading an unrecognized command keyword. * The 'configure' options '--{en,dis}able-groff-allocator' introduced in groff 1.23.0 are now deprecated. `--disable-groff-allocator` has been implicit since that release, and we've received no reports of a C++ runtime unable to handle groff's demands on its heap/"free store" allocator. We expect to withdraw these configuration options completely in groff 1.26. * You need the "convert" program from ImageMagick or GraphicsMagick to build groff from its Git repository. The program is not required for builds from distribution archives. Acknowledgements ================ We'd like to thank the following people for helping ensure the quality of this release. Alex Colomar Alexis Hildebrandt Avi Halachmi Benno Schulenberg Bjarni Ingi Gislason Bob Friesenhahn Brahmajit Das Bruno Haible Chet Ramey Colin Watson Dave Kemper Deri James Dmytro Bagrii Doug McIlroy Elias Hasas Hans Bezemer Hilmar Preuße Hubert Garavel Ingo Schwarze Jakub Kulik Jeff Conrad Johannes Altmanninger John Gardner Karl Berry Larry Kollar Luis Rivera Martin Simmons Morten Bo Johansen Nguyễn Gia Phong Pavol Sloboda Pádraig Brady Richard Purdie Ross Burton Russ Allbery Santiago Vila Stefan Möding Stephen Gildea Zack Weinberg
signature.asc
Description: PGP signature
