Package: release.debian.org
Severity: normal
User: release.debian....@packages.debian.org
Usertags: unblock

Please unblock package lowdown, a key package, through:
  bind9 -> libmaxminddb -> lowdown

[ Reason ]
lowdown is a Markdown to HTML/roff/LaTeX/etc. translator. A regression
was introduced at some point where the -Tman (manpage) output used a
roff macro that is not present in the "man" package but in the "ms"
package. I reported this upstream[1], and it was subsequently fixed[2].

This is a bookworm-targeted backport of that specific upstream commit,
that applies cleanly as-is.

1: https://github.com/kristapsdz/lowdown/issues/111
2: 
https://github.com/kristapsdz/lowdown/commit/02491bf4ae2a39df2dfed10382512449a5b3262f

[ Impact ]
The output difference is minor from a visual standpoint, e.g.
   OPTIONS
          -batch_size ______
  -              Maximum  number  of  entries to request per call to 
get-entries.
  -              You should not generally need to change this. Defaults to 1000.
  +            Maximum number of entries to request per call to get-entries.  
You
  +            should not generally need to change this. Defaults to 1000.

However, the roff output is technically invalid.

In Debian, this manifests in reverse build-dependencies that are using
lowdown to generate their manpage to emit lintian warnings, e.g.:
    W: certspotter: groff-message 29: warning: macro 'PI' not defined 
[usr/share/man/man8/certspotter-script.8.gz:1]
    W: certspotter: groff-message 56: warning: macro 'PI' not defined 
[usr/share/man/man8/certspotter.8.gz:1]

There are three reverse build-dependencies in testing:
  1) src:libmaxminddb
  2) src:certspotter
  3) src:nix

Only the first two are using -Tman. I am the maintainer for both.
src:libmaxminddb was built with an pre-regression version of lowdown and
is not affected. It can be binNMUed, although not strictly necessary.

src:certspotter is affected and should probably be binNMUed, although as
explained, the visual impact is relatively minor.

[ Tests ]
Upstream has a comprehensive test suite that runs as part of the build.
The package also has autopkgtests that pass.

[ Risks ]
The code for the fix is trivial. The package is technically a key
package, but only as a reverse build-dep of another package, and is only
a B-D for three packages in total.

[ Checklist ]
  [x] all changes are documented in the d/changelog
  [x] I reviewed all changes and I approve them
  [x] attach debdiff against the package in testing

[ Other info ]
debdiff attached; you can also find the git diff at:
https://salsa.debian.org/debian/lowdown/-/commit/0e2160bb23e194edc5c15c7772042857fd18f2f7

unblock lowdown/1.0.0-2

Also probably:

nmu certspotter_0.16.0-1 . ANY . unstable . -m "Rebuild with lowdown 1.0.0-2"

(but no idea how to ensure the ordering of those two, not fluent in
wanna-build)
diff -Nru lowdown-1.0.0/debian/changelog lowdown-1.0.0/debian/changelog
--- lowdown-1.0.0/debian/changelog      2023-01-07 06:52:41.000000000 +0200
+++ lowdown-1.0.0/debian/changelog      2023-04-09 03:39:15.000000000 +0300
@@ -1,3 +1,13 @@
+lowdown (1.0.0-2) unstable; urgency=medium
+
+  * Backport upstream patch to avoid the use of an -ms macro, PI, in the -Tman
+    output. This addresses a man warning ("macro 'PI' not defined") which in
+    turn is a lintian warning for packages using lowdown to generate their
+    manpage(s).
+  * Bump Standards-Version to 4.6.2, no changes needed.
+
+ -- Faidon Liambotis <parav...@debian.org>  Sun, 09 Apr 2023 03:39:15 +0300
+
 lowdown (1.0.0-1) unstable; urgency=medium
 
   * New upstream release.
diff -Nru lowdown-1.0.0/debian/control lowdown-1.0.0/debian/control
--- lowdown-1.0.0/debian/control        2023-01-07 04:49:43.000000000 +0200
+++ lowdown-1.0.0/debian/control        2023-04-09 03:39:15.000000000 +0300
@@ -6,7 +6,7 @@
  libbsd-dev,
  libmd-dev,
  pkgconf | pkg-config,
-Standards-Version: 4.6.1
+Standards-Version: 4.6.2
 Section: text
 Homepage: https://kristaps.bsd.lv/lowdown/
 Vcs-Browser: https://salsa.debian.org/debian/lowdown
