From: Ian Jackson Date: Tue, 21 Sep 2010 11:17:04 +0000 (+0100) Subject: tools, build system: Detect distro-variant directories at build-time X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~11455 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=39ae85c6eef75a8f5edeeb3cb2a86da5a93a32bc;p=xen.git tools, build system: Detect distro-variant directories at build-time 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 --- diff --git a/Config.mk b/Config.mk index 4ae5cbd625..f80732a618 100644 --- 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 diff --git a/docs/misc/distro_mapping.txt b/docs/misc/distro_mapping.txt index d91495b925..7f41b96474 100644 --- a/docs/misc/distro_mapping.txt +++ b/docs/misc/distro_mapping.txt @@ -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.