[PATCH 1/4] configure: Add option to specify global defaults directory.

Doug Torrance <[email protected]>
Newsgroups gmane.compw.window-managers.windowmaker.devel
Message-ID <[email protected]>
Previously, this was only (partially) possible by redefining the macro
GLOBAL_DEFAULTS_SUBDIR.  This told Window Maker to look for the global
config files in a particular subdirectory of SYSCONFDIR.

However:
* This is undocumented.
* GLOBAL_DEFAULTS_SUBDIR is ignored when installing the config files.  They
  are always installed to SYSCONFDIR/WindowMaker.

To solve these issues, we add a "--with-defsdatadir" option to configure
which allows a user to specify the global defaults directory.
---
 Makefile.am                      |  4 ++--
 WINGs/userdefaults.c             |  7 ++-----
 WindowMaker/Defaults/Makefile.am |  3 ---
 configure.ac                     | 15 +++++++++++++++
 src/defaults.c                   | 11 +++--------
 src/main.c                       |  6 +-----
 src/misc.c                       |  2 +-
 7 files changed, 24 insertions(+), 24 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index 638cfed..786d3e8 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -21,8 +21,8 @@ config-paths.h: Makefile
 	@echo '/* where shared data is stored */' >> $@
 	@echo '#define PKGDATADIR "$(datadir)/WindowMaker"' >> $@
 	@echo '' >> $@
-	@echo '/* where the configuration is stored */' >> $@
-	@echo '#define SYSCONFDIR "$(sysconfdir)"' >> $@
+	@echo '/* where the global defaults are stored */' >> $@
+	@echo '#define DEFSDATADIR "$(defsdatadir)"' >> $@
 
 ACLOCAL_AMFLAGS = -I m4
 
diff --git a/WINGs/userdefaults.c b/WINGs/userdefaults.c
index 65ed099..3ec776c 100644
--- a/WINGs/userdefaults.c
+++ b/WINGs/userdefaults.c
@@ -103,17 +103,14 @@ char *wdefaultspathfordomain(const char *domain)
 }
 
 /* XXX: doesn't quite belong to *user*defaults.c */
-#ifndef GLOBAL_DEFAULTS_SUBDIR
-#define GLOBAL_DEFAULTS_SUBDIR "WindowMaker"
-#endif
 char *wglobaldefaultspathfordomain(const char *domain)
 {
 	char *t = NULL;
 	size_t len;
 
-	len = strlen( SYSCONFDIR ) + strlen( GLOBAL_DEFAULTS_SUBDIR ) + strlen(domain) + 3;
+	len = strlen(DEFSDATADIR) + strlen(domain) + 2;
 	t = wmalloc(len);
-	snprintf(t, len, "%s/%s/%s", SYSCONFDIR, GLOBAL_DEFAULTS_SUBDIR, domain);
+	snprintf(t, len, "%s/%s", DEFSDATADIR, domain);
 
 	return t;
 }
diff --git a/WindowMaker/Defaults/Makefile.am b/WindowMaker/Defaults/Makefile.am
index e61b41f..182385c 100644
--- a/WindowMaker/Defaults/Makefile.am
+++ b/WindowMaker/Defaults/Makefile.am
@@ -1,6 +1,3 @@
-
-defsdatadir = $(sysconfdir)/WindowMaker
-
 defsdata_DATA = WMRootMenu WMWindowAttributes WindowMaker WMState WMGLOBAL
 
 wpexecbindir = @wprefs_bindir@
