From 4176f6c52f485549f829af048ef9a6726b52e112 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6ren=20Tempel?= Date: Tue, 28 Jan 2025 16:55:48 +0100 Subject: [PATCH] gnu: mandoc: Support zstd-compressed man pages. 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. Without this patch, mandoc is essentially defunct on Guix. * gnu/packages/man.scm (mandoc): Support zstd compression. * gnu/local.mk: Add new patch. * gnu/packages/patches/mandoc-support-zstd-compression.patch: New file. Signed-off-by: Maxim Cournoyer Change-Id: I49a6b9f81309aa1b9f0e5d19b1813dbac13cf968 --- gnu/local.mk | 1 + gnu/packages/man.scm | 54 +++++++++++------ .../mandoc-support-zstd-compression.patch | 60 +++++++++++++++++++ 3 files changed, 97 insertions(+), 18 deletions(-) create mode 100644 gnu/packages/patches/mandoc-support-zstd-compression.patch diff --git a/gnu/local.mk b/gnu/local.mk index e4a8220c830a5a19274a578d24520c9900ce2b14..328f6f2a27e20cb2a8a67e220459c88bdff85308 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1812,6 +1812,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 3148fcc8a163aeca229d6841cfcad7643be67070..1ff1fac991f59525e8080d6ab74475756f6103ab 100644 --- a/gnu/packages/man.scm +++ b/gnu/packages/man.scm @@ -37,6 +37,7 @@ #: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,47 @@ pages into HTML format.") (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")))))))) + (list + #:test-target "regress" + #:make-flags + #~(list "VPATH=./zstd-src/zlibWrapper" + (string-join + (list "CFLAGS=-DZWRAP_USE_ZSTD=1" + "-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 0000000000000000000000000000000000000000..a73c762f3f4d8f5d843b942bbdd192a68c88e4b7 --- /dev/null +++ b/gnu/packages/patches/mandoc-support-zstd-compression.patch @@ -0,0 +1,60 @@ +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. + +Upstream-status: https://inbox.vuxu.org/mandoc-discuss/Z5i0H+XrKVrZqAXB@asta-kit.de/T/#t + +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 + #include + #include +-#include ++#include + + #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