debian/changelog                                                            |  
 19 
 debian/patches/07-xfree86-fix-build-with-xv-disabled.diff                   |  
 50 
 debian/patches/08-config-xorg-conf-d.diff                                   | 
1287 +++++++++
 debian/patches/09-inputclass-sans-abi9.diff                                 | 
1334 ++++++++++
 debian/patches/10-config-libudev-backend.diff                               |  
725 +++++
 debian/patches/11-Move-config_init-after-CreateWellKnownSockets-and-In.diff |  
 34 
 debian/patches/11-xfree86-fix-video-fallback.diff                           |  
123 
 debian/patches/12-Add-libudev-input-hotplug-backend.diff                    |  
710 -----
 debian/patches/12-xfree86-dont-complain-about-missing-coredevices.diff      |  
 58 
 debian/patches/13-configure-config-udev-defaults-to-off-for-now.diff        |  
 23 
 debian/patches/13-unbreak-input-abi.diff                                    |  
148 +
 debian/patches/14-config-add-example-udev-rules.diff                        |  
 27 
 debian/patches/14-tone-down-nidr-errors.diff                                |  
 20 
 debian/patches/15-config-udev-look-for-xkb-rules-model-layout-variant-.diff |  
 40 
 debian/patches/16-config-dont-filter-input-subsys.diff                      |  
 42 
 debian/patches/16-xfree86-fix-build-with-xv-disabled.diff                   |  
 53 
 debian/patches/series                                                       |  
 15 
 17 files changed, 3772 insertions(+), 936 deletions(-)

New commits:
commit 8d44f6806196c6b77917b1483f975ee5e607a55b
Author: Timo Aaltonen <tjaal...@cc.hut.fi>
Date:   Tue Mar 30 13:52:39 2010 +0300

    Explain a bit more.

diff --git a/debian/changelog b/debian/changelog
index 62cad49..b781f32 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -3,7 +3,9 @@ xorg-server (2:1.7.6-2) UNRELEASED; urgency=low
   * Add 08-config-xorg-conf-d.diff, 09-inputclass-sans-abi9.diff,
     10-config-libudev-backend.diff. Backport xorg.conf.d, inputclass
     and libudev support from xserver 1.8. Replaces the patches we had
-    before.
+    before. This allows us to migrate from a temporary udev based
+    input device configuration straight to the long term solution
+    introduced in 1.8.
   * Add 11-xfree86-fix-video-fallback.diff from SUSE. Allows the video
     fallback method to work when there's an xorg.conf around.
   * Add 12-xfree86-dont-complain-about-missing-coredevices.diff.

commit cc96fc4f50cfbf1056b99e3af37d0624003349f9
Author: Timo Aaltonen <tjaal...@cc.hut.fi>
Date:   Tue Mar 30 13:41:00 2010 +0300

    Update the changelog to explain the backport.

diff --git a/debian/changelog b/debian/changelog
index ef4b504..62cad49 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,7 +1,17 @@
-xorg-server (2:1.7.6-1.1) UNRELEASED; urgency=low
-
-  * Backport xorg.conf.d, inputclass and libudev support from
-    xserver 1.8. The udev support is slightly different from what we had.
+xorg-server (2:1.7.6-2) UNRELEASED; urgency=low
+
+  * Add 08-config-xorg-conf-d.diff, 09-inputclass-sans-abi9.diff,
+    10-config-libudev-backend.diff. Backport xorg.conf.d, inputclass
+    and libudev support from xserver 1.8. Replaces the patches we had
+    before.
+  * Add 11-xfree86-fix-video-fallback.diff from SUSE. Allows the video
+    fallback method to work when there's an xorg.conf around.
+  * Add 12-xfree86-dont-complain-about-missing-coredevices.diff.
+    No reason to complain about these, unless AEI is off.
+  * Add 13-unbreak-input-abi.diff. Keep the old NewInputDeviceRequest(),
+    rename the new as NIDR18() and call it from NIDR(). This way we
+    don't break the input ABI.
+  * Add 14-tone-down-nidr-errors.diff. Use X_INFO instead of X_ERROR.
 
  -- Timo Aaltonen <tjaal...@ubuntu.com>  Wed, 24 Mar 2010 16:08:25 +0200
 

commit 7ce6a0ee6ae7dbf380f639c9a235997889651635
Author: Timo Aaltonen <tjaal...@cc.hut.fi>
Date:   Tue Mar 30 13:23:16 2010 +0300

    Refresh patch 07.

diff --git a/debian/patches/07-xfree86-fix-build-with-xv-disabled.diff 
b/debian/patches/07-xfree86-fix-build-with-xv-disabled.diff
index 184301f..8281634 100644
--- a/debian/patches/07-xfree86-fix-build-with-xv-disabled.diff
+++ b/debian/patches/07-xfree86-fix-build-with-xv-disabled.diff
@@ -8,11 +8,11 @@ Subject: [PATCH] xfree86: fix build with xv disabled
  hw/xfree86/modes/xf86Crtc.h |    2 ++
  2 files changed, 4 insertions(+), 0 deletions(-)
 
-diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
-index 30b49af..62f8737 100644
---- a/hw/xfree86/modes/xf86Crtc.c
-+++ b/hw/xfree86/modes/xf86Crtc.c
-@@ -3009,6 +3009,7 @@ xf86_crtc_box_area(BoxPtr box)
+Index: xorg-server/hw/xfree86/modes/xf86Crtc.c
+===================================================================
+--- xorg-server.orig/hw/xfree86/modes/xf86Crtc.c       2010-03-30 
13:22:36.000000000 +0300
++++ xorg-server/hw/xfree86/modes/xf86Crtc.c    2010-03-30 13:22:39.000000000 
+0300
+@@ -3011,6 +3011,7 @@
      return (int) (box->x2 - box->x1) * (int) (box->y2 - box->y1);
  }
  
