From c3bf549800cecfa0c5fbd669139f441b7dd5d237 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Thu, 2 Aug 2012 16:01:49 -0700 Subject: [PATCH] dirs: dbdir default must be based on sysconfdir. Some in-tree and out-of-tree code sets the OVS_SYSCONFDIR environment variable to control where /etc files go (mostly for test purposes). When the database directory (dbdir) was split off from the sysconfdir, the configure-time default continued to be based on the sysconfdir, but overriding the sysconfdir at runtime with OVS_SYSCONFDIR didn't have any effect on the dbdir, which caused a visible change in behavior for code that set the OVS_SYSCONFDIR environment variable. This commit reverts that change in behavior, by basing the dbdir on OVS_SYSCONFDIR if that environment variable is set (but the OVS_DBDIR environment variable is not). Signed-off-by: Ben Pfaff --- lib/dirs.c.in | 15 +++++++++++++-- python/automake.mk | 29 +++++++++++++++++++++++------ python/ovs/dirs.py | 20 ++++++++++++-------- python/ovs/dirs.py.template | 17 +++++++++++++++++ utilities/ovs-lib.in | 11 +++++++++-- 5 files changed, 74 insertions(+), 18 deletions(-) create mode 100644 python/ovs/dirs.py.template diff --git a/lib/dirs.c.in b/lib/dirs.c.in index 2b998b9f..658a74b4 100644 --- a/lib/dirs.c.in +++ b/lib/dirs.c.in @@ -18,6 +18,7 @@ #include #include "dirs.h" #include +#include "util.h" struct directory { const char *value; /* Actual value; NULL if not yet determined. */ @@ -68,8 +69,18 @@ ovs_logdir(void) const char * ovs_dbdir(void) { - static struct directory d = { NULL, @DBDIR@, "OVS_DBDIR" }; - return get_dir(&d); + static const char *dbdir; + if (!dbdir) { + dbdir = getenv("OVS_DBDIR"); + if (!dbdir || !dbdir[0]) { + char *sysconfdir = getenv("OVS_SYSCONFDIR"); + + dbdir = (sysconfdir + ? xasprintf("%s/openvswitch", sysconfdir) + : @DBDIR@); + } + } + return dbdir; } const char * diff --git a/python/automake.mk b/python/automake.mk index 3cd6e1e7..c0f0db6b 100644 --- a/python/automake.mk +++ b/python/automake.mk @@ -43,12 +43,15 @@ if HAVE_PYTHON nobase_pkgdata_DATA = $(ovs_pyfiles) $(ovstest_pyfiles) ovs-install-data-local: $(MKDIR_P) python/ovs - (echo "import os" && \ - echo 'PKGDATADIR = os.environ.get("OVS_PKGDATADIR", """$(pkgdatadir)""")' && \ - echo 'RUNDIR = os.environ.get("OVS_RUNDIR", """@RUNDIR@""")' && \ - echo 'LOGDIR = os.environ.get("OVS_LOGDIR", """@LOGDIR@""")' && \ - echo 'DBDIR = os.environ.get("OVS_DBDIR", """@DBDIR@""")' && \ - echo 'BINDIR = os.environ.get("OVS_BINDIR", """$(bindir)""")') \ + sed \ + -e '/^##/d' \ + -e 's,[@]pkgdatadir[@],$(pkgdatadir),g' \ + -e 's,[@]RUNDIR[@],$(RUNDIR),g' \ + -e 's,[@]LOGDIR[@],$(LOGDIR),g' \ + -e 's,[@]bindir[@],$(bindir),g' \ + -e 's,[@]sysconfdir[@],$(sysconfdir),g' \ + -e 's,[@]DBDIR[@],$(DBDIR),g' \ + < $(srcdir)/python/ovs/dirs.py.template \ > python/ovs/dirs.py.tmp $(MKDIR_P) $(DESTDIR)$(pkgdatadir)/python/ovs $(INSTALL_DATA) python/ovs/dirs.py.tmp $(DESTDIR)$(pkgdatadir)/python/ovs/dirs.py @@ -68,3 +71,17 @@ $(srcdir)/python/ovs/version.py: config.status $(ro_shell) > $(@F).tmp echo 'VERSION = "$(VERSION)"' >> $(@F).tmp if cmp -s $(@F).tmp $@; then touch $@; rm $(@F).tmp; else mv $(@F).tmp $@; fi + +ALL_LOCAL += $(srcdir)/python/ovs/dirs.py +$(srcdir)/python/ovs/dirs.py: python/ovs/dirs.py.template + sed \ + -e '/^##/d' \ + -e 's,[@]pkgdatadir[@],/usr/local/share/openvswitch,g' \ + -e 's,[@]RUNDIR[@],/var/run,g' \ + -e 's,[@]LOGDIR[@],/usr/local/var/log,g' \ + -e 's,[@]bindir[@],/usr/local/bin,g' \ + -e 's,[@]sysconfdir[@],/usr/local/etc,g' \ + -e 's,[@]DBDIR[@],/usr/local/etc/openvswitch,g' \ + < $? > $@.tmp + mv $@.tmp $@ +EXTRA_DIST += python/ovs/dirs.py python/ovs/dirs.py.template diff --git a/python/ovs/dirs.py b/python/ovs/dirs.py index e4b37f92..b5e68a0a 100644 --- a/python/ovs/dirs.py +++ b/python/ovs/dirs.py @@ -1,9 +1,13 @@ -# These are the default directories. They will be replaced by the -# configured directories at install time. - import os -PKGDATADIR = os.environ.get("OVS_PKGDATADIR", "/usr/local/share/openvswitch") -RUNDIR = os.environ.get("OVS_RUNDIR", "/var/run") -LOGDIR = os.environ.get("OVS_LOGDIR", "/usr/local/var/log") -DBDIR = os.environ.get("OVS_DBDIR", "/usr/local/etc/openvswitch") -BINDIR = os.environ.get("OVS_BINDIR", "/usr/local/bin") +PKGDATADIR = os.environ.get("OVS_PKGDATADIR", """/usr/local/share/openvswitch""") +RUNDIR = os.environ.get("OVS_RUNDIR", """/var/run""") +LOGDIR = os.environ.get("OVS_LOGDIR", """/usr/local/var/log""") +BINDIR = os.environ.get("OVS_BINDIR", """/usr/local/bin""") + +DBDIR = os.environ.get("OVS_DBDIR") +if not DBDIR: + sysconfdir = os.environ.get("OVS_SYSCONFDIR") + if sysconfdir: + DBDIR = "%s/openvswitch" % sysconfdir + else: + DBDIR = """/usr/local/etc/openvswitch""" diff --git a/python/ovs/dirs.py.template b/python/ovs/dirs.py.template new file mode 100644 index 00000000..370c69f4 --- /dev/null +++ b/python/ovs/dirs.py.template @@ -0,0 +1,17 @@ +## The @variables@ in this file are replaced by default directories for +## use in python/ovs/dirs.py in the source directory and replaced by the +## configured directories for use in the installed python/ovs/dirs.py. +## +import os +PKGDATADIR = os.environ.get("OVS_PKGDATADIR", """@pkgdatadir@""") +RUNDIR = os.environ.get("OVS_RUNDIR", """@RUNDIR@""") +LOGDIR = os.environ.get("OVS_LOGDIR", """@LOGDIR@""") +BINDIR = os.environ.get("OVS_BINDIR", """@bindir@""") + +DBDIR = os.environ.get("OVS_DBDIR") +if not DBDIR: + sysconfdir = os.environ.get("OVS_SYSCONFDIR") + if sysconfdir: + DBDIR = "%s/openvswitch" % sysconfdir + else: + DBDIR = """@DBDIR@""" diff --git a/utilities/ovs-lib.in b/utilities/ovs-lib.in index 893e8d1e..3c63ddd9 100644 --- a/utilities/ovs-lib.in +++ b/utilities/ovs-lib.in @@ -22,14 +22,21 @@ # All of these should be substituted by the Makefile at build time. logdir=${OVS_LOGDIR-'@LOGDIR@'} # /var/log/openvswitch rundir=${OVS_RUNDIR-'@RUNDIR@'} # /var/run/openvswitch -dbdir=${OVS_DBDIR-'@DBDIR@'} # /etc/openvswitch - # or /var/lib/openvswitch sysconfdir=${OVS_SYSCONFDIR-'@sysconfdir@'} # /etc etcdir=$sysconfdir/openvswitch # /etc/openvswitch datadir=${OVS_PKGDATADIR-'@pkgdatadir@'} # /usr/share/openvswitch bindir=${OVS_BINDIR-'@bindir@'} # /usr/bin sbindir=${OVS_SBINDIR-'@sbindir@'} # /usr/sbin +# /etc/openvswitch or /var/lib/openvswitch +if test X"$OVS_DBDIR" != X; then + dbdir=$OVS_DBDIR +elif test X"$OVS_SYSCONFDIR" != X; then + dbdir=$OVS_SYSCONFDIR/openvswitch +else + dbdir='@DBDIR@' +fi + VERSION='@VERSION@' LC_ALL=C; export LC_ALL -- 2.30.2