$Id$

As explained in #324768, this patch modifies setxkbmap and xkbcomp
programs so that they look for XKB data files in $XKBPATH if this
environment variable is set.  This allows installing both xlibs and
xkeyboard-config at the same time, so that xkeyboard-config can
install its files under /etc/X11/xkb-data until all packages depending
on xlibs are fixed.  This patch by Denis Barbier.

This patch will not be submitted upstream.

Index: setxkbmap/setxkbmap.c
===================================================================
--- setxkbmap/setxkbmap.c
+++ setxkbmap/setxkbmap.c
@@ -318,9 +318,13 @@
 int 	i;
 Bool	ok;
 unsigned	present;
+char	*xkbpath;
 
     ok= True;
     addToList(&szInclPath,&numInclPath,&inclPath,".");
+    xkbpath= (char *)getenv("XKBPATH");
+    if (xkbpath!=NULL)
+	addToList(&szInclPath,&numInclPath,&inclPath,xkbpath);
     addToList(&szInclPath,&numInclPath,&inclPath,DFLT_XKB_CONFIG_ROOT);
     for (i=1;(i<argc)&&ok;i++) {
 	if (argv[i][0]!='-') {
Index: xkbcomp/xkbpath.c
===================================================================
--- xkbcomp/xkbpath.c
+++ xkbcomp/xkbpath.c
@@ -131,9 +131,14 @@
 void
 XkbAddDefaultDirectoriesToPath(void)
 {
+char *xkbpath;
+
     if (noDefaultPath)
 	return;
     XkbAddDirectoryToPath(".");
+    xkbpath= (char *)getenv("XKBPATH");
+    if (xkbpath!=NULL)
+	XkbAddDirectoryToPath(xkbpath);
     XkbAddDirectoryToPath(DFLT_XKB_CONFIG_ROOT);
 }
 
Index: xkbevd/xkbevd.c
===================================================================
--- xkbevd/xkbevd.c
+++ xkbevd/xkbevd.c
@@ -471,20 +471,28 @@
     else {
 	file= fopen(cfgFileName,"r");
 	if (file==NULL) { /* no personal config, try for a system one */
+	    char *xkbpath;
 	    if (cfgFileName!=buf) { /* user specified a file.  bail */
 		uError("Can't open config file \"%s\n",cfgFileName);
 		uAction("Exiting\n");
 		exit(1);
 	    }
-	    sprintf(buf,DFLT_SYS_XKBEVD_CONFIG,DFLT_XKB_CONFIG_ROOT);
-	    file= fopen(cfgFileName,"r");
+	    xkbpath= (char *)getenv("XKBPATH");
+	    if (xkbpath!=NULL) {
+		sprintf(buf,DFLT_SYS_XKBEVD_CONFIG,xkbpath);
+		file= fopen(cfgFileName,"r");
+	    }
 	    if (file==NULL) {
-		if (verbose) {
-		    uError("Couldn't find a config file anywhere\n");
-		    uAction("Exiting\n");
-		    exit(1);
+	        sprintf(buf,DFLT_SYS_XKBEVD_CONFIG,DFLT_XKB_CONFIG_ROOT);
+	        file= fopen(cfgFileName,"r");
+		if (file==NULL) {
+		    if (verbose) {
+			uError("Couldn't find a config file anywhere\n");
+			uAction("Exiting\n");
+			exit(1);
+		    }
+		    exit(0);
 		}
-		exit(0);
 	    }
 	}
     }