man/man-db-2.7.1-zio.dif
Dr. Werner Fink 629c0a4c72 Accepting request 998716 from home:dirkmueller:Factory
- update to 2.10.2:
  * Regenerating man-db's build system now explicitly requires Automake >=
    1.14.  (This was already the case since at least man-db 2.10.0, but was
    previously undocumented.)
  * Make `man -H` sleep for a few seconds after starting the browser, since
    it may background itself before loading files (Dr. Werner Fink).
  * If an override directory is configured using `--with-override-dir`, it is
    now applied more consistently when building the manpath, and whether a
    page was found in an override directory is considered when sorting
    candidates for display (Mihail Konev).
  * Make the man-db manual build reproducible.
  * Add some hardening options to the `systemd` service.
  * `configure` now has a `--with-snapdir` option, for use on systems where
    `snapd` is configured to use a directory other than `/snap`.
  * Fix occasional `mandb-symlink-target-timestamp` test failure.
  * Fix inadvertent reliance on a GCC extension that caused build failures
    with Clang.
  * Fix building without `iconv`.
- drop man-db-2.7.1-firefox.dif (upstream)

OBS-URL: https://build.opensuse.org/request/show/998716
OBS-URL: https://build.opensuse.org/package/show/Base:System/man?expand=0&rev=142
2022-08-23 06:05:39 +00:00

207 lines
5.4 KiB
Plaintext

