tools, build system: Detect distro-variant directories at build-time
authorIan Jackson <Ian.Jackson@eu.citrix.com>
Tue, 21 Sep 2010 11:17:04 +0000 (12:17 +0100)
committerIan Jackson <Ian.Jackson@eu.citrix.com>
Tue, 21 Sep 2010 11:17:04 +0000 (12:17 +0100)
In b59f87f56b1e, the defaults for some of the directory config
variables implicitly changed.  In this commit we arrange for the
defaults to be auto-detected (with the same logic as the run-time
scripts use).

This will make the build more likely to produce answers which the
builder intends.  (And, in particular, it should un-break the
automated tests, which didn't set these variables explicitly and
therefore got broken by b59f87f56b1e.)

Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Config.mk
docs/misc/distro_mapping.txt

index 4ae5cbd62507f9ddf71f9b9bf0364547106058ba..f80732a618102a2cb0f702db3a198de8a6579360 100644 (file)
--- a/Config.mk
+++ b/Config.mk
@@ -31,11 +31,21 @@ DOCDIR      ?= $(SHAREDIR)/doc/xen
 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
index d91495b92544680f7dbf37183fa8ab49338cb6de..7f41b96474400624bd14b320727852b24886c83a 100644 (file)
@@ -2,26 +2,26 @@ With directory layout differences between Red Hat, Debian, Suse and
 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.