summaryrefslogtreecommitdiffstats
path: root/recipes/obsolete
diff options
context:
space:
mode:
authorMartin Jansa <Martin.Jansa@gmail.com>2010-08-16 15:08:04 +0200
committerMartin Jansa <Martin.Jansa@gmail.com>2010-08-19 07:28:01 +0200
commite1aac7076a2f1a9acdeb9e7f1ee97b09102b66a0 (patch)
treedc8960895a2fcbfaa3ff0c93cc2e210cd9418d5a /recipes/obsolete
parentef9813dfa32794cf492c07a0905a6441a4a53bc4 (diff)
downloadopenembedded-e1aac7076a2f1a9acdeb9e7f1ee97b09102b66a0.tar.gz
xorg-lib: move older not pinned versions to obsolete dir
Acked-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Diffstat (limited to 'recipes/obsolete')
-rw-r--r--recipes/obsolete/xorg/xorg-lib/diet-x11_1.1.1.bb12
-rw-r--r--recipes/obsolete/xorg/xorg-lib/diet-x11_1.1.2.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/diet-x11_1.1.3.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/diet-x11_1.1.4.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libapplewm_1.0.0.bb9
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libdmx_1.0.2.bb8
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libfontenc_1.0.4.bb11
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libfs_1.0.0.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libfs_1.0.1.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libice_1.0.3.bb12
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libice_1.0.4.bb12
-rw-r--r--recipes/obsolete/xorg/xorg-lib/liblbxutil/mkg3states.patch51
-rw-r--r--recipes/obsolete/xorg/xorg-lib/liblbxutil_1.0.1.bb11
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libpciaccess/fix-mtrr-check.patch19
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libpciaccess_0.10.3.bb7
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libpciaccess_0.11.0.bb6
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libsm_1.0.2.bb13
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libsm_1.0.3.bb12
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libsm_1.1.0.bb12
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libwindowswm_1.0.0.bb9
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11-1.0.1/keysymdef_include.patch62
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11-1.0.1/x11_disable_makekeys.patch15
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11-1.0.3/keysymdef_include.patch62
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11-1.0.3/x11_disable_makekeys.patch15
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11-1.1.1/keysymdef_include.patch62
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11-1.1.2/keysymdef_include.patch62
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11-1.1.3/keysymdef_include.patch62
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11-1.1.4/keysymdef_include.patch62
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11-1.2/x11_disable_makekeys.patch23
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11-1.3.3+git/dolt-fix.patch22
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11-1.3.3+git/keysymdef_include.patch29
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11-1.3.3+git/x11_disable_makekeys.patch26
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11-1.3.3/x11_disable_makekeys.patch23
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11-1.3.4/dolt-fix.patch22
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11-1.3.4/keysymdef_include.patch21
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11-1.3.4/x11_disable_makekeys.patch29
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11/ruutf8.patch12
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11/xchar2b.patch13
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11/xim.patch55
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11_1.0.1.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11_1.0.3.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11_1.1.1.bb9
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11_1.1.2.bb8
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11_1.1.3.bb8
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11_1.1.4.bb8
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11_1.2.bb9
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11_1.3.3.bb6
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11_1.3.4.bb6
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libx11_git.bb14
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxau_1.0.3.bb12
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxau_1.0.4.bb12
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxaw_1.0.3.bb22
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxaw_1.0.4.bb22
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxcomposite/change-include-order.patch14
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxcomposite_0.3.1.bb12
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxcomposite_0.4.0.bb12
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxcursor_1.1.8.bb13
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxcursor_1.1.9.bb13
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxdamage_1.0.4.bb11
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxdamage_1.1.1.bb11
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxdmcp_1.0.2.bb12
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxext_1.0.2.bb13
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxext_1.0.3.bb12
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxext_1.0.4.bb12
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxext_1.0.5.bb12
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxfixes_4.0.3.bb13
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxfont/builtinreaddirectory-no-side-effect.patch188
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxfont/no-scalable-crash.patch22
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxfont_1.2.7.bb15
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxfont_1.2.8.bb15
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxfont_1.3.0.bb15
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxfont_1.3.1.bb14
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxfont_1.3.2.bb14
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxfont_1.3.3.bb13
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxfontcache_1.0.4.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxft_2.1.12.bb21
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxft_2.1.13.bb21
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxi_1.0.2.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxi_1.1.0.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxi_1.1.2.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxi_1.1.3.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxi_1.2.0.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxinerama_1.0.2.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxinerama_1.0.3.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxkbfile_1.0.4.bb11
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxkbfile_1.0.5.bb11
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxmu_1.0.3.bb17
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxmu_1.0.4.bb17
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxpm_3.5.6.bb16
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxpm_3.5.7.bb16
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxrandr_1.1.2.bb13
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxrandr_1.2.2.bb13
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxrandr_1.2.3.bb13
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxrender_0.9.2.bb13
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxrender_0.9.3.bb13
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxrender_0.9.4.bb13
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxres_1.0.3.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxscrnsaver_1.1.2.bb13
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxscrnsaver_1.1.3.bb13
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxt/pr10970-header-fix.patch512
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxt_1.0.4.bb24
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxt_1.0.5.bb23
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxtst_1.0.2.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxtst_1.0.3.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxv_1.0.3.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxv_1.0.4.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxvmc/drm.patch9
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxvmc/true.patch11
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxvmc/via.patch23
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxvmc_1.0.4.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxvmc_1.0.5.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxxf86dga_1.0.1.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxxf86dga_1.0.2.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxxf86misc_1.0.1.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxxf86vm_1.0.1.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/libxxf86vm_1.0.2.bb10
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch114
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch91
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch91
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch94
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/1-composite.patch161
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/2-composite.patch102
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/3-composite.patch108
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch114
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch91
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch91
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch94
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch169
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/565-scanline.patch257
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/missing-cache-preload.diff28
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman-0.9.5/dont-copy-unused-bits-to-alpha-channel.patch29
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch114
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch91
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch91
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch94
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch169
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman/0006-Revert-ARM-SIMD-Try-without-any-CFLAGS-before-forcin.patch53
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman/calloc.patch23
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman/nearest-neighbour.patch1040
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman/over-n-8-0565.patch231
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman/pixman-28986.patch32
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman/prefetch.patch298
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman/remove-broken.patch826
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman/src-8888-0565.patch324
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman/tls.patch59
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman_0.10.0.bb5
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman_0.11.4.bb7
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman_0.11.8.bb9
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman_0.15.18.bb7
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman_0.15.6.bb7
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman_0.17.12.bb24
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman_0.17.8.bb23
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman_0.18.0.bb24
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman_0.9.4.bb7
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman_0.9.5.bb8
-rw-r--r--recipes/obsolete/xorg/xorg-lib/pixman_git.bb27
-rw-r--r--recipes/obsolete/xorg/xorg-lib/xtrans/fix-missing-includepath.patch13
-rw-r--r--recipes/obsolete/xorg/xorg-lib/xtrans_1.0.3.bb15
-rw-r--r--recipes/obsolete/xorg/xorg-lib/xtrans_1.0.4.bb15
-rw-r--r--recipes/obsolete/xorg/xorg-lib/xtrans_1.1.bb15
-rw-r--r--recipes/obsolete/xorg/xorg-lib/xtrans_1.2.1.bb15
-rw-r--r--recipes/obsolete/xorg/xorg-lib/xtrans_1.2.3.bb15
-rw-r--r--recipes/obsolete/xorg/xorg-lib/xtrans_1.2.bb15
163 files changed, 7909 insertions, 0 deletions
diff --git a/recipes/obsolete/xorg/xorg-lib/diet-x11_1.1.1.bb b/recipes/obsolete/xorg/xorg-lib/diet-x11_1.1.1.bb
new file mode 100644
index 0000000000..593ba34c6b
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/diet-x11_1.1.1.bb
@@ -0,0 +1,12 @@
+require libx11_${PV}.bb
+PR = "${INC_PR}.0"
+
+SRC_URI += "file://X18NCMSstubs.diff \
+ file://fix-disable-xlocale.diff \
+ file://fix-utf8-wrong-define.patch \
+ file://xim.patch \
+ file://xchar2b.patch"
+
+EXTRA_OECONF += "--without-xcb --disable-udc --enable-xcms --disable-xlocale --disable-xkb"
+
+CFLAGS += "-D_GNU_SOURCE"
diff --git a/recipes/obsolete/xorg/xorg-lib/diet-x11_1.1.2.bb b/recipes/obsolete/xorg/xorg-lib/diet-x11_1.1.2.bb
new file mode 100644
index 0000000000..f6291a93d1
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/diet-x11_1.1.2.bb
@@ -0,0 +1,10 @@
+require libx11_${PV}.bb
+PR = "${INC_PR}.0"
+
+SRC_URI += "file://X18NCMSstubs.diff \
+ file://fix-disable-xlocale.diff \
+ file://fix-utf8-wrong-define.patch"
+
+EXTRA_OECONF += "--without-xcb --disable-udc --disable-xcms --disable-xlocale --disable-xkb"
+
+CFLAGS += "-D_GNU_SOURCE"
diff --git a/recipes/obsolete/xorg/xorg-lib/diet-x11_1.1.3.bb b/recipes/obsolete/xorg/xorg-lib/diet-x11_1.1.3.bb
new file mode 100644
index 0000000000..f6291a93d1
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/diet-x11_1.1.3.bb
@@ -0,0 +1,10 @@
+require libx11_${PV}.bb
+PR = "${INC_PR}.0"
+
+SRC_URI += "file://X18NCMSstubs.diff \
+ file://fix-disable-xlocale.diff \
+ file://fix-utf8-wrong-define.patch"
+
+EXTRA_OECONF += "--without-xcb --disable-udc --disable-xcms --disable-xlocale --disable-xkb"
+
+CFLAGS += "-D_GNU_SOURCE"
diff --git a/recipes/obsolete/xorg/xorg-lib/diet-x11_1.1.4.bb b/recipes/obsolete/xorg/xorg-lib/diet-x11_1.1.4.bb
new file mode 100644
index 0000000000..f6291a93d1
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/diet-x11_1.1.4.bb
@@ -0,0 +1,10 @@
+require libx11_${PV}.bb
+PR = "${INC_PR}.0"
+
+SRC_URI += "file://X18NCMSstubs.diff \
+ file://fix-disable-xlocale.diff \
+ file://fix-utf8-wrong-define.patch"
+
+EXTRA_OECONF += "--without-xcb --disable-udc --disable-xcms --disable-xlocale --disable-xkb"
+
+CFLAGS += "-D_GNU_SOURCE"
diff --git a/recipes/obsolete/xorg/xorg-lib/libapplewm_1.0.0.bb b/recipes/obsolete/xorg/xorg-lib/libapplewm_1.0.0.bb
new file mode 100644
index 0000000000..6e746b48b0
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libapplewm_1.0.0.bb
@@ -0,0 +1,9 @@
+require xorg-lib-common.inc
+DEPENDS += "libxext applewmproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "48a403c45be2206ee900729ced3a0e62"
+SRC_URI[archive.sha256sum] = "ecd2ff407a418eb4ac673f48b4d0a9c5b6860a13cef7211a32fe8f3d3db0407e"
+
+XORG_PN = "libAppleWM"
diff --git a/recipes/obsolete/xorg/xorg-lib/libdmx_1.0.2.bb b/recipes/obsolete/xorg/xorg-lib/libdmx_1.0.2.bb
new file mode 100644
index 0000000000..7d6e02504c
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libdmx_1.0.2.bb
@@ -0,0 +1,8 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Distributed Multihead extension library"
+DEPENDS += "libxext dmxproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "4d866967210d06098fc9f302ed4c79b1"
+SRC_URI[archive.sha256sum] = "fa3ff31a543f7cea04762c08f48b418e75230de8b4dfdf9d2d3ae9e2af26b9c4"
diff --git a/recipes/obsolete/xorg/xorg-lib/libfontenc_1.0.4.bb b/recipes/obsolete/xorg/xorg-lib/libfontenc_1.0.4.bb
new file mode 100644
index 0000000000..f16cb7744e
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libfontenc_1.0.4.bb
@@ -0,0 +1,11 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 font encoding library"
+LICENSE = "BSD-X"
+DEPENDS += "zlib xproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "5cd16a2e51ca7b96a3081c7486ff98b9"
+SRC_URI[archive.sha256sum] = "b993aa3d17e845a12a49160b5d96993059ce919c7ba902005b910b867b6258c8"
+
+BBCLASSEXTEND = "native"
diff --git a/recipes/obsolete/xorg/xorg-lib/libfs_1.0.0.bb b/recipes/obsolete/xorg/xorg-lib/libfs_1.0.0.bb
new file mode 100644
index 0000000000..7f81054640
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libfs_1.0.0.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Font Services library"
+DEPENDS += "xproto fontsproto xtrans"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "dfd5de47e232db0891410bec8ee6707b"
+SRC_URI[archive.sha256sum] = "2f18f9fa0e18a3eab3c154ba820ad64b5c6ee364e147524055a553a130ccfdde"
+
+XORG_PN = "libFS"
diff --git a/recipes/obsolete/xorg/xorg-lib/libfs_1.0.1.bb b/recipes/obsolete/xorg/xorg-lib/libfs_1.0.1.bb
new file mode 100644
index 0000000000..fe1f7740d4
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libfs_1.0.1.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Font Services library"
+DEPENDS += "xproto fontsproto xtrans"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "81521249353fa33be7a4bb0062c2fbb9"
+SRC_URI[archive.sha256sum] = "9bf92ffdb51e69e07682cd1a6c0101f2a833b16b9bfa5d601491ff46a35a2cf5"
+
+XORG_PN = "libFS"
diff --git a/recipes/obsolete/xorg/xorg-lib/libice_1.0.3.bb b/recipes/obsolete/xorg/xorg-lib/libice_1.0.3.bb
new file mode 100644
index 0000000000..52c9de0452
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libice_1.0.3.bb
@@ -0,0 +1,12 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Inter-Client Exchange library"
+DEPENDS += "xproto xtrans"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "071f96648ac25c8e87a3de11a7de2d8a"
+SRC_URI[archive.sha256sum] = "ffd46270dae30cad147d73559142a701a8ff8d0658f4abfb2341edefabb8161d"
+
+BBCLASSEXTEND = "native"
+
+XORG_PN = "libICE"
diff --git a/recipes/obsolete/xorg/xorg-lib/libice_1.0.4.bb b/recipes/obsolete/xorg/xorg-lib/libice_1.0.4.bb
new file mode 100644
index 0000000000..29303c1eb9
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libice_1.0.4.bb
@@ -0,0 +1,12 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Inter-Client Exchange library"
+DEPENDS += "xproto xtrans"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "4ab4e67e0b8845aa201e984153087f4a"
+SRC_URI[archive.sha256sum] = "13055e2f4c645cbd135ce97a7974a5866f9ba3ed8988e686b552f55c30514f04"
+
+BBCLASSEXTEND = "native"
+
+XORG_PN = "libICE"
diff --git a/recipes/obsolete/xorg/xorg-lib/liblbxutil/mkg3states.patch b/recipes/obsolete/xorg/xorg-lib/liblbxutil/mkg3states.patch
new file mode 100644
index 0000000000..58463db46b
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/liblbxutil/mkg3states.patch
@@ -0,0 +1,51 @@
+--- liblbxutil-1.0.0/configure.ac.old 2006-03-31 02:38:44.000000000 -0500
++++ liblbxutil-1.0.0/configure.ac 2006-03-31 02:39:06.000000000 -0500
+@@ -60,4 +60,5 @@ XORG_RELEASE_VERSION
+
+ AC_OUTPUT([Makefile
+ src/Makefile
++ src/image/Makefile
+ lbxutil.pc])
+--- liblbxutil-1.0.0/src/Makefile.am.old 2006-03-31 02:38:51.000000000 -0500
++++ liblbxutil-1.0.0/src/Makefile.am 2006-03-31 02:39:49.000000000 -0500
+@@ -1,9 +1,6 @@
+ lib_LTLIBRARIES = liblbxutil.la
+
+-noinst_PROGRAMS = mkg3states
+-
+-mkg3states_SOURCES = \
+- $(srcdir)/image/mkg3states.c
++SUBDIRS = image
+
+ liblbxutil_la_SOURCES = \
+ $(srcdir)/lbx_zlib/reqstats.h \
+@@ -28,9 +25,8 @@ INCLUDES = @LBXUTIL_CFLAGS@
+
+ $(srcdir)/image/dfaxg42d.c: g3states.h
+
+-g3states.h: mkg3states
+- -rm -f g3states.h
+- ./mkg3states -c > g3states.h_ && mv g3states.h_ g3states.h
++g3states.h: image/mkg3states
++ ./image/mkg3states -c > g3states.h_ && mv g3states.h_ g3states.h
+
+ liblbxutil_la_LDFLAGS = -version-number 1:0:0
+
+--- liblbxutil-1.0.0/src/image/Makefile.am.old 2006-03-31 02:41:19.000000000 -0500
++++ liblbxutil-1.0.0/src/image/Makefile.am 2006-03-31 02:40:40.000000000 -0500
+@@ -0,0 +1,15 @@
++# evil hack
++CFLAGS=$(CFLAGS_FOR_BUILD)
++CPPFLAGS=$(CPPFLAGS_FOR_BUILD)
++LDFLAGS=$(LDFLAGS_FOR_BUILD)
++
++CC=$(CC_FOR_BUILD)
++LIBTOOL = @LIBTOOL@ --tag=CC
++
++noinst_PROGRAMS = mkg3states
++
++mkg3states_SOURCES = \
++ mkg3states.c
++
++mkg3states_CFLAGS=$(CFLAGS_FOR_BUILD)
++mkg3states_LDFLAGS=$(LDFLAGS_FOR_BUILD)
diff --git a/recipes/obsolete/xorg/xorg-lib/liblbxutil_1.0.1.bb b/recipes/obsolete/xorg/xorg-lib/liblbxutil_1.0.1.bb
new file mode 100644
index 0000000000..f51d5abe4a
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/liblbxutil_1.0.1.bb
@@ -0,0 +1,11 @@
+require xorg-lib-common.inc
+DESCRIPTION = "XFIXES Extension"
+DEPENDS += " xextproto xproto zlib"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI += "file://mkg3states.patch"
+SRC_URI[archive.md5sum] = "b73cbd5bc3cd268722a624a5f1318fde"
+SRC_URI[archive.sha256sum] = "94c31c7090106d3a95e2a7c083961efca1321b970118fe103ab06e5d927b7258"
+
+export CC_FOR_BUILD = "gcc"
diff --git a/recipes/obsolete/xorg/xorg-lib/libpciaccess/fix-mtrr-check.patch b/recipes/obsolete/xorg/xorg-lib/libpciaccess/fix-mtrr-check.patch
new file mode 100644
index 0000000000..e2d9f62318
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libpciaccess/fix-mtrr-check.patch
@@ -0,0 +1,19 @@
+---
+ configure.ac | 2 --
+ 1 file changed, 2 deletions(-)
+
+--- libpciaccess-0.10.3.orig/configure.ac
++++ libpciaccess-0.10.3/configure.ac
+@@ -89,12 +89,10 @@ esac
+ AM_CONDITIONAL(LINUX, [test "x$linux" = xyes])
+ AM_CONDITIONAL(FREEBSD, [test "x$freebsd" = xyes])
+ AM_CONDITIONAL(OPENBSD, [test "x$openbsd" = xyes])
+ AM_CONDITIONAL(SOLARIS, [test "x$solaris" = xyes])
+
+-AC_CHECK_FILE([/usr/include/asm/mtrr.h],
+- [have_mtrr_h="yes"], [have_mtrr_h="no"])
+ if test "x$have_mtrr_h" = xyes; then
+ AC_DEFINE(HAVE_MTRR, 1, [Use MTRRs on mappings])
+ fi
+
+ AC_SUBST(PCIACCESS_CFLAGS)
diff --git a/recipes/obsolete/xorg/xorg-lib/libpciaccess_0.10.3.bb b/recipes/obsolete/xorg/xorg-lib/libpciaccess_0.10.3.bb
new file mode 100644
index 0000000000..c594dc04cb
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libpciaccess_0.10.3.bb
@@ -0,0 +1,7 @@
+require xorg-lib-common.inc
+DEPENDS += "xproto virtual/libx11"
+PR = "${INC_PR}.0"
+
+SRC_URI += "file://fix-mtrr-check.patch"
+SRC_URI[archive.md5sum] = "6d5468debf76fac84576ca26c9535821"
+SRC_URI[archive.sha256sum] = "2f609ad3b5688ae66dcd18d7cdd1fc6b68531a2a85f89798f6cfb5eda6d680dc"
diff --git a/recipes/obsolete/xorg/xorg-lib/libpciaccess_0.11.0.bb b/recipes/obsolete/xorg/xorg-lib/libpciaccess_0.11.0.bb
new file mode 100644
index 0000000000..aca0a2f1fd
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libpciaccess_0.11.0.bb
@@ -0,0 +1,6 @@
+require xorg-lib-common.inc
+DEPENDS += "xproto virtual/libx11"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "686320dcec98daad0bdfb8894d4f2a2b"
+SRC_URI[archive.sha256sum] = "6e38be12b656c83c66a6fd8ba56c041d8188218278219c88ee635242ec1c7dab"
diff --git a/recipes/obsolete/xorg/xorg-lib/libsm_1.0.2.bb b/recipes/obsolete/xorg/xorg-lib/libsm_1.0.2.bb
new file mode 100644
index 0000000000..ee2ff16099
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libsm_1.0.2.bb
@@ -0,0 +1,13 @@
+require xorg-lib-common.inc
+DESCRIPTION = "Session management library"
+PRIORITY = "optional"
+DEPENDS += " libice xproto xtrans"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "a254771550c01db372e88d1a1dc2e13a"
+SRC_URI[archive.sha256sum] = "e290614797bd626c1b92bac8f83e8954b99bd66e6ecdaa1e935e176df099eba8"
+
+BBCLASSEXTEND = "native"
+
+XORG_PN = "libSM"
diff --git a/recipes/obsolete/xorg/xorg-lib/libsm_1.0.3.bb b/recipes/obsolete/xorg/xorg-lib/libsm_1.0.3.bb
new file mode 100644
index 0000000000..8ca90fe4f1
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libsm_1.0.3.bb
@@ -0,0 +1,12 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Session management library"
+DEPENDS += "libice xproto xtrans"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "184cbf502b3cd5d7ba5f9d1290a99606"
+SRC_URI[archive.sha256sum] = "57f42d3557effe452cd348362977ff90fa61009885c23b3aca8cb0219b5dec04"
+
+BBCLASSEXTEND = "native"
+
+XORG_PN = "libSM"
diff --git a/recipes/obsolete/xorg/xorg-lib/libsm_1.1.0.bb b/recipes/obsolete/xorg/xorg-lib/libsm_1.1.0.bb
new file mode 100644
index 0000000000..1b51b89ae9
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libsm_1.1.0.bb
@@ -0,0 +1,12 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Session management library"
+DEPENDS += "libice xproto xtrans util-linux-ng"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "05a04c2b6382fb0054f6c70494e22733"
+SRC_URI[archive.sha256sum] = "7536ac382e1ff82014d3a0defba0c61b3a30984f4e5bc7707960d6debcb92a82"
+
+BBCLASSEXTEND = "native"
+
+XORG_PN = "libSM"
diff --git a/recipes/obsolete/xorg/xorg-lib/libwindowswm_1.0.0.bb b/recipes/obsolete/xorg/xorg-lib/libwindowswm_1.0.0.bb
new file mode 100644
index 0000000000..35457cb421
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libwindowswm_1.0.0.bb
@@ -0,0 +1,9 @@
+require xorg-lib-common.inc
+DEPENDS += "libxext windowswmproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "337b379fd00a67345b083100c4e6ba95"
+SRC_URI[archive.sha256sum] = "6ad87266173d21ba7e0e4506db0c094769fd58c3f0b741b37f30c297deec166a"
+
+XORG_PN = "libWindowsWM"
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11-1.0.1/keysymdef_include.patch b/recipes/obsolete/xorg/xorg-lib/libx11-1.0.1/keysymdef_include.patch
new file mode 100644
index 0000000000..565308834e
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11-1.0.1/keysymdef_include.patch
@@ -0,0 +1,62 @@
+---
+ configure.ac | 44 ++++++++++++++++++++++++--------------------
+ 1 file changed, 24 insertions(+), 20 deletions(-)
+
+Index: libX11-1.1.2/configure.ac
+===================================================================
+--- libX11-1.1.2.orig/configure.ac 2008-01-02 15:30:47.000000000 +0000
++++ libX11-1.1.2/configure.ac 2008-01-02 15:47:25.000000000 +0000
+@@ -207,29 +207,33 @@ AC_CHECK_FUNC(poll, [AC_DEFINE(USE_POLL,
+ #
+ KEYSYMDEF=""
+ AC_MSG_CHECKING([keysymdef.h])
+-for flag in $XPROTO_CFLAGS -I/usr/include; do
+- case "$KEYSYMDEF" in
+- "")
+- case "$flag" in
+- *-I*)
+- dir=`echo "$flag" | sed 's/ *-I//'`
+- file="$dir/X11/keysymdef.h"
+- if test -f "$file"; then
+- KEYSYMDEF="$file"
+- fi
++AC_ARG_WITH(keysymdef,
++ AC_HELP_STRING([--with-keysymdef=DIR/keysymdef.h], [The location of keysymdef.h]),
++ KEYSYMDEF=$withval, KEYSYMDEF="")
++
++if test x$KEYSYMDEF = x; then
++ for flag in $XPROTO_CFLAGS -I/usr/include; do
++ case "$KEYSYMDEF" in
++ "")
++ case "$flag" in
++ *-I*)
++ dir=`echo "$flag" | sed 's/ *-I//'`
++ file="$dir/X11/keysymdef.h"
++ if test -f "$file"; then
++ KEYSYMDEF="$file"
++ fi
++ ;;
++ esac
+ ;;
+ esac
+- ;;
+- esac
+-done
+-case "$KEYSYMDEF" in
+-"")
+- AC_MSG_ERROR([Cannot find keysymdef.h])
+- ;;
+-*)
++ done
++fi
++
++if test -f "$KEYSYMDEF"; then
+ AC_MSG_RESULT([$KEYSYMDEF])
+- ;;
+-esac
++else
++ AC_MSG_ERROR([Cannot find keysymdef.h])
++fi
+ AC_SUBST(KEYSYMDEF)
+
+ AC_ARG_ENABLE(udc,
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11-1.0.1/x11_disable_makekeys.patch b/recipes/obsolete/xorg/xorg-lib/libx11-1.0.1/x11_disable_makekeys.patch
new file mode 100644
index 0000000000..ad8b6fc7b6
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11-1.0.1/x11_disable_makekeys.patch
@@ -0,0 +1,15 @@
+Index: libX11-1.0.1/src/util/Makefile.am
+===================================================================
+--- libX11-1.0.1.old/src/util/Makefile.am
++++ libX11-1.0.1/src/util/Makefile.am
+@@ -1,10 +1 @@
+-# $XdotOrg: lib/X11/src/util/Makefile.am,v 1.4 2006-02-19 02:14:12 jamey Exp $
+-
+-noinst_PROGRAMS=makekeys
+-
+-makekeys_CFLAGS=$(X11_CFLAGS)
+-
+-#override CC = gcc
+-LINK = $(CC) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+-
+ EXTRA_DIST = mkks.sh
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11-1.0.3/keysymdef_include.patch b/recipes/obsolete/xorg/xorg-lib/libx11-1.0.3/keysymdef_include.patch
new file mode 100644
index 0000000000..565308834e
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11-1.0.3/keysymdef_include.patch
@@ -0,0 +1,62 @@
+---
+ configure.ac | 44 ++++++++++++++++++++++++--------------------
+ 1 file changed, 24 insertions(+), 20 deletions(-)
+
+Index: libX11-1.1.2/configure.ac
+===================================================================
+--- libX11-1.1.2.orig/configure.ac 2008-01-02 15:30:47.000000000 +0000
++++ libX11-1.1.2/configure.ac 2008-01-02 15:47:25.000000000 +0000
+@@ -207,29 +207,33 @@ AC_CHECK_FUNC(poll, [AC_DEFINE(USE_POLL,
+ #
+ KEYSYMDEF=""
+ AC_MSG_CHECKING([keysymdef.h])
+-for flag in $XPROTO_CFLAGS -I/usr/include; do
+- case "$KEYSYMDEF" in
+- "")
+- case "$flag" in
+- *-I*)
+- dir=`echo "$flag" | sed 's/ *-I//'`
+- file="$dir/X11/keysymdef.h"
+- if test -f "$file"; then
+- KEYSYMDEF="$file"
+- fi
++AC_ARG_WITH(keysymdef,
++ AC_HELP_STRING([--with-keysymdef=DIR/keysymdef.h], [The location of keysymdef.h]),
++ KEYSYMDEF=$withval, KEYSYMDEF="")
++
++if test x$KEYSYMDEF = x; then
++ for flag in $XPROTO_CFLAGS -I/usr/include; do
++ case "$KEYSYMDEF" in
++ "")
++ case "$flag" in
++ *-I*)
++ dir=`echo "$flag" | sed 's/ *-I//'`
++ file="$dir/X11/keysymdef.h"
++ if test -f "$file"; then
++ KEYSYMDEF="$file"
++ fi
++ ;;
++ esac
+ ;;
+ esac
+- ;;
+- esac
+-done
+-case "$KEYSYMDEF" in
+-"")
+- AC_MSG_ERROR([Cannot find keysymdef.h])
+- ;;
+-*)
++ done
++fi
++
++if test -f "$KEYSYMDEF"; then
+ AC_MSG_RESULT([$KEYSYMDEF])
+- ;;
+-esac
++else
++ AC_MSG_ERROR([Cannot find keysymdef.h])
++fi
+ AC_SUBST(KEYSYMDEF)
+
+ AC_ARG_ENABLE(udc,
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11-1.0.3/x11_disable_makekeys.patch b/recipes/obsolete/xorg/xorg-lib/libx11-1.0.3/x11_disable_makekeys.patch
new file mode 100644
index 0000000000..ad8b6fc7b6
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11-1.0.3/x11_disable_makekeys.patch
@@ -0,0 +1,15 @@
+Index: libX11-1.0.1/src/util/Makefile.am
+===================================================================
+--- libX11-1.0.1.old/src/util/Makefile.am
++++ libX11-1.0.1/src/util/Makefile.am
+@@ -1,10 +1 @@
+-# $XdotOrg: lib/X11/src/util/Makefile.am,v 1.4 2006-02-19 02:14:12 jamey Exp $
+-
+-noinst_PROGRAMS=makekeys
+-
+-makekeys_CFLAGS=$(X11_CFLAGS)
+-
+-#override CC = gcc
+-LINK = $(CC) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+-
+ EXTRA_DIST = mkks.sh
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11-1.1.1/keysymdef_include.patch b/recipes/obsolete/xorg/xorg-lib/libx11-1.1.1/keysymdef_include.patch
new file mode 100644
index 0000000000..565308834e
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11-1.1.1/keysymdef_include.patch
@@ -0,0 +1,62 @@
+---
+ configure.ac | 44 ++++++++++++++++++++++++--------------------
+ 1 file changed, 24 insertions(+), 20 deletions(-)
+
+Index: libX11-1.1.2/configure.ac
+===================================================================
+--- libX11-1.1.2.orig/configure.ac 2008-01-02 15:30:47.000000000 +0000
++++ libX11-1.1.2/configure.ac 2008-01-02 15:47:25.000000000 +0000
+@@ -207,29 +207,33 @@ AC_CHECK_FUNC(poll, [AC_DEFINE(USE_POLL,
+ #
+ KEYSYMDEF=""
+ AC_MSG_CHECKING([keysymdef.h])
+-for flag in $XPROTO_CFLAGS -I/usr/include; do
+- case "$KEYSYMDEF" in
+- "")
+- case "$flag" in
+- *-I*)
+- dir=`echo "$flag" | sed 's/ *-I//'`
+- file="$dir/X11/keysymdef.h"
+- if test -f "$file"; then
+- KEYSYMDEF="$file"
+- fi
++AC_ARG_WITH(keysymdef,
++ AC_HELP_STRING([--with-keysymdef=DIR/keysymdef.h], [The location of keysymdef.h]),
++ KEYSYMDEF=$withval, KEYSYMDEF="")
++
++if test x$KEYSYMDEF = x; then
++ for flag in $XPROTO_CFLAGS -I/usr/include; do
++ case "$KEYSYMDEF" in
++ "")
++ case "$flag" in
++ *-I*)
++ dir=`echo "$flag" | sed 's/ *-I//'`
++ file="$dir/X11/keysymdef.h"
++ if test -f "$file"; then
++ KEYSYMDEF="$file"
++ fi
++ ;;
++ esac
+ ;;
+ esac
+- ;;
+- esac
+-done
+-case "$KEYSYMDEF" in
+-"")
+- AC_MSG_ERROR([Cannot find keysymdef.h])
+- ;;
+-*)
++ done
++fi
++
++if test -f "$KEYSYMDEF"; then
+ AC_MSG_RESULT([$KEYSYMDEF])
+- ;;
+-esac
++else
++ AC_MSG_ERROR([Cannot find keysymdef.h])
++fi
+ AC_SUBST(KEYSYMDEF)
+
+ AC_ARG_ENABLE(udc,
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11-1.1.2/keysymdef_include.patch b/recipes/obsolete/xorg/xorg-lib/libx11-1.1.2/keysymdef_include.patch
new file mode 100644
index 0000000000..565308834e
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11-1.1.2/keysymdef_include.patch
@@ -0,0 +1,62 @@
+---
+ configure.ac | 44 ++++++++++++++++++++++++--------------------
+ 1 file changed, 24 insertions(+), 20 deletions(-)
+
+Index: libX11-1.1.2/configure.ac
+===================================================================
+--- libX11-1.1.2.orig/configure.ac 2008-01-02 15:30:47.000000000 +0000
++++ libX11-1.1.2/configure.ac 2008-01-02 15:47:25.000000000 +0000
+@@ -207,29 +207,33 @@ AC_CHECK_FUNC(poll, [AC_DEFINE(USE_POLL,
+ #
+ KEYSYMDEF=""
+ AC_MSG_CHECKING([keysymdef.h])
+-for flag in $XPROTO_CFLAGS -I/usr/include; do
+- case "$KEYSYMDEF" in
+- "")
+- case "$flag" in
+- *-I*)
+- dir=`echo "$flag" | sed 's/ *-I//'`
+- file="$dir/X11/keysymdef.h"
+- if test -f "$file"; then
+- KEYSYMDEF="$file"
+- fi
++AC_ARG_WITH(keysymdef,
++ AC_HELP_STRING([--with-keysymdef=DIR/keysymdef.h], [The location of keysymdef.h]),
++ KEYSYMDEF=$withval, KEYSYMDEF="")
++
++if test x$KEYSYMDEF = x; then
++ for flag in $XPROTO_CFLAGS -I/usr/include; do
++ case "$KEYSYMDEF" in
++ "")
++ case "$flag" in
++ *-I*)
++ dir=`echo "$flag" | sed 's/ *-I//'`
++ file="$dir/X11/keysymdef.h"
++ if test -f "$file"; then
++ KEYSYMDEF="$file"
++ fi
++ ;;
++ esac
+ ;;
+ esac
+- ;;
+- esac
+-done
+-case "$KEYSYMDEF" in
+-"")
+- AC_MSG_ERROR([Cannot find keysymdef.h])
+- ;;
+-*)
++ done
++fi
++
++if test -f "$KEYSYMDEF"; then
+ AC_MSG_RESULT([$KEYSYMDEF])
+- ;;
+-esac
++else
++ AC_MSG_ERROR([Cannot find keysymdef.h])
++fi
+ AC_SUBST(KEYSYMDEF)
+
+ AC_ARG_ENABLE(udc,
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11-1.1.3/keysymdef_include.patch b/recipes/obsolete/xorg/xorg-lib/libx11-1.1.3/keysymdef_include.patch
new file mode 100644
index 0000000000..565308834e
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11-1.1.3/keysymdef_include.patch
@@ -0,0 +1,62 @@
+---
+ configure.ac | 44 ++++++++++++++++++++++++--------------------
+ 1 file changed, 24 insertions(+), 20 deletions(-)
+
+Index: libX11-1.1.2/configure.ac
+===================================================================
+--- libX11-1.1.2.orig/configure.ac 2008-01-02 15:30:47.000000000 +0000
++++ libX11-1.1.2/configure.ac 2008-01-02 15:47:25.000000000 +0000
+@@ -207,29 +207,33 @@ AC_CHECK_FUNC(poll, [AC_DEFINE(USE_POLL,
+ #
+ KEYSYMDEF=""
+ AC_MSG_CHECKING([keysymdef.h])
+-for flag in $XPROTO_CFLAGS -I/usr/include; do
+- case "$KEYSYMDEF" in
+- "")
+- case "$flag" in
+- *-I*)
+- dir=`echo "$flag" | sed 's/ *-I//'`
+- file="$dir/X11/keysymdef.h"
+- if test -f "$file"; then
+- KEYSYMDEF="$file"
+- fi
++AC_ARG_WITH(keysymdef,
++ AC_HELP_STRING([--with-keysymdef=DIR/keysymdef.h], [The location of keysymdef.h]),
++ KEYSYMDEF=$withval, KEYSYMDEF="")
++
++if test x$KEYSYMDEF = x; then
++ for flag in $XPROTO_CFLAGS -I/usr/include; do
++ case "$KEYSYMDEF" in
++ "")
++ case "$flag" in
++ *-I*)
++ dir=`echo "$flag" | sed 's/ *-I//'`
++ file="$dir/X11/keysymdef.h"
++ if test -f "$file"; then
++ KEYSYMDEF="$file"
++ fi
++ ;;
++ esac
+ ;;
+ esac
+- ;;
+- esac
+-done
+-case "$KEYSYMDEF" in
+-"")
+- AC_MSG_ERROR([Cannot find keysymdef.h])
+- ;;
+-*)
++ done
++fi
++
++if test -f "$KEYSYMDEF"; then
+ AC_MSG_RESULT([$KEYSYMDEF])
+- ;;
+-esac
++else
++ AC_MSG_ERROR([Cannot find keysymdef.h])
++fi
+ AC_SUBST(KEYSYMDEF)
+
+ AC_ARG_ENABLE(udc,
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11-1.1.4/keysymdef_include.patch b/recipes/obsolete/xorg/xorg-lib/libx11-1.1.4/keysymdef_include.patch
new file mode 100644
index 0000000000..565308834e
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11-1.1.4/keysymdef_include.patch
@@ -0,0 +1,62 @@
+---
+ configure.ac | 44 ++++++++++++++++++++++++--------------------
+ 1 file changed, 24 insertions(+), 20 deletions(-)
+
+Index: libX11-1.1.2/configure.ac
+===================================================================
+--- libX11-1.1.2.orig/configure.ac 2008-01-02 15:30:47.000000000 +0000
++++ libX11-1.1.2/configure.ac 2008-01-02 15:47:25.000000000 +0000
+@@ -207,29 +207,33 @@ AC_CHECK_FUNC(poll, [AC_DEFINE(USE_POLL,
+ #
+ KEYSYMDEF=""
+ AC_MSG_CHECKING([keysymdef.h])
+-for flag in $XPROTO_CFLAGS -I/usr/include; do
+- case "$KEYSYMDEF" in
+- "")
+- case "$flag" in
+- *-I*)
+- dir=`echo "$flag" | sed 's/ *-I//'`
+- file="$dir/X11/keysymdef.h"
+- if test -f "$file"; then
+- KEYSYMDEF="$file"
+- fi
++AC_ARG_WITH(keysymdef,
++ AC_HELP_STRING([--with-keysymdef=DIR/keysymdef.h], [The location of keysymdef.h]),
++ KEYSYMDEF=$withval, KEYSYMDEF="")
++
++if test x$KEYSYMDEF = x; then
++ for flag in $XPROTO_CFLAGS -I/usr/include; do
++ case "$KEYSYMDEF" in
++ "")
++ case "$flag" in
++ *-I*)
++ dir=`echo "$flag" | sed 's/ *-I//'`
++ file="$dir/X11/keysymdef.h"
++ if test -f "$file"; then
++ KEYSYMDEF="$file"
++ fi
++ ;;
++ esac
+ ;;
+ esac
+- ;;
+- esac
+-done
+-case "$KEYSYMDEF" in
+-"")
+- AC_MSG_ERROR([Cannot find keysymdef.h])
+- ;;
+-*)
++ done
++fi
++
++if test -f "$KEYSYMDEF"; then
+ AC_MSG_RESULT([$KEYSYMDEF])
+- ;;
+-esac
++else
++ AC_MSG_ERROR([Cannot find keysymdef.h])
++fi
+ AC_SUBST(KEYSYMDEF)
+
+ AC_ARG_ENABLE(udc,
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11-1.2/x11_disable_makekeys.patch b/recipes/obsolete/xorg/xorg-lib/libx11-1.2/x11_disable_makekeys.patch
new file mode 100644
index 0000000000..9e9e75ea43
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11-1.2/x11_disable_makekeys.patch
@@ -0,0 +1,23 @@
+--- /tmp/Makefile.am 2009-05-27 22:19:39.000000000 +0200
++++ libX11-1.2/src/util/Makefile.am 2009-05-27 22:21:31.000000000 +0200
+@@ -1,20 +1 @@
+-# $XdotOrg: lib/X11/src/util/Makefile.am,v 1.4 2006-02-19 02:14:12 jamey Exp $
+-
+-noinst_PROGRAMS=makekeys
+-
+-makekeys_CFLAGS=$(X11_CFLAGS)
+-
+-CC = @CC_FOR_BUILD@
+-
+ EXTRA_DIST = mkks.sh
+-
+-if LINT
+-# Check source code with tools like lint & sparse
+-
+-ALL_LINT_FLAGS=$(LINT_FLAGS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS)
+-
+-lint:
+- $(LINT) $(ALL_LINT_FLAGS) makekeys.c
+-
+-endif LINT
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11-1.3.3+git/dolt-fix.patch b/recipes/obsolete/xorg/xorg-lib/libx11-1.3.3+git/dolt-fix.patch
new file mode 100644
index 0000000000..7e96075aa3
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11-1.3.3+git/dolt-fix.patch
@@ -0,0 +1,22 @@
+Index: libX11-1.3.4/m4/dolt.m4
+===================================================================
+--- libX11-1.3.4/m4/dolt.m4
++++ libX11-1.3.4/m4/dolt.m4
+@@ -155,7 +155,7 @@ dnl without '=', because automake does n
+ cat <<__DOLTLIBTOOL__EOF__ > doltlibtool
+ #!$DOLT_BASH
+ __DOLTLIBTOOL__EOF__
+- cat <<'__DOLTLIBTOOL__EOF__' >>doltlibtool
++ cat <<'__DOLTLIBTOOL__EOF__' | sed -e "s/@host_alias@/$host_alias/g" >>doltlibtool
+ top_builddir_slash="${0%%doltlibtool}"
+ : ${top_builddir_slash:=./}
+ args=()
+@@ -171,7 +171,7 @@ done
+ if $modeok && $tagok ; then
+ . ${top_builddir_slash}doltcompile "${args@<:@@@:>@}"
+ else
+- exec ${top_builddir_slash}libtool "$[]@"
++ exec ${top_builddir_slash}@host_alias@-libtool "$[]@"
+ fi
+ __DOLTLIBTOOL__EOF__
+
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11-1.3.3+git/keysymdef_include.patch b/recipes/obsolete/xorg/xorg-lib/libx11-1.3.3+git/keysymdef_include.patch
new file mode 100644
index 0000000000..07487b6b2e
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11-1.3.3+git/keysymdef_include.patch
@@ -0,0 +1,29 @@
+Index: libX11-1.1.5/configure.ac
+===================================================================
+--- libX11-1.1.5.orig/configure.ac 2008-10-28 11:36:49.000000000 +0000
++++ libX11-1.1.5/configure.ac 2008-10-28 11:40:05.000000000 +0000
+@@ -221,13 +221,21 @@
+ # Find keysymdef.h
+ #
+ AC_MSG_CHECKING([keysymdef.h])
+-dir=`pkg-config --variable=includedir xproto`
+-KEYSYMDEF="$dir/X11/keysymdef.h"
++AC_ARG_WITH(keysymdef,
++ AC_HELP_STRING([--with-keysymdef=DIR/keysymdef.h], [The location of keysymdef.h]),
++ KEYSYMDEF=$withval, KEYSYMDEF="")
++
++if test x$KEYSYMDEF = x; then
++ dir=`pkg-config --variable=includedir xproto`
++ KEYSYMDEF="$dir/X11/keysymdef.h"
++fi
++
+ if test -f "$KEYSYMDEF"; then
+- AC_MSG_RESULT([$KEYSYMDEF])
++ AC_MSG_RESULT([$KEYSYMDEF])
+ else
+ AC_MSG_ERROR([Cannot find keysymdef.h])
+ fi
++
+ AC_SUBST(KEYSYMDEF)
+
+ AM_CONDITIONAL(UDC, test xfalse = xtrue)
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11-1.3.3+git/x11_disable_makekeys.patch b/recipes/obsolete/xorg/xorg-lib/libx11-1.3.3+git/x11_disable_makekeys.patch
new file mode 100644
index 0000000000..0739632daf
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11-1.3.3+git/x11_disable_makekeys.patch
@@ -0,0 +1,26 @@
+Index: git/src/util/Makefile.am
+===================================================================
+--- git.orig/src/util/Makefile.am
++++ git/src/util/Makefile.am
+@@ -1,21 +1 @@
+-
+-noinst_PROGRAMS=makekeys
+-
+-makekeys_CFLAGS = \
+- $(X11_CFLAGS) \
+- $(CWARNFLAGS)
+-
+-CC = @CC_FOR_BUILD@
+-
+ EXTRA_DIST = mkks.sh
+-
+-if LINT
+-# Check source code with tools like lint & sparse
+-
+-ALL_LINT_FLAGS=$(LINT_FLAGS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS)
+-
+-lint:
+- $(LINT) $(ALL_LINT_FLAGS) makekeys.c
+-
+-endif LINT
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11-1.3.3/x11_disable_makekeys.patch b/recipes/obsolete/xorg/xorg-lib/libx11-1.3.3/x11_disable_makekeys.patch
new file mode 100644
index 0000000000..5d0a24ca2d
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11-1.3.3/x11_disable_makekeys.patch
@@ -0,0 +1,23 @@
+diff -uNr libX11-1.3.3.orig/src/util/Makefile.am libX11-1.3.3/src/util/Makefile.am
+--- libX11-1.3.3.orig/src/util/Makefile.am 2010-01-15 02:11:36.000000000 +0100
++++ libX11-1.3.3/src/util/Makefile.am 2010-01-18 14:48:27.000000000 +0100
+@@ -1,19 +1 @@
+-
+-noinst_PROGRAMS=makekeys
+-
+-makekeys_CFLAGS=$(X11_CFLAGS)
+-
+-CC = @CC_FOR_BUILD@
+-
+ EXTRA_DIST = mkks.sh
+-
+-if LINT
+-# Check source code with tools like lint & sparse
+-
+-ALL_LINT_FLAGS=$(LINT_FLAGS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS)
+-
+-lint:
+- $(LINT) $(ALL_LINT_FLAGS) makekeys.c
+-
+-endif LINT
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11-1.3.4/dolt-fix.patch b/recipes/obsolete/xorg/xorg-lib/libx11-1.3.4/dolt-fix.patch
new file mode 100644
index 0000000000..7e96075aa3
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11-1.3.4/dolt-fix.patch
@@ -0,0 +1,22 @@
+Index: libX11-1.3.4/m4/dolt.m4
+===================================================================
+--- libX11-1.3.4/m4/dolt.m4
++++ libX11-1.3.4/m4/dolt.m4
+@@ -155,7 +155,7 @@ dnl without '=', because automake does n
+ cat <<__DOLTLIBTOOL__EOF__ > doltlibtool
+ #!$DOLT_BASH
+ __DOLTLIBTOOL__EOF__
+- cat <<'__DOLTLIBTOOL__EOF__' >>doltlibtool
++ cat <<'__DOLTLIBTOOL__EOF__' | sed -e "s/@host_alias@/$host_alias/g" >>doltlibtool
+ top_builddir_slash="${0%%doltlibtool}"
+ : ${top_builddir_slash:=./}
+ args=()
+@@ -171,7 +171,7 @@ done
+ if $modeok && $tagok ; then
+ . ${top_builddir_slash}doltcompile "${args@<:@@@:>@}"
+ else
+- exec ${top_builddir_slash}libtool "$[]@"
++ exec ${top_builddir_slash}@host_alias@-libtool "$[]@"
+ fi
+ __DOLTLIBTOOL__EOF__
+
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11-1.3.4/keysymdef_include.patch b/recipes/obsolete/xorg/xorg-lib/libx11-1.3.4/keysymdef_include.patch
new file mode 100644
index 0000000000..0cab165f74
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11-1.3.4/keysymdef_include.patch
@@ -0,0 +1,21 @@
+Index: libX11-1.3.4/configure.ac
+===================================================================
+--- libX11-1.3.4.orig/configure.ac
++++ libX11-1.3.4/configure.ac
+@@ -355,8 +355,14 @@ AC_CHECK_FUNC(poll, [AC_DEFINE(USE_POLL,
+ # Find keysymdef.h
+ #
+ AC_MSG_CHECKING([keysymdef.h])
+-dir=`$PKG_CONFIG --variable=includedir xproto`
+-KEYSYMDEF="$dir/X11/keysymdef.h"
++AC_ARG_WITH(keysymdef,
++ AC_HELP_STRING([--with-keysymdef=DIR/keysymdef.h], [The location of keysymdef.h]),
++ KEYSYMDEF=$withval, KEYSYMDEF="")
++
++if test x$KEYSYMDEF = x; then
++ dir=`${PKG_CONFIG} --variable=includedir xproto`
++ KEYSYMDEF="$dir/X11/keysymdef.h"
++fi
+ if test -f "$KEYSYMDEF"; then
+ AC_MSG_RESULT([$KEYSYMDEF])
+ else
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11-1.3.4/x11_disable_makekeys.patch b/recipes/obsolete/xorg/xorg-lib/libx11-1.3.4/x11_disable_makekeys.patch
new file mode 100644
index 0000000000..9763313975
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11-1.3.4/x11_disable_makekeys.patch
@@ -0,0 +1,29 @@
+Index: libX11-1.3.4/src/util/Makefile.am
+===================================================================
+--- libX11-1.3.4.orig/src/util/Makefile.am
++++ libX11-1.3.4/src/util/Makefile.am
+@@ -1,24 +1 @@
+-
+-noinst_PROGRAMS=makekeys
+-
+-makekeys_CFLAGS = \
+- $(X11_CFLAGS) \
+- $(CWARNFLAGS)
+-
+-CC = @CC_FOR_BUILD@
+-CPPFLAGS = @CPPFLAGS_FOR_BUILD@
+-CFLAGS = @CFLAGS_FOR_BUILD@
+-LDFLAGS = @LDFLAGS_FOR_BUILD@
+-
+ EXTRA_DIST = mkks.sh
+-
+-if LINT
+-# Check source code with tools like lint & sparse
+-
+-ALL_LINT_FLAGS=$(LINT_FLAGS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS)
+-
+-lint:
+- $(LINT) $(ALL_LINT_FLAGS) makekeys.c
+-
+-endif LINT
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11/ruutf8.patch b/recipes/obsolete/xorg/xorg-lib/libx11/ruutf8.patch
new file mode 100644
index 0000000000..0822b30cb8
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11/ruutf8.patch
@@ -0,0 +1,12 @@
+diff --git a/nls/locale.alias.pre b/nls/locale.alias.pre
+index a74ca75..ff5bc3f 100644
+--- a/nls/locale.alias.pre
++++ b/nls/locale.alias.pre
+@@ -898,6 +898,7 @@ ru_RU.cp1251: ru_RU.CP1251
+ ru_RU.microsoftcp1251: ru_RU.CP1251
+ ru_RU.microsoft-cp1251: ru_RU.CP1251
+ ru_RU.MICROSOFT-CP1251: ru_RU.CP1251
++ru_RU.utf8: ru_RU.UTF-8
+ #if defined(INCLUDE_ru_SU)
+ XCOMM ru_SU is redundant now
+ ru_SU: ru_RU.KOI8-R
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11/xchar2b.patch b/recipes/obsolete/xorg/xorg-lib/libx11/xchar2b.patch
new file mode 100644
index 0000000000..31da58fa5c
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11/xchar2b.patch
@@ -0,0 +1,13 @@
+http://www.koka-in.org/~kensyu/zaurus/diary/20030618.html
+
+--- /tmp/Xlib.h 2006-12-01 14:40:27.000000000 +0100
++++ libX11-X11R7.1-1.0.1/include/X11/Xlib.h 2006-12-01 14:40:56.948254000 +0100
+@@ -1067,7 +1067,7 @@
+ typedef struct { /* normal 16 bit characters are two bytes */
+ unsigned char byte1;
+ unsigned char byte2;
+-} XChar2b;
++} __attribute__ ((packed)) XChar2b;
+
+ typedef struct {
+ XChar2b *chars; /* two byte characters */
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11/xim.patch b/recipes/obsolete/xorg/xorg-lib/libx11/xim.patch
new file mode 100644
index 0000000000..0eab197a80
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11/xim.patch
@@ -0,0 +1,55 @@
+--- libX11-6.2.1/src/X18NCMSstubs.c 2003-12-04 22:47:47.000000000 +0000
++++ libX11-6.2.1/src/X18NCMSstubs.c-new 2005-12-09 12:09:03.000000000 +0000
+@@ -90,6 +90,52 @@
+ return;
+ }
+
++XIM
++XOpenIM (
++ Display* display,
++ struct _XrmHashBucketRec* rdb,
++ char* res_name,
++ char* res_class)
++{
++ return (XIM) NULL;
++}
++
++Status
++XCloseIM ( XIM im )
++{
++ return NULL;
++}
++
++XIC
++XCreateIC ( XIM im, ...)
++{
++ return NULL;
++}
++
++void
++XDestroyIC ( XIC ic )
++{
++ return;
++}
++
++int
++XmbLookupString (
++ XIC ic,
++ XKeyPressedEvent* ev,
++ char* buffer,
++ int nbytes,
++ KeySym* keysym,
++ Status* status)
++{
++ return XLookupNone;
++}
++
++char *
++XGetICValues( XIC ic, ...)
++{
++ return (char *) NULL;
++}
++
+ XPointer
+ _XimGetLocaleCode ( _Xconst char* encoding_name )
+ {
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11_1.0.1.bb b/recipes/obsolete/xorg/xorg-lib/libx11_1.0.1.bb
new file mode 100644
index 0000000000..734a31d028
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11_1.0.1.bb
@@ -0,0 +1,10 @@
+require libx11.inc
+LICENSE = "XFree86"
+DEPENDS = "${COMMON_DEPENDS}"
+PR = "${INC_PR}.0"
+
+SRC_URI += " file://ruutf8.patch"
+SRC_URI[archive.md5sum] = "58f0537f21183e27149cf906a1b6bef9"
+SRC_URI[archive.sha256sum] = "f99e4ce6d8e3b8833957978fe22223897b0e636c83580f2b07eff0388eb75294"
+
+EXTRA_OECONF += " --without-xcb"
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11_1.0.3.bb b/recipes/obsolete/xorg/xorg-lib/libx11_1.0.3.bb
new file mode 100644
index 0000000000..40cbeb5b48
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11_1.0.3.bb
@@ -0,0 +1,10 @@
+require libx11.inc
+LICENSE = "XFree86"
+DEPENDS = "${COMMON_DEPENDS}"
+PR = "${INC_PR}.0"
+
+SRC_URI += " file://ruutf8.patch"
+SRC_URI[archive.md5sum] = "60b787a812c92d33f71860e4e19cb59d"
+SRC_URI[archive.sha256sum] = "fb42f2400c3709a0c2c17f27cc4a902c191ebd6228c70698891bf3a13ea5b3ac"
+
+EXTRA_OECONF += " --without-xcb"
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11_1.1.1.bb b/recipes/obsolete/xorg/xorg-lib/libx11_1.1.1.bb
new file mode 100644
index 0000000000..368dd7b0fa
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11_1.1.1.bb
@@ -0,0 +1,9 @@
+require libx11.inc
+DEPENDS = "${COMMON_DEPENDS}"
+PR = "${INC_PR}.0"
+
+SRC_URI += " file://ruutf8.patch"
+SRC_URI[archive.md5sum] = "848b80f77b20ae1fa5c882bbfa531ebc"
+SRC_URI[archive.sha256sum] = "5359db57793430429786b648ac570d4ab205797306e049bf1e8675250af21541"
+
+EXTRA_OECONF += " --without-xcb"
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11_1.1.2.bb b/recipes/obsolete/xorg/xorg-lib/libx11_1.1.2.bb
new file mode 100644
index 0000000000..60093c1b6d
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11_1.1.2.bb
@@ -0,0 +1,8 @@
+require libx11.inc
+DEPENDS = "${COMMON_DEPENDS}"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "710bf38a9477a5a1b235bc94f1d0593c"
+SRC_URI[archive.sha256sum] = "b77e4fd2bbd4092e7e78d0964760ad8ab160caccd4bc6d7d0c87a23febaea85e"
+
+EXTRA_OECONF += " --without-xcb"
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11_1.1.3.bb b/recipes/obsolete/xorg/xorg-lib/libx11_1.1.3.bb
new file mode 100644
index 0000000000..d6aa199e7f
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11_1.1.3.bb
@@ -0,0 +1,8 @@
+require libx11.inc
+DEPENDS = "${COMMON_DEPENDS}"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "4d43d3e472c552d2f191ecdd4e75112c"
+SRC_URI[archive.sha256sum] = "4a2f566e2ea5dd955c875cb8fa9c18dd725324fc5cf4e23c803442e31ab8917a"
+
+EXTRA_OECONF += " --without-xcb"
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11_1.1.4.bb b/recipes/obsolete/xorg/xorg-lib/libx11_1.1.4.bb
new file mode 100644
index 0000000000..3eeeece52c
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11_1.1.4.bb
@@ -0,0 +1,8 @@
+require libx11.inc
+DEPENDS = "${COMMON_DEPENDS}"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "1469a5a8aa8d288dce6f4c45d2f68dc3"
+SRC_URI[archive.sha256sum] = "bdbd6d239435c1736f5c532b12e8078761db8db5f37ab3195fe11c3e5b692c1c"
+
+EXTRA_OECONF += " --without-xcb"
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11_1.2.bb b/recipes/obsolete/xorg/xorg-lib/libx11_1.2.bb
new file mode 100644
index 0000000000..0cea5f884c
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11_1.2.bb
@@ -0,0 +1,9 @@
+require libx11.inc
+DEPENDS = "${COMMON_DEPENDS}"
+PR = "${INC_PR}.0"
+
+SRC_URI += " file://dolt-fix.patch"
+SRC_URI[archive.md5sum] = "c6265b59ea2b594fd68e33f9125b4d20"
+SRC_URI[archive.sha256sum] = "e4863cdf5d471763806e9bcae25ea47606a56cd91a5546a34c093aa3de181051"
+
+EXTRA_OECONF += " --without-xcb"
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11_1.3.3.bb b/recipes/obsolete/xorg/xorg-lib/libx11_1.3.3.bb
new file mode 100644
index 0000000000..8c40a99fd9
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11_1.3.3.bb
@@ -0,0 +1,6 @@
+require libx11.inc
+PR = "${INC_PR}.0"
+
+SRC_URI += " file://dolt-fix.patch"
+SRC_URI[archive.md5sum] = "5d74971360f194ce33d2bd2e4d9b066c"
+SRC_URI[archive.sha256sum] = "8c7f867918a3739dc7cabe955179539d4a7ecc52cb42becfd261e5dfbff511ac"
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11_1.3.4.bb b/recipes/obsolete/xorg/xorg-lib/libx11_1.3.4.bb
new file mode 100644
index 0000000000..e55d7201ad
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11_1.3.4.bb
@@ -0,0 +1,6 @@
+require libx11.inc
+PR = "${INC_PR}.0"
+
+SRC_URI += " file://dolt-fix.patch"
+SRC_URI[archive.md5sum] = "f65c9c7ecbfb64c19dbd7927160d63fd"
+SRC_URI[archive.sha256sum] = "88d7238ce5f7cd123450567de7a3b56a43556e4ccc45df38b8324147c889a844"
diff --git a/recipes/obsolete/xorg/xorg-lib/libx11_git.bb b/recipes/obsolete/xorg/xorg-lib/libx11_git.bb
new file mode 100644
index 0000000000..eac68d8ff4
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libx11_git.bb
@@ -0,0 +1,14 @@
+require libx11.inc
+PV = "1.3.3+git"
+PR = "${INC_PR}.0"
+
+SRC_URI = "git://anongit.freedesktop.org/git/xorg/lib/libX11;protocol=git"
+SRC_URI += " file://keysymdef_include.patch \
+ file://x11_disable_makekeys.patch \
+ file://dolt-fix.patch \
+"
+
+SRCREV = "c3f3e4a9e531d010312c97e753d6e543e607094d"
+S = "${WORKDIR}/git"
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxau_1.0.3.bb b/recipes/obsolete/xorg/xorg-lib/libxau_1.0.3.bb
new file mode 100644
index 0000000000..cd4f79b510
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxau_1.0.3.bb
@@ -0,0 +1,12 @@
+require xorg-lib-common.inc
+DESCRIPTION = "A Sample Authorization Protocol for X"
+DEPENDS += " xproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "75a9f2b85cd1617b5ca98c9095323853"
+SRC_URI[archive.sha256sum] = "d6c30a88770a720e96e0bd7e13e0334f9ef60f1b475a92556764828005c19e3b"
+
+BBCLASSEXTEND = "native nativesdk"
+
+XORG_PN = "libXau"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxau_1.0.4.bb b/recipes/obsolete/xorg/xorg-lib/libxau_1.0.4.bb
new file mode 100644
index 0000000000..293fc63151
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxau_1.0.4.bb
@@ -0,0 +1,12 @@
+require xorg-lib-common.inc
+DESCRIPTION = "A Sample Authorization Protocol for X"
+DEPENDS += " xproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "0f2b88d857e0a3f5898e4759c541af46"
+SRC_URI[archive.sha256sum] = "10d3ffa5f00d0c0a4083309ba68bdfa01dfdf912ef4cf2141e3f260b2edeb22c"
+
+BBCLASSEXTEND = "native nativesdk"
+
+XORG_PN = "libXau"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxaw_1.0.3.bb b/recipes/obsolete/xorg/xorg-lib/libxaw_1.0.3.bb
new file mode 100644
index 0000000000..87ec70e871
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxaw_1.0.3.bb
@@ -0,0 +1,22 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X Athena Widget Set"
+DEPENDS += "xproto virtual/libx11 libxext xextproto libxt libxmu libxpm libxp printproto libxau"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "ee215536ea78798268ab3a444d10135a"
+SRC_URI[archive.sha256sum] = "45ca55bdac904a07b8118618c65ddb5bf8826e626c4c927e3c2508c58e231514"
+
+do_install_append () {
+ ln -sf libXaw6.so.6 ${D}${libdir}/libXaw.so.6
+ ln -sf libXaw7.so.7 ${D}${libdir}/libXaw.so.7
+ ln -sf libXaw7.so.7 ${D}${libdir}/libXaw.so
+}
+
+PACKAGES =+ "libxaw6 libxaw7 libxaw8"
+
+FILES_libxaw6 = "${libdir}/libXaw6.so.6*"
+FILES_libxaw7 = "${libdir}/libXaw7.so.7*"
+FILES_libxaw8 = "${libdir}/libXaw8.so.8*"
+
+XORG_PN = "libXaw"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxaw_1.0.4.bb b/recipes/obsolete/xorg/xorg-lib/libxaw_1.0.4.bb
new file mode 100644
index 0000000000..2ed715d85b
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxaw_1.0.4.bb
@@ -0,0 +1,22 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X Athena Widget Set"
+DEPENDS += "xproto virtual/libx11 libxext xextproto libxt libxmu libxpm libxp printproto libxau"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "73671d8f1cf36fdd81395328cc3539c9"
+SRC_URI[archive.sha256sum] = "11f4ab184fb8dc853fd95238d4de7b251427dd036643d11fd2a669232fa35af9"
+
+do_install_append () {
+ ln -sf libXaw6.so.6 ${D}${libdir}/libXaw.so.6
+ ln -sf libXaw7.so.7 ${D}${libdir}/libXaw.so.7
+ ln -sf libXaw7.so.7 ${D}${libdir}/libXaw.so
+}
+
+PACKAGES =+ "libxaw6 libxaw7 libxaw8"
+
+FILES_libxaw6 = "${libdir}/libXaw6.so.6*"
+FILES_libxaw7 = "${libdir}/libXaw7.so.7*"
+FILES_libxaw8 = "${libdir}/libXaw8.so.8*"
+
+XORG_PN = "libXaw"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxcomposite/change-include-order.patch b/recipes/obsolete/xorg/xorg-lib/libxcomposite/change-include-order.patch
new file mode 100644
index 0000000000..630b8818fc
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxcomposite/change-include-order.patch
@@ -0,0 +1,14 @@
+This patch makes the build use its own Xcomposite.h over rather than an
+older Xcomposite.h that might already be installed in the staging dir.
+
+--- libXcomposite-X11R7.0-0.2.2.2/src/Makefile.am.orig 2006-03-12 20:10:17.000000000 +0100
++++ libXcomposite-X11R7.0-0.2.2.2/src/Makefile.am 2006-03-12 20:10:35.000000000 +0100
+@@ -21,7 +21,7 @@
+ # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ # PERFORMANCE OF THIS SOFTWARE.
+
+-AM_CFLAGS = $(XCOMPOSITE_CFLAGS) $(XCOMPOSITE_CFLAGS) $(X_CFLAGS) -I$(top_srcdir)/include
++AM_CFLAGS = -I$(top_srcdir)/include $(XCOMPOSITE_CFLAGS) $(XCOMPOSITE_CFLAGS) $(X_CFLAGS)
+
+ lib_LTLIBRARIES = libXcomposite.la
+
diff --git a/recipes/obsolete/xorg/xorg-lib/libxcomposite_0.3.1.bb b/recipes/obsolete/xorg/xorg-lib/libxcomposite_0.3.1.bb
new file mode 100644
index 0000000000..d7f8bebfbb
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxcomposite_0.3.1.bb
@@ -0,0 +1,12 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X Composite extension library."
+LICENSE = "BSD-X"
+DEPENDS += " compositeproto virtual/libx11 libxfixes"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI += " file://change-include-order.patch"
+SRC_URI[archive.md5sum] = "a80650d660486ea7bb2e5fd84a83799a"
+SRC_URI[archive.sha256sum] = "d42b59d3c38dae5e4fec375d12e56e7a5764ba10e8b8ec70f9ce951fc9cec72b"
+
+XORG_PN = "libXcomposite"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxcomposite_0.4.0.bb b/recipes/obsolete/xorg/xorg-lib/libxcomposite_0.4.0.bb
new file mode 100644
index 0000000000..2dff14aa81
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxcomposite_0.4.0.bb
@@ -0,0 +1,12 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X Composite extension library."
+LICENSE = "BSD-X"
+DEPENDS += " compositeproto virtual/libx11 libxfixes libxext"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI += " file://change-include-order.patch"
+SRC_URI[archive.md5sum] = "7e95395dea89be21bae929b9b7f16641"
+SRC_URI[archive.sha256sum] = "7db759e82dd1f68094e4c4d257025f7893dafb2913ed249e00cbe18fa13c7510"
+
+XORG_PN = "libXcomposite"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxcursor_1.1.8.bb b/recipes/obsolete/xorg/xorg-lib/libxcursor_1.1.8.bb
new file mode 100644
index 0000000000..3f175e8653
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxcursor_1.1.8.bb
@@ -0,0 +1,13 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X cursor management library"
+LICENSE = "BSD-X"
+DEPENDS += "libxrender libxfixes"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "ec2acd10a7736a85dd1e1ed9ea5bec96"
+SRC_URI[archive.sha256sum] = "8f039f81af52c88d583fba48b878abd074542221cb0030638ad52336b4ae1377"
+
+BBCLASSEXTEND = "native"
+
+XORG_PN = "libXcursor"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxcursor_1.1.9.bb b/recipes/obsolete/xorg/xorg-lib/libxcursor_1.1.9.bb
new file mode 100644
index 0000000000..2b363a5c07
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxcursor_1.1.9.bb
@@ -0,0 +1,13 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X cursor management library"
+LICENSE = "BSD-X"
+DEPENDS += "libxrender libxfixes"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "99b7554037a92b260891091e81815a0a"
+SRC_URI[archive.sha256sum] = "1dffb3542271c8ce964066d561474caec5b639d6588b257b21cfb8225a15d2b4"
+
+BBCLASSEXTEND = "native"
+
+XORG_PN = "libXcursor"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxdamage_1.0.4.bb b/recipes/obsolete/xorg/xorg-lib/libxdamage_1.0.4.bb
new file mode 100644
index 0000000000..452c634528
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxdamage_1.0.4.bb
@@ -0,0 +1,11 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X Damage extension library."
+LICENSE = "BSD-X"
+DEPENDS += " virtual/libx11 damageproto libxfixes fixesproto xextproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "4d0eece7a8372a7754db1de08c2be324"
+SRC_URI[archive.sha256sum] = "5df90f0efa77e1d6f9e1768a2b0adfc896d09c7a3d8680ed0980511b3625c636"
+
+XORG_PN = "libXdamage"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxdamage_1.1.1.bb b/recipes/obsolete/xorg/xorg-lib/libxdamage_1.1.1.bb
new file mode 100644
index 0000000000..cb7eca1e6e
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxdamage_1.1.1.bb
@@ -0,0 +1,11 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 damaged region extension library"
+LICENSE = "BSD-X"
+DEPENDS += "damageproto libxfixes"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "ac0ce6b0063a9858c8f24ddb4c60487d"
+SRC_URI[archive.sha256sum] = "0102754db23952a1c3adf7881bbf191f91ca3e3d183e1b0179452bce932fae2e"
+
+XORG_PN = "libXdamage"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxdmcp_1.0.2.bb b/recipes/obsolete/xorg/xorg-lib/libxdmcp_1.0.2.bb
new file mode 100644
index 0000000000..1226afbb31
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxdmcp_1.0.2.bb
@@ -0,0 +1,12 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X Display Manager Control Protocol library"
+DEPENDS += "xproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "10facf2bc7cbd5e5c1a698b8a210a582"
+SRC_URI[archive.sha256sum] = "f3e50c1847599145c22784a2f15818821960652ee91d21d905817fb7c10f96a8"
+
+BBCLASSEXTEND = "native nativesdk"
+
+XORG_PN = "libXdmcp"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxext_1.0.2.bb b/recipes/obsolete/xorg/xorg-lib/libxext_1.0.2.bb
new file mode 100644
index 0000000000..02326de9a2
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxext_1.0.2.bb
@@ -0,0 +1,13 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X Server Extension library"
+PRIORITY = "optional"
+DEPENDS += " xproto virtual/libx11 xextproto libxau"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "cce89c5b941a493512b534f4847c6111"
+SRC_URI[archive.sha256sum] = "368e4cf5117febd998e6fc40d096b3af19a571adccc5ed49b9d16e482b3a8f8e"
+
+BBCLASSEXTEND = "native nativesdk"
+
+XORG_PN = "libXext"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxext_1.0.3.bb b/recipes/obsolete/xorg/xorg-lib/libxext_1.0.3.bb
new file mode 100644
index 0000000000..f8d76b4512
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxext_1.0.3.bb
@@ -0,0 +1,12 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 miscellaneous extension library"
+DEPENDS += "xproto virtual/libx11 xextproto libxau"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "1bf6fa1c26f9957d7cc0bd90b038dfa6"
+SRC_URI[archive.sha256sum] = "2d706baf206d1cb422c8e0ceb6c5a8546bc3f0587cf090eba51e75a295d9c3f0"
+
+BBCLASSEXTEND = "native nativesdk"
+
+XORG_PN = "libXext"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxext_1.0.4.bb b/recipes/obsolete/xorg/xorg-lib/libxext_1.0.4.bb
new file mode 100644
index 0000000000..1317e5c67e
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxext_1.0.4.bb
@@ -0,0 +1,12 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 miscellaneous extension library"
+DEPENDS += "xproto virtual/libx11 xextproto libxau"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "a91f1f722ac80c597cf0b75dcb8b48c0"
+SRC_URI[archive.sha256sum] = "2dfd8eace1cafacc87b4055c57efeb771a740e24141d3f113de58c2a9eebd21f"
+
+BBCLASSEXTEND = "native nativesdk"
+
+XORG_PN = "libXext"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxext_1.0.5.bb b/recipes/obsolete/xorg/xorg-lib/libxext_1.0.5.bb
new file mode 100644
index 0000000000..40dbecea10
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxext_1.0.5.bb
@@ -0,0 +1,12 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 miscellaneous extension library"
+DEPENDS += "xproto virtual/libx11 xextproto libxau libxdmcp"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "aa11d859cc8e9a0bad3bb55e1666547b"
+SRC_URI[archive.sha256sum] = "1280af98466cb4484a89858ede3347ba9d7785baeb80b11f2066142dc2317d97"
+
+BBCLASSEXTEND = "native nativesdk"
+
+XORG_PN = "libXext"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxfixes_4.0.3.bb b/recipes/obsolete/xorg/xorg-lib/libxfixes_4.0.3.bb
new file mode 100644
index 0000000000..d5747641c5
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxfixes_4.0.3.bb
@@ -0,0 +1,13 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X Fixes extension library."
+LICENSE = "BSD-X"
+DEPENDS += "virtual/libx11 xproto fixesproto xextproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "1990d19725a3c7f32290037f02d3737f"
+SRC_URI[archive.sha256sum] = "547e093c5037c4b85ce653ce26f5bd70a97b177f9b582f5351a626d8e0a829dd"
+
+BBCLASSEXTEND = "native"
+
+XORG_PN = "libXfixes"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxfont/builtinreaddirectory-no-side-effect.patch b/recipes/obsolete/xorg/xorg-lib/libxfont/builtinreaddirectory-no-side-effect.patch
new file mode 100644
index 0000000000..dd307434b9
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxfont/builtinreaddirectory-no-side-effect.patch
@@ -0,0 +1,188 @@
+commit 7670d4a2720c61fbc7b989fed14c676f04ac3ad1
+Author: Dodji Seketeli <dodji@openedhand.com>
+Date: Mon Jul 16 12:24:34 2007 +0200
+
+ Remove side effects from BuiltinReadDirectory()
+
+ The first time BuiltinReadDirectory() is called,
+ save the content of builtin_dir and builtin_alias,
+ before calling FontFileAddFontFile(), because that fonction
+ will modify those.
+
+ Then, in subsequent calls to BuiltinReadDirectory(), restore
+ builtin_dir and builtin_alias so that the side effect incurred
+ by the first call disappears.
+
+diff --git a/src/builtins/dir.c b/src/builtins/dir.c
+index c272449..97f1e1e 100644
+--- a/src/builtins/dir.c
++++ b/src/builtins/dir.c
+@@ -29,6 +29,133 @@
+ #endif
+ #include "builtin.h"
+
++BuiltinDirPtr
++BuiltinDirsDup (const BuiltinDirPtr a_dirs,
++ int a_dirs_len)
++{
++ BuiltinDirPtr dirs=NULL ;
++ int i=0 ;
++
++ if (!a_dirs)
++ return NULL ;
++
++ dirs = xcalloc (a_dirs_len, sizeof (BuiltinDirRec)) ;
++ if (!dirs)
++ return NULL ;
++
++ for (i=0; i < a_dirs_len; i++) {
++ int len = strlen (a_dirs[i].file_name) ;
++ dirs[i].file_name = xcalloc (1, len) ;
++ memmove (dirs[i].file_name, a_dirs[i].file_name, len);
++ len = strlen (a_dirs[i].font_name) ;
++ dirs[i].font_name = xcalloc (1, len) ;
++ memmove (dirs[i].font_name, a_dirs[i].font_name, len);
++ }
++ return dirs ;
++}
++
++/**
++ * Copy a_save back into a_cur
++ * @param a_cur the instance of BuiltinDir to restore
++ * @param a_saved the saved instance of BuiltinDir to copy into a_cur
++ * @return 0 if went okay, 1 otherwise.
++ */
++int
++BuiltinDirRestore (BuiltinDirPtr a_cur,
++ const BuiltinDirPtr a_saved)
++{
++ if (!a_cur)
++ return 1 ;
++ if (!a_saved)
++ return 0 ;
++
++ if (a_saved->font_name)
++ memmove (a_cur->font_name, a_saved->font_name, strlen (a_saved->font_name)) ;
++ return 0 ;
++}
++
++
++int
++BuiltinDirsRestore (BuiltinDirPtr a_cur_tab,
++ const BuiltinDirPtr a_saved_tab,
++ int a_tab_len)
++{
++ int i=0 ;
++
++ if (!a_cur_tab)
++ return 1 ;
++ if (!a_saved_tab)
++ return 0 ;
++
++ for (i=0 ; i < a_tab_len; i++) {
++ if (BuiltinDirRestore (&a_cur_tab[i], &a_saved_tab[i]))
++ return 1 ;
++ }
++ return 0 ;
++}
++
++BuiltinAliasPtr
++BuiltinAliasesDup (const BuiltinAliasPtr a_aliases,
++ int a_aliases_len)
++{
++ BuiltinAliasPtr aliases=NULL ;
++ int i=0 ;
++
++ if (!a_aliases)
++ return NULL ;
++
++ aliases = xcalloc (a_aliases_len, sizeof (BuiltinAliasRec)) ;
++ if (!aliases)
++ return NULL ;
++
++ for (i=0; i < a_aliases_len; i++) {
++ int len = strlen (a_aliases[i].font_name) ;
++ aliases[i].font_name = xcalloc (1, len) ;
++ memmove (aliases[i].font_name, a_aliases[i].font_name, len);
++ }
++ return aliases ;
++}
++
++/**
++ * Copy a_save back into a_cur
++ * @param a_cur the instance of BuiltinAlias to restore
++ * @param a_saved the saved instance of BuiltinAlias to copy into a_cur
++ * @return 0 if went okay, 1 otherwise.
++ */
++int
++BuiltinAliasRestore (BuiltinAliasPtr a_cur,
++ const BuiltinAliasPtr a_save)
++{
++ if (!a_cur)
++ return 1 ;
++ if (!a_save)
++ return 0 ;
++ if (a_save->alias_name)
++ memmove (a_cur->alias_name, a_save->alias_name, strlen (a_save->alias_name)) ;
++ if (a_save->font_name)
++ memmove (a_cur->font_name, a_save->font_name, strlen (a_save->font_name)) ;
++ return 0 ;
++}
++
++int
++BuiltinAliasesRestore (BuiltinAliasPtr a_cur_tab,
++ const BuiltinAliasPtr a_saved_tab,
++ int a_tab_len)
++{
++ int i=0 ;
++
++ if (!a_cur_tab)
++ return 1 ;
++ if (!a_saved_tab)
++ return 0 ;
++
++ for (i=0 ; i < a_tab_len; i++) {
++ if (BuiltinAliasRestore (&a_cur_tab[i], &a_saved_tab[i]))
++ return 1 ;
++ }
++ return 0 ;
++}
++
+ int
+ BuiltinReadDirectory (char *directory, FontDirectoryPtr *pdir)
+ {
+@@ -36,6 +163,34 @@ BuiltinReadDirectory (char *directory, FontDirectoryPtr *pdir)
+ int i;
+
+ dir = FontFileMakeDir ("", builtin_dir_count);
++ static BuiltinDirPtr saved_builtin_dir ;
++ static BuiltinAliasPtr saved_builtin_alias ;
++
++
++ if (saved_builtin_dir)
++ {
++ BuiltinDirsRestore ((BuiltinDirPtr) builtin_dir,
++ saved_builtin_dir,
++ builtin_dir_count) ;
++ }
++ else
++ {
++ saved_builtin_dir = BuiltinDirsDup ((const BuiltinDirPtr) builtin_dir,
++ builtin_dir_count) ;
++ }
++
++ if (saved_builtin_alias)
++ {
++ BuiltinAliasesRestore ((BuiltinAliasPtr) builtin_alias,
++ saved_builtin_alias,
++ builtin_alias_count) ;
++ }
++ else
++ {
++ saved_builtin_alias = BuiltinAliasesDup ((const BuiltinAliasPtr) builtin_alias,
++ builtin_alias_count) ;
++ }
++
+ for (i = 0; i < builtin_dir_count; i++)
+ {
+ if (!FontFileAddFontFile (dir,
diff --git a/recipes/obsolete/xorg/xorg-lib/libxfont/no-scalable-crash.patch b/recipes/obsolete/xorg/xorg-lib/libxfont/no-scalable-crash.patch
new file mode 100644
index 0000000000..90bded6fba
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxfont/no-scalable-crash.patch
@@ -0,0 +1,22 @@
+--- /tmp/fontdir.c 2006-08-01 16:17:22.000000000 +0200
++++ libXfont-1.2.0/src/fontfile/fontdir.c 2006-08-01 16:20:37.248306000 +0200
+@@ -695,6 +695,11 @@
+ */
+ if (isscale)
+ {
++ /* If the fontname says it is scalable, make sure that the
++ * renderer supports OpenScalable and GetInfoScalable.
++ */
++ if (renderer->OpenScalable && renderer->GetInfoScalable)
++ {
+ if (vals.values_supplied & SIZE_SPECIFY_MASK)
+ {
+ bzero((char *)&zeroVals, sizeof(zeroVals));
+@@ -794,6 +799,7 @@
+ bitmap->name.name);
+ }
+ }
++ }
+ }
+ return TRUE;
+ }
diff --git a/recipes/obsolete/xorg/xorg-lib/libxfont_1.2.7.bb b/recipes/obsolete/xorg/xorg-lib/libxfont_1.2.7.bb
new file mode 100644
index 0000000000..b470c8bd99
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxfont_1.2.7.bb
@@ -0,0 +1,15 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X font library (used by the X server)."
+PRIORITY = "optional"
+LICENSE = "BSD-X"
+DEPENDS += " freetype fontcacheproto zlib xproto xtrans fontsproto libfontenc"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI += "file://no-scalable-crash.patch"
+SRC_URI[archive.md5sum] = "2f2085310f75900044d9dcd469637d26"
+SRC_URI[archive.sha256sum] = "2f8c004c0b914d460e6fd2b48d8b425cf4778d415467fc1f1d938b200462d18b"
+
+BBCLASSEXTEND = "native"
+
+XORG_PN = "libXfont"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxfont_1.2.8.bb b/recipes/obsolete/xorg/xorg-lib/libxfont_1.2.8.bb
new file mode 100644
index 0000000000..3794cf2055
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxfont_1.2.8.bb
@@ -0,0 +1,15 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X font library (used by the X server)."
+PRIORITY = "optional"
+LICENSE = "BSD-X"
+DEPENDS += " freetype fontcacheproto zlib xproto xtrans fontsproto libfontenc"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI += "file://no-scalable-crash.patch"
+SRC_URI[archive.md5sum] = "83b8e21f6ee22512a8f72ba51e2d74f6"
+SRC_URI[archive.sha256sum] = "374a2ca12f62a4d9f09a17a34765a5289cefa9db7f9f0913e1c3731b4088aad8"
+
+BBCLASSEXTEND = "native"
+
+XORG_PN = "libXfont"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxfont_1.3.0.bb b/recipes/obsolete/xorg/xorg-lib/libxfont_1.3.0.bb
new file mode 100644
index 0000000000..c3c9377867
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxfont_1.3.0.bb
@@ -0,0 +1,15 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 font rasterisation library"
+LICENSE = "BSD-X"
+DEPENDS += "freetype fontcacheproto xtrans fontsproto libfontenc"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI += "file://no-scalable-crash.patch \
+ file://builtinreaddirectory-no-side-effect.patch"
+SRC_URI[archive.md5sum] = "d1d3fa170d74b066f1f23ca8574e7c90"
+SRC_URI[archive.sha256sum] = "07567b9880f28d1a404389c024a185419bfe81136aef3d9eda52407f34c3d3dd"
+
+BBCLASSEXTEND = "native"
+
+XORG_PN = "libXfont"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxfont_1.3.1.bb b/recipes/obsolete/xorg/xorg-lib/libxfont_1.3.1.bb
new file mode 100644
index 0000000000..671fd58b92
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxfont_1.3.1.bb
@@ -0,0 +1,14 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 font rasterisation library"
+LICENSE = "BSD-X"
+DEPENDS += "freetype fontcacheproto xtrans fontsproto libfontenc"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI += "file://no-scalable-crash.patch"
+SRC_URI[archive.md5sum] = "b2f396b62633819bbdd9748383876e21"
+SRC_URI[archive.sha256sum] = "dcfb7dc980a16ad98ac984b98321148864ea8b4637d3dd3773e483a14158a9b1"
+
+BBCLASSEXTEND = "native"
+
+XORG_PN = "libXfont"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxfont_1.3.2.bb b/recipes/obsolete/xorg/xorg-lib/libxfont_1.3.2.bb
new file mode 100644
index 0000000000..250433aa77
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxfont_1.3.2.bb
@@ -0,0 +1,14 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 font rasterisation library"
+LICENSE = "BSD-X"
+DEPENDS += "freetype fontcacheproto xtrans fontsproto libfontenc"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI += "file://no-scalable-crash.patch"
+SRC_URI[archive.md5sum] = "64f510ebf9679f3a97a3d633cbee4f50"
+SRC_URI[archive.sha256sum] = "c167cfd529b7c67f496ee0bed3c0b43e0107de0f689d387c1c0e23ef7cf3d2f2"
+
+BBCLASSEXTEND = "native"
+
+XORG_PN = "libXfont"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxfont_1.3.3.bb b/recipes/obsolete/xorg/xorg-lib/libxfont_1.3.3.bb
new file mode 100644
index 0000000000..65b5415068
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxfont_1.3.3.bb
@@ -0,0 +1,13 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 font rasterisation library"
+LICENSE = "BSD-X"
+DEPENDS += "freetype fontcacheproto xtrans fontsproto libfontenc"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "4f174b9613f87cf00d731da428a1b194"
+SRC_URI[archive.sha256sum] = "6171e6bca4bd6333611bd9c63cccc8e8e412d876c72097f0dddc490a9df51d5a"
+
+BBCLASSEXTEND = "native"
+
+XORG_PN = "libXfont"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxfontcache_1.0.4.bb b/recipes/obsolete/xorg/xorg-lib/libxfontcache_1.0.4.bb
new file mode 100644
index 0000000000..f4a079e8c8
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxfontcache_1.0.4.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X-TrueType font cache extension client library"
+DEPENDS += "libxext fontcacheproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "1adca018aa7bf2d215f20a69c10828ad"
+SRC_URI[archive.sha256sum] = "ffe747cfbf81cdd862af1b05d021ad1ab83b623eab5b32b0a618efb4c0f3e01c"
+
+XORG_PN = "libXfontcache"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxft_2.1.12.bb b/recipes/obsolete/xorg/xorg-lib/libxft_2.1.12.bb
new file mode 100644
index 0000000000..14beef3991
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxft_2.1.12.bb
@@ -0,0 +1,21 @@
+require xorg-lib-common.inc
+DESCRIPTION = "FreeType-based font drawing library for X"
+DEPENDS += "libxrender freetype fontconfig"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "1309301e2d979bd475dc58325cb8c056"
+SRC_URI[archive.sha256sum] = "68b46f85caaf0b30c876bd983abe144c25755bee7532e8738ab7ebe29a428986"
+
+FILES_${PN} = "${libdir}/lib*${SOLIBS}"
+FILES_${PN}-dev = "${includedir} ${libdir}/lib*${SOLIBSDEV} ${libdir}/*.la \
+ ${libdir}/*.a ${libdir}/pkgconfig \
+ ${datadir}/aclocal ${bindir} ${sbindir}"
+
+python do_package() {
+ if bb.data.getVar('DEBIAN_NAMES', d, 1):
+ bb.data.setVar('PKG_${PN}', 'libxft2', d)
+ bb.build.exec_func('package_do_package', d)
+}
+
+XORG_PN = "libXft"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxft_2.1.13.bb b/recipes/obsolete/xorg/xorg-lib/libxft_2.1.13.bb
new file mode 100644
index 0000000000..a2219c94a4
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxft_2.1.13.bb
@@ -0,0 +1,21 @@
+require xorg-lib-common.inc
+DESCRIPTION = "FreeType-based font drawing library for X"
+DEPENDS += "libxrender freetype fontconfig"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "bc8881851f3bd8dcc625fac37350a1c6"
+SRC_URI[archive.sha256sum] = "ce7688258af34c14af421bcfb306d4310245b727d2417ac968b7f6b2facfde8c"
+
+FILES_${PN} = "${libdir}/lib*${SOLIBS}"
+FILES_${PN}-dev = "${includedir} ${libdir}/lib*${SOLIBSDEV} ${libdir}/*.la \
+ ${libdir}/*.a ${libdir}/pkgconfig \
+ ${datadir}/aclocal ${bindir} ${sbindir}"
+
+python do_package() {
+ if bb.data.getVar('DEBIAN_NAMES', d, 1):
+ bb.data.setVar('PKG_${PN}', 'libxft2', d)
+ bb.build.exec_func('package_do_package', d)
+}
+
+XORG_PN = "libXft"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxi_1.0.2.bb b/recipes/obsolete/xorg/xorg-lib/libxi_1.0.2.bb
new file mode 100644
index 0000000000..12e49f036b
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxi_1.0.2.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X Input extension library."
+DEPENDS += " xproto virtual/libx11 xextproto libxext inputproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "4a5207a29a6b220e5462129854689844"
+SRC_URI[archive.sha256sum] = "7e6339539d3d0a4fc95cc23ca2b13ae67dd783e011b3cc5ca76040e376bff57f"
+
+XORG_PN = "libXi"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxi_1.1.0.bb b/recipes/obsolete/xorg/xorg-lib/libxi_1.1.0.bb
new file mode 100644
index 0000000000..3ad5dfc1ac
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxi_1.1.0.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X Input extension library."
+DEPENDS += " xproto virtual/libx11 xextproto libxext inputproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "c25abbe604029855eb11a3a75fb1f386"
+SRC_URI[archive.sha256sum] = "0f90d7e27d8a7d6bccf9350b6283ffe122e5347fa51d4ea9055653b297339989"
+
+XORG_PN = "libXi"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxi_1.1.2.bb b/recipes/obsolete/xorg/xorg-lib/libxi_1.1.2.bb
new file mode 100644
index 0000000000..bff8ba47fe
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxi_1.1.2.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Input extension library"
+DEPENDS += "libxext inputproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "9c4dd85f3e2a75bfb60bd288502bc288"
+SRC_URI[archive.sha256sum] = "4deda13613f03e4524d3cf0ac14b9e20be5044d415cb8478713ecbe47f4de862"
+
+XORG_PN = "libXi"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxi_1.1.3.bb b/recipes/obsolete/xorg/xorg-lib/libxi_1.1.3.bb
new file mode 100644
index 0000000000..039bfc8d8b
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxi_1.1.3.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Input extension library"
+DEPENDS += "libxext inputproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "7c510abb0cad8dc20493fb27ff7859d8"
+SRC_URI[archive.sha256sum] = "c77a5bbe97d0d0a6493adefcf1bd57aca91bc33279633b3f6cf1d2bb8812153f"
+
+XORG_PN = "libXi"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxi_1.2.0.bb b/recipes/obsolete/xorg/xorg-lib/libxi_1.2.0.bb
new file mode 100644
index 0000000000..e6b3da7868
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxi_1.2.0.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Input extension library"
+DEPENDS += "libxext inputproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "4b88e07d7dd77ca1e786f09066b58c02"
+SRC_URI[archive.sha256sum] = "7c0125ffb864e121ebfb5a20b1cfdff60562c2f2dfbb4e77c5eac81f36e15f3a"
+
+XORG_PN = "libXi"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxinerama_1.0.2.bb b/recipes/obsolete/xorg/xorg-lib/libxinerama_1.0.2.bb
new file mode 100644
index 0000000000..786c294f77
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxinerama_1.0.2.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Xinerama extension library"
+DEPENDS += "libxext xineramaproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "f6fb08eafd3c2909d515f1a07bfca8fd"
+SRC_URI[archive.sha256sum] = "d245d7ae4c766ecbc4e5cc2666e2e78198d8386dbaa06b35c3d1b1457ee5d03d"
+
+XORG_PN = "libXinerama"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxinerama_1.0.3.bb b/recipes/obsolete/xorg/xorg-lib/libxinerama_1.0.3.bb
new file mode 100644
index 0000000000..4e7cc916de
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxinerama_1.0.3.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Xinerama extension library"
+DEPENDS += "libxext xineramaproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "cd9f7c46439ac40e0517a302d2434d2c"
+SRC_URI[archive.sha256sum] = "07b3564cd56154c20580b56230b7a95d74fe6582c80cedf0550d8d7955181219"
+
+XORG_PN = "libXinerama"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxkbfile_1.0.4.bb b/recipes/obsolete/xorg/xorg-lib/libxkbfile_1.0.4.bb
new file mode 100644
index 0000000000..d02cec5892
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxkbfile_1.0.4.bb
@@ -0,0 +1,11 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 keyboard file manipulation library"
+LICENSE = "GPL"
+DEPENDS += "virtual/libx11 kbproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "12b4ceb5d42b520228b5fb40a96ae6c5"
+SRC_URI[archive.sha256sum] = "468ade4eaa3951a7c34b6ae1c290ab1a1d364ee36c5c455ef0df15550825b8ae"
+
+BBCLASSEXTEND = "native"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxkbfile_1.0.5.bb b/recipes/obsolete/xorg/xorg-lib/libxkbfile_1.0.5.bb
new file mode 100644
index 0000000000..60d3a1b86b
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxkbfile_1.0.5.bb
@@ -0,0 +1,11 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 keyboard file manipulation library"
+LICENSE = "GPL"
+DEPENDS += "virtual/libx11 kbproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "0726a845fe5a56551de2718c9f6b0e35"
+SRC_URI[archive.sha256sum] = "0ab628271fc9cb6d05f861d9823573088d81d510aca95b87ac0504b2e558965f"
+
+BBCLASSEXTEND = "native"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxmu_1.0.3.bb b/recipes/obsolete/xorg/xorg-lib/libxmu_1.0.3.bb
new file mode 100644
index 0000000000..b5bc535bf4
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxmu_1.0.3.bb
@@ -0,0 +1,17 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 miscellaneous utility library"
+DEPENDS += "libxt libxext"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "b926b95b811ece3e19cd590db85ee615"
+SRC_URI[archive.sha256sum] = "b56e308e36da8d9cb48433ddb81fd04e26b4f1c695586ac8106ac48a35466d66"
+
+PACKAGES =+ "libxmuu libxmuu-dev"
+
+FILES_libxmuu = "${libdir}/libXmuu.so.*"
+FILES_libxmuu-dev = "${libdir}/libXmuu.so"
+
+LEAD_SONAME = "libXmu"
+
+XORG_PN = "libXmu"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxmu_1.0.4.bb b/recipes/obsolete/xorg/xorg-lib/libxmu_1.0.4.bb
new file mode 100644
index 0000000000..7ebe4c818c
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxmu_1.0.4.bb
@@ -0,0 +1,17 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 miscellaneous utility library"
+DEPENDS += "libxt libxext"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "fb372a5f3ab42b5ba16d7af4d833a0cb"
+SRC_URI[archive.sha256sum] = "f83c00d6ed8f4c08effa9dcc2d7f1ff6f5a753f2b9fe1babda16618c2afa18f0"
+
+PACKAGES =+ "libxmuu libxmuu-dev"
+
+FILES_libxmuu = "${libdir}/libXmuu.so.*"
+FILES_libxmuu-dev = "${libdir}/libXmuu.so"
+
+LEAD_SONAME = "libXmu"
+
+XORG_PN = "libXmu"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxpm_3.5.6.bb b/recipes/obsolete/xorg/xorg-lib/libxpm_3.5.6.bb
new file mode 100644
index 0000000000..977f0155c0
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxpm_3.5.6.bb
@@ -0,0 +1,16 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Pixmap library"
+LICENSE = "X-BSD"
+DEPENDS += "libxext libsm libxt"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "37b7d1826c6a02107269632a93b8791f"
+SRC_URI[archive.sha256sum] = "2d5c5242b8417db6aa758e5be387de33385d9960ff21c801af7d6a4730b4fd0d"
+
+PACKAGES =+ "sxpm cxpm"
+
+FILES_cxpm = "${bindir}/cxpm"
+FILES_sxpm = "${bindir}/sxpm"
+
+XORG_PN = "libXpm"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxpm_3.5.7.bb b/recipes/obsolete/xorg/xorg-lib/libxpm_3.5.7.bb
new file mode 100644
index 0000000000..b8ed813029
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxpm_3.5.7.bb
@@ -0,0 +1,16 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Pixmap library"
+LICENSE = "X-BSD"
+DEPENDS += "libxext libsm libxt"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "cd15ee542d9f515538b4462a6f79d977"
+SRC_URI[archive.sha256sum] = "64701ae67ce5b0797307b75d8255bec3a0d371d0c50715ea618f5a68bcc92baa"
+
+PACKAGES =+ "sxpm cxpm"
+
+FILES_cxpm = "${bindir}/cxpm"
+FILES_sxpm = "${bindir}/sxpm"
+
+XORG_PN = "libXpm"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxrandr_1.1.2.bb b/recipes/obsolete/xorg/xorg-lib/libxrandr_1.1.2.bb
new file mode 100644
index 0000000000..4fb614c1ac
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxrandr_1.1.2.bb
@@ -0,0 +1,13 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X Resize and Rotate extension library."
+LICENSE = "BSD-X"
+DEPENDS += " virtual/libx11 randrproto libxext xextproto libxrender renderproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "962946952a01650bb43206043a3c0e12"
+SRC_URI[archive.sha256sum] = "ba5adedc37da835a5c9e5a5d457dce13feead64fc364bc4719c41720ca0a3c50"
+
+BBCLASSEXTEND = "nativesdk"
+
+XORG_PN = "libXrandr"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxrandr_1.2.2.bb b/recipes/obsolete/xorg/xorg-lib/libxrandr_1.2.2.bb
new file mode 100644
index 0000000000..2038f8aab0
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxrandr_1.2.2.bb
@@ -0,0 +1,13 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Resize and Rotate extension library"
+LICENSE = "BSD-X"
+DEPENDS += "randrproto libxrender libxext"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "1b244b5d19f0ccab01d7083436cd3558"
+SRC_URI[archive.sha256sum] = "206f8dc850f12b1213fb73dbef09fafa1bb8fb8c3ddfe4d39721c1e2dec12a98"
+
+BBCLASSEXTEND = "nativesdk"
+
+XORG_PN = "libXrandr"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxrandr_1.2.3.bb b/recipes/obsolete/xorg/xorg-lib/libxrandr_1.2.3.bb
new file mode 100644
index 0000000000..22ab29de78
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxrandr_1.2.3.bb
@@ -0,0 +1,13 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Resize and Rotate extension library"
+LICENSE = "BSD-X"
+DEPENDS += "randrproto libxrender libxext"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "5cd67cc02a50c9644ba0a1846ea3b08e"
+SRC_URI[archive.sha256sum] = "f8edfe26b8c4c3677a3a949f81a8b09a5fad62972020bfd230401e11cc0ed267"
+
+BBCLASSEXTEND = "nativesdk"
+
+XORG_PN = "libXrandr"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxrender_0.9.2.bb b/recipes/obsolete/xorg/xorg-lib/libxrender_0.9.2.bb
new file mode 100644
index 0000000000..c67495ae41
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxrender_0.9.2.bb
@@ -0,0 +1,13 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Rendering Extension client library"
+LICENSE = "BSD-X"
+DEPENDS += "virtual/libx11 renderproto xproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "2f1b2c6e8dcbcb6d760e59f445abd92c"
+SRC_URI[archive.sha256sum] = "0f749183ab1a0ece14d33c3299b3f70893122349c0bfa9d7bd0e66ce19d1802a"
+
+BBCLASSEXTEND = "native nativesdk"
+
+XORG_PN = "libXrender"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxrender_0.9.3.bb b/recipes/obsolete/xorg/xorg-lib/libxrender_0.9.3.bb
new file mode 100644
index 0000000000..82b0143000
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxrender_0.9.3.bb
@@ -0,0 +1,13 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Rendering Extension client library"
+LICENSE = "BSD-X"
+DEPENDS += "virtual/libx11 renderproto xproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "307132fce2e551ad2c641bddf8480f16"
+SRC_URI[archive.sha256sum] = "9882ba2d74e9ca5cfd0c2231ac8eba14d8fc59d538c787fa639f8d77c996bbef"
+
+BBCLASSEXTEND = "native nativesdk"
+
+XORG_PN = "libXrender"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxrender_0.9.4.bb b/recipes/obsolete/xorg/xorg-lib/libxrender_0.9.4.bb
new file mode 100644
index 0000000000..4543a9ed80
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxrender_0.9.4.bb
@@ -0,0 +1,13 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Rendering Extension client library"
+LICENSE = "BSD-X"
+DEPENDS += "virtual/libx11 renderproto xproto libxdmcp"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "dc266e850c51368f964e0d67bf5fb5e6"
+SRC_URI[archive.sha256sum] = "5682d343dd4e7ef291a6577e956c331946ce5801d8fa076284a01b41de3017ec"
+
+BBCLASSEXTEND = "native nativesdk"
+
+XORG_PN = "libXrender"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxres_1.0.3.bb b/recipes/obsolete/xorg/xorg-lib/libxres_1.0.3.bb
new file mode 100644
index 0000000000..9a1aa01c78
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxres_1.0.3.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Resource extension library"
+DEPENDS += "libxext resourceproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "de66ffb657aba64c9d6dbdeabb757f3e"
+SRC_URI[archive.sha256sum] = "a6d5ba7573f5ec0f091095f01b51d1e671dd0f14acb5b8559cdf366e398a0230"
+
+XORG_PN = "libXres"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxscrnsaver_1.1.2.bb b/recipes/obsolete/xorg/xorg-lib/libxscrnsaver_1.1.2.bb
new file mode 100644
index 0000000000..db164d229a
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxscrnsaver_1.1.2.bb
@@ -0,0 +1,13 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X Screen Saver extension library"
+LICENSE = "GPL"
+DEPENDS += "libxext scrnsaverproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "ac2d697dd02f51e5c15f7104f4be5328"
+SRC_URI[archive.sha256sum] = "6c75debca746060e0c2408a6ca119613ae02d1054adebd4b26ff8beee79bcc67"
+
+RREPLACES_${PN} = "libxss"
+
+XORG_PN = "libXScrnSaver"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxscrnsaver_1.1.3.bb b/recipes/obsolete/xorg/xorg-lib/libxscrnsaver_1.1.3.bb
new file mode 100644
index 0000000000..2cc2c81ee2
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxscrnsaver_1.1.3.bb
@@ -0,0 +1,13 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X Screen Saver extension library"
+LICENSE = "GPL"
+DEPENDS += "libxext scrnsaverproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "93f84b6797f2f29cae1ce23b0355d00d"
+SRC_URI[archive.sha256sum] = "4b90245093c15a24aaaf2fc6e09f075137aad994f72043e098597997d9b2c988"
+
+RREPLACES_${PN} = "libxss"
+
+XORG_PN = "libXScrnSaver"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxt/pr10970-header-fix.patch b/recipes/obsolete/xorg/xorg-lib/libxt/pr10970-header-fix.patch
new file mode 100644
index 0000000000..2acafb8b34
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxt/pr10970-header-fix.patch
@@ -0,0 +1,512 @@
+diff --git a/include/X11/CallbackI.h b/include/X11/CallbackI.h
+index 4ae08ab..64e8152 100644
+--- a/include/X11/CallbackI.h
++++ b/include/X11/CallbackI.h
+@@ -58,6 +58,8 @@ typedef XrmResource **CallbackTable;
+ #define _XtCBCalling 1
+ #define _XtCBFreeAfterCalling 2
+
++_XFUNCPROTOBEGIN
++
+ typedef struct internalCallbackRec {
+ unsigned short count;
+ char is_padded; /* contains NULL padding for external form */
+@@ -115,3 +117,5 @@ extern void _XtCallConditionalCallbackList(
+ XtPointer /* call_data */,
+ _XtConditionProc /* cond_proc */
+ );
++
++_XFUNCPROTOEND
+diff --git a/include/X11/CompositeP.h b/include/X11/CompositeP.h
+index ed055b2..e93275a 100644
+--- a/include/X11/CompositeP.h
++++ b/include/X11/CompositeP.h
+@@ -52,6 +52,8 @@ SOFTWARE.
+
+ #include <X11/Composite.h>
+
++_XFUNCPROTOBEGIN
++
+ /************************************************************************
+ *
+ * Additional instance fields for widgets of (sub)class 'Composite'
+@@ -101,6 +103,8 @@ typedef struct _CompositeClassRec {
+
+ externalref CompositeClassRec compositeClassRec;
+
++_XFUNCPROTOEND
++
+ #define XtCompositeExtensionVersion 2L
+ #define XtInheritGeometryManager ((XtGeometryHandler) _XtInherit)
+ #define XtInheritChangeManaged ((XtWidgetProc) _XtInherit)
+diff --git a/include/X11/ConstrainP.h b/include/X11/ConstrainP.h
+index a90d19a..7030a34 100644
+--- a/include/X11/ConstrainP.h
++++ b/include/X11/ConstrainP.h
+@@ -52,6 +52,8 @@ SOFTWARE.
+
+ #include <X11/Constraint.h>
+
++_XFUNCPROTOBEGIN
++
+ typedef struct _ConstraintPart {
+ XtPointer mumble; /* No new fields, keep C compiler happy */
+ } ConstraintPart;
+@@ -88,6 +90,8 @@ typedef struct _ConstraintClassRec {
+
+ externalref ConstraintClassRec constraintClassRec;
+
++_XFUNCPROTOEND
++
+ #define XtConstraintExtensionVersion 1L
+
+ #endif /* _XtConstraintP_h */
+diff --git a/include/X11/Constraint.h b/include/X11/Constraint.h
+index 9bb962e..b8bd902 100644
+--- a/include/X11/Constraint.h
++++ b/include/X11/Constraint.h
+@@ -50,11 +50,15 @@ SOFTWARE.
+ #ifndef _XtConstraint_h
+ #define _XtConstraint_h
+
++_XFUNCPROTOBEGIN
++
+ typedef struct _ConstraintClassRec *ConstraintWidgetClass;
+
+ #ifndef CONSTRAINT
+ externalref WidgetClass constraintWidgetClass;
+ #endif
+
++_XFUNCPROTOEND
++
+ #endif /* _XtConstraint_h */
+ /* DON'T ADD STUFF AFTER THIS #endif */
+diff --git a/include/X11/ConvertI.h b/include/X11/ConvertI.h
+index 02c0e5c..f3f7fb0 100644
+--- a/include/X11/ConvertI.h
++++ b/include/X11/ConvertI.h
+@@ -48,6 +48,8 @@ SOFTWARE.
+ ******************************************************************/
+ /* $XFree86: xc/lib/Xt/ConvertI.h,v 1.3 2001/12/14 19:56:09 dawes Exp $ */
+
++_XFUNCPROTOBEGIN
++
+ /* Representation types */
+
+ extern XrmQuark _XtQString;
+@@ -94,3 +96,4 @@ extern Boolean _XtConvert(
+
+ void _XtConvertInitialize(void);
+
++_XFUNCPROTOEND
+diff --git a/include/X11/Core.h b/include/X11/Core.h
+index ff6cb75..e1a7c28 100644
+--- a/include/X11/Core.h
++++ b/include/X11/Core.h
+@@ -53,6 +53,8 @@ SOFTWARE.
+ #ifndef _XtCore_h
+ #define _XtCore_h
+
++_XFUNCPROTOBEGIN
++
+ typedef struct _WidgetClassRec *CoreWidgetClass;
+ typedef struct _WidgetRec *CoreWidget;
+ externalref WidgetClass coreWidgetClass;
+@@ -62,5 +64,7 @@ externalref WidgetClass widgetClass;
+
+ #endif
+
++_XFUNCPROTOEND
++
+ #endif /* _XtCore_h */
+ /* DON'T ADD STUFF AFTER THIS #endif */
+diff --git a/include/X11/CoreP.h b/include/X11/CoreP.h
+index e07f085..57836e6 100644
+--- a/include/X11/CoreP.h
++++ b/include/X11/CoreP.h
+@@ -55,6 +55,8 @@ SOFTWARE.
+
+ #include <X11/Core.h>
+
++_XFUNCPROTOBEGIN
++
+ externalref int _XtInheritTranslations;
+
+ #define XtInheritTranslations ((String) &_XtInheritTranslations)
+@@ -167,5 +169,7 @@ typedef struct _WidgetClassRec {
+ externalref WidgetClassRec widgetClassRec;
+ #define coreClassRec widgetClassRec
+
++_XFUNCPROTOEND
++
+ #endif /* _XtCoreP_h */
+ /* DON'T ADD STUFF AFTER THIS #endif */
+diff --git a/include/X11/CreateI.h b/include/X11/CreateI.h
+index 87abb1d..e0ca9a3 100644
+--- a/include/X11/CreateI.h
++++ b/include/X11/CreateI.h
+@@ -3,6 +3,8 @@
+ #ifndef _XtcreateI_h
+ #define _XtcreateI_h
+
++_XFUNCPROTOBEGIN
++
+ extern Widget _XtCreateWidget(String name, WidgetClass widget_class,
+ Widget parent, ArgList args, Cardinal num_args,
+ XtTypedArgList typed_args,
+@@ -18,9 +20,12 @@ extern Widget _XtAppCreateShell(String name, String class,
+ Cardinal num_typed_args);
+ extern Widget _XtCreateHookObj(Screen *screen);
+
++_XFUNCPROTOEND
+
+ #include <stdarg.h>
+
++_XFUNCPROTOBEGIN
++
+ /* VarCreate.c */
+ extern Widget _XtVaOpenApplication(XtAppContext *app_context_return,
+ _Xconst char* application_class,
+@@ -34,4 +39,6 @@ extern Widget _XtVaAppInitialize(XtAppContext *app_context_return,
+ int *argc_in_out, String *argv_in_out,
+ String *fallback_resources, va_list var_args);
+
++_XFUNCPROTOEND
++
+ #endif /* _XtcreateI_h */
+diff --git a/include/X11/EventI.h b/include/X11/EventI.h
+index 00858e7..d2d1d0f 100644
+--- a/include/X11/EventI.h
++++ b/include/X11/EventI.h
+@@ -65,6 +65,8 @@ typedef struct _XtGrabRec *XtGrabList;
+
+ #include "PassivGraI.h"
+
++_XFUNCPROTOBEGIN
++
+ extern void _XtEventInitialize(
+ void
+ );
+@@ -131,4 +133,6 @@ extern void _XtFillAncestorList(Widget **listPtr, int *maxElemsPtr,
+ /* NextEvent.c */
+ extern Boolean XtAppPeekEvent_SkipTimer;
+
++_XFUNCPROTOEND
++
+ #endif /* _Event_h_ */
+diff --git a/include/X11/HookObjI.h b/include/X11/HookObjI.h
+index c9a22a2..c0858c2 100644
+--- a/include/X11/HookObjI.h
++++ b/include/X11/HookObjI.h
+@@ -29,6 +29,8 @@ in this Software without prior written authorization from The Open Group.
+ #ifndef _XtHookObjI_h
+ #define _XtHookObjI_h
+
++_XFUNCPROTOBEGIN
++
+ /* This object is implementation-dependent and private to the library. */
+
+ typedef struct _HookObjRec *HookObject;
+@@ -66,6 +68,8 @@ typedef struct _HookObjClassRec {
+
+ externalref HookObjClassRec hookObjClassRec;
+
++_XFUNCPROTOEND
++
+ #endif /* ifndef _Xt_HookObjI_h */
+
+
+diff --git a/include/X11/InitialI.h b/include/X11/InitialI.h
+index c2fe47c..2ae9b74 100644
+--- a/include/X11/InitialI.h
++++ b/include/X11/InitialI.h
+@@ -84,6 +84,8 @@ SOFTWARE.
+ #include <X11/Xos.h>
+ #include <X11/Xpoll.h>
+
++_XFUNCPROTOBEGIN
++
+ typedef struct _TimerEventRec {
+ struct timeval te_timer_value;
+ struct _TimerEventRec *te_next;
+@@ -426,4 +428,6 @@ extern XrmDatabase _XtPreparseCommandLine(XrmOptionDescRec *urlist,
+ String *applName, String *displayName,
+ String *language);
+
++_XFUNCPROTOEND
++
+ #endif /* _XtinitialI_h */
+diff --git a/include/X11/IntrinsicI.h b/include/X11/IntrinsicI.h
+index d749867..d88166f 100644
+--- a/include/X11/IntrinsicI.h
++++ b/include/X11/IntrinsicI.h
+@@ -194,6 +194,8 @@ SOFTWARE.
+ #define ERRORDB "/usr/lib/X11/XtErrorDB"
+ #endif
+
++_XFUNCPROTOBEGIN
++
+ extern String XtCXtToolkitError;
+
+ extern void _XtAllocError(
+@@ -257,5 +259,7 @@ extern char* __XtCalloc (
+ #define __XtCalloc XtCalloc
+ #endif
+
++_XFUNCPROTOEND
++
+ #endif /* _XtintrinsicI_h */
+ /* DON'T ADD STUFF AFTER THIS #endif */
+diff --git a/include/X11/Object.h b/include/X11/Object.h
+index 96723b1..2c84aaf 100644
+--- a/include/X11/Object.h
++++ b/include/X11/Object.h
+@@ -50,11 +50,16 @@ SOFTWARE.
+ #ifndef _XtObject_h
+ #define _XtObject_h
+
++_XFUNCPROTOBEGIN
++
+ typedef struct _ObjectRec *Object;
+ typedef struct _ObjectClassRec *ObjectClass;
+
+ #ifndef OBJECT
+ externalref WidgetClass objectClass;
+ #endif
++
++_XFUNCPROTOEND
++
+ #endif /* _XtObject_h */
+ /* DON'T ADD STUFF AFTER THIS #endif */
+diff --git a/include/X11/ObjectP.h b/include/X11/ObjectP.h
+index a24564e..0f484d2 100644
+--- a/include/X11/ObjectP.h
++++ b/include/X11/ObjectP.h
+@@ -52,6 +52,8 @@ SOFTWARE.
+
+ #include <X11/Object.h>
+
++_XFUNCPROTOBEGIN
++
+ /**********************************************************
+ * Object Instance Data Structures
+ *
+@@ -132,6 +134,8 @@ typedef struct _ObjectClassRec {
+
+ externalref ObjectClassRec objectClassRec;
+
++_XFUNCPROTOEND
++
+ #define XtObjectExtensionVersion 1L
+ #define XtInheritAllocate ((XtAllocateProc) _XtInherit)
+ #define XtInheritDeallocate ((XtDeallocateProc) _XtInherit)
+diff --git a/include/X11/PassivGraI.h b/include/X11/PassivGraI.h
+index 02e2964..10591ac 100644
+--- a/include/X11/PassivGraI.h
++++ b/include/X11/PassivGraI.h
+@@ -60,6 +60,8 @@ in this Software without prior written authorization from The Open Group.
+ #define KEYBOARD TRUE
+ #define POINTER FALSE
+
++_XFUNCPROTOBEGIN
++
+ typedef enum {
+ XtNoServerGrab,
+ XtPassiveServerGrab,
+@@ -183,4 +185,6 @@ extern void _XtClearAncestorCache(
+ Widget /* widget */
+ );
+
++_XFUNCPROTOEND
++
+ #endif /* _PDI_h_ */
+diff --git a/include/X11/RectObj.h b/include/X11/RectObj.h
+index 07615fa..dced5c3 100644
+--- a/include/X11/RectObj.h
++++ b/include/X11/RectObj.h
+@@ -50,11 +50,16 @@ SOFTWARE.
+ #ifndef _XtRect_h
+ #define _XtRect_h
+
++_XFUNCPROTOBEGIN
++
+ typedef struct _RectObjRec *RectObj;
+ typedef struct _RectObjClassRec *RectObjClass;
+
+ #ifndef RECTOBJ
+ externalref WidgetClass rectObjClass;
+ #endif
++
++_XFUNCPROTOEND
++
+ #endif /* _XtRect_h */
+ /* DON'T ADD STUFF AFTER THIS #endif */
+diff --git a/include/X11/RectObjP.h b/include/X11/RectObjP.h
+index ca3b8ad..d6ffb78 100644
+--- a/include/X11/RectObjP.h
++++ b/include/X11/RectObjP.h
+@@ -53,6 +53,8 @@ SOFTWARE.
+ #include <X11/RectObj.h>
+ #include <X11/ObjectP.h>
+
++_XFUNCPROTOBEGIN
++
+ /**********************************************************
+ * Rectangle Object Instance Data Structures
+ *
+@@ -126,4 +128,6 @@ typedef struct _RectObjClassRec {
+
+ externalref RectObjClassRec rectObjClassRec;
+
++_XFUNCPROTOEND
++
+ #endif /*_Xt_RectObjP_h_*/
+diff --git a/include/X11/ResourceI.h b/include/X11/ResourceI.h
+index d6ed1df..3db97f8 100644
+--- a/include/X11/ResourceI.h
++++ b/include/X11/ResourceI.h
+@@ -61,6 +61,8 @@ SOFTWARE.
+ #define StringToName(string) XrmStringToName(string)
+ #define StringToClass(string) XrmStringToClass(string)
+
++_XFUNCPROTOBEGIN
++
+ extern void _XtDependencies(
+ XtResourceList * /* class_resp */,
+ Cardinal * /* class_num_resp */,
+@@ -96,5 +98,6 @@ extern XrmResourceList* _XtCreateIndirectionTable(XtResourceList resources,
+ Cardinal num_resources);
+ extern void _XtResourceListInitialize(void);
+
++_XFUNCPROTOEND
+
+ #endif /* _XtresourceI_h */
+diff --git a/include/X11/ShellP.h b/include/X11/ShellP.h
+index 2b08c3f..7297d33 100644
+--- a/include/X11/ShellP.h
++++ b/include/X11/ShellP.h
+@@ -67,6 +67,8 @@ SOFTWARE.
+ * *****
+ */
+
++_XFUNCPROTOBEGIN
++
+ /***********************************************************************
+ *
+ * Shell Widget Private Data
+@@ -214,8 +216,12 @@ typedef struct {
+ WMShellPart wm;
+ } WMShellRec, *WMShellWidget;
+
++_XFUNCPROTOEND
++
+ #include <X11/VendorP.h>
+
++_XFUNCPROTOBEGIN
++
+ /***********************************************************************
+ *
+ * TransientShell Widget Private Data
+@@ -425,4 +431,6 @@ typedef struct {
+ SessionShellPart session;
+ } SessionShellRec, *SessionShellWidget;
+
++_XFUNCPROTOEND
++
+ #endif /* _XtShellPrivate_h */
+diff --git a/include/X11/ThreadsI.h b/include/X11/ThreadsI.h
+index 1492d77..28cbc98 100644
+--- a/include/X11/ThreadsI.h
++++ b/include/X11/ThreadsI.h
+@@ -81,6 +81,8 @@ typedef void (*ThreadAppRestoreLockProc)(
+ Boolean* /* pushed_thread */
+ );
+
++_XFUNCPROTOBEGIN
++
+ extern void (*_XtProcessLock)(
+ void
+ );
+@@ -93,6 +95,8 @@ extern void (*_XtInitAppLock)(
+ XtAppContext /* app */
+ );
+
++_XFUNCPROTOEND
++
+ #define INIT_APP_LOCK(app) if(_XtInitAppLock) (*_XtInitAppLock)(app)
+ #define FREE_APP_LOCK(app) if(app && app->free_lock)(*app->free_lock)(app)
+
+diff --git a/include/X11/TranslateI.h b/include/X11/TranslateI.h
+index 1224875..6cc3099 100644
+--- a/include/X11/TranslateI.h
++++ b/include/X11/TranslateI.h
+@@ -342,6 +342,8 @@ typedef struct _TMGlobalRec{
+ #endif /* TRACE_TM */
+ }TMGlobalRec;
+
++_XFUNCPROTOBEGIN
++
+ extern TMGlobalRec _XtGlobalTM;
+
+ #define TM_MOD_SEGMENT_SIZE 16
+@@ -604,3 +606,4 @@ extern void _XtUnmergeTranslations(
+ /* TMKey.c */
+ extern void _XtAllocTMContext(XtPerDisplay pd);
+
++_XFUNCPROTOEND
+diff --git a/include/X11/VarargsI.h b/include/X11/VarargsI.h
+index e15404a..76ce9bc 100644
+--- a/include/X11/VarargsI.h
++++ b/include/X11/VarargsI.h
+@@ -34,6 +34,8 @@ in this Software without prior written authorization from The Open Group.
+
+ /* private routines */
+
++_XFUNCPROTOBEGIN
++
+ extern void _XtCountVaList(
+ va_list /*var*/, int* /*total_count*/, int* /*typed_count*/
+ );
+@@ -62,4 +64,6 @@ extern void _XtGetSubresources(
+ Widget /*w*/, XtPointer /*base*/, const char* /*name*/, const char* /*class*/, XtResourceList /*resources*/, Cardinal /*num_resources*/, ArgList /*args*/, Cardinal /*num_args*/, XtTypedArgList /*typed_args*/, Cardinal /*num_typed_args*/
+ );
+
++_XFUNCPROTOEND
++
+ #endif /* _VarargsI_h_ */
+diff --git a/include/X11/Vendor.h b/include/X11/Vendor.h
+index 65e7c38..633d17a 100644
+--- a/include/X11/Vendor.h
++++ b/include/X11/Vendor.h
+@@ -65,7 +65,11 @@ SOFTWARE.
+
+ typedef struct _VendorShellClassRec *VendorShellWidgetClass;
+
++_XFUNCPROTOBEGIN
++
+ externalref WidgetClass vendorShellWidgetClass;
+
++_XFUNCPROTOEND
++
+ #endif /* _XtVendor_h */
+ /* DON'T ADD STUFF AFTER THIS #endif */
+diff --git a/include/X11/VendorP.h b/include/X11/VendorP.h
+index 08bf689..e60857d 100644
+--- a/include/X11/VendorP.h
++++ b/include/X11/VendorP.h
+@@ -72,6 +72,8 @@ SOFTWARE.
+
+ /* New fields for the VendorShell widget class record */
+
++_XFUNCPROTOBEGIN
++
+ typedef struct {
+ XtPointer extension; /* pointer to extension record */
+ } VendorShellClassPart;
+@@ -100,4 +102,6 @@ typedef struct {
+ VendorShellPart vendor;
+ } VendorShellRec, *VendorShellWidget;
+
++_XFUNCPROTOEND
++
+ #endif /* _XtVendorPrivate_h */
diff --git a/recipes/obsolete/xorg/xorg-lib/libxt_1.0.4.bb b/recipes/obsolete/xorg/xorg-lib/libxt_1.0.4.bb
new file mode 100644
index 0000000000..7dd98632ae
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxt_1.0.4.bb
@@ -0,0 +1,24 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X Toolkit Intrinsics"
+PRIORITY = "optional"
+DEPENDS += " libsm virtual/libx11 xproto kbproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI += "file://pr10970-header-fix.patch"
+SRC_URI[archive.md5sum] = "937735f342c046db239852fec0413f6c"
+SRC_URI[archive.sha256sum] = "ec7088b2ffe8f56c177525283601fb048decaf6f175d9ee5db01e12810a4d345"
+
+EXTRA_OECONF = "--enable-malloc0returnsnull --disable-install-makestrs --disable-xkb"
+
+do_compile() {
+ (
+ unset CC LD CXX CCLD
+ oe_runmake -C util 'XT_CFLAGS=' 'CC=${BUILD_CC}' 'LD=${BUILD_LD}' 'CXX=${BUILD_CXX}' 'CCLD=${BUILD_CCLD}' 'CFLAGS=-D_GNU_SOURCE ${BUILD_CFLAGS}' 'LDFLAGS=${BUILD_LDFLAGS}' 'CXXFLAGS=${BUILD_CXXFLAGS}' 'CPPFLAGS=${BUILD_CPPFLAGS}' makestrs
+ ) || exit 1
+ oe_runmake
+}
+
+BBCLASSEXTEND = "native"
+
+XORG_PN = "libXt"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxt_1.0.5.bb b/recipes/obsolete/xorg/xorg-lib/libxt_1.0.5.bb
new file mode 100644
index 0000000000..7bdf252071
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxt_1.0.5.bb
@@ -0,0 +1,23 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 toolkit intrinsics library"
+DEPENDS += "libsm virtual/libx11 kbproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI += "file://pr10970-header-fix.patch"
+SRC_URI[archive.md5sum] = "f3bdd67785ace8cd0b23249e9d8c9975"
+SRC_URI[archive.sha256sum] = "43c472ada59a04428a463225cd4cd42cb81bc43eb687cc1890f2f1c81a3e9cf4"
+
+EXTRA_OECONF += "--disable-install-makestrs --disable-xkb"
+
+do_compile() {
+ (
+ unset CC LD CXX CCLD
+ oe_runmake -C util 'XT_CFLAGS=' 'CC=${BUILD_CC}' 'LD=${BUILD_LD}' 'CXX=${BUILD_CXX}' 'CCLD=${BUILD_CCLD}' 'CFLAGS=-D_GNU_SOURCE -I${STAGING_INCDIR_NATIVE} ${BUILD_CFLAGS}' 'LDFLAGS=${BUILD_LDFLAGS}' 'CXXFLAGS=${BUILD_CXXFLAGS}' 'CPPFLAGS=${BUILD_CPPFLAGS}' makestrs
+ ) || exit 1
+ oe_runmake
+}
+
+BBCLASSEXTEND = "native"
+
+XORG_PN = "libXt"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxtst_1.0.2.bb b/recipes/obsolete/xorg/xorg-lib/libxtst_1.0.2.bb
new file mode 100644
index 0000000000..ff87f7ce65
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxtst_1.0.2.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X Test Extension: client side library"
+DEPENDS += "libxext recordproto inputproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "032d5c1d3914fc0224837328c88aef96"
+SRC_URI[archive.sha256sum] = "eef98ad3d35254384c3714cd63826fc2009f9b394f2b489718aba9be7be0a10b"
+
+XORG_PN = "libXtst"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxtst_1.0.3.bb b/recipes/obsolete/xorg/xorg-lib/libxtst_1.0.3.bb
new file mode 100644
index 0000000000..56dfae5f95
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxtst_1.0.3.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X Test Extension: client side library"
+DEPENDS += "libxext recordproto inputproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "090c1ad04e34982eada5cf3b1a0792fd"
+SRC_URI[archive.sha256sum] = "b4a8dd3d9ceb04cd7322c1f7e5d2320d6ccf85ba8c81d736fd6d6c83c658c905"
+
+XORG_PN = "libXtst"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxv_1.0.3.bb b/recipes/obsolete/xorg/xorg-lib/libxv_1.0.3.bb
new file mode 100644
index 0000000000..4f19126589
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxv_1.0.3.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Video extension library"
+LICENSE = "GPL"
+DEPENDS += "libxext videoproto"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "f1c4109fa804aeaf7188b66c5cdd9f57"
+SRC_URI[archive.sha256sum] = "f87ae65be39a3c26dc3c87159d9126daf2af1b8c5e7f2ffc38b9f72b9236261b"
+
+XORG_PN = "libXv"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxv_1.0.4.bb b/recipes/obsolete/xorg/xorg-lib/libxv_1.0.4.bb
new file mode 100644
index 0000000000..be5a50c495
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxv_1.0.4.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Video extension library"
+LICENSE = "GPL"
+DEPENDS += "libxext videoproto"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "723a0275227165383e967a1ca8899b52"
+SRC_URI[archive.sha256sum] = "4d3cc49b6f4da6d396196054eca23a91df1a41001c736dcfd22fec5a5c7428c8"
+
+XORG_PN = "libXv"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxvmc/drm.patch b/recipes/obsolete/xorg/xorg-lib/libxvmc/drm.patch
new file mode 100644
index 0000000000..d48cdb3d0b
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxvmc/drm.patch
@@ -0,0 +1,9 @@
+--- XvMC/hw/via/Makefile.am.old 2005-03-06 11:25:11.000000000 +0000
++++ XvMC/hw/via/Makefile.am 2005-03-06 11:25:22.000000000 +0000
+@@ -1,5 +1,5 @@
+ AM_CFLAGS = $(XVMC_CFLAGS)
+-libviaXvMC_la_LIBADD = $(XVMC_LIBS) -lxf86drm
++libviaXvMC_la_LIBADD = $(XVMC_LIBS) -ldrm
+
+ lib_LTLIBRARIES = libviaXvMC.la
+
diff --git a/recipes/obsolete/xorg/xorg-lib/libxvmc/true.patch b/recipes/obsolete/xorg/xorg-lib/libxvmc/true.patch
new file mode 100644
index 0000000000..7059295007
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxvmc/true.patch
@@ -0,0 +1,11 @@
+--- XvMC/hw/via/viaXvMC.c.old 2004-10-18 20:54:49.000000000 +0100
++++ XvMC/hw/via/viaXvMC.c 2004-10-18 20:55:03.000000000 +0100
+@@ -43,6 +43,8 @@
+ #include <xf86drm.h>
+ #include <pthread.h>
+ #include "vldXvMC.h"
++
++#define TRUE 1
+
+ #define SAREAPTR(ctx) ((ViaXvMCSAreaPriv *) \
+ (((CARD8 *)(ctx)->sAreaAddress) + \
diff --git a/recipes/obsolete/xorg/xorg-lib/libxvmc/via.patch b/recipes/obsolete/xorg/xorg-lib/libxvmc/via.patch
new file mode 100644
index 0000000000..21cdfbdd6b
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxvmc/via.patch
@@ -0,0 +1,23 @@
+--- XvMC/configure.ac.old 2004-09-18 13:16:31.000000000 +0100
++++ XvMC/configure.ac 2004-09-18 13:16:32.000000000 +0100
+@@ -14,4 +14,5 @@
+ AC_OUTPUT([Makefile
+ hw/Makefile
+ hw/i810/Makefile
++ hw/via/Makefile
+ xvmc.pc])
+--- /dev/null 2004-06-13 02:32:19.000000000 +0100
++++ XvMC/hw/via/Makefile.am 2004-09-18 13:16:01.000000000 +0100
+@@ -0,0 +1,7 @@
++AM_CFLAGS = $(XVMC_CFLAGS)
++libviaXvMC_la_LIBADD = $(XVMC_LIBS) -lxf86drm
++
++lib_LTLIBRARIES = libviaXvMC.la
++
++libviaXvMC_la_SOURCES = viaXvMC.c viaXvMC.h viaLowLevel.c viaLowLevel.h \
++ viaXvMCPriv.h
+--- XvMC/hw/Makefile.am.old 2004-10-17 22:34:27.000000000 +0100
++++ XvMC/hw/Makefile.am 2004-10-17 22:34:31.000000000 +0100
+@@ -1 +1 @@
+-SUBDIRS = i810
++SUBDIRS = i810 via
diff --git a/recipes/obsolete/xorg/xorg-lib/libxvmc_1.0.4.bb b/recipes/obsolete/xorg/xorg-lib/libxvmc_1.0.4.bb
new file mode 100644
index 0000000000..003c5bec1a
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxvmc_1.0.4.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X Video Motion Compensation extension library"
+DEPENDS += "libxext libxv videoproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "b54600573daf9d1a29b952e8d35b389e"
+SRC_URI[archive.sha256sum] = "1217825ba8d66198466ee8306d0d6d237d2dd80d0f0783c98701296791833abb"
+
+XORG_PN = "libXvMC"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxvmc_1.0.5.bb b/recipes/obsolete/xorg/xorg-lib/libxvmc_1.0.5.bb
new file mode 100644
index 0000000000..cdd965a3fa
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxvmc_1.0.5.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X Video Motion Compensation extension library"
+DEPENDS += "libxext libxv videoproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "16c3a11add14979beb7510e44623cac6"
+SRC_URI[archive.sha256sum] = "0644c768d28343af0efe0cb09fc9e0220b8ad755642bb498a3038cee328fde7f"
+
+XORG_PN = "libXvMC"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxxf86dga_1.0.1.bb b/recipes/obsolete/xorg/xorg-lib/libxxf86dga_1.0.1.bb
new file mode 100644
index 0000000000..6d51967057
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxxf86dga_1.0.1.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Direct Graphics Access extension library"
+DEPENDS += "libxext xf86dgaproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "5b0e752c71a23e9d1290cad44a7c7c75"
+SRC_URI[archive.sha256sum] = "8c68f429942b1258cff0fb27505645a463690374ecf318ae660ff4cde7a03db9"
+
+XORG_PN = "libXxf86dga"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxxf86dga_1.0.2.bb b/recipes/obsolete/xorg/xorg-lib/libxxf86dga_1.0.2.bb
new file mode 100644
index 0000000000..b3115379b3
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxxf86dga_1.0.2.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 Direct Graphics Access extension library"
+DEPENDS += "libxext xf86dgaproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "6f5f621804ee652b6cc6f2025c517c78"
+SRC_URI[archive.sha256sum] = "59175230a00a1fb359148f36eadb50fc6cb080849379ccb0e43c6cbb97309a25"
+
+XORG_PN = "libXxf86dga"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxxf86misc_1.0.1.bb b/recipes/obsolete/xorg/xorg-lib/libxxf86misc_1.0.1.bb
new file mode 100644
index 0000000000..91a7123af4
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxxf86misc_1.0.1.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 XFree86 miscellaneous extension library"
+DEPENDS += "libxext xf86miscproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "7cee0df63903cef7f7a3fb68cdd99eef"
+SRC_URI[archive.sha256sum] = "2122d67d49aaa06eeaeb3db173ea8a7048f3b52665e5135874bc5cadada91289"
+
+XORG_PN = "libXxf86misc"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxxf86vm_1.0.1.bb b/recipes/obsolete/xorg/xorg-lib/libxxf86vm_1.0.1.bb
new file mode 100644
index 0000000000..b13707ceb0
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxxf86vm_1.0.1.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 XFree86 video mode extension library"
+DEPENDS += "libxext xf86vidmodeproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "8de1ca6c55aaad7d8cae19b4f0b3da32"
+SRC_URI[archive.sha256sum] = "e08fc2c1611c422f751ed02810491b45bf7faa4207d762a11f11815263c9285a"
+
+XORG_PN = "libXxf86vm"
diff --git a/recipes/obsolete/xorg/xorg-lib/libxxf86vm_1.0.2.bb b/recipes/obsolete/xorg/xorg-lib/libxxf86vm_1.0.2.bb
new file mode 100644
index 0000000000..e6933624be
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/libxxf86vm_1.0.2.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+DESCRIPTION = "X11 XFree86 video mode extension library"
+DEPENDS += "libxext xf86vidmodeproto"
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "304d37bd0a10d9b58aa9b64469ad73e5"
+SRC_URI[archive.sha256sum] = "3cb3c3c6552a4fbc686ba6c2dbeb6e4ba2a27103279908831d56363de73951de"
+
+XORG_PN = "libXxf86vm"
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch b/recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
new file mode 100644
index 0000000000..25ce7ee3b8
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
@@ -0,0 +1,114 @@
+From c29c9fa826b7112156fd6150b5f1564227935c05 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 22 Oct 2009 05:27:33 +0300
+Subject: [PATCH 3/6] Generic C implementation of pixman_blt with overlapping support
+
+Uses memcpy/memmove functions to copy pixels, can handle the
+case when both source and destination areas are in the same
+image (this is useful for scrolling).
+
+It is assumed that copying direction is only important when
+using the same image for both source and destination (and
+src_stride == dst_stride). Copying direction is undefined
+for the images with different source and destination stride
+which happen to be in the overlapped areas (but this is an
+unrealistic case anyway).
+---
+ pixman/pixman-general.c | 21 ++++++++++++++++++---
+ pixman/pixman-private.h | 43 +++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 61 insertions(+), 3 deletions(-)
+
+diff --git a/pixman/pixman-general.c b/pixman/pixman-general.c
+index c96a3f9..d71a299 100644
+--- a/pixman/pixman-general.c
++++ b/pixman/pixman-general.c
+@@ -300,9 +300,24 @@ general_blt (pixman_implementation_t *imp,
+ int width,
+ int height)
+ {
+- /* We can't blit unless we have sse2 or mmx */
+-
+- return FALSE;
++ uint8_t *dst_bytes = (uint8_t *)dst_bits;
++ uint8_t *src_bytes = (uint8_t *)src_bits;
++ int bpp;
++
++ if (src_bpp != dst_bpp || src_bpp & 7)
++ return FALSE;
++
++ bpp = src_bpp >> 3;
++ width *= bpp;
++ src_stride *= 4;
++ dst_stride *= 4;
++ pixman_blt_helper (src_bytes + src_y * src_stride + src_x * bpp,
++ dst_bytes + dst_y * dst_stride + dst_x * bpp,
++ src_stride,
++ dst_stride,
++ width,
++ height);
++ return TRUE;
+ }
+
+ static pixman_bool_t
+diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
+index 5000f91..8c5d4fd 100644
+--- a/pixman/pixman-private.h
++++ b/pixman/pixman-private.h
+@@ -10,6 +10,7 @@
+
+ #include "pixman.h"
+ #include <time.h>
++#include <string.h>
+ #include <assert.h>
+
+ #include "pixman-compiler.h"
+@@ -794,4 +795,46 @@ void pixman_timer_register (pixman_timer_t *timer);
+
+ #endif /* PIXMAN_TIMERS */
+
++/* a helper function, can blit 8-bit images with src/dst overlapping support */
++static inline void
++pixman_blt_helper (uint8_t *src_bytes,
++ uint8_t *dst_bytes,
++ int src_stride,
++ int dst_stride,
++ int width,
++ int height)
++{
++ /*
++ * The second part of this check is not strictly needed, but it prevents
++ * unnecessary upside-down processing of areas which belong to different
++ * images. Upside-down processing can be slower with fixed-distance-ahead
++ * prefetch and perceived as having more tearing.
++ */
++ if (src_bytes < dst_bytes + width &&
++ src_bytes + src_stride * height > dst_bytes)
++ {
++ src_bytes += src_stride * height - src_stride;
++ dst_bytes += dst_stride * height - dst_stride;
++ dst_stride = -dst_stride;
++ src_stride = -src_stride;
++ /* Horizontal scrolling to the left needs memmove */
++ if (src_bytes + width > dst_bytes)
++ {
++ while (--height >= 0)
++ {
++ memmove (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++ return;
++ }
++ }
++ while (--height >= 0)
++ {
++ memcpy (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++}
++
+ #endif /* PIXMAN_PRIVATE_H */
+--
+1.6.2.4
+
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch b/recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
new file mode 100644
index 0000000000..74c7b45bc4
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
@@ -0,0 +1,91 @@
+From 7ca32542c957ff308a6ca7e3715e6552a65ae395 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 22 Oct 2009 05:45:47 +0300
+Subject: [PATCH 4/6] Support of overlapping src/dst for pixman_blt_mmx
+
+---
+ pixman/pixman-mmx.c | 55 +++++++++++++++++++++++++++++---------------------
+ 1 files changed, 32 insertions(+), 23 deletions(-)
+
+diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
+index 819e3a0..dcccadb 100644
+--- a/pixman/pixman-mmx.c
++++ b/pixman/pixman-mmx.c
+@@ -3002,34 +3002,43 @@ pixman_blt_mmx (uint32_t *src_bits,
+ {
+ uint8_t * src_bytes;
+ uint8_t * dst_bytes;
+- int byte_width;
++ int bpp;
+
+- if (src_bpp != dst_bpp)
++ if (src_bpp != dst_bpp || src_bpp & 7)
+ return FALSE;
+
+- if (src_bpp == 16)
+- {
+- src_stride = src_stride * (int) sizeof (uint32_t) / 2;
+- dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
+- src_bytes = (uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
+- dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+- byte_width = 2 * width;
+- src_stride *= 2;
+- dst_stride *= 2;
+- }
+- else if (src_bpp == 32)
++ bpp = src_bpp >> 3;
++ width *= bpp;
++ src_stride *= 4;
++ dst_stride *= 4;
++ src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++ dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++ if (src_bpp != 16 && src_bpp != 32)
+ {
+- src_stride = src_stride * (int) sizeof (uint32_t) / 4;
+- dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
+- src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
+- dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+- byte_width = 4 * width;
+- src_stride *= 4;
+- dst_stride *= 4;
++ pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++ width, height);
++ return TRUE;
+ }
+- else
++
++ if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
+ {
+- return FALSE;
++ src_bytes += src_stride * height - src_stride;
++ dst_bytes += dst_stride * height - dst_stride;
++ dst_stride = -dst_stride;
++ src_stride = -src_stride;
++
++ if (src_bytes + width > dst_bytes)
++ {
++ /* TODO: reverse scanline copy using MMX */
++ while (--height >= 0)
++ {
++ memmove (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++ return TRUE;
++ }
+ }
+
+ while (height--)
+@@ -3039,7 +3048,7 @@ pixman_blt_mmx (uint32_t *src_bits,
+ uint8_t *d = dst_bytes;
+ src_bytes += src_stride;
+ dst_bytes += dst_stride;
+- w = byte_width;
++ w = width;
+
+ while (w >= 2 && ((unsigned long)d & 3))
+ {
+--
+1.6.2.4
+
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch b/recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
new file mode 100644
index 0000000000..3704fbf1cf
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
@@ -0,0 +1,91 @@
+From edc80b41c6480b7c80ec5f7c835c92b2debb3774 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 22 Oct 2009 05:45:54 +0300
+Subject: [PATCH 5/6] Support of overlapping src/dst for pixman_blt_sse2
+
+---
+ pixman/pixman-sse2.c | 55 +++++++++++++++++++++++++++++--------------------
+ 1 files changed, 32 insertions(+), 23 deletions(-)
+
+diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c
+index 78b0ad1..b84636b 100644
+--- a/pixman/pixman-sse2.c
++++ b/pixman/pixman-sse2.c
+@@ -5300,34 +5300,43 @@ pixman_blt_sse2 (uint32_t *src_bits,
+ {
+ uint8_t * src_bytes;
+ uint8_t * dst_bytes;
+- int byte_width;
++ int bpp;
+
+- if (src_bpp != dst_bpp)
++ if (src_bpp != dst_bpp || src_bpp & 7)
+ return FALSE;
+
+- if (src_bpp == 16)
+- {
+- src_stride = src_stride * (int) sizeof (uint32_t) / 2;
+- dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
+- src_bytes =(uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
+- dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+- byte_width = 2 * width;
+- src_stride *= 2;
+- dst_stride *= 2;
+- }
+- else if (src_bpp == 32)
++ bpp = src_bpp >> 3;
++ width *= bpp;
++ src_stride *= 4;
++ dst_stride *= 4;
++ src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++ dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++ if (src_bpp != 16 && src_bpp != 32)
+ {
+- src_stride = src_stride * (int) sizeof (uint32_t) / 4;
+- dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
+- src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
+- dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+- byte_width = 4 * width;
+- src_stride *= 4;
+- dst_stride *= 4;
++ pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++ width, height);
++ return TRUE;
+ }
+- else
++
++ if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
+ {
+- return FALSE;
++ src_bytes += src_stride * height - src_stride;
++ dst_bytes += dst_stride * height - dst_stride;
++ dst_stride = -dst_stride;
++ src_stride = -src_stride;
++
++ if (src_bytes + width > dst_bytes)
++ {
++ /* TODO: reverse scanline copy using SSE2 */
++ while (--height >= 0)
++ {
++ memmove (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++ return TRUE;
++ }
+ }
+
+ cache_prefetch ((__m128i*)src_bytes);
+@@ -5340,7 +5349,7 @@ pixman_blt_sse2 (uint32_t *src_bits,
+ uint8_t *d = dst_bytes;
+ src_bytes += src_stride;
+ dst_bytes += dst_stride;
+- w = byte_width;
++ w = width;
+
+ cache_prefetch_next ((__m128i*)s);
+ cache_prefetch_next ((__m128i*)d);
+--
+1.6.2.4
+
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
new file mode 100644
index 0000000000..7c22483a2e
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
@@ -0,0 +1,94 @@
+From 86870ff530b5e435034bd80207e5758466d96cff Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Wed, 18 Nov 2009 06:08:48 +0200
+Subject: [PATCH 6/6] Support of overlapping src/dst for pixman_blt_neon
+
+---
+ pixman/pixman-arm-neon.c | 63 ++++++++++++++++++++++++++++++++++++++-------
+ 1 files changed, 53 insertions(+), 10 deletions(-)
+
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 495fda4..c632ff5 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -357,26 +357,66 @@
+ int width,
+ int height)
+ {
+- if (src_bpp != dst_bpp)
++ uint8_t * src_bytes;
++ uint8_t * dst_bytes;
++ int bpp;
++
++ if (src_bpp != dst_bpp || src_bpp & 7)
+ return FALSE;
+
++ bpp = src_bpp >> 3;
++ width *= bpp;
++ src_stride *= 4;
++ dst_stride *= 4;
++ src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++ dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++ if (src_bpp != 16 && src_bpp != 32)
++ {
++ pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++ width, height);
++ return TRUE;
++ }
++
++ if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
++ {
++ src_bytes += src_stride * height - src_stride;
++ dst_bytes += dst_stride * height - dst_stride;
++ dst_stride = -dst_stride;
++ src_stride = -src_stride;
++
++ if (src_bytes + width > dst_bytes)
++ {
++ /* TODO: reverse scanline copy using NEON */
++ while (--height >= 0)
++ {
++ memmove (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++ return TRUE;
++ }
++ }
++
+ switch (src_bpp)
+ {
+ case 16:
+ pixman_composite_src_0565_0565_asm_neon (
+- width, height,
+- (uint16_t *)(((char *) dst_bits) +
+- dst_y * dst_stride * 4 + dst_x * 2), dst_stride * 2,
+- (uint16_t *)(((char *) src_bits) +
+- src_y * src_stride * 4 + src_x * 2), src_stride * 2);
++ width >> 1,
++ height,
++ (uint16_t *) dst_bytes,
++ dst_stride >> 1,
++ (uint16_t *) src_bytes,
++ src_stride >> 1);
+ return TRUE;
+ case 32:
+ pixman_composite_src_8888_8888_asm_neon (
+- width, height,
+- (uint32_t *)(((char *) dst_bits) +
+- dst_y * dst_stride * 4 + dst_x * 4), dst_stride,
+- (uint32_t *)(((char *) src_bits) +
+- src_y * src_stride * 4 + src_x * 4), src_stride);
++ width >> 2,
++ height,
++ (uint32_t *) dst_bytes,
++ dst_stride >> 2,
++ (uint32_t *) src_bytes,
++ src_stride >> 2);
+ return TRUE;
+ default:
+ return FALSE;
+--
+1.6.2.4
+
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/1-composite.patch b/recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/1-composite.patch
new file mode 100644
index 0000000000..31bfa39cc4
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/1-composite.patch
@@ -0,0 +1,161 @@
+From 78652135f48c6a304fc2e75bc0e440b8b2034a4d Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Tue, 23 Feb 2010 23:44:00 +0000
+Subject: ARM: added 'neon_composite_over_n_8888_8888_ca' fast path
+
+This fast path function improves performance of 'firefox-talos-gfx'
+cairo-perf trace.
+
+Benchmark from ARM Cortex-A8 @720MHz
+
+before:
+
+[ # ] backend test min(s) median(s) stddev. count
+[ 0] image firefox-talos-gfx 139.969 141.176 0.35% 6/6
+
+after:
+
+[ # ] backend test min(s) median(s) stddev. count
+[ 0] image firefox-talos-gfx 111.810 112.196 0.23% 6/6
+---
+diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S
+index 2986884..e90d662 100644
+--- a/pixman/pixman-arm-neon-asm.S
++++ b/pixman/pixman-arm-neon-asm.S
+@@ -1026,6 +1026,111 @@ generate_composite_function \
+
+ /******************************************************************************/
+
++.macro pixman_composite_over_n_8888_8888_ca_process_pixblock_head
++ /*
++ * 'combine_mask_ca' replacement
++ *
++ * input: solid src (n) in {d8, d9, d10, d11}
++ * dest in {d4, d5, d6, d7 }
++ * mask in {d24, d25, d26, d27}
++ * output: updated src in {d0, d1, d2, d3 }
++ * updated mask in {d24, d25, d26, d3 }
++ */
++ vmull.u8 q0, d24, d8
++ vmull.u8 q1, d25, d9
++ vmull.u8 q6, d26, d10
++ vmull.u8 q7, d27, d11
++ vmull.u8 q9, d11, d25
++ vmull.u8 q12, d11, d24
++ vmull.u8 q13, d11, d26
++ vrshr.u16 q8, q0, #8
++ vrshr.u16 q10, q1, #8
++ vrshr.u16 q11, q6, #8
++ vraddhn.u16 d0, q0, q8
++ vraddhn.u16 d1, q1, q10
++ vraddhn.u16 d2, q6, q11
++ vrshr.u16 q11, q12, #8
++ vrshr.u16 q8, q9, #8
++ vrshr.u16 q6, q13, #8
++ vrshr.u16 q10, q7, #8
++ vraddhn.u16 d24, q12, q11
++ vraddhn.u16 d25, q9, q8
++ vraddhn.u16 d26, q13, q6
++ vraddhn.u16 d3, q7, q10
++ /*
++ * 'combine_over_ca' replacement
++ *
++ * output: updated dest in {d28, d29, d30, d31}
++ */
++ vmvn.8 d24, d24
++ vmvn.8 d25, d25
++ vmull.u8 q8, d24, d4
++ vmull.u8 q9, d25, d5
++ vmvn.8 d26, d26
++ vmvn.8 d27, d3
++ vmull.u8 q10, d26, d6
++ vmull.u8 q11, d27, d7
++.endm
++
++.macro pixman_composite_over_n_8888_8888_ca_process_pixblock_tail
++ /* ... continue 'combine_over_ca' replacement */
++ vrshr.u16 q14, q8, #8
++ vrshr.u16 q15, q9, #8
++ vrshr.u16 q6, q10, #8
++ vrshr.u16 q7, q11, #8
++ vraddhn.u16 d28, q14, q8
++ vraddhn.u16 d29, q15, q9
++ vraddhn.u16 d30, q6, q10
++ vraddhn.u16 d31, q7, q11
++ vqadd.u8 q14, q0, q14
++ vqadd.u8 q15, q1, q15
++.endm
++
++.macro pixman_composite_over_n_8888_8888_ca_process_pixblock_tail_head
++ vrshr.u16 q14, q8, #8
++ vrshr.u16 q15, q9, #8
++ vld4.8 {d4, d5, d6, d7}, [DST_R, :128]!
++ vrshr.u16 q6, q10, #8
++ vrshr.u16 q7, q11, #8
++ vraddhn.u16 d28, q14, q8
++ vraddhn.u16 d29, q15, q9
++ vraddhn.u16 d30, q6, q10
++ vraddhn.u16 d31, q7, q11
++ vld4.8 {d24, d25, d26, d27}, [MASK]!
++ vqadd.u8 q14, q0, q14
++ vqadd.u8 q15, q1, q15
++ cache_preload 8, 8
++ pixman_composite_over_n_8888_8888_ca_process_pixblock_head
++ vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
++.endm
++
++.macro pixman_composite_over_n_8888_8888_ca_init
++ add DUMMY, sp, #ARGS_STACK_OFFSET
++ vpush {d8-d15}
++ vld1.32 {d11[0]}, [DUMMY]
++ vdup.8 d8, d11[0]
++ vdup.8 d9, d11[1]
++ vdup.8 d10, d11[2]
++ vdup.8 d11, d11[3]
++.endm
++
++.macro pixman_composite_over_n_8888_8888_ca_cleanup
++ vpop {d8-d15}
++.endm
++
++generate_composite_function \
++ pixman_composite_over_n_8888_8888_ca_asm_neon, 0, 32, 32, \
++ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
++ 8, /* number of pixels, processed in a single block */ \
++ 5, /* prefetch distance */ \
++ pixman_composite_over_n_8888_8888_ca_init, \
++ pixman_composite_over_n_8888_8888_ca_cleanup, \
++ pixman_composite_over_n_8888_8888_ca_process_pixblock_head, \
++ pixman_composite_over_n_8888_8888_ca_process_pixblock_tail, \
++ pixman_composite_over_n_8888_8888_ca_process_pixblock_tail_head
++
++/******************************************************************************/
++
+ .macro pixman_composite_add_n_8_8_process_pixblock_head
+ /* expecting source data in {d8, d9, d10, d11} */
+ /* d8 - blue, d9 - green, d10 - red, d11 - alpha */
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 557301e..3f0e18e 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -269,6 +269,7 @@ BIND_SRC_NULL_DST(over_8888_8888, uint32_t, 1, uint32_t, 1)
+
+ BIND_N_MASK_DST(over_n_8_0565, uint8_t, 1, uint16_t, 1)
+ BIND_N_MASK_DST(over_n_8_8888, uint8_t, 1, uint32_t, 1)
++BIND_N_MASK_DST(over_n_8888_8888_ca, uint32_t, 1, uint32_t, 1)
+ BIND_N_MASK_DST(add_n_8_8, uint8_t, 1, uint8_t, 1)
+
+ BIND_SRC_N_DST(over_8888_n_8888, uint32_t, 1, uint32_t, 1)
+@@ -412,6 +413,10 @@ static const pixman_fast_path_t arm_neon_fast_paths[] =
+ PIXMAN_STD_FAST_PATH (OVER, solid, null, r5g6b5, neon_composite_over_n_0565),
+ PIXMAN_STD_FAST_PATH (OVER, solid, null, a8r8g8b8, neon_composite_over_n_8888),
+ PIXMAN_STD_FAST_PATH (OVER, solid, null, x8r8g8b8, neon_composite_over_n_8888),
++ PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, a8r8g8b8, neon_composite_over_n_8888_8888_ca),
++ PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8r8g8b8, x8r8g8b8, neon_composite_over_n_8888_8888_ca),
++ PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, a8b8g8r8, neon_composite_over_n_8888_8888_ca),
++ PIXMAN_STD_FAST_PATH_CA (OVER, solid, a8b8g8r8, x8b8g8r8, neon_composite_over_n_8888_8888_ca),
+ PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid, a8r8g8b8, neon_composite_over_8888_n_8888),
+ PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, solid, x8r8g8b8, neon_composite_over_8888_n_8888),
+ PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, a8, a8r8g8b8, neon_composite_over_8888_8_8888),
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/2-composite.patch b/recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/2-composite.patch
new file mode 100644
index 0000000000..84d4d9c961
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/2-composite.patch
@@ -0,0 +1,102 @@
+From 6e0df74dbfca26f92a18d968e1bf410bae134c8a Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Wed, 24 Feb 2010 00:26:57 +0000
+Subject: ARM: added 'neon_composite_src_x888_8888' fast path
+
+This fast path function improves performance of 'gnome-system-monitor'
+cairo-perf trace.
+
+Benchmark from ARM Cortex-A8 @720MHz
+
+before:
+
+[ # ] backend test min(s) median(s) stddev. count
+[ 0] image gnome-system-monitor 68.838 68.899 0.05% 5/6
+
+after:
+
+[ # ] backend test min(s) median(s) stddev. count
+[ 0] image gnome-system-monitor 53.336 53.384 0.09% 6/6
+---
+diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S
+index e90d662..f2643de 100644
+--- a/pixman/pixman-arm-neon-asm.S
++++ b/pixman/pixman-arm-neon-asm.S
+@@ -947,6 +947,44 @@ generate_composite_function \
+
+ /******************************************************************************/
+
++.macro pixman_composite_src_x888_8888_process_pixblock_head
++ vorr q0, q0, q2
++ vorr q1, q1, q2
++.endm
++
++.macro pixman_composite_src_x888_8888_process_pixblock_tail
++.endm
++
++.macro pixman_composite_src_x888_8888_process_pixblock_tail_head
++ vst1.32 {d0, d1, d2, d3}, [DST_W, :128]!
++ vld1.32 {d0, d1, d2, d3}, [SRC]!
++ vorr q0, q0, q2
++ vorr q1, q1, q2
++ cache_preload 8, 8
++.endm
++
++.macro pixman_composite_src_x888_8888_init
++ vmov.u8 q2, #0xFF
++ vshl.u32 q2, q2, #24
++.endm
++
++generate_composite_function \
++ pixman_composite_src_x888_8888_asm_neon, 32, 0, 32, \
++ FLAG_DST_WRITEONLY, \
++ 8, /* number of pixels, processed in a single block */ \
++ 10, /* prefetch distance */ \
++ pixman_composite_src_x888_8888_init, \
++ default_cleanup, \
++ pixman_composite_src_x888_8888_process_pixblock_head, \
++ pixman_composite_src_x888_8888_process_pixblock_tail, \
++ pixman_composite_src_x888_8888_process_pixblock_tail_head, \
++ 0, /* dst_w_basereg */ \
++ 0, /* dst_r_basereg */ \
++ 0, /* src_basereg */ \
++ 0 /* mask_basereg */
++
++/******************************************************************************/
++
+ .macro pixman_composite_over_n_8_8888_process_pixblock_head
+ /* expecting deinterleaved source data in {d8, d9, d10, d11} */
+ /* d8 - blue, d9 - green, d10 - red, d11 - alpha */
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 3f0e18e..0a7ac31 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -251,6 +251,7 @@ neon_composite_##name (pixman_implementation_t *imp, \
+
+
+ BIND_SRC_NULL_DST(src_8888_8888, uint32_t, 1, uint32_t, 1)
++BIND_SRC_NULL_DST(src_x888_8888, uint32_t, 1, uint32_t, 1)
+ BIND_SRC_NULL_DST(src_0565_0565, uint16_t, 1, uint16_t, 1)
+ BIND_SRC_NULL_DST(src_0888_0888, uint8_t, 3, uint8_t, 3)
+ BIND_SRC_NULL_DST(src_8888_0565, uint32_t, 1, uint16_t, 1)
+@@ -400,6 +401,10 @@ static const pixman_fast_path_t arm_neon_fast_paths[] =
+ PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, x8r8g8b8, neon_composite_src_8888_8888),
+ PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, x8b8g8r8, neon_composite_src_8888_8888),
+ PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, x8b8g8r8, neon_composite_src_8888_8888),
++ PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, null, a8r8g8b8, neon_composite_src_8888_8888),
++ PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, a8b8g8r8, neon_composite_src_8888_8888),
++ PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, a8r8g8b8, neon_composite_src_x888_8888),
++ PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, a8b8g8r8, neon_composite_src_x888_8888),
+ PIXMAN_STD_FAST_PATH (SRC, r8g8b8, null, r8g8b8, neon_composite_src_0888_0888),
+ PIXMAN_STD_FAST_PATH (SRC, b8g8r8, null, x8r8g8b8, neon_composite_src_0888_8888_rev),
+ PIXMAN_STD_FAST_PATH (SRC, b8g8r8, null, r5g6b5, neon_composite_src_0888_0565_rev),
+@@ -430,6 +435,7 @@ static const pixman_fast_path_t arm_neon_fast_paths[] =
+ PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, x8r8g8b8, neon_composite_over_8888_8888),
+ PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, a8b8g8r8, neon_composite_over_8888_8888),
+ PIXMAN_STD_FAST_PATH (OVER, a8b8g8r8, null, x8b8g8r8, neon_composite_over_8888_8888),
++ PIXMAN_STD_FAST_PATH (OVER, x8r8g8b8, null, a8r8g8b8, neon_composite_src_x888_8888),
+ PIXMAN_STD_FAST_PATH (ADD, solid, a8, a8, neon_composite_add_n_8_8),
+ PIXMAN_STD_FAST_PATH (ADD, a8, a8, a8, neon_composite_add_8_8_8),
+ PIXMAN_STD_FAST_PATH (ADD, a8r8g8b8, a8r8g8b8, a8r8g8b8, neon_composite_add_8888_8888_8888),
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/3-composite.patch b/recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/3-composite.patch
new file mode 100644
index 0000000000..06e40fe869
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.17.8/3-composite.patch
@@ -0,0 +1,108 @@
+From 19fc0c4c8d28796f0fbc2c8f47edc130851ae3a5 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Wed, 24 Feb 2010 02:14:45 +0000
+Subject: ARM: added 'neon_composite_over_reverse_n_8888' fast path
+
+This fast path function improves performance of 'poppler' cairo-perf trace.
+
+Benchmark from ARM Cortex-A8 @720MHz
+
+before:
+
+[ # ] backend test min(s) median(s) stddev. count
+[ 0] image poppler 38.986 39.158 0.23% 6/6
+
+after:
+
+[ # ] backend test min(s) median(s) stddev. count
+[ 0] image poppler 24.981 25.136 0.28% 6/6
+---
+diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S
+index f2643de..eb8cc4c 100644
+--- a/pixman/pixman-arm-neon-asm.S
++++ b/pixman/pixman-arm-neon-asm.S
+@@ -680,6 +680,61 @@ generate_composite_function \
+
+ /******************************************************************************/
+
++.macro pixman_composite_over_reverse_n_8888_process_pixblock_tail_head
++ vrshr.u16 q14, q8, #8
++ PF add PF_X, PF_X, #8
++ PF tst PF_CTL, #0xF
++ vrshr.u16 q15, q9, #8
++ vrshr.u16 q12, q10, #8
++ vrshr.u16 q13, q11, #8
++ PF addne PF_X, PF_X, #8
++ PF subne PF_CTL, PF_CTL, #1
++ vraddhn.u16 d28, q14, q8
++ vraddhn.u16 d29, q15, q9
++ PF cmp PF_X, ORIG_W
++ vraddhn.u16 d30, q12, q10
++ vraddhn.u16 d31, q13, q11
++ vqadd.u8 q14, q0, q14
++ vqadd.u8 q15, q1, q15
++ vld4.8 {d0, d1, d2, d3}, [DST_R, :128]!
++ vmvn.8 d22, d3
++ PF pld, [PF_DST, PF_X, lsl #dst_bpp_shift]
++ vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
++ PF subge PF_X, PF_X, ORIG_W
++ vmull.u8 q8, d22, d4
++ PF subges PF_CTL, PF_CTL, #0x10
++ vmull.u8 q9, d22, d5
++ vmull.u8 q10, d22, d6
++ PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
++ vmull.u8 q11, d22, d7
++.endm
++
++.macro pixman_composite_over_reverse_n_8888_init
++ add DUMMY, sp, #ARGS_STACK_OFFSET
++ vld1.32 {d7[0]}, [DUMMY]
++ vdup.8 d4, d7[0]
++ vdup.8 d5, d7[1]
++ vdup.8 d6, d7[2]
++ vdup.8 d7, d7[3]
++.endm
++
++generate_composite_function \
++ pixman_composite_over_reverse_n_8888_asm_neon, 0, 0, 32, \
++ FLAG_DST_READWRITE | FLAG_DEINTERLEAVE_32BPP, \
++ 8, /* number of pixels, processed in a single block */ \
++ 5, /* prefetch distance */ \
++ pixman_composite_over_reverse_n_8888_init, \
++ default_cleanup, \
++ pixman_composite_over_8888_8888_process_pixblock_head, \
++ pixman_composite_over_8888_8888_process_pixblock_tail, \
++ pixman_composite_over_reverse_n_8888_process_pixblock_tail_head, \
++ 28, /* dst_w_basereg */ \
++ 0, /* dst_r_basereg */ \
++ 4, /* src_basereg */ \
++ 24 /* mask_basereg */
++
++/******************************************************************************/
++
+ .macro pixman_composite_over_n_8_0565_process_pixblock_head
+ /* in */
+ vmull.u8 q0, d24, d8
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 0a7ac31..30c5056 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -264,6 +264,7 @@ BIND_SRC_NULL_DST(add_8888_8888, uint32_t, 1, uint32_t, 1)
+
+ BIND_N_NULL_DST(over_n_0565, uint16_t, 1)
+ BIND_N_NULL_DST(over_n_8888, uint32_t, 1)
++BIND_N_NULL_DST(over_reverse_n_8888, uint32_t, 1)
+
+ BIND_SRC_NULL_DST(over_8888_0565, uint32_t, 1, uint16_t, 1)
+ BIND_SRC_NULL_DST(over_8888_8888, uint32_t, 1, uint32_t, 1)
+@@ -442,6 +443,8 @@ static const pixman_fast_path_t arm_neon_fast_paths[] =
+ PIXMAN_STD_FAST_PATH (ADD, a8, null, a8, neon_composite_add_8000_8000),
+ PIXMAN_STD_FAST_PATH (ADD, a8r8g8b8, null, a8r8g8b8, neon_composite_add_8888_8888),
+ PIXMAN_STD_FAST_PATH (ADD, a8b8g8r8, null, a8b8g8r8, neon_composite_add_8888_8888),
++ PIXMAN_STD_FAST_PATH (OVER_REVERSE, solid, null, a8r8g8b8, neon_composite_over_reverse_n_8888),
++ PIXMAN_STD_FAST_PATH (OVER_REVERSE, solid, null, a8b8g8r8, neon_composite_over_reverse_n_8888),
+
+ { PIXMAN_OP_NONE },
+ };
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
new file mode 100644
index 0000000000..06b07a3b4d
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
@@ -0,0 +1,114 @@
+From 5234e3c2c161ed5fc92caa336ae78f89112c7d77 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Tue, 16 Mar 2010 16:55:28 +0100
+Subject: [PATCH 1/5] Generic C implementation of pixman_blt with overlapping support
+
+Uses memcpy/memmove functions to copy pixels, can handle the
+case when both source and destination areas are in the same
+image (this is useful for scrolling).
+
+It is assumed that copying direction is only important when
+using the same image for both source and destination (and
+src_stride == dst_stride). Copying direction is undefined
+for the images with different source and destination stride
+which happen to be in the overlapped areas (but this is an
+unrealistic case anyway).
+---
+ pixman/pixman-general.c | 21 ++++++++++++++++++---
+ pixman/pixman-private.h | 43 +++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 61 insertions(+), 3 deletions(-)
+
+diff --git a/pixman/pixman-general.c b/pixman/pixman-general.c
+index bddf79a..f525744 100644
+--- a/pixman/pixman-general.c
++++ b/pixman/pixman-general.c
+@@ -285,9 +285,24 @@ general_blt (pixman_implementation_t *imp,
+ int width,
+ int height)
+ {
+- /* We can't blit unless we have sse2 or mmx */
+-
+- return FALSE;
++ uint8_t *dst_bytes = (uint8_t *)dst_bits;
++ uint8_t *src_bytes = (uint8_t *)src_bits;
++ int bpp;
++
++ if (src_bpp != dst_bpp || src_bpp & 7)
++ return FALSE;
++
++ bpp = src_bpp >> 3;
++ width *= bpp;
++ src_stride *= 4;
++ dst_stride *= 4;
++ pixman_blt_helper (src_bytes + src_y * src_stride + src_x * bpp,
++ dst_bytes + dst_y * dst_stride + dst_x * bpp,
++ src_stride,
++ dst_stride,
++ width,
++ height);
++ return TRUE;
+ }
+
+ static pixman_bool_t
+diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
+index d5767af..eeb677d 100644
+--- a/pixman/pixman-private.h
++++ b/pixman/pixman-private.h
+@@ -10,6 +10,7 @@
+
+ #include "pixman.h"
+ #include <time.h>
++#include <string.h>
+ #include <assert.h>
+ #include <stdio.h>
+ #include <string.h>
+@@ -867,4 +868,46 @@ void pixman_timer_register (pixman_timer_t *timer);
+
+ #endif /* PIXMAN_TIMERS */
+
++/* a helper function, can blit 8-bit images with src/dst overlapping support */
++static inline void
++pixman_blt_helper (uint8_t *src_bytes,
++ uint8_t *dst_bytes,
++ int src_stride,
++ int dst_stride,
++ int width,
++ int height)
++{
++ /*
++ * The second part of this check is not strictly needed, but it prevents
++ * unnecessary upside-down processing of areas which belong to different
++ * images. Upside-down processing can be slower with fixed-distance-ahead
++ * prefetch and perceived as having more tearing.
++ */
++ if (src_bytes < dst_bytes + width &&
++ src_bytes + src_stride * height > dst_bytes)
++ {
++ src_bytes += src_stride * height - src_stride;
++ dst_bytes += dst_stride * height - dst_stride;
++ dst_stride = -dst_stride;
++ src_stride = -src_stride;
++ /* Horizontal scrolling to the left needs memmove */
++ if (src_bytes + width > dst_bytes)
++ {
++ while (--height >= 0)
++ {
++ memmove (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++ return;
++ }
++ }
++ while (--height >= 0)
++ {
++ memcpy (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++}
++
+ #endif /* PIXMAN_PRIVATE_H */
+--
+1.6.6.1
+
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
new file mode 100644
index 0000000000..bf6e58c9e4
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
@@ -0,0 +1,91 @@
+From f607cd0250d398077b0c51201258775e372cb3c3 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 22 Oct 2009 05:45:47 +0300
+Subject: [PATCH 2/5] Support of overlapping src/dst for pixman_blt_mmx
+
+---
+ pixman/pixman-mmx.c | 55 +++++++++++++++++++++++++++++---------------------
+ 1 files changed, 32 insertions(+), 23 deletions(-)
+
+diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
+index e084e7f..6212b31 100644
+--- a/pixman/pixman-mmx.c
++++ b/pixman/pixman-mmx.c
+@@ -2994,34 +2994,43 @@ pixman_blt_mmx (uint32_t *src_bits,
+ {
+ uint8_t * src_bytes;
+ uint8_t * dst_bytes;
+- int byte_width;
++ int bpp;
+
+- if (src_bpp != dst_bpp)
++ if (src_bpp != dst_bpp || src_bpp & 7)
+ return FALSE;
+
+- if (src_bpp == 16)
+- {
+- src_stride = src_stride * (int) sizeof (uint32_t) / 2;
+- dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
+- src_bytes = (uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
+- dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+- byte_width = 2 * width;
+- src_stride *= 2;
+- dst_stride *= 2;
+- }
+- else if (src_bpp == 32)
++ bpp = src_bpp >> 3;
++ width *= bpp;
++ src_stride *= 4;
++ dst_stride *= 4;
++ src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++ dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++ if (src_bpp != 16 && src_bpp != 32)
+ {
+- src_stride = src_stride * (int) sizeof (uint32_t) / 4;
+- dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
+- src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
+- dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+- byte_width = 4 * width;
+- src_stride *= 4;
+- dst_stride *= 4;
++ pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++ width, height);
++ return TRUE;
+ }
+- else
++
++ if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
+ {
+- return FALSE;
++ src_bytes += src_stride * height - src_stride;
++ dst_bytes += dst_stride * height - dst_stride;
++ dst_stride = -dst_stride;
++ src_stride = -src_stride;
++
++ if (src_bytes + width > dst_bytes)
++ {
++ /* TODO: reverse scanline copy using MMX */
++ while (--height >= 0)
++ {
++ memmove (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++ return TRUE;
++ }
+ }
+
+ while (height--)
+@@ -3031,7 +3040,7 @@ pixman_blt_mmx (uint32_t *src_bits,
+ uint8_t *d = dst_bytes;
+ src_bytes += src_stride;
+ dst_bytes += dst_stride;
+- w = byte_width;
++ w = width;
+
+ while (w >= 2 && ((unsigned long)d & 3))
+ {
+--
+1.6.6.1
+
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
new file mode 100644
index 0000000000..c1f3b2ead4
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
@@ -0,0 +1,91 @@
+From 45a9a537f94a7feab47bd82171c7d620f0d34e3f Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 22 Oct 2009 05:45:54 +0300
+Subject: [PATCH 3/5] Support of overlapping src/dst for pixman_blt_sse2
+
+---
+ pixman/pixman-sse2.c | 55 +++++++++++++++++++++++++++++--------------------
+ 1 files changed, 32 insertions(+), 23 deletions(-)
+
+diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c
+index 946e7ba..66053ae 100644
+--- a/pixman/pixman-sse2.c
++++ b/pixman/pixman-sse2.c
+@@ -5299,34 +5299,43 @@ pixman_blt_sse2 (uint32_t *src_bits,
+ {
+ uint8_t * src_bytes;
+ uint8_t * dst_bytes;
+- int byte_width;
++ int bpp;
+
+- if (src_bpp != dst_bpp)
++ if (src_bpp != dst_bpp || src_bpp & 7)
+ return FALSE;
+
+- if (src_bpp == 16)
+- {
+- src_stride = src_stride * (int) sizeof (uint32_t) / 2;
+- dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
+- src_bytes =(uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
+- dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+- byte_width = 2 * width;
+- src_stride *= 2;
+- dst_stride *= 2;
+- }
+- else if (src_bpp == 32)
++ bpp = src_bpp >> 3;
++ width *= bpp;
++ src_stride *= 4;
++ dst_stride *= 4;
++ src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++ dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++ if (src_bpp != 16 && src_bpp != 32)
+ {
+- src_stride = src_stride * (int) sizeof (uint32_t) / 4;
+- dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
+- src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
+- dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+- byte_width = 4 * width;
+- src_stride *= 4;
+- dst_stride *= 4;
++ pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++ width, height);
++ return TRUE;
+ }
+- else
++
++ if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
+ {
+- return FALSE;
++ src_bytes += src_stride * height - src_stride;
++ dst_bytes += dst_stride * height - dst_stride;
++ dst_stride = -dst_stride;
++ src_stride = -src_stride;
++
++ if (src_bytes + width > dst_bytes)
++ {
++ /* TODO: reverse scanline copy using SSE2 */
++ while (--height >= 0)
++ {
++ memmove (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++ return TRUE;
++ }
+ }
+
+ cache_prefetch ((__m128i*)src_bytes);
+@@ -5339,7 +5348,7 @@ pixman_blt_sse2 (uint32_t *src_bits,
+ uint8_t *d = dst_bytes;
+ src_bytes += src_stride;
+ dst_bytes += dst_stride;
+- w = byte_width;
++ w = width;
+
+ cache_prefetch_next ((__m128i*)s);
+ cache_prefetch_next ((__m128i*)d);
+--
+1.6.6.1
+
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
new file mode 100644
index 0000000000..c37673e52b
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
@@ -0,0 +1,94 @@
+From 4cf5bfc72a724fb653c48338b93e91dccea238af Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Wed, 18 Nov 2009 06:08:48 +0200
+Subject: [PATCH 4/5] Support of overlapping src/dst for pixman_blt_neon
+
+---
+ pixman/pixman-arm-neon.c | 62 +++++++++++++++++++++++++++++++++++++--------
+ 1 files changed, 51 insertions(+), 11 deletions(-)
+
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 6808b36..7feee1d 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -168,26 +168,66 @@ pixman_blt_neon (uint32_t *src_bits,
+ int width,
+ int height)
+ {
+- if (src_bpp != dst_bpp)
++ uint8_t * src_bytes;
++ uint8_t * dst_bytes;
++ int bpp;
++
++ if (src_bpp != dst_bpp || src_bpp & 7)
+ return FALSE;
+
++ bpp = src_bpp >> 3;
++ width *= bpp;
++ src_stride *= 4;
++ dst_stride *= 4;
++ src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++ dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++ if (src_bpp != 16 && src_bpp != 32)
++ {
++ pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++ width, height);
++ return TRUE;
++ }
++
++ if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
++ {
++ src_bytes += src_stride * height - src_stride;
++ dst_bytes += dst_stride * height - dst_stride;
++ dst_stride = -dst_stride;
++ src_stride = -src_stride;
++
++ if (src_bytes + width > dst_bytes)
++ {
++ /* TODO: reverse scanline copy using NEON */
++ while (--height >= 0)
++ {
++ memmove (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++ return TRUE;
++ }
++ }
++
+ switch (src_bpp)
+ {
+ case 16:
+ pixman_composite_src_0565_0565_asm_neon (
+- width, height,
+- (uint16_t *)(((char *) dst_bits) +
+- dst_y * dst_stride * 4 + dst_x * 2), dst_stride * 2,
+- (uint16_t *)(((char *) src_bits) +
+- src_y * src_stride * 4 + src_x * 2), src_stride * 2);
++ width >> 1,
++ height,
++ (uint16_t *) dst_bytes,
++ dst_stride >> 1,
++ (uint16_t *) src_bytes,
++ src_stride >> 1);
+ return TRUE;
+ case 32:
+ pixman_composite_src_8888_8888_asm_neon (
+- width, height,
+- (uint32_t *)(((char *) dst_bits) +
+- dst_y * dst_stride * 4 + dst_x * 4), dst_stride,
+- (uint32_t *)(((char *) src_bits) +
+- src_y * src_stride * 4 + src_x * 4), src_stride);
++ width >> 2,
++ height,
++ (uint32_t *) dst_bytes,
++ dst_stride >> 2,
++ (uint32_t *) src_bytes,
++ src_stride >> 2);
+ return TRUE;
+ default:
+ return FALSE;
+--
+1.6.6.1
+
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch
new file mode 100644
index 0000000000..d776574628
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch
@@ -0,0 +1,169 @@
+From d1410558827fce8aac354274a7150fa915881c50 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 10 Dec 2009 00:51:50 +0200
+Subject: [PATCH 5/5] ARM: added NEON optimizations for fetch/store r5g6b5 scanline
+
+---
+ pixman/pixman-access.c | 23 ++++++++++++++++++++++-
+ pixman/pixman-arm-neon-asm.S | 20 ++++++++++++++++++++
+ pixman/pixman-arm-neon.c | 41 +++++++++++++++++++++++++++++++++++++++++
+ pixman/pixman-private.h | 5 +++++
+ 4 files changed, 88 insertions(+), 1 deletions(-)
+
+diff --git a/pixman/pixman-access.c b/pixman/pixman-access.c
+index fa0a267..5bb3e09 100644
+--- a/pixman/pixman-access.c
++++ b/pixman/pixman-access.c
+@@ -2748,7 +2748,7 @@ typedef struct
+ store_scanline_ ## format, store_scanline_generic_64 \
+ }
+
+-static const format_info_t accessors[] =
++static format_info_t accessors[] =
+ {
+ /* 32 bpp formats */
+ FORMAT_INFO (a8r8g8b8),
+@@ -2891,6 +2891,27 @@ _pixman_bits_image_setup_raw_accessors (bits_image_t *image)
+ setup_accessors (image);
+ }
+
++void
++_pixman_bits_override_accessors (pixman_format_code_t format,
++ fetch_scanline_t fetch_func,
++ store_scanline_t store_func)
++{
++ format_info_t *info = accessors;
++
++ while (info->format != PIXMAN_null)
++ {
++ if (info->format == format)
++ {
++ if (fetch_func)
++ info->fetch_scanline_raw_32 = fetch_func;
++ if (store_func)
++ info->store_scanline_raw_32 = store_func;
++ return;
++ }
++ info++;
++ }
++}
++
+ #else
+
+ void
+diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S
+index 51bc347..f30869e 100644
+--- a/pixman/pixman-arm-neon-asm.S
++++ b/pixman/pixman-arm-neon-asm.S
+@@ -458,6 +458,16 @@ generate_composite_function \
+ pixman_composite_src_8888_0565_process_pixblock_tail, \
+ pixman_composite_src_8888_0565_process_pixblock_tail_head
+
++generate_composite_function_single_scanline \
++ pixman_store_scanline_r5g6b5_asm_neon, 32, 0, 16, \
++ FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \
++ 8, /* number of pixels, processed in a single block */ \
++ default_init, \
++ default_cleanup, \
++ pixman_composite_src_8888_0565_process_pixblock_head, \
++ pixman_composite_src_8888_0565_process_pixblock_tail, \
++ pixman_composite_src_8888_0565_process_pixblock_tail_head
++
+ /******************************************************************************/
+
+ .macro pixman_composite_src_0565_8888_process_pixblock_head
+@@ -493,6 +503,16 @@ generate_composite_function \
+ pixman_composite_src_0565_8888_process_pixblock_tail, \
+ pixman_composite_src_0565_8888_process_pixblock_tail_head
+
++generate_composite_function_single_scanline \
++ pixman_fetch_scanline_r5g6b5_asm_neon, 16, 0, 32, \
++ FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \
++ 8, /* number of pixels, processed in a single block */ \
++ default_init, \
++ default_cleanup, \
++ pixman_composite_src_0565_8888_process_pixblock_head, \
++ pixman_composite_src_0565_8888_process_pixblock_tail, \
++ pixman_composite_src_0565_8888_process_pixblock_tail_head
++
+ /******************************************************************************/
+
+ .macro pixman_composite_add_8000_8000_process_pixblock_head
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 7feee1d..fda7a09 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -375,6 +375,43 @@ neon_combine_##name##_u (pixman_implementation_t *imp, \
+ BIND_COMBINE_U (over)
+ BIND_COMBINE_U (add)
+
++void
++pixman_fetch_scanline_r5g6b5_asm_neon (int width,
++ uint32_t *buffer,
++ const uint16_t *pixel);
++void
++pixman_store_scanline_r5g6b5_asm_neon (int width,
++ uint16_t *pixel,
++ const uint32_t *values);
++
++static void
++neon_fetch_scanline_r5g6b5 (pixman_image_t *image,
++ int x,
++ int y,
++ int width,
++ uint32_t * buffer,
++ const uint32_t *mask,
++ uint32_t mask_bits)
++{
++ const uint32_t *bits = image->bits.bits + y * image->bits.rowstride;
++ const uint16_t *pixel = (const uint16_t *)bits + x;
++
++ pixman_fetch_scanline_r5g6b5_asm_neon (width, buffer, pixel);
++}
++
++static void
++neon_store_scanline_r5g6b5 (bits_image_t * image,
++ int x,
++ int y,
++ int width,
++ const uint32_t *values)
++{
++ uint32_t *bits = image->bits + image->rowstride * y;
++ uint16_t *pixel = ((uint16_t *) bits) + x;
++
++ pixman_store_scanline_r5g6b5_asm_neon (width, pixel, values);
++}
++
+ pixman_implementation_t *
+ _pixman_implementation_create_arm_neon (void)
+ {
+@@ -385,6 +422,10 @@ _pixman_implementation_create_arm_neon (void)
+ imp->combine_32[PIXMAN_OP_OVER] = neon_combine_over_u;
+ imp->combine_32[PIXMAN_OP_ADD] = neon_combine_add_u;
+
++ _pixman_bits_override_accessors (PIXMAN_r5g6b5,
++ neon_fetch_scanline_r5g6b5,
++ neon_store_scanline_r5g6b5);
++
+ imp->blt = arm_neon_blt;
+ imp->fill = arm_neon_fill;
+
+diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
+index eeb677d..ba2d401 100644
+--- a/pixman/pixman-private.h
++++ b/pixman/pixman-private.h
+@@ -220,6 +220,11 @@ void
+ _pixman_bits_image_setup_raw_accessors (bits_image_t *image);
+
+ void
++_pixman_bits_override_accessors (pixman_format_code_t format,
++ fetch_scanline_t fetch_func,
++ store_scanline_t store_func);
++
++void
+ _pixman_image_get_scanline_generic_64 (pixman_image_t *image,
+ int x,
+ int y,
+--
+1.6.6.1
+
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/565-scanline.patch b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/565-scanline.patch
new file mode 100644
index 0000000000..8461a46a12
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/565-scanline.patch
@@ -0,0 +1,257 @@
+From deef1daf5896062f47fa61b94e1e77c7c0041820 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Fri, 04 Dec 2009 16:49:19 +0000
+Subject: A copy-paste version of 16bpp bilinear scanline fetcher
+
+---
+diff --git a/pixman/pixman-bits-image.c b/pixman/pixman-bits-image.c
+index 3d78ff0..1656975 100644
+--- a/pixman/pixman-bits-image.c
++++ b/pixman/pixman-bits-image.c
+@@ -535,6 +535,212 @@ bits_image_fetch_bilinear_no_repeat_8888 (pixman_image_t * ima,
+ *buffer++ = 0;
+ }
+
++static void
++bits_image_fetch_bilinear_no_repeat_0565 (pixman_image_t * ima,
++ int offset,
++ int line,
++ int width,
++ uint32_t * buffer,
++ const uint32_t * mask,
++ uint32_t mask_bits)
++{
++ bits_image_t *bits = &ima->bits;
++ pixman_fixed_t x_top, x_bottom, x;
++ pixman_fixed_t ux_top, ux_bottom, ux;
++ pixman_vector_t v;
++ uint32_t top_mask, bottom_mask;
++ uint16_t *top_row;
++ uint16_t *bottom_row;
++ uint32_t *end;
++ uint16_t zero[2] = { 0, 0 };
++ int y, y1, y2;
++ int disty;
++ int mask_inc;
++ int w;
++
++ /* reference point is the center of the pixel */
++ v.vector[0] = pixman_int_to_fixed (offset) + pixman_fixed_1 / 2;
++ v.vector[1] = pixman_int_to_fixed (line) + pixman_fixed_1 / 2;
++ v.vector[2] = pixman_fixed_1;
++
++ if (!pixman_transform_point_3d (bits->common.transform, &v))
++ return;
++
++ ux = ux_top = ux_bottom = bits->common.transform->matrix[0][0];
++ x = x_top = x_bottom = v.vector[0] - pixman_fixed_1/2;
++
++ y = v.vector[1] - pixman_fixed_1/2;
++ disty = (y >> 8) & 0xff;
++
++ /* Load the pointers to the first and second lines from the source
++ * image that bilinear code must read.
++ *
++ * The main trick in this code is about the check if any line are
++ * outside of the image;
++ *
++ * When I realize that a line (any one) is outside, I change
++ * the pointer to a dummy area with zeros. Once I change this, I
++ * must be sure the pointer will not change, so I set the
++ * variables to each pointer increments inside the loop.
++ */
++ y1 = pixman_fixed_to_int (y);
++ y2 = y1 + 1;
++
++ if (y1 < 0 || y1 >= bits->height)
++ {
++ top_row = zero;
++ x_top = 0;
++ ux_top = 0;
++ }
++ else
++ {
++ top_row = bits->bits + y1 * bits->rowstride;
++ x_top = x;
++ ux_top = ux;
++ }
++
++ if (y2 < 0 || y2 >= bits->height)
++ {
++ bottom_row = zero;
++ x_bottom = 0;
++ ux_bottom = 0;
++ }
++ else
++ {
++ bottom_row = bits->bits + y2 * bits->rowstride;
++ x_bottom = x;
++ ux_bottom = ux;
++ }
++
++ /* Instead of checking whether the operation uses the mast in
++ * each loop iteration, verify this only once and prepare the
++ * variables to make the code smaller inside the loop.
++ */
++ if (!mask)
++ {
++ mask_inc = 0;
++ mask_bits = 1;
++ mask = &mask_bits;
++ }
++ else
++ {
++ /* If have a mask, prepare the variables to check it */
++ mask_inc = 1;
++ }
++
++ /* If both are zero, then the whole thing is zero */
++ if (top_row == zero && bottom_row == zero)
++ {
++ memset (buffer, 0, width * sizeof (uint32_t));
++ return;
++ }
++ else
++ {
++ if (top_row == zero)
++ {
++ top_mask = 0;
++ bottom_mask = 0xff000000;
++ }
++ else if (bottom_row == zero)
++ {
++ top_mask = 0xff000000;
++ bottom_mask = 0;
++ }
++ else
++ {
++ top_mask = 0xff000000;
++ bottom_mask = 0xff000000;
++ }
++ }
++
++ end = buffer + width;
++
++ /* Zero fill to the left of the image */
++ while (buffer < end && x < pixman_fixed_minus_1)
++ {
++ *buffer++ = 0;
++ x += ux;
++ x_top += ux_top;
++ x_bottom += ux_bottom;
++ mask += mask_inc;
++ }
++
++ /* Left edge
++ */
++ while (buffer < end && x < 0)
++ {
++ uint32_t tr, br;
++ int32_t distx;
++
++ tr = CONVERT_0565_TO_0888 (top_row[pixman_fixed_to_int (x_top) + 1]) | top_mask;
++ br = CONVERT_0565_TO_0888 (bottom_row[pixman_fixed_to_int (x_bottom) + 1]) | bottom_mask;
++
++ distx = (x >> 8) & 0xff;
++
++ *buffer++ = bilinear_interpolation (0, tr, 0, br, distx, disty);
++
++ x += ux;
++ x_top += ux_top;
++ x_bottom += ux_bottom;
++ mask += mask_inc;
++ }
++
++ /* Main part */
++ w = pixman_int_to_fixed (bits->width - 1);
++
++ while (buffer < end && x < w)
++ {
++ if (*mask)
++ {
++ uint32_t tl, tr, bl, br;
++ int32_t distx;
++
++ tl = CONVERT_0565_TO_0888 (top_row [pixman_fixed_to_int (x_top)]) | top_mask;
++ tr = CONVERT_0565_TO_0888 (top_row [pixman_fixed_to_int (x_top) + 1]) | top_mask;
++ bl = CONVERT_0565_TO_0888 (bottom_row [pixman_fixed_to_int (x_bottom)]) | bottom_mask;
++ br = CONVERT_0565_TO_0888 (bottom_row [pixman_fixed_to_int (x_bottom) + 1]) | bottom_mask;
++
++ distx = (x >> 8) & 0xff;
++
++ *buffer = bilinear_interpolation (tl, tr, bl, br, distx, disty);
++ }
++
++ buffer++;
++ x += ux;
++ x_top += ux_top;
++ x_bottom += ux_bottom;
++ mask += mask_inc;
++ }
++
++ /* Right Edge */
++ w = pixman_int_to_fixed (bits->width);
++ while (buffer < end && x < w)
++ {
++ if (*mask)
++ {
++ uint32_t tl, bl;
++ int32_t distx;
++
++ tl = CONVERT_0565_TO_0888 (top_row [pixman_fixed_to_int (x_top)]) | top_mask;
++ bl = CONVERT_0565_TO_0888 (bottom_row [pixman_fixed_to_int (x_bottom)]) | bottom_mask;
++
++ distx = (x >> 8) & 0xff;
++
++ *buffer = bilinear_interpolation (tl, 0, bl, 0, distx, disty);
++ }
++
++ buffer++;
++ x += ux;
++ x_top += ux_top;
++ x_bottom += ux_bottom;
++ mask += mask_inc;
++ }
++
++ /* Zero fill to the left of the image */
++ while (buffer < end)
++ *buffer++ = 0;
++}
++
+ static force_inline uint32_t
+ bits_image_fetch_pixel_convolution (bits_image_t *image,
+ pixman_fixed_t x,
+@@ -917,14 +1123,26 @@ bits_image_property_changed (pixman_image_t *image)
+ (bits->common.filter == PIXMAN_FILTER_BILINEAR ||
+ bits->common.filter == PIXMAN_FILTER_GOOD ||
+ bits->common.filter == PIXMAN_FILTER_BEST) &&
+- bits->common.repeat == PIXMAN_REPEAT_NONE &&
+- (bits->format == PIXMAN_a8r8g8b8 ||
+- bits->format == PIXMAN_x8r8g8b8))
++ bits->common.repeat == PIXMAN_REPEAT_NONE)
+ {
+ image->common.get_scanline_64 =
+ _pixman_image_get_scanline_generic_64;
+- image->common.get_scanline_32 =
+- bits_image_fetch_bilinear_no_repeat_8888;
++
++ if (bits->format == PIXMAN_a8r8g8b8 || bits->format == PIXMAN_x8r8g8b8)
++ {
++ image->common.get_scanline_32 =
++ bits_image_fetch_bilinear_no_repeat_8888;
++ }
++ else if (bits->format == PIXMAN_r5g6b5)
++ {
++ image->common.get_scanline_32 =
++ bits_image_fetch_bilinear_no_repeat_0565;
++ }
++ else
++ {
++ image->common.get_scanline_32 =
++ bits_image_fetch_transformed;
++ }
+ }
+ else
+ {
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/missing-cache-preload.diff b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/missing-cache-preload.diff
new file mode 100644
index 0000000000..475bb35495
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.18.0/missing-cache-preload.diff
@@ -0,0 +1,28 @@
+From 4f45c7688e6b767a5f7b7f5cced51b4797a3c288 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Fri, 21 May 2010 13:31:03 +0000
+Subject: ARM: added missing cache preload
+
+---
+diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S
+index 51bc347..a99555a 100644
+--- a/pixman/pixman-arm-neon-asm.S
++++ b/pixman/pixman-arm-neon-asm.S
+@@ -388,6 +388,7 @@ generate_composite_function \
+ vld1.16 {d4, d5}, [DST_R, :128]!
+ vst1.16 {d28, d29}, [DST_W, :128]!
+ pixman_composite_over_n_0565_process_pixblock_head
++ cache_preload 8, 8
+ .endm
+
+ .macro pixman_composite_over_n_0565_init
+@@ -660,6 +661,7 @@ generate_composite_function_single_scanline \
+ vld4.8 {d4, d5, d6, d7}, [DST_R, :128]!
+ vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
+ pixman_composite_over_8888_8888_process_pixblock_head
++ cache_preload 8, 8
+ .endm
+
+ .macro pixman_composite_over_n_8888_init
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman-0.9.5/dont-copy-unused-bits-to-alpha-channel.patch b/recipes/obsolete/xorg/xorg-lib/pixman-0.9.5/dont-copy-unused-bits-to-alpha-channel.patch
new file mode 100644
index 0000000000..05fe829a82
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman-0.9.5/dont-copy-unused-bits-to-alpha-channel.patch
@@ -0,0 +1,29 @@
+From: Carl Worth <cworth@cworth.org>
+
+Don't copy unused bits to an alpha channel
+
+This bug was identified by cairo's rgb24-ignore-alpha test which
+blends RGB24 over ARGB32 and notices that "alpha" values are
+making it from the source to the destination.
+
+Index: a/pixman/pixman-pict.c
+===================================================================
+--- a/pixman/pixman-pict.c b8b7b767b3ed1fc57ba177c38187e1eb3daf4de8
++++ b/pixman/pixman-pict.c c7d73fc532c2da313041906ac0f48dba1b10d3bc
+@@ -1778,7 +1778,6 @@ pixman_image_composite (pixman_op_t
+ break;
+ case PIXMAN_x8r8g8b8:
+ switch (pDst->bits.format) {
+- case PIXMAN_a8r8g8b8:
+ case PIXMAN_x8r8g8b8:
+ #ifdef USE_MMX
+ if (pixman_have_mmx())
+@@ -1790,7 +1789,6 @@ pixman_image_composite (pixman_op_t
+ }
+ case PIXMAN_x8b8g8r8:
+ switch (pDst->bits.format) {
+- case PIXMAN_a8b8g8r8:
+ case PIXMAN_x8b8g8r8:
+ #ifdef USE_MMX
+ if (pixman_have_mmx())
+
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch b/recipes/obsolete/xorg/xorg-lib/pixman/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
new file mode 100644
index 0000000000..a2cda2438e
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman/0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch
@@ -0,0 +1,114 @@
+From 8ea1a333de202018a862a7b04b94479d3109274b Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Tue, 16 Mar 2010 16:55:28 +0100
+Subject: [PATCH 1/5] Generic C implementation of pixman_blt with overlapping support
+
+Uses memcpy/memmove functions to copy pixels, can handle the
+case when both source and destination areas are in the same
+image (this is useful for scrolling).
+
+It is assumed that copying direction is only important when
+using the same image for both source and destination (and
+src_stride == dst_stride). Copying direction is undefined
+for the images with different source and destination stride
+which happen to be in the overlapped areas (but this is an
+unrealistic case anyway).
+---
+ pixman/pixman-general.c | 21 ++++++++++++++++++---
+ pixman/pixman-private.h | 43 +++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 61 insertions(+), 3 deletions(-)
+
+diff --git a/pixman/pixman-general.c b/pixman/pixman-general.c
+index bddf79a..f525744 100644
+--- a/pixman/pixman-general.c
++++ b/pixman/pixman-general.c
+@@ -285,9 +285,24 @@ general_blt (pixman_implementation_t *imp,
+ int width,
+ int height)
+ {
+- /* We can't blit unless we have sse2 or mmx */
+-
+- return FALSE;
++ uint8_t *dst_bytes = (uint8_t *)dst_bits;
++ uint8_t *src_bytes = (uint8_t *)src_bits;
++ int bpp;
++
++ if (src_bpp != dst_bpp || src_bpp & 7)
++ return FALSE;
++
++ bpp = src_bpp >> 3;
++ width *= bpp;
++ src_stride *= 4;
++ dst_stride *= 4;
++ pixman_blt_helper (src_bytes + src_y * src_stride + src_x * bpp,
++ dst_bytes + dst_y * dst_stride + dst_x * bpp,
++ src_stride,
++ dst_stride,
++ width,
++ height);
++ return TRUE;
+ }
+
+ static pixman_bool_t
+diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
+index d5767af..eeb677d 100644
+--- a/pixman/pixman-private.h
++++ b/pixman/pixman-private.h
+@@ -10,6 +10,7 @@
+
+ #include "pixman.h"
+ #include <time.h>
++#include <string.h>
+ #include <assert.h>
+ #include <stdio.h>
+ #include <string.h>
+@@ -867,4 +868,46 @@ void pixman_timer_register (pixman_timer_t *timer);
+
+ #endif /* PIXMAN_TIMERS */
+
++/* a helper function, can blit 8-bit images with src/dst overlapping support */
++static inline void
++pixman_blt_helper (uint8_t *src_bytes,
++ uint8_t *dst_bytes,
++ int src_stride,
++ int dst_stride,
++ int width,
++ int height)
++{
++ /*
++ * The second part of this check is not strictly needed, but it prevents
++ * unnecessary upside-down processing of areas which belong to different
++ * images. Upside-down processing can be slower with fixed-distance-ahead
++ * prefetch and perceived as having more tearing.
++ */
++ if (src_bytes < dst_bytes + width &&
++ src_bytes + src_stride * height > dst_bytes)
++ {
++ src_bytes += src_stride * height - src_stride;
++ dst_bytes += dst_stride * height - dst_stride;
++ dst_stride = -dst_stride;
++ src_stride = -src_stride;
++ /* Horizontal scrolling to the left needs memmove */
++ if (src_bytes + width > dst_bytes)
++ {
++ while (--height >= 0)
++ {
++ memmove (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++ return;
++ }
++ }
++ while (--height >= 0)
++ {
++ memcpy (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++}
++
+ #endif /* PIXMAN_PRIVATE_H */
+--
+1.6.6.1
+
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch b/recipes/obsolete/xorg/xorg-lib/pixman/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
new file mode 100644
index 0000000000..003337f48d
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman/0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch
@@ -0,0 +1,91 @@
+From 3170d9f5e927681a2516bcec52b317d1d4785e25 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 22 Oct 2009 05:45:47 +0300
+Subject: [PATCH 2/5] Support of overlapping src/dst for pixman_blt_mmx
+
+---
+ pixman/pixman-mmx.c | 55 +++++++++++++++++++++++++++++---------------------
+ 1 files changed, 32 insertions(+), 23 deletions(-)
+
+diff --git a/pixman/pixman-mmx.c b/pixman/pixman-mmx.c
+index e084e7f..6212b31 100644
+--- a/pixman/pixman-mmx.c
++++ b/pixman/pixman-mmx.c
+@@ -2994,34 +2994,43 @@ pixman_blt_mmx (uint32_t *src_bits,
+ {
+ uint8_t * src_bytes;
+ uint8_t * dst_bytes;
+- int byte_width;
++ int bpp;
+
+- if (src_bpp != dst_bpp)
++ if (src_bpp != dst_bpp || src_bpp & 7)
+ return FALSE;
+
+- if (src_bpp == 16)
+- {
+- src_stride = src_stride * (int) sizeof (uint32_t) / 2;
+- dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
+- src_bytes = (uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
+- dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+- byte_width = 2 * width;
+- src_stride *= 2;
+- dst_stride *= 2;
+- }
+- else if (src_bpp == 32)
++ bpp = src_bpp >> 3;
++ width *= bpp;
++ src_stride *= 4;
++ dst_stride *= 4;
++ src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++ dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++ if (src_bpp != 16 && src_bpp != 32)
+ {
+- src_stride = src_stride * (int) sizeof (uint32_t) / 4;
+- dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
+- src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
+- dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+- byte_width = 4 * width;
+- src_stride *= 4;
+- dst_stride *= 4;
++ pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++ width, height);
++ return TRUE;
+ }
+- else
++
++ if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
+ {
+- return FALSE;
++ src_bytes += src_stride * height - src_stride;
++ dst_bytes += dst_stride * height - dst_stride;
++ dst_stride = -dst_stride;
++ src_stride = -src_stride;
++
++ if (src_bytes + width > dst_bytes)
++ {
++ /* TODO: reverse scanline copy using MMX */
++ while (--height >= 0)
++ {
++ memmove (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++ return TRUE;
++ }
+ }
+
+ while (height--)
+@@ -3031,7 +3040,7 @@ pixman_blt_mmx (uint32_t *src_bits,
+ uint8_t *d = dst_bytes;
+ src_bytes += src_stride;
+ dst_bytes += dst_stride;
+- w = byte_width;
++ w = width;
+
+ while (w >= 2 && ((unsigned long)d & 3))
+ {
+--
+1.6.6.1
+
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch b/recipes/obsolete/xorg/xorg-lib/pixman/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
new file mode 100644
index 0000000000..7e8f34f6bd
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman/0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch
@@ -0,0 +1,91 @@
+From f07cd58c643b490dcb1ef7be2642926cfeca1e69 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 22 Oct 2009 05:45:54 +0300
+Subject: [PATCH 3/5] Support of overlapping src/dst for pixman_blt_sse2
+
+---
+ pixman/pixman-sse2.c | 55 +++++++++++++++++++++++++++++--------------------
+ 1 files changed, 32 insertions(+), 23 deletions(-)
+
+diff --git a/pixman/pixman-sse2.c b/pixman/pixman-sse2.c
+index 946e7ba..66053ae 100644
+--- a/pixman/pixman-sse2.c
++++ b/pixman/pixman-sse2.c
+@@ -5299,34 +5299,43 @@ pixman_blt_sse2 (uint32_t *src_bits,
+ {
+ uint8_t * src_bytes;
+ uint8_t * dst_bytes;
+- int byte_width;
++ int bpp;
+
+- if (src_bpp != dst_bpp)
++ if (src_bpp != dst_bpp || src_bpp & 7)
+ return FALSE;
+
+- if (src_bpp == 16)
+- {
+- src_stride = src_stride * (int) sizeof (uint32_t) / 2;
+- dst_stride = dst_stride * (int) sizeof (uint32_t) / 2;
+- src_bytes =(uint8_t *)(((uint16_t *)src_bits) + src_stride * (src_y) + (src_x));
+- dst_bytes = (uint8_t *)(((uint16_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+- byte_width = 2 * width;
+- src_stride *= 2;
+- dst_stride *= 2;
+- }
+- else if (src_bpp == 32)
++ bpp = src_bpp >> 3;
++ width *= bpp;
++ src_stride *= 4;
++ dst_stride *= 4;
++ src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++ dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++ if (src_bpp != 16 && src_bpp != 32)
+ {
+- src_stride = src_stride * (int) sizeof (uint32_t) / 4;
+- dst_stride = dst_stride * (int) sizeof (uint32_t) / 4;
+- src_bytes = (uint8_t *)(((uint32_t *)src_bits) + src_stride * (src_y) + (src_x));
+- dst_bytes = (uint8_t *)(((uint32_t *)dst_bits) + dst_stride * (dst_y) + (dst_x));
+- byte_width = 4 * width;
+- src_stride *= 4;
+- dst_stride *= 4;
++ pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++ width, height);
++ return TRUE;
+ }
+- else
++
++ if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
+ {
+- return FALSE;
++ src_bytes += src_stride * height - src_stride;
++ dst_bytes += dst_stride * height - dst_stride;
++ dst_stride = -dst_stride;
++ src_stride = -src_stride;
++
++ if (src_bytes + width > dst_bytes)
++ {
++ /* TODO: reverse scanline copy using SSE2 */
++ while (--height >= 0)
++ {
++ memmove (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++ return TRUE;
++ }
+ }
+
+ cache_prefetch ((__m128i*)src_bytes);
+@@ -5339,7 +5348,7 @@ pixman_blt_sse2 (uint32_t *src_bits,
+ uint8_t *d = dst_bytes;
+ src_bytes += src_stride;
+ dst_bytes += dst_stride;
+- w = byte_width;
++ w = width;
+
+ cache_prefetch_next ((__m128i*)s);
+ cache_prefetch_next ((__m128i*)d);
+--
+1.6.6.1
+
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch b/recipes/obsolete/xorg/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
new file mode 100644
index 0000000000..0ba5b843b5
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman/0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch
@@ -0,0 +1,94 @@
+From e0542866c466ad512d69292df098d4b880e35e52 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Wed, 18 Nov 2009 06:08:48 +0200
+Subject: [PATCH 4/5] Support of overlapping src/dst for pixman_blt_neon
+
+---
+ pixman/pixman-arm-neon.c | 62 +++++++++++++++++++++++++++++++++++++--------
+ 1 files changed, 51 insertions(+), 11 deletions(-)
+
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 24ceeeb..134493d 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -360,26 +360,66 @@ pixman_blt_neon (uint32_t *src_bits,
+ int width,
+ int height)
+ {
+- if (src_bpp != dst_bpp)
++ uint8_t * src_bytes;
++ uint8_t * dst_bytes;
++ int bpp;
++
++ if (src_bpp != dst_bpp || src_bpp & 7)
+ return FALSE;
+
++ bpp = src_bpp >> 3;
++ width *= bpp;
++ src_stride *= 4;
++ dst_stride *= 4;
++ src_bytes = (uint8_t *)src_bits + src_y * src_stride + src_x * bpp;
++ dst_bytes = (uint8_t *)dst_bits + dst_y * dst_stride + dst_x * bpp;
++
++ if (src_bpp != 16 && src_bpp != 32)
++ {
++ pixman_blt_helper (src_bytes, dst_bytes, src_stride, dst_stride,
++ width, height);
++ return TRUE;
++ }
++
++ if (src_bytes < dst_bytes && src_bytes + src_stride * height > dst_bytes)
++ {
++ src_bytes += src_stride * height - src_stride;
++ dst_bytes += dst_stride * height - dst_stride;
++ dst_stride = -dst_stride;
++ src_stride = -src_stride;
++
++ if (src_bytes + width > dst_bytes)
++ {
++ /* TODO: reverse scanline copy using NEON */
++ while (--height >= 0)
++ {
++ memmove (dst_bytes, src_bytes, width);
++ dst_bytes += dst_stride;
++ src_bytes += src_stride;
++ }
++ return TRUE;
++ }
++ }
++
+ switch (src_bpp)
+ {
+ case 16:
+ pixman_composite_src_0565_0565_asm_neon (
+- width, height,
+- (uint16_t *)(((char *) dst_bits) +
+- dst_y * dst_stride * 4 + dst_x * 2), dst_stride * 2,
+- (uint16_t *)(((char *) src_bits) +
+- src_y * src_stride * 4 + src_x * 2), src_stride * 2);
++ width >> 1,
++ height,
++ (uint16_t *) dst_bytes,
++ dst_stride >> 1,
++ (uint16_t *) src_bytes,
++ src_stride >> 1);
+ return TRUE;
+ case 32:
+ pixman_composite_src_8888_8888_asm_neon (
+- width, height,
+- (uint32_t *)(((char *) dst_bits) +
+- dst_y * dst_stride * 4 + dst_x * 4), dst_stride,
+- (uint32_t *)(((char *) src_bits) +
+- src_y * src_stride * 4 + src_x * 4), src_stride);
++ width >> 2,
++ height,
++ (uint32_t *) dst_bytes,
++ dst_stride >> 2,
++ (uint32_t *) src_bytes,
++ src_stride >> 2);
+ return TRUE;
+ default:
+ return FALSE;
+--
+1.6.6.1
+
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch b/recipes/obsolete/xorg/xorg-lib/pixman/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch
new file mode 100644
index 0000000000..769ed2e7d0
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman/0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch
@@ -0,0 +1,169 @@
+From d51b10a2750d99543a0c92ca44802aa7a4d70e54 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 10 Dec 2009 00:51:50 +0200
+Subject: [PATCH 5/5] ARM: added NEON optimizations for fetch/store r5g6b5 scanline
+
+---
+ pixman/pixman-access.c | 23 ++++++++++++++++++++++-
+ pixman/pixman-arm-neon-asm.S | 20 ++++++++++++++++++++
+ pixman/pixman-arm-neon.c | 41 +++++++++++++++++++++++++++++++++++++++++
+ pixman/pixman-private.h | 5 +++++
+ 4 files changed, 88 insertions(+), 1 deletions(-)
+
+diff --git a/pixman/pixman-access.c b/pixman/pixman-access.c
+index fa0a267..5bb3e09 100644
+--- a/pixman/pixman-access.c
++++ b/pixman/pixman-access.c
+@@ -2748,7 +2748,7 @@ typedef struct
+ store_scanline_ ## format, store_scanline_generic_64 \
+ }
+
+-static const format_info_t accessors[] =
++static format_info_t accessors[] =
+ {
+ /* 32 bpp formats */
+ FORMAT_INFO (a8r8g8b8),
+@@ -2891,6 +2891,27 @@ _pixman_bits_image_setup_raw_accessors (bits_image_t *image)
+ setup_accessors (image);
+ }
+
++void
++_pixman_bits_override_accessors (pixman_format_code_t format,
++ fetch_scanline_t fetch_func,
++ store_scanline_t store_func)
++{
++ format_info_t *info = accessors;
++
++ while (info->format != PIXMAN_null)
++ {
++ if (info->format == format)
++ {
++ if (fetch_func)
++ info->fetch_scanline_raw_32 = fetch_func;
++ if (store_func)
++ info->store_scanline_raw_32 = store_func;
++ return;
++ }
++ info++;
++ }
++}
++
+ #else
+
+ void
+diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S
+index eb8cc4c..6ab3301 100644
+--- a/pixman/pixman-arm-neon-asm.S
++++ b/pixman/pixman-arm-neon-asm.S
+@@ -454,6 +454,16 @@ generate_composite_function \
+ pixman_composite_src_8888_0565_process_pixblock_tail, \
+ pixman_composite_src_8888_0565_process_pixblock_tail_head
+
++generate_composite_function_single_scanline \
++ pixman_store_scanline_r5g6b5_asm_neon, 32, 0, 16, \
++ FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \
++ 8, /* number of pixels, processed in a single block */ \
++ default_init, \
++ default_cleanup, \
++ pixman_composite_src_8888_0565_process_pixblock_head, \
++ pixman_composite_src_8888_0565_process_pixblock_tail, \
++ pixman_composite_src_8888_0565_process_pixblock_tail_head
++
+ /******************************************************************************/
+
+ .macro pixman_composite_src_0565_8888_process_pixblock_head
+@@ -489,6 +499,16 @@ generate_composite_function \
+ pixman_composite_src_0565_8888_process_pixblock_tail, \
+ pixman_composite_src_0565_8888_process_pixblock_tail_head
+
++generate_composite_function_single_scanline \
++ pixman_fetch_scanline_r5g6b5_asm_neon, 16, 0, 32, \
++ FLAG_DST_WRITEONLY | FLAG_DEINTERLEAVE_32BPP, \
++ 8, /* number of pixels, processed in a single block */ \
++ default_init, \
++ default_cleanup, \
++ pixman_composite_src_0565_8888_process_pixblock_head, \
++ pixman_composite_src_0565_8888_process_pixblock_tail, \
++ pixman_composite_src_0565_8888_process_pixblock_tail_head
++
+ /******************************************************************************/
+
+ .macro pixman_composite_add_8000_8000_process_pixblock_head
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 134493d..2245b52 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -567,6 +567,43 @@ neon_combine_##name##_u (pixman_implementation_t *imp, \
+ BIND_COMBINE_U (over)
+ BIND_COMBINE_U (add)
+
++void
++pixman_fetch_scanline_r5g6b5_asm_neon (int width,
++ uint32_t *buffer,
++ const uint16_t *pixel);
++void
++pixman_store_scanline_r5g6b5_asm_neon (int width,
++ uint16_t *pixel,
++ const uint32_t *values);
++
++static void
++neon_fetch_scanline_r5g6b5 (pixman_image_t *image,
++ int x,
++ int y,
++ int width,
++ uint32_t * buffer,
++ const uint32_t *mask,
++ uint32_t mask_bits)
++{
++ const uint32_t *bits = image->bits.bits + y * image->bits.rowstride;
++ const uint16_t *pixel = (const uint16_t *)bits + x;
++
++ pixman_fetch_scanline_r5g6b5_asm_neon (width, buffer, pixel);
++}
++
++static void
++neon_store_scanline_r5g6b5 (bits_image_t * image,
++ int x,
++ int y,
++ int width,
++ const uint32_t *values)
++{
++ uint32_t *bits = image->bits + image->rowstride * y;
++ uint16_t *pixel = ((uint16_t *) bits) + x;
++
++ pixman_store_scanline_r5g6b5_asm_neon (width, pixel, values);
++}
++
+ pixman_implementation_t *
+ _pixman_implementation_create_arm_neon (void)
+ {
+@@ -577,6 +614,10 @@ _pixman_implementation_create_arm_neon (void)
+ imp->combine_32[PIXMAN_OP_OVER] = neon_combine_over_u;
+ imp->combine_32[PIXMAN_OP_ADD] = neon_combine_add_u;
+
++ _pixman_bits_override_accessors (PIXMAN_r5g6b5,
++ neon_fetch_scanline_r5g6b5,
++ neon_store_scanline_r5g6b5);
++
+ imp->blt = arm_neon_blt;
+ imp->fill = arm_neon_fill;
+
+diff --git a/pixman/pixman-private.h b/pixman/pixman-private.h
+index eeb677d..ba2d401 100644
+--- a/pixman/pixman-private.h
++++ b/pixman/pixman-private.h
+@@ -220,6 +220,11 @@ void
+ _pixman_bits_image_setup_raw_accessors (bits_image_t *image);
+
+ void
++_pixman_bits_override_accessors (pixman_format_code_t format,
++ fetch_scanline_t fetch_func,
++ store_scanline_t store_func);
++
++void
+ _pixman_image_get_scanline_generic_64 (pixman_image_t *image,
+ int x,
+ int y,
+--
+1.6.6.1
+
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman/0006-Revert-ARM-SIMD-Try-without-any-CFLAGS-before-forcin.patch b/recipes/obsolete/xorg/xorg-lib/pixman/0006-Revert-ARM-SIMD-Try-without-any-CFLAGS-before-forcin.patch
new file mode 100644
index 0000000000..3d8d4e8292
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman/0006-Revert-ARM-SIMD-Try-without-any-CFLAGS-before-forcin.patch
@@ -0,0 +1,53 @@
+From 7f0adaef68c5b0bb1c5eb9f5db5792b71b8b8beb Mon Sep 17 00:00:00 2001
+From: Koen Kooi <koen@dominion.thruhere.net>
+Date: Fri, 19 Mar 2010 10:44:09 +0100
+Subject: [PATCH 6/6] Revert "ARM: SIMD: Try without any CFLAGS before forcing -mcpu="
+
+This forces -marm that results in runtime SIGILL on thumb userspace
+
+This reverts commit 18f0de452dc7e12e4cb544d761a626d5c6031663.
+---
+ configure.ac | 20 +++++---------------
+ 1 files changed, 5 insertions(+), 15 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index fc3ee24..f84a4dc 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -363,28 +363,18 @@ AM_CONDITIONAL(USE_VMX, test $have_vmx_intrinsics = yes)
+
+ dnl ===========================================================================
+ dnl Check for ARM SIMD instructions
+-ARM_SIMD_CFLAGS=""
++ARM_SIMD_CFLAGS="-mcpu=arm1136j-s"
+
+ have_arm_simd=no
+ AC_MSG_CHECKING(whether to use ARM SIMD assembler)
+-# check with default CFLAGS in case the toolchain turns on a sufficiently recent -mcpu=
++xserver_save_CFLAGS=$CFLAGS
++CFLAGS="$ARM_SIMD_CFLAGS $CFLAGS"
+ AC_COMPILE_IFELSE([
+ int main () {
+ asm("uqadd8 r1, r1, r2");
+ return 0;
+-}], have_arm_simd=yes,
+- # check again with an explicit -mcpu= in case the toolchain defaults to an
+- # older one; note that uqadd8 isn't available in Thumb mode on arm1136j-s
+- # so we force ARM mode
+- ARM_SIMD_CFLAGS="-mcpu=arm1136j-s -marm"
+- xserver_save_CFLAGS=$CFLAGS
+- CFLAGS="$ARM_SIMD_CFLAGS $CFLAGS"
+- AC_COMPILE_IFELSE([
+- int main () {
+- asm("uqadd8 r1, r1, r2");
+- return 0;
+- }], have_arm_simd=yes)
+- CFLAGS=$xserver_save_CFLAGS)
++}], have_arm_simd=yes)
++CFLAGS=$xserver_save_CFLAGS
+
+ AC_ARG_ENABLE(arm-simd,
+ [AC_HELP_STRING([--disable-arm-simd],
+--
+1.6.6.1
+
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman/calloc.patch b/recipes/obsolete/xorg/xorg-lib/pixman/calloc.patch
new file mode 100644
index 0000000000..4a60d7ef9a
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman/calloc.patch
@@ -0,0 +1,23 @@
+From 634ba33b5b1fcfd5a0e7910f9991b4ed4f674549 Mon Sep 17 00:00:00 2001
+From: Søren Sandmann Pedersen <ssp@redhat.com>
+Date: Wed, 07 Apr 2010 05:39:14 +0000
+Subject: Fix uninitialized cache when pthreads are used
+
+The thread local cache is allocated with malloc(), but we rely on it
+being initialized to zero, so allocate it with calloc() instead.
+---
+diff --git a/pixman/pixman-compiler.h b/pixman/pixman-compiler.h
+index a4e3f88..cdac0d8 100644
+--- a/pixman/pixman-compiler.h
++++ b/pixman/pixman-compiler.h
+@@ -101,7 +101,7 @@
+ static type * \
+ tls_ ## name ## _alloc (key) \
+ { \
+- type *value = malloc (sizeof (type)); \
++ type *value = calloc (1, sizeof (type)); \
+ if (value) \
+ pthread_setspecific (key, value); \
+ return value; \
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman/nearest-neighbour.patch b/recipes/obsolete/xorg/xorg-lib/pixman/nearest-neighbour.patch
new file mode 100644
index 0000000000..29b140faf9
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman/nearest-neighbour.patch
@@ -0,0 +1,1040 @@
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Fri, 17 Jul 2009 10:22:23 +0000 (+0300)
+Subject: Fastpath for nearest neighbour scaled compositing operations.
+X-Git-Url: http://siarhei.siamashka.name/gitweb/?p=pixman.git;a=commitdiff_plain;h=247531c6978725a88fd3706129b9d3e339026f54
+
+Fastpath for nearest neighbour scaled compositing operations.
+
+OVER 8888x8888, OVER 8888x0565, SRC 8888x8888, SRC 8888x0565
+and SRC 0565x0565 cases are supported.
+---
+
+diff --git a/pixman/pixman-fast-path.c b/pixman/pixman-fast-path.c
+index 7f80578..7f3a6ad 100644
+--- a/pixman/pixman-fast-path.c
++++ b/pixman/pixman-fast-path.c
+@@ -1261,6 +1261,993 @@ fast_composite_src_scale_nearest (pixman_implementation_t *imp,
+ }
+ }
+
++/*
++ * Functions, which implement the core inner loops for the nearest neighbour
++ * scaled fastpath compositing operations. The do not need to do clipping
++ * checks, also the loops are unrolled to process two pixels per iteration
++ * for better performance on most CPU architectures (superscalar processors
++ * can issue several operations simultaneously, other processors can hide
++ * instructions latencies by pipelining operations). Unrolling more
++ * does not make much sense because the compiler will start running out
++ * of spare registers soon.
++ */
++
++#undef READ
++#undef WRITE
++#define READ(img,x) (*(x))
++#define WRITE(img,ptr,v) ((*(ptr)) = (v))
++
++#define UN8x4_MUL_UN8_ADD_UN8x4_store_r5g6b5(x, a, y) do { \
++ UN8x4_MUL_UN8_ADD_UN8x4(x, a, y); \
++ x = CONVERT_8888_TO_0565(x); \
++ } while (0)
++
++static void fbCompositeTransformNearestNonrotatedAffineTrivialclipOver_8888x0565 (
++ pixman_image_t *pSrc, pixman_image_t *pDst, int xSrc, int ySrc, int xDst, int yDst,
++ int width, int height, int32_t vx, int32_t vy, int32_t unit_x, int32_t unit_y)
++{
++ uint16_t *dstLine;
++ uint32_t *srcFirstLine;
++ uint32_t d;
++ uint32_t s1, s2;
++ uint8_t a1, a2;
++ int w;
++ int x1, x2, y;
++ int32_t orig_vx = vx;
++
++ uint32_t *src;
++ uint16_t *dst;
++ int srcStride, dstStride;
++ PIXMAN_IMAGE_GET_LINE (pDst, xDst, yDst, uint16_t, dstStride, dstLine, 1);
++ /* pass in 0 instead of xSrc and ySrc because xSrc and ySrc need to be
++ * transformed from destination space to source space */
++ PIXMAN_IMAGE_GET_LINE (pSrc, 0, 0, uint32_t, srcStride, srcFirstLine, 1);
++
++ while (--height >= 0)
++ {
++ dst = dstLine;
++ dstLine += dstStride;
++
++ y = vy >> 16;
++ vy += unit_y;
++
++ if ((y < 0) || (y >= pSrc->bits.height)) {
++ continue;
++ }
++
++ src = srcFirstLine + srcStride * y;
++
++ w = width;
++ vx = orig_vx;
++ while ((w -= 2) >= 0)
++ {
++ x1 = vx >> 16;
++ vx += unit_x;
++ s1 = READ(pSrc, src + x1);
++
++ x2 = vx >> 16;
++ vx += unit_x;
++ s2 = READ(pSrc, src + x2);
++
++ a1 = s1 >> 24;
++ a2 = s2 >> 24;
++
++ if (a1 == 0xff)
++ WRITE(pDst, dst, CONVERT_8888_TO_0565(s1));
++ else if (s1) {
++ d = CONVERT_0565_TO_0888(READ(pDst, dst));
++ a1 ^= 0xff;
++ UN8x4_MUL_UN8_ADD_UN8x4_store_r5g6b5(d, a1, s1);
++ WRITE(pDst, dst, d);
++ }
++ dst++;
++
++ if (a2 == 0xff)
++ WRITE(pDst, dst, CONVERT_8888_TO_0565(s2));
++ else if (s2) {
++ d = CONVERT_0565_TO_0888(READ(pDst, dst));
++ a2 ^= 0xff;
++ UN8x4_MUL_UN8_ADD_UN8x4_store_r5g6b5(d, a2, s2);
++ WRITE(pDst, dst, d);
++ }
++ dst++;
++ }
++ if (w & 1) {
++ x1 = vx >> 16;
++ vx += unit_x;
++ s1 = READ(pSrc, src + x1);
++
++ a1 = s1 >> 24;
++ if (a1 == 0xff)
++ WRITE(pDst, dst, CONVERT_8888_TO_0565(s1));
++ else if (s1) {
++ d = CONVERT_0565_TO_0888(READ(pDst, dst));
++ a1 ^= 0xff;
++ UN8x4_MUL_UN8_ADD_UN8x4_store_r5g6b5(d, a1, s1);
++ WRITE(pDst, dst, d);
++ }
++ dst++;
++ }
++ }
++}
++
++static void fbCompositeTransformNearestNonrotatedAffineTrivialclipRepeatOver_8888x0565 (
++ pixman_image_t *pSrc, pixman_image_t *pDst, int xSrc, int ySrc, int xDst, int yDst,
++ int width, int height, int32_t vx, int32_t vy, int32_t unit_x, int32_t unit_y)
++{
++ uint16_t *dstLine;
++ uint32_t *srcFirstLine;
++ uint32_t d;
++ uint32_t s1, s2;
++ uint8_t a1, a2;
++ int w;
++ int x1, x2, y;
++ int32_t orig_vx = vx;
++ int32_t max_vx, max_vy;
++
++ uint32_t *src;
++ uint16_t *dst;
++ int srcStride, dstStride;
++ PIXMAN_IMAGE_GET_LINE (pDst, xDst, yDst, uint16_t, dstStride, dstLine, 1);
++ /* pass in 0 instead of xSrc and ySrc because xSrc and ySrc need to be
++ * transformed from destination space to source space */
++ PIXMAN_IMAGE_GET_LINE (pSrc, 0, 0, uint32_t, srcStride, srcFirstLine, 1);
++
++ max_vx = pSrc->bits.width << 16;
++ max_vy = pSrc->bits.height << 16;
++
++ while (orig_vx < 0) orig_vx += max_vx;
++ while (vy < 0) vy += max_vy;
++ while (orig_vx >= max_vx) orig_vx -= max_vx;
++ while (vy >= max_vy) vy -= max_vy;
++
++ while (--height >= 0)
++ {
++ dst = dstLine;
++ dstLine += dstStride;
++
++ y = vy >> 16;
++ vy += unit_y;
++ while (vy >= max_vy) vy -= max_vy;
++
++ src = srcFirstLine + srcStride * y;
++
++ w = width;
++ vx = orig_vx;
++ while ((w -= 2) >= 0)
++ {
++ x1 = vx >> 16;
++ vx += unit_x;
++ while (vx >= max_vx) vx -= max_vx;
++ s1 = READ(pSrc, src + x1);
++
++ x2 = vx >> 16;
++ vx += unit_x;
++ while (vx >= max_vx) vx -= max_vx;
++ s2 = READ(pSrc, src + x2);
++
++ a1 = s1 >> 24;
++ a2 = s2 >> 24;
++
++ if (a1 == 0xff)
++ WRITE(pDst, dst, CONVERT_8888_TO_0565(s1));
++ else if (s1) {
++ d = CONVERT_0565_TO_0888(READ(pDst, dst));
++ a1 ^= 0xff;
++ UN8x4_MUL_UN8_ADD_UN8x4_store_r5g6b5(d, a1, s1);
++ WRITE(pDst, dst, d);
++ }
++ dst++;
++
++ if (a2 == 0xff)
++ WRITE(pDst, dst, CONVERT_8888_TO_0565(s2));
++ else if (s2) {
++ d = CONVERT_0565_TO_0888(READ(pDst, dst));
++ a2 ^= 0xff;
++ UN8x4_MUL_UN8_ADD_UN8x4_store_r5g6b5(d, a2, s2);
++ WRITE(pDst, dst, d);
++ }
++ dst++;
++ }
++ if (w & 1) {
++ x1 = vx >> 16;
++ vx += unit_x;
++ while (vx >= max_vx) vx -= max_vx;
++ s1 = READ(pSrc, src + x1);
++
++ a1 = s1 >> 24;
++ if (a1 == 0xff)
++ WRITE(pDst, dst, CONVERT_8888_TO_0565(s1));
++ else if (s1) {
++ d = CONVERT_0565_TO_0888(READ(pDst, dst));
++ a1 ^= 0xff;
++ UN8x4_MUL_UN8_ADD_UN8x4_store_r5g6b5(d, a1, s1);
++ WRITE(pDst, dst, d);
++ }
++ dst++;
++ }
++ }
++}
++
++static void fbCompositeTransformNearestNonrotatedAffineTrivialclipOver_8888x8888 (
++ pixman_image_t *pSrc, pixman_image_t *pDst, int xSrc, int ySrc, int xDst, int yDst,
++ int width, int height, int32_t vx, int32_t vy, int32_t unit_x, int32_t unit_y)
++{
++ uint32_t *dstLine;
++ uint32_t *srcFirstLine;
++ uint32_t d;
++ uint32_t s1, s2;
++ uint8_t a1, a2;
++ int w;
++ int x1, x2, y;
++ int32_t orig_vx = vx;
++
++ uint32_t *src, *dst;
++ int srcStride, dstStride;
++ PIXMAN_IMAGE_GET_LINE (pDst, xDst, yDst, uint32_t, dstStride, dstLine, 1);
++ /* pass in 0 instead of xSrc and ySrc because xSrc and ySrc need to be
++ * transformed from destination space to source space */
++ PIXMAN_IMAGE_GET_LINE (pSrc, 0, 0, uint32_t, srcStride, srcFirstLine, 1);
++
++ while (--height >= 0)
++ {
++ dst = dstLine;
++ dstLine += dstStride;
++
++ y = vy >> 16;
++ vy += unit_y;
++
++ if ((y < 0) || (y >= pSrc->bits.height)) {
++ continue;
++ }
++
++ src = srcFirstLine + srcStride * y;
++
++ w = width;
++ vx = orig_vx;
++ while ((w -= 2) >= 0)
++ {
++ x1 = vx >> 16;
++ vx += unit_x;
++ s1 = READ(pSrc, src + x1);
++
++ x2 = vx >> 16;
++ vx += unit_x;
++ s2 = READ(pSrc, src + x2);
++
++ a1 = s1 >> 24;
++ a2 = s2 >> 24;
++
++ if (a1 == 0xff)
++ WRITE(pDst, dst, s1);
++ else if (s1) {
++ d = READ(pDst, dst);
++ a1 ^= 0xff;
++ UN8x4_MUL_UN8_ADD_UN8x4(d, a1, s1);
++ WRITE(pDst, dst, d);
++ }
++ dst++;
++
++ if (a2 == 0xff)
++ WRITE(pDst, dst, s2);
++ else if (s2) {
++ d = READ(pDst, dst);
++ a2 ^= 0xff;
++ UN8x4_MUL_UN8_ADD_UN8x4(d, a2, s2);
++ WRITE(pDst, dst, d);
++ }
++ dst++;
++ }
++ if (w & 1) {
++ x1 = vx >> 16;
++ vx += unit_x;
++ s1 = READ(pSrc, src + x1);
++
++ a1 = s1 >> 24;
++ if (a1 == 0xff)
++ WRITE(pDst, dst, s1);
++ else if (s1) {
++ d = READ(pDst, dst);
++ a1 ^= 0xff;
++ UN8x4_MUL_UN8_ADD_UN8x4(d, a1, s1);
++ WRITE(pDst, dst, d);
++ }
++ dst++;
++ }
++ }
++}
++
++static void fbCompositeTransformNearestNonrotatedAffineTrivialclipRepeatOver_8888x8888 (
++ pixman_image_t *pSrc, pixman_image_t *pDst, int xSrc, int ySrc, int xDst, int yDst,
++ int width, int height, int32_t vx, int32_t vy, int32_t unit_x, int32_t unit_y)
++{
++ uint32_t *dstLine;
++ uint32_t *srcFirstLine;
++ uint32_t d;
++ uint32_t s1, s2;
++ uint8_t a1, a2;
++ int w;
++ int x1, x2, y;
++ int32_t orig_vx = vx;
++ int32_t max_vx, max_vy;
++
++ uint32_t *src, *dst;
++ int srcStride, dstStride;
++ PIXMAN_IMAGE_GET_LINE (pDst, xDst, yDst, uint32_t, dstStride, dstLine, 1);
++ /* pass in 0 instead of xSrc and ySrc because xSrc and ySrc need to be
++ * transformed from destination space to source space */
++ PIXMAN_IMAGE_GET_LINE (pSrc, 0, 0, uint32_t, srcStride, srcFirstLine, 1);
++
++ max_vx = pSrc->bits.width << 16;
++ max_vy = pSrc->bits.height << 16;
++
++ while (orig_vx < 0) orig_vx += max_vx;
++ while (vy < 0) vy += max_vy;
++ while (orig_vx >= max_vx) orig_vx -= max_vx;
++ while (vy >= max_vy) vy -= max_vy;
++
++ while (--height >= 0)
++ {
++ dst = dstLine;
++ dstLine += dstStride;
++
++ y = vy >> 16;
++ vy += unit_y;
++ while (vy >= max_vy) vy -= max_vy;
++
++ src = srcFirstLine + srcStride * y;
++
++ w = width;
++ vx = orig_vx;
++ while ((w -= 2) >= 0)
++ {
++ x1 = vx >> 16;
++ vx += unit_x;
++ while (vx >= max_vx) vx -= max_vx;
++ s1 = READ(pSrc, src + x1);
++
++ x2 = vx >> 16;
++ vx += unit_x;
++ while (vx >= max_vx) vx -= max_vx;
++ s2 = READ(pSrc, src + x2);
++
++ a1 = s1 >> 24;
++ a2 = s2 >> 24;
++
++ if (a1 == 0xff)
++ WRITE(pDst, dst, s1);
++ else if (s1) {
++ d = READ(pDst, dst);
++ a1 ^= 0xff;
++ UN8x4_MUL_UN8_ADD_UN8x4(d, a1, s1);
++ WRITE(pDst, dst, d);
++ }
++ dst++;
++
++ if (a2 == 0xff)
++ WRITE(pDst, dst, s2);
++ else if (s2) {
++ d = READ(pDst, dst);
++ a2 ^= 0xff;
++ UN8x4_MUL_UN8_ADD_UN8x4(d, a2, s2);
++ WRITE(pDst, dst, d);
++ }
++ dst++;
++ }
++ if (w & 1) {
++ x1 = vx >> 16;
++ vx += unit_x;
++ while (vx >= max_vx) vx -= max_vx;
++ s1 = READ(pSrc, src + x1);
++
++ a1 = s1 >> 24;
++ if (a1 == 0xff)
++ WRITE(pDst, dst, s1);
++ else if (s1) {
++ d = READ(pDst, dst);
++ a1 ^= 0xff;
++ UN8x4_MUL_UN8_ADD_UN8x4(d, a1, s1);
++ WRITE(pDst, dst, d);
++ }
++ dst++;
++ }
++ }
++}
++
++static void fbCompositeTransformNearestNonrotatedAffineTrivialclipSrc_8888x8888 (
++ pixman_image_t *pSrc, pixman_image_t *pDst, int xSrc, int ySrc, int xDst, int yDst,
++ int width, int height, int32_t vx, int32_t vy, int32_t unit_x, int32_t unit_y)
++{
++ uint32_t *dstLine;
++ uint32_t *srcFirstLine;
++ uint32_t s1, s2;
++ int w;
++ int x1, x2, y;
++ int32_t orig_vx = vx;
++
++ uint32_t *src, *dst;
++ int srcStride, dstStride;
++ PIXMAN_IMAGE_GET_LINE (pDst, xDst, yDst, uint32_t, dstStride, dstLine, 1);
++ /* pass in 0 instead of xSrc and ySrc because xSrc and ySrc need to be
++ * transformed from destination space to source space */
++ PIXMAN_IMAGE_GET_LINE (pSrc, 0, 0, uint32_t, srcStride, srcFirstLine, 1);
++
++ while (--height >= 0)
++ {
++ dst = dstLine;
++ dstLine += dstStride;
++
++ y = vy >> 16;
++ vy += unit_y;
++
++ if ((y < 0) || (y >= pSrc->bits.height)) {
++ memset(dst, 0, width * sizeof(*dst));
++ continue;
++ }
++
++ src = srcFirstLine + srcStride * y;
++
++ w = width;
++ vx = orig_vx;
++ while ((w -= 2) >= 0)
++ {
++ x1 = vx >> 16;
++ vx += unit_x;
++ s1 = READ(pSrc, src + x1);
++
++ x2 = vx >> 16;
++ vx += unit_x;
++ s2 = READ(pSrc, src + x2);
++
++ WRITE(pDst, dst, s1);
++ dst++;
++ WRITE(pDst, dst, s2);
++ dst++;
++ }
++ if (w & 1) {
++ x1 = vx >> 16;
++ vx += unit_x;
++ s1 = READ(pSrc, src + x1);
++ WRITE(pDst, dst, s1);
++ dst++;
++ }
++ }
++}
++
++static void fbCompositeTransformNearestNonrotatedAffineTrivialclipRepeatSrc_8888x8888 (
++ pixman_image_t *pSrc, pixman_image_t *pDst, int xSrc, int ySrc, int xDst, int yDst,
++ int width, int height, int32_t vx, int32_t vy, int32_t unit_x, int32_t unit_y)
++{
++ uint32_t *dstLine;
++ uint32_t *srcFirstLine;
++ uint32_t s1, s2;
++ int w;
++ int x1, x2, y;
++ int32_t orig_vx = vx;
++ int32_t max_vx, max_vy;
++
++ uint32_t *src, *dst;
++ int srcStride, dstStride;
++ PIXMAN_IMAGE_GET_LINE (pDst, xDst, yDst, uint32_t, dstStride, dstLine, 1);
++ /* pass in 0 instead of xSrc and ySrc because xSrc and ySrc need to be
++ * transformed from destination space to source space */
++ PIXMAN_IMAGE_GET_LINE (pSrc, 0, 0, uint32_t, srcStride, srcFirstLine, 1);
++
++ max_vx = pSrc->bits.width << 16;
++ max_vy = pSrc->bits.height << 16;
++
++ while (orig_vx < 0) orig_vx += max_vx;
++ while (vy < 0) vy += max_vy;
++ while (orig_vx >= max_vx) orig_vx -= max_vx;
++ while (vy >= max_vy) vy -= max_vy;
++
++ while (--height >= 0)
++ {
++ dst = dstLine;
++ dstLine += dstStride;
++
++ y = vy >> 16;
++ vy += unit_y;
++ while (vy >= max_vy) vy -= max_vy;
++
++ src = srcFirstLine + srcStride * y;
++
++ w = width;
++ vx = orig_vx;
++ while ((w -= 2) >= 0)
++ {
++ x1 = vx >> 16;
++ vx += unit_x;
++ while (vx >= max_vx) vx -= max_vx;
++ s1 = READ(pSrc, src + x1);
++
++ x2 = vx >> 16;
++ vx += unit_x;
++ while (vx >= max_vx) vx -= max_vx;
++ s2 = READ(pSrc, src + x2);
++
++ WRITE(pDst, dst, s1);
++ dst++;
++ WRITE(pDst, dst, s2);
++ dst++;
++ }
++ if (w & 1) {
++ x1 = vx >> 16;
++ vx += unit_x;
++ while (vx >= max_vx) vx -= max_vx;
++ s1 = READ(pSrc, src + x1);
++
++ WRITE(pDst, dst, s1);
++ dst++;
++ }
++ }
++}
++
++static void fbCompositeTransformNearestNonrotatedAffineTrivialclipSrc_0565x0565 (
++ pixman_image_t *pSrc, pixman_image_t *pDst, int xSrc, int ySrc, int xDst, int yDst,
++ int width, int height, int32_t vx, int32_t vy, int32_t unit_x, int32_t unit_y)
++{
++ uint16_t *dstLine;
++ uint16_t *srcFirstLine;
++ uint16_t s1, s2;
++ int w;
++ int x1, x2, y;
++ int32_t orig_vx = vx;
++
++ uint16_t *src, *dst;
++ int srcStride, dstStride;
++ PIXMAN_IMAGE_GET_LINE (pDst, xDst, yDst, uint16_t, dstStride, dstLine, 1);
++ /* pass in 0 instead of xSrc and ySrc because xSrc and ySrc need to be
++ * transformed from destination space to source space */
++ PIXMAN_IMAGE_GET_LINE (pSrc, 0, 0, uint16_t, srcStride, srcFirstLine, 1);
++
++ while (--height >= 0)
++ {
++ dst = dstLine;
++ dstLine += dstStride;
++
++ y = vy >> 16;
++ vy += unit_y;
++
++ if ((y < 0) || (y >= pSrc->bits.height)) {
++ memset(dst, 0, width * sizeof(*dst));
++ continue;
++ }
++
++ src = srcFirstLine + srcStride * y;
++
++ w = width;
++ vx = orig_vx;
++ while ((w -= 2) >= 0)
++ {
++ x1 = vx >> 16;
++ vx += unit_x;
++ s1 = READ(pSrc, src + x1);
++
++ x2 = vx >> 16;
++ vx += unit_x;
++ s2 = READ(pSrc, src + x2);
++
++ WRITE(pDst, dst, s1);
++ dst++;
++ WRITE(pDst, dst, s2);
++ dst++;
++ }
++ if (w & 1) {
++ x1 = vx >> 16;
++ vx += unit_x;
++ s1 = READ(pSrc, src + x1);
++ WRITE(pDst, dst, s1);
++ dst++;
++ }
++ }
++}
++
++static void fbCompositeTransformNearestNonrotatedAffineTrivialclipRepeatSrc_0565x0565 (
++ pixman_image_t *pSrc, pixman_image_t *pDst, int xSrc, int ySrc, int xDst, int yDst,
++ int width, int height, int32_t vx, int32_t vy, int32_t unit_x, int32_t unit_y)
++{
++ uint16_t *dstLine;
++ uint16_t *srcFirstLine;
++ uint16_t s1, s2;
++ int w;
++ int x1, x2, y;
++ int32_t orig_vx = vx;
++ int32_t max_vx, max_vy;
++
++ uint16_t *src, *dst;
++ int srcStride, dstStride;
++ PIXMAN_IMAGE_GET_LINE (pDst, xDst, yDst, uint16_t, dstStride, dstLine, 1);
++ /* pass in 0 instead of xSrc and ySrc because xSrc and ySrc need to be
++ * transformed from destination space to source space */
++ PIXMAN_IMAGE_GET_LINE (pSrc, 0, 0, uint16_t, srcStride, srcFirstLine, 1);
++
++ max_vx = pSrc->bits.width << 16;
++ max_vy = pSrc->bits.height << 16;
++
++ while (orig_vx < 0) orig_vx += max_vx;
++ while (vy < 0) vy += max_vy;
++ while (orig_vx >= max_vx) orig_vx -= max_vx;
++ while (vy >= max_vy) vy -= max_vy;
++
++ while (--height >= 0)
++ {
++ dst = dstLine;
++ dstLine += dstStride;
++
++ y = vy >> 16;
++ vy += unit_y;
++ while (vy >= max_vy) vy -= max_vy;
++
++ src = srcFirstLine + srcStride * y;
++
++ w = width;
++ vx = orig_vx;
++ while ((w -= 2) >= 0)
++ {
++ x1 = vx >> 16;
++ vx += unit_x;
++ while (vx >= max_vx) vx -= max_vx;
++ s1 = READ(pSrc, src + x1);
++
++ x2 = vx >> 16;
++ vx += unit_x;
++ while (vx >= max_vx) vx -= max_vx;
++ s2 = READ(pSrc, src + x2);
++
++ WRITE(pDst, dst, s1);
++ dst++;
++ WRITE(pDst, dst, s2);
++ dst++;
++ }
++ if (w & 1) {
++ x1 = vx >> 16;
++ vx += unit_x;
++ while (vx >= max_vx) vx -= max_vx;
++ s1 = READ(pSrc, src + x1);
++
++ WRITE(pDst, dst, s1);
++ dst++;
++ }
++ }
++}
++
++static void fbCompositeTransformNearestNonrotatedAffineTrivialclipSrc_8888x0565 (
++ pixman_image_t *pSrc, pixman_image_t *pDst, int xSrc, int ySrc, int xDst, int yDst,
++ int width, int height, int32_t vx, int32_t vy, int32_t unit_x, int32_t unit_y)
++{
++ uint16_t *dstLine;
++ uint32_t *srcFirstLine;
++ uint32_t s1, s2;
++ int w;
++ int x1, x2, y;
++ int32_t orig_vx = vx;
++
++ uint32_t *src;
++ uint16_t *dst;
++ int srcStride, dstStride;
++ PIXMAN_IMAGE_GET_LINE (pDst, xDst, yDst, uint16_t, dstStride, dstLine, 1);
++ /* pass in 0 instead of xSrc and ySrc because xSrc and ySrc need to be
++ * transformed from destination space to source space */
++ PIXMAN_IMAGE_GET_LINE (pSrc, 0, 0, uint32_t, srcStride, srcFirstLine, 1);
++
++ while (--height >= 0)
++ {
++ dst = dstLine;
++ dstLine += dstStride;
++
++ y = vy >> 16;
++ vy += unit_y;
++
++ if ((y < 0) || (y >= pSrc->bits.height)) {
++ memset(dst, 0, width * sizeof(*dst));
++ continue;
++ }
++
++ src = srcFirstLine + srcStride * y;
++
++ w = width;
++ vx = orig_vx;
++ while ((w -= 2) >= 0)
++ {
++ x1 = vx >> 16;
++ vx += unit_x;
++ s1 = READ(pSrc, src + x1);
++
++ x2 = vx >> 16;
++ vx += unit_x;
++ s2 = READ(pSrc, src + x2);
++
++ WRITE(pDst, dst, CONVERT_8888_TO_0565(s1));
++ dst++;
++ WRITE(pDst, dst, CONVERT_8888_TO_0565(s2));
++ dst++;
++ }
++ if (w & 1) {
++ x1 = vx >> 16;
++ vx += unit_x;
++ s1 = READ(pSrc, src + x1);
++ WRITE(pDst, dst, CONVERT_8888_TO_0565(s1));
++ dst++;
++ }
++ }
++}
++
++static void fbCompositeTransformNearestNonrotatedAffineTrivialclipRepeatSrc_8888x0565 (
++ pixman_image_t *pSrc, pixman_image_t *pDst, int xSrc, int ySrc, int xDst, int yDst,
++ int width, int height, int32_t vx, int32_t vy, int32_t unit_x, int32_t unit_y)
++{
++ uint16_t *dstLine;
++ uint32_t *srcFirstLine;
++ uint32_t s1, s2;
++ int w;
++ int x1, x2, y;
++ int32_t orig_vx = vx;
++ int32_t max_vx, max_vy;
++
++ uint32_t *src;
++ uint16_t *dst;
++ int srcStride, dstStride;
++ PIXMAN_IMAGE_GET_LINE (pDst, xDst, yDst, uint16_t, dstStride, dstLine, 1);
++ /* pass in 0 instead of xSrc and ySrc because xSrc and ySrc need to be
++ * transformed from destination space to source space */
++ PIXMAN_IMAGE_GET_LINE (pSrc, 0, 0, uint32_t, srcStride, srcFirstLine, 1);
++
++ max_vx = pSrc->bits.width << 16;
++ max_vy = pSrc->bits.height << 16;
++
++ while (orig_vx < 0) orig_vx += max_vx;
++ while (vy < 0) vy += max_vy;
++ while (orig_vx >= max_vx) orig_vx -= max_vx;
++ while (vy >= max_vy) vy -= max_vy;
++
++ while (--height >= 0)
++ {
++ dst = dstLine;
++ dstLine += dstStride;
++
++ y = vy >> 16;
++ vy += unit_y;
++ while (vy >= max_vy) vy -= max_vy;
++
++ src = srcFirstLine + srcStride * y;
++
++ w = width;
++ vx = orig_vx;
++ while ((w -= 2) >= 0)
++ {
++ x1 = vx >> 16;
++ vx += unit_x;
++ while (vx >= max_vx) vx -= max_vx;
++ s1 = READ(pSrc, src + x1);
++
++ x2 = vx >> 16;
++ vx += unit_x;
++ while (vx >= max_vx) vx -= max_vx;
++ s2 = READ(pSrc, src + x2);
++
++ WRITE(pDst, dst, CONVERT_8888_TO_0565(s1));
++ dst++;
++ WRITE(pDst, dst, CONVERT_8888_TO_0565(s2));
++ dst++;
++ }
++ if (w & 1) {
++ x1 = vx >> 16;
++ vx += unit_x;
++ while (vx >= max_vx) vx -= max_vx;
++ s1 = READ(pSrc, src + x1);
++
++ WRITE(pDst, dst, CONVERT_8888_TO_0565(s1));
++ dst++;
++ }
++ }
++}
++
++/*
++ * Check if the clipping boundary is crossed on horizontal scaling
++ */
++static inline pixman_bool_t
++fbTransformVerifyHorizontalClipping(pixman_image_t *pict, int width, int32_t vx, int32_t unit_x)
++{
++ while (--width >= 0) {
++ int x = vx >> 16;
++ if ((x < 0) || (x >= pict->bits.width)) return 1;
++ vx += unit_x;
++ }
++ return 0;
++}
++
++/*
++ * Check if the clipping boundary is crossed on vertical scaling
++ */
++static inline pixman_bool_t
++fbTransformVerifyVerticalClipping(pixman_image_t *pict, int height, int32_t vy, int32_t unit_y)
++{
++ while (--height >= 0) {
++ int y = vy >> 16;
++ if ((y < 0) || (y >= pict->bits.height)) return 1;
++ vy += unit_y;
++ }
++ return 0;
++}
++
++/*
++ * Easy case of transform without rotation or complex clipping
++ * Returns 1 in the case if it was able to handle this operation and 0 otherwise
++ */
++static pixman_bool_t
++fbCompositeTransformNonrotatedAffineTrivialclip (
++ pixman_op_t op,
++ pixman_image_t *pSrc,
++ pixman_image_t *pMask,
++ pixman_image_t *pDst,
++ int16_t xSrc,
++ int16_t ySrc,
++ int16_t xMask,
++ int16_t yMask,
++ int16_t xDst,
++ int16_t yDst,
++ uint16_t width,
++ uint16_t height)
++{
++ pixman_vector_t v, unit;
++ int skipdst_x = 0, skipdst_y = 0;
++
++ /* Handle destination clipping */
++ if (xDst < pDst->common.clip_region.extents.x1) {
++ skipdst_x = pDst->common.clip_region.extents.x1 - xDst;
++ if (skipdst_x >= (int)width)
++ return 1;
++ xDst = pDst->common.clip_region.extents.x1;
++ width -= skipdst_x;
++ }
++
++ if (yDst < pDst->common.clip_region.extents.y1) {
++ skipdst_y = pDst->common.clip_region.extents.y1 - yDst;
++ if (skipdst_y >= (int)height)
++ return 1;
++ yDst = pDst->common.clip_region.extents.y1;
++ height -= skipdst_y;
++ }
++
++ if (xDst >= pDst->common.clip_region.extents.x2 ||
++ yDst >= pDst->common.clip_region.extents.y2)
++ {
++ return 1;
++ }
++
++ if (xDst + width > pDst->common.clip_region.extents.x2)
++ width = pDst->common.clip_region.extents.x2 - xDst;
++ if (yDst + height > pDst->common.clip_region.extents.y2)
++ height = pDst->common.clip_region.extents.y2 - yDst;
++
++ /* reference point is the center of the pixel */
++ v.vector[0] = pixman_int_to_fixed(xSrc) + pixman_fixed_1 / 2;
++ v.vector[1] = pixman_int_to_fixed(ySrc) + pixman_fixed_1 / 2;
++ v.vector[2] = pixman_fixed_1;
++
++ if (!pixman_transform_point_3d (pSrc->common.transform, &v))
++ return 0;
++
++ /* Round down to closest integer, ensuring that 0.5 rounds to 0, not 1 */
++ v.vector[0] -= pixman_fixed_e;
++ v.vector[1] -= pixman_fixed_e;
++
++ unit.vector[0] = pSrc->common.transform->matrix[0][0];
++ unit.vector[1] = pSrc->common.transform->matrix[1][1];
++
++ v.vector[0] += unit.vector[0] * skipdst_x;
++ v.vector[1] += unit.vector[1] * skipdst_y;
++
++ /* Check for possible fixed point arithmetics problems/overflows */
++ if (unit.vector[0] <= 0 || unit.vector[1] <= 0)
++ return 0;
++ if (width == 0 || height == 0)
++ return 0;
++ if ((uint32_t)width + (unit.vector[0] >> 16) >= 0x7FFF)
++ return 0;
++ if ((uint32_t)height + (unit.vector[1] >> 16) >= 0x7FFF)
++ return 0;
++
++ /* Horizontal source clipping is only supported for NORMAL repeat */
++ if (pSrc->common.repeat != PIXMAN_REPEAT_NORMAL
++ && fbTransformVerifyHorizontalClipping(pSrc, width, v.vector[0], unit.vector[0])) {
++ return 0;
++ }
++
++ /* Vertical source clipping is only supported for NONE and NORMAL repeat */
++ if (pSrc->common.repeat != PIXMAN_REPEAT_NONE && pSrc->common.repeat != PIXMAN_REPEAT_NORMAL
++ && fbTransformVerifyVerticalClipping(pSrc, height, v.vector[1], unit.vector[1])) {
++ return 0;
++ }
++
++ if (op == PIXMAN_OP_OVER && pSrc->bits.format == PIXMAN_a8r8g8b8
++ && (pDst->bits.format == PIXMAN_x8r8g8b8 || pDst->bits.format == PIXMAN_a8r8g8b8))
++ {
++ if (pSrc->common.filter == PIXMAN_FILTER_NEAREST && pSrc->common.repeat != PIXMAN_REPEAT_NORMAL) {
++ fbCompositeTransformNearestNonrotatedAffineTrivialclipOver_8888x8888(
++ pSrc, pDst, xSrc, ySrc, xDst, yDst, width, height,
++ v.vector[0], v.vector[1], unit.vector[0], unit.vector[1]);
++ return 1;
++ }
++ if (pSrc->common.filter == PIXMAN_FILTER_NEAREST && pSrc->common.repeat == PIXMAN_REPEAT_NORMAL) {
++ fbCompositeTransformNearestNonrotatedAffineTrivialclipRepeatOver_8888x8888(
++ pSrc, pDst, xSrc, ySrc, xDst, yDst, width, height,
++ v.vector[0], v.vector[1], unit.vector[0], unit.vector[1]);
++ return 1;
++ }
++ }
++
++ if (op == PIXMAN_OP_SRC && (pSrc->bits.format == PIXMAN_x8r8g8b8 || pSrc->bits.format == PIXMAN_a8r8g8b8)
++ && (pDst->bits.format == PIXMAN_x8r8g8b8 || pDst->bits.format == pSrc->bits.format))
++ {
++ if (pSrc->common.filter == PIXMAN_FILTER_NEAREST && pSrc->common.repeat != PIXMAN_REPEAT_NORMAL) {
++ fbCompositeTransformNearestNonrotatedAffineTrivialclipSrc_8888x8888(
++ pSrc, pDst, xSrc, ySrc, xDst, yDst, width, height,
++ v.vector[0], v.vector[1], unit.vector[0], unit.vector[1]);
++ return 1;
++ }
++ if (pSrc->common.filter == PIXMAN_FILTER_NEAREST && pSrc->common.repeat == PIXMAN_REPEAT_NORMAL) {
++ fbCompositeTransformNearestNonrotatedAffineTrivialclipRepeatSrc_8888x8888(
++ pSrc, pDst, xSrc, ySrc, xDst, yDst, width, height,
++ v.vector[0], v.vector[1], unit.vector[0], unit.vector[1]);
++ return 1;
++ }
++ }
++
++ if (op == PIXMAN_OP_OVER && pSrc->bits.format == PIXMAN_a8r8g8b8 && pDst->bits.format == PIXMAN_r5g6b5)
++ {
++ if (pSrc->common.filter == PIXMAN_FILTER_NEAREST && pSrc->common.repeat != PIXMAN_REPEAT_NORMAL) {
++ fbCompositeTransformNearestNonrotatedAffineTrivialclipOver_8888x0565(
++ pSrc, pDst, xSrc, ySrc, xDst, yDst, width, height,
++ v.vector[0], v.vector[1], unit.vector[0], unit.vector[1]);
++ return 1;
++ }
++ if (pSrc->common.filter == PIXMAN_FILTER_NEAREST && pSrc->common.repeat == PIXMAN_REPEAT_NORMAL) {
++ fbCompositeTransformNearestNonrotatedAffineTrivialclipRepeatOver_8888x0565(
++ pSrc, pDst, xSrc, ySrc, xDst, yDst, width, height,
++ v.vector[0], v.vector[1], unit.vector[0], unit.vector[1]);
++ return 1;
++ }
++ }
++
++ if (op == PIXMAN_OP_SRC && pSrc->bits.format == PIXMAN_r5g6b5 && pDst->bits.format == PIXMAN_r5g6b5)
++ {
++ if (pSrc->common.filter == PIXMAN_FILTER_NEAREST && pSrc->common.repeat != PIXMAN_REPEAT_NORMAL) {
++ fbCompositeTransformNearestNonrotatedAffineTrivialclipSrc_0565x0565(
++ pSrc, pDst, xSrc, ySrc, xDst, yDst, width, height,
++ v.vector[0], v.vector[1], unit.vector[0], unit.vector[1]);
++ return 1;
++ }
++ if (pSrc->common.filter == PIXMAN_FILTER_NEAREST && pSrc->common.repeat == PIXMAN_REPEAT_NORMAL) {
++ fbCompositeTransformNearestNonrotatedAffineTrivialclipRepeatSrc_0565x0565(
++ pSrc, pDst, xSrc, ySrc, xDst, yDst, width, height,
++ v.vector[0], v.vector[1], unit.vector[0], unit.vector[1]);
++ return 1;
++ }
++ }
++
++ if (op == PIXMAN_OP_SRC && (pSrc->bits.format == PIXMAN_x8r8g8b8 || pSrc->bits.format == PIXMAN_a8r8g8b8)
++ && pDst->bits.format == PIXMAN_r5g6b5)
++ {
++ if (pSrc->common.filter == PIXMAN_FILTER_NEAREST && pSrc->common.repeat != PIXMAN_REPEAT_NORMAL) {
++ fbCompositeTransformNearestNonrotatedAffineTrivialclipSrc_8888x0565(
++ pSrc, pDst, xSrc, ySrc, xDst, yDst, width, height,
++ v.vector[0], v.vector[1], unit.vector[0], unit.vector[1]);
++ return 1;
++ }
++ if (pSrc->common.filter == PIXMAN_FILTER_NEAREST && pSrc->common.repeat == PIXMAN_REPEAT_NORMAL) {
++ fbCompositeTransformNearestNonrotatedAffineTrivialclipRepeatSrc_8888x0565(
++ pSrc, pDst, xSrc, ySrc, xDst, yDst, width, height,
++ v.vector[0], v.vector[1], unit.vector[0], unit.vector[1]);
++ return 1;
++ }
++ }
++
++ /* No fastpath scaling implemented for this case */
++ return 0;
++}
++
+ static void
+ fast_path_composite (pixman_implementation_t *imp,
+ pixman_op_t op,
+@@ -1279,6 +2266,30 @@ fast_path_composite (pixman_implementation_t *imp,
+ if (src->type == BITS
+ && src->common.transform
+ && !mask
++ && !src->common.alpha_map && !dest->common.alpha_map
++ && (src->common.filter == PIXMAN_FILTER_NEAREST)
++ && !src->bits.read_func && !src->bits.write_func
++ && !dest->bits.read_func && !dest->bits.write_func)
++ {
++ /* ensure that the transform matrix only has a scale */
++ if (src->common.transform->matrix[0][1] == 0 &&
++ src->common.transform->matrix[1][0] == 0 &&
++ src->common.transform->matrix[2][0] == 0 &&
++ src->common.transform->matrix[2][1] == 0 &&
++ src->common.transform->matrix[2][2] == pixman_fixed_1 &&
++ dest->common.clip_region.data == NULL)
++ {
++ if (fbCompositeTransformNonrotatedAffineTrivialclip (op, src, mask, dest,
++ src_x, src_y, mask_x, mask_y, dest_x, dest_y, width, height))
++ {
++ return;
++ }
++ }
++ }
++
++ if (src->type == BITS
++ && src->common.transform
++ && !mask
+ && op == PIXMAN_OP_SRC
+ && !src->common.alpha_map && !dest->common.alpha_map
+ && (src->common.filter == PIXMAN_FILTER_NEAREST)
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman/over-n-8-0565.patch b/recipes/obsolete/xorg/xorg-lib/pixman/over-n-8-0565.patch
new file mode 100644
index 0000000000..3911068d94
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman/over-n-8-0565.patch
@@ -0,0 +1,231 @@
+From de2221a32d0b6628116565563f7b4ccd0a44e8b6 Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 04 Mar 2010 23:20:25 +0000
+Subject: ARM: added 'armv6_composite_over_n_8_0565' fast path
+
+Provides ~3x performance improvement when working with
+data in L1 cache and memory. This fast path is important
+for fonts rendering when using 16bpp desktop.
+
+Microbenchmark from N800 (ARM11 @ 400MHz), measured in MPix/s:
+
+before:
+
+ over_n_8_0565 = L1: 2.99 M: 2.86
+
+after:
+
+ over_n_8_0565 = L1: 9.07 M: 8.05
+---
+diff --git a/pixman/pixman-arm-simd.c b/pixman/pixman-arm-simd.c
+index 09a2888..c375c01 100644
+--- a/pixman/pixman-arm-simd.c
++++ b/pixman/pixman-arm-simd.c
+@@ -419,6 +419,193 @@ arm_composite_over_n_8_8888 (pixman_implementation_t * impl,
+ }
+ }
+
++#if defined(__ARM_EABI__) && defined(__linux__)
++/*
++ * ARMv6 assembly optimized version of 'composite_over_n_8_0565'. It is
++ * a bare metal 'naked' function which uses all the available CPU registers
++ * and is compatible with ARM EABI. It might (or might not) break when used
++ * with a different ABI, anyway it is better to be safe than sorry.
++ */
++static void __attribute__((naked)) armv6_composite_over_n_8_0565_asm (
++ uint16_t *dst, uint8_t *mask, uint32_t src, int w,
++ int dst_stride_delta, int mask_stride_delta, int h)
++{
++ asm volatile (
++ ".macro composite_internal_armv6_asm opaque_flag\n"
++ /* save all registers (8 words) to stack */
++ "stmdb sp!, {r4-r11, ip, lr}\n"
++ /* some register aliases for better readability */
++ "DST .req r0\n"
++ "MASK .req r1\n"
++ "S .req r2\n"
++ "W .req r3\n"
++ "A .req r8\n"
++ "D .req r10\n"
++ "C0000FF .req r11\n"
++ "C00001F .req r9\n"
++ "C800080 .req ip\n"
++ "CE000E0 .req lr\n"
++ /* precalculate some stuff and put it on stack */
++ "mov r6, #0xF8\n"
++ "mov r7, #0xFC\n"
++
++ "str W, [sp, #-8]!\n"
++
++ ".if \\opaque_flag\n"
++ /* precalculate and save it to stack for later use:
++ * ((src >> 3) & 0x001F) |
++ * ((src >> 5) & 0x07E0) |
++ * ((src >> 8) & 0xF800)
++ */
++ "mov A, #0x1F\n"
++ "and D, A, S, lsr #3\n"
++ "and r4, S, #0xF80000\n"
++ "and r5, S, #0xFC00\n"
++ "orr D, r4, lsr #8\n"
++ "orr D, r5, lsr #5\n"
++ "str D, [sp, #4]\n"
++ ".endif\n"
++
++ "ldr D, [sp, #(8 + 10*4 + 8)]\n" /* h */
++ "ldr A, =0xFF00FF\n"
++ "ldr C800080, =0x800080\n"
++ "ldr CE000E0, =0xE000E0\n"
++ "ldr C0000FF, =0xFF\n"
++ "ldr C00001F, =0x1F\n"
++ "and r4, A, S\n" /* r4 = src & 0x00FF00FF */
++ "and r5, A, S, lsr #8\n" /* r5 = (src >> 8) & 0x00FF00FF */
++ "stmdb sp!, {r4, r5, r6, r7}\n"
++ "0:\n"
++ "subs D, D, #1\n"
++ "blt 6f\n"
++ "1:\n"
++ "subs W, W, #1\n"
++ "blt 5f\n"
++ "2:\n"
++ "ldrb A, [MASK], #1\n"
++ "ldmia sp, {r4, r5, r6, r7}\n" /* load constants from stack */
++ "add DST, DST, #2\n"
++ "cmp A, #0\n"
++ "beq 1b\n"
++
++ ".if \\opaque_flag\n"
++ "cmp A, #0xFF\n"
++ "bne 3f\n"
++ "ldr D, [sp, #(4*4 + 4)]\n" /* load precalculated value */
++ "subs W, #1\n"
++ "strh D, [DST, #-2]\n"
++ "bge 2b\n"
++ ".endif\n"
++
++ "3:\n"
++ "ldrh D, [DST, #-2]\n"
++ "mla r4, A, r4, C800080\n"
++ "mla r5, A, r5, C800080\n"
++ "and r6, r6, D, lsl #3\n" /* & 0xF8 */
++ "and r7, r7, D, lsr #3\n" /* & 0xFC */
++ "and D, D, #0xF800\n"
++ "bic S, r4, #0xFF0000\n"
++ "bic A, r5, #0xFF0000\n"
++ "add r4, r4, S, lsr #8\n"
++ "add r5, r5, A, lsr #8\n"
++
++ "and S, r7, #0xC0\n"
++ "orr r6, r6, D, lsl #8\n"
++ "and D, r6, CE000E0\n"
++ "eor A, C0000FF, r5, lsr #24\n"
++ "orr r6, D, lsr #5\n"
++ "orr r7, S, lsr #6\n"
++
++ "mla r6, A, r6, C800080\n"
++ "mla r7, A, r7, C800080\n"
++ "subs W, #1\n"
++ "bic D, r6, #0xFF0000\n"
++ "bic A, r7, #0xFF0000\n"
++ "add r6, r6, D, lsr #8\n"
++ "uqadd8 r4, r4, r6\n"
++ "add r7, r7, A, lsr #8\n"
++ "uqadd8 r5, r5, r7\n"
++ "and D, C00001F, r4, lsr #11\n"
++ "and r4, r4, #0xF8000000\n"
++ "and r5, r5, #0xFC00\n"
++ "orr D, r4, lsr #16\n"
++ "orr D, r5, lsr #5\n"
++ "strh D, [DST, #-2]\n"
++ "bge 2b\n"
++ "5:\n"
++ "ldr r6, [sp, #(4*4 + 8 + 10*4 + 8)]\n" /* h */
++ "ldr r4, [sp, #(4*4 + 8 + 10*4 + 4)]\n" /* mask stride */
++ "ldr r5, [sp, #(4*4 + 8 + 10*4 + 0)]\n" /* dst stride */
++ "ldr W, [sp, #(4*4)]\n"
++ "subs r6, r6, #1\n" /* h */
++ "str r6, [sp, #(4*4 + 8 + 10*4 + 8)]\n" /* h */
++ "add MASK, MASK, r4\n"
++ "add DST, DST, r5, lsl #1\n"
++ "bgt 1b\n"
++ "6:\n"
++ "add sp, sp, #(4*4 + 8)\n"
++ /* restore all registers and return */
++ "ldmia sp!, {r4-r11, ip, pc}\n"
++ ".unreq DST\n"
++ ".unreq MASK\n"
++ ".unreq S\n"
++ ".unreq W\n"
++ ".unreq A\n"
++ ".unreq D\n"
++ ".unreq C0000FF\n"
++ ".unreq C00001F\n"
++ ".unreq C800080\n"
++ ".unreq CE000E0\n"
++ ".endm\n"
++
++ "mov ip, r2, lsr #24\n"
++ "cmp ip, #0xFF\n"
++ "beq 9f\n"
++ "composite_internal_armv6_asm 0\n"
++ "9:\n"
++ "composite_internal_armv6_asm 1\n"
++ ".ltorg\n"
++ ".purgem composite_internal_armv6_asm\n"
++ );
++}
++
++static void
++armv6_composite_over_n_8_0565 (pixman_implementation_t * impl,
++ pixman_op_t op,
++ pixman_image_t * src_image,
++ pixman_image_t * mask_image,
++ pixman_image_t * dst_image,
++ int32_t src_x,
++ int32_t src_y,
++ int32_t mask_x,
++ int32_t mask_y,
++ int32_t dest_x,
++ int32_t dest_y,
++ int32_t width,
++ int32_t height)
++{
++ uint32_t src;
++ uint16_t *dst;
++ uint8_t *mask;
++ int dst_stride, mask_stride;
++
++ src = _pixman_image_get_solid (src_image, dst_image->bits.format);
++
++ /* bail out if fully transparent */
++ if (src == 0)
++ return;
++
++ PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint16_t,
++ dst_stride, dst, 1);
++ PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, uint8_t,
++ mask_stride, mask, 1);
++
++ armv6_composite_over_n_8_0565_asm (dst, mask, src, width,
++ dst_stride - width, mask_stride - width, height);
++}
++
++#endif
++
+ static const pixman_fast_path_t arm_simd_fast_paths[] =
+ {
+ PIXMAN_STD_FAST_PATH (OVER, a8r8g8b8, null, a8r8g8b8, arm_composite_over_8888_8888),
+@@ -434,7 +621,10 @@ static const pixman_fast_path_t arm_simd_fast_paths[] =
+ PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8r8g8b8, arm_composite_over_n_8_8888),
+ PIXMAN_STD_FAST_PATH (OVER, solid, a8, a8b8g8r8, arm_composite_over_n_8_8888),
+ PIXMAN_STD_FAST_PATH (OVER, solid, a8, x8b8g8r8, arm_composite_over_n_8_8888),
+-
++#if defined(__ARM_EABI__) && defined(__linux__)
++ PIXMAN_STD_FAST_PATH (OVER, solid, a8, r5g6b5, armv6_composite_over_n_8_0565),
++ PIXMAN_STD_FAST_PATH (OVER, solid, a8, b5g6r5, armv6_composite_over_n_8_0565),
++#endif
+ { PIXMAN_OP_NONE },
+ };
+
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman/pixman-28986.patch b/recipes/obsolete/xorg/xorg-lib/pixman/pixman-28986.patch
new file mode 100644
index 0000000000..f5ba4c302e
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman/pixman-28986.patch
@@ -0,0 +1,32 @@
+From 7b7860d61fb1526acdf010dd8fd644bbf1396b9e Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Fri, 28 Aug 2009 22:34:21 +0300
+Subject: [PATCH] ARM: workaround for gcc bug in vshll_n_u8 intrinsic
+
+Some versions of gcc (cs2009q1, 4.4.1) incorrectly reject
+shift operand having value >= 8, claiming that it is out of
+range. So inline assembly is used as a workaround.
+---
+ pixman/pixman-arm-neon.c | 6 ++++++
+ 1 files changed, 6 insertions(+), 0 deletions(-)
+
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 4125d1b..3e7f566 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -64,6 +64,12 @@ unpack0565 (uint16x8_t rgb)
+ return res;
+ }
+
++#ifdef USE_GCC_INLINE_ASM
++/* Some versions of gcc have problems with vshll_n_u8 intrinsic (Bug 23576) */
++#define vshll_n_u8(a, n) ({ uint16x8_t r; \
++ asm ("vshll.u8 %q0, %P1, %2\n" : "=w" (r) : "w" (a), "i" (n)); r; })
++#endif
++
+ static force_inline uint16x8_t
+ pack0565 (uint8x8x4_t s)
+ {
+--
+1.5.4.3
+
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman/prefetch.patch b/recipes/obsolete/xorg/xorg-lib/pixman/prefetch.patch
new file mode 100644
index 0000000000..c2e856ec25
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman/prefetch.patch
@@ -0,0 +1,298 @@
+From d0044bfbd596f22ed1560579ea6537b39f3dc1af Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Thu, 29 Oct 2009 19:06:42 +0000
+Subject: ARM: Don't emit prefetch code if prefetch distance is set to 0
+
+Also it is now possible to disable prefetch globally with
+a configuration macro
+---
+diff --git a/pixman/pixman-arm-neon-asm.S b/pixman/pixman-arm-neon-asm.S
+index bca499a..35e6a7e 100644
+--- a/pixman/pixman-arm-neon-asm.S
++++ b/pixman/pixman-arm-neon-asm.S
+@@ -219,33 +219,33 @@
+ vshrn.u16 d7, q2, #3
+ vsli.u16 q2, q2, #5
+ vshll.u8 q14, d16, #8
+- add PF_X, PF_X, #8
++ PF add PF_X, PF_X, #8
+ vshll.u8 q8, d19, #8
+- tst PF_CTL, #0xF
++ PF tst PF_CTL, #0xF
+ vsri.u8 d6, d6, #5
+- addne PF_X, PF_X, #8
++ PF addne PF_X, PF_X, #8
+ vmvn.8 d3, d3
+- subne PF_CTL, PF_CTL, #1
++ PF subne PF_CTL, PF_CTL, #1
+ vsri.u8 d7, d7, #6
+ vshrn.u16 d30, q2, #2
+ vmull.u8 q10, d3, d6
+- pld [PF_SRC, PF_X, lsl #src_bpp_shift]
++ PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift]
+ vmull.u8 q11, d3, d7
+ vmull.u8 q12, d3, d30
+- pld [PF_DST, PF_X, lsl #dst_bpp_shift]
++ PF pld, [PF_DST, PF_X, lsl #dst_bpp_shift]
+ vsri.u16 q14, q8, #5
+- cmp PF_X, ORIG_W
++ PF cmp PF_X, ORIG_W
+ vshll.u8 q9, d18, #8
+ vrshr.u16 q13, q10, #8
+- subge PF_X, PF_X, ORIG_W
++ PF subge PF_X, PF_X, ORIG_W
+ vrshr.u16 q3, q11, #8
+ vrshr.u16 q15, q12, #8
+- subges PF_CTL, PF_CTL, #0x10
++ PF subges PF_CTL, PF_CTL, #0x10
+ vsri.u16 q14, q9, #11
+- ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
++ PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
+ vraddhn.u16 d20, q10, q13
+ vraddhn.u16 d23, q11, q3
+- ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
++ PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
+ vraddhn.u16 d22, q12, q15
+ vst1.16 {d28, d29}, [DST_W, :128]!
+ .endm
+@@ -323,20 +323,20 @@ generate_composite_function \
+
+ .macro pixman_composite_src_8888_0565_process_pixblock_tail_head
+ vsri.u16 q14, q8, #5
+- add PF_X, PF_X, #8
+- tst PF_CTL, #0xF
++ PF add PF_X, PF_X, #8
++ PF tst PF_CTL, #0xF
+ vld4.8 {d0, d1, d2, d3}, [SRC]!
+- addne PF_X, PF_X, #8
+- subne PF_CTL, PF_CTL, #1
++ PF addne PF_X, PF_X, #8
++ PF subne PF_CTL, PF_CTL, #1
+ vsri.u16 q14, q9, #11
+- cmp PF_X, ORIG_W
+- pld [PF_SRC, PF_X, lsl #src_bpp_shift]
++ PF cmp PF_X, ORIG_W
++ PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift]
+ vshll.u8 q8, d1, #8
+ vst1.16 {d28, d29}, [DST_W, :128]!
+- subge PF_X, PF_X, ORIG_W
+- subges PF_CTL, PF_CTL, #0x10
++ PF subge PF_X, PF_X, ORIG_W
++ PF subges PF_CTL, PF_CTL, #0x10
+ vshll.u8 q14, d2, #8
+- ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
++ PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
+ vshll.u8 q9, d0, #8
+ .endm
+
+@@ -363,20 +363,20 @@ generate_composite_function \
+
+ .macro pixman_composite_add_8000_8000_process_pixblock_tail_head
+ vld1.8 {d0, d1, d2, d3}, [SRC]!
+- add PF_X, PF_X, #32
+- tst PF_CTL, #0xF
++ PF add PF_X, PF_X, #32
++ PF tst PF_CTL, #0xF
+ vld1.8 {d4, d5, d6, d7}, [DST_R, :128]!
+- addne PF_X, PF_X, #32
+- subne PF_CTL, PF_CTL, #1
++ PF addne PF_X, PF_X, #32
++ PF subne PF_CTL, PF_CTL, #1
+ vst1.8 {d28, d29, d30, d31}, [DST_W, :128]!
+- cmp PF_X, ORIG_W
+- pld [PF_SRC, PF_X, lsl #src_bpp_shift]
+- pld [PF_DST, PF_X, lsl #dst_bpp_shift]
+- subge PF_X, PF_X, ORIG_W
+- subges PF_CTL, PF_CTL, #0x10
++ PF cmp PF_X, ORIG_W
++ PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift]
++ PF pld, [PF_DST, PF_X, lsl #dst_bpp_shift]
++ PF subge PF_X, PF_X, ORIG_W
++ PF subges PF_CTL, PF_CTL, #0x10
+ vqadd.u8 q14, q0, q2
+- ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
+- ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
++ PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
++ PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
+ vqadd.u8 q15, q1, q3
+ .endm
+
+@@ -418,32 +418,32 @@ generate_composite_function \
+ .macro pixman_composite_over_8888_8888_process_pixblock_tail_head
+ vld4.8 {d4, d5, d6, d7}, [DST_R, :128]!
+ vrshr.u16 q14, q8, #8
+- add PF_X, PF_X, #8
+- tst PF_CTL, #0xF
++ PF add PF_X, PF_X, #8
++ PF tst PF_CTL, #0xF
+ vrshr.u16 q15, q9, #8
+ vrshr.u16 q12, q10, #8
+ vrshr.u16 q13, q11, #8
+- addne PF_X, PF_X, #8
+- subne PF_CTL, PF_CTL, #1
++ PF addne PF_X, PF_X, #8
++ PF subne PF_CTL, PF_CTL, #1
+ vraddhn.u16 d28, q14, q8
+ vraddhn.u16 d29, q15, q9
+- cmp PF_X, ORIG_W
++ PF cmp PF_X, ORIG_W
+ vraddhn.u16 d30, q12, q10
+ vraddhn.u16 d31, q13, q11
+ vqadd.u8 q14, q0, q14
+ vqadd.u8 q15, q1, q15
+ vld4.8 {d0, d1, d2, d3}, [SRC]!
+- pld [PF_SRC, PF_X, lsl #src_bpp_shift]
++ PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift]
+ vmvn.8 d22, d3
+- pld [PF_DST, PF_X, lsl #dst_bpp_shift]
++ PF pld, [PF_DST, PF_X, lsl #dst_bpp_shift]
+ vst4.8 {d28, d29, d30, d31}, [DST_W, :128]!
+- subge PF_X, PF_X, ORIG_W
++ PF subge PF_X, PF_X, ORIG_W
+ vmull.u8 q8, d22, d4
+- subges PF_CTL, PF_CTL, #0x10
++ PF subges PF_CTL, PF_CTL, #0x10
+ vmull.u8 q9, d22, d5
+- ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
++ PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
+ vmull.u8 q10, d22, d6
+- ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
++ PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
+ vmull.u8 q11, d22, d7
+ .endm
+
+diff --git a/pixman/pixman-arm-neon-asm.h b/pixman/pixman-arm-neon-asm.h
+index d276ab9..a2941ae 100644
+--- a/pixman/pixman-arm-neon-asm.h
++++ b/pixman/pixman-arm-neon-asm.h
+@@ -58,6 +58,11 @@
+ #define RESPECT_STRICT_ALIGNMENT 1
+
+ /*
++ * If set to nonzero value, prefetch is globally disabled
++ */
++#define PREFETCH_GLOBALLY_DISABLED 0
++
++/*
+ * Definitions of supplementary pixld/pixst macros (for partial load/store of
+ * pixel data)
+ */
+@@ -218,37 +223,43 @@
+ * pixels processing like simple copy. Anyway, having prefetch is a must
+ * when working with graphics data.
+ */
++.macro PF a, x:vararg
++.if (ADVANCED_PREFETCH_ENABLED != 0) && (PREFETCH_GLOBALLY_DISABLED == 0)
++ a x
++.endif
++.endm
++
+ .macro cache_preload std_increment, boost_increment
+ .if (src_bpp_shift >= 0) || (dst_r_bpp != 0) || (mask_bpp_shift >= 0)
+ .if regs_shortage
+- ldr ORIG_W, [sp] /* If we are short on regs, ORIG_W is kept on stack */
++ PF ldr ORIG_W, [sp] /* If we are short on regs, ORIG_W is kept on stack */
+ .endif
+ .if std_increment != 0
+- add PF_X, PF_X, #std_increment
++ PF add PF_X, PF_X, #std_increment
+ .endif
+- tst PF_CTL, #0xF
+- addne PF_X, PF_X, #boost_increment
+- subne PF_CTL, PF_CTL, #1
+- cmp PF_X, ORIG_W
++ PF tst PF_CTL, #0xF
++ PF addne PF_X, PF_X, #boost_increment
++ PF subne PF_CTL, PF_CTL, #1
++ PF cmp PF_X, ORIG_W
+ .if src_bpp_shift >= 0
+- pld [PF_SRC, PF_X, lsl #src_bpp_shift]
++ PF pld, [PF_SRC, PF_X, lsl #src_bpp_shift]
+ .endif
+ .if dst_r_bpp != 0
+- pld [PF_DST, PF_X, lsl #dst_bpp_shift]
++ PF pld, [PF_DST, PF_X, lsl #dst_bpp_shift]
+ .endif
+ .if mask_bpp_shift >= 0
+- pld [PF_MASK, PF_X, lsl #mask_bpp_shift]
++ PF pld, [PF_MASK, PF_X, lsl #mask_bpp_shift]
+ .endif
+- subge PF_X, PF_X, ORIG_W
+- subges PF_CTL, PF_CTL, #0x10
++ PF subge PF_X, PF_X, ORIG_W
++ PF subges PF_CTL, PF_CTL, #0x10
+ .if src_bpp_shift >= 0
+- ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
++ PF ldrgeb DUMMY, [PF_SRC, SRC_STRIDE, lsl #src_bpp_shift]!
+ .endif
+ .if dst_r_bpp != 0
+- ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
++ PF ldrgeb DUMMY, [PF_DST, DST_STRIDE, lsl #dst_bpp_shift]!
+ .endif
+ .if mask_bpp_shift >= 0
+- ldrgeb DUMMY, [PF_MASK, MASK_STRIDE, lsl #mask_bpp_shift]!
++ PF ldrgeb DUMMY, [PF_MASK, MASK_STRIDE, lsl #mask_bpp_shift]!
+ .endif
+ .endif
+ .endm
+@@ -297,6 +308,12 @@ fname:
+ PF_DST .req r12
+ PF_MASK .req r14
+
++.if prefetch_distance == 0
++ .set ADVANCED_PREFETCH_ENABLED, 0
++.else
++ .set ADVANCED_PREFETCH_ENABLED, 1
++.endif
++
+ .if mask_bpp == 0
+ ORIG_W .req r7 /* saved original width */
+ DUMMY .req r8 /* temporary register */
+@@ -374,12 +391,12 @@ fname:
+ ldr MASK_STRIDE, [sp, #52]
+ .endif
+ mov DST_R, DST_W
+- mov PF_SRC, SRC
+- mov PF_DST, DST_R
+- mov PF_MASK, MASK
+- mov PF_CTL, H, lsl #4
+- /* pf_ctl = 10 | ((h - 1) << 4) */
+- add PF_CTL, #(prefetch_distance - 0x10)
++ PF mov PF_SRC, SRC
++ PF mov PF_DST, DST_R
++ PF mov PF_MASK, MASK
++ /* PF_CTL = prefetch_distance | ((h - 1) << 4) */
++ PF mov PF_CTL, H, lsl #4
++ PF add PF_CTL, #(prefetch_distance - 0x10)
+
+ init
+ .if regs_shortage
+@@ -412,7 +429,7 @@ fname:
+ .else
+ add DST_R, DST_R, #lowbit
+ .endif
+- add PF_X, PF_X, #(lowbit * 8 / dst_w_bpp)
++ PF add PF_X, PF_X, #(lowbit * 8 / dst_w_bpp)
+ sub W, W, #(lowbit * 8 / dst_w_bpp)
+ 1:
+ .endif
+@@ -444,7 +461,7 @@ fname:
+ (src_basereg - pixblock_size * src_bpp / 64), SRC
+ pixld pixblock_size, mask_bpp, \
+ (mask_basereg - pixblock_size * mask_bpp / 64), MASK
+- add PF_X, PF_X, #pixblock_size
++ PF add PF_X, PF_X, #pixblock_size
+ process_pixblock_head
+ cache_preload 0, pixblock_size
+ subs W, W, #(pixblock_size * 2)
+@@ -468,7 +485,7 @@ fname:
+ pixld chunk_size, src_bpp, src_basereg, SRC
+ pixld chunk_size, mask_bpp, mask_basereg, MASK
+ pixld_a chunk_size, dst_r_bpp, dst_r_basereg, DST_R
+- add PF_X, PF_X, #chunk_size
++ PF add PF_X, PF_X, #chunk_size
+ 1:
+ .endif
+ .endr
+--
+cgit v0.8.2
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman/remove-broken.patch b/recipes/obsolete/xorg/xorg-lib/pixman/remove-broken.patch
new file mode 100644
index 0000000000..fd025b4bbd
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman/remove-broken.patch
@@ -0,0 +1,826 @@
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Sun, 26 Jul 2009 22:21:26 +0000 (+0300)
+Subject: ARM: Removal of unused/broken NEON code
+X-Git-Url: http://siarhei.siamashka.name/gitweb/?p=pixman.git;a=commitdiff_plain;h=7ef2322eefcccc28a2d45c0da22c0fee88b8f464
+
+ARM: Removal of unused/broken NEON code
+---
+
+diff --git a/pixman/pixman-arm-neon.c b/pixman/pixman-arm-neon.c
+index 4125d1b..9404c70 100644
+--- a/pixman/pixman-arm-neon.c
++++ b/pixman/pixman-arm-neon.c
+@@ -1895,710 +1895,6 @@ pixman_fill_neon (uint32_t *bits,
+ #endif
+ }
+
+-/* TODO: is there a more generic way of doing this being introduced? */
+-#define NEON_SCANLINE_BUFFER_PIXELS (1024)
+-
+-static inline void
+-neon_quadword_copy (void * dst,
+- void * src,
+- uint32_t count, /* of quadwords */
+- uint32_t trailer_count /* of bytes */)
+-{
+- uint8_t *t_dst = dst, *t_src = src;
+-
+- /* Uses aligned multi-register loads to maximise read bandwidth
+- * on uncached memory such as framebuffers
+- * The accesses do not have the aligned qualifiers, so that the copy
+- * may convert between aligned-uncached and unaligned-cached memory.
+- * It is assumed that the CPU can infer alignedness from the address.
+- */
+-
+-#ifdef USE_GCC_INLINE_ASM
+-
+- asm volatile (
+- " cmp %[count], #8 \n"
+- " blt 1f @ skip oversized fragments \n"
+- "0: @ start with eight quadwords at a time \n"
+- " sub %[count], %[count], #8 \n"
+- " vld1.8 {d16, d17, d18, d19}, [%[src]]! \n"
+- " vld1.8 {d20, d21, d22, d23}, [%[src]]! \n"
+- " vld1.8 {d24, d25, d26, d27}, [%[src]]! \n"
+- " vld1.8 {d28, d29, d30, d31}, [%[src]]! \n"
+- " cmp %[count], #8 \n"
+- " vst1.8 {d16, d17, d18, d19}, [%[dst]]! \n"
+- " vst1.8 {d20, d21, d22, d23}, [%[dst]]! \n"
+- " vst1.8 {d24, d25, d26, d27}, [%[dst]]! \n"
+- " vst1.8 {d28, d29, d30, d31}, [%[dst]]! \n"
+- " bge 0b \n"
+- "1: @ four quadwords \n"
+- " tst %[count], #4 \n"
+- " beq 2f @ skip oversized fragment \n"
+- " vld1.8 {d16, d17, d18, d19}, [%[src]]! \n"
+- " vld1.8 {d20, d21, d22, d23}, [%[src]]! \n"
+- " vst1.8 {d16, d17, d18, d19}, [%[dst]]! \n"
+- " vst1.8 {d20, d21, d22, d23}, [%[dst]]! \n"
+- "2: @ two quadwords \n"
+- " tst %[count], #2 \n"
+- " beq 3f @ skip oversized fragment \n"
+- " vld1.8 {d16, d17, d18, d19}, [%[src]]! \n"
+- " vst1.8 {d16, d17, d18, d19}, [%[dst]]! \n"
+- "3: @ one quadword \n"
+- " tst %[count], #1 \n"
+- " beq 4f @ skip oversized fragment \n"
+- " vld1.8 {d16, d17}, [%[src]]! \n"
+- " vst1.8 {d16, d17}, [%[dst]]! \n"
+- "4: @ end \n"
+-
+- /* Clobbered input registers marked as input/outputs */
+- : [dst] "+r" (t_dst), [src] "+r" (t_src), [count] "+r" (count)
+-
+- /* No unclobbered inputs */
+- :
+-
+- /* Clobbered vector registers */
+- : "d16", "d17", "d18", "d19", "d20", "d21", "d22", "d23", "d24", "d25",
+- "d26", "d27", "d28", "d29", "d30", "d31", "cc", "memory");
+-
+-#else
+-
+- while (count >= 8)
+- {
+- uint8x16x4_t t1 = vld4q_u8 (t_src);
+- uint8x16x4_t t2 = vld4q_u8 (t_src + sizeof(uint8x16x4_t));
+-
+- t_src += sizeof(uint8x16x4_t) * 2;
+- vst4q_u8 (t_dst, t1);
+- vst4q_u8 (t_dst + sizeof(uint8x16x4_t), t2);
+- t_dst += sizeof(uint8x16x4_t) * 2;
+- count -= 8;
+- }
+-
+- if (count & 4)
+- {
+- uint8x16x4_t t1 = vld4q_u8 (t_src);
+-
+- t_src += sizeof(uint8x16x4_t);
+- vst4q_u8 (t_dst, t1);
+- t_dst += sizeof(uint8x16x4_t);
+- }
+-
+- if (count & 2)
+- {
+- uint8x8x4_t t1 = vld4_u8 (t_src);
+-
+- t_src += sizeof(uint8x8x4_t);
+- vst4_u8 (t_dst, t1);
+- t_dst += sizeof(uint8x8x4_t);
+- }
+-
+- if (count & 1)
+- {
+- uint8x16_t t1 = vld1q_u8 (t_src);
+-
+- t_src += sizeof(uint8x16_t);
+- vst1q_u8 (t_dst, t1);
+- t_dst += sizeof(uint8x16_t);
+- }
+-
+-#endif /* !USE_GCC_INLINE_ASM */
+-
+- if (trailer_count)
+- {
+- if (trailer_count & 8)
+- {
+- uint8x8_t t1 = vld1_u8 (t_src);
+-
+- t_src += sizeof(uint8x8_t);
+- vst1_u8 (t_dst, t1);
+- t_dst += sizeof(uint8x8_t);
+- }
+-
+- if (trailer_count & 4)
+- {
+- *((uint32_t*) t_dst) = *((uint32_t*) t_src);
+-
+- t_dst += 4;
+- t_src += 4;
+- }
+-
+- if (trailer_count & 2)
+- {
+- *((uint16_t*) t_dst) = *((uint16_t*) t_src);
+-
+- t_dst += 2;
+- t_src += 2;
+- }
+-
+- if (trailer_count & 1)
+- {
+- *t_dst++ = *t_src++;
+- }
+- }
+-}
+-
+-static inline void
+-solid_over_565_8_pix_neon (uint32_t glyph_colour,
+- uint16_t *dest,
+- uint8_t * in_mask,
+- uint32_t dest_stride, /* bytes, not elements */
+- uint32_t mask_stride,
+- uint32_t count /* 8-pixel groups */)
+-{
+- /* Inner loop of glyph blitter (solid colour, alpha mask) */
+-
+-#ifdef USE_GCC_INLINE_ASM
+-
+- asm volatile (
+- " vld4.8 {d20[], d21[], d22[], d23[]}, [%[glyph_colour]] @ splat solid colour components \n"
+- "0: @ loop \n"
+- " vld1.16 {d0, d1}, [%[dest]] @ load first pixels from framebuffer \n"
+- " vld1.8 {d17}, [%[in_mask]] @ load alpha mask of glyph \n"
+- " vmull.u8 q9, d17, d23 @ apply glyph colour alpha to mask \n"
+- " vshrn.u16 d17, q9, #8 @ reformat it to match original mask \n"
+- " vmvn d18, d17 @ we need the inverse mask for the background \n"
+- " vsli.u16 q3, q0, #5 @ duplicate framebuffer blue bits \n"
+- " vshrn.u16 d2, q0, #8 @ unpack red from framebuffer pixels \n"
+- " vshrn.u16 d4, q0, #3 @ unpack green \n"
+- " vsri.u8 d2, d2, #5 @ duplicate red bits (extend 5 to 8) \n"
+- " vshrn.u16 d6, q3, #2 @ unpack extended blue (truncate 10 to 8) \n"
+- " vsri.u8 d4, d4, #6 @ duplicate green bits (extend 6 to 8) \n"
+- " vmull.u8 q1, d2, d18 @ apply inverse mask to background red... \n"
+- " vmull.u8 q2, d4, d18 @ ...green... \n"
+- " vmull.u8 q3, d6, d18 @ ...blue \n"
+- " subs %[count], %[count], #1 @ decrement/test loop counter \n"
+- " vmlal.u8 q1, d17, d22 @ add masked foreground red... \n"
+- " vmlal.u8 q2, d17, d21 @ ...green... \n"
+- " vmlal.u8 q3, d17, d20 @ ...blue \n"
+- " add %[in_mask], %[in_mask], %[mask_stride] @ advance mask pointer, while we wait \n"
+- " vsri.16 q1, q2, #5 @ pack green behind red \n"
+- " vsri.16 q1, q3, #11 @ pack blue into pixels \n"
+- " vst1.16 {d2, d3}, [%[dest]] @ store composited pixels \n"
+- " add %[dest], %[dest], %[dest_stride] @ advance framebuffer pointer \n"
+- " bne 0b @ next please \n"
+-
+- /* Clobbered registers marked as input/outputs */
+- : [dest] "+r" (dest), [in_mask] "+r" (in_mask), [count] "+r" (count)
+-
+- /* Inputs */
+- : [dest_stride] "r" (dest_stride), [mask_stride] "r" (mask_stride), [glyph_colour] "r" (&glyph_colour)
+-
+- /* Clobbers, including the inputs we modify, and potentially lots of memory */
+- : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d17", "d18", "d19",
+- "d20", "d21", "d22", "d23", "d24", "d25", "cc", "memory"
+- );
+-
+-#else
+-
+- uint8x8x4_t solid_colour = vld4_dup_u8 ((uint8_t*) &glyph_colour);
+-
+- while (count--)
+- {
+- uint16x8_t pixels = vld1q_u16 (dest);
+- uint8x8_t mask = vshrn_n_u16 (vmull_u8 (solid_colour.val[3], vld1_u8 (in_mask)), 8);
+- uint8x8_t mask_image = vmvn_u8 (mask);
+-
+- uint8x8_t t_red = vshrn_n_u16 (pixels, 8);
+- uint8x8_t t_green = vshrn_n_u16 (pixels, 3);
+- uint8x8_t t_blue = vshrn_n_u16 (vsli_n_u8 (pixels, pixels, 5), 2);
+-
+- uint16x8_t s_red = vmull_u8 (vsri_n_u8 (t_red, t_red, 5), mask_image);
+- uint16x8_t s_green = vmull_u8 (vsri_n_u8 (t_green, t_green, 6), mask_image);
+- uint16x8_t s_blue = vmull_u8 (t_blue, mask_image);
+-
+- s_red = vmlal (s_red, mask, solid_colour.val[2]);
+- s_green = vmlal (s_green, mask, solid_colour.val[1]);
+- s_blue = vmlal (s_blue, mask, solid_colour.val[0]);
+-
+- pixels = vsri_n_u16 (s_red, s_green, 5);
+- pixels = vsri_n_u16 (pixels, s_blue, 11);
+- vst1q_u16 (dest, pixels);
+-
+- dest += dest_stride;
+- mask += mask_stride;
+- }
+-
+-#endif
+-}
+-
+-#if 0 /* this is broken currently */
+-static void
+-neon_composite_over_n_8_0565 (pixman_implementation_t * impl,
+- pixman_op_t op,
+- pixman_image_t * src_image,
+- pixman_image_t * mask_image,
+- pixman_image_t * dst_image,
+- int32_t src_x,
+- int32_t src_y,
+- int32_t mask_x,
+- int32_t mask_y,
+- int32_t dest_x,
+- int32_t dest_y,
+- int32_t width,
+- int32_t height)
+-{
+- uint32_t src, srca;
+- uint16_t *dst_line, *aligned_line;
+- uint8_t *mask_line;
+- uint32_t dst_stride, mask_stride;
+- uint32_t kernel_count, copy_count, copy_tail;
+- uint8_t kernel_offset, copy_offset;
+-
+- src = _pixman_image_get_solid (src_image, dst_image->bits.format);
+-
+- /* bail out if fully transparent or degenerate */
+- srca = src >> 24;
+- if (src == 0)
+- return;
+-
+- if (width == 0 || height == 0)
+- return;
+-
+- if (width > NEON_SCANLINE_BUFFER_PIXELS)
+- {
+- /* split the blit, so we can use a fixed-size scanline buffer
+- * TODO: there must be a more elegant way of doing this.
+- */
+- int x;
+- for (x = 0; x < width; x += NEON_SCANLINE_BUFFER_PIXELS)
+- {
+- neon_composite_over_n_8_0565 (
+- impl, op,
+- src_image, mask_image, dst_image,
+- src_x + x, src_y, mask_x + x, mask_y, dest_x + x, dest_y,
+- (x + NEON_SCANLINE_BUFFER_PIXELS > width) ? width - x : NEON_SCANLINE_BUFFER_PIXELS, height);
+- }
+-
+- return;
+- }
+-
+- PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint16_t, dst_stride, dst_line, 1);
+- PIXMAN_IMAGE_GET_LINE (mask_image, mask_x, mask_y, uint8_t, mask_stride, mask_line, 1);
+-
+- /* keep within minimum number of aligned quadwords on width
+- * while also keeping the minimum number of columns to process
+- */
+- {
+- unsigned long aligned_left = (unsigned long)(dst_line) & ~0xF;
+- unsigned long aligned_right = (((unsigned long)(dst_line + width)) + 0xF) & ~0xF;
+- unsigned long ceiling_length = (((unsigned long) width) * sizeof(*dst_line) + 0xF) & ~0xF;
+-
+- /* the fast copy should be quadword aligned */
+- copy_offset = dst_line - ((uint16_t*) aligned_left);
+- aligned_line = dst_line - copy_offset;
+- copy_count = (uint32_t) ((aligned_right - aligned_left) >> 4);
+- copy_tail = 0;
+-
+- if (aligned_right - aligned_left > ceiling_length)
+- {
+- /* unaligned routine is tightest */
+- kernel_count = (uint32_t) (ceiling_length >> 4);
+- kernel_offset = copy_offset;
+- }
+- else
+- {
+- /* aligned routine is equally tight, so it is safer to align */
+- kernel_count = copy_count;
+- kernel_offset = 0;
+- }
+-
+- /* We should avoid reading beyond scanline ends for safety */
+- if (aligned_line < (dst_line - dest_x) ||
+- (aligned_line + (copy_count * 16 / sizeof(*dst_line))) > ((dst_line - dest_x) + dst_image->bits.width))
+- {
+- /* switch to precise read */
+- copy_offset = kernel_offset = 0;
+- aligned_line = dst_line;
+- kernel_count = (uint32_t) (ceiling_length >> 4);
+- copy_count = (width * sizeof(*dst_line)) >> 4;
+- copy_tail = (width * sizeof(*dst_line)) & 0xF;
+- }
+- }
+-
+- {
+- uint16_t scan_line[NEON_SCANLINE_BUFFER_PIXELS + 8]; /* deliberately not initialised */
+- uint8_t glyph_line[NEON_SCANLINE_BUFFER_PIXELS + 8];
+- int y = height;
+-
+- /* row-major order */
+- /* left edge, middle block, right edge */
+- for ( ; y--; mask_line += mask_stride, aligned_line += dst_stride, dst_line += dst_stride)
+- {
+- /* We don't want to overrun the edges of the glyph,
+- * so realign the edge data into known buffers
+- */
+- neon_quadword_copy (glyph_line + copy_offset, mask_line, width >> 4, width & 0xF);
+-
+- /* Uncached framebuffer access is really, really slow
+- * if we do it piecemeal. It should be much faster if we
+- * grab it all at once. One scanline should easily fit in
+- * L1 cache, so this should not waste RAM bandwidth.
+- */
+- neon_quadword_copy (scan_line, aligned_line, copy_count, copy_tail);
+-
+- /* Apply the actual filter */
+- solid_over_565_8_pix_neon (
+- src, scan_line + kernel_offset,
+- glyph_line + kernel_offset, 8 * sizeof(*dst_line),
+- 8, kernel_count);
+-
+- /* Copy the modified scanline back */
+- neon_quadword_copy (dst_line, scan_line + copy_offset,
+- width >> 3, (width & 7) * 2);
+- }
+- }
+-}
+-#endif
+-
+-#ifdef USE_GCC_INLINE_ASM
+-
+-static inline void
+-plain_over_565_8_pix_neon (uint32_t colour,
+- uint16_t *dest,
+- uint32_t dest_stride, /* bytes, not elements */
+- uint32_t count /* 8-pixel groups */)
+-{
+- /* Inner loop for plain translucent rects
+- * (solid colour without alpha mask)
+- */
+- asm volatile (
+- " vld4.8 {d20[], d21[], d22[], d23[]}, [%[colour]] @ solid colour load/splat \n"
+- " vmull.u8 q12, d23, d22 @ premultiply alpha red \n"
+- " vmull.u8 q13, d23, d21 @ premultiply alpha green \n"
+- " vmull.u8 q14, d23, d20 @ premultiply alpha blue \n"
+- " vmvn d18, d23 @ inverse alpha for background \n"
+- "0: @ loop\n"
+- " vld1.16 {d0, d1}, [%[dest]] @ load first pixels from framebuffer \n"
+- " vshrn.u16 d2, q0, #8 @ unpack red from framebuffer pixels \n"
+- " vshrn.u16 d4, q0, #3 @ unpack green \n"
+- " vsli.u16 q3, q0, #5 @ duplicate framebuffer blue bits \n"
+- " vsri.u8 d2, d2, #5 @ duplicate red bits (extend 5 to 8) \n"
+- " vsri.u8 d4, d4, #6 @ duplicate green bits (extend 6 to 8) \n"
+- " vshrn.u16 d6, q3, #2 @ unpack extended blue (truncate 10 to 8) \n"
+- " vmov q0, q12 @ retrieve foreground red \n"
+- " vmlal.u8 q0, d2, d18 @ blend red - my kingdom for a four-operand MLA \n"
+- " vmov q1, q13 @ retrieve foreground green \n"
+- " vmlal.u8 q1, d4, d18 @ blend green \n"
+- " vmov q2, q14 @ retrieve foreground blue \n"
+- " vmlal.u8 q2, d6, d18 @ blend blue \n"
+- " subs %[count], %[count], #1 @ decrement/test loop counter \n"
+- " vsri.16 q0, q1, #5 @ pack green behind red \n"
+- " vsri.16 q0, q2, #11 @ pack blue into pixels \n"
+- " vst1.16 {d0, d1}, [%[dest]] @ store composited pixels \n"
+- " add %[dest], %[dest], %[dest_stride] @ advance framebuffer pointer \n"
+- " bne 0b @ next please \n"
+-
+- /* Clobbered registers marked as input/outputs */
+- : [dest] "+r" (dest), [count] "+r" (count)
+-
+- /* Inputs */
+- : [dest_stride] "r" (dest_stride), [colour] "r" (&colour)
+-
+- /* Clobbers, including the inputs we modify, and
+- * potentially lots of memory
+- */
+- : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d18", "d19",
+- "d20", "d21", "d22", "d23", "d24", "d25", "d26", "d27", "d28", "d29",
+- "cc", "memory"
+- );
+-}
+-
+-static void
+-neon_composite_over_n_0565 (pixman_implementation_t * impl,
+- pixman_op_t op,
+- pixman_image_t * src_image,
+- pixman_image_t * mask_image,
+- pixman_image_t * dst_image,
+- int32_t src_x,
+- int32_t src_y,
+- int32_t mask_x,
+- int32_t mask_y,
+- int32_t dest_x,
+- int32_t dest_y,
+- int32_t width,
+- int32_t height)
+-{
+- uint32_t src, srca;
+- uint16_t *dst_line, *aligned_line;
+- uint32_t dst_stride;
+- uint32_t kernel_count, copy_count, copy_tail;
+- uint8_t kernel_offset, copy_offset;
+-
+- src = _pixman_image_get_solid (src_image, dst_image->bits.format);
+-
+- /* bail out if fully transparent */
+- srca = src >> 24;
+- if (src == 0)
+- return;
+-
+- if (width == 0 || height == 0)
+- return;
+-
+- if (width > NEON_SCANLINE_BUFFER_PIXELS)
+- {
+- /* split the blit, so we can use a fixed-size scanline buffer *
+- * TODO: there must be a more elegant way of doing this.
+- */
+- int x;
+-
+- for (x = 0; x < width; x += NEON_SCANLINE_BUFFER_PIXELS)
+- {
+- neon_composite_over_n_0565 (
+- impl, op,
+- src_image, mask_image, dst_image,
+- src_x + x, src_y, mask_x + x, mask_y, dest_x + x, dest_y,
+- (x + NEON_SCANLINE_BUFFER_PIXELS > width) ? width - x : NEON_SCANLINE_BUFFER_PIXELS, height);
+- }
+- return;
+- }
+-
+- PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint16_t, dst_stride, dst_line, 1);
+-
+- /* keep within minimum number of aligned quadwords on width
+- * while also keeping the minimum number of columns to process
+- */
+- {
+- unsigned long aligned_left = (unsigned long)(dst_line) & ~0xF;
+- unsigned long aligned_right = (((unsigned long)(dst_line + width)) + 0xF) & ~0xF;
+- unsigned long ceiling_length = (((unsigned long) width) * sizeof(*dst_line) + 0xF) & ~0xF;
+-
+- /* the fast copy should be quadword aligned */
+- copy_offset = dst_line - ((uint16_t*) aligned_left);
+- aligned_line = dst_line - copy_offset;
+- copy_count = (uint32_t) ((aligned_right - aligned_left) >> 4);
+- copy_tail = 0;
+-
+- if (aligned_right - aligned_left > ceiling_length)
+- {
+- /* unaligned routine is tightest */
+- kernel_count = (uint32_t) (ceiling_length >> 4);
+- kernel_offset = copy_offset;
+- }
+- else
+- {
+- /* aligned routine is equally tight, so it is safer to align */
+- kernel_count = copy_count;
+- kernel_offset = 0;
+- }
+-
+- /* We should avoid reading beyond scanline ends for safety */
+- if (aligned_line < (dst_line - dest_x) ||
+- (aligned_line + (copy_count * 16 / sizeof(*dst_line))) > ((dst_line - dest_x) + dst_image->bits.width))
+- {
+- /* switch to precise read */
+- copy_offset = kernel_offset = 0;
+- aligned_line = dst_line;
+- kernel_count = (uint32_t) (ceiling_length >> 4);
+- copy_count = (width * sizeof(*dst_line)) >> 4;
+- copy_tail = (width * sizeof(*dst_line)) & 0xF;
+- }
+- }
+-
+- {
+- uint16_t scan_line[NEON_SCANLINE_BUFFER_PIXELS + 8]; /* deliberately not initialised */
+-
+- /* row-major order */
+- /* left edge, middle block, right edge */
+- for ( ; height--; aligned_line += dst_stride, dst_line += dst_stride)
+- {
+- /* Uncached framebuffer access is really, really slow if we do it piecemeal.
+- * It should be much faster if we grab it all at once.
+- * One scanline should easily fit in L1 cache, so this should
+- * not waste RAM bandwidth.
+- */
+- neon_quadword_copy (scan_line, aligned_line, copy_count, copy_tail);
+-
+- /* Apply the actual filter */
+- plain_over_565_8_pix_neon (
+- src, scan_line + kernel_offset, 8 * sizeof(*dst_line), kernel_count);
+-
+- /* Copy the modified scanline back */
+- neon_quadword_copy (
+- dst_line, scan_line + copy_offset, width >> 3, (width & 7) * 2);
+- }
+- }
+-}
+-
+-static inline void
+-ARGB8_over_565_8_pix_neon (uint32_t *src,
+- uint16_t *dest,
+- uint32_t src_stride, /* bytes, not elements */
+- uint32_t count /* 8-pixel groups */)
+-{
+- asm volatile (
+- "0: @ loop\n"
+- " pld [%[src], %[src_stride]] @ preload from next scanline \n"
+- " vld1.16 {d0, d1}, [%[dest]] @ load pixels from framebuffer \n"
+- " vld4.8 {d20, d21, d22, d23},[%[src]]! @ load source image pixels \n"
+- " vsli.u16 q3, q0, #5 @ duplicate framebuffer blue bits \n"
+- " vshrn.u16 d2, q0, #8 @ unpack red from framebuffer pixels \n"
+- " vshrn.u16 d4, q0, #3 @ unpack green \n"
+- " vmvn d18, d23 @ we need the inverse alpha for the background \n"
+- " vsri.u8 d2, d2, #5 @ duplicate red bits (extend 5 to 8) \n"
+- " vshrn.u16 d6, q3, #2 @ unpack extended blue (truncate 10 to 8) \n"
+- " vsri.u8 d4, d4, #6 @ duplicate green bits (extend 6 to 8) \n"
+- " vmull.u8 q1, d2, d18 @ apply inverse alpha to background red... \n"
+- " vmull.u8 q2, d4, d18 @ ...green... \n"
+- " vmull.u8 q3, d6, d18 @ ...blue \n"
+- " subs %[count], %[count], #1 @ decrement/test loop counter \n"
+- " vmlal.u8 q1, d23, d22 @ add blended foreground red... \n"
+- " vmlal.u8 q2, d23, d21 @ ...green... \n"
+- " vmlal.u8 q3, d23, d20 @ ...blue \n"
+- " vsri.16 q1, q2, #5 @ pack green behind red \n"
+- " vsri.16 q1, q3, #11 @ pack blue into pixels \n"
+- " vst1.16 {d2, d3}, [%[dest]]! @ store composited pixels \n"
+- " bne 0b @ next please \n"
+-
+- /* Clobbered registers marked as input/outputs */
+- : [dest] "+r" (dest), [src] "+r" (src), [count] "+r" (count)
+-
+- /* Inputs */
+- : [src_stride] "r" (src_stride)
+-
+- /* Clobbers, including the inputs we modify, and potentially lots of memory */
+- : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d17", "d18", "d20",
+- "d21", "d22", "d23", "cc", "memory"
+- );
+-}
+-
+-static void
+-neon_composite_over_8888_0565 (pixman_implementation_t * impl,
+- pixman_op_t op,
+- pixman_image_t * src_image,
+- pixman_image_t * mask_image,
+- pixman_image_t * dst_image,
+- int32_t src_x,
+- int32_t src_y,
+- int32_t mask_x,
+- int32_t mask_y,
+- int32_t dest_x,
+- int32_t dest_y,
+- int32_t width,
+- int32_t height)
+-{
+- uint32_t *src_line;
+- uint16_t *dst_line, *aligned_line;
+- uint32_t dst_stride, src_stride;
+- uint32_t kernel_count, copy_count, copy_tail;
+- uint8_t kernel_offset, copy_offset;
+-
+- /* we assume mask is opaque
+- * so the only alpha to deal with is embedded in src
+- */
+- if (width > NEON_SCANLINE_BUFFER_PIXELS)
+- {
+- /* split the blit, so we can use a fixed-size scanline buffer */
+- int x;
+- for (x = 0; x < width; x += NEON_SCANLINE_BUFFER_PIXELS)
+- {
+- neon_composite_over_8888_0565 (
+- impl, op,
+- src_image, mask_image, dst_image,
+- src_x + x, src_y, mask_x + x, mask_y, dest_x + x, dest_y,
+- (x + NEON_SCANLINE_BUFFER_PIXELS > width) ? width - x : NEON_SCANLINE_BUFFER_PIXELS, height);
+- }
+- return;
+- }
+-
+- PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint16_t, dst_stride, dst_line, 1);
+- PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint32_t, src_stride, src_line, 1);
+-
+- /* keep within minimum number of aligned quadwords on width
+- * while also keeping the minimum number of columns to process
+- */
+- {
+- unsigned long aligned_left = (unsigned long)(dst_line) & ~0xF;
+- unsigned long aligned_right = (((unsigned long)(dst_line + width)) + 0xF) & ~0xF;
+- unsigned long ceiling_length = (((unsigned long) width) * sizeof(*dst_line) + 0xF) & ~0xF;
+-
+- /* the fast copy should be quadword aligned */
+- copy_offset = dst_line - ((uint16_t*) aligned_left);
+- aligned_line = dst_line - copy_offset;
+- copy_count = (uint32_t) ((aligned_right - aligned_left) >> 4);
+- copy_tail = 0;
+-
+- if (aligned_right - aligned_left > ceiling_length)
+- {
+- /* unaligned routine is tightest */
+- kernel_count = (uint32_t) (ceiling_length >> 4);
+- kernel_offset = copy_offset;
+- }
+- else
+- {
+- /* aligned routine is equally tight, so it is safer to align */
+- kernel_count = copy_count;
+- kernel_offset = 0;
+- }
+-
+- /* We should avoid reading beyond scanline ends for safety */
+- if (aligned_line < (dst_line - dest_x) ||
+- (aligned_line + (copy_count * 16 / sizeof(*dst_line))) > ((dst_line - dest_x) + dst_image->bits.width))
+- {
+- /* switch to precise read */
+- copy_offset = kernel_offset = 0;
+- aligned_line = dst_line;
+- kernel_count = (uint32_t) (ceiling_length >> 4);
+- copy_count = (width * sizeof(*dst_line)) >> 4;
+- copy_tail = (width * sizeof(*dst_line)) & 0xF;
+- }
+- }
+-
+- /* Preload the first input scanline */
+- {
+- uint8_t *src_ptr = (uint8_t*) src_line;
+- uint32_t count = (width + 15) / 16;
+-
+-#ifdef USE_GCC_INLINE_ASM
+- asm volatile (
+- "0: @ loop \n"
+- " subs %[count], %[count], #1 \n"
+- " pld [%[src]] \n"
+- " add %[src], %[src], #64 \n"
+- " bgt 0b \n"
+-
+- /* Clobbered input registers marked as input/outputs */
+- : [src] "+r" (src_ptr), [count] "+r" (count)
+- : /* no unclobbered inputs */
+- : "cc"
+- );
+-#else
+- do
+- {
+- __pld (src_ptr);
+- src_ptr += 64;
+- }
+- while (--count);
+-#endif
+- }
+-
+- {
+- uint16_t scan_line[NEON_SCANLINE_BUFFER_PIXELS + 8]; /* deliberately not initialised */
+-
+- /* row-major order */
+- /* left edge, middle block, right edge */
+- for ( ; height--; src_line += src_stride, aligned_line += dst_stride)
+- {
+- /* Uncached framebuffer access is really, really slow if we do
+- * it piecemeal. It should be much faster if we grab it all at
+- * once. One scanline should easily fit in L1 cache, so this
+- * should not waste RAM bandwidth.
+- */
+- neon_quadword_copy (scan_line, aligned_line, copy_count, copy_tail);
+-
+- /* Apply the actual filter */
+- ARGB8_over_565_8_pix_neon (
+- src_line, scan_line + kernel_offset,
+- src_stride * sizeof(*src_line), kernel_count);
+-
+- /* Copy the modified scanline back */
+- neon_quadword_copy (dst_line,
+- scan_line + copy_offset,
+- width >> 3, (width & 7) * 2);
+- }
+- }
+-}
+-
+-#endif /* USE_GCC_INLINE_ASM */
+-
+ static const pixman_fast_path_t arm_neon_fast_path_array[] =
+ {
+ { PIXMAN_OP_ADD, PIXMAN_solid, PIXMAN_a8, PIXMAN_a8, neon_composite_add_8888_8_8, 0 },
+@@ -2612,12 +1908,6 @@ static const pixman_fast_path_t arm_neon_fast_path_array[] =
+ #ifdef USE_GCC_INLINE_ASM
+ { PIXMAN_OP_SRC, PIXMAN_r5g6b5, PIXMAN_null, PIXMAN_r5g6b5, neon_composite_src_16_16, 0 },
+ { PIXMAN_OP_SRC, PIXMAN_b5g6r5, PIXMAN_null, PIXMAN_b5g6r5, neon_composite_src_16_16, 0 },
+-#if 0 /* this code has some bugs */
+- { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_null, PIXMAN_r5g6b5, neon_composite_over_n_0565, 0 },
+- { PIXMAN_OP_OVER, PIXMAN_solid, PIXMAN_null, PIXMAN_b5g6r5, neon_composite_over_n_0565, 0 },
+- { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_null, PIXMAN_r5g6b5, neon_composite_over_8888_0565, 0 },
+- { PIXMAN_OP_OVER, PIXMAN_a8b8g8r8, PIXMAN_null, PIXMAN_b5g6r5, neon_composite_over_8888_0565, 0 },
+-#endif
+ #endif
+ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_null, PIXMAN_a8r8g8b8, neon_composite_over_8888_8888, 0 },
+ { PIXMAN_OP_OVER, PIXMAN_a8r8g8b8, PIXMAN_null, PIXMAN_x8r8g8b8, neon_composite_over_8888_8888, 0 },
+@@ -2668,79 +1958,6 @@ arm_neon_composite (pixman_implementation_t *imp,
+ }
+
+ static pixman_bool_t
+-pixman_blt_neon (void *src_bits,
+- void *dst_bits,
+- int src_stride,
+- int dst_stride,
+- int src_bpp,
+- int dst_bpp,
+- int src_x,
+- int src_y,
+- int dst_x,
+- int dst_y,
+- int width,
+- int height)
+-{
+- if (!width || !height)
+- return TRUE;
+-
+- /* accelerate only straight copies involving complete bytes */
+- if (src_bpp != dst_bpp || (src_bpp & 7))
+- return FALSE;
+-
+- {
+- uint32_t bytes_per_pixel = src_bpp >> 3;
+- uint32_t byte_width = width * bytes_per_pixel;
+- /* parameter is in words for some reason */
+- int32_t src_stride_bytes = src_stride * 4;
+- int32_t dst_stride_bytes = dst_stride * 4;
+- uint8_t *src_bytes = ((uint8_t*) src_bits) +
+- src_y * src_stride_bytes + src_x * bytes_per_pixel;
+- uint8_t *dst_bytes = ((uint8_t*) dst_bits) +
+- dst_y * dst_stride_bytes + dst_x * bytes_per_pixel;
+- uint32_t quadword_count = byte_width / 16;
+- uint32_t offset = byte_width % 16;
+-
+- while (height--)
+- {
+- neon_quadword_copy (dst_bytes, src_bytes, quadword_count, offset);
+- src_bytes += src_stride_bytes;
+- dst_bytes += dst_stride_bytes;
+- }
+- }
+-
+- return TRUE;
+-}
+-
+-static pixman_bool_t
+-arm_neon_blt (pixman_implementation_t *imp,
+- uint32_t * src_bits,
+- uint32_t * dst_bits,
+- int src_stride,
+- int dst_stride,
+- int src_bpp,
+- int dst_bpp,
+- int src_x,
+- int src_y,
+- int dst_x,
+- int dst_y,
+- int width,
+- int height)
+-{
+- if (pixman_blt_neon (
+- src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
+- src_x, src_y, dst_x, dst_y, width, height))
+- {
+- return TRUE;
+- }
+-
+- return _pixman_implementation_blt (
+- imp->delegate,
+- src_bits, dst_bits, src_stride, dst_stride, src_bpp, dst_bpp,
+- src_x, src_y, dst_x, dst_y, width, height);
+-}
+-
+-static pixman_bool_t
+ arm_neon_fill (pixman_implementation_t *imp,
+ uint32_t * bits,
+ int stride,
+@@ -2765,9 +1982,6 @@ _pixman_implementation_create_arm_neon (void)
+ pixman_implementation_t *imp = _pixman_implementation_create (simd);
+
+ imp->composite = arm_neon_composite;
+-#if 0 /* this code has some bugs */
+- imp->blt = arm_neon_blt;
+-#endif
+ imp->fill = arm_neon_fill;
+
+ return imp;
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman/src-8888-0565.patch b/recipes/obsolete/xorg/xorg-lib/pixman/src-8888-0565.patch
new file mode 100644
index 0000000000..c544225f65
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman/src-8888-0565.patch
@@ -0,0 +1,324 @@
+From 6494f9ae8820078d0e6109bf8f294156f7a5da4c Mon Sep 17 00:00:00 2001
+From: Siarhei Siamashka <siarhei.siamashka@nokia.com>
+Date: Fri, 05 Mar 2010 00:40:34 +0000
+Subject: ARM: added 'armv6_composite_src_8888_0565' fast path
+
+Provides ~3x performance improvement when working with
+data in L1 cache, and ~80% performace improvement when working
+with memory. This fast path is important for 32bpp -> 16bpp
+color format conversion and is commonly used with 16bpp desktop.
+
+Microbenchmark from N800 (ARM11 @ 400MHz), measured in MPix/s:
+
+before:
+
+ src_8888_0565 = L1: 21.54 M: 15.62
+
+after (armv4):
+
+ src_8888_0565 = L1: 45.26 M: 23.29
+
+after (armv6):
+
+ src_8888_0565 = L1: 60.62 M: 28.37
+---
+diff --git a/pixman/pixman-arm-simd.c b/pixman/pixman-arm-simd.c
+index c375c01..69243c1 100644
+--- a/pixman/pixman-arm-simd.c
++++ b/pixman/pixman-arm-simd.c
+@@ -604,6 +604,282 @@ armv6_composite_over_n_8_0565 (pixman_implementation_t * impl,
+ dst_stride - width, mask_stride - width, height);
+ }
+
++static inline void
++armv4_composite_src_8888_0565_asm (
++ uint16_t *dst, uint32_t *src, int w, int dst_stride,
++ int src_stride, int h)
++{
++ uint32_t a, x, y, c1F001F = 0x1F001F, cFFFF = 0xFFFF;
++ int backup_w = w;
++ while (h--)
++ {
++ w = backup_w;
++ if (w > 0 && (uintptr_t)dst & 2)
++ {
++ x = *src++;
++
++ a = (x >> 3) & c1F001F;
++ x &= 0xFC00;
++ a |= a >> 5;
++ a |= x >> 5;
++
++ *dst++ = a;
++ w--;
++ }
++
++ asm volatile(
++ "subs %[w], %[w], #2\n"
++ "blt 2f\n"
++ "1:\n"
++ "ldr %[x], [%[src]], #4\n"
++ "ldr %[y], [%[src]], #4\n"
++ "subs %[w], %[w], #2\n"
++
++ "and %[a], %[c1F001F], %[x], lsr #3\n"
++ "and %[x], %[x], #0xFC00\n\n"
++ "orr %[a], %[a], %[a], lsr #5\n"
++ "orr %[x], %[a], %[x], lsr #5\n"
++
++ "and %[a], %[c1F001F], %[y], lsr #3\n"
++ "and %[y], %[y], #0xFC00\n\n"
++ "orr %[a], %[a], %[a], lsr #5\n"
++ "orr %[y], %[a], %[y], lsr #5\n"
++ /*
++ * Writing single 32-bit value is much faster than two
++ * separate 16-bit values for older CPUs without (efficient)
++ * write combining, even though it costs an extra instruction.
++ */
++ "and %[x], %[x], %[cFFFF]\n"
++ "orr %[x], %[x], %[y], lsl #16\n"
++ "str %[x], [%[dst]], #4\n"
++ "bge 1b\n"
++ "2:\n"
++ : [c1F001F] "+&r" (c1F001F), [cFFFF] "+&r" (cFFFF),
++ [src] "+&r" (src), [dst] "+&r" (dst), [a] "=&r" (a),
++ [x] "=&r" (x), [y] "=&r" (y), [w] "+&r" (w)
++ );
++
++ if (w & 1)
++ {
++ x = *src++;
++
++ a = (x >> 3) & c1F001F;
++ x = x & 0xFC00;
++ a |= a >> 5;
++ a |= x >> 5;
++
++ *dst++ = a;
++ }
++
++ src += src_stride - backup_w;
++ dst += dst_stride - backup_w;
++ }
++}
++
++/*
++ * Conversion x8r8g8b8 -> r5g6b5
++ *
++ * Note: 'w' must be >= 7 here
++ */
++static void __attribute__((naked))
++armv6_composite_src_8888_0565_asm (
++ uint16_t *dst, uint32_t *src, int w, int dst_stride,
++ int src_stride, int h)
++{
++ asm volatile(
++ /* define supplementary macros */
++ ".macro cvt8888to565 PIX\n"
++ "and A, C1F001F, \\PIX, lsr #3\n"
++ "and \\PIX, \\PIX, #0xFC00\n\n"
++ "orr A, A, A, lsr #5\n"
++ "orr \\PIX, A, \\PIX, lsr #5\n"
++ ".endm\n"
++
++ ".macro combine_pixels_pair PIX1, PIX2\n"
++ /* Note: assume little endian byte order */
++ "pkhbt \\PIX1, \\PIX1, \\PIX2, lsl #16\n"
++ ".endm\n"
++
++ /* function entry, save all registers (10 words) to stack */
++ "stmdb sp!, {r4-r11, ip, lr}\n"
++
++ /* define some aliases */
++ "DST .req r0\n"
++ "SRC .req r1\n"
++ "W .req r2\n"
++ "H .req r3\n"
++
++ "TMP1 .req r4\n"
++ "TMP2 .req r5\n"
++ "TMP3 .req r6\n"
++ "TMP4 .req r7\n"
++ "TMP5 .req r8\n"
++ "TMP6 .req r9\n"
++ "TMP7 .req r10\n"
++ "TMP8 .req r11\n"
++
++ "C1F001F .req ip\n"
++ "A .req lr\n"
++
++ "ldr TMP1, [sp, #(10*4+0)]\n" /* load src_stride */
++ "ldr C1F001F, =0x1F001F\n"
++ "sub r3, r3, W\n"
++ "str r3, [sp, #(10*4+0)]\n" /* store (dst_stride-w) */
++ "ldr r3, [sp, #(10*4+4)]\n" /* load h */
++ "sub TMP1, TMP1, W\n"
++ "str TMP1, [sp, #(10*4+4)]\n" /* store (src_stride-w) */
++
++ "str W, [sp, #(8*4)]\n" /* saved ip = W */
++
++ "0:\n"
++ "subs H, H, #1\n"
++ "blt 6f\n"
++ "1:\n"
++ /* align DST at 4 byte boundary */
++ "tst DST, #2\n"
++ "beq 2f\n"
++ "ldr TMP1, [SRC], #4\n"
++ "sub W, W, #1\n"
++ "cvt8888to565 TMP1\n"
++ "strh TMP1, [DST], #2\n"
++ "2:"
++ /* align DST at 8 byte boundary */
++ "tst DST, #4\n"
++ "beq 2f\n"
++ "ldmia SRC!, {TMP1, TMP2}\n"
++ "sub W, W, #2\n"
++ "cvt8888to565 TMP1\n"
++ "cvt8888to565 TMP2\n"
++ "combine_pixels_pair TMP1, TMP2\n"
++ "str TMP1, [DST], #4\n"
++ "2:"
++ /* align DST at 16 byte boundary */
++ "tst DST, #8\n"
++ "beq 2f\n"
++ "ldmia SRC!, {TMP1, TMP2, TMP3, TMP4}\n"
++ "sub W, W, #4\n"
++ "cvt8888to565 TMP1\n"
++ "cvt8888to565 TMP2\n"
++ "cvt8888to565 TMP3\n"
++ "cvt8888to565 TMP4\n"
++ "combine_pixels_pair TMP1, TMP2\n"
++ "combine_pixels_pair TMP3, TMP4\n"
++ "stmia DST!, {TMP1, TMP3}\n"
++ "2:"
++ /* inner loop, process 8 pixels per iteration */
++ "subs W, W, #8\n"
++ "blt 4f\n"
++ "3:\n"
++ "ldmia SRC!, {TMP1, TMP2, TMP3, TMP4, TMP5, TMP6, TMP7, TMP8}\n"
++ "subs W, W, #8\n"
++ "cvt8888to565 TMP1\n"
++ "cvt8888to565 TMP2\n"
++ "cvt8888to565 TMP3\n"
++ "cvt8888to565 TMP4\n"
++ "cvt8888to565 TMP5\n"
++ "cvt8888to565 TMP6\n"
++ "cvt8888to565 TMP7\n"
++ "cvt8888to565 TMP8\n"
++ "combine_pixels_pair TMP1, TMP2\n"
++ "combine_pixels_pair TMP3, TMP4\n"
++ "combine_pixels_pair TMP5, TMP6\n"
++ "combine_pixels_pair TMP7, TMP8\n"
++ "stmia DST!, {TMP1, TMP3, TMP5, TMP7}\n"
++ "bge 3b\n"
++ "4:\n"
++
++ /* process the remaining pixels */
++ "tst W, #4\n"
++ "beq 4f\n"
++ "ldmia SRC!, {TMP1, TMP2, TMP3, TMP4}\n"
++ "cvt8888to565 TMP1\n"
++ "cvt8888to565 TMP2\n"
++ "cvt8888to565 TMP3\n"
++ "cvt8888to565 TMP4\n"
++ "combine_pixels_pair TMP1, TMP2\n"
++ "combine_pixels_pair TMP3, TMP4\n"
++ "stmia DST!, {TMP1, TMP3}\n"
++ "4:\n"
++ "tst W, #2\n"
++ "beq 4f\n"
++ "ldmia SRC!, {TMP1, TMP2}\n"
++ "cvt8888to565 TMP1\n"
++ "cvt8888to565 TMP2\n"
++ "combine_pixels_pair TMP1, TMP2\n"
++ "str TMP1, [DST], #4\n"
++ "4:\n"
++ "tst W, #1\n"
++ "beq 4f\n"
++ "ldr TMP1, [SRC], #4\n"
++ "cvt8888to565 TMP1\n"
++ "strh TMP1, [DST], #2\n"
++ "4:\n"
++ "ldr TMP1, [sp, #(10*4+0)]\n" /* (dst_stride-w) */
++ "ldr TMP2, [sp, #(10*4+4)]\n" /* (src_stride-w) */
++ "ldr W, [sp, #(8*4)]\n"
++ "subs H, H, #1\n"
++ "add DST, DST, TMP1, lsl #1\n"
++ "add SRC, SRC, TMP2, lsl #2\n"
++ "bge 1b\n"
++ "6:\n"
++ /* restore all registers and return */
++ "ldmia sp!, {r4-r11, ip, pc}\n"
++ ".ltorg\n"
++
++ ".unreq DST\n"
++ ".unreq SRC\n"
++ ".unreq W\n"
++ ".unreq H\n"
++
++ ".unreq TMP1\n"
++ ".unreq TMP2\n"
++ ".unreq TMP3\n"
++ ".unreq TMP4\n"
++ ".unreq TMP5\n"
++ ".unreq TMP6\n"
++ ".unreq TMP7\n"
++ ".unreq TMP8\n"
++
++ ".unreq C1F001F\n"
++ ".unreq A\n"
++
++ ".purgem cvt8888to565\n"
++ ".purgem combine_pixels_pair\n"
++ );
++}
++
++static void
++armv6_composite_src_8888_0565 (pixman_implementation_t * impl,
++ pixman_op_t op,
++ pixman_image_t * src_image,
++ pixman_image_t * mask_image,
++ pixman_image_t * dst_image,
++ int32_t src_x,
++ int32_t src_y,
++ int32_t mask_x,
++ int32_t mask_y,
++ int32_t dest_x,
++ int32_t dest_y,
++ int32_t width,
++ int32_t height)
++{
++ uint32_t *src;
++ uint16_t *dst;
++ int src_stride, dst_stride;
++
++ PIXMAN_IMAGE_GET_LINE (dst_image, dest_x, dest_y, uint16_t,
++ dst_stride, dst, 1);
++ PIXMAN_IMAGE_GET_LINE (src_image, src_x, src_y, uint32_t,
++ src_stride, src, 1);
++
++ if (width < 7)
++ armv4_composite_src_8888_0565_asm (dst, src, width,
++ dst_stride, src_stride, height);
++ else
++ armv6_composite_src_8888_0565_asm (dst, src, width,
++ dst_stride, src_stride, height);
++}
++
+ #endif
+
+ static const pixman_fast_path_t arm_simd_fast_paths[] =
+@@ -624,6 +900,10 @@ static const pixman_fast_path_t arm_simd_fast_paths[] =
+ #if defined(__ARM_EABI__) && defined(__linux__)
+ PIXMAN_STD_FAST_PATH (OVER, solid, a8, r5g6b5, armv6_composite_over_n_8_0565),
+ PIXMAN_STD_FAST_PATH (OVER, solid, a8, b5g6r5, armv6_composite_over_n_8_0565),
++ PIXMAN_STD_FAST_PATH (SRC, a8r8g8b8, null, r5g6b5, armv6_composite_src_8888_0565),
++ PIXMAN_STD_FAST_PATH (SRC, x8r8g8b8, null, r5g6b5, armv6_composite_src_8888_0565),
++ PIXMAN_STD_FAST_PATH (SRC, a8b8g8r8, null, b5g6r5, armv6_composite_src_8888_0565),
++ PIXMAN_STD_FAST_PATH (SRC, x8b8g8r8, null, b5g6r5, armv6_composite_src_8888_0565),
+ #endif
+ { PIXMAN_OP_NONE },
+ };
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman/tls.patch b/recipes/obsolete/xorg/xorg-lib/pixman/tls.patch
new file mode 100644
index 0000000000..316caed65f
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman/tls.patch
@@ -0,0 +1,59 @@
+From 714559dccda3165a72f0a9935c1edc3aef535f30 Mon Sep 17 00:00:00 2001
+From: Søren Sandmann Pedersen <ssp@redhat.com>
+Date: Wed, 07 Apr 2010 05:44:12 +0000
+Subject: Fixes for pthread thread local storage.
+
+The tls_name_key variable is passed to tls_name_get(), and the first
+time this happens it isn't initialized. tls_name_get() then passes it
+on to tls_name_alloc() which passes it on to pthread_setspecific()
+leading to undefined behavior.
+
+None of this is actually necessary at all because there is only one
+such variable per thread local variable, so it doesn't need to passed
+as a parameter at all.
+
+All of this was pointed out by Tor Lillqvist on the cairo mailing
+list.
+---
+diff --git a/pixman/pixman-compiler.h b/pixman/pixman-compiler.h
+index cdac0d8..531c8c9 100644
+--- a/pixman/pixman-compiler.h
++++ b/pixman/pixman-compiler.h
+@@ -99,16 +99,16 @@
+ } \
+ \
+ static type * \
+- tls_ ## name ## _alloc (key) \
++ tls_ ## name ## _alloc (void) \
+ { \
+ type *value = calloc (1, sizeof (type)); \
+ if (value) \
+- pthread_setspecific (key, value); \
++ pthread_setspecific (tls_ ## name ## _key, value); \
+ return value; \
+ } \
+ \
+ static force_inline type * \
+- tls_ ## name ## _get (key) \
++ tls_ ## name ## _get (void) \
+ { \
+ type *value = NULL; \
+ if (pthread_once (&tls_ ## name ## _once_control, \
+@@ -116,13 +116,13 @@
+ { \
+ value = pthread_getspecific (tls_ ## name ## _key); \
+ if (!value) \
+- value = tls_ ## name ## _alloc (key); \
++ value = tls_ ## name ## _alloc (); \
+ } \
+ return value; \
+ }
+
+ # define PIXMAN_GET_THREAD_LOCAL(name) \
+- tls_ ## name ## _get (tls_ ## name ## _key)
++ tls_ ## name ## _get ()
+
+ #else
+
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman_0.10.0.bb b/recipes/obsolete/xorg/xorg-lib/pixman_0.10.0.bb
new file mode 100644
index 0000000000..869081891d
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman_0.10.0.bb
@@ -0,0 +1,5 @@
+require pixman.inc
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "41804ac38025102dcc9891dfd4a3d105"
+SRC_URI[archive.sha256sum] = "48625f6b5ce130672942503c683d306d957ee40f59f8e59be6ca30a245ad47d0"
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman_0.11.4.bb b/recipes/obsolete/xorg/xorg-lib/pixman_0.11.4.bb
new file mode 100644
index 0000000000..b058104cbb
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman_0.11.4.bb
@@ -0,0 +1,7 @@
+require pixman.inc
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "8c8afc259af61d42aa9b3d8ec5a9a03b"
+SRC_URI[archive.sha256sum] = "d034f4afb4329c38e8789a5a7a384194c7402094b4c2b7600d2d86d8589e8571"
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman_0.11.8.bb b/recipes/obsolete/xorg/xorg-lib/pixman_0.11.8.bb
new file mode 100644
index 0000000000..d7c67174ac
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman_0.11.8.bb
@@ -0,0 +1,9 @@
+require pixman.inc
+PR = "${INC_PR}.0"
+
+SRC_URI += " \
+ file://pixman-arm.patch \
+ file://pixman-x888-565.patch \
+ "
+SRC_URI[archive.md5sum] = "7b5db768c51337b5e5e954fc9c961cd3"
+SRC_URI[archive.sha256sum] = "720db5ef6ed0e744b9bac5360ade9a7c024f9fb3fab05c83a90ee28b08e66e01"
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman_0.15.18.bb b/recipes/obsolete/xorg/xorg-lib/pixman_0.15.18.bb
new file mode 100644
index 0000000000..4811a01f8c
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman_0.15.18.bb
@@ -0,0 +1,7 @@
+require pixman.inc
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "9b60fe7623621b546b76777b8b7d2490"
+SRC_URI[archive.sha256sum] = "3a5003cf6c7d5b03ed5977c108ee11410cfd7849eea370eb4feae98f2822c795"
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman_0.15.6.bb b/recipes/obsolete/xorg/xorg-lib/pixman_0.15.6.bb
new file mode 100644
index 0000000000..a09de4e827
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman_0.15.6.bb
@@ -0,0 +1,7 @@
+require pixman.inc
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "fe922698df46b21d7e19f28ded4ca100"
+SRC_URI[archive.sha256sum] = "3438437c131c9847b34106225a728c11e522776ac454bb8740a9bc7aea409f22"
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman_0.17.12.bb b/recipes/obsolete/xorg/xorg-lib/pixman_0.17.12.bb
new file mode 100644
index 0000000000..b476aaa58b
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman_0.17.12.bb
@@ -0,0 +1,24 @@
+require pixman.inc
+PR = "${INC_PR}.0"
+
+SRC_URI += "\
+ file://0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch \
+ file://0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch \
+ file://0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch \
+ file://0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch \
+ file://0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch \
+ file://0006-Revert-ARM-SIMD-Try-without-any-CFLAGS-before-forcin.patch \
+ file://over-n-8-0565.patch \
+ file://src-8888-0565.patch \
+"
+SRC_URI[archive.md5sum] = "331415d7a110145cf27aa00e11d0a683"
+SRC_URI[archive.sha256sum] = "8cce103af1b4200a13bedca5b763f74c9bc99a55985ab44ca92ba532dac6b57f"
+
+NEON = " --disable-arm-neon "
+NEON_armv7a = " "
+
+EXTRA_OECONF = "${NEON} --disable-gtk"
+
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_angstrom = "2"
+DEFAULT_PREFERENCE_shr = "2"
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman_0.17.8.bb b/recipes/obsolete/xorg/xorg-lib/pixman_0.17.8.bb
new file mode 100644
index 0000000000..55c70c80bf
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman_0.17.8.bb
@@ -0,0 +1,23 @@
+require pixman.inc
+PR = "${INC_PR}.0"
+
+SRC_URI += " \
+ file://0003-Generic-C-implementation-of-pixman_blt-with-overlapp.patch \
+ file://0004-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch \
+ file://0005-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch \
+ file://0006-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch \
+ file://1-composite.patch \
+ file://2-composite.patch \
+ file://3-composite.patch \
+ "
+SRC_URI[archive.md5sum] = "a7deb2ff6b286b676d67aa6ae91317ae"
+SRC_URI[archive.sha256sum] = "ea24e9003455a0881bd43bf7e4169f2b34c90c8521405103e3490553876a81b4"
+
+NEON = " --disable-arm-neon "
+NEON_armv7a = " "
+
+EXTRA_OECONF = "${NEON} --disable-gtk"
+
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_angstrom = "2"
+DEFAULT_PREFERENCE_shr = "2"
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman_0.18.0.bb b/recipes/obsolete/xorg/xorg-lib/pixman_0.18.0.bb
new file mode 100644
index 0000000000..c099b773f3
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman_0.18.0.bb
@@ -0,0 +1,24 @@
+require pixman.inc
+PR = "${INC_PR}.3"
+
+SRC_URI += "\
+ file://0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch \
+ file://0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch \
+ file://0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch \
+ file://0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch \
+ file://0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch \
+ file://calloc.patch \
+ file://tls.patch \
+ file://565-scanline.patch \
+ file://missing-cache-preload.diff \
+"
+SRC_URI[archive.md5sum] = "a4fb870fc325be258089f1683642e976"
+SRC_URI[archive.sha256sum] = "b305291bba3d9271a4481e5eedf901025ac8ba4ec8f7b76ccafc5094610cd4ff"
+
+NEON = " --disable-arm-neon "
+NEON_armv7a = " "
+
+EXTRA_OECONF = "${NEON} --disable-gtk"
+
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_shr = "2"
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman_0.9.4.bb b/recipes/obsolete/xorg/xorg-lib/pixman_0.9.4.bb
new file mode 100644
index 0000000000..254bf61f18
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman_0.9.4.bb
@@ -0,0 +1,7 @@
+require xorg-lib-common.inc
+DESCRIPTION = "Library for lowlevel pixel operations"
+DEPENDS = "virtual/libx11"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "c354ab5b0da10227226d3ef604254875"
+SRC_URI[archive.sha256sum] = "261d239e9e3070a0a81e5b3eab92e6236c6295979bdae0a1ded05cbef93f67aa"
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman_0.9.5.bb b/recipes/obsolete/xorg/xorg-lib/pixman_0.9.5.bb
new file mode 100644
index 0000000000..6259deaa08
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman_0.9.5.bb
@@ -0,0 +1,8 @@
+require xorg-lib-common.inc
+DESCRIPTION = "Library for lowlevel pixel operations"
+DEPENDS = "virtual/libx11"
+PR = "${INC_PR}.0"
+
+SRC_URI += "file://dont-copy-unused-bits-to-alpha-channel.patch"
+SRC_URI[archive.md5sum] = "f9fea77e46ec7a3a16e925e137f146e7"
+SRC_URI[archive.sha256sum] = "a9d4545b5dfc018cdd33fd21bc73c3f1b3c9c207f1bb6843606cc180eb10c6c8"
diff --git a/recipes/obsolete/xorg/xorg-lib/pixman_git.bb b/recipes/obsolete/xorg/xorg-lib/pixman_git.bb
new file mode 100644
index 0000000000..12140c1d8f
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/pixman_git.bb
@@ -0,0 +1,27 @@
+require pixman.inc
+PV = "0.17.13"
+PR = "${INC_PR}.2"
+PR_append = "+gitr${SRCPV}"
+
+SRC_URI = "git://anongit.freedesktop.org/pixman;protocol=git;branch=master \
+ file://0001-Generic-C-implementation-of-pixman_blt-with-overlapp.patch \
+ file://0002-Support-of-overlapping-src-dst-for-pixman_blt_mmx.patch \
+ file://0003-Support-of-overlapping-src-dst-for-pixman_blt_sse2.patch \
+ file://0004-Support-of-overlapping-src-dst-for-pixman_blt_neon.patch \
+ file://0005-ARM-added-NEON-optimizations-for-fetch-store-r5g6b5-.patch \
+ file://0006-Revert-ARM-SIMD-Try-without-any-CFLAGS-before-forcin.patch \
+ file://over-n-8-0565.patch \
+ file://src-8888-0565.patch \
+ file://calloc.patch \
+ file://tls.patch \
+"
+
+SRCREV = "69f1ec9a7827aeb522fcae99846237ef0f896e7b"
+S = "${WORKDIR}/git"
+
+NEON = " --disable-arm-neon "
+NEON_armv7a = " "
+
+EXTRA_OECONF = "${NEON} --disable-gtk"
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/recipes/obsolete/xorg/xorg-lib/xtrans/fix-missing-includepath.patch b/recipes/obsolete/xorg/xorg-lib/xtrans/fix-missing-includepath.patch
new file mode 100644
index 0000000000..043d14f7bf
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/xtrans/fix-missing-includepath.patch
@@ -0,0 +1,13 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- xtrans-X11R7.0-1.0.0/xtrans.pc.in~fix-missing-includepath 2005-07-02 20:00:50.000000000 +0200
++++ xtrans-X11R7.0-1.0.0/xtrans.pc.in 2006-08-11 19:27:58.000000000 +0200
+@@ -6,4 +6,4 @@
+ Name: XTrans
+ Description: Abstract network code for X
+ Version: @PACKAGE_VERSION@
+-Cflags: -I${includedir} -D_BSD_SOURCE @fchown_define@ @sticky_bit_define@
++Cflags: -I${includedir} -I${includedir}/X11/Xtrans -D_BSD_SOURCE @fchown_define@ @sticky_bit_define@
diff --git a/recipes/obsolete/xorg/xorg-lib/xtrans_1.0.3.bb b/recipes/obsolete/xorg/xorg-lib/xtrans_1.0.3.bb
new file mode 100644
index 0000000000..19a56fa8f2
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/xtrans_1.0.3.bb
@@ -0,0 +1,15 @@
+require xorg-lib-common.inc
+DESCRIPTION = "network API translation layer to insulate X applications and \
+libraries from OS network vageries."
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI += "file://fix-missing-includepath.patch"
+SRC_URI[archive.md5sum] = "bb196907ea1e182dcb396eb22f7d2c1a"
+SRC_URI[archive.sha256sum] = "e1a3c4986f16a5fbca611d0547cc7499a1fa47ca2096593644037e2609363085"
+
+FILESPATHPKG .= ":xtrans-${PV}:xtrans"
+
+ALLOW_EMPTY = "1"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/recipes/obsolete/xorg/xorg-lib/xtrans_1.0.4.bb b/recipes/obsolete/xorg/xorg-lib/xtrans_1.0.4.bb
new file mode 100644
index 0000000000..d19a6c0819
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/xtrans_1.0.4.bb
@@ -0,0 +1,15 @@
+require xorg-lib-common.inc
+DESCRIPTION = "network API translation layer to insulate X applications and \
+libraries from OS network vageries."
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI += "file://fix-missing-includepath.patch"
+SRC_URI[archive.md5sum] = "8b36cdf08df12be96615e3d550236626"
+SRC_URI[archive.sha256sum] = "765219fa822edeffb0650e93458e4ebf63c23176e58fce06806fb251fbfe7d8c"
+
+FILESPATHPKG .= ":xtrans-${PV}:xtrans"
+
+ALLOW_EMPTY = "1"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/recipes/obsolete/xorg/xorg-lib/xtrans_1.1.bb b/recipes/obsolete/xorg/xorg-lib/xtrans_1.1.bb
new file mode 100644
index 0000000000..1f3fcb4159
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/xtrans_1.1.bb
@@ -0,0 +1,15 @@
+require xorg-lib-common.inc
+DESCRIPTION = "network API translation layer to insulate X applications and \
+libraries from OS network vageries."
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI += "file://fix-missing-includepath.patch"
+SRC_URI[archive.md5sum] = "8546e3a060aefb42c889eaa4b5db33af"
+SRC_URI[archive.sha256sum] = "16bc4646f105efd3d0dd105899ac19035d67acf50950ca8c70cf68772508272d"
+
+FILESPATHPKG .= ":xtrans-${PV}:xtrans"
+
+ALLOW_EMPTY = "1"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/recipes/obsolete/xorg/xorg-lib/xtrans_1.2.1.bb b/recipes/obsolete/xorg/xorg-lib/xtrans_1.2.1.bb
new file mode 100644
index 0000000000..e695e35031
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/xtrans_1.2.1.bb
@@ -0,0 +1,15 @@
+require xorg-lib-common.inc
+DESCRIPTION = "network API translation layer to insulate X applications and \
+libraries from OS network vageries."
+RDEPENDS_${PN}-dev = ""
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "96e142331edd498a9364887b2548f1bb"
+SRC_URI[archive.sha256sum] = "9ff21a8d9ea524ca9b7cb6d6b4d522b4cb20b1c35edeb8995a9e9265a0df64bd"
+
+FILESPATHPKG .= ":xtrans-${PV}:xtrans"
+
+ALLOW_EMPTY = "1"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/recipes/obsolete/xorg/xorg-lib/xtrans_1.2.3.bb b/recipes/obsolete/xorg/xorg-lib/xtrans_1.2.3.bb
new file mode 100644
index 0000000000..1f0ec3977c
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/xtrans_1.2.3.bb
@@ -0,0 +1,15 @@
+require xorg-lib-common.inc
+DESCRIPTION = "network API translation layer to insulate X applications and \
+libraries from OS network vageries."
+RDEPENDS_${PN}-dev = ""
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI[archive.md5sum] = "f9cf791dfad59cf044e276aab3a71e1d"
+SRC_URI[archive.sha256sum] = "a67a8b09d9530021e2bd4b93136f385e72a8d8e4f2c26a99aeb169bee88facf0"
+
+FILESPATHPKG .= ":xtrans-${PV}:xtrans"
+
+ALLOW_EMPTY = "1"
+
+BBCLASSEXTEND = "native nativesdk"
diff --git a/recipes/obsolete/xorg/xorg-lib/xtrans_1.2.bb b/recipes/obsolete/xorg/xorg-lib/xtrans_1.2.bb
new file mode 100644
index 0000000000..8a4ddca097
--- /dev/null
+++ b/recipes/obsolete/xorg/xorg-lib/xtrans_1.2.bb
@@ -0,0 +1,15 @@
+require xorg-lib-common.inc
+DESCRIPTION = "network API translation layer to insulate X applications and \
+libraries from OS network vageries."
+PE = "1"
+PR = "${INC_PR}.0"
+
+SRC_URI += "file://fix-missing-includepath.patch"
+SRC_URI[archive.md5sum] = "a91fef8b932b21992af7dfff7b2643f3"
+SRC_URI[archive.sha256sum] = "d6c3cabd5ecd0183a8a9bc6b3471545df8e2c78956b4c4cfd48f0c545a88c9a4"
+
+FILESPATHPKG .= ":xtrans-${PV}:xtrans"
+
+ALLOW_EMPTY = "1"
+
+BBCLASSEXTEND = "native nativesdk"