---
config.h.in | 3 ++
configure.ac | 52 ++++++++++++++++++++++++++++++++++++++++
src/decompress.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
3 files changed, 124 insertions(+), 1 deletion(-)
Index: config.h.in
===================================================================
--- config.h.in.orig
+++ config.h.in
@@ -1009,6 +1009,9 @@
/* Define to 1 if you have the `z' library (-lz). */
#undef HAVE_LIBZ
+/* Define to 1 if you have libzio for opening compressed manuals */
+#undef HAVE_ZIO
+
/* Define to 1 if the bcrypt library is guaranteed to be present. */
#undef HAVE_LIB_BCRYPT
Index: configure.ac
===================================================================
--- configure.ac.orig
+++ configure.ac
@@ -35,6 +35,18 @@ MAN_ARG_DEVICE
MAN_ARG_DB
MAN_ARG_CONFIG_FILE
MAN_ARG_SECTIONS
+AC_ARG_WITH([zio],
+[AS_HELP_STRING([--with-zio=LIBRARY], [use zlib/libbz2 wrapper library LIBRARY (libzio)])],
+ [if test -z "$withval" -o "$withval" = "yes"
+ then
+ zio=libzio
+ elif test "$withval" = "no"
+ then
+ AC_MSG_ERROR(--with-zio requires an argument)
+ else
+ zio=$withval
+ fi],
+ [: ${zio=no}])
MAN_ARG_AUTOMATIC_CREATE
MAN_ARG_AUTOMATIC_UPDATE
MAN_ARG_CATS
@@ -400,6 +412,46 @@ AC_DEFINE_UNQUOTED([PROG_UNXZ], ["$unxz"
AC_DEFINE_UNQUOTED([PROG_UNLZIP], ["$unlzip"], [Program to use as unlzip.])
AC_DEFINE_UNQUOTED([PROG_UNZSTD], ["$unzstd"], [Program to use as unzstd.])
MAN_COMPRESS_LIB([z], [gzopen])
+dnl Check for zlib and libbz2 libraries to use this together
+dnl with SUSE's libzio to open compressed info files.
+dnl
+if test "$zio" = "no" || test -n "$zio"
+then
+ AC_CHECK_HEADER(zio.h,[
+ for lib in ${zio#lib} zio
+ do
+ AC_CHECK_LIB($lib, fzopen, [LIBS="-l$lib $LIBS"; am_cv_libzio=yes])
+ done
+ ])
+ if test "$am_cv_libzio" = yes; then
+ AC_DEFINE([COMP_SRC],[],[Define if you have compressors and want to support compressed cat files.])
+ AC_DEFINE([HAVE_ZIO],[],[Define to 1 if you have libzio for opening compressed manuals])
+ AC_CHECK_HEADER(zlib.h,[
+ for lib in z gz
+ do
+ AC_CHECK_LIB($lib, gzopen, [LIBS="$LIBS -Wl,--no-as-needed -l$lib"; break])
+ done
+ ])
+ AC_CHECK_HEADER(bzlib.h,[
+ for lib in bz2 bzip2
+ do
+ AC_CHECK_LIB($lib, BZ2_bzopen, [LIBS="$LIBS -Wl,--no-as-needed -l$lib"; break])
+ done
+ ])
+ AC_CHECK_HEADER(lzmadec.h, [
+ for lib in lzma lzmadec
+ do
+ AC_CHECK_LIB($lib, lzmadec_open, [LIBS="$LIBS -Wl,--no-as-needed -l$lib"; break])
+ done
+ ])
+ AC_CHECK_HEADER(lzma.h, [
+ for lib in lzma
+ do
+ AC_CHECK_LIB($lib, lzma_easy_encoder, [LIBS="$LIBS -Wl,--no-as-needed -l$lib"; break])
+ done
+ ])
+ fi
+fi
dnl To add more decompressors just follow the scheme above.
# Check for various header files and associated libraries.
Index: src/decompress.c
===================================================================
--- src/decompress.c.orig
+++ src/decompress.c
@@ -38,12 +38,17 @@
# include "zlib.h"
#endif /* HAVE_LIBZ */
+#include "appendstr.h"
#include "attribute.h"
#include "minmax.h"
#include "xalloc.h"
#include "xstrndup.h"
#include "xvasprintf.h"
+#ifdef HAVE_ZIO
+# include "zio.h"
+#endif /* HAVE_ZIO */
+
#include "manconfig.h"
#include "comp_src.h"
#include "pipeline.h"
@@ -186,6 +191,33 @@ static decompress *decompress_try_zlib (
#define OPEN_FLAGS_UNUSED MAYBE_UNUSED
#endif /* HAVE_LIBZ */
+#ifdef HAVE_ZIO
+
+static void decompress_zio (void *data)
+{
+ const char *what = (const char*)data;
+ FILE *file;
+
+ file = fdzopen(dup (fileno (stdin)), "r", what);
+ if (!file)
+ return;
+
+ for (;;) {
+ char buffer[4096];
+ int r = fread(buffer, sizeof(char), sizeof(buffer), file);
+ if (r <= 0)
+ break;
+ if (fwrite (buffer, 1, (size_t) r, stdout) < (size_t) r)
+ break;
+ }
+
+ fclose(file);
+ return;
+}
+
+#endif /* HAVE_ZIO */
+
+
extern man_sandbox *sandbox;
decompress *decompress_open (const char *filename, int flags OPEN_FLAGS_UNUSED)
@@ -202,6 +234,38 @@ decompress *decompress_open (const char
if (stat (filename, &st) < 0 || S_ISDIR (st.st_mode))
return NULL;
+#ifdef HAVE_ZIO
+ ext = strrchr (filename, '.');
+ if (ext) {
+ const char *opt;
+ char *name = NULL;
+
+ if (STREQ (ext, ".gz"))
+ opt = "g";
+ else if (STREQ (ext, ".z"))
+ opt = "z";
+ else if (STREQ (ext, ".bz2"))
+ opt = "b";
+ else if (STREQ (ext, ".xz"))
+ opt = "x";
+ else if (STREQ (ext, ".lzma"))
+ opt = "l";
+ else if (STREQ (ext, ".Z"))
+ opt = "Z";
+ else
+ goto nozio;
+
+ /* informational only; no shell quoting concerns */
+ name = appendstr (NULL, "libzio < ", filename, (void *) 0);
+ cmd = pipecmd_new_function (name, &decompress_zio, NULL,
+ (void *)opt);
+ pipecmd_pre_exec (cmd, sandbox_load, sandbox_free, sandbox);
+ p = pipeline_new_commands (cmd, (void *) 0);
+ free (name);
+ goto got_pipeline;
+ }
+#endif /* HAVE_ZIO */
+
#ifdef HAVE_LIBZ
filename_len = strlen (filename);
if (filename_len > 3 && STREQ (filename + filename_len - 3, ".gz")) {
@@ -219,7 +283,11 @@ decompress *decompress_open (const char
}
#endif /* HAVE_LIBZ */
+#ifdef HAVE_ZIO
+nozio:
+#else
ext = strrchr (filename, '.');
+#endif /* HAVE_LIBZ */
if (ext) {
++ext;
@@ -312,7 +380,7 @@ void decompress_inprocess_replace (decom
void decompress_start (decompress *d)
{
- if (d->tag == DECOMPRESS_PIPELINE)
+ if (d && d->tag == DECOMPRESS_PIPELINE)
pipeline_start (d->u.p);
}