GNU bug report logs - #75501
[PATCH] gnu: mandoc: Support zstd-compressed man pages.

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: guix-patches; Reported by: soeren@HIDDEN; Keywords: patch; dated Sat, 11 Jan 2025 19:11:02 UTC; Maintainer for guix-patches is guix-patches@HIDDEN.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 11 Jan 2025 19:10:35 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Jan 11 14:10:35 2025
Received: from localhost ([127.0.0.1]:44935 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tWgsU-0006vo-Ne
	for submit <at> debbugs.gnu.org; Sat, 11 Jan 2025 14:10:35 -0500
Received: from lists.gnu.org ([2001:470:142::17]:43214)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <soeren@HIDDEN>)
 id 1tWgsS-0006vN-3R
 for submit <at> debbugs.gnu.org; Sat, 11 Jan 2025 14:10:32 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <soeren@HIDDEN>)
 id 1tWgsK-0004ji-EH
 for guix-patches@HIDDEN; Sat, 11 Jan 2025 14:10:24 -0500
Received: from magnesium.8pit.net ([45.76.88.171])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <soeren@HIDDEN>)
 id 1tWgsH-000144-Gr; Sat, 11 Jan 2025 14:10:24 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; s=opensmtpd; bh=gCVpSxgw
 PbxjqKboSWaAGuUh1QA+16x7ay2Qf/7JnQo=; h=date:subject:to:from; 
 d=soeren-tempel.net;
 b=lbXl0gGB2TKDoi1YU/935mqVrDTOkpBuC0zjWRNHJFln+Kf
 EDf1Y5Any0jzUzT0FAO8ZaWJLmzi4iemwcOd7Xhn48j9up0J9rKshwxZ4XlFLUtvVDhTme
 CtlhtqkXqi27g3bTH0qf07rGT5Aup7z3vsLmM7D7MkVrqwJhvGN4ow=
Received: from localhost (<unknown> [2a02:560:4d3d:df00:dc2b:c47d:2594:21b8])
 by magnesium.8pit.net (OpenSMTPD) with ESMTPSA id 3e834283
 (TLSv1.3:TLS_AES_256_GCM_SHA384:256:YES); 
 Sat, 11 Jan 2025 20:10:15 +0100 (CET)
From: soeren@HIDDEN
To: guix-patches@HIDDEN
Subject: [PATCH] gnu: mandoc: Support zstd-compressed man pages.
Date: Sat, 11 Jan 2025 20:07:52 +0100
Message-ID: <20250111190753.32110-2-soeren@HIDDEN>
X-Mailer: git-send-email 2.47.1
MIME-Version: 1.0
X-Debbugs-Cc: maxim.cournoyer@HIDDEN, me@HIDDEN, ludo@HIDDEN
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Received-SPF: pass client-ip=45.76.88.171;
 envelope-from=soeren@HIDDEN; helo=magnesium.8pit.net
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 0.9 (/)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.1 (/)

From: Sören Tempel <soeren+git@HIDDEN>

Since #68242 Guix uses zstd compression for man pages.  Unfortunately,
upstream mandoc only supports gzip compressed man pages.  Luckily, zstd
provides a wrapper library which easily allows adapting software using
zlib to zstd compression.  This patch uses this wrapper library in
conjunction with mandoc to add support for zstd compression to it,
thereby allowing Guix man pages to be viewed with mandoc again.

* gnu/packages/man.scm (mandoc): Support zstd compression.
* gnu/local.mk: Add new patch.
* gnu/packages/patches/mandoc-support-zstd-compression.patch: New file.
---
Without this patch, mandoc is essentially defunct on Guix.  You cannot
view any Guix man pages with mandoc presently because of this issue.

 gnu/local.mk                                  |  1 +
 gnu/packages/man.scm                          | 47 +++++++++------
 .../mandoc-support-zstd-compression.patch     | 58 +++++++++++++++++++
 3 files changed, 89 insertions(+), 17 deletions(-)
 create mode 100644 gnu/packages/patches/mandoc-support-zstd-compression.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index f118fe4442..c8bfe47509 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1799,6 +1799,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/lxc-no-static-bin.patch	\
   %D%/packages/patches/mactelnet-remove-init.patch		\
   %D%/packages/patches/mailutils-variable-lookup.patch		\
