]> git.cameronkatri.com Git - mandoc.git/commitdiff
Rename the compile-time configuration variable $HOMEBREWDIR to
authorIngo Schwarze <schwarze@openbsd.org>
Sat, 7 Aug 2021 13:02:10 +0000 (13:02 +0000)
committerIngo Schwarze <schwarze@openbsd.org>
Sat, 7 Aug 2021 13:02:10 +0000 (13:02 +0000)
$READ_ALLOWED_PATH, allow it to contain more than one directory,
and explain how to use it for NixOS and for GNU Guix Linux.

Feature improvement based on observations, input, and earlier patches
from Lukas Epple <sternenseemann at systemli dot org>, and final
patch also tested by Lukas.

configure
configure.local.example
mandocdb.c

index 377d49c5bdd23b8c759839c678697204f07eb9ba..94561c3ab2e260b239567cd79dd9222d90c31345 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
 #!/bin/sh
 #
-# $Id: configure,v 1.77 2020/07/20 16:57:30 schwarze Exp $
+# $Id: configure,v 1.78 2021/08/07 13:02:10 schwarze Exp $
 #
 # Copyright (c) 2014-2020 Ingo Schwarze <schwarze@openbsd.org>
 #
 #
 # Copyright (c) 2014-2020 Ingo Schwarze <schwarze@openbsd.org>
 #
@@ -107,7 +107,7 @@ BIN_FROM_SBIN=
 INCLUDEDIR=
 LIBDIR=
 MANDIR=
 INCLUDEDIR=
 LIBDIR=
 MANDIR=
-HOMEBREWDIR=
+READ_ALLOWED_PATH=
 
 WWWPREFIX="/var/www"
 HTDOCDIR=
 
 WWWPREFIX="/var/www"
 HTDOCDIR=
@@ -461,7 +461,8 @@ echo "#define MANPATH_DEFAULT \"${MANPATH_DEFAULT}\""
 echo "#define OSENUM ${OSENUM}"
 [ -n "${OSNAME}" ] && echo "#define OSNAME \"${OSNAME}\""
 [ -n "${UTF8_LOCALE}" ] && echo "#define UTF8_LOCALE \"${UTF8_LOCALE}\""
 echo "#define OSENUM ${OSENUM}"
 [ -n "${OSNAME}" ] && echo "#define OSNAME \"${OSNAME}\""
 [ -n "${UTF8_LOCALE}" ] && echo "#define UTF8_LOCALE \"${UTF8_LOCALE}\""
-[ -n "${HOMEBREWDIR}" ] && echo "#define HOMEBREWDIR \"${HOMEBREWDIR}\""
+[ -n "${READ_ALLOWED_PATH}" ] \
+       && echo "#define READ_ALLOWED_PATH \"${READ_ALLOWED_PATH}\""
 [ ${HAVE_ATTRIBUTE} -eq 0 ] && echo "#define __attribute__(x)"
 [ ${HAVE_EFTYPE} -eq 0 ] && echo "#define EFTYPE EINVAL"
 [ ${HAVE_O_DIRECTORY} -eq 0 ] && echo "#define O_DIRECTORY 0"
 [ ${HAVE_ATTRIBUTE} -eq 0 ] && echo "#define __attribute__(x)"
 [ ${HAVE_EFTYPE} -eq 0 ] && echo "#define EFTYPE EINVAL"
 [ ${HAVE_O_DIRECTORY} -eq 0 ] && echo "#define O_DIRECTORY 0"
index b717e477329e9f1d5d7aa078d1c158826e3e1ac3..7bd5bb5ee26d8126191882f9de2bd0b457500d86 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: configure.local.example,v 1.39 2020/07/20 16:57:30 schwarze Exp $
+# $Id: configure.local.example,v 1.40 2021/08/07 13:02:10 schwarze Exp $
 #
 # Copyright (c) 2014-2019 Ingo Schwarze <schwarze@openbsd.org>
 #
 #
 # Copyright (c) 2014-2019 Ingo Schwarze <schwarze@openbsd.org>
 #
@@ -209,14 +209,28 @@ INSTALL_LIB="${INSTALL} -m 0444"
 INSTALL_MAN="${INSTALL} -m 0444"
 INSTALL_DATA="${INSTALL} -m 0444"
 
 INSTALL_MAN="${INSTALL} -m 0444"
 INSTALL_DATA="${INSTALL} -m 0444"
 
-# When using the "homebrew" package manager on Mac OS X, the actual
-# manuals are located in a so-called "cellar" and only symlinked
-# into the manual trees.  To allow mandoc to follow such symlinks,
-# you have to specify the physical location of the cellar as returned
-# by realpath(3), for example:
+# By default, makewhatis(8) can only read from the paths passed on the
+# command line or configured in man.conf(5).
+# But some package managers on some operating systems store manual pages
+# in separate "cellar" or "store" directories and only symlink them
+# into the manual trees.
+# To support one or more such package managers, give makewhatis(8)
+# read access to the cellars and stores on your system, in the form
+# of a colon-separated path:
 
 
+# Homebrow package manager on Mac OS X:
 PREFIX="/usr/local"
 PREFIX="/usr/local"
-HOMEBREWDIR="${PREFIX}/Cellar"
+READ_ALLOWED_PATH="${PREFIX}/Cellar"
+
+# Nix package manager and/or NixOS Linux distribution:
+READ_ALLOWED_PATH="/nix/store"
+
+# GNU Guix package manager and/or GNU Guix Linux distribution:
+READ_ALLOWED_PATH="/gnu/store"
+
+# If multiple package managers are used concurrently:
+PREFIX="/usr/local"
+READ_ALLOWED_PATH="/nix/store:${PREFIX}/Cellar"
 
 # --- user settings for the mandoc(3) library --------------------------
 
 
 # --- user settings for the mandoc(3) library --------------------------
 
index 6a4e72c955572da6b7a593cba2656ba3b8fe089f..0ef661b2d57c79894c22eaa890a529c8ab680c29 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: mandocdb.c,v 1.267 2020/04/03 11:35:01 schwarze Exp $ */
+/* $Id: mandocdb.c,v 1.268 2021/08/07 13:02:10 schwarze Exp $ */
 /*
  * Copyright (c) 2011-2020 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
 /*
  * Copyright (c) 2011-2020 Ingo Schwarze <schwarze@openbsd.org>
  * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
@@ -165,6 +165,9 @@ static      void     putkey(const struct mpage *, char *, uint64_t);
 static void     putkeys(const struct mpage *, char *, size_t, uint64_t);
 static void     putmdockey(const struct mpage *,
                        const struct roff_node *, uint64_t, int);
 static void     putkeys(const struct mpage *, char *, size_t, uint64_t);
 static void     putmdockey(const struct mpage *,
                        const struct roff_node *, uint64_t, int);
+#ifdef READ_ALLOWED_PATH
+static int      read_allowed(const char *);
+#endif
 static int      render_string(char **, size_t *);
 static void     say(const char *, const char *, ...)
                        __attribute__((__format__ (__printf__, 2, 3)));
 static int      render_string(char **, size_t *);
 static void     say(const char *, const char *, ...)
                        __attribute__((__format__ (__printf__, 2, 3)));
@@ -612,8 +615,8 @@ treescan(void)
                                continue;
                        }
                        if (strncmp(buf, basedir, basedir_len) != 0
                                continue;
                        }
                        if (strncmp(buf, basedir, basedir_len) != 0
-#ifdef HOMEBREWDIR
-                           && strncmp(buf, HOMEBREWDIR, strlen(HOMEBREWDIR))
+#ifdef READ_ALLOWED_PATH
+                           && !read_allowed(buf)
 #endif
                        ) {
                                if (warnings) say("",
 #endif
                        ) {
                                if (warnings) say("",
@@ -823,8 +826,8 @@ filescan(const char *infile)
                start = usefile;
        else if (strncmp(usefile, basedir, basedir_len) == 0)
                start = usefile + basedir_len;
                start = usefile;
        else if (strncmp(usefile, basedir, basedir_len) == 0)
                start = usefile + basedir_len;
-#ifdef HOMEBREWDIR
-       else if (strncmp(usefile, HOMEBREWDIR, strlen(HOMEBREWDIR)) == 0)
+#ifdef READ_ALLOWED_PATH
+       else if (read_allowed(usefile))
                start = usefile;
 #endif
        else {
                start = usefile;
 #endif
        else {
@@ -2381,6 +2384,25 @@ set_basedir(const char *targetdir, int report_baddir)
        return 1;
 }
 
        return 1;
 }
 
+#ifdef READ_ALLOWED_PATH
+static int
+read_allowed(const char *candidate)
+{
+       const char      *cp;
+       size_t           len;
+
+       for (cp = READ_ALLOWED_PATH;; cp += len) {
+               while (*cp == ':')
+                       cp++;
+               if (*cp == '\0')
+                       return 0;
+               len = strcspn(cp, ":");
+               if (strncmp(candidate, cp, len) == 0)
+                       return 1;
+       }
+}
+#endif
+
 static void
 say(const char *file, const char *format, ...)
 {
 static void
 say(const char *file, const char *format, ...)
 {