diff -Nru lowdown-1.0.0/debian/patches/dont-use-PI-for-tman.patch 
lowdown-1.0.0/debian/patches/dont-use-PI-for-tman.patch
--- lowdown-1.0.0/debian/patches/dont-use-PI-for-tman.patch     1970-01-01 
02:00:00.000000000 +0200
+++ lowdown-1.0.0/debian/patches/dont-use-PI-for-tman.patch     2023-04-09 
03:38:19.000000000 +0300
@@ -0,0 +1,83 @@
+From: Kristaps Dz <krist...@bsd.lv>
+Subject: [PATCH] Don't use \(PI for -tman: it doesn't exist.
+
+The \(PI register only exists for -ms macros.  Use the default value
+of 5n for this (for definition lists) when emitting for -tman.
+
+References #111
+
+Origin: upstream, 
https://github.com/kristapsdz/lowdown/commit/02491bf4ae2a39df2dfed10382512449a5b3262f
+Bug: https://github.com/kristapsdz/lowdown/issues/111
+Last-Update: 2023-04-09
+
+--- a/nroff.c
++++ b/nroff.c
+@@ -745,7 +745,8 @@ rndr_definition_title(struct bnodeq *obq
+ }
+ 
+ static int
+-rndr_definition_data(struct bnodeq *obq, struct bnodeq *bq)
++rndr_definition_data(const struct nroff *st, struct bnodeq *obq,
++    struct bnodeq *bq)
+ {
+       /*
+        * The IP creates an empty vertical space til I figure out a
+@@ -760,9 +761,18 @@ rndr_definition_data(struct bnodeq *obq,
+ 
+       if (bqueue_block(obq, ".if n \\\n.sp -1v") == NULL)
+               return 0;
+-      if (bqueue_block(obq, ".if t \\\n.sp -0.25v\n") == NULL)
++      if (bqueue_block(obq, ".if t \\\n.sp -0.25v") == NULL)
+               return 0;
+-      if (bqueue_block(obq, ".IP \"\" \\*(PI") == NULL)
++
++      /*
++       * The \(PI register exists in -ms for the paragraph indent.
++       * Use it for -ms and hard-code 5n (the default for -ms) in
++       * -man.
++       */
++
++      if (st->man && bqueue_block(obq, ".IP \"\" 5n") == NULL)
++              return 0;
++      if (!st->man && bqueue_block(obq, ".IP \"\" \\*(PI") == NULL)
+               return 0;
+ 
+       /* Strip out leading paragraphs. */
+@@ -1753,7 +1763,7 @@ rndr(struct lowdown_metaq *mq, struct nr
+               rc = rndr_list(st, obq, n, &tmpbq);
+               break;
+       case LOWDOWN_DEFINITION_DATA:
+-              rc = rndr_definition_data(obq, &tmpbq);
++              rc = rndr_definition_data(st, obq, &tmpbq);
+               break;
+       case LOWDOWN_DEFINITION_TITLE:
+               rc = rndr_definition_title(obq, &tmpbq);
+--- a/regress/simple.man
++++ b/regress/simple.man
+@@ -178,7 +178,7 @@ apples
+ .sp -1v
+ .if t \
+ .sp -0.25v
+-.IP "" \*(PI
++.IP "" 5n
+ Good for making applesauce.
+ .LP
+ oranges
+@@ -186,7 +186,7 @@ oranges
+ .sp -1v
+ .if t \
+ .sp -0.25v
+-.IP "" \*(PI
++.IP "" 5n
+ Citrus!
+ .LP
+ tomatoes
+@@ -194,7 +194,7 @@ tomatoes
+ .sp -1v
+ .if t \
+ .sp -0.25v
+-.IP "" \*(PI
++.IP "" 5n
+ There\(cqs no \(lqe\(rq in tomatoe.
+ .LP
+ Again, text is indented 4 spaces. (Put a blank line between each
diff -Nru lowdown-1.0.0/debian/patches/series 
lowdown-1.0.0/debian/patches/series
--- lowdown-1.0.0/debian/patches/series 2023-01-07 06:52:39.000000000 +0200
+++ lowdown-1.0.0/debian/patches/series 2023-04-09 03:38:12.000000000 +0300
@@ -1,2 +1,3 @@
 liblowdown-lm.patch
 pkg-config-libmd-libbsd.patch
+dont-use-PI-for-tman.patch

Reply via email to