+  %D%/packages/patches/mandoc-support-zstd-compression.patch	\
   %D%/packages/patches/make-impure-dirs.patch			\
   %D%/packages/patches/mariadb-rocksdb-atomic-linking.patch	\
   %D%/packages/patches/mathjax-disable-webpack.patch			\
diff --git a/gnu/packages/man.scm b/gnu/packages/man.scm
index 3148fcc8a1..c62568e515 100644
--- a/gnu/packages/man.scm
+++ b/gnu/packages/man.scm
@@ -37,6 +37,7 @@ (define-module (gnu packages man)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system ruby)
   #:use-module (guix utils)
+  #:use-module (gnu packages)
   #:use-module (gnu packages base)
   #:use-module (gnu packages compression)
   #:use-module (gnu packages dbm)
@@ -273,30 +274,42 @@ (define-public mandoc
               (method url-fetch)
               (uri (string-append "https://mandoc.bsd.lv/snapshots/mandoc-"
                                   version ".tar.gz"))
+              (patches (search-patches "mandoc-support-zstd-compression.patch"))
               (sha256
                (base32
                 "174x2x9ws47b14lm339j6rzm7mxy1j3qhh484khscw0yy1qdbw4b"))))
     (build-system gnu-build-system)
     (arguments
      `(#:test-target "regress"
-       #:phases (modify-phases %standard-phases
-                  (add-before 'configure 'set-prefix
-                    (lambda* (#:key outputs #:allow-other-keys)
-                      (substitute* "configure"
-                        (("^CC=.*")
-                         (string-append "CC=" ,(cc-for-target) "\n"))
-                        (("^DEFCFLAGS=\\\\\"")
-                         "DEFCFLAGS=\"-O2 ")
-                        (("^UTF8_LOCALE=.*")      ;used for tests
-                         "UTF8_LOCALE=en_US.UTF-8\n")
-                        (("^MANPATH_(BASE|DEFAULT)=.*" _ which)
-                         (string-append "MANPATH_" which "="
-                                        "/run/current-system/profile/share/man\n"))
-                        (("^PREFIX=.*")
-                         (string-append "PREFIX=" (assoc-ref outputs "out")
-                                        "\n"))))))))
+       #:make-flags
+       (list "VPATH=./zstd-src/zlibWrapper"
+             (string-join
+               (list "CFLAGS=-DZWRAP_USE_ZSTD=1"
+                     (string-append "-I./zstd-src/zlibWrapper"))
+               " "))
+       #:phases ,#~(modify-phases %standard-phases
+                     (add-after 'unpack 'unpack-zstd
+                       (lambda _
+                         (mkdir "zstd-src")
+                         (invoke "tar" "--strip-components=1" "-C" "zstd-src"
+                                 "-xf" #$(package-source zstd))))
+                     (add-before 'configure 'set-prefix
+                       (lambda* (#:key outputs #:allow-other-keys)
+                         (substitute* "configure"
+                           (("^CC=.*")
+                            (string-append "CC=" #$(cc-for-target) "\n"))
+                           (("^DEFCFLAGS=\\\\\"")
+                            "DEFCFLAGS=\"-O2 ")
+                           (("^UTF8_LOCALE=.*")      ;used for tests
+                            "UTF8_LOCALE=en_US.UTF-8\n")
+                           (("^MANPATH_(BASE|DEFAULT)=.*" _ which)
+                            (string-append "MANPATH_" which "="
+                                           "/run/current-system/profile/share/man\n"))
+                           (("^PREFIX=.*")
+                            (string-append "PREFIX=" (assoc-ref outputs "out")
+                                           "\n"))))))))
     (native-inputs (list (libc-utf8-locales-for-target) perl)) ;used to run tests
-    (inputs (list zlib))
+    (inputs (list zlib (list zstd "lib")))
     (native-search-paths
      (list (search-path-specification
             (variable "MANPATH")
diff --git a/gnu/packages/patches/mandoc-support-zstd-compression.patch b/gnu/packages/patches/mandoc-support-zstd-compression.patch
new file mode 100644
index 0000000000..b8cbeb6782
--- /dev/null
+++ b/gnu/packages/patches/mandoc-support-zstd-compression.patch
@@ -0,0 +1,58 @@
+mandoc upstream does not support zstd compression. However, Guix uses zstd
+compression for its man pages, therefore—without support for this compression
+method—mandoc would be quite useless. Hence, this patchset uses zlibWrapper
+from the zstd project to add zstd compression support to mandoc.
+
+diff -upr mandoc-1.14.6.orig/Makefile mandoc-1.14.6/Makefile
+--- mandoc-1.14.6.orig/Makefile	2025-01-11 16:20:31.511129163 +0100
++++ mandoc-1.14.6/Makefile	2025-01-11 19:16:35.924788821 +0100
+@@ -251,7 +251,12 @@ LIBMANDOC_OBJS	 = $(LIBMAN_OBJS) \
+ 		   msec.o \
+ 		   preconv.o \
+ 		   read.o \
+-		   tag.o
++		   tag.o \
++		   zstd_zlibwrapper.o \
++		   gzclose.o \
++		   gzlib.o \
++		   gzread.o \
++		   gzwrite.o
+ 
+ ALL_COBJS	 = compat_err.o \
+ 		   compat_fts.o \
+Only in mandoc-1.14.6: Makefile.orig
+diff -upr mandoc-1.14.6.orig/configure mandoc-1.14.6/configure
+--- mandoc-1.14.6.orig/configure	2025-01-11 16:20:31.511129163 +0100
++++ mandoc-1.14.6/configure	2025-01-11 19:16:35.924788821 +0100
+@@ -430,7 +430,7 @@ fi
+ [ "${FATAL}" -eq 0 ] || exit 1
+ 
+ # --- LDADD ---
+-LDADD="${LDADD} ${LD_NANOSLEEP} ${LD_RECVMSG} ${LD_OHASH} -lz"
++LDADD="${LDADD} ${LD_NANOSLEEP} ${LD_RECVMSG} ${LD_OHASH} -lz -lzstd"
+ echo "selected LDADD=\"${LDADD}\"" 1>&2
+ echo "selected LDADD=\"${LDADD}\"" 1>&3
+ echo 1>&3
+Only in mandoc-1.14.6: configure.orig
+diff -upr mandoc-1.14.6.orig/read.c mandoc-1.14.6/read.c
+--- mandoc-1.14.6.orig/read.c	2025-01-11 16:35:03.825441715 +0100
++++ mandoc-1.14.6/read.c	2025-01-11 19:16:35.924788821 +0100
+@@ -37,7 +37,7 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <unistd.h>
+-#include <zlib.h>
++#include <zstd_zlibwrapper.h>
+ 
+ #include "mandoc_aux.h"
+ #include "mandoc.h"
+@@ -627,7 +627,7 @@ mparse_open(struct mparse *curp, const char *file)
+ 	int		  fd, save_errno;
+ 
+ 	cp = strrchr(file, '.');
+-	curp->gzip = (cp != NULL && ! strcmp(cp + 1, "gz"));
++	curp->gzip = (cp != NULL && (! strcmp(cp + 1, "gz") || ! strcmp(cp + 1, "zst")));
+ 
+ 	/* First try to use the filename as it is. */
+ 
+Only in mandoc-1.14.6: read.c.orig




Acknowledgement sent to soeren@HIDDEN:
New bug report received and forwarded. Copy sent to maxim.cournoyer@HIDDEN, me@HIDDEN, ludo@HIDDEN, guix-patches@HIDDEN. Full text available.
Report forwarded to maxim.cournoyer@HIDDEN, me@HIDDEN, ludo@HIDDEN, guix-patches@HIDDEN:
bug#75501; Package guix-patches. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Sun, 12 Jan 2025 05:45:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.