Sophie

Sophie

distrib > Mandriva > 2009.1 > i586 > media > main-release-src > by-pkgid > ed850f9ceda4826f28781585a4806f28 > files > 21

x11-server-1.6.1-1mdv2009.1.src.rpm

From 8248d95e33026dd3f7d2748de59fc0087489e760 Mon Sep 17 00:00:00 2001
From: Ander Conselvan de Oliveira <ander@localhost.(none)>
Date: Thu, 12 Mar 2009 09:45:57 -0300
Subject: [PATCH] Xorg: add an extra module path

If the extra module path is not an empty string (the default value),
module path will be searched first in the extra module path and then in
the default module path. This should simplify the alternatives system
used on Mandriva's fglrx package.
---
 configure.ac                    |    5 +++++
 hw/xfree86/common/xf86Config.c  |   14 ++++++++++++--
 hw/xfree86/common/xf86Globals.c |    1 +
 hw/xfree86/common/xf86Priv.h    |    1 +
 include/xorg-config.h.in        |    3 +++
 5 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/configure.ac b/configure.ac
index 3bd69b2..5b58ad8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -446,6 +446,10 @@ AC_ARG_WITH(module-dir,      AS_HELP_STRING([--with-module-dir=DIR],
 				  [Directory where modules are installed (default: $libdir/xorg/modules)]),
 				[ moduledir="$withval" ],
 				[ moduledir="${libdir}/xorg/modules" ])
+AC_ARG_WITH(extra-module-dir,AS_HELP_STRING([--with-extra-module-dir=DIR],
+				  [Extra module directory to search for modules before the default one (default: empty)]),
+				[ extra_moduledir="$withval" ],
+				[ extra_moduledir="" ])
 AC_ARG_WITH(log-dir,         AS_HELP_STRING([--with-log-dir=DIR],
 				  [Directory where log files are kept (default: $localstatedir/log)]),
 				[ logdir="$withval" ],
@@ -1489,6 +1493,7 @@ if test "x$XORG" = xyes; then
 	AC_DEFINE_DIR(__XCONFIGFILE__, XF86CONFIGFILE, [Name of configuration file])
 	AC_DEFINE_DIR(XF86CONFIGFILE, XF86CONFIGFILE, [Name of configuration file])
 	AC_DEFINE_DIR(DEFAULT_MODULE_PATH, moduledir, [Default module search path])
+	AC_DEFINE_DIR(EXTRA_MODULE_PATH, extra_moduledir, [Extra module search path, searched before the default one])
 	AC_DEFINE_DIR(DEFAULT_LIBRARY_PATH, libdir, [Default library install path])
 	AC_DEFINE_DIR(DEFAULT_LOGPREFIX, LOGPREFIX, [Default log location])
 	AC_DEFINE_UNQUOTED(__VENDORDWEBSUPPORT__, ["$VENDOR_WEB"], [Vendor web address for support])
diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
index 20f6625..345ef96 100644
--- a/hw/xfree86/common/xf86Config.c
+++ b/hw/xfree86/common/xf86Config.c
@@ -659,11 +659,21 @@ configFiles(XF86ConfFilesPtr fileconf)
   
   /* ModulePath */
 
-  if (fileconf) {
-    if (xf86ModPathFrom != X_CMDLINE && fileconf->file_modulepath) {
+  if (xf86ModPathFrom != X_CMDLINE) {
+    if (fileconf && fileconf->file_modulepath) {
       xf86ModulePath = fileconf->file_modulepath;
       xf86ModPathFrom = X_CONFIG;
     }
+    else if (strcmp(xf86ExtraModulePath, "") != 0) {
+      char *newpath = malloc(strlen(xf86ExtraModulePath)
+			     + strlen(xf86ModulePath)
+			     + 2);
+      strcpy(newpath, xf86ExtraModulePath);
+      strcat(newpath, ",");
+      strcat(newpath, xf86ModulePath);
+
+      xf86ModulePath = newpath;
+    }
   }
 
   xf86Msg(xf86ModPathFrom, "ModulePath set to \"%s\"\n", xf86ModulePath);
diff --git a/hw/xfree86/common/xf86Globals.c b/hw/xfree86/common/xf86Globals.c
index 0900c7d..7387577 100644
--- a/hw/xfree86/common/xf86Globals.c
+++ b/hw/xfree86/common/xf86Globals.c
@@ -142,6 +142,7 @@ xf86InfoRec xf86Info = {
 const char *xf86ConfigFile = NULL;
 const char *xf86InputDeviceList = NULL;
 const char *xf86ModulePath = DEFAULT_MODULE_PATH;
+const char *xf86ExtraModulePath = EXTRA_MODULE_PATH;
 MessageType xf86ModPathFrom = X_DEFAULT;
 const char *xf86LogFile = DEFAULT_LOGPREFIX;
 MessageType xf86LogFileFrom = X_DEFAULT;
diff --git a/hw/xfree86/common/xf86Priv.h b/hw/xfree86/common/xf86Priv.h
index 41ca8f5..811158d 100644
--- a/hw/xfree86/common/xf86Priv.h
+++ b/hw/xfree86/common/xf86Priv.h
@@ -79,6 +79,7 @@ extern struct pci_slot_match xf86IsolateDevice;
 extern xf86InfoRec xf86Info;
 extern const char *xf86InputDeviceList;
 extern const char *xf86ModulePath;
+extern const char *xf86ExtraModulePath;
 extern MessageType xf86ModPathFrom;
 extern const char *xf86LogFile;
 extern MessageType xf86LogFileFrom;
diff --git a/include/xorg-config.h.in b/include/xorg-config.h.in
index f9b77d0..223b104 100644
--- a/include/xorg-config.h.in
+++ b/include/xorg-config.h.in
@@ -39,6 +39,9 @@
 /* Path to loadable modules. */
 #undef DEFAULT_MODULE_PATH
 
+/* Path to extra loadable modules. */
+#undef EXTRA_MODULE_PATH
+
 /* Path to installed libraries. */
 #undef DEFAULT_LIBRARY_PATH
 
-- 
1.6.2.1