diff --git a/.gitignore b/.gitignore index 8bb4bbcba5..0e55a33021 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,17 @@ +# build directorys build.*/ .fakeroot.* +# automatically downloaded source files sources/ .stamps/ +# prebuild target binarys to provide target/ +# scripts for getting and packing source packages tools/mkpkg/* !tools/mkpkg/mkpkg_* + +# private working directory +.work/ diff --git a/packages/x11/driver/xf86-video-intel/patches/intel-2.10.0-add-mbp-backlight.diff b/packages/x11/driver/xf86-video-intel/patches/intel-2.10.0-add-mbp-backlight.diff new file mode 100644 index 0000000000..ddaab89edb --- /dev/null +++ b/packages/x11/driver/xf86-video-intel/patches/intel-2.10.0-add-mbp-backlight.diff @@ -0,0 +1,12 @@ +Index: xf86-video-intel-2.11.0/src/drmmode_display.c +=================================================================== +--- xf86-video-intel-2.11.0/src/drmmode_display.c ++++ xf86-video-intel-2.11.0/src/drmmode_display.c 2010-04-29 00:18:34.000000000 +0200 +@@ -103,6 +103,7 @@ + "asus-laptop", + "eeepc", + "thinkpad_screen", ++ "mbp_backlight", + "acpi_video1", + "acpi_video0", + "fujitsu-laptop", diff --git a/packages/x11/driver/xf86-video-intel/patches/intel-2.11-lvds-first.diff b/packages/x11/driver/xf86-video-intel/patches/intel-2.11-lvds-first.diff new file mode 100644 index 0000000000..3177b0bcf7 --- /dev/null +++ b/packages/x11/driver/xf86-video-intel/patches/intel-2.11-lvds-first.diff @@ -0,0 +1,36 @@ +diff -up xf86-video-intel-20100319/src/drmmode_display.c.jx xf86-video-intel-20100319/src/drmmode_display.c +--- xf86-video-intel-20100319/src/drmmode_display.c.jx 2010-03-22 13:24:13.483183499 -0400 ++++ xf86-video-intel-20100319/src/drmmode_display.c 2010-03-22 13:25:59.810184060 -0400 +@@ -1452,7 +1452,7 @@ Bool drmmode_pre_init(ScrnInfoPtr scrn, + intel_screen_private *intel = intel_get_screen_private(scrn); + struct drm_i915_getparam gp; + drmmode_ptr drmmode; +- unsigned int i; ++ unsigned int i, lvds = -1; + int has_flipping = 0; + + drmmode = xnfalloc(sizeof *drmmode); +@@ -1473,9 +1473,22 @@ Bool drmmode_pre_init(ScrnInfoPtr scrn, + drmmode->mode_res->max_height); + for (i = 0; i < drmmode->mode_res->count_crtcs; i++) + drmmode_crtc_init(scrn, drmmode, i); ++ ++ /* do LVDS first */ ++ for (i = 0; i < drmmode->mode_res->count_connectors; i++) { ++ drmModeConnectorPtr koutput = ++ drmModeGetConnector(drmmode->fd, ++ drmmode->mode_res->connectors[i]); ++ if (koutput->connector_type == DRM_MODE_CONNECTOR_LVDS) { ++ drmmode_output_init(scrn, drmmode, i); ++ lvds = i; ++ } ++ drmModeFreeConnector(koutput); ++ } + + for (i = 0; i < drmmode->mode_res->count_connectors; i++) +- drmmode_output_init(scrn, drmmode, i); ++ if (i != lvds) ++ drmmode_output_init(scrn, drmmode, i); + + xf86InitialConfiguration(scrn, TRUE); + diff --git a/packages/x11/driver/xf86-video-intel/patches/intel-2.11-no-pageflipping.diff b/packages/x11/driver/xf86-video-intel/patches/intel-2.11-no-pageflipping.diff new file mode 100644 index 0000000000..39500e2e53 --- /dev/null +++ b/packages/x11/driver/xf86-video-intel/patches/intel-2.11-no-pageflipping.diff @@ -0,0 +1,33 @@ +diff -up xf86-video-intel-2.11.0/src/drmmode_display.c.no-flip xf86-video-intel-2.11.0/src/drmmode_display.c +--- xf86-video-intel-2.11.0/src/drmmode_display.c.no-flip 2010-05-03 15:30:19.000000000 -0400 ++++ xf86-video-intel-2.11.0/src/drmmode_display.c 2010-05-03 15:30:59.000000000 -0400 +@@ -1504,10 +1504,15 @@ Bool drmmode_pre_init(ScrnInfoPtr scrn, + gp.value = &has_flipping; + (void)drmCommandWriteRead(intel->drmSubFD, DRM_I915_GETPARAM, &gp, + sizeof(gp)); ++ ++ xf86DrvMsg(scrn->scrnIndex, X_INFO, ++ "Pageflipping %s in kernel, %s disabled in X\n", ++ has_flipping ? "enabled" : "disabled", ++ has_flipping ? "but" : "and"); + if (has_flipping) { + xf86DrvMsg(scrn->scrnIndex, X_INFO, +- "Kernel page flipping support detected, enabling\n"); +- intel->use_pageflipping = TRUE; ++ "Don't panic: https://bugzilla.redhat.com/588421\n"); ++ intel->use_pageflipping = FALSE; + drmmode->flip_count = 0; + drmmode->event_context.version = DRM_EVENT_CONTEXT_VERSION; + drmmode->event_context.vblank_handler = drmmode_vblank_handler; +diff -up xf86-video-intel-2.11.0/src/i830_dri.c.no-flip xf86-video-intel-2.11.0/src/i830_dri.c +--- xf86-video-intel-2.11.0/src/i830_dri.c.no-flip 2010-03-29 14:23:02.000000000 -0400 ++++ xf86-video-intel-2.11.0/src/i830_dri.c 2010-05-03 15:30:19.000000000 -0400 +@@ -1013,7 +1013,7 @@ Bool I830DRI2ScreenInit(ScreenPtr screen + + info.CopyRegion = I830DRI2CopyRegion; + #if DRI2INFOREC_VERSION >= 4 +- if (intel->use_pageflipping) { ++ if (intel->use_pageflipping || 1) { + info.version = 4; + info.ScheduleSwap = I830DRI2ScheduleSwap; + info.GetMSC = I830DRI2GetMSC; diff --git a/packages/x11/driver/xf86-video-intel/patches/intel-2.11.0-vga-clock-max.diff b/packages/x11/driver/xf86-video-intel/patches/intel-2.11.0-vga-clock-max.diff new file mode 100644 index 0000000000..80eeb076b6 --- /dev/null +++ b/packages/x11/driver/xf86-video-intel/patches/intel-2.11.0-vga-clock-max.diff @@ -0,0 +1,16 @@ +diff -up xf86-video-intel-2.11.0/src/drmmode_display.c.jx xf86-video-intel-2.11.0/src/drmmode_display.c +--- xf86-video-intel-2.11.0/src/drmmode_display.c.jx 2010-04-16 10:28:08.000000000 -0400 ++++ xf86-video-intel-2.11.0/src/drmmode_display.c 2010-04-26 15:28:58.000000000 -0400 +@@ -689,6 +689,12 @@ drmmode_output_mode_valid(xf86OutputPtr + else + return MODE_OK; + } ++ ++ /* I don't actually believe any VGA is this good */ ++ if (koutput->connector_type == DRM_MODE_CONNECTOR_VGA) ++ if (pModes->Clock > 250000) ++ return MODE_CLOCK_HIGH; ++ + return MODE_OK; + } + diff --git a/packages/x11/driver/xf86-video-intel/patches/intel-2.8.0-kms-get-crtc.diff b/packages/x11/driver/xf86-video-intel/patches/intel-2.8.0-kms-get-crtc.diff new file mode 100644 index 0000000000..e7e8569422 --- /dev/null +++ b/packages/x11/driver/xf86-video-intel/patches/intel-2.8.0-kms-get-crtc.diff @@ -0,0 +1,23 @@ +diff -up xf86-video-intel-20090908/src/drmmode_display.c.jx xf86-video-intel-20090908/src/drmmode_display.c +--- xf86-video-intel-20090908/src/drmmode_display.c.jx 2009-09-08 14:30:55.000000000 -0400 ++++ xf86-video-intel-20090908/src/drmmode_display.c 2009-09-08 14:31:09.000000000 -0400 +@@ -1195,8 +1195,19 @@ drmmode_output_get_property(xf86OutputPt + return TRUE; + } + ++#ifdef RANDR_GET_CRTC_INTERFACE ++static xf86CrtcPtr ++drmmode_get_crtc(xf86OutputPtr output) ++{ ++ return output->crtc; ++} ++#endif ++ + static const xf86OutputFuncsRec drmmode_output_funcs = { + .create_resources = drmmode_output_create_resources, ++#ifdef RANDR_GET_CRTC_INTERFACE ++ .get_crtc = drmmode_get_crtc, ++#endif + #ifdef RANDR_12_INTERFACE + .set_property = drmmode_output_set_property, + .get_property = drmmode_output_get_property, diff --git a/packages/x11/driver/xf86-video-intel/patches/uevent.diff b/packages/x11/driver/xf86-video-intel/patches/uevent.diff index b978d4774c..ab040fab9b 100644 --- a/packages/x11/driver/xf86-video-intel/patches/uevent.diff +++ b/packages/x11/driver/xf86-video-intel/patches/uevent.diff @@ -1,7 +1,7 @@ -diff -up xf86-video-intel-2.10.0/src/i830_driver.c.dave xf86-video-intel-2.10.0/src/i830_driver.c ---- xf86-video-intel-2.10.0/src/i830_driver.c.dave 2010-01-13 18:48:49.000000000 +1000 -+++ xf86-video-intel-2.10.0/src/i830_driver.c 2010-01-13 18:51:09.000000000 +1000 -@@ -83,6 +83,8 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. +diff -up xf86-video-intel-2.12.0/src/i830_driver.c.uevent xf86-video-intel-2.12.0/src/i830_driver.c +--- xf86-video-intel-2.12.0/src/i830_driver.c.uevent 2010-06-24 16:29:49.000000000 -0400 ++++ xf86-video-intel-2.12.0/src/i830_driver.c 2010-06-25 11:40:01.335975581 -0400 +@@ -81,6 +81,8 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. #include "i915_drm.h" #include @@ -10,7 +10,7 @@ diff -up xf86-video-intel-2.10.0/src/i830_driver.c.dave xf86-video-intel-2.10.0/ #define BIT(x) (1 << (x)) #define MAX(a,b) ((a) > (b) ? (a) : (b)) #define NB_OF(x) (sizeof (x) / sizeof (*x)) -@@ -1167,6 +1169,80 @@ int i830_crtc_to_pipe(xf86CrtcPtr crtc) +@@ -996,6 +998,80 @@ int i830_crtc_to_pipe(xf86CrtcPtr crtc) return drmmode_get_pipe_from_crtc_id(intel->bufmgr, crtc); } @@ -91,16 +91,16 @@ diff -up xf86-video-intel-2.10.0/src/i830_driver.c.dave xf86-video-intel-2.10.0/ static Bool I830ScreenInit(int scrnIndex, ScreenPtr screen, int argc, char **argv) { -@@ -1425,6 +1501,8 @@ I830ScreenInit(int scrnIndex, ScreenPtr +@@ -1233,6 +1309,8 @@ I830ScreenInit(int scrnIndex, ScreenPtr intel->suspended = FALSE; + I830UeventInit(scrn); + - return TRUE; + return uxa_resources_init(screen); } -@@ -1529,7 +1607,8 @@ static Bool I830CloseScreen(int scrnInde +@@ -1306,7 +1384,8 @@ static Bool I830CloseScreen(int scrnInde { ScrnInfoPtr scrn = xf86Screens[scrnIndex]; intel_screen_private *intel = intel_get_screen_private(scrn); @@ -110,9 +110,9 @@ diff -up xf86-video-intel-2.10.0/src/i830_driver.c.dave xf86-video-intel-2.10.0/ if (scrn->vtSema == TRUE) { I830LeaveVT(scrnIndex, 0); } -diff -up xf86-video-intel-2.10.0/src/i830.h.dave xf86-video-intel-2.10.0/src/i830.h ---- xf86-video-intel-2.10.0/src/i830.h.dave 2010-01-13 18:48:50.000000000 +1000 -+++ xf86-video-intel-2.10.0/src/i830.h 2010-01-13 18:50:01.000000000 +1000 +diff -up xf86-video-intel-2.12.0/src/i830.h.uevent xf86-video-intel-2.12.0/src/i830.h +--- xf86-video-intel-2.12.0/src/i830.h.uevent 2010-06-24 16:29:49.000000000 -0400 ++++ xf86-video-intel-2.12.0/src/i830.h 2010-06-25 11:39:15.665029821 -0400 @@ -47,6 +47,8 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN #ifndef _I830_H_ #define _I830_H_ @@ -122,7 +122,7 @@ diff -up xf86-video-intel-2.10.0/src/i830.h.dave xf86-video-intel-2.10.0/src/i83 #include "xf86_OSproc.h" #include "compiler.h" #include "xf86PciInfo.h" -@@ -385,6 +387,9 @@ typedef struct intel_screen_private { +@@ -432,6 +434,9 @@ typedef struct intel_screen_private { */ Bool fallback_debug; unsigned debug_flush; @@ -132,15 +132,15 @@ diff -up xf86-video-intel-2.10.0/src/i830.h.dave xf86-video-intel-2.10.0/src/i83 } intel_screen_private; enum { -diff -up xf86-video-intel-2.10.0/src/Makefile.am.dave xf86-video-intel-2.10.0/src/Makefile.am ---- xf86-video-intel-2.10.0/src/Makefile.am.dave 2010-01-05 08:09:52.000000000 +1000 -+++ xf86-video-intel-2.10.0/src/Makefile.am 2010-01-13 18:49:14.000000000 +1000 +diff -up xf86-video-intel-2.12.0/src/Makefile.am.uevent xf86-video-intel-2.12.0/src/Makefile.am +--- xf86-video-intel-2.12.0/src/Makefile.am.uevent 2010-06-24 16:29:37.000000000 -0400 ++++ xf86-video-intel-2.12.0/src/Makefile.am 2010-06-25 11:39:15.665029821 -0400 @@ -32,7 +32,7 @@ AM_CFLAGS = @CWARNFLAGS@ @XORG_CFLAGS@ @ intel_drv_la_LTLIBRARIES = intel_drv.la intel_drv_la_LDFLAGS = -module -avoid-version intel_drv_ladir = @moduledir@/drivers -intel_drv_la_LIBADD = -lm @DRM_LIBS@ -ldrm_intel ../uxa/libuxa.la -+intel_drv_la_LIBADD = -lm @DRM_LIBS@ -ldrm_intel ../uxa/libuxa.la -ludev ++intel_drv_la_LIBADD = -ludev -lm @DRM_LIBS@ -ldrm_intel ../uxa/libuxa.la intel_drv_la_LIBADD += @PCIACCESS_LIBS@ INTEL_DRI_SRCS = \ diff --git a/packages/x11/xserver/xorg-server/patches/75_nvidia-drv.diff b/packages/x11/xserver/xorg-server/patches/75_nvidia-drv.diff index 0947dbc493..170d7d8cca 100644 --- a/packages/x11/xserver/xorg-server/patches/75_nvidia-drv.diff +++ b/packages/x11/xserver/xorg-server/patches/75_nvidia-drv.diff @@ -1,12 +1,12 @@ -diff -Naur xorg-server-1.8.99.903/hw/xfree86/common/xf86pciBus.c xorg-server-1.8.99.903.patch/hw/xfree86/common/xf86pciBus.c ---- xorg-server-1.8.99.903/hw/xfree86/common/xf86pciBus.c 2010-06-10 16:07:55.000000000 +0200 -+++ xorg-server-1.8.99.903.patch/hw/xfree86/common/xf86pciBus.c 2010-06-27 01:06:57.977808296 +0200 -@@ -1129,7 +1129,7 @@ +diff -Naur xorg-server-1.7.99.1/hw/xfree86/common/xf86AutoConfig.c xorg-server-1.7.99.1.patch/hw/xfree86/common/xf86AutoConfig.c +--- xorg-server-1.7.99.1/hw/xfree86/common/xf86AutoConfig.c 2009-10-13 19:04:27.000000000 +0200 ++++ xorg-server-1.7.99.1.patch/hw/xfree86/common/xf86AutoConfig.c 2009-12-04 21:39:57.414303608 +0100 +@@ -192,7 +192,7 @@ break; case 0x102b: driverList[0] = "mga"; break; case 0x10c8: driverList[0] = "neomagic"; break; - case 0x10de: case 0x12d2: driverList[0] = "nv"; break; + case 0x10de: case 0x12d2: driverList[0] = "nvidia"; break; case 0x1106: driverList[0] = "openchrome"; break; - case 0x1b36: driverList[0] = "qxl"; break; case 0x1163: driverList[0] = "rendition"; break; + case 0x5333: diff --git a/packages/x11/xserver/xorg-server/patches/cache-xkbcomp-output-for-fast-start-up.diff b/packages/x11/xserver/xorg-server/patches/cache-xkbcomp-output-for-fast-start-up.diff new file mode 100644 index 0000000000..20ba82f0fd --- /dev/null +++ b/packages/x11/xserver/xorg-server/patches/cache-xkbcomp-output-for-fast-start-up.diff @@ -0,0 +1,358 @@ +From d2d3bcc9e23b9a4bea9f67a06cd23aa3ce7f4b59 Mon Sep 17 00:00:00 2001 +Message-Id: +From: Yan Li +Date: Wed, 10 Mar 2010 14:06:17 +0800 +Subject: [PATCH] XKB: cache xkbcomp output for fast start-up v6 for 1.7.99.901 + +xkbcomp outputs will be cached in files with hashed keymap as +names. This saves boot time for around 1s on commodity netbooks. + +v6: rebased to v1.7.99.901 + +v5: now using a much bigger xkbKeyMapBuf (100k) since the XKB to be + complied may be very large (as seen with + gnome-keyboard-properties), rebased to v1.6.1 + +Signed-off-by: Yan Li +--- + configure.ac | 6 +- + xkb/README.compiled | 8 +- + xkb/ddxLoad.c | 187 +++++++++++++++++++++++++++++++++++++++++---------- + 3 files changed, 159 insertions(+), 42 deletions(-) + +diff --git a/configure.ac b/configure.ac +index de252f3..54a0327 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -527,9 +527,9 @@ AC_MSG_RESULT([$FONTPATH]) + AC_ARG_WITH(xkb-path, AS_HELP_STRING([--with-xkb-path=PATH], [Path to XKB base dir (default: ${datadir}/X11/xkb)]), + [ XKBPATH="$withval" ], + [ XKBPATH="${datadir}/X11/xkb" ]) +-AC_ARG_WITH(xkb-output, AS_HELP_STRING([--with-xkb-output=PATH], [Path to XKB output dir (default: ${datadir}/X11/xkb/compiled)]), ++AC_ARG_WITH(xkb-output, AS_HELP_STRING([--with-xkb-output=PATH], [Path to XKB output dir (default: ${localstatedir}/cache/xkb)]), + [ XKBOUTPUT="$withval" ], +- [ XKBOUTPUT="compiled" ]) ++ [ XKBOUTPUT="${localstatedir}/cache/xkb" ]) + AC_ARG_WITH(default-xkb-rules, AS_HELP_STRING([--with-default-xkb-rules=RULES], + [Keyboard ruleset (default: base/evdev)]), + [ XKB_DFLT_RULES="$withval" ], +@@ -1148,7 +1148,7 @@ AC_DEFINE_DIR(XKB_BIN_DIRECTORY, XKB_BIN_DIRECTORY, [Path to XKB bin dir]) + dnl Make sure XKM_OUTPUT_DIR is an absolute path + XKBOUTPUT_FIRSTCHAR=`echo $XKBOUTPUT | cut -b 1` + if [[ x$XKBOUTPUT_FIRSTCHAR != x/ -a x$XKBOUTPUT_FIRSTCHAR != 'x$' ]] ; then +- XKBOUTPUT="$XKB_BASE_DIRECTORY/$XKBOUTPUT" ++ AC_MSG_ERROR([xkb-output must be an absolute path.]) + fi + + dnl XKM_OUTPUT_DIR (used in code) must end in / or file names get hosed +diff --git a/xkb/README.compiled b/xkb/README.compiled +index 71caa2f..a4a2ae0 100644 +--- a/xkb/README.compiled ++++ b/xkb/README.compiled +@@ -4,10 +4,10 @@ current keymap and/or any scratch keymaps used by clients. The X server + or some other tool might destroy or replace the files in this directory, + so it is not a safe place to store compiled keymaps for long periods of + time. The default keymap for any server is usually stored in: +- X-default.xkm +-where is the display number of the server in question, which makes +-it possible for several servers *on the same host* to share the same +-directory. ++ server-.xkm ++ ++where is the SHA1 hash of keymap source, so that compiled ++keymap of different keymap sources are stored in different files. + + Unless the X server is modified, sharing this directory between servers on + different hosts could cause problems. +diff --git a/xkb/ddxLoad.c b/xkb/ddxLoad.c +index 4ccddda..63b9f97 100644 +--- a/xkb/ddxLoad.c ++++ b/xkb/ddxLoad.c +@@ -30,6 +30,12 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE. + + #include + ++#ifdef HAVE_SHA1_IN_LIBMD /* Use libmd for SHA1 */ ++# include ++#else /* Use OpenSSL's libcrypto */ ++# include /* buggy openssl/sha.h wants size_t */ ++# include ++#endif + #include + #include + #include +@@ -43,24 +49,13 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE. + #define XKBSRV_NEED_FILE_FUNCS + #include + #include ++#include + #include "xkb.h" + + #if defined(CSRG_BASED) || defined(linux) || defined(__GNU__) + #include + #endif + +- /* +- * If XKM_OUTPUT_DIR specifies a path without a leading slash, it is +- * relative to the top-level XKB configuration directory. +- * Making the server write to a subdirectory of that directory +- * requires some work in the general case (install procedure +- * has to create links to /var or somesuch on many machines), +- * so we just compile into /usr/tmp for now. +- */ +-#ifndef XKM_OUTPUT_DIR +-#define XKM_OUTPUT_DIR "compiled/" +-#endif +- + #define PRE_ERROR_MSG "\"The XKEYBOARD keymap compiler (xkbcomp) reports:\"" + #define ERROR_PREFIX "\"> \"" + #define POST_ERROR_MSG1 "\"Errors from xkbcomp are not fatal to the X server\"" +@@ -175,6 +170,45 @@ OutputDirectory( + } + + static Bool ++Sha1Asc(char sha1Asc[SHA_DIGEST_LENGTH*2+1], const char * input) ++{ ++ int i; ++ unsigned char sha1[SHA_DIGEST_LENGTH]; ++ ++#ifdef HAVE_SHA1_IN_LIBMD /* Use libmd for SHA1 */ ++ SHA1_CTX ctx; ++ ++ SHA1Init (&ctx); ++ SHA1Update (&ctx, input, strlen(input)); ++ SHA1Final (sha1, &ctx); ++#else /* Use OpenSSL's libcrypto */ ++ SHA_CTX ctx; ++ int success; ++ ++ success = SHA1_Init (&ctx); ++ if (! success) ++ return BadAlloc; ++ ++ success = SHA1_Update (&ctx, input, strlen(input)); ++ if (! success) ++ return BadAlloc; ++ ++ success = SHA1_Final (sha1, &ctx); ++ if (! success) ++ return BadAlloc; ++#endif ++ ++ /* convert sha1 to sha1_asc */ ++ for(i=0; i nameRtrnLen) && nameRtrn) { ++ ErrorF("[xkb] nameRtrn too small to hold xkmfile name\n"); ++ return FALSE; ++ } ++ strncpy(nameRtrn, xkmfile, nameRtrnLen); ++ ++ /* if the xkm file already exists, reuse it */ ++ canonicalXkmFileName = Xprintf("%s%s.xkm", xkm_output_dir, xkmfile); ++ if (access(canonicalXkmFileName, R_OK) == 0) { ++ /* yes, we can reuse the old xkm file */ ++ LogMessage(X_INFO, "XKB: reuse xkmfile %s\n", canonicalXkmFileName); ++ result = TRUE; ++ goto _ret; ++ } ++ LogMessage(X_INFO, "XKB: generating xkmfile %s\n", canonicalXkmFileName); ++ ++ /* continue to call xkbcomp to compile the keymap. to avoid race ++ condition, we compile it to a tmpfile then rename it to ++ xkmfile */ ++ + #ifdef WIN32 + strcpy(tmpname, Win32TempDir()); + strcat(tmpname, "\\xkb_XXXXXX"); +@@ -225,19 +315,30 @@ XkbDDXCompileKeymapByNames( XkbDescPtr xkb, + } + } + ++ if ( (tmpXkmFile = tempnam(xkm_output_dir, NULL)) == NULL ) { ++ ErrorF("[xkb] Can't generate temp xkm file name"); ++ result = FALSE; ++ goto _ret; ++ } ++ + buf = Xprintf("\"%s%sxkbcomp\" -w %d %s -xkm \"%s\" " +- "-em1 %s -emp %s -eml %s \"%s%s.xkm\"", ++ "-em1 %s -emp %s -eml %s \"%s\"", + xkbbindir, xkbbindirsep, + ( (xkbDebugFlags < 2) ? 1 : + ((xkbDebugFlags > 10) ? 10 : (int)xkbDebugFlags) ), +- xkbbasedirflag, xkmfile, ++ xkbbasedirflag, xkbfile, + PRE_ERROR_MSG, ERROR_PREFIX, POST_ERROR_MSG1, +- xkm_output_dir, keymap); ++ tmpXkmFile); + + if (xkbbasedirflag != emptystring) { + xfree(xkbbasedirflag); + } + ++ /* there's a potential race condition between calling tempnam() ++ and invoking xkbcomp to write the result file (potential temp ++ file name conflicts), but since xkbcomp is a standalone ++ program, we have to live with this */ ++ + #ifndef WIN32 + out= Popen(buf,"w"); + #else +@@ -245,31 +346,41 @@ XkbDDXCompileKeymapByNames( XkbDescPtr xkb, + #endif + + if (out!=NULL) { +-#ifdef DEBUG +- if (xkbDebugFlags) { +- ErrorF("[xkb] XkbDDXCompileKeymapByNames compiling keymap:\n"); +- XkbWriteXKBKeymapForNames(stderr,names,xkb,want,need); +- } +-#endif +- XkbWriteXKBKeymapForNames(out,names,xkb,want,need); ++ /* write XKBKeyMapBuf to xkbcomp */ ++ if (EOF==fputs(xkbKeyMapBuf, out)) ++ { ++ ErrorF("[xkb] Sending keymap to xkbcomp failed\n"); ++ result = FALSE; ++ goto _ret; ++ } + #ifndef WIN32 + if (Pclose(out)==0) + #else + if (fclose(out)==0 && System(buf) >= 0) + #endif + { ++ /* xkbcomp success */ + if (xkbDebugFlags) + DebugF("[xkb] xkb executes: %s\n",buf); +- if (nameRtrn) { +- strncpy(nameRtrn,keymap,nameRtrnLen); +- nameRtrn[nameRtrnLen-1]= '\0'; ++ /* if canonicalXkmFileName already exists now, we simply ++ overwrite it, this is OK */ ++ ret = rename(tmpXkmFile, canonicalXkmFileName); ++ if (0 != ret) { ++ ErrorF("[xkb] Can't rename %s to %s, error: %s\n", ++ tmpXkmFile, canonicalXkmFileName, ++ strerror(errno)); ++ ++ /* in case of error, don't unlink tmpXkmFile, leave it ++ for debugging */ ++ ++ result = FALSE; ++ goto _ret; + } +- if (buf != NULL) +- xfree (buf); +- return TRUE; ++ result = TRUE; ++ goto _ret; + } + else +- LogMessage(X_ERROR, "Error compiling keymap (%s)\n", keymap); ++ LogMessage(X_ERROR, "Error compiling keymap (%s)\n", xkbfile); + #ifdef WIN32 + /* remove the temporary file */ + unlink(tmpname); +@@ -284,9 +395,16 @@ XkbDDXCompileKeymapByNames( XkbDescPtr xkb, + } + if (nameRtrn) + nameRtrn[0]= '\0'; ++ result = FALSE; ++ ++_ret: ++ if (tmpXkmFile) ++ free(tmpXkmFile); ++ if (canonicalXkmFileName) ++ xfree(canonicalXkmFileName); + if (buf != NULL) + xfree (buf); +- return FALSE; ++ return result; + } + + static FILE * +@@ -370,7 +488,6 @@ unsigned missing; + DebugF("Loaded XKB keymap %s, defined=0x%x\n",fileName,(*xkbRtrn)->defined); + } + fclose(file); +- (void) unlink (fileName); + return (need|want)&(~missing); + } + +-- +1.5.6.5 + diff --git a/packages/x11/xserver/xorg-server/patches/use-sloppy-heuristic-first-for-initial-mode.diff b/packages/x11/xserver/xorg-server/patches/use-sloppy-heuristic-first-for-initial-mode.diff index 4b10d35581..4960634cd1 100644 --- a/packages/x11/xserver/xorg-server/patches/use-sloppy-heuristic-first-for-initial-mode.diff +++ b/packages/x11/xserver/xorg-server/patches/use-sloppy-heuristic-first-for-initial-mode.diff @@ -1,16 +1,17 @@ -diff -Naur xorg-server-1.8.99.903/hw/xfree86/modes/xf86Crtc.c xorg-server-1.8.99.903.patch/hw/xfree86/modes/xf86Crtc.c ---- xorg-server-1.8.99.903/hw/xfree86/modes/xf86Crtc.c 2010-06-15 23:39:25.000000000 +0200 -+++ xorg-server-1.8.99.903.patch/hw/xfree86/modes/xf86Crtc.c 2010-06-27 00:53:28.722808399 +0200 -@@ -2379,10 +2379,10 @@ - xf86DrvMsg(i, X_INFO, "Using user preference for initial modes\n"); - else if (xf86TargetPreferred(scrn, config, modes, enabled, width, height)) - xf86DrvMsg(i, X_INFO, "Using exact sizes for initial modes\n"); -- else if (xf86TargetAspect(scrn, config, modes, enabled, width, height)) -- xf86DrvMsg(i, X_INFO, "Using fuzzy aspect match for initial modes\n"); - else if (xf86TargetFallback(scrn, config, modes, enabled, width, height)) - xf86DrvMsg(i, X_INFO, "Using sloppy heuristic for initial modes\n"); -+ else if (xf86TargetAspect(scrn, config, modes, enabled, width, height)) -+ xf86DrvMsg(i, X_INFO, "Using fuzzy aspect match for initial modes\n"); - else - xf86DrvMsg(i, X_WARNING, "Unable to find initial modes\n"); - } +diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c +index 84d3cac..673612f 100644 +--- a/hw/xfree86/modes/xf86Crtc.c ++++ b/hw/xfree86/modes/xf86Crtc.c +@@ -2248,10 +2248,10 @@ xf86InitialConfiguration (ScrnInfoPtr scrn, Bool canGrow) + xf86DrvMsg(i, X_INFO, "Using user preference for initial modes\n"); + else if (xf86TargetPreferred(scrn, config, modes, enabled, width, height)) + xf86DrvMsg(i, X_INFO, "Using exact sizes for initial modes\n"); +- else if (xf86TargetAspect(scrn, config, modes, enabled, width, height)) +- xf86DrvMsg(i, X_INFO, "Using fuzzy aspect match for initial modes\n"); + else if (xf86TargetFallback(scrn, config, modes, enabled, width, height)) + xf86DrvMsg(i, X_INFO, "Using sloppy heuristic for initial modes\n"); ++ else if (xf86TargetAspect(scrn, config, modes, enabled, width, height)) ++ xf86DrvMsg(i, X_INFO, "Using fuzzy aspect match for initial modes\n"); + else + xf86DrvMsg(i, X_WARNING, "Unable to find initial modes\n"); + diff --git a/packages/x11/xserver/xorg-server/url b/packages/x11/xserver/xorg-server/url index 9b077fe08f..3a137b824f 100644 --- a/packages/x11/xserver/xorg-server/url +++ b/packages/x11/xserver/xorg-server/url @@ -1 +1 @@ -http://xorg.freedesktop.org/archive/individual/xserver/xorg-server-1.8.99.903.tar.bz2 \ No newline at end of file +http://xorg.freedesktop.org/archive/individual/xserver/xorg-server-1.8.1.902.tar.bz2