diff --git a/configure.ac b/configure.ac
index 8439c80..2b43e00 100644
--- a/configure.ac
+++ b/configure.ac
@@ -867,6 +867,21 @@ AS_IF([test "x$with_gnustepdir" = "x"],
 AC_SUBST([wprefs_datadir])dnl
 AC_SUBST([wprefs_bindir])dnl
 
+dnl Support for DEFSDATADIR option
+dnl ============================
+AC_ARG_WITH([defsdatadir],
+    [AS_HELP_STRING([--with-defsdatadir=PATH], [specify where global defaults are located [SYSCONFDIR/WindowMaker]])],
+    [AS_CASE([$withval],
+        [yes|no], [AC_MSG_ERROR([bad value '$withval' for --with-defsdatadir, expected a path]) ],
+        [/*],  [], dnl Absolute path, ok
+        [\$*], [], dnl Assumes it starts with a reference to $prefix or a similar variable, ok
+        [AC_MSG_ERROR([bad path '$withval' for defsdatadir, expecting an absolute path])])],
+    [with_defsdatadir=""])
+
+AS_IF([test "x$with_defsdatadir" != "x"],
+    [defsdatadir="$with_defsdatadir"],
+    [defsdatadir='${sysconfdir}/WindowMaker'])
+AC_SUBST([defsdatadir])dnl
 
 dnl Enable User Defined Menu thing
 dnl ==============================
diff --git a/src/defaults.c b/src/defaults.c
index f295ce1..f83f6a5 100644
--- a/src/defaults.c
+++ b/src/defaults.c
@@ -67,11 +67,6 @@
 
 #define MAX_SHORTCUT_LENGTH 32
 
-#ifndef GLOBAL_DEFAULTS_SUBDIR
-#define GLOBAL_DEFAULTS_SUBDIR "WindowMaker"
-#endif
-
-
 typedef struct _WDefaultEntry  WDefaultEntry;
 typedef int (WDECallbackConvert) (WScreen *scr, WDefaultEntry *entry, WMPropList *plvalue, void *addr, void **tdata);
 typedef int (WDECallbackUpdate) (WScreen *scr, WDefaultEntry *entry, void *tdata, void *extra_data);
@@ -879,7 +874,7 @@ static WMPropList *readGlobalDomain(const char *domainName, Bool requireDictiona
 	char path[PATH_MAX];
 	struct stat stbuf;
 
-	snprintf(path, sizeof(path), "%s/%s/%s", SYSCONFDIR, GLOBAL_DEFAULTS_SUBDIR, domainName);
+	snprintf(path, sizeof(path), "%s/%s", DEFSDATADIR, domainName);
 	if (stat(path, &stbuf) >= 0) {
 		globalDict = WMReadPropListFromFile(path);
 		if (globalDict && requireDictionary && !WMIsPLDictionary(globalDict)) {
@@ -929,7 +924,7 @@ void wDefaultsMergeGlobalMenus(WDDomain * menuDomain)
 		return;
 
 #ifdef GLOBAL_PREAMBLE_MENU_FILE
-	submenu = WMReadPropListFromFile(SYSCONFDIR "/" GLOBAL_DEFAULTS_SUBDIR "/" GLOBAL_PREAMBLE_MENU_FILE);
+	submenu = WMReadPropListFromFile(DEFSDATADIR "/" GLOBAL_PREAMBLE_MENU_FILE);
 
 	if (submenu && !WMIsPLArray(submenu)) {
 		wwarning(_("invalid global menu file %s"), GLOBAL_PREAMBLE_MENU_FILE);
@@ -943,7 +938,7 @@ void wDefaultsMergeGlobalMenus(WDDomain * menuDomain)
 #endif
 
 #ifdef GLOBAL_EPILOGUE_MENU_FILE
-	submenu = WMReadPropListFromFile(SYSCONFDIR "/" GLOBAL_DEFAULTS_SUBDIR "/" GLOBAL_EPILOGUE_MENU_FILE);
+	submenu = WMReadPropListFromFile(DEFSDATADIR "/" GLOBAL_EPILOGUE_MENU_FILE);
 
 	if (submenu && !WMIsPLArray(submenu)) {
 		wwarning(_("invalid global menu file %s"), GLOBAL_EPILOGUE_MENU_FILE);
diff --git a/src/main.c b/src/main.c
index d7aee3d..a00d9c7 100644
--- a/src/main.c
+++ b/src/main.c
@@ -59,10 +59,6 @@
 
 #include <WINGs/WUtil.h>
 
-#ifndef GLOBAL_DEFAULTS_SUBDIR
-#define GLOBAL_DEFAULTS_SUBDIR "WindowMaker"
-#endif
-
 /****** Global Variables ******/
 struct wmaker_global_variables w_global;
 
@@ -662,7 +658,7 @@ static int real_main(int argc, char **argv)
 				printf("Window Maker %s\n", VERSION);
 				exit(0);
 			} else if (strcmp(argv[i], "--global_defaults_path") == 0) {
-			  printf("%s/%s\n", SYSCONFDIR, GLOBAL_DEFAULTS_SUBDIR);
+			  printf("%s\n", DEFSDATADIR);
 				exit(0);
 			} else if (strcmp(argv[i], "-locale") == 0 || strcmp(argv[i], "--locale") == 0) {
 				i++;
diff --git a/src/misc.c b/src/misc.c
index 02aa401..502f2b5 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -1017,7 +1017,7 @@ Bool UpdateDomainFile(WDDomain * domain)
 	dict = domain->dictionary;
 	if (WMIsPLDictionary(domain->dictionary)) {
 		/* retrieve global system dictionary */
-		snprintf(path, sizeof(path), "%s/WindowMaker/%s", SYSCONFDIR, domain->domain_name);
+		snprintf(path, sizeof(path), "%s/%s", DEFSDATADIR, domain->domain_name);
 		if (stat(path, &stbuf) >= 0) {
 			shared_dict = WMReadPropListFromFile(path);
 			if (shared_dict) {
-- 
2.7.4


-- 
To unsubscribe, send mail to [email protected].
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.