summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorroot <root@rshg054.dnsready.net>2012-04-17 00:01:34 +0000
committerroot <root@rshg054.dnsready.net>2012-04-17 00:01:34 +0000
commitd1bfef207c6695736de171fc604b68eab0c1f1cd (patch)
treeaead3dfb062624c07d4ce9b8d1d05255eb9f4ec3
parentea3d877b99c32e3a9e00ab220440d4518430e5bc (diff)
Tue Apr 17 00:01:34 UTC 2012
-rw-r--r--community-testing/dee/PKGBUILD11
-rw-r--r--community-testing/gnote/PKGBUILD33
-rw-r--r--community-testing/gnote/gnote.install21
-rw-r--r--community-testing/openttd/PKGBUILD13
-rw-r--r--community/acpid/PKGBUILD6
-rw-r--r--community/assimp/PKGBUILD29
-rw-r--r--community/bitcoin/PKGBUILD62
-rw-r--r--community/bitcoin/bitcoin-qt.install11
-rw-r--r--community/desmume/PKGBUILD21
-rw-r--r--community/glfw/PKGBUILD6
-rw-r--r--community/midori/PKGBUILD6
-rw-r--r--community/mythtv/PKGBUILD8
-rw-r--r--community/mythtv/mythbackend.conf1
-rw-r--r--community/naev/PKGBUILD6
-rw-r--r--community/sslh/PKGBUILD29
-rw-r--r--community/sslh/sslh.rc4
-rw-r--r--community/sslh/sslh.service9
-rw-r--r--community/uget/PKGBUILD13
-rw-r--r--core/expat/PKGBUILD2
-rw-r--r--core/gmp/PKGBUILD2
-rw-r--r--core/pkg-config/PKGBUILD2
-rw-r--r--extra/llvm/PKGBUILD4
-rw-r--r--extra/tomcat-native/PKGBUILD6
-rw-r--r--extra/xf86-video-intel/0001-uxa-gen3-Remove-special-casing-of-solid-pictures.patch533
-rw-r--r--extra/xf86-video-intel/0002-uxa-Defer-the-call-to-EnterVT-till-after-outputs-are.patch50
-rw-r--r--extra/xf86-video-intel/0003-uxa-Remove-hook-for-CompositeRectangles.patch255
-rw-r--r--extra/xf86-video-intel/0004-uxa-Remove-broken-render-glyphs-to-dst.patch391
-rw-r--r--extra/xf86-video-intel/0005-uxa-Fix-leak-of-glyph-mask-for-unhandled-glyph-compo.patch40
-rw-r--r--extra/xf86-video-intel/PKGBUILD27
-rw-r--r--libre/linux-libre-api-headers/PKGBUILD21
-rw-r--r--libre/linux-libre-lts/.directory2
-rw-r--r--libre/linux-libre-lts/PKGBUILD4
-rw-r--r--libre/linux-libre-lts/linux-libre-lts.install2
-rw-r--r--libre/python2-libre/13156-revert-tls-changeset-subinterpreter.patch61
-rw-r--r--staging/nx-common/NXproto.h.64bit.diff66
-rw-r--r--staging/nx-common/PKGBUILD45
-rw-r--r--staging/nx-common/nx-3.5.0-libpng15.patch30
-rw-r--r--staging/nx-common/nxcompsh-gcc43.patch19
-rw-r--r--staging/nx/PKGBUILD91
-rw-r--r--staging/nx/nx-x11.ld.so.conf.d1
-rw-r--r--testing/calligra/PKGBUILD82
-rw-r--r--testing/gdk-pixbuf2/PKGBUILD6
-rw-r--r--testing/gdk-pixbuf2/gdk-pixbuf2.install2
-rw-r--r--testing/gdm/PKGBUILD14
-rw-r--r--testing/gnome-applets/PKGBUILD36
-rw-r--r--testing/gnome-applets/gnome-applets.install22
-rw-r--r--testing/gnome-screensaver/PKGBUILD16
-rw-r--r--testing/gnome-screensaver/gnome-screensaver.install2
-rw-r--r--testing/xf86-video-ati/0000-poor-man-s-solid-picture-support-for-r300-r600.patch571
-rw-r--r--testing/xf86-video-ati/0001-poor-man-s-solid-picture-support-for-evergreen.patch290
-rw-r--r--testing/xf86-video-ati/0002-poor-man-s-solid-picture-support-for-r100.patch182
-rw-r--r--testing/xf86-video-ati/0003-poor-man-s-solid-picture-support-for-r200.patch179
-rw-r--r--testing/xf86-video-ati/PKGBUILD27
-rw-r--r--testing/xorg-server/10-quirks.conf10
-rw-r--r--testing/xorg-server/EXA_Fall_back_earlier_and_more_thoroughly_from_exaGlyphsV2.diff116
-rw-r--r--testing/xorg-server/PKGBUILD201
-rw-r--r--testing/xorg-server/autoconfig-nvidia.patch28
-rw-r--r--testing/xorg-server/autoconfig-sis.patch21
-rw-r--r--testing/xorg-server/git-fixes.patch161
-rw-r--r--testing/xorg-server/xvfb-run180
-rw-r--r--testing/xorg-server/xvfb-run.1282
61 files changed, 4209 insertions, 162 deletions
diff --git a/community-testing/dee/PKGBUILD b/community-testing/dee/PKGBUILD
index e65c2d80c..0b9480261 100644
--- a/community-testing/dee/PKGBUILD
+++ b/community-testing/dee/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 69158 2012-04-09 22:02:32Z bgyorgy $
+# $Id: PKGBUILD 69402 2012-04-15 21:43:27Z bgyorgy $
# Maintainer: Balló György <ballogyor+arch at gmail dot com>
pkgname=dee
-pkgver=1.0.8
+pkgver=1.0.10
pkgrel=1
pkgdesc="Library to provide objects allowing to create Model-View-Controller type programs across DBus"
arch=('i686' 'x86_64')
@@ -11,14 +11,11 @@ license=('LGPL')
depends=('glib2' 'icu')
makedepends=('python2' 'gobject-introspection' 'vala')
options=('!libtool')
-source=(http://launchpad.net/$pkgname/1.0/$pkgver/+download/$pkgname-$pkgver.tar.gz
- fix-crash.patch)
-md5sums=('e9dbf5526ac4aca5a001e87e8cea516d'
- 'e6e95a783dd1f3aa0accc7410a5783e1')
+source=(http://launchpad.net/$pkgname/1.0/$pkgver/+download/$pkgname-$pkgver.tar.gz)
+md5sums=('17b715147e1721ce9624557949408d15')
build() {
cd "$srcdir/$pkgname-$pkgver"
- patch -Np0 -i "$srcdir/fix-crash.patch"
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
--disable-static --disable-tests \
diff --git a/community-testing/gnote/PKGBUILD b/community-testing/gnote/PKGBUILD
new file mode 100644
index 000000000..04a2ec7de
--- /dev/null
+++ b/community-testing/gnote/PKGBUILD
@@ -0,0 +1,33 @@
+# $Id: PKGBUILD 69398 2012-04-15 18:10:39Z ibiru $
+# Maintainer: Ionut Biru <ibiru@archlinux.org>
+# Contributor: uastasi <uastasi@archlinux.us>
+pkgname=gnote
+pkgver=0.8.3
+pkgrel=1
+pkgdesc="A note taking application."
+arch=('i686' 'x86_64')
+url="http://live.gnome.org/Gnote"
+license=('GPL3')
+depends=('gtkmm3' 'libxslt' 'hicolor-icon-theme' 'desktop-file-utils' 'dconf')
+makedepends=('intltool' 'gnome-doc-utils' 'boost')
+options=('!libtool')
+install=gnote.install
+source=(http://ftp.gnome.org/pub/gnome/sources/$pkgname/0.8/$pkgname-$pkgver.tar.xz)
+sha256sums=('41308f957b9cb6f885adb61a607b93ec969be069676e7d518c007ecf35f474ab')
+
+build() {
+ cd "$pkgname-$pkgver"
+ ./configure --prefix=/usr \
+ --sysconfdir=/etc \
+ --localstatedir=/var \
+ --libexecdir=/usr/lib/gnote \
+ --disable-scrollkeeper \
+ --disable-schemas-compile \
+ --disable-static
+ make
+}
+
+package() {
+ cd "$pkgname-$pkgver"
+ make DESTDIR="$pkgdir" install
+}
diff --git a/community-testing/gnote/gnote.install b/community-testing/gnote/gnote.install
new file mode 100644
index 000000000..0f8eb1012
--- /dev/null
+++ b/community-testing/gnote/gnote.install
@@ -0,0 +1,21 @@
+pkgname=gnote
+
+post_install() {
+ glib-compile-schemas usr/share/glib-2.0/schemas
+ gtk-update-icon-cache -q -t -f usr/share/icons/hicolor
+ update-desktop-database -q
+}
+
+pre_upgrade() {
+ if [ -f usr/share/gconf/schemas/${pkgname}.schemas ]; then
+ usr/sbin/gconfpkg --uninstall ${pkgname}
+ fi
+}
+
+post_upgrade() {
+ post_install
+}
+
+post_remove() {
+ post_install
+}
diff --git a/community-testing/openttd/PKGBUILD b/community-testing/openttd/PKGBUILD
index c546a3db3..4be724378 100644
--- a/community-testing/openttd/PKGBUILD
+++ b/community-testing/openttd/PKGBUILD
@@ -1,9 +1,8 @@
-# $Id: PKGBUILD 69106 2012-04-09 13:50:09Z tdziedzic $
+# $Id: PKGBUILD 69388 2012-04-15 14:15:44Z lcarlier $
# Maintainer: Vesa Kaihlavirta <vegai@iki.fi>
pkgname=openttd
-pkgver=1.2.0rc4
-_realpkgver=1.2.0-RC4
+pkgver=1.2.0
pkgrel=1
pkgdesc='An engine for running Transport Tycoon Deluxe.'
arch=('i686' 'x86_64')
@@ -13,11 +12,11 @@ depends=('libpng' 'sdl' 'icu' 'fontconfig' 'lzo2' 'hicolor-icon-theme' 'desktop-
install=openttd.install
optdepends=('openttd-opengfx: free graphics'
'openttd-opensfx: free soundset')
-source=("http://binaries.openttd.org/releases/${_realpkgver}/${pkgname}-${_realpkgver}-source.tar.xz")
-md5sums=('b8692deb951dc3a88c321a9e4b254dd2')
+source=("http://binaries.openttd.org/releases/${pkgver}/${pkgname}-${pkgver}-source.tar.xz")
+md5sums=('7f5181fdd5119336ccbe08f47eab78c1')
build() {
- cd ${pkgname}-${_realpkgver}
+ cd ${pkgname}-${pkgver}
./configure \
--prefix-dir=/usr \
@@ -33,7 +32,7 @@ build() {
}
package() {
- cd ${pkgname}-${_realpkgver}
+ cd ${pkgname}-${pkgver}
make install
}
diff --git a/community/acpid/PKGBUILD b/community/acpid/PKGBUILD
index 66537479d..53ff54a87 100644
--- a/community/acpid/PKGBUILD
+++ b/community/acpid/PKGBUILD
@@ -1,11 +1,11 @@
-# $Id: PKGBUILD 68371 2012-03-23 10:07:50Z seblu $
+# $Id: PKGBUILD 69396 2012-04-15 17:01:41Z seblu $
# Maintainer: Sébastien Luttringer <seblu@aur.archlinux.org>
# Contributor: xduugu
# Contributor: Manolis Tzanidakis
# Contributor: Jonathan Schmidt <j.schmidt@archlinux.us
pkgname=acpid
-pkgver=2.0.15
+pkgver=2.0.16
pkgrel=1
pkgdesc='A daemon for delivering ACPI power management events with netlink support'
arch=('i686' 'x86_64')
@@ -20,7 +20,7 @@ source=("http://www.tedfelix.com/linux/$pkgname-$pkgver.tar.xz"
'anything'
'handler.sh'
'acpid.conf.d')
-md5sums=('1b1c8775adab6a994a386c45af6b86dc'
+md5sums=('d59fc02c9c34f0d5c137495302e2c074'
'd69203a032c4583f9abaafcf21a7ed84'
'2d37b98d6e74bab815604b8b48c6cfd4'
'615439f4a89716c747907d4fc3c8df75'
diff --git a/community/assimp/PKGBUILD b/community/assimp/PKGBUILD
new file mode 100644
index 000000000..8dc5bff69
--- /dev/null
+++ b/community/assimp/PKGBUILD
@@ -0,0 +1,29 @@
+# Maintainer: Sven-Hendrik Haase <sh@lutzhaase.com>
+# Contributor: jepaan <jepaan at hotmail dot com>
+
+pkgname=assimp
+pkgver=2.0.863
+pkgrel=1
+pkgdesc="Portable Open Source library to import various well-known 3D model formats in an uniform manner"
+arch=('i686' 'x86_64')
+license=('BSD')
+makedepends=('cmake' 'boost')
+url=('http://assimp.sourceforge.net/index.html')
+source=("http://downloads.sourceforge.net/assimp/assimp--${pkgver}-sdk.zip")
+md5sums=('9f41662501bd9d9533c4cf03b7c25d5b')
+
+build() {
+ cd ${srcdir}
+ mkdir build
+ cd build
+ cmake ../${pkgname}--${pkgver}-sdk \
+ -DCMAKE_INSTALL_PREFIX=/usr
+ make
+}
+
+package() {
+ cd ${srcdir}/build
+
+ make DESTDIR=$pkgdir install
+ install -Dm644 ${srcdir}/${pkgname}--${pkgver}-sdk/LICENSE ${pkgdir}/usr/share/licenses/${pkgname}/LICENSE
+}
diff --git a/community/bitcoin/PKGBUILD b/community/bitcoin/PKGBUILD
new file mode 100644
index 000000000..00d2cc85f
--- /dev/null
+++ b/community/bitcoin/PKGBUILD
@@ -0,0 +1,62 @@
+# $Id: PKGBUILD 69400 2012-04-15 20:25:26Z tredaelli $
+# Maintainer: Timothy Redaelli <timothy.redaelli@gmail.com>
+# Contributor: shahid <helllamer@gmail.com>
+
+pkgbase=bitcoin
+pkgname=('bitcoin-daemon' 'bitcoin-qt')
+pkgver=0.6.0
+pkgrel=1
+arch=('i686' 'x86_64')
+url="http://www.bitcoin.org/"
+makedepends=('boost' 'automoc4' 'miniupnpc')
+conflicts=('bitcoin' 'bitcoin-bin' 'bitcoin-git')
+replaces=('bitcoin' 'bitcoin-bin' 'bitcoin-git')
+license=('MIT')
+source=("http://downloads.sourceforge.net/sourceforge/${pkgbase}/${pkgbase}-${pkgver}-linux.tar.gz")
+sha256sums=('13faa8b7c8c9ce3518ebe31ff2d97920f4feb4f06c1d08455b272fdaaeeb1f97')
+
+build() {
+ cd "$srcdir/$pkgbase-$pkgver-linux/src"
+
+ # FIXME GCC 4.7.0 is too strict
+ echo "QMAKE_CXXFLAGS += $CXXFLAGS -fpermissive" >> bitcoin-qt.pro
+
+ # and make qt gui
+ qmake
+ make
+
+ # make bitcoind
+ make -f makefile.unix -C src CXXFLAGS="$CXXFLAGS -fpermissive" USE_UPNP=1
+}
+
+
+package_bitcoin-qt() {
+ pkgdesc="Bitcoin is a peer-to-peer network based digital currency - QT"
+ depends=(boost-libs qt miniupnpc)
+ install=bitcoin-qt.install
+
+ cd "$srcdir/$pkgbase-$pkgver-linux/src"
+ install -Dm755 bitcoin-qt "$pkgdir"/usr/bin/bitcoin-qt
+ install -Dm644 contrib/debian/bitcoin-qt.desktop \
+ "$pkgdir"/usr/share/applications/bitcoin.desktop
+ install -Dm644 share/pixmaps/bitcoin80.xpm \
+ "$pkgdir"/usr/share/pixmaps/bitcoin80.xpm
+
+ install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING"
+}
+
+package_bitcoin-daemon() {
+ pkgdesc="Bitcoin is a peer-to-peer network based digital currency - daemon"
+ depends=(boost-libs miniupnpc openssl)
+
+ cd "$srcdir/$pkgbase-$pkgver-linux/src"
+ install -Dm755 src/bitcoind "$pkgdir"/usr/bin/bitcoind
+ install -Dm644 contrib/debian/examples/bitcoin.conf \
+ "$pkgdir/usr/share/doc/$pkgname/examples/bitcoin.conf"
+ install -Dm644 contrib/debian/manpages/bitcoind.1 \
+ "$pkgdir"/usr/share/man/man1/bitcoind.1
+ install -Dm644 contrib/debian/manpages/bitcoin.conf.5 \
+ "$pkgdir"/usr/share/man/man5/bitcoin.conf.5
+ install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING"
+}
+
diff --git a/community/bitcoin/bitcoin-qt.install b/community/bitcoin/bitcoin-qt.install
new file mode 100644
index 000000000..f98ba7338
--- /dev/null
+++ b/community/bitcoin/bitcoin-qt.install
@@ -0,0 +1,11 @@
+post_install() {
+ update-desktop-database -q
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+post_remove() {
+ post_install $1
+}
diff --git a/community/desmume/PKGBUILD b/community/desmume/PKGBUILD
index 5138954fd..187177a00 100644
--- a/community/desmume/PKGBUILD
+++ b/community/desmume/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 67526 2012-03-13 10:38:03Z giovanni $
+# $Id: PKGBUILD 69392 2012-04-15 16:03:24Z schuay $
# Maintainer: Jonathan Conder <jonno dot conder at gmail dot com>
# Maintainer: Brad Fanella <bradfanella@archlinux.us>
# Contributor: Arkham <arkham at archlinux dot us>
@@ -11,27 +11,22 @@
# Contributor: Asher256 <achrafcherti at gmail dot com>
pkgname=desmume
-pkgver=0.9.7
-pkgrel=4
+pkgver=0.9.8
+pkgrel=1
pkgdesc="Nintendo DS emulator"
arch=('i686' 'x86_64')
url="http://desmume.org/"
license=('GPL')
-depends=('agg' 'gtkglext' 'libglade' 'desktop-file-utils' 'libpcap')
+depends=('agg' 'gtkglext' 'libglade' 'desktop-file-utils' 'libpcap'
+ 'soundtouch' 'alsa-lib' 'zziplib')
makedepends=('intltool')
-replaces=('desmume-core' 'desmume-cli' 'desmume-gtk' 'desmume-glade')
install=desmume.install
-source=("http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz"
- 'desmume-0.9.7-zlib.1.2.6-fix.patch')
-sha256sums=('0a0f7ef3cc76ff0bbc6f3df47c3689653617074ea7ffc354e9fa1240c5336523'
- 'baaf68be32f09690975d6309af6988c038e708ef322ed7e4b370d87087c7b6ba')
+source=("http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz")
build() {
cd "$srcdir/$pkgname-$pkgver"
- patch -Np1 -i "${srcdir}/desmume-0.9.7-zlib.1.2.6-fix.patch"
- ./configure --prefix=/usr \
- --enable-wifi
+ ./configure --prefix=/usr --enable-wifi
make
}
@@ -40,3 +35,5 @@ package() {
make DESTDIR="$pkgdir/" install
}
+
+sha256sums=('f405b44e2d7ab3578d6be91a6546bbaa0afc60b2a8d193e4415fea5c5332d585')
diff --git a/community/glfw/PKGBUILD b/community/glfw/PKGBUILD
index 452f0cb2e..dda84c6ff 100644
--- a/community/glfw/PKGBUILD
+++ b/community/glfw/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 68357 2012-03-22 23:04:26Z svenstaro $
+# $Id: PKGBUILD 69414 2012-04-16 00:32:44Z svenstaro $
# Maintainer: Sven-Hendrik Haase <sh@lutzhaase.com>
# Contributor: philefou <tuxication AT gmail DOT com>
# Contributor: lindquist <tomas@famolsen.dk>
@@ -7,7 +7,7 @@
# Contributor: SpepS <dreamspepser at yahoo dot it>
pkgname=glfw
-pkgver=2.7.4
+pkgver=2.7.5
pkgrel=1
pkgdesc="A free, open source, portable framework for OpenGL application development"
arch=('i686' 'x86_64')
@@ -16,7 +16,7 @@ license=('custom:ZLIB')
depends=('libgl' 'libxrandr')
makedepends=('mesa')
source=("http://switch.dl.sourceforge.net/sourceforge/$pkgname/$pkgname-$pkgver.tar.bz2")
-md5sums=('cf3843ff6b4324a3e8003252f6b20cd0')
+md5sums=('b9ef11d08b6283b1b4a274fcf995fd79')
build() {
cd "$srcdir/$pkgname-$pkgver"
diff --git a/community/midori/PKGBUILD b/community/midori/PKGBUILD
index de185bc66..22da899e8 100644
--- a/community/midori/PKGBUILD
+++ b/community/midori/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 67337 2012-03-09 05:57:19Z bpiotrowski $
+# $Id: PKGBUILD 69383 2012-04-15 05:22:45Z bpiotrowski $
# Maintainer: Andreas Radke <andyrtr@archlinux.org>
# Contributor: rabyte <rabyte.at.gmail.dot.com>
# Contributor: Johannes Krampf <wuischke.at.amule.dot.org>
pkgname=midori
-pkgver=0.4.4
+pkgver=0.4.5
pkgrel=1
pkgdesc="A lightweight web browser based on Gtk WebKit"
arch=('i686' 'x86_64')
@@ -15,7 +15,7 @@ depends=('libwebkit>=1.3.13' 'libunique' 'hicolor-icon-theme' 'desktop-file-util
makedepends=('libxml2' 'intltool' 'gtk-doc' 'librsvg' 'python2>=2.7.1' 'vala') # 'git'
optdepends=('vala: for use in extensions')
source=(http://archive.xfce.org/src/apps/$pkgname/${pkgver%.*}/$pkgname-$pkgver.tar.bz2)
-md5sums=('a6578ebfd237c0f22cce49113b95f70c')
+md5sums=('14288197a1e2251b7c0803e1448daa0e')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
diff --git a/community/mythtv/PKGBUILD b/community/mythtv/PKGBUILD
index 37a58eecd..108d6605c 100644
--- a/community/mythtv/PKGBUILD
+++ b/community/mythtv/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 69262 2012-04-11 06:53:29Z jconder $
+# $Id: PKGBUILD 69416 2012-04-16 01:26:19Z jconder $
# Maintainer: Jonathan Conder <jonno.conder@gmail.com>
# Contributor: Giovanni Scafora <giovanni@archlinux.org>
# Contributor: Juergen Hoetzel <juergen@archlinux.org>
@@ -7,7 +7,7 @@
pkgname=mythtv
pkgver=0.25
-pkgrel=1
+pkgrel=2
epoch=1
pkgdesc="A Homebrew PVR project"
arch=('i686' 'x86_64')
@@ -24,6 +24,8 @@ optdepends=('glew: for GPU commercial flagging'
'libxml2: to read blu-ray metadata'
'openssl: for AirTunes (RAOP) support'
'xmltv: to download tv listings')
+conflicts=('myththemes')
+replaces=('myththemes')
backup=('etc/conf.d/mythbackend')
install='mythtv.install'
source=("ftp://ftp.osuosl.org/pub/$pkgname/$pkgname-$pkgver.tar.bz2"
@@ -33,7 +35,7 @@ source=("ftp://ftp.osuosl.org/pub/$pkgname/$pkgname-$pkgver.tar.bz2"
md5sums=('e49c81de40e279c83dcb1b2aa9a45748'
'6090f5f22a8584db80b76cf19869ee41'
'62fd98347c56b1d9b795792f83269d25'
- '1f72db0586f97a7c3fd3155dfa9a6c6f')
+ 'ab962d83614cbd0ac11ce3fcc929829d')
build() {
cd "$srcdir/$pkgname-$pkgver"
diff --git a/community/mythtv/mythbackend.conf b/community/mythtv/mythbackend.conf
index 15a248450..49bbca877 100644
--- a/community/mythtv/mythbackend.conf
+++ b/community/mythtv/mythbackend.conf
@@ -1,4 +1,3 @@
-#!/bin/bash
#
# Copyright (c) by the MythTV Development Team.
#
diff --git a/community/naev/PKGBUILD b/community/naev/PKGBUILD
index 415e48c0c..d9481a878 100644
--- a/community/naev/PKGBUILD
+++ b/community/naev/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 68487 2012-03-26 07:00:35Z svenstaro $
+# $Id: PKGBUILD 69406 2012-04-15 22:34:54Z svenstaro $
# Maintainer: Sven-Hendrik Haase <sh@lutzhaase.com>
# Contributor: Johan Rehnberg <cleanrock@gmail.com>
pkgname=naev
-pkgver=0.5.2
+pkgver=0.5.3
pkgrel=1
pkgdesc='2D action/rpg space game'
arch=('i686' 'x86_64')
@@ -12,7 +12,7 @@ license=('GPL3')
depends=('openal' 'libvorbis' 'sdl_image' 'sdl_mixer' 'libgl' 'libxml2' 'freetype2' 'libpng' 'naev-data')
makedepends=('freeglut')
source=("http://downloads.sourceforge.net/sourceforge/${pkgname}/${pkgname}-${pkgver}.tar.bz2")
-md5sums=('c23a2ca80553a7d1d75497dc6672e61b')
+md5sums=('bec719b3daa33ec190d785120a7b0159')
build() {
cd "$srcdir/$pkgname-$pkgver"
diff --git a/community/sslh/PKGBUILD b/community/sslh/PKGBUILD
index d4e795cc7..51667b8c6 100644
--- a/community/sslh/PKGBUILD
+++ b/community/sslh/PKGBUILD
@@ -1,22 +1,24 @@
-# $Id$
-# Maintainer: Sebastien Luttringer <seblu+arch@seblu.net>
+# $Id: PKGBUILD 69412 2012-04-15 23:37:55Z seblu $
+# Maintainer: Sébastien Luttringer <seblu@aur.archlinux.org>
# Contributor: Le_suisse <lesuisse.dev+aur at gmail dot com>
# Contributor: Jason Rodriguez <jason-aur@catloaf.net>
pkgname=sslh
pkgver=1.10
-pkgrel=5
+pkgrel=6
pkgdesc='SSL/SSH/OpenVPN/XMPP/tinc port multiplexer'
arch=('i686' 'x86_64')
url='http://www.rutschle.net/tech/sslh.shtml'
license=('GPL2')
backup=('etc/conf.d/sslh')
-source=("http://www.rutschle.net/tech/${pkgname}-${pkgver}.tar.gz"
+source=("http://www.rutschle.net/tech/$pkgname-$pkgver.tar.gz"
'sslh.rc'
- 'sslh.conf')
+ 'sslh.conf'
+ 'sslh.service')
md5sums=('bc34e9a4770d634633e70589c72708cc'
- '0680f09267c33205acf16ac6d4adf926'
- '808199410bd6ab67421bf3544f805d1a')
+ 'f64da291e97f1a99c33cb6ebf939b95b'
+ '808199410bd6ab67421bf3544f805d1a'
+ 'ee8a4fcfc1f6839f7c93deb6f59f7fd6')
build() {
cd $pkgname-$pkgver
@@ -27,10 +29,17 @@ build() {
}
package() {
- install -D -m 755 sslh.rc "${pkgdir}/etc/rc.d/sslh"
- install -D -m 644 sslh.conf "${pkgdir}/etc/conf.d/sslh"
+ # install initscripts
+ install -Dm 755 sslh.rc "$pkgdir/etc/rc.d/sslh"
+ install -Dm 644 sslh.conf "$pkgdir/etc/conf.d/sslh"
+ # install systemd service
+ install -Dm 644 sslh.service "$pkgdir/usr/lib/systemd/system/sslh.service"
+ # manually install to have both ssl-fork and ssl-select
cd $pkgname-$pkgver
- make PREFIX="$pkgdir/usr" install
+ install -Dm 0755 sslh-fork "$pkgdir/usr/bin/sslh-fork"
+ install -Dm 0755 sslh-select "$pkgdir/usr/bin/sslh-select"
+ ln -s sslh-fork "$pkgdir/usr/bin/sslh"
+ install -Dm 0644 sslh.8.gz "$pkgdir/usr/share/man/man8/sslh.8.gz"
}
# vim:set ts=2 sw=2 ft=sh et:
diff --git a/community/sslh/sslh.rc b/community/sslh/sslh.rc
index 05b03bc3e..9c31435a0 100644
--- a/community/sslh/sslh.rc
+++ b/community/sslh/sslh.rc
@@ -5,7 +5,7 @@
. /etc/conf.d/${0##*/}
NAME=sslh
-DAEMON=/usr/sbin/sslh
+DAEMON=/usr/bin/sslh
PID=$(pidof -o %PPID $DAEMON)
case "$1" in
@@ -24,7 +24,7 @@ case "$1" in
$0 start
exit 0
;;
- *)
+ *)
echo "usage: ${0##*/} {start|stop|restart}" >&2
;;
esac
diff --git a/community/sslh/sslh.service b/community/sslh/sslh.service
new file mode 100644
index 000000000..7ccad70e9
--- /dev/null
+++ b/community/sslh/sslh.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=SSL/SSH multiplexer
+
+[Service]
+EnvironmentFile=/etc/conf.d/sslh
+ExecStart=/usr/bin/sslh --foreground $DAEMON_OPTS
+
+[Install]
+WantedBy=multi-user.target
diff --git a/community/uget/PKGBUILD b/community/uget/PKGBUILD
index 01eb6df30..bf103729d 100644
--- a/community/uget/PKGBUILD
+++ b/community/uget/PKGBUILD
@@ -1,26 +1,23 @@
-# $Id: PKGBUILD 68396 2012-03-24 05:49:50Z bgyorgy $
+# $Id: PKGBUILD 69404 2012-04-15 22:27:21Z bgyorgy $
# Maintainer: Balló György <ballogyor+arch at gmail dot com>
pkgname=uget
-pkgver=1.8.0
-pkgrel=3
+pkgver=1.8.1
+pkgrel=1
pkgdesc="GTK+ download manager featuring download classification and HTML import"
arch=('i686' 'x86_64')
url="http://urlget.sourceforge.net/"
-license=('GPL')
+license=('LGPL')
depends=('libnotify' 'gtk3' 'gstreamer0.10' 'curl' 'hicolor-icon-theme' 'xdg-utils')
makedepends=('intltool')
optdepends=('aria2: alternative backend')
install=$pkgname.install
source=(http://downloads.sourceforge.net/urlget/$pkgname-$pkgver.tar.gz)
-md5sums=('2e0ad66ecdd0104b8fb27b29fdb44df1')
+md5sums=('e3fc14042820f0496f12c85c3847c6f8')
build() {
cd "$srcdir/$pkgname-$pkgver"
- # Fix aria2 arguments
- sed -i 's/\"--enable-xml-rpc\"/"--enable-rpc"/' uget-gtk/UgSetting.c
-
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
--disable-appindicator --with-gtk3
make
diff --git a/core/expat/PKGBUILD b/core/expat/PKGBUILD
index 3a1951a2f..73688e009 100644
--- a/core/expat/PKGBUILD
+++ b/core/expat/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 155403 2012-04-03 11:10:06Z allan $
+# $Id: PKGBUILD 156201 2012-04-16 03:41:12Z allan $
# Maintainer: Allan McRae <allan@archlinux.org>
# Committer: Judd Vinet <jvinet@zeroflux.org>
diff --git a/core/gmp/PKGBUILD b/core/gmp/PKGBUILD
index 6ed8e0298..15158aa16 100644
--- a/core/gmp/PKGBUILD
+++ b/core/gmp/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 150226 2012-02-15 09:53:48Z allan $
+# $Id: PKGBUILD 156203 2012-04-16 03:46:32Z allan $
# Maintainer: Allan McRae <allan@archlinux.org>
# Maintainer: Jan de Groot <jgc@archlinux.org>
diff --git a/core/pkg-config/PKGBUILD b/core/pkg-config/PKGBUILD
index ce42fd9b7..b671db33e 100644
--- a/core/pkg-config/PKGBUILD
+++ b/core/pkg-config/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 142076 2011-11-04 23:36:11Z allan $
+# $Id: PKGBUILD 156205 2012-04-16 03:57:28Z allan $
# Maintainer: Allan McRae <allan@archlinux.org>
# Committer: Judd Vinet <jvinet@zeroflux.org>
diff --git a/extra/llvm/PKGBUILD b/extra/llvm/PKGBUILD
index 89ecadbd6..634e997de 100644
--- a/extra/llvm/PKGBUILD
+++ b/extra/llvm/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 156067 2012-04-12 16:34:12Z foutrelis $
+# $Id: PKGBUILD 156168 2012-04-15 04:29:31Z heftig $
# Maintainer: Evangelos Foutras <evangelos@foutrelis.com>
# Contributor: Jan "heftig" Steffens <jan.steffens@gmail.com>
# Contributor: Sebastian Nowicki <sebnow@gmail.com>
@@ -11,7 +11,7 @@
pkgname=('llvm' 'llvm-ocaml' 'clang' 'clang-analyzer')
pkgver=3.0
-pkgrel=2
+pkgrel=3
arch=('i686' 'x86_64')
url="http://llvm.org/"
license=('custom:University of Illinois/NCSA Open Source License')
diff --git a/extra/tomcat-native/PKGBUILD b/extra/tomcat-native/PKGBUILD
index 62e1d8555..98952ae13 100644
--- a/extra/tomcat-native/PKGBUILD
+++ b/extra/tomcat-native/PKGBUILD
@@ -2,16 +2,16 @@
# Contributor: Vitaliy Berdinskikh ur6lad[at]i.ua
pkgname=tomcat-native
-pkgver=1.1.22
+pkgver=1.1.23
pkgrel=1
pkgdesc="The Apache Tomcat Native Library"
arch=('i686' 'x86_64')
url="http://tomcat.apache.org/"
-license="Apache"
+license=("Apache")
depends=('apr' 'openssl')
makedepends=('java-environment')
source=(http://www.apache.org/dist/tomcat/tomcat-connectors/native/${pkgver}/source/${pkgname}-${pkgver}-src.tar.gz)
-md5sums=('44d764f8d99d0454c7337ba9701558ee')
+md5sums=('f2a55b5a19adbe491edc98e0c11d9028')
build() {
cd "${srcdir}/tomcat-native-${pkgver}-src/jni/native"
diff --git a/extra/xf86-video-intel/0001-uxa-gen3-Remove-special-casing-of-solid-pictures.patch b/extra/xf86-video-intel/0001-uxa-gen3-Remove-special-casing-of-solid-pictures.patch
new file mode 100644
index 000000000..5c3b1d7d6
--- /dev/null
+++ b/extra/xf86-video-intel/0001-uxa-gen3-Remove-special-casing-of-solid-pictures.patch
@@ -0,0 +1,533 @@
+From fbee314a4194671bfc6dfaa90141498a2f45de4e Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Mon, 27 Feb 2012 16:29:38 +0000
+Subject: [PATCH 1/5] uxa/gen3: Remove special casing of solid pictures
+
+Fixes use of alpha-groups and opacity masks in cairo.
+
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+---
+ src/i915_render.c | 366 ++++++++++++++++++-----------------------------------
+ 1 file changed, 122 insertions(+), 244 deletions(-)
+
+diff --git a/src/i915_render.c b/src/i915_render.c
+index 87d2336..6210035 100644
+--- a/src/i915_render.c
++++ b/src/i915_render.c
+@@ -257,11 +257,8 @@ i915_check_composite_texture(ScreenPtr screen, PicturePtr picture)
+ return FALSE;
+ }
+
+- if (picture->pSourcePict) {
+- SourcePict *source = picture->pSourcePict;
+- if (source->type == SourcePictTypeSolidFill)
+- return TRUE;
+- }
++ if (picture->pSourcePict)
++ return FALSE;
+
+ if (picture->pDrawable) {
+ int w, h, i;
+@@ -387,23 +384,6 @@ static Bool i915_texture_setup(PicturePtr picture, PixmapPtr pixmap, int unit)
+ }
+
+ static void
+-i915_emit_composite_primitive_constant(intel_screen_private *intel,
+- int srcX, int srcY,
+- int maskX, int maskY,
+- int dstX, int dstY,
+- int w, int h)
+-{
+- OUT_VERTEX(dstX + w);
+- OUT_VERTEX(dstY + h);
+-
+- OUT_VERTEX(dstX);
+- OUT_VERTEX(dstY + h);
+-
+- OUT_VERTEX(dstX);
+- OUT_VERTEX(dstY);
+-}
+-
+-static void
+ i915_emit_composite_primitive_identity_source(intel_screen_private *intel,
+ int srcX, int srcY,
+ int maskX, int maskY,
+@@ -470,29 +450,6 @@ i915_emit_composite_primitive_affine_source(intel_screen_private *intel,
+ }
+
+ static void
+-i915_emit_composite_primitive_constant_identity_mask(intel_screen_private *intel,
+- int srcX, int srcY,
+- int maskX, int maskY,
+- int dstX, int dstY,
+- int w, int h)
+-{
+- OUT_VERTEX(dstX + w);
+- OUT_VERTEX(dstY + h);
+- OUT_VERTEX((maskX + w) * intel->scale_units[0][0]);
+- OUT_VERTEX((maskY + h) * intel->scale_units[0][1]);
+-
+- OUT_VERTEX(dstX);
+- OUT_VERTEX(dstY + h);
+- OUT_VERTEX(maskX * intel->scale_units[0][0]);
+- OUT_VERTEX((maskY + h) * intel->scale_units[0][1]);
+-
+- OUT_VERTEX(dstX);
+- OUT_VERTEX(dstY);
+- OUT_VERTEX(maskX * intel->scale_units[0][0]);
+- OUT_VERTEX(maskY * intel->scale_units[0][1]);
+-}
+-
+-static void
+ i915_emit_composite_primitive_identity_source_mask(intel_screen_private *intel,
+ int srcX, int srcY,
+ int maskX, int maskY,
+@@ -536,63 +493,61 @@ i915_emit_composite_primitive(intel_screen_private *intel,
+
+ per_vertex = 2; /* dest x/y */
+
+- if (! intel->render_source_is_solid) {
+- src_unit = tex_unit++;
+-
+- is_affine_src = intel_transform_is_affine(intel->transform[src_unit]);
+- if (is_affine_src) {
+- if (!intel_get_transformed_coordinates(srcX, srcY,
+- intel->
+- transform[src_unit],
+- &src_x[0],
+- &src_y[0]))
+- return;
+-
+- if (!intel_get_transformed_coordinates(srcX, srcY + h,
+- intel->
+- transform[src_unit],
+- &src_x[1],
+- &src_y[1]))
+- return;
+-
+- if (!intel_get_transformed_coordinates(srcX + w, srcY + h,
+- intel->
+- transform[src_unit],
+- &src_x[2],
+- &src_y[2]))
+- return;
+-
+- per_vertex += 2; /* src x/y */
+- } else {
+- if (!intel_get_transformed_coordinates_3d(srcX, srcY,
+- intel->
+- transform[src_unit],
+- &src_x[0],
+- &src_y[0],
+- &src_w[0]))
+- return;
+-
+- if (!intel_get_transformed_coordinates_3d(srcX, srcY + h,
+- intel->
+- transform[src_unit],
+- &src_x[1],
+- &src_y[1],
+- &src_w[1]))
+- return;
+-
+- if (!intel_get_transformed_coordinates_3d(srcX + w, srcY + h,
+- intel->
+- transform[src_unit],
+- &src_x[2],
+- &src_y[2],
+- &src_w[2]))
+- return;
+-
+- per_vertex += 4; /* src x/y/z/w */
+- }
++ src_unit = tex_unit++;
++
++ is_affine_src = intel_transform_is_affine(intel->transform[src_unit]);
++ if (is_affine_src) {
++ if (!intel_get_transformed_coordinates(srcX, srcY,
++ intel->
++ transform[src_unit],
++ &src_x[0],
++ &src_y[0]))
++ return;
++
++ if (!intel_get_transformed_coordinates(srcX, srcY + h,
++ intel->
++ transform[src_unit],
++ &src_x[1],
++ &src_y[1]))
++ return;
++
++ if (!intel_get_transformed_coordinates(srcX + w, srcY + h,
++ intel->
++ transform[src_unit],
++ &src_x[2],
++ &src_y[2]))
++ return;
++
++ per_vertex += 2; /* src x/y */
++ } else {
++ if (!intel_get_transformed_coordinates_3d(srcX, srcY,
++ intel->
++ transform[src_unit],
++ &src_x[0],
++ &src_y[0],
++ &src_w[0]))
++ return;
++
++ if (!intel_get_transformed_coordinates_3d(srcX, srcY + h,
++ intel->
++ transform[src_unit],
++ &src_x[1],
++ &src_y[1],
++ &src_w[1]))
++ return;
++
++ if (!intel_get_transformed_coordinates_3d(srcX + w, srcY + h,
++ intel->
++ transform[src_unit],
++ &src_x[2],
++ &src_y[2],
++ &src_w[2]))
++ return;
++
++ per_vertex += 4; /* src x/y/z/w */
+ }
+
+- if (intel->render_mask && ! intel->render_mask_is_solid) {
++ if (intel->render_mask) {
+ mask_unit = tex_unit++;
+
+ is_affine_mask = intel_transform_is_affine(intel->transform[mask_unit]);
+@@ -650,15 +605,13 @@ i915_emit_composite_primitive(intel_screen_private *intel,
+
+ OUT_VERTEX(dstX + w);
+ OUT_VERTEX(dstY + h);
+- if (! intel->render_source_is_solid) {
+- OUT_VERTEX(src_x[2] * intel->scale_units[src_unit][0]);
+- OUT_VERTEX(src_y[2] * intel->scale_units[src_unit][1]);
+- if (!is_affine_src) {
++ OUT_VERTEX(src_x[2] * intel->scale_units[src_unit][0]);
++ OUT_VERTEX(src_y[2] * intel->scale_units[src_unit][1]);
++ if (!is_affine_src) {
+ OUT_VERTEX(0.0);
+ OUT_VERTEX(src_w[2]);
+- }
+ }
+- if (intel->render_mask && ! intel->render_mask_is_solid) {
++ if (intel->render_mask) {
+ OUT_VERTEX(mask_x[2] * intel->scale_units[mask_unit][0]);
+ OUT_VERTEX(mask_y[2] * intel->scale_units[mask_unit][1]);
+ if (!is_affine_mask) {
+@@ -669,15 +622,13 @@ i915_emit_composite_primitive(intel_screen_private *intel,
+
+ OUT_VERTEX(dstX);
+ OUT_VERTEX(dstY + h);
+- if (! intel->render_source_is_solid) {
+- OUT_VERTEX(src_x[1] * intel->scale_units[src_unit][0]);
+- OUT_VERTEX(src_y[1] * intel->scale_units[src_unit][1]);
+- if (!is_affine_src) {
++ OUT_VERTEX(src_x[1] * intel->scale_units[src_unit][0]);
++ OUT_VERTEX(src_y[1] * intel->scale_units[src_unit][1]);
++ if (!is_affine_src) {
+ OUT_VERTEX(0.0);
+ OUT_VERTEX(src_w[1]);
+- }
+ }
+- if (intel->render_mask && ! intel->render_mask_is_solid) {
++ if (intel->render_mask) {
+ OUT_VERTEX(mask_x[1] * intel->scale_units[mask_unit][0]);
+ OUT_VERTEX(mask_y[1] * intel->scale_units[mask_unit][1]);
+ if (!is_affine_mask) {
+@@ -688,15 +639,13 @@ i915_emit_composite_primitive(intel_screen_private *intel,
+
+ OUT_VERTEX(dstX);
+ OUT_VERTEX(dstY);
+- if (! intel->render_source_is_solid) {
+- OUT_VERTEX(src_x[0] * intel->scale_units[src_unit][0]);
+- OUT_VERTEX(src_y[0] * intel->scale_units[src_unit][1]);
+- if (!is_affine_src) {
++ OUT_VERTEX(src_x[0] * intel->scale_units[src_unit][0]);
++ OUT_VERTEX(src_y[0] * intel->scale_units[src_unit][1]);
++ if (!is_affine_src) {
+ OUT_VERTEX(0.0);
+ OUT_VERTEX(src_w[0]);
+- }
+ }
+- if (intel->render_mask && ! intel->render_mask_is_solid) {
++ if (intel->render_mask) {
+ OUT_VERTEX(mask_x[0] * intel->scale_units[mask_unit][0]);
+ OUT_VERTEX(mask_y[0] * intel->scale_units[mask_unit][1]);
+ if (!is_affine_mask) {
+@@ -729,29 +678,11 @@ i915_prepare_composite(int op, PicturePtr source_picture,
+ intel->render_dest_picture = dest_picture;
+ intel->render_dest = dest;
+
+- intel->render_source_is_solid = FALSE;
+- if (source_picture->pSourcePict) {
+- SourcePict *source = source_picture->pSourcePict;
+- if (source->type == SourcePictTypeSolidFill) {
+- intel->render_source_is_solid = TRUE;
+- intel->render_source_solid = source->solidFill.color;
+- }
+- }
+- if (!intel->render_source_is_solid && !intel_check_pitch_3d(source))
++ if (!intel_check_pitch_3d(source))
+ return FALSE;
+
+- intel->render_mask_is_solid = FALSE;
+- if (mask) {
+- if (mask_picture->pSourcePict) {
+- SourcePict *source = mask_picture->pSourcePict;
+- if (source->type == SourcePictTypeSolidFill) {
+- intel->render_mask_is_solid = TRUE;
+- intel->render_mask_solid = source->solidFill.color;
+- }
+- }
+- if (!intel->render_mask_is_solid && !intel_check_pitch_3d(mask))
+- return FALSE;
+- }
++ if (mask && !intel_check_pitch_3d(mask))
++ return FALSE;
+
+ if (!intel_check_pitch_3d(dest))
+ return FALSE;
+@@ -787,31 +718,27 @@ i915_prepare_composite(int op, PicturePtr source_picture,
+ intel->scale_units[1][1] = -1;
+
+ floats_per_vertex = 2; /* dest x/y */
+- if (! intel->render_source_is_solid) {
+- if (!i915_texture_setup(source_picture, source, tex_unit++)) {
+- intel_debug_fallback(scrn, "fail to setup src texture\n");
+- return FALSE;
+- }
+-
+- if (intel_transform_is_affine(source_picture->transform))
+- floats_per_vertex += 2; /* src x/y */
+- else
+- floats_per_vertex += 4; /* src x/y/z/w */
++ if (!i915_texture_setup(source_picture, source, tex_unit++)) {
++ intel_debug_fallback(scrn, "fail to setup src texture\n");
++ return FALSE;
+ }
+
+- if (mask != NULL) {
+- if (! intel->render_mask_is_solid) {
+- if (!i915_texture_setup(mask_picture, mask, tex_unit++)) {
+- intel_debug_fallback(scrn,
+- "fail to setup mask texture\n");
+- return FALSE;
+- }
++ if (intel_transform_is_affine(source_picture->transform))
++ floats_per_vertex += 2; /* src x/y */
++ else
++ floats_per_vertex += 4; /* src x/y/z/w */
+
+- if (intel_transform_is_affine(mask_picture->transform))
+- floats_per_vertex += 2; /* mask x/y */
+- else
+- floats_per_vertex += 4; /* mask x/y/z/w */
++ if (mask != NULL) {
++ if (!i915_texture_setup(mask_picture, mask, tex_unit++)) {
++ intel_debug_fallback(scrn,
++ "fail to setup mask texture\n");
++ return FALSE;
+ }
++
++ if (intel_transform_is_affine(mask_picture->transform))
++ floats_per_vertex += 2; /* mask x/y */
++ else
++ floats_per_vertex += 4; /* mask x/y/z/w */
+ }
+
+ intel->i915_render_state.op = op;
+@@ -827,17 +754,13 @@ i915_prepare_composite(int op, PicturePtr source_picture,
+
+ intel->prim_emit = i915_emit_composite_primitive;
+ if (!mask) {
+- if (intel->render_source_is_solid)
+- intel->prim_emit = i915_emit_composite_primitive_constant;
+- else if (intel->transform[0] == NULL)
++ if (intel->transform[0] == NULL)
+ intel->prim_emit = i915_emit_composite_primitive_identity_source;
+ else if (intel_transform_is_affine(intel->transform[0]))
+ intel->prim_emit = i915_emit_composite_primitive_affine_source;
+ } else {
+ if (intel->transform[0] == NULL) {
+- if (intel->render_source_is_solid)
+- intel->prim_emit = i915_emit_composite_primitive_constant_identity_mask;
+- else if (intel->transform[1] == NULL)
++ if (intel->transform[1] == NULL)
+ intel->prim_emit = i915_emit_composite_primitive_identity_source_mask;
+ }
+ }
+@@ -856,39 +779,25 @@ i915_composite_emit_shader(intel_screen_private *intel, CARD8 op)
+ PicturePtr mask_picture = intel->render_mask_picture;
+ PixmapPtr mask = intel->render_mask;
+ int src_reg, mask_reg;
+- Bool is_solid_src, is_solid_mask;
+ Bool dest_is_alpha = PIXMAN_FORMAT_RGB(intel->render_dest_picture->format) == 0;
+- int tex_unit, t;
+ FS_LOCALS();
+
+- is_solid_src = intel->render_source_is_solid;
+- is_solid_mask = intel->render_mask_is_solid;
+-
+ FS_BEGIN();
+
+ /* Declare the registers necessary for our program. */
+- t = 0;
+- if (is_solid_src) {
+- i915_fs_dcl(FS_T8);
+- src_reg = FS_T8;
+- } else {
+- i915_fs_dcl(FS_T0);
+- i915_fs_dcl(FS_S0);
+- t++;
+- }
++ i915_fs_dcl(FS_T0);
++ i915_fs_dcl(FS_S0);
+ if (!mask) {
+ /* No mask, so load directly to output color */
+- if (! is_solid_src) {
+- if (dest_is_alpha)
+- src_reg = FS_R0;
+- else
+- src_reg = FS_OC;
++ if (dest_is_alpha)
++ src_reg = FS_R0;
++ else
++ src_reg = FS_OC;
+
+- if (intel_transform_is_affine(intel->transform[0]))
+- i915_fs_texld(src_reg, FS_S0, FS_T0);
+- else
+- i915_fs_texldp(src_reg, FS_S0, FS_T0);
+- }
++ if (intel_transform_is_affine(intel->transform[0]))
++ i915_fs_texld(src_reg, FS_S0, FS_T0);
++ else
++ i915_fs_texldp(src_reg, FS_S0, FS_T0);
+
+ if (src_reg != FS_OC) {
+ if (dest_is_alpha)
+@@ -897,35 +806,24 @@ i915_composite_emit_shader(intel_screen_private *intel, CARD8 op)
+ i915_fs_mov(FS_OC, i915_fs_operand_reg(src_reg));
+ }
+ } else {
+- if (is_solid_mask) {
+- i915_fs_dcl(FS_T9);
+- mask_reg = FS_T9;
+- } else {
+- i915_fs_dcl(FS_T0 + t);
+- i915_fs_dcl(FS_S0 + t);
+- }
++ i915_fs_dcl(FS_T1);
++ i915_fs_dcl(FS_S1);
+
+- tex_unit = 0;
+- if (! is_solid_src) {
+- /* Load the source_picture texel */
+- if (intel_transform_is_affine(intel->transform[tex_unit]))
+- i915_fs_texld(FS_R0, FS_S0, FS_T0);
+- else
+- i915_fs_texldp(FS_R0, FS_S0, FS_T0);
++ /* Load the source_picture texel */
++ if (intel_transform_is_affine(intel->transform[0]))
++ i915_fs_texld(FS_R0, FS_S0, FS_T0);
++ else
++ i915_fs_texldp(FS_R0, FS_S0, FS_T0);
+
+- src_reg = FS_R0;
+- tex_unit++;
+- }
++ src_reg = FS_R0;
+
+- if (! is_solid_mask) {
+- /* Load the mask_picture texel */
+- if (intel_transform_is_affine(intel->transform[tex_unit]))
+- i915_fs_texld(FS_R1, FS_S0 + t, FS_T0 + t);
+- else
+- i915_fs_texldp(FS_R1, FS_S0 + t, FS_T0 + t);
++ /* Load the mask_picture texel */
++ if (intel_transform_is_affine(intel->transform[1]))
++ i915_fs_texld(FS_R1, FS_S1, FS_T1);
++ else
++ i915_fs_texldp(FS_R1, FS_S1, FS_T1);
+
+- mask_reg = FS_R1;
+- }
++ mask_reg = FS_R1;
+
+ if (dest_is_alpha) {
+ i915_fs_mul(FS_OC,
+@@ -972,7 +870,6 @@ static void i915_emit_composite_setup(ScrnInfoPtr scrn)
+ PicturePtr dest_picture = intel->render_dest_picture;
+ PixmapPtr mask = intel->render_mask;
+ PixmapPtr dest = intel->render_dest;
+- Bool is_solid_src, is_solid_mask;
+ int tex_count, t;
+
+ intel->needs_render_state_emit = FALSE;
+@@ -980,12 +877,7 @@ static void i915_emit_composite_setup(ScrnInfoPtr scrn)
+ IntelEmitInvarientState(scrn);
+ intel->last_3d = LAST_3D_RENDER;
+
+- is_solid_src = intel->render_source_is_solid;
+- is_solid_mask = intel->render_mask_is_solid;
+-
+- tex_count = 0;
+- tex_count += ! is_solid_src;
+- tex_count += mask && ! is_solid_mask;
++ tex_count = 1 + (mask != NULL);
+
+ assert(intel->in_batch_atomic);
+
+@@ -1007,15 +899,6 @@ static void i915_emit_composite_setup(ScrnInfoPtr scrn)
+ }
+ }
+
+- if (is_solid_src) {
+- OUT_BATCH (_3DSTATE_DFLT_DIFFUSE_CMD);
+- OUT_BATCH (intel->render_source_solid);
+- }
+- if (mask && is_solid_mask) {
+- OUT_BATCH (_3DSTATE_DFLT_SPEC_CMD);
+- OUT_BATCH (intel->render_mask_solid);
+- }
+-
+ /* BUF_INFO is an implicit flush, so avoid if the target has not changed.
+ * XXX However for reasons unfathomed, correct rendering in KDE requires
+ * at least a MI_FLUSH | INHIBIT_RENDER_CACHE_FLUSH here.
+@@ -1058,20 +941,15 @@ static void i915_emit_composite_setup(ScrnInfoPtr scrn)
+ uint32_t ss2;
+
+ ss2 = ~0;
+- t = 0;
+- if (! is_solid_src) {
+- ss2 &= ~S2_TEXCOORD_FMT(t, TEXCOORDFMT_NOT_PRESENT);
+- ss2 |= S2_TEXCOORD_FMT(t,
+- intel_transform_is_affine(intel->transform[t]) ?
+- TEXCOORDFMT_2D : TEXCOORDFMT_4D);
+- t++;
+- }
+- if (mask && ! is_solid_mask) {
+- ss2 &= ~S2_TEXCOORD_FMT(t, TEXCOORDFMT_NOT_PRESENT);
+- ss2 |= S2_TEXCOORD_FMT(t,
+- intel_transform_is_affine(intel->transform[t]) ?
++ ss2 &= ~S2_TEXCOORD_FMT(0, TEXCOORDFMT_NOT_PRESENT);
++ ss2 |= S2_TEXCOORD_FMT(0,
++ intel_transform_is_affine(intel->transform[0]) ?
++ TEXCOORDFMT_2D : TEXCOORDFMT_4D);
++ if (mask) {
++ ss2 &= ~S2_TEXCOORD_FMT(1, TEXCOORDFMT_NOT_PRESENT);
++ ss2 |= S2_TEXCOORD_FMT(1,
++ intel_transform_is_affine(intel->transform[1]) ?
+ TEXCOORDFMT_2D : TEXCOORDFMT_4D);
+- t++;
+ }
+
+ if (intel->needs_render_ca_pass) {
+--
+1.7.10
+
diff --git a/extra/xf86-video-intel/0002-uxa-Defer-the-call-to-EnterVT-till-after-outputs-are.patch b/extra/xf86-video-intel/0002-uxa-Defer-the-call-to-EnterVT-till-after-outputs-are.patch
new file mode 100644
index 000000000..89f43459d
--- /dev/null
+++ b/extra/xf86-video-intel/0002-uxa-Defer-the-call-to-EnterVT-till-after-outputs-are.patch
@@ -0,0 +1,50 @@
+From fd25a4586b0667b1591d85b23daaa99464e9b0d8 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Mon, 19 Mar 2012 15:51:43 +0000
+Subject: [PATCH 2/5] uxa: Defer the call to EnterVT till after outputs are
+ initialised
+
+We need to do this apparently or else we never perform the VT switch.
+However, we can not do it too early, especially not before we have
+finished intialising the outputs.
+
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=47395
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+---
+ src/intel_driver.c | 13 +++++--------
+ 1 file changed, 5 insertions(+), 8 deletions(-)
+
+diff --git a/src/intel_driver.c b/src/intel_driver.c
+index e2e43fa..ff29754 100644
+--- a/src/intel_driver.c
++++ b/src/intel_driver.c
+@@ -1013,13 +1013,6 @@ I830ScreenInit(int scrnIndex, ScreenPtr screen, int argc, char **argv)
+ "Hardware cursor initialization failed\n");
+ }
+
+- /* Must force it before EnterVT, so we are in control of VT and
+- * later memory should be bound when allocating, e.g rotate_mem */
+- scrn->vtSema = TRUE;
+-
+- if (!I830EnterVT(scrnIndex, 0))
+- return FALSE;
+-
+ intel->BlockHandler = screen->BlockHandler;
+ screen->BlockHandler = I830BlockHandler;
+
+@@ -1092,7 +1085,11 @@ I830ScreenInit(int scrnIndex, ScreenPtr screen, int argc, char **argv)
+ I830UeventInit(scrn);
+ #endif
+
+- return TRUE;
++ /* Must force it before EnterVT, so we are in control of VT and
++ * later memory should be bound when allocating, e.g rotate_mem */
++ scrn->vtSema = TRUE;
++
++ return I830EnterVT(scrnIndex, 0);
+ }
+
+ static void i830AdjustFrame(int scrnIndex, int x, int y, int flags)
+--
+1.7.10
+
diff --git a/extra/xf86-video-intel/0003-uxa-Remove-hook-for-CompositeRectangles.patch b/extra/xf86-video-intel/0003-uxa-Remove-hook-for-CompositeRectangles.patch
new file mode 100644
index 000000000..c1c4d55e8
--- /dev/null
+++ b/extra/xf86-video-intel/0003-uxa-Remove-hook-for-CompositeRectangles.patch
@@ -0,0 +1,255 @@
+From b669f171adece9df7f0c340c664b70e94118a55e Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Fri, 23 Mar 2012 14:56:06 +0000
+Subject: [PATCH 3/5] uxa: Remove hook for CompositeRectangles
+
+It was broken and not flushing damage correctly. With the
+improvements made to the kernel, it is no longer a significant advantage
+per se and not worth its additional complexity.
+
+Reported-by: Tilman Sauerbeck <tilman@code-monkey.de>
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=32547
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+---
+ uxa/uxa-priv.h | 1 -
+ uxa/uxa-render.c | 189 ------------------------------------------------------
+ uxa/uxa.c | 4 --
+ 3 files changed, 194 deletions(-)
+
+diff --git a/uxa/uxa-priv.h b/uxa/uxa-priv.h
+index 0de45f5..b24ec4f 100644
+--- a/uxa/uxa-priv.h
++++ b/uxa/uxa-priv.h
+@@ -123,7 +123,6 @@ typedef struct {
+ BitmapToRegionProcPtr SavedBitmapToRegion;
+ #ifdef RENDER
+ CompositeProcPtr SavedComposite;
+- CompositeRectsProcPtr SavedCompositeRects;
+ TrianglesProcPtr SavedTriangles;
+ GlyphsProcPtr SavedGlyphs;
+ TrapezoidsProcPtr SavedTrapezoids;
+diff --git a/uxa/uxa-render.c b/uxa/uxa-render.c
+index 877b286..1e88c5d 100644
+--- a/uxa/uxa-render.c
++++ b/uxa/uxa-render.c
+@@ -947,195 +947,6 @@ uxa_acquire_mask(ScreenPtr screen,
+ out_x, out_y);
+ }
+
+-static Bool
+-_pixman_region_init_rectangles(pixman_region16_t *region,
+- int num_rects,
+- xRectangle *rects,
+- int tx, int ty)
+-{
+- pixman_box16_t stack_boxes[64], *boxes = stack_boxes;
+- pixman_bool_t ret;
+- int i;
+-
+- if (num_rects > sizeof(stack_boxes) / sizeof(stack_boxes[0])) {
+- boxes = malloc(sizeof(pixman_box16_t) * num_rects);
+- if (boxes == NULL)
+- return FALSE;
+- }
+-
+- for (i = 0; i < num_rects; i++) {
+- boxes[i].x1 = rects[i].x + tx;
+- boxes[i].y1 = rects[i].y + ty;
+- boxes[i].x2 = rects[i].x + tx + rects[i].width;
+- boxes[i].y2 = rects[i].y + ty + rects[i].height;
+- }
+-
+- ret = pixman_region_init_rects(region, boxes, num_rects);
+-
+- if (boxes != stack_boxes)
+- free(boxes);
+-
+- return ret;
+-}
+-
+-void
+-uxa_solid_rects (CARD8 op,
+- PicturePtr dst,
+- xRenderColor *color,
+- int num_rects,
+- xRectangle *rects)
+-{
+- ScreenPtr screen = dst->pDrawable->pScreen;
+- uxa_screen_t *uxa_screen = uxa_get_screen(screen);
+- PixmapPtr dst_pixmap, src_pixmap = NULL;
+- pixman_region16_t region;
+- pixman_box16_t *boxes, *extents;
+- PicturePtr src;
+- int dst_x, dst_y;
+- int num_boxes;
+-
+- if (!pixman_region_not_empty(dst->pCompositeClip))
+- return;
+-
+- if (uxa_screen->info->flags & UXA_USE_GLAMOR) {
+- int ok;
+-
+- uxa_picture_prepare_access(dst, UXA_GLAMOR_ACCESS_RW);
+- ok = glamor_composite_rects_nf(op, dst, color,
+- num_rects, rects);
+- uxa_picture_finish_access(dst, UXA_GLAMOR_ACCESS_RW);
+-
+- if (!ok)
+- goto fallback;
+-
+- return;
+- }
+-
+- if (dst->alphaMap)
+- goto fallback;
+-
+- dst_pixmap = uxa_get_offscreen_pixmap(dst->pDrawable, &dst_x, &dst_y);
+- if (!dst_pixmap)
+- goto fallback;
+-
+- if (!_pixman_region_init_rectangles(&region,
+- num_rects, rects,
+- dst->pDrawable->x, dst->pDrawable->y))
+- goto fallback;
+-
+- if (!pixman_region_intersect(&region, &region, dst->pCompositeClip)) {
+- pixman_region_fini(&region);
+- return;
+- }
+-
+- pixman_region_translate(&region, dst_x, dst_y);
+- boxes = pixman_region_rectangles(&region, &num_boxes);
+- extents = pixman_region_extents (&region);
+-
+- if (op == PictOpClear)
+- color->red = color->green = color->blue = color->alpha = 0;
+- if (color->alpha >= 0xff00 && op == PictOpOver) {
+- color->alpha = 0xffff;
+- op = PictOpSrc;
+- }
+-
+- /* Using GEM, the relocation costs outweigh the advantages of the blitter */
+- if (num_boxes == 1 && (op == PictOpSrc || op == PictOpClear)) {
+- CARD32 pixel;
+-
+-try_solid:
+- if (uxa_screen->info->check_solid &&
+- !uxa_screen->info->check_solid(&dst_pixmap->drawable, GXcopy, FB_ALLONES))
+- goto err_region;
+-
+- if (!uxa_get_pixel_from_rgba(&pixel,
+- color->red,
+- color->green,
+- color->blue,
+- color->alpha,
+- dst->format))
+- goto err_region;
+-
+- if (!uxa_screen->info->prepare_solid(dst_pixmap, GXcopy, FB_ALLONES, pixel))
+- goto err_region;
+-
+- while (num_boxes--) {
+- uxa_screen->info->solid(dst_pixmap,
+- boxes->x1, boxes->y1,
+- boxes->x2, boxes->y2);
+- boxes++;
+- }
+-
+- uxa_screen->info->done_solid(dst_pixmap);
+- } else {
+- int error;
+-
+- src = CreateSolidPicture(0, color, &error);
+- if (!src)
+- goto err_region;
+-
+- if (!uxa_screen->info->check_composite(op, src, NULL, dst,
+- extents->x2 - extents->x1,
+- extents->y2 - extents->y1)) {
+- if (op == PictOpSrc || op == PictOpClear) {
+- FreePicture(src, 0);
+- goto try_solid;
+- }
+-
+- goto err_src;
+- }
+-
+- if (!uxa_screen->info->check_composite_texture ||
+- !uxa_screen->info->check_composite_texture(screen, src)) {
+- PicturePtr solid;
+- int src_off_x, src_off_y;
+-
+- solid = uxa_acquire_solid(screen, src->pSourcePict);
+- if (!solid)
+- goto err_src;
+- FreePicture(src, 0);
+-
+- src = solid;
+- src_pixmap = uxa_get_offscreen_pixmap(src->pDrawable,
+- &src_off_x, &src_off_y);
+- if (!src_pixmap)
+- goto err_src;
+- }
+-
+- if (!uxa_screen->info->prepare_composite(op, src, NULL, dst, src_pixmap, NULL, dst_pixmap))
+- goto err_src;
+-
+- while (num_boxes--) {
+- uxa_screen->info->composite(dst_pixmap,
+- 0, 0, 0, 0,
+- boxes->x1,
+- boxes->y1,
+- boxes->x2 - boxes->x1,
+- boxes->y2 - boxes->y1);
+- boxes++;
+- }
+-
+- uxa_screen->info->done_composite(dst_pixmap);
+- FreePicture(src, 0);
+- }
+-
+- /* XXX xserver-1.8: CompositeRects is not tracked by Damage, so we must
+- * manually append the damaged regions ourselves.
+- */
+- pixman_region_translate(&region, -dst_x, -dst_y);
+- DamageRegionAppend(dst->pDrawable, &region);
+-
+- pixman_region_fini(&region);
+- return;
+-
+-err_src:
+- FreePicture(src, 0);
+-err_region:
+- pixman_region_fini(&region);
+-fallback:
+- uxa_screen->SavedCompositeRects(op, dst, color, num_rects, rects);
+-}
+-
+ static int
+ uxa_try_driver_composite(CARD8 op,
+ PicturePtr pSrc,
+diff --git a/uxa/uxa.c b/uxa/uxa.c
+index eb2ae03..b4a1da6 100644
+--- a/uxa/uxa.c
++++ b/uxa/uxa.c
+@@ -407,7 +407,6 @@ static Bool uxa_close_screen(int i, ScreenPtr pScreen)
+ #ifdef RENDER
+ if (ps) {
+ ps->Composite = uxa_screen->SavedComposite;
+- ps->CompositeRects = uxa_screen->SavedCompositeRects;
+ ps->Glyphs = uxa_screen->SavedGlyphs;
+ ps->Trapezoids = uxa_screen->SavedTrapezoids;
+ ps->AddTraps = uxa_screen->SavedAddTraps;
+@@ -536,9 +535,6 @@ Bool uxa_driver_init(ScreenPtr screen, uxa_driver_t * uxa_driver)
+ uxa_screen->SavedComposite = ps->Composite;
+ ps->Composite = uxa_composite;
+
+- uxa_screen->SavedCompositeRects = ps->CompositeRects;
+- ps->CompositeRects = uxa_solid_rects;
+-
+ uxa_screen->SavedGlyphs = ps->Glyphs;
+ ps->Glyphs = uxa_glyphs;
+
+--
+1.7.10
+
diff --git a/extra/xf86-video-intel/0004-uxa-Remove-broken-render-glyphs-to-dst.patch b/extra/xf86-video-intel/0004-uxa-Remove-broken-render-glyphs-to-dst.patch
new file mode 100644
index 000000000..3bf15c1a1
--- /dev/null
+++ b/extra/xf86-video-intel/0004-uxa-Remove-broken-render-glyphs-to-dst.patch
@@ -0,0 +1,391 @@
+From 1aee0af6d8296c108b6b4eb1bcf583aae385d22d Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Fri, 30 Mar 2012 12:47:21 +0100
+Subject: [PATCH 4/5] uxa: Remove broken render glyphs-to-dst
+
+Reported-by: Vincent Untz <vuntz@gnome.org>
+Reported-by: Robert Bradford <robert.bradford@intel.com>
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=48045
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+---
+ uxa/uxa-glyphs.c | 330 +++---------------------------------------------------
+ 1 file changed, 17 insertions(+), 313 deletions(-)
+
+diff --git a/uxa/uxa-glyphs.c b/uxa/uxa-glyphs.c
+index 6172f2f..b754f4e 100644
+--- a/uxa/uxa-glyphs.c
++++ b/uxa/uxa-glyphs.c
+@@ -663,190 +663,6 @@ uxa_glyph_cache(ScreenPtr screen, GlyphPtr glyph, int *out_x, int *out_y)
+ return cache->picture;
+ }
+
+-static int
+-uxa_glyphs_to_dst(CARD8 op,
+- PicturePtr pSrc,
+- PicturePtr pDst,
+- INT16 src_x, INT16 src_y,
+- INT16 xDst, INT16 yDst,
+- int nlist, GlyphListPtr list, GlyphPtr * glyphs,
+- BoxPtr extents)
+-{
+- ScreenPtr screen = pDst->pDrawable->pScreen;
+- uxa_screen_t *uxa_screen = uxa_get_screen(screen);
+- PixmapPtr src_pixmap, dst_pixmap;
+- PicturePtr localSrc, glyph_atlas;
+- int x, y, n;
+- BoxRec box;
+-
+- if (uxa_screen->info->check_composite_texture &&
+- uxa_screen->info->check_composite_texture(screen, pSrc)) {
+- if (pSrc->pDrawable) {
+- int src_off_x, src_off_y;
+-
+- src_pixmap = uxa_get_offscreen_pixmap(pSrc->pDrawable, &src_off_x, &src_off_y);
+- if (src_pixmap == NULL)
+- return -1;
+-
+- src_x += pSrc->pDrawable->x + src_off_x;
+- src_y += pSrc->pDrawable->y + src_off_y;
+- } else {
+- src_pixmap = NULL;
+- }
+- localSrc = pSrc;
+- } else {
+- int width, height;
+-
+- if (extents == NULL) {
+- uxa_glyph_extents(nlist, list, glyphs, &box);
+- extents = &box;
+- }
+-
+- width = extents->x2 - extents->x1;
+- height = extents->y2 - extents->y1;
+- if (width == 0 || height == 0)
+- return 0;
+-
+- if (pSrc->pDrawable) {
+- int src_off_x, src_off_y;
+-
+- src_off_x = extents->x1 - xDst;
+- src_off_y = extents->y1 - yDst;
+- localSrc = uxa_acquire_drawable(screen, pSrc,
+- src_x + src_off_x, src_y + src_off_y,
+- width, height,
+- &src_x, &src_y);
+- if (uxa_screen->info->check_composite_texture &&
+- !uxa_screen->info->check_composite_texture(screen, localSrc)) {
+- if (localSrc != pSrc)
+- FreePicture(localSrc, 0);
+- return -1;
+- }
+-
+- src_pixmap = uxa_get_offscreen_pixmap(localSrc->pDrawable, &src_off_x, &src_off_y);
+- if (src_pixmap == NULL) {
+- if (localSrc != pSrc)
+- FreePicture(localSrc, 0);
+- return -1;
+- }
+-
+- src_x += localSrc->pDrawable->x + src_off_x;
+- src_y += localSrc->pDrawable->y + src_off_y;
+- } else {
+- localSrc = uxa_acquire_pattern(screen, pSrc,
+- PICT_a8r8g8b8, x, y, width, height);
+- if (!localSrc)
+- return 1;
+-
+- src_pixmap = uxa_get_drawable_pixmap(localSrc->pDrawable);
+- if (src_pixmap == NULL) {
+- FreePicture(localSrc, 0);
+- return -1;
+- }
+-
+- src_x = src_y = 0;
+- }
+- }
+-
+- dst_pixmap = uxa_get_offscreen_pixmap(pDst->pDrawable, &x, &y);
+- x += xDst + pDst->pDrawable->x - list->xOff;
+- y += yDst + pDst->pDrawable->y - list->yOff;
+-
+- glyph_atlas = NULL;
+- while (nlist--) {
+- x += list->xOff;
+- y += list->yOff;
+- n = list->len;
+- while (n--) {
+- GlyphPtr glyph = *glyphs++;
+- PicturePtr this_atlas;
+- int mask_x, mask_y, nrect;
+- struct uxa_glyph *priv;
+- BoxPtr rects;
+-
+- if (glyph->info.width == 0 || glyph->info.height == 0)
+- goto next_glyph;
+-
+- priv = uxa_glyph_get_private(glyph);
+- if (priv != NULL) {
+- mask_x = priv->x;
+- mask_y = priv->y;
+- this_atlas = priv->cache->picture;
+- } else {
+- if (glyph_atlas) {
+- uxa_screen->info->done_composite(dst_pixmap);
+- glyph_atlas = NULL;
+- }
+- this_atlas = uxa_glyph_cache(screen, glyph, &mask_x, &mask_y);
+- if (this_atlas == NULL) {
+- /* no cache for this glyph */
+- this_atlas = GlyphPicture(glyph)[screen->myNum];
+- mask_x = mask_y = 0;
+- }
+- }
+-
+- if (this_atlas != glyph_atlas) {
+- PixmapPtr mask_pixmap;
+-
+- if (glyph_atlas)
+- uxa_screen->info->done_composite(dst_pixmap);
+-
+- mask_pixmap =
+- uxa_get_drawable_pixmap(this_atlas->pDrawable);
+- if (!uxa_pixmap_is_offscreen(mask_pixmap) ||
+- !uxa_screen->info->prepare_composite(op,
+- localSrc, this_atlas, pDst,
+- src_pixmap, mask_pixmap, dst_pixmap))
+- return -1;
+-
+- glyph_atlas = this_atlas;
+- }
+-
+- rects = REGION_RECTS(pDst->pCompositeClip);
+- nrect = REGION_NUM_RECTS(pDst->pCompositeClip);
+- while (nrect--) {
+- int x1 = x - glyph->info.x, dx = 0;
+- int y1 = y - glyph->info.y, dy = 0;
+- int x2 = x1 + glyph->info.width;
+- int y2 = y1 + glyph->info.height;
+-
+- if (rects->y1 >= y2)
+- break;
+-
+- if (x1 < rects->x1)
+- dx = rects->x1 - x1, x1 = rects->x1;
+- if (x2 > rects->x2)
+- x2 = rects->x2;
+- if (y1 < rects->y1)
+- dy = rects->y1 - y1, y1 = rects->y1;
+- if (y2 > rects->y2)
+- y2 = rects->y2;
+-
+- if (x1 < x2 && y1 < y2) {
+- uxa_screen->info->composite(dst_pixmap,
+- x1 + src_x, y1 + src_y,
+- dx + mask_x, dy + mask_y,
+- x1, y1,
+- x2 - x1, y2 - y1);
+- }
+- rects++;
+- }
+-
+-next_glyph:
+- x += glyph->info.xOff;
+- y += glyph->info.yOff;
+- }
+- list++;
+- }
+- if (glyph_atlas)
+- uxa_screen->info->done_composite(dst_pixmap);
+-
+- if (localSrc != pSrc)
+- FreePicture(localSrc, 0);
+-
+- return 0;
+-}
+-
+ static void
+ uxa_clear_pixmap(ScreenPtr screen,
+ uxa_screen_t *uxa_screen,
+@@ -894,37 +710,30 @@ uxa_glyphs_via_mask(CARD8 op,
+ PicturePtr pDst,
+ PictFormatPtr maskFormat,
+ INT16 xSrc, INT16 ySrc,
+- INT16 xDst, INT16 yDst,
+- int nlist, GlyphListPtr list, GlyphPtr * glyphs,
+- BoxPtr extents)
++ int nlist, GlyphListPtr list, GlyphPtr * glyphs)
+ {
+ ScreenPtr screen = pDst->pDrawable->pScreen;
+ uxa_screen_t *uxa_screen = uxa_get_screen(screen);
+ CARD32 component_alpha;
+ PixmapPtr pixmap;
+ PicturePtr glyph_atlas, mask;
++ int xDst = list->xOff, yDst = list->yOff;
+ int x, y, width, height;
+ int dst_off_x, dst_off_y;
+ int n, error;
+ BoxRec box;
+
+- if (!extents) {
+- uxa_glyph_extents(nlist, list, glyphs, &box);
++ uxa_glyph_extents(nlist, list, glyphs, &box);
++ if (box.x2 <= box.x1 || box.y2 <= box.y1)
++ return 0;
+
+- if (box.x2 <= box.x1 || box.y2 <= box.y1)
+- return 0;
++ dst_off_x = box.x1;
++ dst_off_y = box.y1;
+
+- extents = &box;
+- dst_off_x = box.x1;
+- dst_off_y = box.y1;
+- } else {
+- dst_off_x = dst_off_y = 0;
+- }
+-
+- width = extents->x2 - extents->x1;
+- height = extents->y2 - extents->y1;
+- x = -extents->x1;
+- y = -extents->y1;
++ width = box.x2 - box.x1;
++ height = box.y2 - box.y1;
++ x = -box.x1;
++ y = -box.y1;
+
+ if (maskFormat->depth == 1) {
+ PictFormatPtr a8Format =
+@@ -1061,11 +870,6 @@ uxa_glyphs(CARD8 op,
+ {
+ ScreenPtr screen = pDst->pDrawable->pScreen;
+ uxa_screen_t *uxa_screen = uxa_get_screen(screen);
+- int xDst = list->xOff, yDst = list->yOff;
+- BoxRec extents = { 0, 0, 0, 0 };
+- Bool have_extents = FALSE;
+- int width, height, ret;
+- PicturePtr localDst = pDst;
+
+ if (uxa_screen->info->flags & UXA_USE_GLAMOR) {
+ int ok;
+@@ -1128,112 +932,12 @@ fallback:
+ }
+ }
+
+- if (!maskFormat &&
+- uxa_screen->info->check_composite_target &&
+- !uxa_screen->info->check_composite_target(uxa_get_drawable_pixmap(pDst->pDrawable))) {
+- int depth = pDst->pDrawable->depth;
+- PixmapPtr pixmap;
+- int x, y, error;
+- GCPtr gc;
+-
+- pixmap = uxa_get_drawable_pixmap(pDst->pDrawable);
+- if (uxa_screen->info->check_copy &&
+- !uxa_screen->info->check_copy(pixmap, pixmap, GXcopy, FB_ALLONES))
+- goto fallback;
+-
+- uxa_glyph_extents(nlist, list, glyphs, &extents);
+-
+- /* clip against dst bounds */
+- if (extents.x1 < 0)
+- extents.x1 = 0;
+- if (extents.y1 < 0)
+- extents.y1 = 0;
+- if (extents.x2 > pDst->pDrawable->width)
+- extents.x2 = pDst->pDrawable->width;
+- if (extents.y2 > pDst->pDrawable->height)
+- extents.y2 = pDst->pDrawable->height;
+-
+- if (extents.x2 <= extents.x1 || extents.y2 <= extents.y1)
+- return;
+- width = extents.x2 - extents.x1;
+- height = extents.y2 - extents.y1;
+- x = -extents.x1;
+- y = -extents.y1;
+- have_extents = TRUE;
+-
+- xDst += x;
+- yDst += y;
+-
+- pixmap = screen->CreatePixmap(screen,
+- width, height, depth,
+- CREATE_PIXMAP_USAGE_SCRATCH);
+- if (!pixmap)
+- return;
+-
+- if (!uxa_pixmap_is_offscreen(pixmap)) {
+- screen->DestroyPixmap(pixmap);
+- goto fallback;
+- }
+-
+- gc = GetScratchGC(depth, screen);
+- if (!gc) {
+- screen->DestroyPixmap(pixmap);
+- return;
+- }
+-
+- ValidateGC(&pixmap->drawable, gc);
+- gc->ops->CopyArea(pDst->pDrawable, &pixmap->drawable, gc,
+- extents.x1, extents.y1,
+- width, height,
+- 0, 0);
+- FreeScratchGC(gc);
+-
+- localDst = CreatePicture(0, &pixmap->drawable,
+- PictureMatchFormat(screen, depth, pDst->format),
+- 0, 0, serverClient, &error);
+- screen->DestroyPixmap(pixmap);
+-
+- if (!localDst)
+- return;
+-
+- ValidatePicture(localDst);
+- }
+-
+- if (maskFormat) {
+- ret = uxa_glyphs_via_mask(op,
+- pSrc, localDst, maskFormat,
+- xSrc, ySrc,
+- xDst, yDst,
+- nlist, list, glyphs,
+- have_extents ? &extents : NULL);
+- } else {
+- ret = uxa_glyphs_to_dst(op,
+- pSrc, localDst,
+- xSrc, ySrc,
+- xDst, yDst,
+- nlist, list, glyphs,
+- have_extents ? &extents : NULL);
+- }
+- if (ret) {
+- if (localDst != pDst)
+- FreePicture(localDst, 0);
+-
++ if (!maskFormat)
+ goto fallback;
+- }
+
+- if (localDst != pDst) {
+- GCPtr gc;
+-
+- gc = GetScratchGC(pDst->pDrawable->depth, screen);
+- if (gc) {
+- ValidateGC(pDst->pDrawable, gc);
+- gc->ops->CopyArea(localDst->pDrawable, pDst->pDrawable, gc,
+- 0, 0,
+- width, height,
+- extents.x1, extents.y1);
+- FreeScratchGC(gc);
+- }
+-
+- FreePicture(localDst, 0);
+- }
++ if (uxa_glyphs_via_mask(op,
++ pSrc, pDst, maskFormat,
++ xSrc, ySrc,
++ nlist, list, glyphs))
++ goto fallback;
+ }
+--
+1.7.10
+
diff --git a/extra/xf86-video-intel/0005-uxa-Fix-leak-of-glyph-mask-for-unhandled-glyph-compo.patch b/extra/xf86-video-intel/0005-uxa-Fix-leak-of-glyph-mask-for-unhandled-glyph-compo.patch
new file mode 100644
index 000000000..865679078
--- /dev/null
+++ b/extra/xf86-video-intel/0005-uxa-Fix-leak-of-glyph-mask-for-unhandled-glyph-compo.patch
@@ -0,0 +1,40 @@
+From af5c698fd43308c3b799783b662b9cd871f90a62 Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Sat, 14 Apr 2012 19:03:25 +0100
+Subject: [PATCH 5/5] uxa: Fix leak of glyph mask for unhandled glyph
+ composition
+
+==1401== 7,344 bytes in 34 blocks are possibly lost in loss record 570 of 587
+==1401== at 0x4027034: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==1401== by 0x8BE5150: drm_intel_gem_bo_alloc_internal (intel_bufmgr_gem.c:689)
+==1401== by 0x899FC04: intel_uxa_create_pixmap (intel_uxa.c:1077)
+==1401== by 0x89C2C41: uxa_glyphs (uxa-glyphs.c:254)
+==1401== by 0x21F05E: damageGlyphs (damage.c:647)
+==1401== by 0x218E06: ProcRenderCompositeGlyphs (render.c:1434)
+==1401== by 0x15AA40: Dispatch (dispatch.c:439)
+==1401== by 0x1499E9: main (main.c:287)
+
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+---
+ uxa/uxa-glyphs.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/uxa/uxa-glyphs.c b/uxa/uxa-glyphs.c
+index b754f4e..921b99c 100644
+--- a/uxa/uxa-glyphs.c
++++ b/uxa/uxa-glyphs.c
+@@ -812,8 +812,10 @@ uxa_glyphs_via_mask(CARD8 op,
+ if (!uxa_pixmap_is_offscreen(src_pixmap) ||
+ !uxa_screen->info->prepare_composite(PictOpAdd,
+ this_atlas, NULL, mask,
+- src_pixmap, NULL, pixmap))
++ src_pixmap, NULL, pixmap)) {
++ FreePicture(mask, 0);
+ return -1;
++ }
+
+ glyph_atlas = this_atlas;
+ }
+--
+1.7.10
+
diff --git a/extra/xf86-video-intel/PKGBUILD b/extra/xf86-video-intel/PKGBUILD
index ca1e15eb0..ad44b5329 100644
--- a/extra/xf86-video-intel/PKGBUILD
+++ b/extra/xf86-video-intel/PKGBUILD
@@ -1,23 +1,38 @@
-# $Id: PKGBUILD 153342 2012-03-12 20:53:36Z andyrtr $
+# $Id: PKGBUILD 156183 2012-04-15 12:22:45Z jgc $
# Maintainer: Jan de Groot <jgc@archlinux.org>
pkgname=xf86-video-intel
pkgver=2.18.0
-pkgrel=1
+pkgrel=3
pkgdesc="X.org Intel i810/i830/i915/945G/G965+ video drivers"
arch=(i686 x86_64)
url="http://xorg.freedesktop.org/"
license=('custom')
depends=('intel-dri' 'libxvmc' 'libpciaccess' 'libdrm' 'xcb-util>=0.3.8' 'libxfixes' 'udev')
-makedepends=('xorg-server-devel>=1.11.99.903' 'libx11' 'libdrm' 'xf86driproto' 'glproto' 'mesa' 'libxvmc' 'libxrender')
-conflicts=('xorg-server<1.11.99.903' 'xf86-video-i810' 'xf86-video-intel-legacy')
+makedepends=('xorg-server-devel>=1.12.0' 'libx11' 'libdrm' 'xf86driproto' 'glproto' 'mesa' 'libxvmc' 'libxrender')
+conflicts=('xorg-server<1.12.0' 'xf86-video-i810' 'xf86-video-intel-legacy')
options=('!libtool')
groups=('xorg-drivers' 'xorg')
-source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2)
-sha1sums=('77fae98e73414140bf214dca5da32bcf079c4463')
+source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2
+ 0001-uxa-gen3-Remove-special-casing-of-solid-pictures.patch
+ 0002-uxa-Defer-the-call-to-EnterVT-till-after-outputs-are.patch
+ 0003-uxa-Remove-hook-for-CompositeRectangles.patch
+ 0004-uxa-Remove-broken-render-glyphs-to-dst.patch
+ 0005-uxa-Fix-leak-of-glyph-mask-for-unhandled-glyph-compo.patch)
+sha1sums=('77fae98e73414140bf214dca5da32bcf079c4463'
+ '8b46a5120c8c0b94fcd75801e5ce91d6baccd1ac'
+ 'd959c66ab40f521bfe4df66b6f43c98b13f59283'
+ '5525715f1bbf80edfc34d55946b0528f6b8dbf75'
+ '3e54a4b3911e004d29b6a8e07adb7c16eba5bc4f'
+ '32e2e5a53926ce29290bf6454e7dcdbd18e91d5e')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
+ patch -Np1 -i "${srcdir}/0001-uxa-gen3-Remove-special-casing-of-solid-pictures.patch"
+ patch -Np1 -i "${srcdir}/0002-uxa-Defer-the-call-to-EnterVT-till-after-outputs-are.patch"
+ patch -Np1 -i "${srcdir}/0003-uxa-Remove-hook-for-CompositeRectangles.patch"
+ patch -Np1 -i "${srcdir}/0004-uxa-Remove-broken-render-glyphs-to-dst.patch"
+ patch -Np1 -i "${srcdir}/0005-uxa-Fix-leak-of-glyph-mask-for-unhandled-glyph-compo.patch"
./configure --prefix=/usr --enable-dri
make
}
diff --git a/libre/linux-libre-api-headers/PKGBUILD b/libre/linux-libre-api-headers/PKGBUILD
index 0a449ef3e..72f4c464d 100644
--- a/libre/linux-libre-api-headers/PKGBUILD
+++ b/libre/linux-libre-api-headers/PKGBUILD
@@ -5,8 +5,9 @@
# toolchain build order: linux-libre-api-headers->glibc->binutils->gcc->binutils->glibc
pkgname=linux-libre-api-headers
-pkgver=3.3
-_basever=3.3
+_basekernel=3.3
+_sublevel=2
+pkgver=${_basekernel}.${_sublevel}
pkgrel=1
pkgdesc="Kernel Libre headers sanitized for use in userspace"
arch=('i686' 'x86_64' 'mips64el')
@@ -15,20 +16,24 @@ license=('GPL2')
provides=("linux-api-headers=${pkgver}" "kernel-headers=${pkgver}")
conflicts=('linux-api-headers' 'kernel-headers')
replaces=('linux-api-headers' 'kernel-headers')
-source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basever}-gnu/linux-libre-${_basever}-gnu.tar.xz")
- #"http://linux-libre.fsfla.org/pub/linux-libre/releases/${pkgver}-gnu/patch-${_basever}-gnu-${pkgver}-gnu.xz")
-md5sums=('5487da14ca81715a469c7594d39722fa')
+source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gnu/linux-libre-${_basekernel}-gnu.tar.xz"
+ "http://linux-libre.fsfla.org/pub/linux-libre/releases/${pkgver}-gnu/patch-${_basekernel}-gnu-${pkgver}-gnu.xz")
+md5sums=('5487da14ca81715a469c7594d39722fa'
+ 'b43d3bdecfa355bf45bd1154819e3687')
build() {
- cd ${srcdir}/linux-${_basever}
- [[ $pkgver != $_basever ]] && patch -Np1 -i ${srcdir}/patch-${_basever}-gnu-${pkgver}-gnu
+ cd ${srcdir}/linux-${_basekernel}
+
+ if [ "${_basekernel}" != "${pkgver}" ]; then
+ patch -Np1 -i "${srcdir}/patch-${_basekernel}-gnu-${pkgver}-gnu"
+ fi
make mrproper
make headers_check
}
package() {
- cd ${srcdir}/linux-${_basever}
+ cd ${srcdir}/linux-${_basekernel}
make INSTALL_HDR_PATH=${pkgdir}/usr headers_install
# use headers from libdrm
diff --git a/libre/linux-libre-lts/.directory b/libre/linux-libre-lts/.directory
index 60156bc93..89e875be9 100644
--- a/libre/linux-libre-lts/.directory
+++ b/libre/linux-libre-lts/.directory
@@ -1,2 +1,2 @@
[Dolphin]
-Timestamp=2012,3,15,16,10,14
+Timestamp=2012,4,16,17,55,34
diff --git a/libre/linux-libre-lts/PKGBUILD b/libre/linux-libre-lts/PKGBUILD
index 790ea5e0b..5fe592460 100644
--- a/libre/linux-libre-lts/PKGBUILD
+++ b/libre/linux-libre-lts/PKGBUILD
@@ -9,7 +9,7 @@ pkgname=('linux-libre-lts' 'linux-libre-lts-headers') # Build stock -LIBRE kerne
# pkgname=linux-custom # Build kernel with a different name
_kernelname=-LIBRE-LTS
_basekernel=3.0
-_sublevel=27
+_sublevel=28
pkgver=${_basekernel}.${_sublevel}
_lxopkgver=${_basekernel}.26 # nearly always the same as pkgver
pkgrel=1
@@ -32,7 +32,7 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gn
'ext4-options.patch'
"http://www.linux-libre.fsfla.org/pub/linux-libre/lemote/gnewsense/pool/linux-patches-${_lxopkgver}-gnu_0loongsonlibre_mipsel.tar.bz2")
md5sums=('5f64180fe7df4e574dac5911b78f5067'
- '365d490f97b1960c8880eb22257d5ef0'
+ '150cef79eaa9a41cd5ccd65c696e7f10'
'c7acde811ca6808b294dc06480048c61'
'792766d6d403cc967977f6a46aa95d1d'
'd2c0701480bce49fd4b40dc46b9863f1'
diff --git a/libre/linux-libre-lts/linux-libre-lts.install b/libre/linux-libre-lts/linux-libre-lts.install
index acb2b71f5..5f32392c0 100644
--- a/libre/linux-libre-lts/linux-libre-lts.install
+++ b/libre/linux-libre-lts/linux-libre-lts.install
@@ -2,7 +2,7 @@
# arg 2: the old package version
KERNEL_NAME=-lts
-KERNEL_VERSION=3.0.27-1-LIBRE-LTS
+KERNEL_VERSION=3.0.28-1-LIBRE-LTS
post_install () {
# updating module dependencies
diff --git a/libre/python2-libre/13156-revert-tls-changeset-subinterpreter.patch b/libre/python2-libre/13156-revert-tls-changeset-subinterpreter.patch
new file mode 100644
index 000000000..ed8154df5
--- /dev/null
+++ b/libre/python2-libre/13156-revert-tls-changeset-subinterpreter.patch
@@ -0,0 +1,61 @@
+
+# HG changeset patch
+# User Charles-François Natali <neologix@free.fr>
+# Date 1318446474 -7200
+# Node ID ee4fe16d9b4822457ad855ea6c44e65030166304
+# Parent f6feed6ec3f9b024cecd0fd587595c403f55624f
+Issue #13156: revert changeset f6feed6ec3f9, which was only relevant for native
+TLS implementations, and fails with the ad-hoc TLS implementation when a thread
+doesn't have an auto thread state (e.g. a thread created outside of Python
+calling into a subinterpreter).
+
+diff --git a/Include/pystate.h b/Include/pystate.h
+--- a/Include/pystate.h
++++ b/Include/pystate.h
+@@ -111,7 +111,6 @@ PyAPI_FUNC(void) PyThreadState_Clear(PyT
+ PyAPI_FUNC(void) PyThreadState_Delete(PyThreadState *);
+ #ifdef WITH_THREAD
+ PyAPI_FUNC(void) PyThreadState_DeleteCurrent(void);
+-PyAPI_FUNC(void) _PyGILState_Reinit(void);
+ #endif
+
+ PyAPI_FUNC(PyThreadState *) PyThreadState_Get(void);
+diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
+--- a/Modules/signalmodule.c
++++ b/Modules/signalmodule.c
+@@ -976,7 +976,6 @@ void
+ PyOS_AfterFork(void)
+ {
+ #ifdef WITH_THREAD
+- _PyGILState_Reinit();
+ PyEval_ReInitThreads();
+ main_thread = PyThread_get_thread_ident();
+ main_pid = getpid();
+diff --git a/Python/pystate.c b/Python/pystate.c
+--- a/Python/pystate.c
++++ b/Python/pystate.c
+@@ -537,23 +537,6 @@ void
+ autoInterpreterState = NULL;
+ }
+
+-/* Reset the TLS key - called by PyOS_AfterFork.
+- * This should not be necessary, but some - buggy - pthread implementations
+- * don't flush TLS on fork, see issue #10517.
+- */
+-void
+-_PyGILState_Reinit(void)
+-{
+- PyThreadState *tstate = PyGILState_GetThisThreadState();
+- PyThread_delete_key(autoTLSkey);
+- if ((autoTLSkey = PyThread_create_key()) == -1)
+- Py_FatalError("Could not allocate TLS entry");
+-
+- /* re-associate the current thread state with the new key */
+- if (PyThread_set_key_value(autoTLSkey, (void *)tstate) < 0)
+- Py_FatalError("Couldn't create autoTLSkey mapping");
+-}
+-
+ /* When a thread state is created for a thread by some mechanism other than
+ PyGILState_Ensure, it's important that the GILState machinery knows about
+ it so it doesn't try to create another thread state for the thread (this is
+
diff --git a/staging/nx-common/NXproto.h.64bit.diff b/staging/nx-common/NXproto.h.64bit.diff
new file mode 100644
index 000000000..ac326ebcd
--- /dev/null
+++ b/staging/nx-common/NXproto.h.64bit.diff
@@ -0,0 +1,66 @@
+--- nxcomp.old/NXproto.h 2006-06-19 19:55:56.000000000 +0200
++++ nxcomp/NXproto.h 2007-02-12 18:17:41.000000000 +0100
+@@ -26,6 +26,30 @@
+ #include <X11/Xmd.h>
+ #include <X11/Xproto.h>
+
++/*
++ Copied from Xproto.h
++ */
++
++/* For the purpose of the structure definitions in this file,
++we must redefine the following types in terms of Xmd.h's types, which may
++include bit fields. All of these are #undef'd at the end of this file,
++restoring the definitions in X.h. */
++
++#define Window CARD32
++#define Drawable CARD32
++#define Font CARD32
++#define Pixmap CARD32
++#define Cursor CARD32
++#define Colormap CARD32
++#define GContext CARD32
++#define Atom CARD32
++#define VisualID CARD32
++#define Time CARD32
++#define KeyCode CARD8
++#define KeySym CARD32
++
++/* End copied from Xproto.h */
++
+ #define sz_xNXGetControlParametersReq 4
+ #define sz_xNXGetCleanupParametersReq 4
+ #define sz_xNXGetImageParametersReq 4
+@@ -343,9 +367,9 @@
+ CARD8 dstDepth;
+ CARD32 srcLength B32;
+ CARD32 dstLength B32;
+- INT16 srcX B16, srcY B16;
++ CARD16 srcX B16, srcY B16;
+ CARD16 srcWidth B16, srcHeight B16;
+- INT16 dstX B16, dstY B16;
++ CARD16 dstX B16, dstY B16;
+ CARD16 dstWidth B16, dstHeight B16;
+ } xNXPutPackedImageReq;
+
+@@ -463,4 +487,20 @@
+ }
+ #endif
+
++/* Copied from Xproto.h */
++
++/* restore these definitions back to the typedefs in X.h */
++#undef Window
++#undef Drawable
++#undef Font
++#undef Pixmap
++#undef Cursor
++#undef Colormap
++#undef GContext
++#undef Atom
++#undef VisualID
++#undef Time
++#undef KeyCode
++#undef KeySym
++
+ #endif /* NXproto_H */
diff --git a/staging/nx-common/PKGBUILD b/staging/nx-common/PKGBUILD
new file mode 100644
index 000000000..8dd38842b
--- /dev/null
+++ b/staging/nx-common/PKGBUILD
@@ -0,0 +1,45 @@
+# $Id: PKGBUILD 156191 2012-04-15 14:20:58Z andyrtr $
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+# Contributed: eliott <eliott@solarblue.net>, Andre Naumann <anaumann@SPARCed.org>
+
+pkgname=nx-common
+pkgver=3.5.0
+pkgrel=4.1
+pkgdesc="NoMachine NX common package for client and server"
+arch=('i686' 'x86_64')
+license=('GPL')
+url="http://nomachine.com/"
+depends=('libjpeg-turbo' 'libpng' 'openssl' 'gcc-libs' 'libxcomp') # 'bash'
+makedepends=('xorg-server-devel' 'nx-headers')
+source=(http://64.34.161.181/download/$pkgver/sources/nxcompsh-$pkgver-1.tar.gz
+ http://64.34.161.181/download/$pkgver/sources/nxssh-$pkgver-2.tar.gz
+ nxcompsh-gcc43.patch)
+options=('!libtool')
+md5sums=('84ade443b79ea079380b754aba9d392e'
+ 'f52fcdb38e09f8dcfb9ff0344dfbbbd6'
+ 'b6c279654dac421fc3dd1a27d66ff53c')
+
+build() {
+ # nxcompsh
+ cd ${srcdir}/nxcompsh
+ patch -Np1 -i ${srcdir}/nxcompsh-gcc43.patch
+ ./configure --prefix=/usr/lib/nx
+ make
+
+ # nxssh
+ cd ${srcdir}/nxssh
+ sed -i "s:NX.h:nx/NX.h:g" clientloop.c packet.c proxy.c
+ ./configure --prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib
+ make
+}
+
+package() {
+ install -dm755 ${pkgdir}/usr/{bin,lib/nx}
+
+ # nxcompsh
+ cd ${srcdir}/nxcompsh
+ cp -a libXcompsh.so* ${pkgdir}/usr/lib/nx # really needed?
+ # nxssh
+ cd ${srcdir}/nxssh
+ install -D -m755 nxssh ${pkgdir}/usr/bin/nxssh
+}
diff --git a/staging/nx-common/nx-3.5.0-libpng15.patch b/staging/nx-common/nx-3.5.0-libpng15.patch
new file mode 100644
index 000000000..c8f2a9559
--- /dev/null
+++ b/staging/nx-common/nx-3.5.0-libpng15.patch
@@ -0,0 +1,30 @@
+diff -ur nxcomp.orig/Pgn.cpp nxcomp/Pgn.cpp
+--- nxcomp.orig/Pgn.cpp 2010-03-01 19:18:59.000000000 +0200
++++ nxcomp/Pgn.cpp 2011-09-13 16:35:12.000000000 +0300
+@@ -414,7 +414,7 @@
+
+ png_read_info(pngPtr, infoPtr);
+
+- if (infoPtr -> color_type == PNG_COLOR_TYPE_PALETTE)
++ if (png_get_color_type(pngPtr, infoPtr) == PNG_COLOR_TYPE_PALETTE)
+ {
+ png_set_expand(pngPtr);
+ }
+@@ -565,7 +565,7 @@
+
+ png_read_info( pngPtr, infoPtr ) ;
+
+- if (infoPtr -> color_type == PNG_COLOR_TYPE_PALETTE)
++ if (png_get_color_type(pngPtr, infoPtr) == PNG_COLOR_TYPE_PALETTE)
+ {
+ png_set_expand(pngPtr);
+ }
+@@ -709,7 +709,7 @@
+ png_read_info(pngPtr, infoPtr) ;
+
+
+- if (infoPtr -> color_type == PNG_COLOR_TYPE_PALETTE)
++ if (png_get_color_type(pngPtr, infoPtr) == PNG_COLOR_TYPE_PALETTE)
+ {
+ png_set_expand(pngPtr);
+ }
diff --git a/staging/nx-common/nxcompsh-gcc43.patch b/staging/nx-common/nxcompsh-gcc43.patch
new file mode 100644
index 000000000..681a0dab5
--- /dev/null
+++ b/staging/nx-common/nxcompsh-gcc43.patch
@@ -0,0 +1,19 @@
+--- nxcompsh/Misc.h~ 2007-06-04 13:39:49.000000000 +0200
++++ nxcompsh/Misc.h 2008-04-12 12:46:24.000000000 +0200
+@@ -18,10 +18,12 @@
+ #ifndef Misc_H
+ #define Misc_H
+
+-#include <iostream.h>
++#include <iostream>
+
+-#include <errno.h>
+-#include <string.h>
++#include <cerrno>
++#include <cstring>
++
++using namespace std;
+
+ //
+ // Error handling macros.
+
diff --git a/staging/nx/PKGBUILD b/staging/nx/PKGBUILD
new file mode 100644
index 000000000..a46c26b45
--- /dev/null
+++ b/staging/nx/PKGBUILD
@@ -0,0 +1,91 @@
+# $Id: PKGBUILD 156194 2012-04-15 15:11:02Z andyrtr $
+# Maintainer: Andreas Radke <andyrtr@archlinux.org>
+
+pkgbase=nx
+pkgname=('libxcomp' 'nxproxy' 'nx-x11' 'nx-xcompext' 'nxagent' 'nx-headers')
+pkgver=3.5.0.12
+pkgrel=0.3
+arch=('i686' 'x86_64')
+url="http://wiki.x2go.org/"
+license=('GPL')
+options=('!makeflags')
+makedepends=('libjpeg-turbo' 'libpng' 'bash' 'perl' # runtime dependencies from subpackages
+ 'xproto' 'freetype2' 'libxaw' 'libxrender' 'libxp' 'libxpm' 'libxdamage' 'libxrandr' 'libxcomposite' 'libxtst' 'xorg-sessreg' # makedepends
+ )
+source=(http://code.x2go.org/releases/source/nx-libs/nx-libs_$pkgver-full.tar.gz
+ nx-x11.ld.so.conf.d)
+md5sums=('a2011e034a318016cf2260c30a567301'
+ 'f2ec60c7e2d81bef2f7292d2b33681a6')
+
+build() {
+ cd "${srcdir}/nx-libs_$pkgver"
+ make CONFIGURE="./configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --includedir=/usr/include"
+ # fake install
+ mkdir $srcdir/fakeinstall
+ make DESTDIR="$srcdir/fakeinstall" install
+}
+
+package_libxcomp() {
+
+ pkgdesc="NX X compression library"
+ depends=('libjpeg-turbo' 'libpng' 'gcc-libs')
+
+ cd "${srcdir}/fakeinstall"
+ install -dm755 ${pkgdir}/usr/lib/
+ cp -a ${srcdir}/fakeinstall/usr/lib/nx/libXcomp.so* ${pkgdir}/usr/lib
+}
+
+package_nxproxy() {
+
+ pkgdesc="NX proxy"
+ depends=('libxcomp')
+
+ cd "${srcdir}/fakeinstall"
+ install -dm755 ${pkgdir}/usr/{bin,share/man/man1}
+ cp -a ${srcdir}/fakeinstall/usr/bin/nxproxy ${pkgdir}/usr/bin
+ cp -a ${srcdir}/fakeinstall/usr/share/man/man1/nxproxy.1 ${pkgdir}/usr/share/man/man1
+}
+
+package_nx-xcompext() {
+
+ pkgdesc="Xcompext/Xcompshad library for NX"
+ depends=('libxcomp' 'nx-x11')
+
+ cd "${srcdir}/fakeinstall"
+ install -dm755 ${pkgdir}/usr/lib/
+ cp -a ${srcdir}/fakeinstall/usr/lib/nx/libXcompext.so* ${pkgdir}/usr/lib
+}
+
+package_nx-x11() {
+
+ pkgdesc="NX-X11 lib for the NX framework"
+ depends=('libxcomp')
+
+ cd "${srcdir}/fakeinstall"
+ install -dm755 ${pkgdir}/{etc/ld.so.conf.d,usr/bin,usr/lib/nx}
+ cp -aR ${srcdir}/fakeinstall/usr/lib/NX3/lib*/nx/lib*.so* ${pkgdir}/usr/lib/nx
+ cp -aR ${srcdir}/fakeinstall/usr/lib/NX3/bin/nxauth ${pkgdir}/usr/bin
+
+ install -m 644 "$srcdir/nx-x11.ld.so.conf.d" "$pkgdir/etc/ld.so.conf.d/nx.conf"
+}
+
+package_nxagent() {
+
+ pkgdesc="NX X server based on Xnest"
+ depends=('nx-xcompext')
+
+ cd "${srcdir}/fakeinstall"
+ install -dm755 ${pkgdir}/usr/{bin,lib/nx}
+ cp -aR ${srcdir}/fakeinstall/usr/lib/NX3/bin/nxagent ${pkgdir}/usr/lib/nx
+ cd ${pkgdir}/usr/bin
+ ln -sv /usr/lib/nx/nxagent .
+}
+
+package_nx-headers() {
+
+ pkgdesc="NX headers"
+
+ cd "${srcdir}/fakeinstall"
+ install -dm755 ${pkgdir}/usr/include/nx
+ cp -aR ${srcdir}/fakeinstall/usr/include/nx/* ${pkgdir}/usr/include/nx
+}
diff --git a/staging/nx/nx-x11.ld.so.conf.d b/staging/nx/nx-x11.ld.so.conf.d
new file mode 100644
index 000000000..5d15cb6e2
--- /dev/null
+++ b/staging/nx/nx-x11.ld.so.conf.d
@@ -0,0 +1 @@
+/usr/lib/nx/
diff --git a/testing/calligra/PKGBUILD b/testing/calligra/PKGBUILD
index 89a5570fc..41c4c0ee5 100644
--- a/testing/calligra/PKGBUILD
+++ b/testing/calligra/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 156147 2012-04-14 12:49:49Z andrea $
+# $Id: PKGBUILD 156197 2012-04-15 16:00:02Z andrea $
# Maintainer: Ronald van Haren <ronald.archlinux.org>
# Maintainer: Andrea Scarpino <andrea@archlinux.org>
@@ -20,17 +20,18 @@ pkgname=('calligra-filters'
'calligra-sheets'
'calligra-words'
'calligra-handbook'
- 'calligra-thesaurus-doc'
'calligra-braindump'
'calligra-flow')
pkgver=2.4.0
-pkgrel=1
+pkgrel=2
arch=('i686' 'x86_64')
-url='http://www.calligra-suite.org'
+url='http://www.calligra-suite.org/'
license=('FDL1.2' 'GPL2' 'LGPL')
-makedepends=('kdepimlibs' 'eigen2' 'freetds' 'kdegraphics-okular' 'libgsf'
- 'libwpd' 'libwpg' 'pstoedit' 'glew' 'gsl' 'cmake' 'automoc4'
- 'boost' 'libkdcraw' 'libpqxx' 'fftw' 'opengtl' 'lcms2')
+makedepends=('cmake' 'automoc4' 'boost ' 'eigen2'
+ 'kdepimlibs' 'libpqxx' 'freetds' 'xbase'
+ 'kdegraphics-okular' 'gsl' 'kdeedu-marble'
+ 'libwpd' 'libwpg' 'pstoedit' 'glew'
+ 'fftw' 'opengtl' 'lcms2' 'libkdcraw' 'wv2')
groups=('calligra')
source=("http://download.kde.org/stable/${pkgbase}-${pkgver}/${pkgbase}-${pkgver}.tar.bz2"
'do-not-build-hancomword.patch')
@@ -46,24 +47,16 @@ build() {
cd build
cmake ../${pkgbase}-${pkgver} \
-DCMAKE_BUILD_TYPE=Release \
- -DCMAKE_SKIP_RPATH=ON \
-DCMAKE_INSTALL_PREFIX=/usr \
-DBUILD_active=OFF \
-DBUILD_mobile=OFF \
- -DBUILD_mysql=OFF \
- -DKDCRAW_LOCAL_FOUND=/usr/lib/libkdcraw.so \
- -DWITH_Marble=OFF \
-DIHAVEPATCHEDQT=1
make
}
package_calligra-filters() {
pkgdesc="Filters for the Calligra office suite"
- optdepends=('libgsf: Microsoft Word document importer'
- 'libwpd: WordPerfect document importer'
- 'libwpg: Corel WordPerfect Graphics image importer'
- 'pstoedit: Karbon EPS import filter'
- 'libkdcraw: support for raw images')
+ optdepends=('libwpg: Corel WordPerfect Graphics image importer')
conflicts=('koffice-filters')
replaces=('koffice-filters')
install=calligra-filters.install
@@ -94,9 +87,10 @@ package_calligra-libs() {
package_calligra-plugins() {
pkgdesc="Plugins for the Calligra office suite"
- depends=('calligra-libs')
+ depends=('calligra-libs' 'calligra-filters')
+ optdepends=('kdeedu-marble: map shape for Calligra')
conflicts=('koffice-plugins' 'koffice-kchart')
- replaces=('koffice-plugins' 'koffice-kchart')
+ replaces=('koffice-plugins' 'koffice-kchart' 'koffice-kformula')
cd "${srcdir}"/build/plugins
make DESTDIR="${pkgdir}" install
@@ -104,7 +98,6 @@ package_calligra-plugins() {
package_calligra-pics() {
pkgdesc="Icons for the Calligra office suite"
- depends=('calligra-libs')
conflicts=('koffice-pics')
replaces=('koffice-pics')
install=calligra.install
@@ -143,13 +136,11 @@ package_calligra-tools() {
make DESTDIR="${pkgdir}" install
}
-#### package common files done #####
-
-#### package apps and their docs #####
-
package_calligra-karbon() {
pkgdesc="Create scalable vector drawings"
- depends=('calligra-libs' 'calligra-templates')
+ depends=('calligra-libs' 'calligra-templates' 'kdebase-runtime')
+ optdepends=('calligra-filters: import/export filters'
+ 'calligra-tools: extra calligra tools')
conflicts=('koffice-karbon' 'koffice-karbon-doc' 'calligra-karbon-doc')
replaces=('koffice-karbon' 'koffice-karbon-doc' 'calligra-karbon-doc')
install=calligra-karbon.install
@@ -161,6 +152,13 @@ package_calligra-karbon() {
package_calligra-kexi() {
pkgdesc="Develop desktop database applications"
depends=('calligra-libs' 'calligra-templates')
+ optdepends=('libmysqlclient: MySQL driver'
+ 'libpqxx: PostgreSQL driver'
+ 'freetds: Sybase & MS SQL driver'
+ 'xbase: XBase driver'
+ 'calligra-sheets: Spreadsheet-to-Kexi-table import plugin'
+ 'kdeedu-marble: map form widget'
+ 'calligra-plugins: extra calligra plugins')
conflicts=('koffice-kexi' 'koffice-kexi-doc' 'calligra-kexi-doc')
replaces=('koffice-kexi' 'koffice-kexi-doc' 'calligra-kexi-doc')
install=calligra-kexi.install
@@ -192,8 +190,8 @@ package_calligra-plan() {
package_calligra-stage() {
pkgdesc="Write presentation documents"
- depends=('calligra-libs' 'calligra-templates')
- optdepends=('calligra-filters: import/export filters')
+ depends=('calligra-libs' 'calligra-templates' 'kdebase-runtime')
+ optdepends=('calligra-plugins: extra calligra plugins')
conflicts=('koffice-kpresenter' 'koffice-kpresenter-doc' 'calligra-stage-doc')
replaces=('koffice-kpresenter' 'koffice-kpresenter-doc' 'calligra-stage-doc')
install=calligra-stage.install
@@ -204,9 +202,8 @@ package_calligra-stage() {
package_calligra-krita() {
pkgdesc="Edit and paint images"
- depends=('calligra-libs' 'calligra-templates' 'calligra-plugins' 'glew'
- 'qimageblitz' 'poppler-qt' 'openexr' 'opengtl')
- optdepends=('calligra-filters: import/export filters')
+ depends=('calligra-templates' 'calligra-plugins' 'kdebase-runtime'
+ 'qimageblitz' 'poppler-qt' 'opengtl' 'glew' 'libkdcraw' 'fftw')
conflicts=('koffice-krita' 'calligra-krita-doc')
replaces=('koffice-krita' 'calligra-krita-doc')
install=calligra-krita.install
@@ -217,8 +214,10 @@ package_calligra-krita() {
package_calligra-sheets() {
pkgdesc="Write spreadsheet documents"
- depends=('calligra-libs' 'calligra-templates' 'calligra-plugins' 'gsl')
- optdepends=('calligra-filters: import/export filters')
+ depends=('calligra-templates' 'calligra-libs' 'gsl' 'kdebase-runtime')
+ optdepends=('calligra-filters: import/export filters'
+ 'calligra-plugins: extra calligra plugins'
+ 'calligra-tools: extra calligra tools')
conflicts=('koffice-kspread' 'koffice-kspread-doc' 'calligra-tables-doc' 'calligra-tables')
replaces=('koffice-kspread' 'koffice-kspread-doc' 'calligra-tables-doc' 'calligra-tables')
install=calligra-sheets.install
@@ -229,9 +228,9 @@ package_calligra-sheets() {
package_calligra-words() {
pkgdesc="Word Processor"
- depends=('calligra-libs' 'calligra-templates' 'calligra-plugins' 'calligra-pics'
- 'calligra-kounavail' 'kdegraphics-okular')
- optdepends=('calligra-filters: import/export filters')
+ depends=('calligra-templates' 'calligra-pics' 'calligra-kounavail'
+ 'calligra-plugins' 'kdegraphics-okular')
+ optdepends=('calligra-tools: extra calligra tools')
conflicts=('koffice-kword')
replaces=('koffice-kword')
install=calligra-words.install
@@ -249,17 +248,9 @@ package_calligra-handbook() {
make DESTDIR="${pkgdir}" install
}
-package_calligra-thesaurus-doc() {
- pkgdesc="Documentation for Thesaurus"
- conflicts=('koffice-thesaurus-doc')
- replaces=('koffice-thesaurus-doc')
-
- cd "${srcdir}"/build/doc/thesaurus
- make DESTDIR="${pkgdir}" install
-}
-
package_calligra-braindump() {
pkgdesc="Notes and idea gathering"
+ depends=('calligra-libs' 'kdebase-runtime')
install=calligra-braindump.install
cd "${srcdir}"/build/braindump
@@ -268,12 +259,11 @@ package_calligra-braindump() {
package_calligra-flow() {
pkgdesc="Flowchart & Diagram Editing"
- install=calligra-flow.install
+ depends=('calligra-libs' 'kdebase-runtime')
conflicts=('calligra-flow-doc')
replaces=('calligra-flow-doc')
+ install=calligra-flow.install
cd "${srcdir}"/build/flow
make DESTDIR="${pkgdir}" install
}
-
-##### package apps done #####
diff --git a/testing/gdk-pixbuf2/PKGBUILD b/testing/gdk-pixbuf2/PKGBUILD
index e65888711..adf34cb4c 100644
--- a/testing/gdk-pixbuf2/PKGBUILD
+++ b/testing/gdk-pixbuf2/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 155074 2012-04-01 11:32:10Z heftig $
+# $Id: PKGBUILD 156170 2012-04-15 07:56:15Z ibiru $
# Maintainer: Ionut Biru <ibiru@archlinux.org>
pkgname=gdk-pixbuf2
-pkgver=2.26.0
+pkgver=2.26.1
pkgrel=1
pkgdesc="An image loading library"
arch=('i686' 'x86_64')
@@ -13,7 +13,7 @@ makedepends=('gtk-doc' 'gobject-introspection')
options=('!libtool')
install=gdk-pixbuf2.install
source=(http://download.gnome.org/sources/gdk-pixbuf/${pkgver%.*}/gdk-pixbuf-$pkgver.tar.xz)
-sha256sums=('a5028d3a33710cbb6c6264bc561b6e252b37f067dff7b5b52473621e064f254d')
+sha256sums=('a60af12b58d9cc15ba4c680c6730ce5d38e8d664af1d575a379385b94b4ec7ba')
build() {
cd "gdk-pixbuf-$pkgver"
diff --git a/testing/gdk-pixbuf2/gdk-pixbuf2.install b/testing/gdk-pixbuf2/gdk-pixbuf2.install
index 9a26e38dc..f04c0967a 100644
--- a/testing/gdk-pixbuf2/gdk-pixbuf2.install
+++ b/testing/gdk-pixbuf2/gdk-pixbuf2.install
@@ -1,5 +1,5 @@
post_install() {
- /usr/bin/gdk-pixbuf-query-loaders --update-cache
+ gdk-pixbuf-query-loaders --update-cache
}
post_upgrade() {
diff --git a/testing/gdm/PKGBUILD b/testing/gdm/PKGBUILD
index 5fab71d9c..2df092e0b 100644
--- a/testing/gdm/PKGBUILD
+++ b/testing/gdm/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 155078 2012-04-01 11:32:19Z heftig $
+# $Id: PKGBUILD 156172 2012-04-15 08:17:07Z ibiru $
# Maintainer: Jan de Groot <jgc@archlinux.org>
pkgname=gdm
-pkgver=3.4.0.1
+pkgver=3.4.1
pkgrel=1
pkgdesc="Gnome Display Manager (a reimplementation of xdm)"
arch=('i686' 'x86_64')
@@ -17,12 +17,12 @@ makedepends=('intltool' 'gnome-doc-utils' 'xorg-server' 'gobject-introspection')
optdepends=('gnome-shell: new login interface'
'fprintd: fingerprint authentication')
install=gdm.install
-source=(http://ftp.gnome.org/pub/gnome/sources/$pkgname/${pkgver:0:3}/$pkgname-$pkgver.tar.xz
+source=(http://ftp.gnome.org/pub/gnome/sources/$pkgname/${pkgver%.*}/$pkgname-$pkgver.tar.xz
fix_external_program_directories.patch
gdm-vt-allocation-hack.patch
gdm
gdm-autologin.pam gdm-fingerprint.pam gdm.pam gdm-password.pam gdm-smartcard.pam gdm-welcome.pam)
-sha256sums=('08686e32f35f65fc5578b48db802fc5e5ca4ca3c3adbbe0d2488ddc1c6f279cd'
+sha256sums=('6292968dff5fc89877b5e1aaa3c7d1484dd3ed2d4f388e935841d053439be665'
'f68600ccf80f475deb417d58ab3306c4a1ba4622688e2901996c8549c85a9ee6'
'3c8b588d4af08d94dc93bcd5e4c2a983c3f4fbbbe40833bceac2a1df4f1e8215'
'272c08d8e8b50bf424d0705ac864d4c18c47ec4f6893b1af732c2efbc86c9550'
@@ -34,7 +34,7 @@ sha256sums=('08686e32f35f65fc5578b48db802fc5e5ca4ca3c3adbbe0d2488ddc1c6f279cd'
'39bf3824cc505043dc3136356da16dab9df9f369f1077435a324be2ac16cf834')
build() {
- cd "$srcdir/$pkgname-$pkgver"
+ cd "$pkgname-$pkgver"
patch -Np1 -i "$srcdir/fix_external_program_directories.patch"
patch -Np1 -i "$srcdir/gdm-vt-allocation-hack.patch"
@@ -52,14 +52,14 @@ build() {
}
package() {
- cd "$srcdir/$pkgname-$pkgver"
+ cd "$pkgname-$pkgver"
make DESTDIR="$pkgdir" install
for i in gdm-autologin.pam gdm-fingerprint.pam gdm.pam gdm-password.pam gdm-smartcard.pam gdm-welcome.pam;do
install -m644 "$srcdir/$i" "$pkgdir/etc/pam.d/${i%.pam}"
done
- install -Dm755 "${srcdir}/gdm" "${pkgdir}/etc/rc.d/gdm"
+ install -Dm755 "$srcdir/gdm" "$pkgdir/etc/rc.d/gdm"
chmod 1770 "$pkgdir/var/log/gdm"
chmod 700 "$pkgdir/var/lib/gdm/.config/dconf"
diff --git a/testing/gnome-applets/PKGBUILD b/testing/gnome-applets/PKGBUILD
new file mode 100644
index 000000000..d7cff625a
--- /dev/null
+++ b/testing/gnome-applets/PKGBUILD
@@ -0,0 +1,36 @@
+# $Id: PKGBUILD 156196 2012-04-15 15:56:32Z ibiru $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=gnome-applets
+pkgver=3.4.1
+pkgrel=1
+pkgdesc="GNOME Applets"
+arch=(i686 x86_64)
+license=('GPL')
+depends=('gnome-panel' 'libgtop' 'gucharmap' 'libnotify' 'cpufrequtils')
+makedepends=('gnome-doc-utils' 'intltool' 'gnome-settings-daemon' 'networkmanager')
+options=(!emptydirs)
+url="http://www.gnome.org"
+groups=(gnome)
+install=gnome-applets.install
+source=(http://download.gnome.org/sources/$pkgname/${pkgver%.*}/$pkgname-$pkgver.tar.xz)
+sha256sums=('ec5487eb81fb29851b6336de94a329f5623e73830d61022e0e20fe3d038a415e')
+
+build() {
+ cd "$pkgname-$pkgver"
+ PYTHON=/usr/bin/python2 ./configure --prefix=/usr \
+ --sysconfdir=/etc --libexecdir=/usr/lib/gnome-applets \
+ --localstatedir=/var --disable-static \
+ --disable-scrollkeeper --disable-schemas-install \
+ --without-hal
+ make
+}
+
+package() {
+ cd "$pkgname-$pkgver"
+ make GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1 DESTDIR="$pkgdir" install
+
+ install -m755 -d "$pkgdir/usr/share/gconf/schemas"
+ gconf-merge-schema "$pkgdir/usr/share/gconf/schemas/$pkgname.schemas" --domain gnome-applets-3.0 "$pkgdir"/etc/gconf/schemas/*.schemas
+ rm -f "$pkgdir"/etc/gconf/schemas/*.schemas
+}
diff --git a/testing/gnome-applets/gnome-applets.install b/testing/gnome-applets/gnome-applets.install
new file mode 100644
index 000000000..dd9c34269
--- /dev/null
+++ b/testing/gnome-applets/gnome-applets.install
@@ -0,0 +1,22 @@
+pkgname=gnome-applets
+
+post_install() {
+ usr/sbin/gconfpkg --install ${pkgname}
+ gtk-update-icon-cache -q -t -f usr/share/icons/hicolor
+}
+
+pre_upgrade() {
+ pre_remove $1
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+pre_remove() {
+ usr/sbin/gconfpkg --uninstall ${pkgname}
+}
+
+post_remove() {
+ gtk-update-icon-cache -q -t -f usr/share/icons/hicolor
+}
diff --git a/testing/gnome-screensaver/PKGBUILD b/testing/gnome-screensaver/PKGBUILD
index f840750c0..9652a0c16 100644
--- a/testing/gnome-screensaver/PKGBUILD
+++ b/testing/gnome-screensaver/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 155135 2012-04-01 11:33:44Z heftig $
+# $Id: PKGBUILD 156174 2012-04-15 08:25:54Z ibiru $
# Maintainer: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
# Contributor: Jan de Groot <jgc@archlinux.org>
pkgname=gnome-screensaver
-pkgver=3.4.0
+pkgver=3.4.1
pkgrel=1
pkgdesc="Screensaver designed to integrate well with the GNOME desktop."
arch=('i686' 'x86_64')
@@ -15,13 +15,13 @@ makedepends=('pkgconfig' 'intltool' 'libxss')
groups=('gnome')
options=(!emptydirs)
install=gnome-screensaver.install
-source=(http://ftp.gnome.org/pub/GNOME/sources/${pkgname}/${pkgver%.*}/${pkgname}-${pkgver}.tar.xz
+source=(http://ftp.gnome.org/pub/GNOME/sources/$pkgname/${pkgver%.*}/$pkgname-$pkgver.tar.xz
gnome-screensaver.pam)
-sha256sums=('8d73e687f41975d66ee1fa56986d901a0bbdf4094f429cdbbed4a19016a38974'
+sha256sums=('d54a253f826ff6cd48eba53724339896a6dea39029848b6a8d5972c8e162069b'
'c19870c4f2d6e91ba0eea2603753a74e0c5c82ff5fa3cacb1198027a38d0a6cb')
build() {
- cd ${pkgname}-${pkgver}
+ cd $pkgname-$pkgver
./configure --prefix=/usr --sysconfdir=/etc \
--libexecdir=/usr/lib/gnome-screensaver \
--localstatedir=/var \
@@ -31,7 +31,7 @@ build() {
}
package() {
- cd ${pkgname}-${pkgver}
- make DESTDIR="${pkgdir}" install
- install -Dm644 "${srcdir}/gnome-screensaver.pam" "${pkgdir}/etc/pam.d/gnome-screensaver"
+ cd $pkgname-$pkgver
+ make DESTDIR="$pkgdir" install
+ install -Dm644 "$srcdir/gnome-screensaver.pam" "$pkgdir/etc/pam.d/gnome-screensaver"
}
diff --git a/testing/gnome-screensaver/gnome-screensaver.install b/testing/gnome-screensaver/gnome-screensaver.install
index 3b0e06046..d1a42c6ce 100644
--- a/testing/gnome-screensaver/gnome-screensaver.install
+++ b/testing/gnome-screensaver/gnome-screensaver.install
@@ -2,6 +2,6 @@ pkgname=gnome-screensaver
pre_upgrade() {
if [ -f usr/share/gconf/schemas/${pkgname}.schemas ]; then
- usr/sbin/gconfpkg --uninstall ${pkgname}
+ gconfpkg --uninstall ${pkgname}
fi
}
diff --git a/testing/xf86-video-ati/0000-poor-man-s-solid-picture-support-for-r300-r600.patch b/testing/xf86-video-ati/0000-poor-man-s-solid-picture-support-for-r300-r600.patch
new file mode 100644
index 000000000..bcfbf94db
--- /dev/null
+++ b/testing/xf86-video-ati/0000-poor-man-s-solid-picture-support-for-r300-r600.patch
@@ -0,0 +1,571 @@
+From 837149c63929d7d5a8ef6f8204d396f8e6d5acd7 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <michel@daenzer.net>
+Date: Fri, 13 Apr 2012 11:12:51 +0200
+Subject: [PATCH 1/4] Poor man's acceleration of solid pictures for R3xx-R7xx
+
+The patch below implements basic acceleration of solid pictures via
+scratch 1x1 pixmaps. It seems to at least alleviate some of the
+corruption and performance issues exposed by Cairo 1.12, and should also
+improve performance for other toolkits/apps using solid pictures.
+
+If there are no objections to this approach, maybe someone else can beat
+me to extending this for Evergreen+ and R1/2xx.
+---
+ src/r600_exa.c | 160 ++++++++++++++++++++++++++--------------------
+ src/radeon_exa_render.c | 115 ++++++++++++++++++++--------------
+ src/radeon_exa_shared.c | 19 ++++++
+ src/radeon_exa_shared.h | 1 +
+ 4 files changed, 179 insertions(+), 116 deletions(-)
+
+diff --git a/src/r600_exa.c b/src/r600_exa.c
+index e1eb62f..c3ae553 100644
+--- a/src/r600_exa.c
++++ b/src/r600_exa.c
+@@ -901,17 +901,8 @@ static Bool R600CheckCompositeTexture(PicturePtr pPict,
+ int op,
+ int unit)
+ {
+- int w = pPict->pDrawable->width;
+- int h = pPict->pDrawable->height;
+ unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone;
+ unsigned int i;
+- int max_tex_w, max_tex_h;
+-
+- max_tex_w = 8192;
+- max_tex_h = 8192;
+-
+- if ((w > max_tex_w) || (h > max_tex_h))
+- RADEON_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h));
+
+ for (i = 0; i < sizeof(R600TexFormats) / sizeof(R600TexFormats[0]); i++) {
+ if (R600TexFormats[i].fmt == pPict->format)
+@@ -951,9 +942,7 @@ static Bool R600TextureSetup(PicturePtr pPict, PixmapPtr pPix,
+ ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum];
+ RADEONInfoPtr info = RADEONPTR(pScrn);
+ struct radeon_accel_state *accel_state = info->accel_state;
+- int w = pPict->pDrawable->width;
+- int h = pPict->pDrawable->height;
+- unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone;
++ unsigned int repeatType;
+ unsigned int i;
+ tex_resource_t tex_res;
+ tex_sampler_t tex_samp;
+@@ -969,9 +958,16 @@ static Bool R600TextureSetup(PicturePtr pPict, PixmapPtr pPix,
+ }
+
+ /* Texture */
++ if (pPict->pDrawable) {
++ tex_res.w = pPict->pDrawable->width;
++ tex_res.h = pPict->pDrawable->height;
++ repeatType = pPict->repeat ? pPict->repeatType : RepeatNone;
++ } else {
++ tex_res.w = 1;
++ tex_res.h = 1;
++ repeatType = RepeatNormal;
++ }
+ tex_res.id = unit;
+- tex_res.w = w;
+- tex_res.h = h;
+ tex_res.pitch = accel_state->src_obj[unit].pitch;
+ tex_res.depth = 0;
+ tex_res.dim = SQ_TEX_DIM_2D;
+@@ -1170,24 +1166,24 @@ static Bool R600TextureSetup(PicturePtr pPict, PixmapPtr pPix,
+ vs_alu_consts[0] = xFixedToFloat(pPict->transform->matrix[0][0]);
+ vs_alu_consts[1] = xFixedToFloat(pPict->transform->matrix[0][1]);
+ vs_alu_consts[2] = xFixedToFloat(pPict->transform->matrix[0][2]);
+- vs_alu_consts[3] = 1.0 / w;
++ vs_alu_consts[3] = 1.0 / tex_res.w;
+
+ vs_alu_consts[4] = xFixedToFloat(pPict->transform->matrix[1][0]);
+ vs_alu_consts[5] = xFixedToFloat(pPict->transform->matrix[1][1]);
+ vs_alu_consts[6] = xFixedToFloat(pPict->transform->matrix[1][2]);
+- vs_alu_consts[7] = 1.0 / h;
++ vs_alu_consts[7] = 1.0 / tex_res.h;
+ } else {
+ accel_state->is_transform[unit] = FALSE;
+
+ vs_alu_consts[0] = 1.0;
+ vs_alu_consts[1] = 0.0;
+ vs_alu_consts[2] = 0.0;
+- vs_alu_consts[3] = 1.0 / w;
++ vs_alu_consts[3] = 1.0 / tex_res.w;
+
+ vs_alu_consts[4] = 0.0;
+ vs_alu_consts[5] = 1.0;
+ vs_alu_consts[6] = 0.0;
+- vs_alu_consts[7] = 1.0 / h;
++ vs_alu_consts[7] = 1.0 / tex_res.h;
+ }
+
+ /* VS alu constants */
+@@ -1202,33 +1198,30 @@ static Bool R600CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
+ {
+ uint32_t tmp1;
+ PixmapPtr pSrcPixmap, pDstPixmap;
+- int max_tex_w, max_tex_h, max_dst_w, max_dst_h;
+
+ /* Check for unsupported compositing operations. */
+ if (op >= (int) (sizeof(R600BlendOp) / sizeof(R600BlendOp[0])))
+ RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op));
+
+- if (!pSrcPicture->pDrawable)
+- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
+-
+- pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable);
++ if (pSrcPicture->pDrawable) {
++ pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable);
+
+- max_tex_w = 8192;
+- max_tex_h = 8192;
+- max_dst_w = 8192;
+- max_dst_h = 8192;
++ if (pSrcPixmap->drawable.width >= 8192 ||
++ pSrcPixmap->drawable.height >= 8192) {
++ RADEON_FALLBACK(("Source w/h too large (%d,%d).\n",
++ pSrcPixmap->drawable.width,
++ pSrcPixmap->drawable.height));
++ }
+
+- if (pSrcPixmap->drawable.width >= max_tex_w ||
+- pSrcPixmap->drawable.height >= max_tex_h) {
+- RADEON_FALLBACK(("Source w/h too large (%d,%d).\n",
+- pSrcPixmap->drawable.width,
+- pSrcPixmap->drawable.height));
+- }
++ if (!R600CheckCompositeTexture(pSrcPicture, pDstPicture, op, 0))
++ return FALSE;
++ } else if (pSrcPicture->pSourcePict->type != SourcePictTypeSolidFill)
++ RADEON_FALLBACK(("Gradient pictures not supported yet\n"));
+
+ pDstPixmap = RADEONGetDrawablePixmap(pDstPicture->pDrawable);
+
+- if (pDstPixmap->drawable.width >= max_dst_w ||
+- pDstPixmap->drawable.height >= max_dst_h) {
++ if (pDstPixmap->drawable.width >= 8192 ||
++ pDstPixmap->drawable.height >= 8192) {
+ RADEON_FALLBACK(("Dest w/h too large (%d,%d).\n",
+ pDstPixmap->drawable.width,
+ pDstPixmap->drawable.height));
+@@ -1237,38 +1230,35 @@ static Bool R600CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
+ if (pMaskPicture) {
+ PixmapPtr pMaskPixmap;
+
+- if (!pMaskPicture->pDrawable)
+- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
++ if (pMaskPicture->pDrawable) {
++ pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable);
+
+- pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable);
+-
+- if (pMaskPixmap->drawable.width >= max_tex_w ||
+- pMaskPixmap->drawable.height >= max_tex_h) {
+- RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n",
+- pMaskPixmap->drawable.width,
+- pMaskPixmap->drawable.height));
+- }
++ if (pMaskPixmap->drawable.width >= 8192 ||
++ pMaskPixmap->drawable.height >= 8192) {
++ RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n",
++ pMaskPixmap->drawable.width,
++ pMaskPixmap->drawable.height));
++ }
+
+- if (pMaskPicture->componentAlpha) {
+- /* Check if it's component alpha that relies on a source alpha and
+- * on the source value. We can only get one of those into the
+- * single source value that we get to blend with.
+- */
+- if (R600BlendOp[op].src_alpha &&
+- (R600BlendOp[op].blend_cntl & COLOR_SRCBLEND_mask) !=
+- (BLEND_ZERO << COLOR_SRCBLEND_shift)) {
+- RADEON_FALLBACK(("Component alpha not supported with source "
+- "alpha and source value blending.\n"));
++ if (pMaskPicture->componentAlpha) {
++ /* Check if it's component alpha that relies on a source alpha and
++ * on the source value. We can only get one of those into the
++ * single source value that we get to blend with.
++ */
++ if (R600BlendOp[op].src_alpha &&
++ (R600BlendOp[op].blend_cntl & COLOR_SRCBLEND_mask) !=
++ (BLEND_ZERO << COLOR_SRCBLEND_shift)) {
++ RADEON_FALLBACK(("Component alpha not supported with source "
++ "alpha and source value blending.\n"));
++ }
+ }
+- }
+
+- if (!R600CheckCompositeTexture(pMaskPicture, pDstPicture, op, 1))
+- return FALSE;
++ if (!R600CheckCompositeTexture(pMaskPicture, pDstPicture, op, 1))
++ return FALSE;
++ } else if (pMaskPicture->pSourcePict->type != SourcePictTypeSolidFill)
++ RADEON_FALLBACK(("Gradient pictures not supported yet\n"));
+ }
+
+- if (!R600CheckCompositeTexture(pSrcPicture, pDstPicture, op, 0))
+- return FALSE;
+-
+ if (!R600GetDestFormat(pDstPicture, &tmp1))
+ return FALSE;
+
+@@ -1280,7 +1270,8 @@ static Bool R600PrepareComposite(int op, PicturePtr pSrcPicture,
+ PicturePtr pMaskPicture, PicturePtr pDstPicture,
+ PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst)
+ {
+- ScrnInfoPtr pScrn = xf86Screens[pSrc->drawable.pScreen->myNum];
++ ScreenPtr pScreen = pDst->drawable.pScreen;
++ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ RADEONInfoPtr info = RADEONPTR(pScrn);
+ struct radeon_accel_state *accel_state = info->accel_state;
+ uint32_t dst_format;
+@@ -1288,15 +1279,21 @@ static Bool R600PrepareComposite(int op, PicturePtr pSrcPicture,
+ shader_config_t vs_conf, ps_conf;
+ struct r600_accel_object src_obj, mask_obj, dst_obj;
+
+- if (pDst->drawable.bitsPerPixel < 8 || pSrc->drawable.bitsPerPixel < 8)
++ if (pDst->drawable.bitsPerPixel < 8 || (pSrc && pSrc->drawable.bitsPerPixel < 8))
+ return FALSE;
+
++ if (!pSrc) {
++ pSrc = RADEONSolidPixmap(pScreen, pSrcPicture->pSourcePict->solidFill.color);
++ if (!pSrc)
++ RADEON_FALLBACK("Failed to create solid scratch pixmap\n");
++ }
++
+ #if defined(XF86DRM_MODE)
+ if (info->cs) {
+ src_obj.offset = 0;
+ dst_obj.offset = 0;
+- src_obj.bo = radeon_get_pixmap_bo(pSrc);
+ dst_obj.bo = radeon_get_pixmap_bo(pDst);
++ src_obj.bo = radeon_get_pixmap_bo(pSrc);
+ dst_obj.tiling_flags = radeon_get_pixmap_tiling(pDst);
+ src_obj.tiling_flags = radeon_get_pixmap_tiling(pSrc);
+ dst_obj.surface = radeon_get_pixmap_surface(pDst);
+@@ -1322,7 +1319,16 @@ static Bool R600PrepareComposite(int op, PicturePtr pSrcPicture,
+ dst_obj.bpp = pDst->drawable.bitsPerPixel;
+ dst_obj.domain = RADEON_GEM_DOMAIN_VRAM;
+
+- if (pMask) {
++ if (pMaskPicture) {
++ if (!pMask) {
++ pMask = RADEONSolidPixmap(pScreen, pMaskPicture->pSourcePict->solidFill.color);
++ if (!pMask) {
++ if (!pSrcPicture->pDrawable)
++ pScreen->DestroyPixmap(pSrc);
++ RADEON_FALLBACK("Failed to create solid scratch pixmap\n");
++ }
++ }
++
+ #if defined(XF86DRM_MODE)
+ if (info->cs) {
+ mask_obj.offset = 0;
+@@ -1509,11 +1515,9 @@ static Bool R600PrepareComposite(int op, PicturePtr pSrcPicture,
+ return TRUE;
+ }
+
+-static void R600DoneComposite(PixmapPtr pDst)
++static void R600FinishComposite(ScrnInfoPtr pScrn, PixmapPtr pDst,
++ struct radeon_accel_state *accel_state)
+ {
+- ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+- RADEONInfoPtr info = RADEONPTR(pScrn);
+- struct radeon_accel_state *accel_state = info->accel_state;
+ int vtx_size;
+
+ if (accel_state->vsync)
+@@ -1527,6 +1531,22 @@ static void R600DoneComposite(PixmapPtr pDst)
+ r600_finish_op(pScrn, vtx_size);
+ }
+
++static void R600DoneComposite(PixmapPtr pDst)
++{
++ ScreenPtr pScreen = pDst->drawable.pScreen;
++ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
++ RADEONInfoPtr info = RADEONPTR(pScrn);
++ struct radeon_accel_state *accel_state = info->accel_state;
++
++ R600FinishComposite(pScrn, pDst, accel_state);
++
++ if (!accel_state->src_pic->pDrawable)
++ pScreen->DestroyPixmap(accel_state->src_pix);
++
++ if (accel_state->msk_pic && !accel_state->msk_pic->pDrawable)
++ pScreen->DestroyPixmap(accel_state->msk_pix);
++}
++
+ static void R600Composite(PixmapPtr pDst,
+ int srcX, int srcY,
+ int maskX, int maskY,
+@@ -1543,7 +1563,7 @@ static void R600Composite(PixmapPtr pDst,
+
+ #ifdef XF86DRM_MODE
+ if (info->cs && CS_FULL(info->cs)) {
+- R600DoneComposite(info->accel_state->dst_pix);
++ R600FinishComposite(pScrn, pDst, info->accel_state);
+ radeon_cs_flush_indirect(pScrn);
+ R600PrepareComposite(info->accel_state->composite_op,
+ info->accel_state->src_pic,
+diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c
+index e5c231f..b6cc9e4 100644
+--- a/src/radeon_exa_render.c
++++ b/src/radeon_exa_render.c
+@@ -299,8 +299,8 @@ static Bool RADEONSetupSourceTile(PicturePtr pPict,
+ if (repeatType == RepeatNormal || repeatType == RepeatReflect) {
+ Bool badPitch = needMatchingPitch && !RADEONPitchMatches(pPix);
+
+- int w = pPict->pDrawable->width;
+- int h = pPict->pDrawable->height;
++ int w = pPict->pDrawable ? pPict->pDrawable->width : 1;
++ int h = pPict->pDrawable ? pPict->pDrawable->height : 1;
+
+ if (pPict->transform) {
+ if (badPitch)
+@@ -1112,23 +1112,8 @@ static Bool R300CheckCompositeTexture(PicturePtr pPict,
+ ScreenPtr pScreen = pDstPict->pDrawable->pScreen;
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ RADEONInfoPtr info = RADEONPTR(pScrn);
+-
+ unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone;
+- int w = pPict->pDrawable->width;
+- int h = pPict->pDrawable->height;
+ int i;
+- int max_tex_w, max_tex_h;
+-
+- if (is_r500) {
+- max_tex_w = 4096;
+- max_tex_h = 4096;
+- } else {
+- max_tex_w = 2048;
+- max_tex_h = 2048;
+- }
+-
+- if ((w > max_tex_w) || (h > max_tex_h))
+- RADEON_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h));
+
+ for (i = 0; i < sizeof(R300TexFormats) / sizeof(R300TexFormats[0]); i++)
+ {
+@@ -1139,7 +1124,7 @@ static Bool R300CheckCompositeTexture(PicturePtr pPict,
+ RADEON_FALLBACK(("Unsupported picture format 0x%x\n",
+ (int)pPict->format));
+
+- if (!RADEONCheckTexturePOT(pPict, unit == 0)) {
++ if (pPict->pDrawable && !RADEONCheckTexturePOT(pPict, unit == 0)) {
+ if (info->cs) {
+ struct radeon_exa_pixmap_priv *driver_priv;
+ PixmapPtr pPix;
+@@ -1181,15 +1166,23 @@ static Bool FUNC_NAME(R300TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
+ {
+ RINFO_FROM_SCREEN(pPix->drawable.pScreen);
+ uint32_t txfilter, txformat0, txformat1, txoffset, txpitch, us_format = 0;
+- int w = pPict->pDrawable->width;
+- int h = pPict->pDrawable->height;
++ int w, h;
+ int i, pixel_shift, out_size = 6;
+- unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone;
++ unsigned int repeatType;
+ struct radeon_exa_pixmap_priv *driver_priv;
+ ACCEL_PREAMBLE();
+
+ TRACE;
+
++ if (pPict->pDrawable) {
++ w = pPict->pDrawable->width;
++ h = pPict->pDrawable->height;
++ repeatType = pPict->repeat ? pPict->repeatType : RepeatNone;
++ } else {
++ w = h = 1;
++ repeatType = RepeatNormal;
++ }
++
+ txpitch = exaGetPixmapPitch(pPix);
+ txoffset = 0;
+
+@@ -1394,11 +1387,6 @@ static Bool R300CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
+ if (op >= sizeof(RadeonBlendOp) / sizeof(RadeonBlendOp[0]))
+ RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op));
+
+- if (!pSrcPicture->pDrawable)
+- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
+-
+- pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable);
+-
+ if (IS_R500_3D) {
+ max_tex_w = 4096;
+ max_tex_h = 4096;
+@@ -1416,13 +1404,6 @@ static Bool R300CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
+ }
+ }
+
+- if (pSrcPixmap->drawable.width > max_tex_w ||
+- pSrcPixmap->drawable.height > max_tex_h) {
+- RADEON_FALLBACK(("Source w/h too large (%d,%d).\n",
+- pSrcPixmap->drawable.width,
+- pSrcPixmap->drawable.height));
+- }
+-
+ pDstPixmap = RADEONGetDrawablePixmap(pDstPicture->pDrawable);
+
+ if (pDstPixmap->drawable.width > max_dst_w ||
+@@ -1432,20 +1413,32 @@ static Bool R300CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
+ pDstPixmap->drawable.height));
+ }
+
++ if (pSrcPicture->pDrawable) {
++ pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable);
++
++ if (pSrcPixmap->drawable.width > max_tex_w ||
++ pSrcPixmap->drawable.height > max_tex_h) {
++ RADEON_FALLBACK(("Source w/h too large (%d,%d).\n",
++ pSrcPixmap->drawable.width,
++ pSrcPixmap->drawable.height));
++ }
++ } else if (pSrcPicture->pSourcePict->type != SourcePictTypeSolidFill)
++ RADEON_FALLBACK(("Gradient pictures not supported yet\n"));
++
+ if (pMaskPicture) {
+ PixmapPtr pMaskPixmap;
+
+- if (!pMaskPicture->pDrawable)
+- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
++ if (pMaskPicture->pDrawable) {
++ pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable);
+
+- pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable);
+-
+- if (pMaskPixmap->drawable.width > max_tex_w ||
+- pMaskPixmap->drawable.height > max_tex_h) {
+- RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n",
+- pMaskPixmap->drawable.width,
+- pMaskPixmap->drawable.height));
+- }
++ if (pMaskPixmap->drawable.width > max_tex_w ||
++ pMaskPixmap->drawable.height > max_tex_h) {
++ RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n",
++ pMaskPixmap->drawable.width,
++ pMaskPixmap->drawable.height));
++ }
++ } else if (pMaskPicture->pSourcePict->type != SourcePictTypeSolidFill)
++ RADEON_FALLBACK(("Gradient pictures not supported yet\n"));
+
+ if (pMaskPicture->componentAlpha) {
+ /* Check if it's component alpha that relies on a source alpha and
+@@ -1479,7 +1472,8 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
+ PicturePtr pMaskPicture, PicturePtr pDstPicture,
+ PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst)
+ {
+- RINFO_FROM_SCREEN(pDst->drawable.pScreen);
++ ScreenPtr pScreen = pDst->drawable.pScreen;
++ RINFO_FROM_SCREEN(pScreen);
+ uint32_t dst_format, dst_pitch;
+ uint32_t txenable, colorpitch;
+ uint32_t blendcntl, output_fmt;
+@@ -1508,9 +1502,24 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
+ if (((dst_pitch >> pixel_shift) & 0x7) != 0)
+ RADEON_FALLBACK(("Bad destination pitch 0x%x\n", (int)dst_pitch));
+
++ if (!pSrc) {
++ pSrc = RADEONSolidPixmap(pScreen, cpu_to_le32(pSrcPicture->pSourcePict->solidFill.color));
++ if (!pSrc)
++ RADEON_FALLBACK("Failed to create solid scratch pixmap\n");
++ }
++
+ if (!RADEONSetupSourceTile(pSrcPicture, pSrc, TRUE, FALSE))
+ return FALSE;
+
++ if (pMaskPicture && !pMask) {
++ pMask = RADEONSolidPixmap(pScreen, cpu_to_le32(pMaskPicture->pSourcePict->solidFill.color));
++ if (!pMask) {
++ if (!pSrcPicture->pDrawable)
++ pScreen->DestroyPixmap(pSrc);
++ RADEON_FALLBACK("Failed to create solid scratch pixmap\n");
++ }
++ }
++
+ RADEONPrepareCompositeCS(op, pSrcPicture, pMaskPicture, pDstPicture,
+ pSrc, pMask, pDst);
+
+@@ -2132,7 +2141,7 @@ static Bool FUNC_NAME(R300PrepareComposite)(int op, PicturePtr pSrcPicture,
+ return TRUE;
+ }
+
+-static void FUNC_NAME(RadeonDoneComposite)(PixmapPtr pDst)
++static void FUNC_NAME(RadeonFinishComposite)(PixmapPtr pDst)
+ {
+ RINFO_FROM_SCREEN(pDst->drawable.pScreen);
+ ACCEL_PREAMBLE();
+@@ -2179,6 +2188,20 @@ static void FUNC_NAME(RadeonDoneComposite)(PixmapPtr pDst)
+ LEAVE_DRAW(0);
+ }
+
++static void FUNC_NAME(RadeonDoneComposite)(PixmapPtr pDst)
++{
++ ScreenPtr pScreen = pDst->drawable.pScreen;
++ RINFO_FROM_SCREEN(pScreen);
++ struct radeon_accel_state *accel_state = info->accel_state;
++
++ FUNC_NAME(RadeonFinishComposite)(pDst);
++
++ if (!accel_state->src_pic->pDrawable)
++ pScreen->DestroyPixmap(accel_state->src_pix);
++
++ if (accel_state->msk_pic && !accel_state->msk_pic->pDrawable)
++ pScreen->DestroyPixmap(accel_state->msk_pix);
++}
+
+ #ifdef ACCEL_CP
+
+@@ -2257,7 +2280,7 @@ static void FUNC_NAME(RadeonCompositeTile)(ScrnInfoPtr pScrn,
+ if ((info->cs && CS_FULL(info->cs)) ||
+ (!info->cs && (info->cp->indirectBuffer->used + 4 * 32) >
+ info->cp->indirectBuffer->total)) {
+- FUNC_NAME(RadeonDoneComposite)(info->accel_state->dst_pix);
++ FUNC_NAME(RadeonFinishComposite)(info->accel_state->dst_pix);
+ if (info->cs)
+ radeon_cs_flush_indirect(pScrn);
+ else
+diff --git a/src/radeon_exa_shared.c b/src/radeon_exa_shared.c
+index be1d2fa..28dc335 100644
+--- a/src/radeon_exa_shared.c
++++ b/src/radeon_exa_shared.c
+@@ -126,6 +126,25 @@ Bool RADEONCheckBPP(int bpp)
+ return FALSE;
+ }
+
++PixmapPtr RADEONSolidPixmap(ScreenPtr pScreen, uint32_t solid)
++{
++ PixmapPtr pPix = pScreen->CreatePixmap(pScreen, 1, 1, 32, 0);
++ struct radeon_bo *bo;
++
++ exaMoveInPixmap(pPix);
++ bo = radeon_get_pixmap_bo(pPix);
++
++ if (radeon_bo_map(bo, 1)) {
++ pScreen->DestroyPixmap(pPix);
++ return NULL;
++ }
++
++ memcpy(bo->ptr, &solid, 4);
++ radeon_bo_unmap(bo);
++
++ return pPix;
++}
++
+ static Bool radeon_vb_get(ScrnInfoPtr pScrn)
+ {
+ RADEONInfoPtr info = RADEONPTR(pScrn);
+diff --git a/src/radeon_exa_shared.h b/src/radeon_exa_shared.h
+index 7b8b5ca..60a1045 100644
+--- a/src/radeon_exa_shared.h
++++ b/src/radeon_exa_shared.h
+@@ -40,6 +40,7 @@ extern void RADEONVlineHelperClear(ScrnInfoPtr pScrn);
+ extern void RADEONVlineHelperSet(ScrnInfoPtr pScrn, int x1, int y1, int x2, int y2);
+ extern Bool RADEONValidPM(uint32_t pm, int bpp);
+ extern Bool RADEONCheckBPP(int bpp);
++extern PixmapPtr RADEONSolidPixmap(ScreenPtr pScreen, uint32_t solid);
+
+ #define RADEON_TRACE_FALL 0
+ #define RADEON_TRACE_DRAW 0
+--
+1.7.7.5
+
diff --git a/testing/xf86-video-ati/0001-poor-man-s-solid-picture-support-for-evergreen.patch b/testing/xf86-video-ati/0001-poor-man-s-solid-picture-support-for-evergreen.patch
new file mode 100644
index 000000000..e6b5433e1
--- /dev/null
+++ b/testing/xf86-video-ati/0001-poor-man-s-solid-picture-support-for-evergreen.patch
@@ -0,0 +1,290 @@
+From 761ef4b340e689490a76ec5ce520c858335e2106 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Sat, 14 Apr 2012 08:53:39 -0400
+Subject: [PATCH] poor man's solid picture support for evergreen
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ src/evergreen_exa.c | 163 ++++++++++++++++++++++++++++++---------------------
+ 1 files changed, 95 insertions(+), 68 deletions(-)
+
+diff --git a/src/evergreen_exa.c b/src/evergreen_exa.c
+index cee3ec2..61b47a4 100644
+--- a/src/evergreen_exa.c
++++ b/src/evergreen_exa.c
+@@ -748,17 +748,8 @@ static Bool EVERGREENCheckCompositeTexture(PicturePtr pPict,
+ int op,
+ int unit)
+ {
+- int w = pPict->pDrawable->width;
+- int h = pPict->pDrawable->height;
+ unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone;
+ unsigned int i;
+- int max_tex_w, max_tex_h;
+-
+- max_tex_w = 16384;
+- max_tex_h = 16384;
+-
+- if ((w > max_tex_w) || (h > max_tex_h))
+- RADEON_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h));
+
+ for (i = 0; i < sizeof(EVERGREENTexFormats) / sizeof(EVERGREENTexFormats[0]); i++) {
+ if (EVERGREENTexFormats[i].fmt == pPict->format)
+@@ -798,9 +789,16 @@ static void EVERGREENXFormSetup(PicturePtr pPict, PixmapPtr pPix,
+ ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum];
+ RADEONInfoPtr info = RADEONPTR(pScrn);
+ struct radeon_accel_state *accel_state = info->accel_state;
+- int w = pPict->pDrawable->width;
+- int h = pPict->pDrawable->height;
+ int const_offset = unit * 8;
++ int w, h;
++
++ if (pPict->pDrawable) {
++ w = pPict->pDrawable->width;
++ h = pPict->pDrawable->height;
++ } else {
++ w = 1;
++ h = 1;
++ }
+
+ if (pPict->transform != 0) {
+ accel_state->is_transform[unit] = TRUE;
+@@ -837,9 +835,7 @@ static Bool EVERGREENTextureSetup(PicturePtr pPict, PixmapPtr pPix,
+ ScrnInfoPtr pScrn = xf86Screens[pPix->drawable.pScreen->myNum];
+ RADEONInfoPtr info = RADEONPTR(pScrn);
+ struct radeon_accel_state *accel_state = info->accel_state;
+- int w = pPict->pDrawable->width;
+- int h = pPict->pDrawable->height;
+- unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone;
++ unsigned int repeatType;
+ unsigned int i;
+ tex_resource_t tex_res;
+ tex_sampler_t tex_samp;
+@@ -854,9 +850,17 @@ static Bool EVERGREENTextureSetup(PicturePtr pPict, PixmapPtr pPix,
+ }
+
+ /* Texture */
++ if (pPict->pDrawable) {
++ tex_res.w = pPict->pDrawable->width;
++ tex_res.h = pPict->pDrawable->height;
++ repeatType = pPict->repeat ? pPict->repeatType : RepeatNone;
++ } else {
++ tex_res.w = 1;
++ tex_res.h = 1;
++ repeatType = RepeatNormal;
++ }
++
+ tex_res.id = unit;
+- tex_res.w = w;
+- tex_res.h = h;
+ tex_res.pitch = accel_state->src_obj[unit].pitch;
+ tex_res.depth = 0;
+ tex_res.dim = SQ_TEX_DIM_2D;
+@@ -1054,33 +1058,30 @@ static Bool EVERGREENCheckComposite(int op, PicturePtr pSrcPicture,
+ {
+ uint32_t tmp1;
+ PixmapPtr pSrcPixmap, pDstPixmap;
+- int max_tex_w, max_tex_h, max_dst_w, max_dst_h;
+
+ /* Check for unsupported compositing operations. */
+ if (op >= (int) (sizeof(EVERGREENBlendOp) / sizeof(EVERGREENBlendOp[0])))
+ RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op));
+
+- if (!pSrcPicture->pDrawable)
+- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
++ if (pSrcPicture->pDrawable) {
++ pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable);
+
+- pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable);
+-
+- max_tex_w = 8192;
+- max_tex_h = 8192;
+- max_dst_w = 8192;
+- max_dst_h = 8192;
++ if (pSrcPixmap->drawable.width >= 16384 ||
++ pSrcPixmap->drawable.height >= 16384) {
++ RADEON_FALLBACK(("Source w/h too large (%d,%d).\n",
++ pSrcPixmap->drawable.width,
++ pSrcPixmap->drawable.height));
++ }
+
+- if (pSrcPixmap->drawable.width >= max_tex_w ||
+- pSrcPixmap->drawable.height >= max_tex_h) {
+- RADEON_FALLBACK(("Source w/h too large (%d,%d).\n",
+- pSrcPixmap->drawable.width,
+- pSrcPixmap->drawable.height));
+- }
++ if (!EVERGREENCheckCompositeTexture(pSrcPicture, pDstPicture, op, 0))
++ return FALSE;
++ } else if (pSrcPicture->pSourcePict->type != SourcePictTypeSolidFill)
++ RADEON_FALLBACK(("Gradient pictures not supported yet\n"));
+
+ pDstPixmap = RADEONGetDrawablePixmap(pDstPicture->pDrawable);
+
+- if (pDstPixmap->drawable.width >= max_dst_w ||
+- pDstPixmap->drawable.height >= max_dst_h) {
++ if (pDstPixmap->drawable.width >= 16384 ||
++ pDstPixmap->drawable.height >= 16384) {
+ RADEON_FALLBACK(("Dest w/h too large (%d,%d).\n",
+ pDstPixmap->drawable.width,
+ pDstPixmap->drawable.height));
+@@ -1089,38 +1090,35 @@ static Bool EVERGREENCheckComposite(int op, PicturePtr pSrcPicture,
+ if (pMaskPicture) {
+ PixmapPtr pMaskPixmap;
+
+- if (!pMaskPicture->pDrawable)
+- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
+-
+- pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable);
++ if (pMaskPicture->pDrawable) {
++ pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable);
+
+- if (pMaskPixmap->drawable.width >= max_tex_w ||
+- pMaskPixmap->drawable.height >= max_tex_h) {
+- RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n",
+- pMaskPixmap->drawable.width,
+- pMaskPixmap->drawable.height));
+- }
++ if (pMaskPixmap->drawable.width >= 16384 ||
++ pMaskPixmap->drawable.height >= 16384) {
++ RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n",
++ pMaskPixmap->drawable.width,
++ pMaskPixmap->drawable.height));
++ }
+
+- if (pMaskPicture->componentAlpha) {
+- /* Check if it's component alpha that relies on a source alpha and
+- * on the source value. We can only get one of those into the
+- * single source value that we get to blend with.
+- */
+- if (EVERGREENBlendOp[op].src_alpha &&
+- (EVERGREENBlendOp[op].blend_cntl & COLOR_SRCBLEND_mask) !=
+- (BLEND_ZERO << COLOR_SRCBLEND_shift)) {
+- RADEON_FALLBACK(("Component alpha not supported with source "
+- "alpha and source value blending.\n"));
++ if (pMaskPicture->componentAlpha) {
++ /* Check if it's component alpha that relies on a source alpha and
++ * on the source value. We can only get one of those into the
++ * single source value that we get to blend with.
++ */
++ if (EVERGREENBlendOp[op].src_alpha &&
++ (EVERGREENBlendOp[op].blend_cntl & COLOR_SRCBLEND_mask) !=
++ (BLEND_ZERO << COLOR_SRCBLEND_shift)) {
++ RADEON_FALLBACK(("Component alpha not supported with source "
++ "alpha and source value blending.\n"));
++ }
+ }
+- }
+
+- if (!EVERGREENCheckCompositeTexture(pMaskPicture, pDstPicture, op, 1))
+- return FALSE;
++ if (!EVERGREENCheckCompositeTexture(pMaskPicture, pDstPicture, op, 1))
++ return FALSE;
++ } else if (pMaskPicture->pSourcePict->type != SourcePictTypeSolidFill)
++ RADEON_FALLBACK(("Gradient pictures not supported yet\n"));
+ }
+
+- if (!EVERGREENCheckCompositeTexture(pSrcPicture, pDstPicture, op, 0))
+- return FALSE;
+-
+ if (!EVERGREENGetDestFormat(pDstPicture, &tmp1))
+ return FALSE;
+
+@@ -1132,7 +1130,8 @@ static Bool EVERGREENPrepareComposite(int op, PicturePtr pSrcPicture,
+ PicturePtr pMaskPicture, PicturePtr pDstPicture,
+ PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst)
+ {
+- ScrnInfoPtr pScrn = xf86Screens[pSrc->drawable.pScreen->myNum];
++ ScreenPtr pScreen = pDst->drawable.pScreen;
++ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ RADEONInfoPtr info = RADEONPTR(pScrn);
+ struct radeon_accel_state *accel_state = info->accel_state;
+ uint32_t dst_format;
+@@ -1142,13 +1141,19 @@ static Bool EVERGREENPrepareComposite(int op, PicturePtr pSrcPicture,
+ struct r600_accel_object src_obj, mask_obj, dst_obj;
+ float *cbuf;
+
+- if (pDst->drawable.bitsPerPixel < 8 || pSrc->drawable.bitsPerPixel < 8)
++ if (pDst->drawable.bitsPerPixel < 8 || (pSrc && pSrc->drawable.bitsPerPixel < 8))
+ return FALSE;
+
++ if (!pSrc) {
++ pSrc = RADEONSolidPixmap(pScreen, pSrcPicture->pSourcePict->solidFill.color);
++ if (!pSrc)
++ RADEON_FALLBACK("Failed to create solid scratch pixmap\n");
++ }
++
+ src_obj.offset = 0;
+ dst_obj.offset = 0;
+- src_obj.bo = radeon_get_pixmap_bo(pSrc);
+ dst_obj.bo = radeon_get_pixmap_bo(pDst);
++ src_obj.bo = radeon_get_pixmap_bo(pSrc);
+ dst_obj.surface = radeon_get_pixmap_surface(pDst);
+ src_obj.surface = radeon_get_pixmap_surface(pSrc);
+ dst_obj.tiling_flags = radeon_get_pixmap_tiling(pDst);
+@@ -1166,7 +1171,15 @@ static Bool EVERGREENPrepareComposite(int op, PicturePtr pSrcPicture,
+ dst_obj.bpp = pDst->drawable.bitsPerPixel;
+ dst_obj.domain = RADEON_GEM_DOMAIN_VRAM;
+
+- if (pMask) {
++ if (pMaskPicture) {
++ if (!pMask) {
++ pMask = RADEONSolidPixmap(pScreen, pMaskPicture->pSourcePict->solidFill.color);
++ if (!pMask) {
++ if (!pSrcPicture->pDrawable)
++ pScreen->DestroyPixmap(pSrc);
++ RADEON_FALLBACK("Failed to create solid scratch pixmap\n");
++ }
++ }
+ mask_obj.offset = 0;
+ mask_obj.bo = radeon_get_pixmap_bo(pMask);
+ mask_obj.tiling_flags = radeon_get_pixmap_tiling(pMask);
+@@ -1363,11 +1376,9 @@ static Bool EVERGREENPrepareComposite(int op, PicturePtr pSrcPicture,
+ return TRUE;
+ }
+
+-static void EVERGREENDoneComposite(PixmapPtr pDst)
++static void EVERGREENFinishComposite(ScrnInfoPtr pScrn, PixmapPtr pDst,
++ struct radeon_accel_state *accel_state)
+ {
+- ScrnInfoPtr pScrn = xf86Screens[pDst->drawable.pScreen->myNum];
+- RADEONInfoPtr info = RADEONPTR(pScrn);
+- struct radeon_accel_state *accel_state = info->accel_state;
+ int vtx_size;
+
+ if (accel_state->vsync)
+@@ -1381,6 +1392,22 @@ static void EVERGREENDoneComposite(PixmapPtr pDst)
+ evergreen_finish_op(pScrn, vtx_size);
+ }
+
++static void EVERGREENDoneComposite(PixmapPtr pDst)
++{
++ ScreenPtr pScreen = pDst->drawable.pScreen;
++ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
++ RADEONInfoPtr info = RADEONPTR(pScrn);
++ struct radeon_accel_state *accel_state = info->accel_state;
++
++ EVERGREENFinishComposite(pScrn, pDst, accel_state);
++
++ if (!accel_state->src_pic->pDrawable)
++ pScreen->DestroyPixmap(accel_state->src_pix);
++
++ if (accel_state->msk_pic && !accel_state->msk_pic->pDrawable)
++ pScreen->DestroyPixmap(accel_state->msk_pix);
++}
++
+ static void EVERGREENComposite(PixmapPtr pDst,
+ int srcX, int srcY,
+ int maskX, int maskY,
+@@ -1393,7 +1420,7 @@ static void EVERGREENComposite(PixmapPtr pDst,
+ float *vb;
+
+ if (CS_FULL(info->cs)) {
+- EVERGREENDoneComposite(info->accel_state->dst_pix);
++ EVERGREENFinishComposite(pScrn, pDst, info->accel_state);
+ radeon_cs_flush_indirect(pScrn);
+ EVERGREENPrepareComposite(info->accel_state->composite_op,
+ info->accel_state->src_pic,
+--
+1.7.7.5
+
diff --git a/testing/xf86-video-ati/0002-poor-man-s-solid-picture-support-for-r100.patch b/testing/xf86-video-ati/0002-poor-man-s-solid-picture-support-for-r100.patch
new file mode 100644
index 000000000..3a2779446
--- /dev/null
+++ b/testing/xf86-video-ati/0002-poor-man-s-solid-picture-support-for-r100.patch
@@ -0,0 +1,182 @@
+From f36b911ecc31f689ddceeeb11d10eb7cb4a3428d Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Fri, 13 Apr 2012 13:24:46 -0400
+Subject: [PATCH 2/3] poor man's solid picture support for r100
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ src/radeon_exa_render.c | 101 +++++++++++++++++++++++++++--------------------
+ 1 files changed, 58 insertions(+), 43 deletions(-)
+
+diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c
+index b6cc9e4..451a625 100644
+--- a/src/radeon_exa_render.c
++++ b/src/radeon_exa_render.c
+@@ -338,17 +338,8 @@ static Bool R100CheckCompositeTexture(PicturePtr pPict,
+ int unit)
+ {
+ unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone;
+- int w = pPict->pDrawable->width;
+- int h = pPict->pDrawable->height;
+ int i;
+
+- /* r100 limit should be 2048, there are issues with 2048
+- * see 197a62704742a4a19736c2637ac92d1dc5ab34ed
+- */
+-
+- if ((w > 2047) || (h > 2047))
+- RADEON_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h));
+-
+ for (i = 0; i < sizeof(R100TexFormats) / sizeof(R100TexFormats[0]); i++) {
+ if (R100TexFormats[i].fmt == pPict->format)
+ break;
+@@ -357,7 +348,7 @@ static Bool R100CheckCompositeTexture(PicturePtr pPict,
+ RADEON_FALLBACK(("Unsupported picture format 0x%x\n",
+ (int)pPict->format));
+
+- if (!RADEONCheckTexturePOT(pPict, unit == 0))
++ if (pPict->pDrawable && !RADEONCheckTexturePOT(pPict, unit == 0))
+ return FALSE;
+
+ if (pPict->filter != PictFilterNearest &&
+@@ -392,15 +383,24 @@ static Bool FUNC_NAME(R100TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
+ {
+ RINFO_FROM_SCREEN(pPix->drawable.pScreen);
+ uint32_t txfilter, txformat, txoffset, txpitch;
+- int w = pPict->pDrawable->width;
+- int h = pPict->pDrawable->height;
+- unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone;
+- Bool repeat = (repeatType == RepeatNormal || repeatType == RepeatReflect) &&
+- !(unit == 0 && (info->accel_state->need_src_tile_x || info->accel_state->need_src_tile_y));
+- int i;
++ unsigned int repeatType;
++ Bool repeat;
++ int i, w, h;
+ struct radeon_exa_pixmap_priv *driver_priv;
+ ACCEL_PREAMBLE();
+
++ if (pPict->pDrawable) {
++ w = pPict->pDrawable->width;
++ h = pPict->pDrawable->height;
++ repeatType = pPict->repeat ? pPict->repeatType : RepeatNone;
++ } else {
++ w = h = 1;
++ repeatType = RepeatNormal;
++ }
++
++ repeat = (repeatType == RepeatNormal || repeatType == RepeatReflect) &&
++ !(unit == 0 && (info->accel_state->need_src_tile_x || info->accel_state->need_src_tile_y));
++
+ txpitch = exaGetPixmapPitch(pPix);
+ txoffset = 0;
+
+@@ -510,22 +510,6 @@ static Bool R100CheckComposite(int op, PicturePtr pSrcPicture,
+ if (op >= sizeof(RadeonBlendOp) / sizeof(RadeonBlendOp[0]))
+ RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op));
+
+- if (!pSrcPicture->pDrawable)
+- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
+-
+- /* r100 limit should be 2048, there are issues with 2048
+- * see 197a62704742a4a19736c2637ac92d1dc5ab34ed
+- */
+-
+- pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable);
+-
+- if (pSrcPixmap->drawable.width > 2047 ||
+- pSrcPixmap->drawable.height > 2047) {
+- RADEON_FALLBACK(("Source w/h too large (%d,%d).\n",
+- pSrcPixmap->drawable.width,
+- pSrcPixmap->drawable.height));
+- }
+-
+ pDstPixmap = RADEONGetDrawablePixmap(pDstPicture->pDrawable);
+
+ if (pDstPixmap->drawable.width > 2047 ||
+@@ -535,20 +519,35 @@ static Bool R100CheckComposite(int op, PicturePtr pSrcPicture,
+ pDstPixmap->drawable.height));
+ }
+
++ if (pSrcPicture->pDrawable) {
++ /* r100 limit should be 2048, there are issues with 2048
++ * see 197a62704742a4a19736c2637ac92d1dc5ab34ed
++ */
++ pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable);
++
++ if (pSrcPixmap->drawable.width > 2047 ||
++ pSrcPixmap->drawable.height > 2047) {
++ RADEON_FALLBACK(("Source w/h too large (%d,%d).\n",
++ pSrcPixmap->drawable.width,
++ pSrcPixmap->drawable.height));
++ }
++ } else if (pSrcPicture->pSourcePict->type != SourcePictTypeSolidFill)
++ RADEON_FALLBACK(("Gradient pictures not supported yet\n"));
++
+ if (pMaskPicture) {
+ PixmapPtr pMaskPixmap;
+
+- if (!pMaskPicture->pDrawable)
+- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
+-
+- pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable);
++ if (pMaskPicture->pDrawable) {
++ pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable);
+
+- if (pMaskPixmap->drawable.width > 2047 ||
+- pMaskPixmap->drawable.height > 2047) {
+- RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n",
+- pMaskPixmap->drawable.width,
+- pMaskPixmap->drawable.height));
+- }
++ if (pMaskPixmap->drawable.width > 2047 ||
++ pMaskPixmap->drawable.height > 2047) {
++ RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n",
++ pMaskPixmap->drawable.width,
++ pMaskPixmap->drawable.height));
++ }
++ } else if (pMaskPicture->pSourcePict->type != SourcePictTypeSolidFill)
++ RADEON_FALLBACK(("Gradient pictures not supported yet\n"));
+
+ if (pMaskPicture->componentAlpha) {
+ /* Check if it's component alpha that relies on a source alpha and
+@@ -624,7 +623,8 @@ static Bool FUNC_NAME(R100PrepareComposite)(int op,
+ PixmapPtr pMask,
+ PixmapPtr pDst)
+ {
+- RINFO_FROM_SCREEN(pDst->drawable.pScreen);
++ ScreenPtr pScreen = pDst->drawable.pScreen;
++ RINFO_FROM_SCREEN(pScreen);
+ uint32_t dst_format, dst_pitch, colorpitch;
+ uint32_t pp_cntl, blendcntl, cblend, ablend;
+ int pixel_shift;
+@@ -648,12 +648,27 @@ static Bool FUNC_NAME(R100PrepareComposite)(int op,
+
+ CHECK_OFFSET(pDst, 0x0f, "destination");
+
++ if (!pSrc) {
++ pSrc = RADEONSolidPixmap(pScreen, cpu_to_le32(pSrcPicture->pSourcePict->solidFill.color));
++ if (!pSrc)
++ RADEON_FALLBACK("Failed to create solid scratch pixmap\n");
++ }
++
+ if (((dst_pitch >> pixel_shift) & 0x7) != 0)
+ RADEON_FALLBACK(("Bad destination pitch 0x%x\n", (int)dst_pitch));
+
+ if (!RADEONSetupSourceTile(pSrcPicture, pSrc, FALSE, TRUE))
+ return FALSE;
+
++ if (pMaskPicture && !pMask) {
++ pMask = RADEONSolidPixmap(pScreen, cpu_to_le32(pMaskPicture->pSourcePict->solidFill.color));
++ if (!pMask) {
++ if (!pSrcPicture->pDrawable)
++ pScreen->DestroyPixmap(pSrc);
++ RADEON_FALLBACK("Failed to create solid scratch pixmap\n");
++ }
++ }
++
+ RADEONPrepareCompositeCS(op, pSrcPicture, pMaskPicture, pDstPicture,
+ pSrc, pMask, pDst);
+
+--
+1.7.7.5
+
diff --git a/testing/xf86-video-ati/0003-poor-man-s-solid-picture-support-for-r200.patch b/testing/xf86-video-ati/0003-poor-man-s-solid-picture-support-for-r200.patch
new file mode 100644
index 000000000..0a448fc93
--- /dev/null
+++ b/testing/xf86-video-ati/0003-poor-man-s-solid-picture-support-for-r200.patch
@@ -0,0 +1,179 @@
+From c5c8310858f8018a1754f2457d7b102dc7d62b23 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Fri, 13 Apr 2012 13:28:10 -0400
+Subject: [PATCH 3/3] poor man's solid picture support for r200
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ src/radeon_exa_render.c | 101 +++++++++++++++++++++++++++--------------------
+ 1 files changed, 58 insertions(+), 43 deletions(-)
+
+diff --git a/src/radeon_exa_render.c b/src/radeon_exa_render.c
+index 451a625..7f1a3ff 100644
+--- a/src/radeon_exa_render.c
++++ b/src/radeon_exa_render.c
+@@ -756,17 +756,8 @@ static Bool R200CheckCompositeTexture(PicturePtr pPict,
+ int unit)
+ {
+ unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone;
+- int w = pPict->pDrawable->width;
+- int h = pPict->pDrawable->height;
+ int i;
+
+- /* r200 limit should be 2048, there are issues with 2048
+- * see bug 19269
+- */
+-
+- if ((w > 2047) || (h > 2047))
+- RADEON_FALLBACK(("Picture w/h too large (%dx%d)\n", w, h));
+-
+ for (i = 0; i < sizeof(R200TexFormats) / sizeof(R200TexFormats[0]); i++)
+ {
+ if (R200TexFormats[i].fmt == pPict->format)
+@@ -776,7 +767,7 @@ static Bool R200CheckCompositeTexture(PicturePtr pPict,
+ RADEON_FALLBACK(("Unsupported picture format 0x%x\n",
+ (int)pPict->format));
+
+- if (!RADEONCheckTexturePOT(pPict, unit == 0))
++ if (pPict->pDrawable && !RADEONCheckTexturePOT(pPict, unit == 0))
+ return FALSE;
+
+ if (pPict->filter != PictFilterNearest &&
+@@ -809,15 +800,24 @@ static Bool FUNC_NAME(R200TextureSetup)(PicturePtr pPict, PixmapPtr pPix,
+ {
+ RINFO_FROM_SCREEN(pPix->drawable.pScreen);
+ uint32_t txfilter, txformat, txoffset, txpitch;
+- int w = pPict->pDrawable->width;
+- int h = pPict->pDrawable->height;
+- unsigned int repeatType = pPict->repeat ? pPict->repeatType : RepeatNone;
+- Bool repeat = (repeatType == RepeatNormal || repeatType == RepeatReflect) &&
+- !(unit == 0 && (info->accel_state->need_src_tile_x || info->accel_state->need_src_tile_y));
+- int i;
++ unsigned int repeatType;
++ Bool repeat;
++ int i, w, h;
+ struct radeon_exa_pixmap_priv *driver_priv;
+ ACCEL_PREAMBLE();
+
++ if (pPict->pDrawable) {
++ w = pPict->pDrawable->width;
++ h = pPict->pDrawable->height;
++ repeatType = pPict->repeat ? pPict->repeatType : RepeatNone;
++ } else {
++ w = h = 1;
++ repeatType = RepeatNormal;
++ }
++
++ repeat = (repeatType == RepeatNormal || repeatType == RepeatReflect) &&
++ !(unit == 0 && (info->accel_state->need_src_tile_x || info->accel_state->need_src_tile_y));
++
+ txpitch = exaGetPixmapPitch(pPix);
+
+ txoffset = 0;
+@@ -926,22 +926,6 @@ static Bool R200CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
+ if (op >= sizeof(RadeonBlendOp) / sizeof(RadeonBlendOp[0]))
+ RADEON_FALLBACK(("Unsupported Composite op 0x%x\n", op));
+
+- if (!pSrcPicture->pDrawable)
+- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
+-
+- /* r200 limit should be 2048, there are issues with 2048
+- * see bug 19269
+- */
+-
+- pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable);
+-
+- if (pSrcPixmap->drawable.width > 2047 ||
+- pSrcPixmap->drawable.height > 2047) {
+- RADEON_FALLBACK(("Source w/h too large (%d,%d).\n",
+- pSrcPixmap->drawable.width,
+- pSrcPixmap->drawable.height));
+- }
+-
+ pDstPixmap = RADEONGetDrawablePixmap(pDstPicture->pDrawable);
+
+ if (pDstPixmap->drawable.width > 2047 ||
+@@ -951,20 +935,35 @@ static Bool R200CheckComposite(int op, PicturePtr pSrcPicture, PicturePtr pMaskP
+ pDstPixmap->drawable.height));
+ }
+
++ if (pSrcPicture->pDrawable) {
++ /* r200 limit should be 2048, there are issues with 2048
++ * see 197a62704742a4a19736c2637ac92d1dc5ab34ed
++ */
++ pSrcPixmap = RADEONGetDrawablePixmap(pSrcPicture->pDrawable);
++
++ if (pSrcPixmap->drawable.width > 2047 ||
++ pSrcPixmap->drawable.height > 2047) {
++ RADEON_FALLBACK(("Source w/h too large (%d,%d).\n",
++ pSrcPixmap->drawable.width,
++ pSrcPixmap->drawable.height));
++ }
++ } else if (pSrcPicture->pSourcePict->type != SourcePictTypeSolidFill)
++ RADEON_FALLBACK(("Gradient pictures not supported yet\n"));
++
+ if (pMaskPicture) {
+ PixmapPtr pMaskPixmap;
+
+- if (!pMaskPicture->pDrawable)
+- RADEON_FALLBACK(("Solid or gradient pictures not supported yet\n"));
+-
+- pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable);
++ if (pMaskPicture->pDrawable) {
++ pMaskPixmap = RADEONGetDrawablePixmap(pMaskPicture->pDrawable);
+
+- if (pMaskPixmap->drawable.width > 2047 ||
+- pMaskPixmap->drawable.height > 2047) {
+- RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n",
+- pMaskPixmap->drawable.width,
+- pMaskPixmap->drawable.height));
+- }
++ if (pMaskPixmap->drawable.width > 2047 ||
++ pMaskPixmap->drawable.height > 2047) {
++ RADEON_FALLBACK(("Mask w/h too large (%d,%d).\n",
++ pMaskPixmap->drawable.width,
++ pMaskPixmap->drawable.height));
++ }
++ } else if (pMaskPicture->pSourcePict->type != SourcePictTypeSolidFill)
++ RADEON_FALLBACK(("Gradient pictures not supported yet\n"));
+
+ if (pMaskPicture->componentAlpha) {
+ /* Check if it's component alpha that relies on a source alpha and
+@@ -997,7 +996,8 @@ static Bool FUNC_NAME(R200PrepareComposite)(int op, PicturePtr pSrcPicture,
+ PicturePtr pMaskPicture, PicturePtr pDstPicture,
+ PixmapPtr pSrc, PixmapPtr pMask, PixmapPtr pDst)
+ {
+- RINFO_FROM_SCREEN(pDst->drawable.pScreen);
++ ScreenPtr pScreen = pDst->drawable.pScreen;
++ RINFO_FROM_SCREEN(pScreen);
+ uint32_t dst_format, dst_pitch;
+ uint32_t pp_cntl, blendcntl, cblend, ablend, colorpitch;
+ int pixel_shift;
+@@ -1024,9 +1024,24 @@ static Bool FUNC_NAME(R200PrepareComposite)(int op, PicturePtr pSrcPicture,
+ if (((dst_pitch >> pixel_shift) & 0x7) != 0)
+ RADEON_FALLBACK(("Bad destination pitch 0x%x\n", (int)dst_pitch));
+
++ if (!pSrc) {
++ pSrc = RADEONSolidPixmap(pScreen, cpu_to_le32(pSrcPicture->pSourcePict->solidFill.color));
++ if (!pSrc)
++ RADEON_FALLBACK("Failed to create solid scratch pixmap\n");
++ }
++
+ if (!RADEONSetupSourceTile(pSrcPicture, pSrc, FALSE, TRUE))
+ return FALSE;
+
++ if (pMaskPicture && !pMask) {
++ pMask = RADEONSolidPixmap(pScreen, cpu_to_le32(pMaskPicture->pSourcePict->solidFill.color));
++ if (!pMask) {
++ if (!pSrcPicture->pDrawable)
++ pScreen->DestroyPixmap(pSrc);
++ RADEON_FALLBACK("Failed to create solid scratch pixmap\n");
++ }
++ }
++
+ RADEONPrepareCompositeCS(op, pSrcPicture, pMaskPicture, pDstPicture,
+ pSrc, pMask, pDst);
+
+--
+1.7.7.5
+
diff --git a/testing/xf86-video-ati/PKGBUILD b/testing/xf86-video-ati/PKGBUILD
index e4214bf47..62e12eb83 100644
--- a/testing/xf86-video-ati/PKGBUILD
+++ b/testing/xf86-video-ati/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 156127 2012-04-14 09:33:09Z andyrtr $
+# $Id: PKGBUILD 156180 2012-04-15 10:27:42Z andyrtr $
# Maintainer: Jan de Groot <jgc@archlinux.org>
# Contributor: Alexander Baldeck <alexander@archlinux.org>
pkgname=xf86-video-ati
pkgver=6.14.4
-pkgrel=3
+pkgrel=4
pkgdesc="X.org ati video driver"
arch=('i686' 'x86_64')
url="http://xorg.freedesktop.org/"
@@ -15,18 +15,29 @@ conflicts=('xorg-server<1.11.99.902')
groups=('xorg-drivers' 'xorg')
options=('!libtool')
source=(${url}/releases/individual/driver/${pkgname}-${pkgver}.tar.bz2
- solid_pictures_fixes.diff
- git_fixes.diff)
+ git_fixes.diff
+ 0000-poor-man-s-solid-picture-support-for-r300-r600.patch
+ 0001-poor-man-s-solid-picture-support-for-evergreen.patch
+ 0002-poor-man-s-solid-picture-support-for-r100.patch
+ 0003-poor-man-s-solid-picture-support-for-r200.patch)
sha1sums=('75ad000bc00599e1797134f2d20d3094cba6af92'
- '480b7360a5e22661145430f21089ef82e3cd2d25'
- '8b774e2f0310075cff2b7d874b0bed38d6245769')
+ '8b774e2f0310075cff2b7d874b0bed38d6245769'
+ '787f88c428f56ca6e96ba5eaf043a30bddfd0e23'
+ '69359a6623fe0f2214790c8ad40cac1a680a3825'
+ 'c0709ab82728e34838a8aeead7d1b79b7faf09bd'
+ '77a519e250c27a9fb94eeb52da655eed7c5f2eca')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
patch -Np1 -i ${srcdir}/git_fixes.diff
+
# fix rendering issues with recent cairo - testing attemp taken from https://bugs.freedesktop.org/show_bug.cgi?id=47266
- # attachements 59943-59946
- patch -Np1 -i ${srcdir}/solid_pictures_fixes.diff
+ # and http://lists.x.org/archives/xorg-driver-ati/2012-April/022724.html
+ patch -Np1 -i ${srcdir}/0000-poor-man-s-solid-picture-support-for-r300-r600.patch
+ patch -Np1 -i ${srcdir}/0001-poor-man-s-solid-picture-support-for-evergreen.patch
+ patch -Np1 -i ${srcdir}/0002-poor-man-s-solid-picture-support-for-r100.patch
+ patch -Np1 -i ${srcdir}/0003-poor-man-s-solid-picture-support-for-r200.patch
+
./configure --prefix=/usr --enable-dri
make
}
diff --git a/testing/xorg-server/10-quirks.conf b/testing/xorg-server/10-quirks.conf
new file mode 100644
index 000000000..7afad22dc
--- /dev/null
+++ b/testing/xorg-server/10-quirks.conf
@@ -0,0 +1,10 @@
+# Collection of quirks and blacklist/whitelists for specific devices.
+
+
+# Accelerometer device, posts data through ABS_X/ABS_Y, making X unusable
+# http://bugs.freedesktop.org/show_bug.cgi?id=22442
+Section "InputClass"
+ Identifier "ThinkPad HDAPS accelerometer blacklist"
+ MatchProduct "ThinkPad HDAPS accelerometer data"
+ Option "Ignore" "on"
+EndSection
diff --git a/testing/xorg-server/EXA_Fall_back_earlier_and_more_thoroughly_from_exaGlyphsV2.diff b/testing/xorg-server/EXA_Fall_back_earlier_and_more_thoroughly_from_exaGlyphsV2.diff
new file mode 100644
index 000000000..12c110151
--- /dev/null
+++ b/testing/xorg-server/EXA_Fall_back_earlier_and_more_thoroughly_from_exaGlyphsV2.diff
@@ -0,0 +1,116 @@
+--- xorg-server-1.12.1/exa/exa_glyphs.c 2012-03-30 04:57:25.000000000 +0200
++++ xorg-server-1.12.1/exa_glyphs.c.new 2012-04-15 11:48:51.683214230 +0200
+@@ -686,6 +686,7 @@
+ PixmapPtr pMaskPixmap = 0;
+ PicturePtr pMask = NULL;
+ ScreenPtr pScreen = pDst->pDrawable->pScreen;
++ ExaScreenPriv(pScreen);
+ int width = 0, height = 0;
+ int x, y;
+ int first_xOff = list->xOff, first_yOff = list->yOff;
+@@ -697,7 +698,6 @@
+ ExaGlyphBuffer buffer;
+
+ if (maskFormat) {
+- ExaScreenPriv(pScreen);
+ GCPtr pGC;
+ xRectangle rect;
+
+@@ -719,22 +719,20 @@
+ maskFormat->depth,
+ CREATE_PIXMAP_USAGE_SCRATCH);
+ if (!pMaskPixmap)
+- return;
++ goto fallback;
+ component_alpha = NeedsComponent(maskFormat->format);
+ pMask = CreatePicture(0, &pMaskPixmap->drawable,
+ maskFormat, CPComponentAlpha, &component_alpha,
+ serverClient, &error);
+- if (!pMask ||
+- (!component_alpha && pExaScr->info->CheckComposite &&
+- !(*pExaScr->info->CheckComposite) (PictOpAdd, pSrc, NULL, pMask)))
++ (*pScreen->DestroyPixmap) (pMaskPixmap);
++ if (!pMask)
++ goto fallback;
++
++ if (!component_alpha && pExaScr->info->CheckComposite &&
++ !(*pExaScr->info->CheckComposite) (PictOpAdd, pSrc, NULL, pMask))
+ {
+ PictFormatPtr argbFormat;
+
+- (*pScreen->DestroyPixmap) (pMaskPixmap);
+-
+- if (!pMask)
+- return;
+-
+ /* The driver can't seem to composite to a8, let's try argb (but
+ * without component-alpha) */
+ FreePicture((pointer) pMask, (XID) 0);
+@@ -748,15 +746,25 @@
+ maskFormat->depth,
+ CREATE_PIXMAP_USAGE_SCRATCH);
+ if (!pMaskPixmap)
+- return;
++ goto fallback;
+
+ pMask = CreatePicture(0, &pMaskPixmap->drawable, maskFormat, 0, 0,
+ serverClient, &error);
+- if (!pMask) {
+- (*pScreen->DestroyPixmap) (pMaskPixmap);
+- return;
+- }
++ (*pScreen->DestroyPixmap) (pMaskPixmap);
++ if (!pMask)
++ goto fallback;
+ }
++
++ if (pExaScr->info->CheckComposite &&
++ (!(*pExaScr->info->CheckComposite) (PictOpAdd, pSrc, NULL, pMask) ||
++ (!(*pExaScr->info->CheckComposite) (op, pSrc, pMask, pDst) &&
++ (op != PictOpOver ||
++ !(*pExaScr->info->CheckComposite) (PictOpOutReverse, pSrc, pMask, pDst) ||
++ !(*pExaScr->info->CheckComposite) (PictOpOver, pSrc, pMask, pDst))))) {
++ FreePicture ((pointer) pMask, (XID) 0);
++ goto fallback;
++ }
++
+ pGC = GetScratchGC(pMaskPixmap->drawable.depth, pScreen);
+ ValidateGC(&pMaskPixmap->drawable, pGC);
+ rect.x = 0;
+@@ -769,6 +777,13 @@
+ y = -extents.y1;
+ }
+ else {
++ if (pExaScr->info->CheckComposite &&
++ !(*pExaScr->info->CheckComposite) (op, pSrc, NULL, pDst) &&
++ (op != PictOpOver ||
++ !(*pExaScr->info->CheckComposite) (PictOpOutReverse, pSrc, NULL, pDst) ||
++ !(*pExaScr->info->CheckComposite) (PictOpOver, pSrc, NULL, pDst)))
++ goto fallback;
++
+ x = 0;
+ y = 0;
+ }
+@@ -834,6 +849,10 @@
+ xSrc + x - first_xOff,
+ ySrc + y - first_yOff, 0, 0, x, y, width, height);
+ FreePicture((pointer) pMask, (XID) 0);
+- (*pScreen->DestroyPixmap) (pMaskPixmap);
+ }
++
++ return;
++
++fallback:
++ ExaCheckGlyphs(op, pSrc, pDst, maskFormat, xSrc, ySrc, nlist, list, glyphs);
+ }
+--- xorg-server-1.12.1/exa/exa_render.c 2012-03-30 04:57:25.000000000 +0200
++++ xorg-server-1.12.1/exa_render.c.new 2012-04-15 11:50:35.272482047 +0200
+@@ -878,7 +878,7 @@
+ Bool saveMaskRepeat = pMask ? pMask->repeat : 0;
+ RegionRec region;
+
+- if (pExaScr->swappedOut)
++ if (pExaScr->fallback_counter || pExaScr->swappedOut)
+ goto fallback;
+
+ /* Remove repeat in source if useless */
diff --git a/testing/xorg-server/PKGBUILD b/testing/xorg-server/PKGBUILD
new file mode 100644
index 000000000..557f181fe
--- /dev/null
+++ b/testing/xorg-server/PKGBUILD
@@ -0,0 +1,201 @@
+# $Id: PKGBUILD 156178 2012-04-15 10:04:10Z andyrtr $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgbase=xorg-server
+pkgname=('xorg-server' 'xorg-server-xephyr' 'xorg-server-xdmx' 'xorg-server-xvfb' 'xorg-server-xnest' 'xorg-server-common' 'xorg-server-devel')
+pkgver=1.12.1
+pkgrel=2
+arch=('i686' 'x86_64')
+license=('custom')
+url="http://xorg.freedesktop.org"
+makedepends=('pixman' 'libx11' 'mesa' 'libgl' 'xf86driproto' 'xcmiscproto' 'xtrans' 'bigreqsproto' 'randrproto' 'inputproto' 'fontsproto' 'videoproto'
+ 'compositeproto' 'recordproto' 'scrnsaverproto' 'resourceproto' 'xineramaproto' 'libxkbfile' 'libxfont' 'renderproto' 'libpciaccess'
+ 'libxv' 'xf86dgaproto' 'libxmu' 'libxrender' 'libxi' 'dmxproto' 'libxaw' 'libdmx' 'libxtst' 'libxres' 'xorg-xkbcomp' 'xorg-util-macros'
+ 'xorg-font-util' 'glproto' 'dri2proto' 'udev' 'libgcrypt')
+options=('!libtool')
+source=(${url}/releases/individual/xserver/${pkgbase}-${pkgver}.tar.bz2
+ autoconfig-nvidia.patch
+ autoconfig-sis.patch
+ EXA_Fall_back_earlier_and_more_thoroughly_from_exaGlyphsV2.diff
+ #git-fixes.patch
+ xvfb-run
+ xvfb-run.1
+ 10-quirks.conf)
+sha1sums=('922b963901f4711449b53fb32ce3e14f5b642766'
+ '63836e5cfb4ae7353fb2e31239a544409c7ead32'
+ '175de5630b43dbc97778adfba5563b7fdd77f11f'
+ '4acb39587f73bcbb9a331377d6ef99cb73eb95a8'
+ 'c94f742d3f9cabf958ae58e4015d9dd185aabedc'
+ '6838fc00ef4618c924a77e0fb03c05346080908a'
+ '993798f3d22ad672d769dae5f48d1fa068d5578f')
+
+build() {
+ cd "${srcdir}/${pkgbase}-${pkgver}"
+
+ # Use nouveau/nv/nvidia drivers for nvidia devices
+ patch -Np1 -i "${srcdir}/autoconfig-nvidia.patch"
+
+ # Use unofficial imedia SiS driver for supported SiS devices
+ patch -Np0 -i "${srcdir}/autoconfig-sis.patch"
+
+ # fix glitches and crashes with EXA and cairo 1.12
+ # taken from https://bugs.freedesktop.org/show_bug.cgi?id=47266
+ # and reworked for 1.12.1 changes
+ patch -Np1 -i ${srcdir}/EXA_Fall_back_earlier_and_more_thoroughly_from_exaGlyphsV2.diff
+
+ # Add post-release patches from 1.11 branch
+# patch -Np1 -i "${srcdir}/git-fixes.patch"
+
+ autoreconf -fi
+ ./configure --prefix=/usr \
+ --enable-ipv6 \
+ --enable-dri \
+ --enable-dmx \
+ --enable-xvfb \
+ --enable-xnest \
+ --enable-composite \
+ --enable-xcsecurity \
+ --enable-xorg \
+ --enable-xephyr \
+ --enable-glx-tls \
+ --enable-kdrive \
+ --enable-kdrive-evdev \
+ --enable-kdrive-kbd \
+ --enable-kdrive-mouse \
+ --enable-install-setuid \
+ --enable-config-udev \
+ --disable-config-dbus \
+ --enable-record \
+ --disable-xfbdev \
+ --disable-xfake \
+ --disable-static \
+ --sysconfdir=/etc/X11 \
+ --localstatedir=/var \
+ --with-xkb-path=/usr/share/X11/xkb \
+ --with-xkb-output=/var/lib/xkb \
+ --with-fontrootdir=/usr/share/fonts
+ make
+
+ # Disable subdirs for make install rule to make splitting easier
+ sed -e 's/^DMX_SUBDIRS =.*/DMX_SUBDIRS =/' \
+ -e 's/^XVFB_SUBDIRS =.*/XVFB_SUBDIRS =/' \
+ -e 's/^XNEST_SUBDIRS =.*/XNEST_SUBDIRS = /' \
+ -e 's/^KDRIVE_SUBDIRS =.*/KDRIVE_SUBDIRS =/' \
+ -i hw/Makefile
+}
+
+package_xorg-server-common() {
+ pkgdesc="Xorg server common files"
+ depends=('xkeyboard-config' 'xorg-xkbcomp' 'xorg-setxkbmap' 'xorg-fonts-misc')
+
+ cd "${srcdir}/${pkgbase}-${pkgver}"
+ install -m755 -d "${pkgdir}/usr/share/licenses/xorg-server-common"
+ install -m644 COPYING "${pkgdir}/usr/share/licenses/xorg-server-common"
+
+ make -C xkb DESTDIR="${pkgdir}" install-data
+
+ install -m755 -d "${pkgdir}/usr/share/man/man1"
+ install -m644 man/Xserver.1 "${pkgdir}/usr/share/man/man1/"
+
+ install -m755 -d "${pkgdir}/usr/lib/xorg"
+ install -m644 dix/protocol.txt "${pkgdir}/usr/lib/xorg/"
+}
+
+package_xorg-server() {
+ pkgdesc="Xorg X server"
+ depends=(libxdmcp libxfont udev libpciaccess libdrm pixman libgcrypt libxau xorg-server-common xf86-input-evdev)
+ backup=('etc/X11/xorg.conf.d/10-evdev.conf' 'etc/X11/xorg.conf.d/10-quirks.conf')
+ provides=('x-server')
+ groups=('xorg')
+ conflicts=('nvidia-utils<=290.10')
+
+ cd "${srcdir}/${pkgbase}-${pkgver}"
+ make DESTDIR="${pkgdir}" install
+
+ install -m755 -d "${pkgdir}/etc/X11"
+ mv "${pkgdir}/usr/share/X11/xorg.conf.d" "${pkgdir}/etc/X11/"
+ install -m644 "${srcdir}/10-quirks.conf" "${pkgdir}/etc/X11/xorg.conf.d/"
+
+ rmdir "${pkgdir}/usr/share/X11"
+
+ # Needed for non-mesa drivers, libgl will restore it
+ mv "${pkgdir}/usr/lib/xorg/modules/extensions/libglx.so" \
+ "${pkgdir}/usr/lib/xorg/modules/extensions/libglx.xorg"
+
+ rm -rf "${pkgdir}/var"
+
+ rm -f "${pkgdir}/usr/share/man/man1/Xserver.1"
+ rm -f "${pkgdir}/usr/lib/xorg/protocol.txt"
+
+ install -m755 -d "${pkgdir}/usr/share/licenses/xorg-server"
+ ln -sf ../xorg-server-common/COPYING "${pkgdir}/usr/share/licenses/xorg-server/COPYING"
+
+ rm -rf "${pkgdir}/usr/lib/pkgconfig"
+ rm -rf "${pkgdir}/usr/include"
+ rm -rf "${pkgdir}/usr/share/aclocal"
+}
+
+package_xorg-server-xephyr() {
+ pkgdesc="A nested X server that runs as an X application"
+ depends=(libxfont libgl libgcrypt libxv pixman xorg-server-common)
+
+ cd "${srcdir}/${pkgbase}-${pkgver}/hw/kdrive"
+ make DESTDIR="${pkgdir}" install
+
+ install -m755 -d "${pkgdir}/usr/share/licenses/xorg-server-xephyr"
+ ln -sf ../xorg-server-common/COPYING "${pkgdir}/usr/share/licenses/xorg-server-xephyr/COPYING"
+}
+
+package_xorg-server-xvfb() {
+ pkgdesc="Virtual framebuffer X server"
+ depends=(libxfont libxdmcp libxau libgcrypt pixman xorg-server-common)
+
+ cd "${srcdir}/${pkgbase}-${pkgver}/hw/vfb"
+ make DESTDIR="${pkgdir}" install
+
+ install -m755 "${srcdir}/xvfb-run" "${pkgdir}/usr/bin/"
+ install -m644 "${srcdir}/xvfb-run.1" "${pkgdir}/usr/share/man/man1/"
+
+ install -m755 -d "${pkgdir}/usr/share/licenses/xorg-server-xvfb"
+ ln -sf ../xorg-server-common/COPYING "${pkgdir}/usr/share/licenses/xorg-server-xvfb/COPYING"
+}
+
+package_xorg-server-xnest() {
+ pkgdesc="A nested X server that runs as an X application"
+ depends=(libxfont libxext libgcrypt pixman xorg-server-common)
+
+ cd "${srcdir}/${pkgbase}-${pkgver}/hw/xnest"
+ make DESTDIR="${pkgdir}" install
+
+ install -m755 -d "${pkgdir}/usr/share/licenses/xorg-server-xnest"
+ ln -sf ../xorg-server-common/COPYING "${pkgdir}/usr/share/licenses/xorg-server-xnest/COPYING"
+}
+
+package_xorg-server-xdmx() {
+ pkgdesc="Distributed Multihead X Server and utilities"
+ depends=(libxfont libxi libgcrypt libxaw libxrender libdmx libxfixes pixman xorg-server-common)
+
+ cd "${srcdir}/${pkgbase}-${pkgver}/hw/dmx"
+ make DESTDIR="${pkgdir}" install
+
+ install -m755 -d "${pkgdir}/usr/share/licenses/xorg-server-xdmx"
+ ln -sf ../xorg-server-common/COPYING "${pkgdir}/usr/share/licenses/xorg-server-xdmx/COPYING"
+}
+
+package_xorg-server-devel() {
+ pkgdesc="Development files for the X.Org X server"
+ depends=(xproto randrproto renderproto xextproto inputproto kbproto fontsproto videoproto dri2proto xineramaproto xorg-util-macros pixman libpciaccess)
+
+ cd "${srcdir}/${pkgbase}-${pkgver}"
+ make DESTDIR="${pkgdir}" install
+
+ rm -rf "${pkgdir}/usr/bin"
+ rm -rf "${pkgdir}/usr/share/man"
+ rm -rf "${pkgdir}/usr/share/doc"
+ rm -rf "${pkgdir}/usr/share/X11"
+ rm -rf "${pkgdir}/usr/lib/xorg"
+ rm -rf "${pkgdir}/var"
+
+ install -m755 -d "${pkgdir}/usr/share/licenses/xorg-server-devel"
+ ln -sf ../xorg-server-common/COPYING "${pkgdir}/usr/share/licenses/xorg-server-devel/COPYING"
+}
diff --git a/testing/xorg-server/autoconfig-nvidia.patch b/testing/xorg-server/autoconfig-nvidia.patch
new file mode 100644
index 000000000..6d5220ac7
--- /dev/null
+++ b/testing/xorg-server/autoconfig-nvidia.patch
@@ -0,0 +1,28 @@
+diff -Nur xorg-server-1.11.99.902.orig/hw/xfree86/common/xf86pciBus.c xorg-server-1.11.99.902/hw/xfree86/common/xf86pciBus.c
+--- xorg-server-1.11.99.902.orig/hw/xfree86/common/xf86pciBus.c 2012-02-10 10:10:37.583014924 +0000
++++ xorg-server-1.11.99.902/hw/xfree86/common/xf86pciBus.c 2012-02-10 11:16:07.148971317 +0000
+@@ -1144,7 +1144,23 @@
+ int idx = 0;
+
+ #ifdef __linux__
+- driverList[idx++] = "nouveau";
++ switch (dev->device_id)
++ {
++ /* NV1 */
++ case 0x0008:
++ case 0x0009:
++ driverList[idx++] = "vesa";
++ break;
++ /* NV3 */
++ case 0x0018:
++ case 0x0019:
++ driverList[idx++] = "nouveau";
++ break;
++ default:
++ driverList[idx++] = "nouveau";
++ driverList[idx++] = "nvidia";
++ break;
++ }
+ #endif
+ driverList[idx++] = "nv";
+ break;
diff --git a/testing/xorg-server/autoconfig-sis.patch b/testing/xorg-server/autoconfig-sis.patch
new file mode 100644
index 000000000..0b50049db
--- /dev/null
+++ b/testing/xorg-server/autoconfig-sis.patch
@@ -0,0 +1,21 @@
+--- hw/xfree86/common/xf86pciBus.c.orig 2011-09-24 10:53:45.421697668 +0000
++++ hw/xfree86/common/xf86pciBus.c 2011-09-24 10:55:56.416250708 +0000
+@@ -1200,9 +1200,15 @@
+ break;
+ }
+ break;
+- case 0x1039:
+- driverList[0] = "sis";
+- break;
++ case 0x1039:
++ switch (dev->device_id)
++ {
++ case 0x6350: case 0x6351:
++ driverList[0] = "sisimedia"; driverList[1] = "sis"; break;
++ default:
++ driverList[0] = "sis"; break;
++ }
++ break;
+ case 0x126f:
+ driverList[0] = "siliconmotion";
+ break;
diff --git a/testing/xorg-server/git-fixes.patch b/testing/xorg-server/git-fixes.patch
new file mode 100644
index 000000000..27da61eca
--- /dev/null
+++ b/testing/xorg-server/git-fixes.patch
@@ -0,0 +1,161 @@
+From 89626304ea1ad316c5b7145a40f09377148cff21 Mon Sep 17 00:00:00 2001
+From: Dave Airlie <airlied@redhat.com>
+Date: Thu, 20 Oct 2011 13:43:01 +0000
+Subject: xf86Crtc: handle no outputs with no modes harder.
+
+If you started an X server with no connected outputs, we pick a default
+1024x768 mode, however if you then ran an xvidmode using app against that
+server it would segfault the server due to not finding any valid modes.
+
+This was due to the no output mode set code, only adding the modes to the
+scrn->modes once, when something called randr 1.2 xf86SetScrnInfoModes would
+get called and remove all the modes and we'd end up with 0.
+
+This change fixes xf86SetScrnInfoModes to always report a scrn mode of at
+least 1024x768, and pushes the initial configuration to just call it instead
+of setting up the mode itself.
+
+Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=746926
+
+I've seen other bugs like this on other distros so it might also actually fix them.
+
+Signed-off-by: Dave Airlie <airlied@redhat.com>
+Reviewed-by: Keith Packard <keithp@keithp.com>
+Signed-off-by: Keith Packard <keithp@keithp.com>
+(cherry picked from commit 17416e88dcfcc584fe5f87580d5d2b719b3521c3)
+---
+diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
+index d75cd77..8906806 100644
+--- a/hw/xfree86/modes/xf86Crtc.c
++++ b/hw/xfree86/modes/xf86Crtc.c
+@@ -1915,19 +1915,25 @@ xf86SetScrnInfoModes (ScrnInfoPtr scrn)
+ break;
+ }
+
+- if (scrn->modes != NULL) {
+- /* For some reason, scrn->modes is circular, unlike the other mode
+- * lists. How great is that?
+- */
+- for (last = scrn->modes; last && last->next; last = last->next)
+- ;
+- last->next = scrn->modes;
+- scrn->modes->prev = last;
+- if (mode) {
+- while (scrn->modes != mode)
+- scrn->modes = scrn->modes->next;
+- }
++ if (!scrn->modes) {
++ scrn->modes = xf86ModesAdd(scrn->modes,
++ xf86CVTMode(scrn->display->virtualX,
++ scrn->display->virtualY,
++ 60, 0, 0));
++ }
++
++ /* For some reason, scrn->modes is circular, unlike the other mode
++ * lists. How great is that?
++ */
++ for (last = scrn->modes; last && last->next; last = last->next)
++ ;
++ last->next = scrn->modes;
++ scrn->modes->prev = last;
++ if (mode) {
++ while (scrn->modes != mode)
++ scrn->modes = scrn->modes->next;
+ }
++
+ scrn->currentMode = scrn->modes;
+ #ifdef XFreeXDGA
+ if (scrn->pScreen)
+@@ -2529,16 +2535,7 @@ xf86InitialConfiguration (ScrnInfoPtr scrn, Bool canGrow)
+ width, height);
+ }
+
+- if (have_outputs) {
+- /* Mirror output modes to scrn mode list */
+- xf86SetScrnInfoModes (scrn);
+- } else {
+- /* Clear any existing modes from scrn->modes */
+- while (scrn->modes != NULL)
+- xf86DeleteMode(&scrn->modes, scrn->modes);
+- scrn->modes = xf86ModesAdd(scrn->modes,
+- xf86CVTMode(width, height, 60, 0, 0));
+- }
++ xf86SetScrnInfoModes (scrn);
+
+ success = TRUE;
+ bailout:
+--
+cgit v0.9.0.2-2-gbebe
+From 97f2ae60fc0cc755abd8b88df826fcb1a20464fe Mon Sep 17 00:00:00 2001
+From: Christopher Yeleighton <giecrilj@stegny.2a.pl>
+Date: Tue, 25 Oct 2011 01:47:06 +0000
+Subject: Bug 38420: Xvfb crashes in miInitVisuals() when started with depth=2
+
+https://bugs.freedesktop.org/show_bug.cgi?id=38420
+
+Exit with fatal error message, not segfault.
+
+Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+Signed-off-by: Keith Packard <keithp@keithp.com>
+(cherry picked from commit 7d50211ab57a35910d79fc3f67ae89aff91fa995)
+---
+diff --git a/hw/vfb/InitOutput.c b/hw/vfb/InitOutput.c
+index 31ed505..dce3f84 100644
+--- a/hw/vfb/InitOutput.c
++++ b/hw/vfb/InitOutput.c
+@@ -864,6 +864,8 @@ vfbScreenInit(int index, ScreenPtr pScreen, int argc, char **argv)
+ (1 << DirectColor)),
+ 10, TrueColor, 0x3ff00000, 0x000ffc00, 0x000003ff);
+ break;
++ default:
++ return FALSE;
+ }
+
+ miSetPixmapDepths ();
+--
+cgit v0.9.0.2-2-gbebe
+From 34bb83b9df20ff63dbb147ed661f39efb8bae8e4 Mon Sep 17 00:00:00 2001
+From: Peter Hutterer <peter.hutterer@who-t.net>
+Date: Mon, 24 Oct 2011 02:00:32 +0000
+Subject: dix: block signals when closing all devices
+
+When closing down all devices, we manually unset master for all attached
+devices, but the device's sprite info still points to the master's sprite
+info. This leaves us a window where the master is freed already but the
+device isn't yet. A signal during that window causes dereference of the
+already freed spriteInfo in mieqEnqueue's EnqueueScreen macro.
+
+Simply block signals when removing all devices. It's not like we're really
+worrying about high-responsive input at this stage.
+
+https://bugzilla.redhat.com/show_bug.cgi?id=737031
+
+Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+Reviewed-by: Julien Cristau <jcristau@debian.org>
+(cherry picked from commit d7c44a7c9760449bef263413ad3b20f19b1dc95a)
+---
+diff --git a/dix/devices.c b/dix/devices.c
+index 0ccf252..cbdd4ea 100644
+--- a/dix/devices.c
++++ b/dix/devices.c
+@@ -982,6 +982,8 @@ CloseDownDevices(void)
+ {
+ DeviceIntPtr dev;
+
++ OsBlockSignals();
++
+ /* Float all SDs before closing them. Note that at this point resources
+ * (e.g. cursors) have been freed already, so we can't just call
+ * AttachDevice(NULL, dev, NULL). Instead, we have to forcibly set master
+@@ -1004,6 +1006,8 @@ CloseDownDevices(void)
+ inputInfo.keyboard = NULL;
+ inputInfo.pointer = NULL;
+ XkbDeleteRulesDflts();
++
++ OsReleaseSignals();
+ }
+
+ /**
+--
+cgit v0.9.0.2-2-gbebe
diff --git a/testing/xorg-server/xvfb-run b/testing/xorg-server/xvfb-run
new file mode 100644
index 000000000..4c2f4e0d3
--- /dev/null
+++ b/testing/xorg-server/xvfb-run
@@ -0,0 +1,180 @@
+#!/bin/sh
+
+# $Id: xvfb-run 2027 2004-11-16 14:54:16Z branden $
+
+# This script starts an instance of Xvfb, the "fake" X server, runs a command
+# with that server available, and kills the X server when done. The return
+# value of the command becomes the return value of this script.
+#
+# If anyone is using this to build a Debian package, make sure the package
+# Build-Depends on xvfb, xbase-clients, and xfonts-base.
+
+set -e
+
+PROGNAME=xvfb-run
+SERVERNUM=99
+AUTHFILE=
+ERRORFILE=/dev/null
+STARTWAIT=3
+XVFBARGS="-screen 0 640x480x8"
+LISTENTCP="-nolisten tcp"
+XAUTHPROTO=.
+
+# Query the terminal to establish a default number of columns to use for
+# displaying messages to the user. This is used only as a fallback in the event
+# the COLUMNS variable is not set. ($COLUMNS can react to SIGWINCH while the
+# script is running, and this cannot, only being calculated once.)
+DEFCOLUMNS=$(stty size 2>/dev/null | awk '{print $2}') || true
+if ! expr "$DEFCOLUMNS" : "[[:digit:]]\+$" >/dev/null 2>&1; then
+ DEFCOLUMNS=80
+fi
+
+# Display a message, wrapping lines at the terminal width.
+message () {
+ echo "$PROGNAME: $*" | fmt -t -w ${COLUMNS:-$DEFCOLUMNS}
+}
+
+# Display an error message.
+error () {
+ message "error: $*" >&2
+}
+
+# Display a usage message.
+usage () {
+ if [ -n "$*" ]; then
+ message "usage error: $*"
+ fi
+ cat <<EOF
+Usage: $PROGNAME [OPTION ...] COMMAND
+Run COMMAND (usually an X client) in a virtual X server environment.
+Options:
+-a --auto-servernum try to get a free server number, starting at
+ --server-num
+-e FILE --error-file=FILE file used to store xauth errors and Xvfb
+ output (default: $ERRORFILE)
+-f FILE --auth-file=FILE file used to store auth cookie
+ (default: ./.Xauthority)
+-h --help display this usage message and exit
+-n NUM --server-num=NUM server number to use (default: $SERVERNUM)
+-l --listen-tcp enable TCP port listening in the X server
+-p PROTO --xauth-protocol=PROTO X authority protocol name to use
+ (default: xauth command's default)
+-s ARGS --server-args=ARGS arguments (other than server number and
+ "-nolisten tcp") to pass to the Xvfb server
+ (default: "$XVFBARGS")
+-w DELAY --wait=DELAY delay in seconds to wait for Xvfb to start
+ before running COMMAND (default: $STARTWAIT)
+EOF
+}
+
+# Find a free server number by looking at .X*-lock files in /tmp.
+find_free_servernum() {
+ # Sadly, the "local" keyword is not POSIX. Leave the next line commented in
+ # the hope Debian Policy eventually changes to allow it in /bin/sh scripts
+ # anyway.
+ #local i
+
+ i=$SERVERNUM
+ while [ -f /tmp/.X$i-lock ]; do
+ i=$(($i + 1))
+ done
+ echo $i
+}
+
+# Clean up files
+clean_up() {
+ if [ -e "$AUTHFILE" ]; then
+ XAUTHORITY=$AUTHFILE xauth remove ":$SERVERNUM" >>"$ERRORFILE" 2>&1
+ fi
+ if [ -n "$XVFB_RUN_TMPDIR" ]; then
+ if ! rm -r "$XVFB_RUN_TMPDIR"; then
+ error "problem while cleaning up temporary directory"
+ exit 5
+ fi
+ fi
+}
+
+# Parse the command line.
+ARGS=$(getopt --options +ae:f:hn:lp:s:w: \
+ --long auto-servernum,error-file:,auth-file:,help,server-num:,listen-tcp,xauth-protocol:,server-args:,wait: \
+ --name "$PROGNAME" -- "$@")
+GETOPT_STATUS=$?
+
+if [ $GETOPT_STATUS -ne 0 ]; then
+ error "internal error; getopt exited with status $GETOPT_STATUS"
+ exit 6
+fi
+
+eval set -- "$ARGS"
+
+while :; do
+ case "$1" in
+ -a|--auto-servernum) SERVERNUM=$(find_free_servernum) ;;
+ -e|--error-file) ERRORFILE="$2"; shift ;;
+ -f|--auth-file) AUTHFILE="$2"; shift ;;
+ -h|--help) SHOWHELP="yes" ;;
+ -n|--server-num) SERVERNUM="$2"; shift ;;
+ -l|--listen-tcp) LISTENTCP="" ;;
+ -p|--xauth-protocol) XAUTHPROTO="$2"; shift ;;
+ -s|--server-args) XVFBARGS="$2"; shift ;;
+ -w|--wait) STARTWAIT="$2"; shift ;;
+ --) shift; break ;;
+ *) error "internal error; getopt permitted \"$1\" unexpectedly"
+ exit 6
+ ;;
+ esac
+ shift
+done
+
+if [ "$SHOWHELP" ]; then
+ usage
+ exit 0
+fi
+
+if [ -z "$*" ]; then
+ usage "need a command to run" >&2
+ exit 2
+fi
+
+if ! which xauth >/dev/null; then
+ error "xauth command not found"
+ exit 3
+fi
+
+# tidy up after ourselves
+trap clean_up EXIT
+
+# If the user did not specify an X authorization file to use, set up a temporary
+# directory to house one.
+if [ -z "$AUTHFILE" ]; then
+ XVFB_RUN_TMPDIR="$(mktemp -d -t $PROGNAME.XXXXXX)"
+ AUTHFILE="$XVFB_RUN_TMPDIR/Xauthority"
+fi
+
+# Start Xvfb.
+MCOOKIE=$(mcookie)
+XAUTHORITY=$AUTHFILE xauth source - << EOF >>"$ERRORFILE" 2>&1
+add :$SERVERNUM $XAUTHPROTO $MCOOKIE
+EOF
+XAUTHORITY=$AUTHFILE Xvfb ":$SERVERNUM" $XVFBARGS $LISTENTCP >>"$ERRORFILE" \
+ 2>&1 &
+XVFBPID=$!
+sleep "$STARTWAIT"
+if ! kill -0 $XVFBPID 2>/dev/null; then
+ echo "Xvfb failed to start" >&2
+ exit 1
+fi
+
+# Start the command and save its exit status.
+set +e
+DISPLAY=:$SERVERNUM XAUTHORITY=$AUTHFILE "$@" 2>&1
+RETVAL=$?
+set -e
+
+# Kill Xvfb now that the command has exited.
+kill $XVFBPID
+
+# Return the executed command's exit status.
+exit $RETVAL
+
+# vim:set ai et sts=4 sw=4 tw=80:
diff --git a/testing/xorg-server/xvfb-run.1 b/testing/xorg-server/xvfb-run.1
new file mode 100644
index 000000000..137d3a196
--- /dev/null
+++ b/testing/xorg-server/xvfb-run.1
@@ -0,0 +1,282 @@
+.\" $Id: xvfb-run.1 2138 2005-01-17 23:40:27Z branden $
+.\"
+.\" Copyright 1998-2004 Branden Robinson <branden@debian.org>.
+.\"
+.\" This is free software; you may redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2,
+.\" or (at your option) any later version.
+.\"
+.\" This is distributed in the hope that it will be useful, but
+.\" WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public License with
+.\" the Debian operating system, in /usr/share/common-licenses/GPL; if
+.\" not, write to the Free Software Foundation, Inc., 59 Temple Place,
+.\" Suite 330, Boston, MA 02111-1307 USA
+.\"
+.\" We need the URL macro from groff's www macro package, but also want
+.\" things to work all right for people who don't have it. So we define
+.\" our own URL macro and let the www macro package override it if it's
+.\" available.
+.de URL
+\\$2 \(laURL: \\$1 \(ra\\$3
+..
+.if \n[.g] .mso www.tmac
+.TH xvfb\-run 1 "2004\-11\-12" "Debian Project"
+.SH NAME
+xvfb\-run \- run specified X client or command in a virtual X server environment
+.SH SYNOPSIS
+.B xvfb\-run
+[
+.I options
+]
+.I command
+.SH DESCRIPTION
+.B xvfb\-run
+is a wrapper for the
+.BR Xvfb (1x)
+command which simplifies the task of running commands (typically an X
+client, or a script containing a list of clients to be run) within a virtual
+X server environment.
+.PP
+.B xvfb\-run
+sets up an X authority file (or uses an existing user\-specified one),
+writes a cookie to it (see
+.BR xauth (1x))
+and then starts the
+.B Xvfb
+X server as a background process.
+The process ID of
+.B Xvfb
+is stored for later use.
+The specified
+.I command
+is then run using the X display corresponding to the
+.B Xvfb
+server
+just started and the X authority file created earlier.
+.PP
+When the
+.I command
+exits, its status is saved, the
+.B Xvfb
+server is killed (using the process ID stored earlier), the X authority
+cookie removed, and the authority file deleted (if the user did not specify
+one to use).
+.B xvfb\-run
+then exits with the exit status of
+.IR command .
+.PP
+.B xvfb\-run
+requires the
+.B xauth
+command to function.
+.SH OPTIONS
+.TP
+.B \-a\fR,\fB \-\-auto\-servernum
+Try to get a free server number, starting at 99, or the argument to
+.BR \-\-server\-num .
+.TP
+.BI \-e\ file \fR,\fB\ \-\-error\-file= file
+Store output from
+.B xauth
+and
+.B Xvfb
+in
+.IR file .
+The default is
+.IR /dev/null .
+.TP
+.BI \-f\ file \fR,\fB\ \-\-auth\-file= file
+Store X authentication data in
+.IR file .
+By default, a temporary directory called
+.IR xvfb\-run. PID
+(where PID is the process ID of
+.B xvfb\-run
+itself) is created in the directory specified by the environment variable
+.B TMPDIR
+(or
+.I /tmp
+if that variable is null or unset), and the
+.BR tempfile (1)
+command is used to create a file in that temporary directory called
+.IR Xauthority .
+.TP
+.B \-h\fR,\fB \-\-help
+Display a usage message and exit.
+.TP
+.BI \-n\ servernumber \fR,\fB\ \-\-server\-num= servernumber
+Use
+.I servernumber
+as the server number (but see the
+.B \-a\fR,\fB \-\-auto\-servernum
+option above).
+The default is 99.
+.TP
+.B \-l\fR,\fB \-\-listen\-tcp
+Enable TCP port listening in the X server.
+For security reasons (to avoid denial\-of\-service attacks or exploits),
+TCP port listening is disabled by default.
+.TP
+.BI \-p\ protocolname \fR,\fB\ \-\-xauth\-protocol= protocolname
+Use
+.I protocolname
+as the X authority protocol to use.
+The default is \(oq.\(cq, which
+.B xauth
+interprets as its own default protocol, which is MIT\-MAGIC\-COOKIE\-1.
+.TP
+.BI \-s\ arguments \fR,\fB\ \-\-server\-args= arguments
+Pass
+.I arguments
+to the
+.B Xvfb
+server.
+Be careful to quote any whitespace characters that may occur within
+.I arguments
+to prevent them from regarded as separators for
+.BR xvfb\-run 's
+own arguments.
+Also, note that specification of \(oq\-nolisten tcp\(cq in
+.I arguments
+may override the function of
+.BR xvfb\-run 's
+own
+.B \-l\fR,\fB \-\-listen\-tcp
+option, and that specification of the server number (e.g., \(oq:1\(cq) may
+be ignored because of the way the X server parses its argument list.
+Use the
+.B xvfb\-run
+option
+.BI \-n\ servernumber \fR,\fB\ \-\-server\-num= servernumber
+to achieve the latter function.
+The default is \(oq\-screen 0 640x480x8\(cq.
+.TP
+.BI \-w\ delay \fR,\fB\ \-\-wait= delay
+Wait
+.I delay
+seconds after launching
+.B Xvfb
+before attempting to start the specified command.
+The default is 3.
+.SH ENVIRONMENT
+.TP
+.B COLUMNS
+indicates the width of the terminal device in character cells.
+This value is used for formatting diagnostic messages.
+If not set, the terminal is queried using
+.BR stty (1)
+to determine its width.
+If that fails, a value of \(oq80\(cq is assumed.
+.TP
+.B TMPDIR
+specifies the directory in which to place
+.BR xvfb\-run 's
+temporary directory for storage of the X authority file; only used if the
+.B \-f
+or
+.B \-\-auth\-file
+options are not specified.
+.SH "OUTPUT FILES"
+.PP
+Unless the
+.B \-f
+or
+.B \-\-auth\-file
+options are specified, a temporary
+directory and file within it are created (and deleted) to store the X
+authority cookies used by the
+.B Xvfb
+server and client(s) run under it.
+See
+.BR tempfile (1).
+If \-f or \-\-auth\-file are used, then the specified X authority file is
+only written to, not created or deleted (though
+.B xauth
+creates an authority file itself if told to use use that does not already
+exist).
+.PP
+An error file with a user\-specified name is also created if the
+.B \-e
+or
+.B \-\-error\-file
+options are specifed; see above.
+.SH "EXIT STATUS"
+.B xvfb\-run
+uses its exit status as well as output to standard error to communicate
+diagnostics.
+The exit status of \(oq1\(cq is not used, and should be interpreted as failure
+of the specified command.
+.TP
+0
+.B xvfb\-run
+only uses this exit status if the
+.B \-h\fR,\fB \-\-help
+option is given.
+In all other situations, this may be interpreted as success of the specified
+command.
+.TP
+2
+No command to run was specified.
+.TP
+3
+The
+.B xauth
+command is not available.
+.TP
+4
+The temporary directory that was going to be used already exists; since
+.B xvfb\-run
+produces a uniquely named directory, this may indicate an attempt by another
+process on the system to exploit a temporary file race condition.
+.TP
+5
+A problem was encountered while cleaning up the temporary directory.
+.TP
+6
+A problem was encountered while using
+.BR getopt (1)
+to parse the command\-line arguments.
+.SH EXAMPLES
+.TP
+.B xvfb\-run \-\-auto\-servernum \-\-server\-num=1 xlogo
+runs the
+.BR xlogo (1x)
+demonstration client inside the
+.B Xvfb
+X server on the first available server number greater than or equal to 1.
+.TP
+.B xvfb\-run \-\-server\-args="\-screen 0 1024x768x24" ico \-faces
+runs the
+.BR ico (1x)
+demonstration client (and passes it the
+.B \-faces
+argument) inside the
+.B Xvfb
+X server, configured with a root window of 1024 by 768 pixels and a color
+depth of 24 bits.
+.PP
+Note that the demo X clients used in the above examples will not exit on
+their own, so they will have to be killed before
+.B xvfb\-run
+will exit.
+.SH BUGS
+See
+.URL "http://bugs.debian.org/xvfb" "the Debian Bug Tracking System" .
+If you wish to report a bug in
+.BR xvfb\-run ,
+please use the
+.BR reportbug (1)
+command.
+.SH AUTHOR
+.B xfvb\-run
+was written by Branden Robinson and Jeff Licquia with sponsorship from
+Progeny Linux Systems.
+.SH "SEE ALSO"
+.BR Xvfb (1x),
+.BR xauth (1x)
+.\" vim:set et tw=80: