summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Schiffer <pschiffe@redhat.com>2014-01-23 13:21:41 +0000
committerColin Watson <cjwatson@debian.org>2014-01-23 13:21:41 +0000
commitf26aa9dc1836ef4fbc6bb0487b30e2be3bb4827f (patch)
tree52f044513e9d835d5228f5640de8fcb6e1627bbe
parentba94d52d226f9adf9c0f4e0345caf1f14e186c3b (diff)
Add support for override directory in search path
* configure.ac: Add --with-override-dir option. * include/manconfig.h.in (OVERRIDE_DIR): New definition. * src/manp.c (insert_override_dir): New function. (get_manpath_from_path): Call it before add_dir_to_list. * src/tests/man-9: New file. * src/tests/Makefile.am (TESTS_ENVIRONMENT): Set and export OVERRIDE_DIR. (ALL_TESTS): Add man-9. * NEWS: Document this.
-rw-r--r--Makefile.in1
-rw-r--r--NEWS6
-rwxr-xr-xconfigure19
-rw-r--r--configure.ac10
-rw-r--r--docs/Makefile.in1
-rw-r--r--gnulib/lib/Makefile.in1
-rw-r--r--include/manconfig.h.in4
-rw-r--r--lib/Makefile.in1
-rw-r--r--libdb/Makefile.in1
-rw-r--r--man/Makefile.in1
-rw-r--r--man/da/Makefile.in1
-rw-r--r--man/de/Makefile.in1
-rw-r--r--man/es/Makefile.in1
-rw-r--r--man/fr/Makefile.in1
-rw-r--r--man/id/Makefile.in1
-rw-r--r--man/it/Makefile.in1
-rw-r--r--man/ja/Makefile.in1
-rw-r--r--man/nl/Makefile.in1
-rw-r--r--man/pl/Makefile.in1
-rw-r--r--man/po4a/Makefile.in1
-rw-r--r--man/ru/Makefile.in1
-rw-r--r--man/zh_CN/Makefile.in1
-rw-r--r--manual/Makefile.in1
-rw-r--r--src/Makefile.in1
-rw-r--r--src/manp.c26
-rw-r--r--src/tests/Makefile.am5
-rw-r--r--src/tests/Makefile.in13
-rwxr-xr-xsrc/tests/man-944
-rw-r--r--tools/Makefile.in1
29 files changed, 142 insertions, 6 deletions
diff --git a/Makefile.in b/Makefile.in
index 56262b5e..c87637c3 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1282,6 +1282,7 @@ mkdir_p = @mkdir_p@
neqn = @neqn@
nroff = @nroff@
oldincludedir = @oldincludedir@
+override_dir = @override_dir@
pager = @pager@
pdfdir = @pdfdir@
pic = @pic@
diff --git a/NEWS b/NEWS
index 390121c0..85a47c9d 100644
--- a/NEWS
+++ b/NEWS
@@ -23,6 +23,12 @@ Major changes since man-db 2.6.5:
o Pass macro and hyphenation language tags to groff again (broken in
2.6.5).
+ Improvements:
+ -------------
+
+ o ./configure --with-override-dir=OVERRIDE arranges to look for
+ manual pages in DIR/OVERRIDE before each path element DIR.
+
man-db 2.6.5 (27 June 2013)
===========================
diff --git a/configure b/configure
index 76d9d413..82be6eb7 100755
--- a/configure
+++ b/configure
@@ -1486,6 +1486,7 @@ browser
cat
WARN_CFLAGS
ARFLAGS
+override_dir
sections
config_file_dirname
config_file_basename
@@ -1631,6 +1632,7 @@ with_sections
enable_automatic_create
enable_automatic_update
enable_cats
+with_override_dir
enable_largefile
enable_threads
with_browser
@@ -2338,6 +2340,10 @@ Optional Packages:
--with-sections=SECTIONS
use manual page sections SECTIONS [1 n l 8 3 0 2 5 4
9 6 7]
+ --with-override-dir=OVERRIDE
+ use OVERRIDE as relative override dir inside the man
+ path - the first directory to be searched when
+ looking for man pages
--with-browser=BROWSER use BROWSER as default web browser
--with-pager=PAGER use PAGER as default pager
--with-nroff=NROFF use NROFF as roff formatter for character devices
@@ -13366,6 +13372,19 @@ $as_echo "#define MAN_CATS 1" >>confdefs.h
fi
+# Check whether --with-override-dir was given.
+if test "${with_override_dir+set}" = set; then :
+ withval=$with_override_dir; if test "$withval" = "yes" || test "$withval" = "no"
+ then
+ as_fn_error $? "--with-override-dir requires an argument" "$LINENO" 5
+ else
+ override_dir=$withval
+ fi
+else
+ : ${override_dir=""}
+fi
+
+
# Finish the argument parsing.
# Check $PATH for the following programs and append suitable options.
diff --git a/configure.ac b/configure.ac
index 33a397a9..5e14f26a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -118,6 +118,15 @@ AC_ARG_ENABLE([cats],
AC_DEFINE([MAN_CATS], [1], [Allow man to create/update cat files.])
fi],
[AC_DEFINE([MAN_CATS], [1], [Allow man to create/update cat files.])])
+AC_ARG_WITH([override-dir],
+[AS_HELP_STRING([--with-override-dir=OVERRIDE], [use OVERRIDE as relative override dir inside the man path - the first directory to be searched when looking for man pages])],
+ [if test "$withval" = "yes" || test "$withval" = "no"
+ then
+ AC_MSG_ERROR([--with-override-dir requires an argument])
+ else
+ override_dir=$withval
+ fi],
+ [: ${override_dir=""}])
# Finish the argument parsing.
AC_SUBST([man_owner])dnl
@@ -126,6 +135,7 @@ AC_SUBST([config_file])dnl
AC_SUBST([config_file_basename])dnl
AC_SUBST([config_file_dirname])dnl
AC_SUBST([sections])dnl
+AC_SUBST([override_dir])dnl
# Check $PATH for the following programs and append suitable options.
AC_PROG_CC
diff --git a/docs/Makefile.in b/docs/Makefile.in
index 01fc1e56..295d3a02 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -1196,6 +1196,7 @@ mkdir_p = @mkdir_p@
neqn = @neqn@
nroff = @nroff@
oldincludedir = @oldincludedir@
+override_dir = @override_dir@
pager = @pager@
pdfdir = @pdfdir@
pic = @pic@
diff --git a/gnulib/lib/Makefile.in b/gnulib/lib/Makefile.in
index 65897eca..1e40dc90 100644
--- a/gnulib/lib/Makefile.in
+++ b/gnulib/lib/Makefile.in
@@ -1327,6 +1327,7 @@ mkdir_p = @mkdir_p@
neqn = @neqn@
nroff = @nroff@
oldincludedir = @oldincludedir@
+override_dir = @override_dir@
pager = @pager@
pdfdir = @pdfdir@
pic = @pic@
diff --git a/include/manconfig.h.in b/include/manconfig.h.in
index f4853123..99814437 100644
--- a/include/manconfig.h.in
+++ b/include/manconfig.h.in
@@ -166,6 +166,10 @@
# define PIC "@pic@"
#endif
+#ifndef OVERRIDE_DIR
+# define OVERRIDE_DIR "@override_dir@"
+#endif
+
/*------------------------------------------------------------------*/
/* The following definitions are best left alone by the uninitiated */
/*------------------------------------------------------------------*/
diff --git a/lib/Makefile.in b/lib/Makefile.in
index a1809346..43c42547 100644
--- a/lib/Makefile.in
+++ b/lib/Makefile.in
@@ -1284,6 +1284,7 @@ mkdir_p = @mkdir_p@
neqn = @neqn@
nroff = @nroff@
oldincludedir = @oldincludedir@
+override_dir = @override_dir@
pager = @pager@
pdfdir = @pdfdir@
pic = @pic@
diff --git a/libdb/Makefile.in b/libdb/Makefile.in
index 3167220d..34a39866 100644
--- a/libdb/Makefile.in
+++ b/libdb/Makefile.in
@@ -1280,6 +1280,7 @@ mkdir_p = @mkdir_p@
neqn = @neqn@
nroff = @nroff@
oldincludedir = @oldincludedir@
+override_dir = @override_dir@
pager = @pager@
pdfdir = @pdfdir@
pic = @pic@
diff --git a/man/Makefile.in b/man/Makefile.in
index 571dab57..57fdeacd 100644
--- a/man/Makefile.in
+++ b/man/Makefile.in
@@ -1464,6 +1464,7 @@ mkdir_p = @mkdir_p@
neqn = @neqn@
nroff = @nroff@
oldincludedir = @oldincludedir@
+override_dir = @override_dir@
pager = @pager@
pdfdir = @pdfdir@
pic = @pic@
diff --git a/man/da/Makefile.in b/man/da/Makefile.in
index 794ce501..8e2b2f0c 100644
--- a/man/da/Makefile.in
+++ b/man/da/Makefile.in
@@ -1405,6 +1405,7 @@ mkdir_p = @mkdir_p@
neqn = @neqn@
nroff = @nroff@
oldincludedir = @oldincludedir@
+override_dir = @override_dir@
pager = @pager@
pdfdir = @pdfdir@
pic = @pic@
diff --git a/man/de/Makefile.in b/man/de/Makefile.in
index 27c14fd1..551882fe 100644
--- a/man/de/Makefile.in
+++ b/man/de/Makefile.in
@@ -1405,6 +1405,7 @@ mkdir_p = @mkdir_p@
neqn = @neqn@
nroff = @nroff@
oldincludedir = @oldincludedir@
+override_dir = @override_dir@
pager = @pager@
pdfdir = @pdfdir@
pic = @pic@
diff --git a/man/es/Makefile.in b/man/es/Makefile.in
index c874ea22..27223d4c 100644
--- a/man/es/Makefile.in
+++ b/man/es/Makefile.in
@@ -1405,6 +1405,7 @@ mkdir_p = @mkdir_p@
neqn = @neqn@
nroff = @nroff@
oldincludedir = @oldincludedir@
+override_dir = @override_dir@
pager = @pager@
pdfdir = @pdfdir@
pic = @pic@
diff --git a/man/fr/Makefile.in b/man/fr/Makefile.in
index 7b9ce2b2..efd115b6 100644
--- a/man/fr/Makefile.in
+++ b/man/fr/Makefile.in
@@ -1405,6 +1405,7 @@ mkdir_p = @mkdir_p@
neqn = @neqn@
nroff = @nroff@
oldincludedir = @oldincludedir@
+override_dir = @override_dir@
pager = @pager@
pdfdir = @pdfdir@
pic = @pic@
diff --git a/man/id/Makefile.in b/man/id/Makefile.in
index 2c55b7c1..cdf898cc 100644
--- a/man/id/Makefile.in
+++ b/man/id/Makefile.in
@@ -1405,6 +1405,7 @@ mkdir_p = @mkdir_p@
neqn = @neqn@
nroff = @nroff@
oldincludedir = @oldincludedir@
+override_dir = @override_dir@
pager = @pager@
pdfdir = @pdfdir@
pic = @pic@
diff --git a/man/it/Makefile.in b/man/it/Makefile.in
index 7dc785e1..329c6880 100644
--- a/man/it/Makefile.in
+++ b/man/it/Makefile.in
@@ -1405,6 +1405,7 @@ mkdir_p = @mkdir_p@
neqn = @neqn@
nroff = @nroff@
oldincludedir = @oldincludedir@
+override_dir = @override_dir@
pager = @pager@
pdfdir = @pdfdir@
pic = @pic@
diff --git a/man/ja/Makefile.in b/man/ja/Makefile.in
index 708d5943..3681ea41 100644
--- a/man/ja/Makefile.in
+++ b/man/ja/Makefile.in
@@ -1405,6 +1405,7 @@ mkdir_p = @mkdir_p@
neqn = @neqn@
nroff = @nroff@
oldincludedir = @oldincludedir@
+override_dir = @override_dir@
pager = @pager@
pdfdir = @pdfdir@
pic = @pic@
diff --git a/man/nl/Makefile.in b/man/nl/Makefile.in
index 3b232d8e..f487ac50 100644
--- a/man/nl/Makefile.in
+++ b/man/nl/Makefile.in
@@ -1405,6 +1405,7 @@ mkdir_p = @mkdir_p@
neqn = @neqn@
nroff = @nroff@
oldincludedir = @oldincludedir@
+override_dir = @override_dir@
pager = @pager@
pdfdir = @pdfdir@
pic = @pic@
diff --git a/man/pl/Makefile.in b/man/pl/Makefile.in
index a417d834..7d73963b 100644
--- a/man/pl/Makefile.in
+++ b/man/pl/Makefile.in
@@ -1405,6 +1405,7 @@ mkdir_p = @mkdir_p@
neqn = @neqn@
nroff = @nroff@
oldincludedir = @oldincludedir@
+override_dir = @override_dir@
pager = @pager@
pdfdir = @pdfdir@
pic = @pic@
diff --git a/man/po4a/Makefile.in b/man/po4a/Makefile.in
index bc253c52..64d3d4c6 100644
--- a/man/po4a/Makefile.in
+++ b/man/po4a/Makefile.in
@@ -1193,6 +1193,7 @@ mkdir_p = @mkdir_p@
neqn = @neqn@
nroff = @nroff@
oldincludedir = @oldincludedir@
+override_dir = @override_dir@
pager = @pager@
pdfdir = @pdfdir@
pic = @pic@
diff --git a/man/ru/Makefile.in b/man/ru/Makefile.in
index 5b5a0fe5..c1ab225a 100644
--- a/man/ru/Makefile.in
+++ b/man/ru/Makefile.in
@@ -1405,6 +1405,7 @@ mkdir_p = @mkdir_p@
neqn = @neqn@
nroff = @nroff@
oldincludedir = @oldincludedir@
+override_dir = @override_dir@
pager = @pager@
pdfdir = @pdfdir@
pic = @pic@
diff --git a/man/zh_CN/Makefile.in b/man/zh_CN/Makefile.in
index 51df198f..d3d2ca17 100644
--- a/man/zh_CN/Makefile.in
+++ b/man/zh_CN/Makefile.in
@@ -1405,6 +1405,7 @@ mkdir_p = @mkdir_p@
neqn = @neqn@
nroff = @nroff@
oldincludedir = @oldincludedir@
+override_dir = @override_dir@
pager = @pager@
pdfdir = @pdfdir@
pic = @pic@
diff --git a/manual/Makefile.in b/manual/Makefile.in
index f97f7037..8abb3d6b 100644
--- a/manual/Makefile.in
+++ b/manual/Makefile.in
@@ -1196,6 +1196,7 @@ mkdir_p = @mkdir_p@
neqn = @neqn@
nroff = @nroff@
oldincludedir = @oldincludedir@
+override_dir = @override_dir@
pager = @pager@
pdfdir = @pdfdir@
pic = @pic@
diff --git a/src/Makefile.in b/src/Makefile.in
index 616f633e..eeeec389 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -1360,6 +1360,7 @@ mkdir_p = @mkdir_p@
neqn = @neqn@
nroff = @nroff@
oldincludedir = @oldincludedir@
+override_dir = @override_dir@
pager = @pager@
pdfdir = @pdfdir@
pic = @pic@
diff --git a/src/manp.c b/src/manp.c
index e73e8386..3223b397 100644
--- a/src/manp.c
+++ b/src/manp.c
@@ -931,6 +931,24 @@ static char *def_path (int flag)
}
/*
+ * If specified with configure, append OVERRIDE_DIR to dir param and add it
+ * to the lp list.
+ */
+static void insert_override_dir (char **lp, const char *dir)
+{
+ char *override_dir = NULL;
+
+ if (!strlen (OVERRIDE_DIR)) {
+ return;
+ }
+
+ if ((override_dir = xasprintf ("%s/%s", dir, OVERRIDE_DIR))) {
+ add_dir_to_list (lp, override_dir);
+ free (override_dir);
+ }
+}
+
+/*
* For each directory in the user's path, see if it is one of the
* directories listed in the man_db.config file. If so, and it is
* not already in the manpath, add it. If the directory is not listed
@@ -977,6 +995,7 @@ char *get_manpath_from_path (const char *path, int mandatory)
if (mandir_list) {
debug ("is in the config file\n");
while (mandir_list) {
+ insert_override_dir(tmplist, mandir_list->cont);
add_dir_to_list (tmplist, mandir_list->cont);
mandir_list = iterate_over_list
(mandir_list, p, MANPATH_MAP);
@@ -994,7 +1013,8 @@ char *get_manpath_from_path (const char *path, int mandatory)
debug ("but does have a ../man, man, "
"../share/man, or share/man "
"subdirectory\n");
-
+
+ insert_override_dir(tmplist, t);
add_dir_to_list (tmplist, t);
free (t);
} else
@@ -1010,8 +1030,10 @@ char *get_manpath_from_path (const char *path, int mandatory)
debug ("\nadding mandatory man directories\n\n");
for (list = namestore; list; list = list->next)
- if (list->flag == MANDATORY)
+ if (list->flag == MANDATORY) {
+ insert_override_dir(tmplist, list->key);
add_dir_to_list (tmplist, list->key);
+ }
}
len = 0;
diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am
index fa1c2e94..df4afc3d 100644
--- a/src/tests/Makefile.am
+++ b/src/tests/Makefile.am
@@ -22,12 +22,13 @@ TESTS_ENVIRONMENT = PATH=..:$$PATH; export PATH; \
DBTYPE=$(DBTYPE); export DBTYPE; \
MANDIR_LAYOUT=$(MANDIR_LAYOUT); export MANDIR_LAYOUT; \
top_builddir=$(top_builddir); export top_builddir; \
- @LOCALCHARSET_TESTS_ENVIRONMENT@; export CHARSETALIASDIR;
+ @LOCALCHARSET_TESTS_ENVIRONMENT@; export CHARSETALIASDIR; \
+ OVERRIDE_DIR="@override_dir@"; export OVERRIDE_DIR;
# Each test must use the configure-detected shell, not necessarily /bin/sh.
AM_LOG_FLAGS = $(SHELL)
ALL_TESTS = \
lexgrog-1 \
- man-1 man-2 man-3 man-4 man-5 man-6 man-7 man-8 \
+ man-1 man-2 man-3 man-4 man-5 man-6 man-7 man-8 man-9 \
manconv-1 manconv-2 manconv-3 \
mandb-1 mandb-2 mandb-3 mandb-4 mandb-5 mandb-6 \
whatis-1 \
diff --git a/src/tests/Makefile.in b/src/tests/Makefile.in
index 4c2a3ba4..ecaeebe6 100644
--- a/src/tests/Makefile.in
+++ b/src/tests/Makefile.in
@@ -1398,6 +1398,7 @@ mkdir_p = @mkdir_p@
neqn = @neqn@
nroff = @nroff@
oldincludedir = @oldincludedir@
+override_dir = @override_dir@
pager = @pager@
pdfdir = @pdfdir@
pic = @pic@
@@ -1429,13 +1430,14 @@ TESTS_ENVIRONMENT = PATH=..:$$PATH; export PATH; \
DBTYPE=$(DBTYPE); export DBTYPE; \
MANDIR_LAYOUT=$(MANDIR_LAYOUT); export MANDIR_LAYOUT; \
top_builddir=$(top_builddir); export top_builddir; \
- @LOCALCHARSET_TESTS_ENVIRONMENT@; export CHARSETALIASDIR;
+ @LOCALCHARSET_TESTS_ENVIRONMENT@; export CHARSETALIASDIR; \
+ OVERRIDE_DIR="@override_dir@"; export OVERRIDE_DIR;
# Each test must use the configure-detected shell, not necessarily /bin/sh.
AM_LOG_FLAGS = $(SHELL)
ALL_TESTS = \
lexgrog-1 \
- man-1 man-2 man-3 man-4 man-5 man-6 man-7 man-8 \
+ man-1 man-2 man-3 man-4 man-5 man-6 man-7 man-8 man-9 \
manconv-1 manconv-2 manconv-3 \
mandb-1 mandb-2 mandb-3 mandb-4 mandb-5 mandb-6 \
whatis-1 \
@@ -1694,6 +1696,13 @@ man-8.log: man-8
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+man-9.log: man-9
+ @p='man-9'; \
+ b='man-9'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
manconv-1.log: manconv-1
@p='manconv-1'; \
b='manconv-1'; \
diff --git a/src/tests/man-9 b/src/tests/man-9
new file mode 100755
index 00000000..9d3eda11
--- /dev/null
+++ b/src/tests/man-9
@@ -0,0 +1,44 @@
+#! /bin/sh
+
+# Testing override dir. This test covers both use cases - when override dir is
+# enabled and when it's not.
+#
+
+: ${srcdir=.}
+. "$srcdir/testlib.sh"
+
+: ${MAN=man}
+
+if [ -n "$OVERRIDE_DIR" ]; then
+ OVERRIDE=$OVERRIDE_DIR
+else
+ OVERRIDE="override"
+fi
+
+init
+fake_config /usr/share/man
+mkdir -p "${tmpdir}/usr/share/man/${OVERRIDE}/man1"
+
+
+write_page abc 1 "${tmpdir}/usr/share/man/man1/abc.1" \
+ UTF-8 '' '' 'abc \- top-level test page'
+write_page abc 1 "${tmpdir}/usr/share/man/${OVERRIDE}/man1/abc.1" \
+ UTF-8 '' '' 'abc \- modified test page'
+
+if [ -n "$OVERRIDE_DIR" ]; then
+cat >"$tmpdir/1.exp" <<EOF
+$(pwd -P)/${tmpdir}/usr/share/man/${OVERRIDE}/man1/abc.1
+$(pwd -P)/${tmpdir}/usr/share/man/man1/abc.1
+EOF
+else
+cat >"$tmpdir/1.exp" <<EOF
+$(pwd -P)/${tmpdir}/usr/share/man/man1/abc.1
+EOF
+fi
+
+
+run $MAN -C "$tmpdir/manpath.config" -aw abc >"$tmpdir/1.out"
+expect_pass 'testing override dir' \
+ 'diff -u "$tmpdir/1.exp" "$tmpdir/1.out"'
+
+finish
diff --git a/tools/Makefile.in b/tools/Makefile.in
index 129d21fd..aab52c54 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -1200,6 +1200,7 @@ mkdir_p = @mkdir_p@
neqn = @neqn@
nroff = @nroff@
oldincludedir = @oldincludedir@
+override_dir = @override_dir@
pager = @pager@
pdfdir = @pdfdir@
pic = @pic@