MANDIR ?= $(SHAREDIR)/man
BASH_COMPLETION_DIR ?= $(CONFIG_DIR)/bash_completion.d
-# These are the Red Hat settings.
+# arguments: variable, common path part, path to test, if yes, if no
+define setvar_dir
+ ifndef $(1)
+ ifneq (,$(wildcard $(2)$(3)))
+ $(1) ?= $(2)$(4)
+ else
+ $(1) ?= $(2)$(5)
+ endif
+ endif
+endef
+
# See distro_mapping.txt for other options
-CONFIG_LEAF_DIR ?= sysconfig
-SUBSYS_DIR ?= /var/run/subsys
-INITD_DIR ?= /etc/rc.d/init.d
+$(eval $(call setvar_dir,CONFIG_LEAF_DIR,,/etc/sysconfig,sysconfig,default))
+$(eval $(call setvar_dir,SUBSYS_DIR,/var/run,/subsys,/subsys,))
+$(eval $(call setvar_dir,INITD_DIR,/etc,/rc.d/init.d,/rc.d/init.d,/init.d))
ifneq ($(EXTRA_PREFIX),)
EXTRA_INCLUDES += $(EXTRA_PREFIX)/include
other distros one needs to set the variables for the elements below
-----------------+------------------+---------------+----------------+
- | RedHat (default) | Debian | Suse |
+ | Red Hat | Debian | Suse |
-----------------+------------------+---------------+----------------+
CONFIG_LEAF_DIR | sysconfig | default | sysconfig |
SUBSYS_DIR | /var/run/subsys | /var/run | /var/run |
INITD_DIR | /etc/rc.d/init.d | /etc/init.d | /etc/init.d |
-----------------+------------------+---------------+----------------+
-The build currently defaults to the elements used by Red Hat.
-For others, these env variables must be set in the shell env
-or modified in Config.mk before running make.
+The existence of these directories are tested at build-time (on the
+build host, via the "setvar_dir" macro in Config.mk) and for some
+scripts at run-time. If the Red Hat directory exists, it is used;
+otherwise the Debian one is used.
-This mechanism sets the location that files are installed to, but does
-not change the code itself. Scripts that refer to files affected by these
-directories must check each possible location at run time.
+You can override this by setting the variables in the environment or
+your ".config" (which is included by .config).
To add support for new distributions that don't use the above locations,
one must grep for the above elements and add appropriate checks.
-For example if a new distro uses /etc/bork as it's config dir, It's not
-sufficient to set CONFIG_LEAF_DIR=bork, one must also add tests for the
+For example if a new distro uses /etc/bork as its config dir, it's not
+sufficient to set CONFIG_LEAF_DIR=bork; one must also add tests for the
existance of the bork dir in every context where config files are read.