In addition to the conf files found in /etc/X11 or $sysconfdir/X11 used
for local administration, we also reserve a system directory for vendor
and package usage. The simple search path is:

        /usr/share/X11/xorg.conf.d
        $datadir/X11/xorg.conf.d

Files from these directories will have the lowest config priority. The
directory $datadir/X11/xorg.conf.d is exported from xorg-server.pc in
the variable "sysconfigdir". Packages should install their .conf files
to the directory specified by:

        `pkg-config --variable=sysconfigdir xorg-server`

Signed-off-by: Dan Nicholson <dbn.li...@gmail.com>
---
 Updated to also add the directory to xorg-server.pc for packages to use.

 configure.ac                         |    2 ++
 hw/xfree86/common/xf86Config.c       |   12 ++++++++++--
 hw/xfree86/doc/man/xorg.conf.man.pre |   12 ++++++++++++
 xorg-server.pc.in                    |    2 ++
 4 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/configure.ac b/configure.ac
index 591d2b4..0d0dffd 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1792,8 +1792,10 @@ if test "x$XORG" = xyes; then
        AC_SUBST([driverdir])
        sdkdir="$includedir/xorg"
        extdir="$includedir/X11/extensions"
+       sysconfigdir="$datadir/X11/$XF86CONFIGDIR"
        AC_SUBST([sdkdir])
        AC_SUBST([extdir])
+       AC_SUBST([sysconfigdir])
        AC_SUBST([logdir])
 
        # stuff the ABI versions into the pc file too
diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index d02c22a..1e9543f 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -104,6 +104,9 @@ extern DeviceAssocRec mouse_assoc;
 #define USER_CONFIGDIRPATH     "/etc/X11/%R," "%C/X11/%R," \
                                "/etc/X11/%X," "%C/X11/%X"
 #endif
+#ifndef SYS_CONFIGDIRPATH
+#define SYS_CONFIGDIRPATH      "/usr/share/X11/%X," "%D/X11/%X"
+#endif
 #ifndef PROJECTROOT
 #define PROJECTROOT    "/usr/X11R6"
 #endif
@@ -2421,7 +2424,7 @@ checkInput(serverLayoutPtr layout, Bool implicit_layout) {
 ConfigStatus
 xf86HandleConfigFile(Bool autoconfig)
 {
-    const char *filename, *dirname;
+    const char *filename, *dirname, *sysdirname;
     char *filesearch, *dirsearch;
     MessageType filefrom = X_DEFAULT;
     MessageType dirfrom = X_DEFAULT;
@@ -2444,6 +2447,8 @@ xf86HandleConfigFile(Bool autoconfig)
            dirfrom = X_CMDLINE;
 
        xf86initConfigFiles();
+       sysdirname = xf86openConfigDirFiles(SYS_CONFIGDIRPATH, NULL,
+                                           PROJECTROOT);
        dirname = xf86openConfigDirFiles(dirsearch, xf86ConfigDir, PROJECTROOT);
        filename = xf86openConfigFile(filesearch, xf86ConfigFile, PROJECTROOT);
        if (filename) {
@@ -2464,7 +2469,10 @@ xf86HandleConfigFile(Bool autoconfig)
                        "Unable to locate/open config directory: \"%s\"\n",
                        xf86ConfigDir);
        }
-       if (!filename && !dirname)
+       if (sysdirname)
+           xf86MsgVerb(X_DEFAULT, 0, "Using system config directory \"%s\"\n",
+                       sysdirname);
+       if (!filename && !dirname && !sysdirname)
            return CONFIG_NOFILE;
     }
 
diff --git a/hw/xfree86/doc/man/xorg.conf.man.pre 
b/hw/xfree86/doc/man/xorg.conf.man.pre
index acfa1ca..4782d61 100644
--- a/hw/xfree86/doc/man/xorg.conf.man.pre
+++ b/hw/xfree86/doc/man/xorg.conf.man.pre
@@ -138,6 +138,18 @@ is the path specified with the
 .B \-configdir
 command line option (which may be absolute or relative).
 .PP
+Finally, configuration files will also be searched for in directories
+reserved for system use. These are to separate configuration files from
+the vendor or 3rd party packages from those of local administration.
+These files are found in the following directories:
+.PP
+.RS 4
+.nf
+.I /usr/share/X11/__xconfigdir__
+.I __datadir__/X11/__xconfigdir__
+.fi
+.RE
+.PP
 The
 .I __xconfigfile__
 and
diff --git a/xorg-server.pc.in b/xorg-server.pc.in
index 3d58dab..376cb93 100644
--- a/xorg-server.pc.in
+++ b/xorg-server.pc.in
@@ -2,8 +2,10 @@ pref...@prefix@
 exec_pref...@exec_prefix@
 libd...@libdir@
 included...@includedir@
+datarootd...@datarootdir@
 moduled...@moduledir@
 sdkd...@sdkdir@
+sysconfigd...@sysconfigdir@
 
 abi_ans...@abi_ansic@
 abi_videod...@abi_videodrv@
-- 
1.6.6.1

_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to