From dfff485819775fd6ddbf922351ea381bb4b657d2 Mon Sep 17 00:00:00 2001 From: rnhmjoj Date: Fri, 1 May 2020 18:34:18 +0200 Subject: man-db: remove NixOS-specific configuration When using --with-config-file, all man-db programs completely ignore the systemwide configuration in /etc/man_db.conf: it means on NixOS there is no way to change the configuration without rebuilding man-db, which in turn causes a mass-rebuild. To solve this problem this commit removes the NixOS-specific configuration in man-db, which wasn't the appropriate place to begin with: the package is expected to work on non-NixOS systems as well. Also a small patch now ensure /etc/man_db.conf is used, if available, before the bundled configuration. --- pkgs/tools/misc/man-db/default.nix | 8 ++--- .../tools/misc/man-db/systemwide-man-db-conf.patch | 39 ++++++++++++++++++++++ 2 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 pkgs/tools/misc/man-db/systemwide-man-db-conf.patch (limited to 'pkgs/tools/misc/man-db') diff --git a/pkgs/tools/misc/man-db/default.nix b/pkgs/tools/misc/man-db/default.nix index 7b8835622c8..f5cbef8b022 100644 --- a/pkgs/tools/misc/man-db/default.nix +++ b/pkgs/tools/misc/man-db/default.nix @@ -15,18 +15,17 @@ stdenv.mkDerivation rec { buildInputs = [ libpipeline db groff ]; # (Yes, 'groff' is both native and build input) checkInputs = [ libiconv /* for 'iconv' binary */ ]; + patches = [ ./systemwide-man-db-conf.patch ]; + postPatch = '' # Remove all mandatory manpaths. Nixpkgs makes no requirements on # these directories existing. sed -i 's/^MANDATORY_MANPATH/# &/' src/man_db.conf.in - # Add Nixpkgs and NixOS-related manpaths - echo "MANPATH_MAP /run/current-system/sw/bin /run/current-system/sw/share/man" >> src/man_db.conf.in - echo "MANPATH_MAP /run/wrappers/bin /run/current-system/sw/share/man" >> src/man_db.conf.in + # Add Nix-related manpaths echo "MANPATH_MAP /nix/var/nix/profiles/default/bin /nix/var/nix/profiles/default/share/man" >> src/man_db.conf.in # Add mandb locations for the above - echo "MANDB_MAP /run/current-system/sw/share/man /var/cache/man/nixos" >> src/man_db.conf.in echo "MANDB_MAP /nix/var/nix/profiles/default/share/man /var/cache/man/nixpkgs" >> src/man_db.conf.in ''; @@ -34,7 +33,6 @@ stdenv.mkDerivation rec { "--disable-setuid" "--disable-cache-owner" "--localstatedir=/var" - # Don't try /etc/man_db.conf by default, so we avoid error messages. "--with-config-file=${placeholder "out"}/etc/man_db.conf" "--with-systemdtmpfilesdir=${placeholder "out"}/lib/tmpfiles.d" "--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system" diff --git a/pkgs/tools/misc/man-db/systemwide-man-db-conf.patch b/pkgs/tools/misc/man-db/systemwide-man-db-conf.patch new file mode 100644 index 00000000000..2d4477776bb --- /dev/null +++ b/pkgs/tools/misc/man-db/systemwide-man-db-conf.patch @@ -0,0 +1,39 @@ +commit 9089291006a4258c39c75a920ad536b61504251a +Author: rnhmjoj +Date: Fri May 1 19:32:15 2020 +0200 + + check for systemwide man_db.conf before the bundled one + +diff --git a/src/manp.c b/src/manp.c +index 5441339..0bbf566 100644 +--- a/src/manp.c ++++ b/src/manp.c +@@ -841,18 +841,24 @@ void read_config_file (bool optional) + } + + if (getenv ("MAN_TEST_DISABLE_SYSTEM_CONFIG") == NULL) { +- config_file = fopen (CONFIG_FILE, "r"); ++ const char *config_filepath; ++ if (access ("/etc/man_db.conf", F_OK) != -1) { ++ config_filepath = "/etc/man_db.conf"; ++ } else { ++ config_filepath = CONFIG_FILE; ++ } ++ config_file = fopen (config_filepath, "r"); + if (config_file == NULL) { + if (optional) + debug ("can't open %s; continuing anyway\n", +- CONFIG_FILE); ++ config_filepath); + else + error (FAIL, 0, + _("can't open the manpath " + "configuration file %s"), +- CONFIG_FILE); ++ config_filepath); + } else { +- debug ("From the config file %s:\n", CONFIG_FILE); ++ debug ("From the config file %s:\n", config_filepath); + + add_to_dirlist (config_file, 0); + fclose (config_file); -- cgit 1.4.1