@@ -20,7 +20,7 @@ index 30b49af..62f8737 100644
  /*
   * Return the crtc covering 'box'. If two crtcs cover a portion of
   * 'box', then prefer 'desired'. If 'desired' is NULL, then prefer the crtc
-@@ -3097,6 +3098,7 @@ xf86_crtc_clip_video_helper(ScrnInfoPtr pScrn,
+@@ -3099,6 +3100,7 @@
  
      return ret;
  }
@@ -28,11 +28,11 @@ index 30b49af..62f8737 100644
  
  xf86_crtc_notify_proc_ptr
  xf86_wrap_crtc_notify (ScreenPtr screen, xf86_crtc_notify_proc_ptr new)
-diff --git a/hw/xfree86/modes/xf86Crtc.h b/hw/xfree86/modes/xf86Crtc.h
-index 9baa956..2fb32c1 100644
---- a/hw/xfree86/modes/xf86Crtc.h
-+++ b/hw/xfree86/modes/xf86Crtc.h
-@@ -908,6 +908,7 @@ xf86_hide_cursors (ScrnInfoPtr scrn);
+Index: xorg-server/hw/xfree86/modes/xf86Crtc.h
+===================================================================
+--- xorg-server.orig/hw/xfree86/modes/xf86Crtc.h       2010-03-30 
13:22:36.000000000 +0300
++++ xorg-server/hw/xfree86/modes/xf86Crtc.h    2010-03-30 13:22:39.000000000 
+0300
+@@ -934,6 +934,7 @@
  extern _X_EXPORT void
  xf86_cursors_fini (ScreenPtr screen);
  
@@ -40,7 +40,7 @@ index 9baa956..2fb32c1 100644
  /*
   * For overlay video, compute the relevant CRTC and
   * clip video to that.
-@@ -926,6 +927,7 @@ xf86_crtc_clip_video_helper(ScrnInfoPtr pScrn,
+@@ -952,6 +953,7 @@
                            RegionPtr   reg,
                            INT32       width,
                            INT32       height);
@@ -48,6 +48,3 @@ index 9baa956..2fb32c1 100644
      
  extern _X_EXPORT xf86_crtc_notify_proc_ptr
  xf86_wrap_crtc_notify (ScreenPtr pScreen, xf86_crtc_notify_proc_ptr new);
--- 
-1.6.6.1
-

commit f1cdff35391eb165ecd1b03cb7983f3a7e14dbfd
Author: Timo Aaltonen <tjaal...@cc.hut.fi>
Date:   Tue Mar 30 13:21:29 2010 +0300

    Rename the new patches to have a double-digit prefix.

diff --git a/debian/patches/08-config-xorg-conf-d.diff 
b/debian/patches/08-config-xorg-conf-d.diff
new file mode 100644
index 0000000..cf70c92
--- /dev/null
+++ b/debian/patches/08-config-xorg-conf-d.diff
@@ -0,0 +1,1287 @@
+From 871bbe1d87fa3c7ebd075e1d1eec33e45b08493d Mon Sep 17 00:00:00 2001
+From: Keith Packard <kei...@keithp.com>
+Date: Wed, 30 Dec 2009 17:16:45 +0000
+Subject: Merge remote branch 'dbn/xorg.conf.d'
+
+---
+Index: xorg-server/configure.ac
+===================================================================
+--- xorg-server.orig/configure.ac      2010-03-24 13:05:51.000000000 +0200
++++ xorg-server/configure.ac   2010-03-24 13:05:51.000000000 +0200
+@@ -1696,6 +1696,7 @@
+ 
+       dnl these only go in xorg-config.h
+       XF86CONFIGFILE="xorg.conf"
++      XF86CONFIGDIR="xorg.conf.d"
+       CONFIGFILE="$sysconfdir/$XF86CONFIGFILE"
+       LOGPREFIX="$logdir/Xorg."
+       AC_DEFINE(XORG_SERVER, 1, [Building Xorg server])
+@@ -1708,6 +1709,7 @@
+       AC_DEFINE(__XSERVERNAME__, "Xorg", [Name of X server])
+       AC_DEFINE_DIR(__XCONFIGFILE__, XF86CONFIGFILE, [Name of configuration 
file])
+       AC_DEFINE_DIR(XF86CONFIGFILE, XF86CONFIGFILE, [Name of configuration 
file])
++      AC_DEFINE_DIR(__XCONFIGDIR__, XF86CONFIGDIR, [Name of configuration 
directory])
+       AC_DEFINE_DIR(DEFAULT_MODULE_PATH, moduledir, [Default module search 
path])
+       AC_DEFINE_DIR(DEFAULT_LIBRARY_PATH, libdir, [Default library install 
path])
+       AC_DEFINE_DIR(DEFAULT_LOGPREFIX, LOGPREFIX, [Default log location])
+Index: xorg-server/cpprules.in
+===================================================================
+--- xorg-server.orig/cpprules.in       2010-03-24 13:01:50.000000000 +0200
++++ xorg-server/cpprules.in    2010-03-24 13:05:51.000000000 +0200
+@@ -36,7 +36,8 @@
+       -D__adminmansuffix__=$(ADMIN_MAN_SUFFIX) \
+       -D__mandir__=$(mandir) \
+       -D__projectroot__=$(prefix) \
+-      -D__xconfigfile__=$(__XCONFIGFILE__) -D__xconfigdir__=$(XCONFIGDIR) \
++      -D__xconfigfile__=$(__XCONFIGFILE__) \
++      -D__xconfigdir__=$(__XCONFIGDIR__) \
+       -D__xkbdir__=$(XKB_BASE_DIRECTORY) \
+       -D__modulepath__="$(DEFAULT_MODULE_PATH)" \
+       -D__xlogfile__=$(XLOGFILE) -D__xservername__=$(XSERVERNAME) 
+Index: xorg-server/hw/xfree86/common/xf86AutoConfig.c
+===================================================================
+--- xorg-server.orig/hw/xfree86/common/xf86AutoConfig.c        2010-03-24 
13:01:50.000000000 +0200
++++ xorg-server/hw/xfree86/common/xf86AutoConfig.c     2010-03-24 
13:05:51.000000000 +0200
+@@ -272,7 +272,8 @@
+     for (cp = builtinConfig; *cp; cp++)
+       xf86ErrorFVerb(3, "\t%s", *cp);
+     xf86MsgVerb(X_DEFAULT, 3, "--- End of built-in configuration ---\n");
+-    
++
++    xf86initConfigFiles();
+     xf86setBuiltinConfig(builtinConfig);
+     ret = xf86HandleConfigFile(TRUE);
+     FreeConfig();
+Index: xorg-server/hw/xfree86/common/xf86Config.c
+===================================================================
+--- xorg-server.orig/hw/xfree86/common/xf86Config.c    2010-03-24 
13:01:50.000000000 +0200
++++ xorg-server/hw/xfree86/common/xf86Config.c 2010-03-24 13:05:51.000000000 
+0200
+@@ -95,6 +95,23 @@
+                       "%P/lib/X11/%X.%H," "%P/lib/X11/%X-%M," \
+                       "%P/lib/X11/%X"
+ #endif
++#ifndef ROOT_CONFIGDIRPATH
++#define ROOT_CONFIGDIRPATH    "%A," "%R," \
++                              "/etc/X11/%R," "%P/etc/X11/%R," \
++                              "/etc/X11/%X-%M," "/etc/X11/%X," "/etc/%X," \
++                              "%P/etc/X11/%X.%H," "%P/etc/X11/%X-%M," \
++                              "%P/etc/X11/%X," \
++                              "%P/lib/X11/%X.%H," "%P/lib/X11/%X-%M," \
++                              "%P/lib/X11/%X"
++#endif
++#ifndef USER_CONFIGDIRPATH
++#define USER_CONFIGDIRPATH    "/etc/X11/%S," "%P/etc/X11/%S," \
++                              "/etc/X11/%X-%M," "/etc/X11/%X," "/etc/%X," \
++                              "%P/etc/X11/%X.%H," "%P/etc/X11/%X-%M," \
++                              "%P/etc/X11/%X," \
++                              "%P/lib/X11/%X.%H," "%P/lib/X11/%X-%M," \
++                              "%P/lib/X11/%X"
++#endif
+ #ifndef PROJECTROOT
+ #define PROJECTROOT   "/usr/X11R6"
+ #endif
+@@ -1471,6 +1488,45 @@
+        {0}, FALSE },
+ };
+ 
++static Bool
++configInputDevices(XF86ConfLayoutPtr layout, serverLayoutPtr servlayoutp)
++{
++    XF86ConfInputrefPtr irp;
++    IDevPtr *indp;
++    int count = 0;
++
++    /*
++     * Count the number of input devices.
++     */
++    irp = layout->lay_input_lst;
++    while (irp) {
++      count++;
++      irp = (XF86ConfInputrefPtr)irp->list.next;
++    }
++    DebugF("Found %d input devices in the layout section %s\n",
++          count, layout.lay_identifier);
++    indp = xnfcalloc((count + 1), sizeof(IDevPtr));
++    indp[count] = NULL;
++    irp = layout->lay_input_lst;
++    count = 0;
++    while (irp) {
++      indp[count] = xnfalloc(sizeof(IDevRec));
++      if (!configInput(indp[count], irp->iref_inputdev, X_CONFIG)) {
++          while(count--)
++              xfree(indp[count]);
++          xfree(indp);
++          return FALSE;
++      }
++      indp[count]->extraOptions = irp->iref_option_lst;
++      count++;
++      irp = (XF86ConfInputrefPtr)irp->list.next;
++    }
++    servlayoutp->inputs = indp;
++
++    return TRUE;
++}
++
++
+ /*
+  * figure out which layout is active, which screens are used in that layout,
+  * which drivers and monitors are used in these screens
+@@ -1481,14 +1537,12 @@
+ {
+     XF86ConfAdjacencyPtr adjp;
+     XF86ConfInactivePtr idp;
+-    XF86ConfInputrefPtr irp;
+     int count = 0;
+     int scrnum;
+     XF86ConfLayoutPtr l;
+     MessageType from;
+     screenLayoutPtr slp;
+     GDevPtr gdp;
+-    IDevPtr* indp;
+     int i = 0, j;
+ 
+     if (!servlayoutp)
+@@ -1701,37 +1755,13 @@
+         count++;
+         idp = (XF86ConfInactivePtr)idp->list.next;
+     }
+-    /*
+-     * Count the number of input devices.
+-     */
+-    count = 0;
+-    irp = conf_layout->lay_input_lst;
+-    while (irp) {
+-        count++;
+-        irp = (XF86ConfInputrefPtr)irp->list.next;
+-    }
+-    DebugF("Found %d input devices in the layout section %s\n",
+-           count, conf_layout->lay_identifier);
+-    indp = xnfcalloc((count + 1), sizeof(IDevPtr));
+-    indp[count] = NULL;
+-    irp = conf_layout->lay_input_lst;
+-    count = 0;
+-    while (irp) {
+-        indp[count] = xnfalloc(sizeof(IDevRec));
+-      if (!configInput(indp[count], irp->iref_inputdev, X_CONFIG)) {
+-            while(count--) 
+-                xfree(indp[count]);
+-            xfree(indp);
+-            return FALSE;
+-      }
+-      indp[count]->extraOptions = irp->iref_option_lst;
+-        count++;
+-        irp = (XF86ConfInputrefPtr)irp->list.next;
+-    }
++
++    if (!configInputDevices(conf_layout, servlayoutp))
++      return FALSE;
++
+     servlayoutp->id = conf_layout->lay_identifier;
+     servlayoutp->screens = slp;
+     servlayoutp->inactives = gdp;
+-    servlayoutp->inputs = indp;
+     servlayoutp->options = conf_layout->lay_option_lst;
+     from = X_DEFAULT;
+ 
+@@ -1743,12 +1773,14 @@
+  * the only active screen.
+  */
+ static Bool
+-configImpliedLayout(serverLayoutPtr servlayoutp, XF86ConfScreenPtr 
conf_screen)
++configImpliedLayout(serverLayoutPtr servlayoutp, XF86ConfScreenPtr 
conf_screen,
++                    XF86ConfigPtr xf86configptr)
+ {
+     MessageType from;
+     XF86ConfScreenPtr s;
+     screenLayoutPtr slp;
+     IDevPtr *indp;
++    XF86ConfLayoutRec layout;
+ 
+     if (!servlayoutp)
+       return FALSE;
+@@ -1784,10 +1816,19 @@
+     servlayoutp->screens = slp;
+     servlayoutp->inactives = xnfcalloc(1, sizeof(GDevRec));
+     servlayoutp->options = NULL;
+-    /* Set up an empty input device list, then look for some core devices. */
+-    indp = xnfalloc(sizeof(IDevPtr));
+-    *indp = NULL;
+-    servlayoutp->inputs = indp;
++
++    memset(&layout, 0, sizeof(layout));
++    layout.lay_identifier = servlayoutp->id;
++    if (xf86layoutAddInputDevices(xf86configptr, &layout) > 0) {
++      if (!configInputDevices(&layout, servlayoutp))
++          return FALSE;
++      from = X_DEFAULT;
++    } else {
++      /* Set up an empty input device list, then look for some core devices. 
*/
++      indp = xnfalloc(sizeof(IDevPtr));
++      *indp = NULL;
++      servlayoutp->inputs = indp;
++    }
+ 
+     return TRUE;
+ }
+@@ -2428,34 +2469,53 @@
+ ConfigStatus
+ xf86HandleConfigFile(Bool autoconfig)
+ {
+-    const char *filename;
+-    char *searchpath;
+-    MessageType from = X_DEFAULT;
++    const char *filename, *dirname;
++    char *filesearch, *dirsearch;
++    MessageType filefrom = X_DEFAULT;
++    MessageType dirfrom = X_DEFAULT;
+     char *scanptr;
+     Bool singlecard = 0;
+     Bool implicit_layout = FALSE;
+ 
+     if (!autoconfig) {
+-      if (getuid() == 0)
+-          searchpath = ROOT_CONFIGPATH;
+-      else
+-          searchpath = USER_CONFIGPATH;
++      if (getuid() == 0) {
++          filesearch = ROOT_CONFIGPATH;
++          dirsearch = ROOT_CONFIGDIRPATH;
++      } else {
++          filesearch = USER_CONFIGPATH;
++          dirsearch = USER_CONFIGDIRPATH;
++      }
+ 
+       if (xf86ConfigFile)
+-          from = X_CMDLINE;
+-
+-      filename = xf86openConfigFile(searchpath, xf86ConfigFile, PROJECTROOT);
++          filefrom = X_CMDLINE;
++      if (xf86ConfigDir)
++          dirfrom = X_CMDLINE;
++
++      xf86initConfigFiles();
++      filename = xf86openConfigFile(filesearch, xf86ConfigFile, PROJECTROOT);
++      dirname = xf86openConfigDirFiles(dirsearch, xf86ConfigDir, PROJECTROOT);
+       if (filename) {
+-          xf86MsgVerb(from, 0, "Using config file: \"%s\"\n", filename);
++          xf86MsgVerb(filefrom, 0, "Using config file: \"%s\"\n", filename);
+           xf86ConfigFile = xnfstrdup(filename);
+       } else {
+           if (xf86ConfigFile)
+               xf86Msg(X_ERROR, "Unable to locate/open config file: \"%s\"\n",
+                       xf86ConfigFile);
+-          return CONFIG_NOFILE;
+       }
++      if (dirname) {
++          xf86MsgVerb(dirfrom, 0, "Using config directory: \"%s\"\n",
++                      dirname);
++          xf86ConfigDir = xnfstrdup(dirname);
++      } else {
++          if (xf86ConfigDir)
++              xf86Msg(X_ERROR,
++                      "Unable to locate/open config directory: \"%s\"\n",
++                      xf86ConfigDir);
++      }
++      if (!filename && !dirname)
++          return CONFIG_NOFILE;
+     }
+-     
++
+     if ((xf86configptr = xf86readConfigFile ()) == NULL) {
+       xf86Msg(X_ERROR, "Problem parsing the config file\n");
+       return CONFIG_PARSE_ERROR;
+@@ -2481,7 +2541,8 @@
+                   "No Layout section.  Using the first Screen section.\n");
+       }
+       if (!configImpliedLayout(&xf86ConfigLayout,
+-                               xf86configptr->conf_screen_lst)) {
++                               xf86configptr->conf_screen_lst,
++                               xf86configptr)) {
+             xf86Msg(X_ERROR, "Unable to determine the screen layout\n");
+           return CONFIG_PARSE_ERROR;
+       }
+Index: xorg-server/hw/xfree86/common/xf86Globals.c
+===================================================================
+--- xorg-server.orig/hw/xfree86/common/xf86Globals.c   2010-03-24 
13:01:50.000000000 +0200
++++ xorg-server/hw/xfree86/common/xf86Globals.c        2010-03-24 
13:05:51.000000000 +0200
+@@ -143,6 +143,7 @@
+ #endif
+ };
+ const char *xf86ConfigFile = NULL;
++const char *xf86ConfigDir = NULL;
+ const char *xf86ModulePath = DEFAULT_MODULE_PATH;
+ MessageType xf86ModPathFrom = X_DEFAULT;
+ const char *xf86LogFile = DEFAULT_LOGPREFIX;
+Index: xorg-server/hw/xfree86/common/xf86Init.c
+===================================================================
+--- xorg-server.orig/hw/xfree86/common/xf86Init.c      2010-03-24 
13:01:50.000000000 +0200
++++ xorg-server/hw/xfree86/common/xf86Init.c   2010-03-24 13:05:51.000000000 
+0200
+@@ -1373,6 +1373,19 @@
+     xf86ConfigFile = argv[i + 1];
+     return 2;
+   }
++  if (!strcmp(argv[i], "-configdir"))
++  {
++    CHECK_FOR_REQUIRED_ARGUMENT();
++    if (getuid() != 0 && !xf86PathIsSafe(argv[i + 1])) {
++      FatalError("\nInvalid argument for %s\n"
++        "\tFor non-root users, the file specified with %s must be\n"
++        "\ta relative path and must not contain any \"..\" elements.\n"
++        "\tUsing default "__XCONFIGDIR__" search path.\n\n",
++        argv[i], argv[i]);
++    }
++    xf86ConfigDir = argv[i + 1];
++    return 2;
++  }
+   if (!strcmp(argv[i],"-flipPixels"))
+   {
+     xf86FlipPixels = TRUE;
+@@ -1656,6 +1669,8 @@
+   }
+   ErrorF("-config file           specify a configuration file, relative to 
the\n");
+   ErrorF("                       "__XCONFIGFILE__" search path, only root can 
use absolute\n");
++  ErrorF("-configdir dir         specify a configuration directory, relative 
to the\n");
++  ErrorF("                       "__XCONFIGDIR__" search path, only root can 
use absolute\n");
+   ErrorF("-verbose [n]           verbose startup messages\n");
+   ErrorF("-logverbose [n]        verbose log messages\n");
+   ErrorF("-quiet                 minimal startup messages\n");
+Index: xorg-server/hw/xfree86/common/xf86Priv.h
+===================================================================
+--- xorg-server.orig/hw/xfree86/common/xf86Priv.h      2010-03-24 
13:01:50.000000000 +0200
++++ xorg-server/hw/xfree86/common/xf86Priv.h   2010-03-24 13:05:51.000000000 
+0200
+@@ -46,6 +46,7 @@
+  * The global state of these things is held in xf86InfoRec (when appropriate).
+  */
+ extern _X_EXPORT const char *xf86ConfigFile;
++extern _X_EXPORT const char *xf86ConfigDir;
+ extern _X_EXPORT  Bool xf86AllowMouseOpenFail;
+ #ifdef XF86VIDMODE
+ extern _X_EXPORT  Bool xf86VidModeDisabled;
+Index: xorg-server/hw/xfree86/doc/man/Xorg.man.pre
+===================================================================
+--- xorg-server.orig/hw/xfree86/doc/man/Xorg.man.pre   2010-03-24 
13:01:50.000000000 +0200
++++ xorg-server/hw/xfree86/doc/man/Xorg.man.pre        2010-03-24 
13:05:51.000000000 +0200
+@@ -109,7 +109,7 @@
+ .B __xservername__
+ supports several mechanisms for supplying/obtaining configuration and
+ run-time parameters: command line options, environment variables, the
+-__xconfigfile__(__filemansuffix__) configuration file, auto-detection, and
++__xconfigfile__(__filemansuffix__) configuration files, auto-detection, and
+ fallback defaults.  When the same information is supplied in more than
+ one way, the highest precedence mechanism is used.  The list of mechanisms
+ is ordered from highest precedence to lowest.  Note that not all parameters
+@@ -176,6 +176,13 @@
+ with real-uid 0), or for files relative to a directory in the config
+ search path for all other users.
+ .TP 8
++.BI \-configdir " directory"
++Read the server configuration files from
++.IR directory .
++This option will work for any directory when the server is run as root
++(i.e, with real-uid 0), or for directories relative to a directory in the
++config directory search path for all other users.
++.TP 8
+ .B \-configure
+ When this option is specified, the
+ .B __xservername__
+@@ -456,6 +463,10 @@
+ .B __xservername__
+ typically uses a configuration file called
+ .B __xconfigfile__
++and configuration files with the suffix
++.I .conf
++in a directory called
++.B __xconfigdir__
+ for its initial setup.
+ Refer to the __xconfigfile__(__filemansuffix__) manual page for information
+ about the format of this file.
+@@ -464,7 +475,9 @@
+ has a mechanism for automatically generating a built-in configuration
+ at run-time when no
+ .B __xconfigfile__
+-file is present.  The current version of this automatic configuration
++file or
++.B __xconfigdir__
++files are present.  The current version of this automatic configuration
+ mechanism works in two ways.
+ .PP
+ The first is via enhancements that have made many components of the
+@@ -486,7 +499,7 @@
+ .SH FILES
+ The
+ .B __xservername__
+-server config file can be found in a range of locations.  These are
++server config files can be found in a range of locations.  These are
+ documented fully in the __xconfigfile__(__filemansuffix__) manual page.  The
+ most commonly used locations are shown here.
+ .TP 30
+@@ -505,6 +518,21 @@
+ .B __projectroot__/lib/X11/__xconfigfile__
+ Server configuration file.
+ .TP 30
++.B /etc/X11/__xconfigdir__
++Server configuration directory.
++.TP 30
++.B /etc/X11/__xconfigdir__-4
++Server configuration directory.
++.TP 30
++.B /etc/__xconfigdir__
++Server configuration directory.
++.TP 30
++.B __projectroot__/etc/__xconfigdir__
++Server configuration directory.
++.TP 30
++.B __projectroot__/lib/X11/__xconfigdir__
++Server configuration directory.
++.TP 30
+ .BI __logdir__/__xservername__. n .log
+ Server log file for display
+ .IR n .
+Index: xorg-server/hw/xfree86/doc/man/xorg.conf.man.pre
+===================================================================
+--- xorg-server.orig/hw/xfree86/doc/man/xorg.conf.man.pre      2010-03-24 
13:01:50.000000000 +0200
++++ xorg-server/hw/xfree86/doc/man/xorg.conf.man.pre   2010-03-24 
13:05:51.000000000 +0200
+@@ -2,27 +2,35 @@
+ .ds q \N'34'
+ .TH __xconfigfile__ __filemansuffix__ __vendorversion__
+ .SH NAME
+-__xconfigfile__ \- configuration File for __xservername__ X server
++__xconfigfile__ and __xconfigdir__ \- configuration files for
++__xservername__ X server
+ .SH INTRODUCTION
+ .B __xservername__
+ supports several mechanisms for supplying/obtaining configuration and
+ run-time parameters: command line options, environment variables, the
+-__xconfigfile__ configuration file, auto-detection, and fallback defaults.
+-When the same information is supplied in more than one way, the highest
+-precedence mechanism is used.  The list of mechanisms is ordered from
+-highest precedence to lowest.  Note that not all parameters can be
+-supplied via all methods.  The available command line options and
+-environment variables (and some defaults) are described in the 
Xserver(__appmansuffix__)
+-and __xservername__(__appmansuffix__) manual pages.  Most configuration file 
parameters, with
+-their defaults, are described below.  Driver and module specific
+-configuration parameters are described in the relevant driver or module
+-manual page.
++__xconfigfile__ and __xconfigdir__ configuration files, auto-detection,
++and fallback defaults. When the same information is supplied in more
++than one way, the highest precedence mechanism is used. The list of
++mechanisms is ordered from highest precedence to lowest. Note that not
++all parameters can be supplied via all methods. The available command
++line options and environment variables (and some defaults) are
++described in the Xserver(__appmansuffix__) and
++__xservername__(__appmansuffix__) manual pages. Most configuration file
++parameters, with their defaults, are described below. Driver and module
++specific configuration parameters are described in the relevant driver
++or module manual page.
+ .SH DESCRIPTION
+ .B __xservername__
+ uses a configuration file called
+ .I __xconfigfile__
++and files ending in the suffix
++.I .conf
++from the directory
++.I __xconfigdir__
+ for its initial setup.
+-This configuration file is searched for in the following places when the
++The
++.I __xconfigfile__
++configuration file is searched for in the following places when the
+ server is started as a normal user:
+ .PP
+ .RS 4
+@@ -93,9 +101,28 @@
+ is the machine's hostname as reported by
+ .BR gethostname (__libmansuffix__).
+ .PP
++Additional configuration files are searched for in the following
++directories:
++.PP
++.RS 4
++.nf
++.I /etc/X11/__xconfigdir__\-4
++.I /etc/X11/__xconfigdir__
++.I /etc/__xconfigdir__
++.IR __projectroot__/etc/X11/__xconfigdir__. <hostname>
++.I __projectroot__/etc/X11/__xconfigdir__\-4
++.I __projectroot__/etc/X11/__xconfigdir__
++.IR __projectroot__/lib/X11/__xconfigdir__. <hostname>
++.I __projectroot__/lib/X11/__xconfigdir__\-4
++.I __projectroot__/lib/X11/__xconfigdir__
++.fi
++.RE
++.PP
+ The
+ .I __xconfigfile__
+-file is composed of a number of sections which may be present in any order,
++and
++.I __xconfigdir__
++files are composed of a number of sections which may be present in any order,
+ or omitted to use default configuration values.
+ Each section has the form:
+ .PP
+@@ -853,6 +880,11 @@
+ See the individual input driver manual pages for a description of the
+ device\-specific options.
+ .TP 7
++.BI "Option \*qAutoServerLayout\*q  \*q" boolean \*q
++Always add the device to the ServerLayout section used by this instance of
++the server. This affects implied layouts as well as explicit layouts
++specified in the configuration and/or on the command line.
++.TP 7
+ .BI "Option \*qCorePointer\*q"
+ Deprecated, use
+ .B SendCoreEvents
+Index: xorg-server/hw/xfree86/parser/Layout.c
+===================================================================
+--- xorg-server.orig/hw/xfree86/parser/Layout.c        2010-03-24 
13:01:50.000000000 +0200
++++ xorg-server/hw/xfree86/parser/Layout.c     2010-03-24 13:05:51.000000000 
+0200
+@@ -64,6 +64,10 @@
+ #include "Configint.h"
+ #include <string.h>
+ 
++
++/* Needed for auto server layout */
++extern int xf86CheckBoolOption(void* optlist, const char *name, int deflt);
++
+ extern LexRec val;
+ 
+ static xf86ConfigSymTabRec LayoutTab[] =
+@@ -450,15 +454,67 @@
+ }
+ 
+ int
++xf86layoutAddInputDevices(XF86ConfigPtr config, XF86ConfLayoutPtr layout)
++{
++    int count = 0;
++    XF86ConfInputPtr input = config->conf_input_lst;
++    XF86ConfInputrefPtr inptr;
++
++    /* add all AutoServerLayout devices to the server layout */
++    while (input)
++    {
++      if (xf86CheckBoolOption(input->inp_option_lst, "AutoServerLayout", 
FALSE))
++      {
++          XF86ConfInputrefPtr iref = layout->lay_input_lst;
++
++          /* avoid duplicates if referenced but lists AutoServerLayout too */
++          while (iref)
++          {
++              if (strcmp(iref->iref_inputdev_str, input->inp_identifier) == 0)
++                  break;
++              iref = iref->list.next;
++          }
++
++          if (!iref)
++          {
++              XF86ConfInputrefPtr iptr;
++              iptr = calloc(1, sizeof(XF86ConfInputrefRec));
++              iptr->iref_inputdev_str = input->inp_identifier;
++              layout->lay_input_lst = (XF86ConfInputrefPtr)
++                  xf86addListItem((glp)layout->lay_input_lst, (glp)iptr);
++              count++;
++          }
++      }
++      input = input->list.next;
++    }
++
++    inptr = layout->lay_input_lst;
++    while (inptr)
++    {
++      input = xf86findInput (inptr->iref_inputdev_str,
++              config->conf_input_lst);
++      if (!input)
++      {
++          xf86validationError (UNDEFINED_INPUT_MSG,
++                  inptr->iref_inputdev_str, layout->lay_identifier);
++          return -1;
++      }
++      else
++          inptr->iref_inputdev = input;
++      inptr = inptr->list.next;
++    }
++
++    return count;
++}
++
++int
+ xf86validateLayout (XF86ConfigPtr p)
+ {
+       XF86ConfLayoutPtr layout = p->conf_layout_lst;
+       XF86ConfAdjacencyPtr adj;
+       XF86ConfInactivePtr iptr;
+-      XF86ConfInputrefPtr inptr;
+       XF86ConfScreenPtr screen;
+       XF86ConfDevicePtr device;
+-      XF86ConfInputPtr input;
+ 
+       while (layout)
+       {
+@@ -500,21 +556,10 @@
+                               iptr->inactive_device = device;
+                       iptr = iptr->list.next;
+               }
+-              inptr = layout->lay_input_lst;
+-              while (inptr)
+-              {
+-                      input = xf86findInput (inptr->iref_inputdev_str,
+-                                                                      
p->conf_input_lst);
+-                      if (!input)
+-                      {
+-                              xf86validationError (UNDEFINED_INPUT_MSG,
+-                                              inptr->iref_inputdev_str, 
layout->lay_identifier);
+-                              return (FALSE);
+-                      }
+-                      else
+-                              inptr->iref_inputdev = input;
+-                      inptr = inptr->list.next;
+-              }
++
++              if (xf86layoutAddInputDevices(p, layout) == -1)
++                  return FALSE;
++
+               layout = layout->list.next;
+       }
+       return (TRUE);
+Index: xorg-server/hw/xfree86/parser/scan.c
+===================================================================
+--- xorg-server.orig/hw/xfree86/parser/scan.c  2010-03-24 13:01:50.000000000 
+0200
++++ xorg-server/hw/xfree86/parser/scan.c       2010-03-24 13:05:51.000000000 
+0200
+@@ -62,8 +62,11 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
++#include <sys/types.h>
++#include <dirent.h>
+ #include <unistd.h>
+ #include <stdarg.h>
++#include <X11/Xdefs.h>
+ #include <X11/Xfuncproto.h>
+ 
+ #if defined(_POSIX_SOURCE)
+@@ -90,17 +93,24 @@
+ #include "xf86tokens.h"
+ 
+ #define CONFIG_BUF_LEN     1024
++#define CONFIG_MAX_FILES   64
+ 
+ static int StringToToken (char *, xf86ConfigSymTabRec *);
+ 
+-static FILE *configFile = NULL;
++static struct {
++      FILE *file;
++      char *path;
++} configFiles[CONFIG_MAX_FILES];
+ static const char **builtinConfig = NULL;
+ static int builtinIndex = 0;
+ static int configPos = 0;             /* current readers position */
+ static int configLineNo = 0;  /* linenumber */
+ static char *configBuf, *configRBuf;  /* buffer for lines */
+ static char *configPath;              /* path to config file */
++static char *configDirPath;           /* path to config dir */
+ static char *configSection = NULL;    /* name of current section being parsed 
*/
++static int numFiles = 0;              /* number of config files */
++static int curFileIndex = 0;          /* index of current config file */
+ static int pushToken = LOCK_TOKEN;
+ static int eol_seen = 0;              /* private state to handle comments */
+ LexRec val;
+@@ -155,7 +165,7 @@
+ /*
+  * xf86getNextLine --
+  *
+- *  read from the configFile FILE stream until we encounter a new
++ *  read from the configFiles FILE stream until we encounter a new
+  *  line; this is effectively just a big wrapper for fgets(3).
+  *
+  *  xf86getToken() assumes that we will read up to the next
+@@ -213,9 +223,18 @@
+       /* read in another block of chars */
+ 
+       do {
+-              ret = fgets(configBuf + pos, configBufLen - pos - 1, 
configFile);
++              ret = fgets(configBuf + pos, configBufLen - pos - 1,
++                          configFiles[curFileIndex].file);
+ 
+-              if (!ret) break;
++              if (!ret) {
++                      /* stop if there are no more files */
++                      if (++curFileIndex >= numFiles) {
++                              curFileIndex = 0;
++                              break;
++                      }
++                      configLineNo = 0;
++                      continue;
++              }
+ 
+               /* search for EOL in the new block of chars */
+ 
+@@ -306,7 +325,7 @@
+               if (!c)
+               {
+                       char *ret;
+-                      if (configFile)
++                      if (numFiles > 0)
+                               ret = xf86getNextLine();
+                       else {
+                               if (builtinConfig[builtinIndex] == NULL)
+@@ -575,6 +594,12 @@
+ #ifndef XCONFIGFILE
+ #define XCONFIGFILE   "xorg.conf"
+ #endif
++#ifndef XCONFIGDIR
++#define XCONFIGDIR    "xorg.conf.d"
++#endif
++#ifndef XCONFIGSUFFIX
++#define XCONFIGSUFFIX ".conf"
++#endif
+ #ifndef PROJECTROOT
+ #define PROJECTROOT   "/usr/X11R6"
+ #endif
+@@ -616,7 +641,8 @@
+ 
+ static char *
+ DoSubstitution(const char *template, const char *cmdline, const char 
*projroot,
+-                              int *cmdlineUsed, int *envUsed, char 
*XConfigFile)
++                              int *cmdlineUsed, int *envUsed,
++                              const char *XConfigFile)
+ {
+       char *result;
+       int i, l;
+@@ -745,7 +771,164 @@
+       return result;
+ }
+ 
+-/* 
++/*
++ * Given some searching parameters, locate and open the xorg config file.
++ */
++static char *
++OpenConfigFile(const char *path, const char *cmdline, const char *projroot,
++             const char *confname)
++{
++      char *filepath = NULL;
++      char *pathcopy;
++      const char *template;
++      int cmdlineUsed = 0;
++      FILE *file = NULL;
++
++      pathcopy = strdup(path);
++      for (template = strtok(pathcopy, ","); template && !file;
++           template = strtok(NULL, ",")) {
++              filepath = DoSubstitution(template, cmdline, projroot,
++                                        &cmdlineUsed, NULL, confname);
++              if (!filepath)
++                      continue;
++              if (cmdline && !cmdlineUsed) {
++                      free(filepath);
++                      filepath = NULL;
++                      continue;
++              }
++              file = fopen(filepath, "r");
++              if (!file) {
++                      free(filepath);
++                      filepath = NULL;
++              }
++      }
++
++      if (file) {
++              configFiles[numFiles].file = file;
++              configFiles[numFiles].path = strdup(filepath);
++              numFiles++;
++      }
++      return filepath;
++}
++
++/*
++ * Match non-hidden files in the xorg config directory with a .conf
++ * suffix. This filter is passed to scandir(3).
++ */
++static int
++ConfigFilter(const struct dirent *de)
++{
++      const char *name = de->d_name;
++      size_t len = strlen(name);
++      size_t suflen = strlen(XCONFIGSUFFIX);
++
++      if (!name || name[0] == '.' || len <= suflen)
++              return 0;
++      if (strcmp(&name[len-suflen], XCONFIGSUFFIX) != 0)
++              return 0;
++      return 1;
++}
++
++static Bool
++AddConfigDirFiles(const char *dirpath, struct dirent **list, int num)
++{
++      int i;
++      Bool openedFile = FALSE;
++      Bool warnOnce = FALSE;
++
++      for (i = 0; i < num; i++) {
++              char *path;
++              FILE *file;
++
++              if (numFiles >= CONFIG_MAX_FILES) {
++                      if (!warnOnce) {
++                              ErrorF("Maximum number of configuration "
++                                     "files opened\n");
++                              warnOnce = TRUE;
++                      }
++                      free(list[i]);
++                      continue;
++              }
++
++              path = malloc(PATH_MAX + 1);
++              snprintf(path, PATH_MAX + 1, "%s/%s", dirpath,
++                       list[i]->d_name);
++              free(list[i]);
++              file = fopen(path, "r");
++              if (!file) {
++                      free(path);
++                      continue;
++              }
++              openedFile = TRUE;
++


-- 
To UNSUBSCRIBE, email to debian-x-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/e1nwz4l-0000eu...@alioth.debian.org

Reply via email to