summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
Diffstat (limited to 'packages')
-rw-r--r--packages/avahi/avahi_0.6.13.bb64
-rw-r--r--packages/avetanabt/avetanabt_20060413.bb63
-rw-r--r--packages/avetanabt/avetanabt_cvs.bb8
-rw-r--r--packages/busybox/busybox_1.2.1.bb2
-rw-r--r--packages/db/db-native_4.3.29.bb4
-rw-r--r--packages/dbus/dbus-glib-native/.mtn2git_empty0
-rw-r--r--packages/dbus/dbus-glib-native/run-with-tmp-session-bus.patch32
-rw-r--r--packages/dbus/dbus-glib-native_0.71.bb3
-rw-r--r--packages/dbus/dbus-native_0.92.bb27
-rw-r--r--packages/dbus/dbus_0.92.bb5
-rw-r--r--packages/glibc/glibc-package.bbclass2
-rw-r--r--packages/glibc/glibc_2.4.bb4
-rw-r--r--packages/gnome/gconf-dbus_svn.bb5
-rw-r--r--packages/gnome/libgnomecups_0.2.2.bb2
-rw-r--r--packages/gpe-edit/gpe-edit_0.32.bb4
-rw-r--r--packages/gstreamer/gst-plugins-base_0.10.7.bb5
-rw-r--r--packages/gstreamer/gst-plugins-ugly_0.10.4.bb2
-rw-r--r--packages/gstreamer/gstreamer_0.10.8.bb31
-rwxr-xr-xpackages/initscripts/initscripts-1.0/checkroot.sh5
-rwxr-xr-xpackages/initscripts/initscripts-1.0/devices2
-rw-r--r--packages/initscripts/initscripts-1.0/slugos/devices.patch4
-rw-r--r--packages/initscripts/initscripts_1.0.bb2
-rw-r--r--packages/ipsec-tools/ipsec-tools.inc3
-rw-r--r--packages/libvncserver/libvncserver_0.8.2.bb2
-rw-r--r--packages/linux/handhelds-pxa-2.6_cvs.bb4
-rw-r--r--packages/linux/linux-omap1_2.6.12-rc2.bb20
-rw-r--r--packages/networkmanager/networkmanager_0.6.4.bb2
-rw-r--r--packages/nfs-utils/nfs-utils_1.0.6.bb4
-rw-r--r--packages/pango/pango_1.14.0.bb8
-rw-r--r--packages/patch/patch-2.5.9/global-reject-file.diff201
-rw-r--r--packages/patch/patch-2.5.9/unified-reject-files.diff305
-rw-r--r--packages/patch/patch_2.5.9.bb5
-rw-r--r--packages/python/python-2.4.3-manifest.inc6
-rw-r--r--packages/qemu/files/arm_nptl.patch857
-rw-r--r--packages/qemu/qemu-0.8.0/.mtn2git_empty0
-rw-r--r--packages/qemu/qemu-0.8.0/arm_nptl.patch854
-rw-r--r--packages/qemu/qemu-0.8.2/.mtn2git_empty0
-rw-r--r--packages/qemu/qemu-0.8.2/arm_nptl.patch857
-rw-r--r--packages/qemu/qemu-native_0.8.0.bb1
-rw-r--r--packages/qemu/qemu-native_0.8.2.bb7
-rw-r--r--packages/qemu/qemu_0.8.0.bb5
-rw-r--r--packages/qemu/qemu_0.8.2.bb11
-rw-r--r--packages/qemu/qemu_cvs.bb7
-rw-r--r--packages/subversion/subversion_1.3.2.bb23
-rw-r--r--packages/syslog-ng/files/syslog-ng.conf89
-rw-r--r--packages/syslog-ng/syslog-ng_1.6.8.bb5
-rw-r--r--packages/udev/udev-097/links.conf20
-rw-r--r--packages/udev/udev_097.bb2
-rw-r--r--packages/xorg-xserver/xserver-kdrive_git.bb10
49 files changed, 3532 insertions, 52 deletions
diff --git a/packages/avahi/avahi_0.6.13.bb b/packages/avahi/avahi_0.6.13.bb
new file mode 100644
index 0000000000..7584a02514
--- /dev/null
+++ b/packages/avahi/avahi_0.6.13.bb
@@ -0,0 +1,64 @@
+DESCRIPTION = "Avahi implements the DNS-SD over Multicast DNS"
+SECTION = "network"
+PRIORITY = "optional"
+AUTHOR = "Lennart Poettering <lennart@poettering.net>"
+HOMEPAGE = "http://avahi.org"
+MAINTAINER = "Philipp Zabel <philipp.zabel@gmail.com>"
+LICENSE= "GPL"
+PR = "r0"
+
+DEPENDS = "expat libdaemon dbus"
+RRECOMMENDS = "libnss-mdns"
+
+SRC_URI = "http://avahi.org/download/avahi-${PV}.tar.gz"
+
+PACKAGES =+ "avahi-daemon libavahi-common libavahi-core libavahi-client avahi-dnsconfd libavahi-glib avahi-dev avahi-doc avahi-utils"
+
+FILES_libavahi-common = "${libdir}/libavahi-common.so.*"
+FILES_libavahi-core= "${libdir}/libavahi-core.so.*"
+FILES_avahi-daemon = "${sbindir}/avahi-daemon \
+ ${sysconfdir}/avahi/avahi-daemon.conf \
+ ${sysconfdir}/avahi/hosts \
+ ${sysconfdir}/avahi/services \
+ ${sysconfdir}/dbus-1 \
+ ${sysconfdir}/init.d/avahi-daemon \
+ ${datadir}/avahi/introspection/*.introspect \
+ ${datadir}/avahi/avahi-service.dtd \
+ ${datadir}/avahi/service-types"
+FILES_libavahi-client = "${libdir}/libavahi-client.so.*"
+FILES_avahi-dnsconfd = "${sbindir}/avahi-dnsconfd \
+ ${sysconfdir}/avahi/avahi-dnsconfd.action \
+ ${sysconfdir}/init.d/avahi-dnsconfd"
+FILES_libavahi-glib = "${libdir}/libavahi-glib.so.*"
+FILES_avahi-utils = "${bindir}/avahi-*"
+
+CONFFILES_avahi-daemon = "${sysconfdir}/avahi/avahi-daemon.conf"
+
+EXTRA_OECONF = "--with-distro=debian --disable-gdbm --disable-gtk --disable-mono --disable-monodoc --disable-qt3 --disable-qt4 --disable-python"
+inherit autotools pkgconfig update-rc.d
+
+
+do_stage() {
+ autotools_stage_all
+}
+
+INITSCRIPT_PACKAGES = "avahi-daemon avahi-dnsconfd"
+INITSCRIPT_NAME_avahi-daemon = "avahi-daemon"
+INITSCRIPT_PARAMS_avahi-daemon = "defaults 21 19"
+INITSCRIPT_NAME_avahi-dnsconfd = "avahi-dnsconfd"
+INITSCRIPT_PARAMS_avahi-dnsconfd = "defaults 22 19"
+
+pkg_postinst_avahi-daemon () {
+ # can't do this offline
+ if [ "x$D" != "x" ]; then
+ exit 1
+ fi
+ grep avahi /etc/group || addgroup avahi
+ grep avahi /etc/passwd || adduser --disabled-password --system --home /var/run/avahi-daemon --no-create-home avahi --ingroup avahi -g Avahi
+ /etc/init.d/dbus-1 force-reload
+}
+
+pkg_postrm_avahi-daemon () {
+ deluser avahi || true
+ delgroup avahi || true
+}
diff --git a/packages/avetanabt/avetanabt_20060413.bb b/packages/avetanabt/avetanabt_20060413.bb
new file mode 100644
index 0000000000..8472e0e0ce
--- /dev/null
+++ b/packages/avetanabt/avetanabt_20060413.bb
@@ -0,0 +1,63 @@
+DESCRIPTION = "avetanaBT: Bluetooth API implementation for Java (JSR-82)"
+SECTION = "devel"
+DEPENDS = "findutils-native jikes-native kaffeh-native fastjar-native bluez-libs classpath"
+MAINTAINER = "Mustafa Yuecel <yuecelm@ee.ethz.ch>"
+LICENSE = "GPL"
+HOMEPAGE = "http://sourceforge.net/projects/avetanabt/"
+
+PR = "r0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/avetanabt/avetanaBluetooth-${PV}.tgz"
+
+S = "${WORKDIR}/avetanabt"
+
+PACKAGES = "${PN}"
+FILES_${PN} = "${libdir}/libavetanaBT.so ${datadir}/avetanabt/avetanaBT.jar"
+
+do_compile() {
+
+ # doing nearly the same as in Makefile written...
+
+ # clean build directory
+ mkdir -p build
+ rm -fr build/*
+
+ # generate classes
+ # javac -> jikes
+ ${STAGING_BINDIR}/find {de,javax,com} -iname *.java > file.list
+ ${STAGING_BINDIR}/jikes -verbose --bootclasspath ${STAGING_DIR}/${BUILD_SYS}/share/kaffeh/rt.jar -d build @file.list
+
+ # create own version.xml (add version information available at runtime)
+ head -n 4 version.xml >> build/version.xml
+ echo " <build value=\"cvs${SRCDATE}\" date=\"${SRCDATE}\" time=\"${@time.strftime('%H:%M',time.gmtime())}\"/>" >> build/version.xml
+ tail -n 3 version.xml >> build/version.xml
+
+ # move classes into jar archive
+ # jar -> fastjar
+ ${STAGING_BINDIR}/fastjar -v -cf avetanaBT.jar -C build de -C build javax -C build com -C build version.xml
+
+ # JNI generated header file - de_avetana_bluetooth_stack_BlueZ.h
+ # javah -> kaffeh
+ ${STAGING_BINDIR}/kaffeh -jni -classpath avetanaBT.jar:${STAGING_DIR}/${BUILD_SYS}/share/kaffeh/rt.jar -d c de.avetana.bluetooth.stack.BlueZ
+
+ # Native language (C) library - libavetanaBT.so
+ ${CXX} ${CXXFLAGS} -shared -lbluetooth -I${STAGING_INCDIR}/classpath c/BlueZ.cpp -o libavetanaBT.so ${LDFLAGS}
+
+}
+
+do_stage() {
+
+ install -d ${STAGING_DIR}/${BUILD_SYS}/share/avetanabt
+ install avetanaBT.jar ${STAGING_DIR}/${BUILD_SYS}/share/avetanabt/
+
+}
+
+do_install() {
+
+ install -d ${D}${libdir}
+ install -m 0755 libavetanaBT.so ${D}${libdir}/
+
+ install -d ${D}${datadir}/avetanabt
+ install avetanaBT.jar ${D}${datadir}/avetanabt/
+
+}
diff --git a/packages/avetanabt/avetanabt_cvs.bb b/packages/avetanabt/avetanabt_cvs.bb
index 7f6bea2a20..c25699caf0 100644
--- a/packages/avetanabt/avetanabt_cvs.bb
+++ b/packages/avetanabt/avetanabt_cvs.bb
@@ -5,10 +5,12 @@ MAINTAINER = "Mustafa Yuecel <yuecelm@ee.ethz.ch>"
LICENSE = "GPL"
HOMEPAGE = "http://sourceforge.net/projects/avetanabt/"
-PV = "0.0+cvs${SRCDATE}"
-PR = "r3"
+DEFAULT_PREFERENCE = "-1"
-SRC_URI = "cvs://anonymous@cvs.sourceforge.net/cvsroot/avetanabt;module=avetanabt"
+PV = "20060413+cvs${SRCDATE}"
+PR = "r5"
+
+SRC_URI = "cvs://anonymous@avetanabt.cvs.sourceforge.net/cvsroot/avetanabt;module=avetanabt"
S = "${WORKDIR}/avetanabt"
diff --git a/packages/busybox/busybox_1.2.1.bb b/packages/busybox/busybox_1.2.1.bb
index 8b399f1626..741df3f62d 100644
--- a/packages/busybox/busybox_1.2.1.bb
+++ b/packages/busybox/busybox_1.2.1.bb
@@ -74,7 +74,7 @@ do_install () {
install -d ${D}/busybox
ls ${D} -R
- mv ${D}${base_bindir} ${D}${base_sbindir} ${D}${prefix} ${D}/busybox/
+ cp -dPr ${D}${base_bindir} ${D}${base_sbindir} ${D}${prefix} ${D}/busybox/
# Move the busybox binary back to /bin
install -d ${D}${base_bindir}
mv ${D}/busybox${base_bindir}/busybox ${D}${base_bindir}/
diff --git a/packages/db/db-native_4.3.29.bb b/packages/db/db-native_4.3.29.bb
index 12a875ff13..aac4e2021b 100644
--- a/packages/db/db-native_4.3.29.bb
+++ b/packages/db/db-native_4.3.29.bb
@@ -10,4 +10,8 @@ inherit native
require db_${PV}.bb
+do_package() {
+:
+}
+
PACKAGES = ""
diff --git a/packages/dbus/dbus-glib-native/.mtn2git_empty b/packages/dbus/dbus-glib-native/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/dbus/dbus-glib-native/.mtn2git_empty
diff --git a/packages/dbus/dbus-glib-native/run-with-tmp-session-bus.patch b/packages/dbus/dbus-glib-native/run-with-tmp-session-bus.patch
new file mode 100644
index 0000000000..186abdb56b
--- /dev/null
+++ b/packages/dbus/dbus-glib-native/run-with-tmp-session-bus.patch
@@ -0,0 +1,32 @@
+--- dbus-glib-0.71/tools/Makefile.am.orig 2006-08-27 12:54:34.351198198 +0200
++++ dbus-glib-0.71/tools/Makefile.am 2006-08-27 12:55:12.533584373 +0200
+@@ -9,7 +9,7 @@
+ BUILT_SOURCES = dbus-glib-bindings.h dbus-bus-introspect.xml
+
+ dbus-bus-introspect.xml:
+- DBUS_TOP_BUILDDIR=$(top_builddir) dbus-send --system --print-reply=literal --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.Introspectable.Introspect > dbus-bus-introspect.xml.tmp && mv dbus-bus-introspect.xml.tmp dbus-bus-introspect.xml
++ DBUS_TOP_BUILDDIR=$(top_builddir) ./run-with-tmp-session-bus.sh dbus-send --print-reply=literal --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.Introspectable.Introspect > dbus-bus-introspect.xml.tmp && mv dbus-bus-introspect.xml.tmp dbus-bus-introspect.xml
+
+ EXTRA_DIST = run-with-tmp-session-bus.sh
+
+--- dbus-glib-0.71/tools/run-with-tmp-session-bus.sh.orig 2006-08-27 11:52:17.497666746 +0200
++++ dbus-glib-0.71/tools/run-with-tmp-session-bus.sh 2006-08-27 12:53:22.626715838 +0200
+@@ -27,16 +27,15 @@
+ echo "escaped service dir is: $ESCAPED_SERVICE_DIR" >&2
+
+ ## create a configuration file based on the standard session.conf
+-cat $DBUS_TOP_BUILDDIR/tools/session.conf | \
++cat $datadir/dbus/session.conf | \
+ sed -e 's/<servicedir>.*$/<servicedir>'$ESCAPED_SERVICE_DIR'<\/servicedir>/g' | \
+ sed -e 's/<include.*$//g' \
+ > $CONFIG_FILE
+
+ echo "Created configuration file $CONFIG_FILE" >&2
+
+-export PATH=$DBUS_TOP_BUILDDIR/bus:$PATH
+ ## the libtool script found by the path search should already do this, but
+-export LD_LIBRARY_PATH=$DBUS_TOP_BUILDDIR/dbus/.libs:$LD_LIBRARY_PATH
++export LD_LIBRARY_PATH=$libdir:$LD_LIBRARY_PATH
+
+ unset DBUS_SESSION_BUS_ADDRESS
+ unset DBUS_SESSION_BUS_PID
diff --git a/packages/dbus/dbus-glib-native_0.71.bb b/packages/dbus/dbus-glib-native_0.71.bb
index 81a15c9b35..200a7133b2 100644
--- a/packages/dbus/dbus-glib-native_0.71.bb
+++ b/packages/dbus/dbus-glib-native_0.71.bb
@@ -6,7 +6,8 @@ LICENSE = "GPL"
DEPENDS = "expat glib-2.0 virtual/libintl dbus-native"
SRC_URI = "http://freedesktop.org/software/dbus/releases/dbus-glib-${PV}.tar.gz \
- file://cross.patch;patch=1"
+ file://cross.patch;patch=1 \
+ file://run-with-tmp-session-bus.patch;patch=1"
inherit autotools pkgconfig gettext native
diff --git a/packages/dbus/dbus-native_0.92.bb b/packages/dbus/dbus-native_0.92.bb
new file mode 100644
index 0000000000..db2d7014ef
--- /dev/null
+++ b/packages/dbus/dbus-native_0.92.bb
@@ -0,0 +1,27 @@
+SECTION = "base"
+PR = "r0"
+HOMEPAGE = "http://www.freedesktop.org/Software/dbus"
+DESCRIPTION = "message bus system for applications to talk to one another"
+LICENSE = "GPL"
+
+S = "${WORKDIR}/dbus-${PV}"
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/dbus"
+DEPENDS = "glib-2.0-native"
+
+SRC_URI = "http://freedesktop.org/software/dbus/releases/dbus-${PV}.tar.gz \
+ file://cross.patch;patch=1 \
+ file://tmpdir.patch;patch=1"
+
+inherit autotools pkgconfig gettext native
+
+EXTRA_OECONF = "--disable-qt --disable-qt3 --disable-gtk --disable-tests \
+ --disable-checks --disable-xml-docs --disable-doxygen-docs \
+ --with-xml=expat --without-x"
+
+do_stage () {
+ oe_runmake install
+ autotools_stage_all
+
+ # for dbus-glib-native introspection generation
+ install -m 0644 bus/session.conf ${STAGING_DATADIR}/dbus/session.conf
+}
diff --git a/packages/dbus/dbus_0.92.bb b/packages/dbus/dbus_0.92.bb
index a4ab61322f..7981a3f525 100644
--- a/packages/dbus/dbus_0.92.bb
+++ b/packages/dbus/dbus_0.92.bb
@@ -1,12 +1,11 @@
-DEFAULT_PREFERENCE="-1"
-
SECTION = "base"
-PR = "r1"
HOMEPAGE = "http://www.freedesktop.org/Software/dbus"
DESCRIPTION = "message bus system for applications to talk to one another"
LICENSE = "GPL"
DEPENDS = "expat glib-2.0 virtual/libintl"
+PR = "r1"
+
SRC_URI = "http://freedesktop.org/software/dbus/releases/dbus-${PV}.tar.gz \
file://cross.patch;patch=1 \
file://tmpdir.patch;patch=1 \
diff --git a/packages/glibc/glibc-package.bbclass b/packages/glibc/glibc-package.bbclass
index 3ce10b54de..ecf086815d 100644
--- a/packages/glibc/glibc-package.bbclass
+++ b/packages/glibc/glibc-package.bbclass
@@ -143,7 +143,7 @@ do_prep_locale_tree() {
for i in $treedir/${datadir}/i18n/charmaps/*gz; do
gunzip $i
done
- cp -a ${STAGING_LIBDIR}/* $treedir/lib
+ cp -a ${D}/lib/* $treedir/lib
if [ -f ${CROSS_DIR}/${TARGET_SYS}/lib/libgcc_s.* ]; then
cp -a ${CROSS_DIR}/${TARGET_SYS}/lib/libgcc_s.* $treedir/lib
fi
diff --git a/packages/glibc/glibc_2.4.bb b/packages/glibc/glibc_2.4.bb
index 5d8df56280..5ee57d4430 100644
--- a/packages/glibc/glibc_2.4.bb
+++ b/packages/glibc/glibc_2.4.bb
@@ -3,7 +3,6 @@ HOMEPAGE = "http://www.gnu.org/software/libc/libc.html"
LICENSE = "LGPL"
SECTION = "libs"
PRIORITY = "required"
-DEFAULT_PREFERENCE = "-1"
PR = "r10"
# the -isystem in bitbake.conf screws up glibc do_stage
@@ -16,7 +15,7 @@ FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/glibc-2.4"
GLIBC_ADDONS ?= "ports,nptl,libidn"
GLIBC_EXTRA_OECONF ?= ""
-GLIBC_BROKEN_LOCALES = "sid_ET tr_TR mn_MN"
+GLIBC_BROKEN_LOCALES = "sid_ET tr_TR mn_MN gez_ET gez_ER bn_BD te_IN"
#
# For now, we will skip building of a gcc package if it is a uclibc one
@@ -123,6 +122,7 @@ do_munge() {
addtask munge before do_patch after do_unpack
+
do_configure () {
# override this function to avoid the autoconf/automake/aclocal/autoheader
# calls for now
diff --git a/packages/gnome/gconf-dbus_svn.bb b/packages/gnome/gconf-dbus_svn.bb
index 9fb02f8211..5ab880d921 100644
--- a/packages/gnome/gconf-dbus_svn.bb
+++ b/packages/gnome/gconf-dbus_svn.bb
@@ -1,5 +1,5 @@
SECTION = "x11/utils"
-DEPENDS = "gtk+ glib-2.0 dbus libxml2 popt"
+DEPENDS = "gtk+ glib-2.0 dbus dbus-glib libxml2 popt"
DESCRIPTION = "Settings daemon using DBUS for communication."
LICENSE = "GPL"
MAINTAINER = "Florian Boor <florian@kernelconcepts.de>"
@@ -21,7 +21,8 @@ S = "${WORKDIR}/trunk"
PARALLEL_MAKE = ""
-FILES_${PN} += " ${libdir}/GConf/2/*.so ${libdir}/dbus-1.0 ${sysconfdir} ${datadir}/dbus*"
+FILES_${PN} += " ${libdir}/gconf-dbus/2/*.so ${libdir}/dbus-1.0 ${sysconfdir} ${datadir}/dbus*"
+FILES_${PN}-dbg += "${libdir}/gconf-dbus/2/.debug"
EXTRA_OECONF = " --with-ipc=dbus --disable-gtk-doc --enable-gtk --host=${HOST_SYS} --enable-shared --disable-static"
diff --git a/packages/gnome/libgnomecups_0.2.2.bb b/packages/gnome/libgnomecups_0.2.2.bb
index 86214904c8..53251ba84b 100644
--- a/packages/gnome/libgnomecups_0.2.2.bb
+++ b/packages/gnome/libgnomecups_0.2.2.bb
@@ -2,7 +2,7 @@ DESCRIPTION="Gnome Cups Manager"
LICENSE="GPLv2"
PR="r0"
-DEPENDS="glib-2.0 gtk+ pango cups intltool"
+DEPENDS="glib-2.0 gtk+ pango cups intltool libgnomeui"
inherit gnome pkgconfig
diff --git a/packages/gpe-edit/gpe-edit_0.32.bb b/packages/gpe-edit/gpe-edit_0.32.bb
index af59b81e43..e504ec2271 100644
--- a/packages/gpe-edit/gpe-edit_0.32.bb
+++ b/packages/gpe-edit/gpe-edit_0.32.bb
@@ -1,6 +1,8 @@
MAINTAINER = "Phil Blundell <pb@handhelds.org>"
-SECTION = "gpe"DESCRIPTION = "Editor for the GPE Palmtop Environment"
+SECTION = "gpe"
+DESCRIPTION = "Editor for the GPE Palmtop Environment"
LICENSE = "GPL"
+PR = "r1"
DEPENDS = "gtk+ libgpewidget"
diff --git a/packages/gstreamer/gst-plugins-base_0.10.7.bb b/packages/gstreamer/gst-plugins-base_0.10.7.bb
index 48e24bf756..1679ecb1ca 100644
--- a/packages/gstreamer/gst-plugins-base_0.10.7.bb
+++ b/packages/gstreamer/gst-plugins-base_0.10.7.bb
@@ -1,2 +1,7 @@
require gst-plugins.inc
PROVIDES_${PN} += "gst-plugins"
+
+do_stage() {
+ autotools_stage_all
+}
+
diff --git a/packages/gstreamer/gst-plugins-ugly_0.10.4.bb b/packages/gstreamer/gst-plugins-ugly_0.10.4.bb
new file mode 100644
index 0000000000..7c548acf7d
--- /dev/null
+++ b/packages/gstreamer/gst-plugins-ugly_0.10.4.bb
@@ -0,0 +1,2 @@
+require gst-plugins.inc
+DEPENDS += "gst-plugins-base"
diff --git a/packages/gstreamer/gstreamer_0.10.8.bb b/packages/gstreamer/gstreamer_0.10.8.bb
new file mode 100644
index 0000000000..251eb42a5d
--- /dev/null
+++ b/packages/gstreamer/gstreamer_0.10.8.bb
@@ -0,0 +1,31 @@
+DESCRIPTION = "GStreamer is a multimedia framework for encoding and decoding video and sound. \
+It supports a wide range of formats including mp3, ogg, avi, mpeg and quicktime."
+SECTION = "multimedia"
+PRIORITY = "optional"
+LICENSE = "LGPL"
+HOMEPAGE = "http://www.gstreamer.net/"
+MAINTAINER = "Felix Domke <tmbinc@elitedvb.net>"
+DEPENDS = "libxml2 glib-2.0 gettext-native popt"
+
+PR = "r0"
+# until we have decided a final naming scheme,
+# don't use this package as a replacement for
+# version 0.8
+DEFAULT_PREFERENCE = "-1"
+
+inherit autotools pkgconfig
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${PV}.tar.bz2"
+EXTRA_OECONF = "--disable-docs-build --disable-dependency-tracking --with-check=no"
+
+do_stage() {
+ oe_runmake install prefix=${STAGING_DIR} \
+ bindir=${STAGING_BINDIR} \
+ includedir=${STAGING_INCDIR} \
+ libdir=${STAGING_LIBDIR} \
+ datadir=${STAGING_DATADIR} \
+ mandir=${STAGING_DIR}/share/man
+}
+
+FILES_${PN} += " ${libdir}/gstreamer-0.10/*.so"
+FILES_${PN}-dev += " ${libdir}/gstreamer-0.10/*.la ${libdir}/gstreamer-0.10/*.a"
diff --git a/packages/initscripts/initscripts-1.0/checkroot.sh b/packages/initscripts/initscripts-1.0/checkroot.sh
index 8255038c32..0283e1acca 100755
--- a/packages/initscripts/initscripts-1.0/checkroot.sh
+++ b/packages/initscripts/initscripts-1.0/checkroot.sh
@@ -148,7 +148,12 @@ fi
# remount the rootfs rw but do not try to change mtab because it
# is on a ro fs until the remount succeeded. Then clean up old mtabs
# and finally write the new mtab.
+# This part is only needed if the rootfs was mounted ro.
#
+if [ $(grep rootfs /proc/mounts | awk '{print $4}') = rw ]; then
+ exit 0
+fi
+echo "Remounting root file system..."
mount -n -o remount,$rootmode /
if test "$rootmode" = rw
then
diff --git a/packages/initscripts/initscripts-1.0/devices b/packages/initscripts/initscripts-1.0/devices
index 28fb71fe3f..fb0f851d16 100755
--- a/packages/initscripts/initscripts-1.0/devices
+++ b/packages/initscripts/initscripts-1.0/devices
@@ -6,7 +6,7 @@
. /etc/default/rcS
# exit without doing anything if udev is active
-if test -e /dev/.udevdb; then
+if test -e /dev/.udev -o -e /dev/.udevdb; then
exit 0
fi
diff --git a/packages/initscripts/initscripts-1.0/slugos/devices.patch b/packages/initscripts/initscripts-1.0/slugos/devices.patch
index 26b1841d5b..2583b62f48 100644
--- a/packages/initscripts/initscripts-1.0/slugos/devices.patch
+++ b/packages/initscripts/initscripts-1.0/slugos/devices.patch
@@ -8,8 +8,8 @@
. /etc/default/rcS
# exit without doing anything if udev is active
--if test -e /dev/.udevdb; then
-+if test -e /dev/.udevdb -o -e /dev/.permanent; then
+-if test -e /dev/.udev -o -e /dev/.udevdb; then
++if test -e /dev/.udev -o -e /dev/.udevdb -o -e /dev/.permanent; then
exit 0
fi
diff --git a/packages/initscripts/initscripts_1.0.bb b/packages/initscripts/initscripts_1.0.bb
index 0d14403a36..29747d41c2 100644
--- a/packages/initscripts/initscripts_1.0.bb
+++ b/packages/initscripts/initscripts_1.0.bb
@@ -6,7 +6,7 @@ DEPENDS = "makedevs"
DEPENDS_openzaurus = "makedevs virtual/kernel"
RDEPENDS = "makedevs"
LICENSE = "GPL"
-PR = "r74"
+PR = "r75"
SRC_URI = "file://halt \
file://ramdisk \
diff --git a/packages/ipsec-tools/ipsec-tools.inc b/packages/ipsec-tools/ipsec-tools.inc
index 2b1669f987..31ec6c87bf 100644
--- a/packages/ipsec-tools/ipsec-tools.inc
+++ b/packages/ipsec-tools/ipsec-tools.inc
@@ -3,7 +3,8 @@ Linux-2.6 IPsec implementation."
DEPENDS = "virtual/kernel openssl readline flex"
LICENSE = "BSD"
MAINTAINER = "Chris Larson <kergoth@handhelds.org>"
-SECTION = "console/net"
+SECTION = "console/network"
+PR = "r1"
inherit autotools
diff --git a/packages/libvncserver/libvncserver_0.8.2.bb b/packages/libvncserver/libvncserver_0.8.2.bb
index 480a888745..8ceec7e62a 100644
--- a/packages/libvncserver/libvncserver_0.8.2.bb
+++ b/packages/libvncserver/libvncserver_0.8.2.bb
@@ -6,7 +6,7 @@ MAINTAINER = "Patrik Gfeller <gfellerpatrik@gmx.net>"
SECTION = "libs"
PRIORITY = "optional"
PROVIDES = "x11vnc"
-DEPENDS = "virtual/libsdl virtual/libx11 zlib jpeg"
+DEPENDS = "virtual/libsdl virtual/libx11 zlib jpeg libxext"
PR = "r2"
SRC_URI = "${SOURCEFORGE_MIRROR}/libvncserver/LibVNCServer-${PV}.tar.gz;md5sum=17a18e398af6c1730f72068022a152aa"
diff --git a/packages/linux/handhelds-pxa-2.6_cvs.bb b/packages/linux/handhelds-pxa-2.6_cvs.bb
index 7dfcb4d237..75f4425638 100644
--- a/packages/linux/handhelds-pxa-2.6_cvs.bb
+++ b/packages/linux/handhelds-pxa-2.6_cvs.bb
@@ -27,8 +27,8 @@ ALLOW_EMPTY_htcuniversal = 1
K_MAJOR = "2"
K_MINOR = "6"
-K_MICRO = "16"
-HHV = "5"
+K_MICRO = "17"
+HHV = "0"
#
KERNEL_PRIORITY = "${@'%d' % (int(bb.data.getVar('K_MAJOR',d,1)) * 100000000 + int(bb.data.getVar('K_MINOR',d,1)) * 1000000 + int(bb.data.getVar('K_MICRO',d,1)) * 10000 + float(bb.data.getVar('HHV',d,1)))}"
diff --git a/packages/linux/linux-omap1_2.6.12-rc2.bb b/packages/linux/linux-omap1_2.6.12-rc2.bb
index 7ea9e16091..46e7d0ba95 100644
--- a/packages/linux/linux-omap1_2.6.12-rc2.bb
+++ b/packages/linux/linux-omap1_2.6.12-rc2.bb
@@ -14,7 +14,7 @@ KERNEL_IMAGETYPE = "vmlinux"
KERNEL_OUTPUT = "arch/${ARCH}/boot/compressed/${KERNEL_IMAGETYPE}"
KERNEL_CCSUFFIX = "-3.3.4"
-#DEPENDS = "uboot"
+DEPENDS = "u-boot"
inherit kernel
@@ -25,13 +25,17 @@ do_configure_prepend() {
oe_runmake oldconfig
}
-do_deploy_omap5912osk() {
- install -d ${DEPLOY_DIR_IMAGE}
- arm-linux-objcopy -O binary -R .note -R .comment -S arch/arm/boot/compressed/vmlinux ${DEPLOY_DIR}/linux.bin
- gzip -f -9 ${DEPLOY_DIR}/linux.bin
- mkimage -A arm -O linux -T kernel -C gzip -a 0x10c08000 -e 0x10c08000 -n "OE" -d ${DEPLOY_DIR}/linux.bin.gz ${DEPLOY_DIR}/uImage_bb.cc
- cp ${DEPLOY_DIR}/uImage_bb.cc /tftpboot
-# install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}-${DATETIME}.bin
+do_deploy() {
+ if [ "${MACHINE}" == "omap5912osk" ]; then
+ install -d ${DEPLOY_DIR_IMAGE}
+ arm-linux-objcopy -O binary -R .note -R .comment -S arch/arm/boot/compressed/vmlinux ${DEPLOY_DIR_IMAGE}/linux.bin
+ gzip -f -9 ${DEPLOY_DIR_IMAGE}/linux.bin
+ mkimage -A arm -O linux -T kernel -C gzip -a 0x10c08000 -e 0x10c08000 -n "OE" -d ${DEPLOY_DIR_IMAGE}/linux.bin.gz ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}-${DATETIME}.bin
+ rm ${DEPLOY_DIR_IMAGE}/linux.bin.gz
+
+# cp ${DEPLOY_DIR}/uImage_bb.cc /tftpboot
+# install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}-${DATETIME}.bin
+ fi
}
diff --git a/packages/networkmanager/networkmanager_0.6.4.bb b/packages/networkmanager/networkmanager_0.6.4.bb
index d30a101bcb..e9c02ba3dd 100644
--- a/packages/networkmanager/networkmanager_0.6.4.bb
+++ b/packages/networkmanager/networkmanager_0.6.4.bb
@@ -4,7 +4,7 @@ LICENSE = "GPL"
HOMEPAGE = "http://www.gnome.org"
MAINTAINER = "Milan Plzik <mmp@handhelds.org>"
PRIORITY = "optional"
-DEPENDS = "libnl dbus dbus-glib libhal-nm libgpewidget gnome-keyring gconf-dbus wireless-tools"
+DEPENDS = "libnl dbus dbus-glib libhal-nm libgpewidget gnome-keyring gconf-dbus wireless-tools libglade"
RDEPENDS = "wpa-supplicant dhcdbd gnome-keyring hicolor-icon-theme"
PR = "r1"
diff --git a/packages/nfs-utils/nfs-utils_1.0.6.bb b/packages/nfs-utils/nfs-utils_1.0.6.bb
index 17bc5a6f9f..4f5e64b352 100644
--- a/packages/nfs-utils/nfs-utils_1.0.6.bb
+++ b/packages/nfs-utils/nfs-utils_1.0.6.bb
@@ -1,9 +1,9 @@
DESCRIPTION = "userspace utilities for kernel nfs"
PRIORITY = "optional"
-SECTION = "console/networking"
+SECTION = "console/network"
MAINTAINER = "dyoung <dyoung@thestuffguy.com>"
LICENSE = "GPL"
-PR = "r5"
+PR = "r6"
SRC_URI = "${SOURCEFORGE_MIRROR}/nfs/nfs-utils-${PV}.tar.gz \
file://acinclude-lossage.patch;patch=1 \
diff --git a/packages/pango/pango_1.14.0.bb b/packages/pango/pango_1.14.0.bb
index 77eee85214..19fc1d7a92 100644
--- a/packages/pango/pango_1.14.0.bb
+++ b/packages/pango/pango_1.14.0.bb
@@ -7,6 +7,8 @@ Open Source framework for the layout and rendering of \
internationalized text."
PR = "r0"
+PACKAGES_DYNAMIC = "pango-module-*"
+
RRECOMMENDS_${PN} = "pango-module-basic-x pango-module-basic-fc"
# seems to go wrong with default cflags
@@ -26,11 +28,7 @@ FILES_${PN} = "/etc ${bindir} ${libdir}/libpango*.so.*"
LIBV = "1.5.0"
do_stage () {
- for lib in pango pangox pangoft2 pangoxft pangocairo; do
- oe_libinstall -so -C pango lib$lib-1.0 ${STAGING_LIBDIR}/
- done
- install -d ${STAGING_INCDIR}/pango
- install -m 0644 ${S}/pango/pango*.h ${STAGING_INCDIR}/pango/
+ autotools_stage_all
}
postinst_prologue() {
diff --git a/packages/patch/patch-2.5.9/global-reject-file.diff b/packages/patch/patch-2.5.9/global-reject-file.diff
new file mode 100644
index 0000000000..66065fcbf5
--- /dev/null
+++ b/packages/patch/patch-2.5.9/global-reject-file.diff
@@ -0,0 +1,201 @@
+Index: patch-2.5.9/patch.man
+===================================================================
+--- patch-2.5.9.orig/patch.man
++++ patch-2.5.9/patch.man
+@@ -520,6 +520,15 @@ file.
+ \fB\*=reject\-unified\fP
+ Produce unified reject files. The default is to produce context type reject files.
+ .TP
++.BI \*=global\-reject\-file= rejectfile
++Put all rejects into
++.I rejectfile
++instead of creating separate reject files for all files that have rejects. The
++.I rejectfile
++will contain headers that identify which file each reject refers to. Note that
++the global reject file is created even if \-\-dry\-run is specified (while
++non-global reject files will only be created without \-\-dry\-run).
++.TP
+ \fB\-R\fP or \fB\*=reverse\fP
+ Assume that this patch was created with the old and new files swapped.
+ (Yes, I'm afraid that does happen occasionally, human nature being what it
+Index: patch-2.5.9/patch.c
+===================================================================
+--- patch-2.5.9.orig/patch.c
++++ patch-2.5.9/patch.c
+@@ -67,6 +67,7 @@ static bool similar (char const *, size_
+ static bool spew_output (struct outstate *);
+ static char const *make_temp (char);
+ static int numeric_string (char const *, bool, char const *);
++static void reject_header (const char *filename);
+ static void abort_hunk (void);
+ static void cleanup (void);
+ static void get_some_switches (void);
+@@ -98,6 +99,7 @@ static int Argc;
+ static char * const *Argv;
+
+ static FILE *rejfp; /* reject file pointer */
++static char *global_reject;
+
+ static char const *patchname;
+ static char *rejname;
+@@ -172,6 +174,10 @@ main (int argc, char **argv)
+ /* Make sure we clean up in case of disaster. */
+ set_signals (false);
+
++ /* initialize global reject file */
++ if (global_reject)
++ init_reject ();
++
+ for (
+ open_patch_file (patchname);
+ there_is_another_patch();
+@@ -208,8 +214,9 @@ main (int argc, char **argv)
+ init_output (TMPOUTNAME, exclusive, &outstate);
+ }
+
+- /* initialize reject file */
+- init_reject ();
++ /* initialize per-patch reject file */
++ if (!global_reject)
++ init_reject ();
+
+ /* find out where all the lines are */
+ if (!skip_rest_of_patch)
+@@ -278,6 +285,8 @@ main (int argc, char **argv)
+
+ newwhere = pch_newfirst() + last_offset;
+ if (skip_rest_of_patch) {
++ if (!failed)
++ reject_header(outname);
+ abort_hunk();
+ failed++;
+ if (verbosity == VERBOSE)
+@@ -292,6 +301,8 @@ main (int argc, char **argv)
+ say ("Patch attempted to create file %s, which already exists.\n",
+ quotearg (inname));
+
++ if (!failed)
++ reject_header(outname);
+ abort_hunk();
+ failed++;
+ if (verbosity != SILENT)
+@@ -299,6 +310,8 @@ main (int argc, char **argv)
+ format_linenum (numbuf, newwhere));
+ }
+ else if (! apply_hunk (&outstate, where)) {
++ if (!failed)
++ reject_header(outname);
+ abort_hunk ();
+ failed++;
+ if (verbosity != SILENT)
+@@ -332,7 +345,8 @@ main (int argc, char **argv)
+ fclose (outstate.ofp);
+ outstate.ofp = 0;
+ }
+- fclose (rejfp);
++ if (!global_reject)
++ fclose (rejfp);
+ continue;
+ }
+
+@@ -412,13 +426,13 @@ main (int argc, char **argv)
+ }
+ }
+ if (diff_type != ED_DIFF) {
+- if (fclose (rejfp) != 0)
++ if (!global_reject && fclose (rejfp) != 0)
+ write_fatal ();
+ if (failed) {
+ somefailed = true;
+ say ("%d out of %d hunk%s %s", failed, hunk, "s" + (hunk == 1),
+ skip_rest_of_patch ? "ignored" : "FAILED");
+- if (outname) {
++ if (!global_reject && outname) {
+ char *rej = rejname;
+ if (!rejname) {
+ rej = xmalloc (strlen (outname) + 5);
+@@ -445,6 +459,20 @@ main (int argc, char **argv)
+ }
+ set_signals (true);
+ }
++ if (global_reject)
++ {
++ if (fclose (rejfp) != 0)
++ write_fatal ();
++ if (somefailed)
++ {
++ say (" -- saving rejects to file %s\n", quotearg (global_reject));
++ /*if (! dry_run)
++ {*/
++ move_file (TMPREJNAME, &TMPREJNAME_needs_removal,
++ global_reject, 0644, false);
++ /*}*/
++ }
++ }
+ if (outstate.ofp && (ferror (outstate.ofp) || fclose (outstate.ofp) != 0))
+ write_fatal ();
+ cleanup ();
+@@ -523,6 +551,7 @@ static struct option const longopts[] =
+ {"posix", no_argument, NULL, CHAR_MAX + 7},
+ {"quoting-style", required_argument, NULL, CHAR_MAX + 8},
+ {"unified-reject-files", no_argument, NULL, CHAR_MAX + 9},
++ {"global-reject-file", required_argument, NULL, CHAR_MAX + 10},
+ {NULL, no_argument, NULL, 0}
+ };
+
+@@ -582,6 +611,7 @@ static char const *const option_help[] =
+ " --dry-run Do not actually change any files; just print what would happen.",
+ " --posix Conform to the POSIX standard.",
+ " --unified-reject-files Create unified reject files.",
++" --global-reject-file=file Put all rejects into one file.",
+ "",
+ " -d DIR --directory=DIR Change the working directory to DIR first.",
+ #if HAVE_SETMODE_DOS
+@@ -784,6 +814,9 @@ get_some_switches (void)
+ case CHAR_MAX + 9:
+ unified_reject_files = true;
+ break;
++ case CHAR_MAX + 10:
++ global_reject = savestr (optarg);
++ break;
+ default:
+ usage (stderr, 2);
+ }
+@@ -933,6 +966,37 @@ locate_hunk (LINENUM fuzz)
+ }
+
+ static char *
++format_timestamp (char timebuf[37], bool which)
++{
++ time_t ts = pch_timestamp(which);
++ if (ts != -1)
++ {
++ struct tm *tm = localtime(&ts);
++ strftime(timebuf, 37, "\t%Y-%m-%d %H:%M:%S.000000000 %z", tm);
++ }
++ else
++ timebuf[0] = 0;
++ return timebuf;
++}
++
++/* Write a header in a reject file that combines multiple hunks. */
++static void
++reject_header (const char *outname)
++{
++ char timebuf0[37], timebuf1[37];
++ if (!global_reject)
++ return;
++ if (diff_type == UNI_DIFF)
++ fprintf(rejfp, "--- %s.orig%s\n+++ %s%s\n",
++ outname, format_timestamp(timebuf0, reverse),
++ outname, format_timestamp(timebuf1, !reverse));
++ else
++ fprintf(rejfp, "*** %s.orig%s\n--- %s%s\n",
++ outname, format_timestamp(timebuf0, reverse),
++ outname, format_timestamp(timebuf1, !reverse));
++}
++
++static char *
+ format_linerange (char rangebuf[LINENUM_LENGTH_BOUND*2 + 2],
+ LINENUM first, LINENUM lines)
+ {
diff --git a/packages/patch/patch-2.5.9/unified-reject-files.diff b/packages/patch/patch-2.5.9/unified-reject-files.diff
new file mode 100644
index 0000000000..6bfa00dd75
--- /dev/null
+++ b/packages/patch/patch-2.5.9/unified-reject-files.diff
@@ -0,0 +1,305 @@
+Generate unified diff style reject files. Also include the C function names
+in reject files whenever possible.
+
+ $ cat > f.orig
+ < a() {
+ < 2
+ < 3
+ <
+ < 5
+ < 6
+ < }
+
+ $ sed -e 's/5/5a/' f.orig > f
+ $ diff -U2 -p f.orig f > f.diff
+ $ sed -e 's/5/5a/' -e 's/6/6x/' f.orig > f
+ $ ./patch -F0 -s --no-backup-if-mismatch f --reject-unified < f.diff
+ > 1 out of 1 hunk FAILED -- saving rejects to file f.rej
+
+ $ cat f.rej
+ > @@ -3,5 +3,5 @@ a() {
+ > 3
+ >
+ > -5
+ > +5a
+ > 6
+ > }
+
+ $ ./patch -F0 -s --no-backup-if-mismatch f < f.diff
+ > 1 out of 1 hunk FAILED -- saving rejects to file f.rej
+
+ $ cat f.rej
+ > *************** a() {
+ > *** 3,7 ****
+ > 3
+ >
+ > - 5
+ > 6
+ > }
+ > --- 3,7 ----
+ > 3
+ >
+ > + 5a
+ > 6
+ > }
+
+ $ diff -Nu -p /dev/null f.orig > f2.diff
+ $ ./patch -F0 -s --no-backup-if-mismatch f --reject-unified < f2.diff
+ > Patch attempted to create file f, which already exists.
+ > 1 out of 1 hunk FAILED -- saving rejects to file f.rej
+
+ $ cat f.rej
+ > @@ -0,0 +1,7 @@
+ > +a() {
+ > +2
+ > +3
+ > +
+ > +5
+ > +6
+ > +}
+
+ $ rm -f f f.orig f.rej f.diff f2.diff
+
+Index: patch-2.5.9/pch.c
+===================================================================
+--- patch-2.5.9.orig/pch.c
++++ patch-2.5.9/pch.c
+@@ -68,6 +68,7 @@ static LINENUM p_sline; /* and the lin
+ static LINENUM p_hunk_beg; /* line number of current hunk */
+ static LINENUM p_efake = -1; /* end of faked up lines--don't free */
+ static LINENUM p_bfake = -1; /* beg of faked up lines */
++static char *p_c_function; /* the C function a hunk is in */
+
+ enum nametype { OLD, NEW, INDEX, NONE };
+
+@@ -888,6 +889,19 @@ another_hunk (enum diff difftype, bool r
+ next_intuit_at(line_beginning,p_input_line);
+ return chars_read == (size_t) -1 ? -1 : 0;
+ }
++ s = buf;
++ while (*s == '*')
++ s++;
++ if (*s == ' ')
++ {
++ p_c_function = s;
++ while (*s != '\n')
++ s++;
++ *s = '\0';
++ p_c_function = savestr (p_c_function);
++ }
++ else
++ p_c_function = NULL;
+ p_hunk_beg = p_input_line + 1;
+ while (p_end < p_max) {
+ chars_read = get_line ();
+@@ -1277,8 +1291,18 @@ another_hunk (enum diff difftype, bool r
+ else
+ p_repl_lines = 1;
+ if (*s == ' ') s++;
+- if (*s != '@')
++ if (*s++ != '@')
+ malformed ();
++ if (*s++ == '@' && *s == ' ' && *s != '\0')
++ {
++ p_c_function = s;
++ while (*s != '\n')
++ s++;
++ *s = '\0';
++ p_c_function = savestr (p_c_function);
++ }
++ else
++ p_c_function = NULL;
+ if (!p_ptrn_lines)
+ p_first++; /* do append rather than insert */
+ if (!p_repl_lines)
+@@ -1884,6 +1908,12 @@ pch_hunk_beg (void)
+ return p_hunk_beg;
+ }
+
++char const *
++pch_c_function (void)
++{
++ return p_c_function;
++}
++
+ /* Is the newline-terminated line a valid `ed' command for patch
+ input? If so, return the command character; if not, return 0.
+ This accepts accepts just a subset of the valid commands, but it's
+Index: patch-2.5.9/pch.h
+===================================================================
+--- patch-2.5.9.orig/pch.h
++++ patch-2.5.9/pch.h
+@@ -25,6 +25,7 @@
+ LINENUM pch_end (void);
+ LINENUM pch_first (void);
+ LINENUM pch_hunk_beg (void);
++char const *pch_c_function (void);
+ LINENUM pch_newfirst (void);
+ LINENUM pch_prefix_context (void);
+ LINENUM pch_ptrn_lines (void);
+Index: patch-2.5.9/patch.man
+===================================================================
+--- patch-2.5.9.orig/patch.man
++++ patch-2.5.9/patch.man
+@@ -517,6 +517,9 @@ instead of the default
+ .B \&.rej
+ file.
+ .TP
++\fB\*=reject\-unified\fP
++Produce unified reject files. The default is to produce context type reject files.
++.TP
+ \fB\-R\fP or \fB\*=reverse\fP
+ Assume that this patch was created with the old and new files swapped.
+ (Yes, I'm afraid that does happen occasionally, human nature being what it
+Index: patch-2.5.9/common.h
+===================================================================
+--- patch-2.5.9.orig/common.h
++++ patch-2.5.9/common.h
+@@ -146,6 +146,7 @@ XTERN int invc;
+ XTERN struct stat instat;
+ XTERN bool dry_run;
+ XTERN bool posixly_correct;
++XTERN bool unified_reject_files;
+
+ XTERN char const *origprae;
+ XTERN char const *origbase;
+Index: patch-2.5.9/patch.c
+===================================================================
+--- patch-2.5.9.orig/patch.c
++++ patch-2.5.9/patch.c
+@@ -522,6 +522,7 @@ static struct option const longopts[] =
+ {"no-backup-if-mismatch", no_argument, NULL, CHAR_MAX + 6},
+ {"posix", no_argument, NULL, CHAR_MAX + 7},
+ {"quoting-style", required_argument, NULL, CHAR_MAX + 8},
++ {"unified-reject-files", no_argument, NULL, CHAR_MAX + 9},
+ {NULL, no_argument, NULL, 0}
+ };
+
+@@ -580,6 +581,7 @@ static char const *const option_help[] =
+ " --verbose Output extra information about the work being done.",
+ " --dry-run Do not actually change any files; just print what would happen.",
+ " --posix Conform to the POSIX standard.",
++" --unified-reject-files Create unified reject files.",
+ "",
+ " -d DIR --directory=DIR Change the working directory to DIR first.",
+ #if HAVE_SETMODE_DOS
+@@ -779,6 +781,9 @@ get_some_switches (void)
+ (enum quoting_style) i);
+ }
+ break;
++ case CHAR_MAX + 9:
++ unified_reject_files = true;
++ break;
+ default:
+ usage (stderr, 2);
+ }
+@@ -927,6 +932,24 @@ locate_hunk (LINENUM fuzz)
+ return 0;
+ }
+
++static char *
++format_linerange (char rangebuf[LINENUM_LENGTH_BOUND*2 + 2],
++ LINENUM first, LINENUM lines)
++{
++ if (lines == 1)
++ rangebuf = format_linenum (rangebuf, first);
++ else
++ {
++ char *rb;
++ rangebuf = format_linenum (rangebuf + LINENUM_LENGTH_BOUND + 1, lines);
++ rb = rangebuf-1;
++ rangebuf = format_linenum (rangebuf - LINENUM_LENGTH_BOUND - 1,
++ (lines > 0) ? first : 0);
++ *rb = ',';
++ }
++ return rangebuf;
++}
++
+ /* We did not find the pattern, dump out the hunk so they can handle it. */
+
+ static void
+@@ -943,8 +966,83 @@ abort_hunk (void)
+ (int) NEW_CONTEXT_DIFF <= (int) diff_type ? " ****" : "";
+ char const *minuses =
+ (int) NEW_CONTEXT_DIFF <= (int) diff_type ? " ----" : " -----";
++ char const *function = pch_c_function();
++ if (function == NULL)
++ function = "";
++
++ if (unified_reject_files)
++ {
++ /* produce unified reject files */
++ char rangebuf0[LINENUM_LENGTH_BOUND*2 + 2];
++ char rangebuf1[LINENUM_LENGTH_BOUND*2 + 2];
++ LINENUM j;
++
++ /* Find the beginning of the remove and insert section. */
++ for (j = 0; j <= pat_end; j++)
++ if (pch_char (j) == '=')
++ break;
++ for (i = j+1; i <= pat_end; i++)
++ if (pch_char (i) == '^')
++ break;
++ if (pch_char (0) != '*' || j > pat_end || i > pat_end+1)
++ fatal ("internal error in abort_hunk");
++ i = 1; j++;
++
++ /* @@ -from,lines +to,lines @@ */
++ fprintf (rejfp, "@@ -%s +%s @@%s\n",
++ format_linerange (rangebuf0, oldfirst, pch_ptrn_lines()),
++ format_linerange (rangebuf1, newfirst, pch_repl_lines()),
++ function);
++
++ while ( (i <= pat_end && pch_char (i) != '=')
++ || (j <= pat_end && pch_char (j) != '^'))
++ {
++ if (i <= pat_end
++ && (pch_char (i) == '-' || pch_char (i) == '!'))
++ {
++ fputc('-', rejfp);
++ pch_write_line (i++, rejfp);
++ }
++ else if (j <= pat_end
++ && (pch_char (j) == '+' || pch_char (j) == '!'))
++ {
++ fputc('+', rejfp);
++ pch_write_line (j++, rejfp);
++ }
++ else if ((i <= pat_end
++ && (pch_char (i) == ' ' || pch_char (i) == '\n')) &&
++ (j > pat_end
++ || (pch_char (j) == ' ' || pch_char (j) == '\n')))
++ {
++ /* Unless j is already past the end, lines i and j
++ must be equal here. */
++
++ if (pch_char (i) == ' ')
++ fputc(' ', rejfp);
++ pch_write_line (i++, rejfp);
++ if (j <= pat_end)
++ j++;
++ }
++ else if ((j <= pat_end &&
++ (pch_char (j) == ' ' || pch_char (j) == '\n')) &&
++ (pch_char (i) == '='))
++ {
++ if (pch_char (j) == ' ')
++ fputc(' ', rejfp);
++ pch_write_line (j++, rejfp);
++ }
++ else
++ fatal ("internal error in abort_hunk");
++ }
++
++ if (ferror (rejfp))
++ write_fatal ();
++ return;
++ }
+
+- fprintf(rejfp, "***************\n");
++ /* produce context type reject files */
++
++ fprintf(rejfp, "***************%s\n", function);
+ for (i=0; i<=pat_end; i++) {
+ char numbuf0[LINENUM_LENGTH_BOUND + 1];
+ char numbuf1[LINENUM_LENGTH_BOUND + 1];
diff --git a/packages/patch/patch_2.5.9.bb b/packages/patch/patch_2.5.9.bb
index 103337b4c9..940b15a205 100644
--- a/packages/patch/patch_2.5.9.bb
+++ b/packages/patch/patch_2.5.9.bb
@@ -3,5 +3,8 @@ require patch.inc
SRC_URI = "${GNU_MIRROR}/patch/patch-2.5.4.tar.gz \
file://2.5.9.patch;patch=1 \
file://debian.patch;patch=1 \
- file://install.patch;patch=1"
+ file://install.patch;patch=1 \
+ file://unified-reject-files.diff;patch=1 \
+ file://global-reject-file.diff;patch=1 "
S = "${WORKDIR}/patch-2.5.4"
+PR = "r1" \ No newline at end of file
diff --git a/packages/python/python-2.4.3-manifest.inc b/packages/python/python-2.4.3-manifest.inc
index 82c886658c..1d14654f85 100644
--- a/packages/python/python-2.4.3-manifest.inc
+++ b/packages/python/python-2.4.3-manifest.inc
@@ -1,5 +1,5 @@
########################################################################################################################
-### AUTO-GENERATED by './generate-oe.py' [(C) 2002-2005 Michael 'Mickey' Lauer <mickey@Vanille.de>] on Wed Aug 2 23:25:58 2006
+### AUTO-GENERATED by './generate-oe.py' [(C) 2002-2006 Michael 'Mickey' Lauer <mickey@Vanille.de>] on Fri Aug 25 15:00:35 2006
###
### Visit THE Python for Embedded Systems Site => http://www.Vanille.de/projects/python.spy
###
@@ -148,8 +148,8 @@ RDEPENDS_python-netserver="python-core python-netclient"
FILES_python-netserver="${libdir}/python2.4/cgi.* ${libdir}/python2.4/BaseHTTPServer.* ${libdir}/python2.4/SimpleHTTPServer.* ${libdir}/python2.4/SocketServer.* "
DESCRIPTION_python-curses="Python Curses Support"
-PR_python-curses="ml0"
-RDEPENDS_python-curses="python-core libncurses5"
+PR_python-curses="ml1"
+RDEPENDS_python-curses="python-core"
FILES_python-curses="${libdir}/python2.4/curses ${libdir}/python2.4/lib-dynload/_curses.so ${libdir}/python2.4/lib-dynload/_curses_panel.so "
DESCRIPTION_python-syslog="Python's syslog Interface"
diff --git a/packages/qemu/files/arm_nptl.patch b/packages/qemu/files/arm_nptl.patch
new file mode 100644
index 0000000000..f9b10aebc5
--- /dev/null
+++ b/packages/qemu/files/arm_nptl.patch
@@ -0,0 +1,857 @@
+Index: qemu/configure
+===================================================================
+--- qemu.orig/configure 2006-08-26 16:31:53.000000000 +0100
++++ qemu/configure 2006-08-26 16:31:53.000000000 +0100
+@@ -97,6 +97,7 @@
+ build_docs="no"
+ build_acpi_tables="no"
+ uname_release=""
++nptl="yes"
+
+ # OS specific
+ targetos=`uname -s`
+@@ -243,6 +244,8 @@
+ ;;
+ --enable-iasl) build_acpi_tables="yes"
+ ;;
++ --disable-nptl) nptl="no"
++ ;;
+ esac
+ done
+
+@@ -441,6 +444,23 @@
+ fi
+ fi
+
++# check NPTL support
++cat > $TMPC <<EOF
++#include <sched.h>
++void foo()
++{
++#ifndef CLONE_SETTLS
++#error bork
++#endif
++}
++EOF
++
++if $cc -c -o $TMPO $TMPC 2> /dev/null ; then
++ :
++else
++ nptl="no"
++fi
++
+ ##########################################
+ # SDL probe
+
+@@ -559,6 +579,7 @@
+ fi
+ echo "FMOD support $fmod $fmod_support"
+ echo "kqemu support $kqemu"
++echo "NPTL support $nptl"
+ echo "Documentation $build_docs"
+ [ ! -z "$uname_release" ] && \
+ echo "uname -r $uname_release"
+@@ -880,6 +901,14 @@
+ echo "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak
+ fi
+ fi
++else
++ if test "$nptl" = "yes" ; then
++ case "$target_cpu" in
++ arm | armeb)
++ echo "#define USE_NPTL 1" >> $config_h
++ ;;
++ esac
++ fi
+ fi
+
+ if test "$cocoa" = "yes" ; then
+Index: qemu/exec-all.h
+===================================================================
+--- qemu.orig/exec-all.h 2006-08-26 16:28:32.000000000 +0100
++++ qemu/exec-all.h 2006-08-26 16:31:53.000000000 +0100
+@@ -347,163 +347,7 @@
+ extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4];
+ extern void *io_mem_opaque[IO_MEM_NB_ENTRIES];
+
+-#ifdef __powerpc__
+-static inline int testandset (int *p)
+-{
+- int ret;
+- __asm__ __volatile__ (
+- "0: lwarx %0,0,%1\n"
+- " xor. %0,%3,%0\n"
+- " bne 1f\n"
+- " stwcx. %2,0,%1\n"
+- " bne- 0b\n"
+- "1: "
+- : "=&r" (ret)
+- : "r" (p), "r" (1), "r" (0)
+- : "cr0", "memory");
+- return ret;
+-}
+-#endif
+-
+-#ifdef __i386__
+-static inline int testandset (int *p)
+-{
+- long int readval = 0;
+-
+- __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
+- : "+m" (*p), "+a" (readval)
+- : "r" (1)
+- : "cc");
+- return readval;
+-}
+-#endif
+-
+-#ifdef __x86_64__
+-static inline int testandset (int *p)
+-{
+- long int readval = 0;
+-
+- __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
+- : "+m" (*p), "+a" (readval)
+- : "r" (1)
+- : "cc");
+- return readval;
+-}
+-#endif
+-
+-#ifdef __s390__
+-static inline int testandset (int *p)
+-{
+- int ret;
+-
+- __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n"
+- " jl 0b"
+- : "=&d" (ret)
+- : "r" (1), "a" (p), "0" (*p)
+- : "cc", "memory" );
+- return ret;
+-}
+-#endif
+-
+-#ifdef __alpha__
+-static inline int testandset (int *p)
+-{
+- int ret;
+- unsigned long one;
+-
+- __asm__ __volatile__ ("0: mov 1,%2\n"
+- " ldl_l %0,%1\n"
+- " stl_c %2,%1\n"
+- " beq %2,1f\n"
+- ".subsection 2\n"
+- "1: br 0b\n"
+- ".previous"
+- : "=r" (ret), "=m" (*p), "=r" (one)
+- : "m" (*p));
+- return ret;
+-}
+-#endif
+-
+-#ifdef __sparc__
+-static inline int testandset (int *p)
+-{
+- int ret;
+-
+- __asm__ __volatile__("ldstub [%1], %0"
+- : "=r" (ret)
+- : "r" (p)
+- : "memory");
+-
+- return (ret ? 1 : 0);
+-}
+-#endif
+-
+-#ifdef __arm__
+-static inline int testandset (int *spinlock)
+-{
+- register unsigned int ret;
+- __asm__ __volatile__("swp %0, %1, [%2]"
+- : "=r"(ret)
+- : "0"(1), "r"(spinlock));
+-
+- return ret;
+-}
+-#endif
+-
+-#ifdef __mc68000
+-static inline int testandset (int *p)
+-{
+- char ret;
+- __asm__ __volatile__("tas %1; sne %0"
+- : "=r" (ret)
+- : "m" (p)
+- : "cc","memory");
+- return ret;
+-}
+-#endif
+-
+-#ifdef __ia64
+-#include <ia64intrin.h>
+-
+-static inline int testandset (int *p)
+-{
+- return __sync_lock_test_and_set (p, 1);
+-}
+-#endif
+-
+-typedef int spinlock_t;
+-
+-#define SPIN_LOCK_UNLOCKED 0
+-
+-#if defined(CONFIG_USER_ONLY)
+-static inline void spin_lock(spinlock_t *lock)
+-{
+- while (testandset(lock));
+-}
+-
+-static inline void spin_unlock(spinlock_t *lock)
+-{
+- *lock = 0;
+-}
+-
+-static inline int spin_trylock(spinlock_t *lock)
+-{
+- return !testandset(lock);
+-}
+-#else
+-static inline void spin_lock(spinlock_t *lock)
+-{
+-}
+-
+-static inline void spin_unlock(spinlock_t *lock)
+-{
+-}
+-
+-static inline int spin_trylock(spinlock_t *lock)
+-{
+- return 1;
+-}
+-#endif
++#include "qemu_spinlock.h"
+
+ extern spinlock_t tb_lock;
+
+Index: qemu/linux-user/arm/syscall.h
+===================================================================
+--- qemu.orig/linux-user/arm/syscall.h 2006-03-09 19:18:11.000000000 +0000
++++ qemu/linux-user/arm/syscall.h 2006-08-26 16:31:53.000000000 +0100
+@@ -28,7 +28,9 @@
+ #define ARM_SYSCALL_BASE 0x900000
+ #define ARM_THUMB_SYSCALL 0
+
+-#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2)
++#define ARM_NR_BASE 0xf0000
++#define ARM_NR_cacheflush (ARM_NR_BASE + 2)
++#define ARM_NR_set_tls (ARM_NR_BASE + 5)
+
+ #define ARM_NR_semihosting 0x123456
+ #define ARM_NR_thumb_semihosting 0xAB
+Index: qemu/linux-user/main.c
+===================================================================
+--- qemu.orig/linux-user/main.c 2006-08-26 16:28:40.000000000 +0100
++++ qemu/linux-user/main.c 2006-08-26 16:31:53.000000000 +0100
+@@ -309,6 +309,50 @@
+ }
+ }
+
++/* Handle a jump to the kernel code page. */
++static int
++do_kernel_trap(CPUARMState *env)
++{
++ uint32_t addr;
++ uint32_t *ptr;
++ uint32_t cpsr;
++
++ switch (env->regs[15]) {
++ case 0xffff0fc0: /* __kernel_cmpxchg */
++ /* XXX: This only works between threads, not between processes.
++ Use native atomic operations. */
++ /* ??? This probably breaks horribly if the access segfaults. */
++ cpu_lock();
++ ptr = (uint32_t *)env->regs[2];
++ cpsr = cpsr_read(env);
++ if (*ptr == env->regs[0]) {
++ *ptr = env->regs[1];
++ env->regs[0] = 0;
++ cpsr |= CPSR_C;
++ } else {
++ env->regs[0] = -1;
++ cpsr &= ~CPSR_C;
++ }
++ cpsr_write(env, cpsr, CPSR_C);
++ cpu_unlock();
++ break;
++ case 0xffff0fe0: /* __kernel_get_tls */
++ env->regs[0] = env->cp15.c13_tls;
++ break;
++ default:
++ return 1;
++ }
++ /* Jump back to the caller. */
++ addr = env->regs[14];
++ if (addr & 1) {
++ env->thumb = 1;
++ addr &= ~1;
++ }
++ env->regs[15] = addr;
++
++ return 0;
++}
++
+ void cpu_loop(CPUARMState *env)
+ {
+ int trapnr;
+@@ -365,10 +409,8 @@
+ }
+ }
+
+- if (n == ARM_NR_cacheflush) {
+- arm_cache_flush(env->regs[0], env->regs[1]);
+- } else if (n == ARM_NR_semihosting
+- || n == ARM_NR_thumb_semihosting) {
++ if (n == ARM_NR_semihosting
++ || n == ARM_NR_thumb_semihosting) {
+ env->regs[0] = do_arm_semihosting (env);
+ } else if (n == 0 || n >= ARM_SYSCALL_BASE
+ || (env->thumb && n == ARM_THUMB_SYSCALL)) {
+@@ -379,14 +421,34 @@
+ n -= ARM_SYSCALL_BASE;
+ env->eabi = 0;
+ }
+- env->regs[0] = do_syscall(env,
+- n,
+- env->regs[0],
+- env->regs[1],
+- env->regs[2],
+- env->regs[3],
+- env->regs[4],
+- env->regs[5]);
++ if ( n > ARM_NR_BASE) {
++ switch (n)
++ {
++ case ARM_NR_cacheflush:
++ arm_cache_flush(env->regs[0], env->regs[1]);
++ break;
++#ifdef USE_NPTL
++ case ARM_NR_set_tls:
++ cpu_set_tls(env, env->regs[0]);
++ env->regs[0] = 0;
++ break;
++#endif
++ default:
++ printf ("Error: Bad syscall: %x\n", n);
++ goto error;
++ }
++ }
++ else
++ {
++ env->regs[0] = do_syscall(env,
++ n,
++ env->regs[0],
++ env->regs[1],
++ env->regs[2],
++ env->regs[3],
++ env->regs[4],
++ env->regs[5]);
++ }
+ } else {
+ goto error;
+ }
+@@ -425,6 +487,10 @@
+ }
+ }
+ break;
++ case EXCP_KERNEL_TRAP:
++ if (do_kernel_trap(env))
++ goto error;
++ break;
+ default:
+ error:
+ fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n",
+@@ -1639,6 +1705,10 @@
+ ts->heap_base = info->brk;
+ /* This will be filled in on the first SYS_HEAPINFO call. */
+ ts->heap_limit = 0;
++ /* Register the magic kernel code page. The cpu will generate a
++ special exception when it tries to execute code here. We can't
++ put real code here because it may be in use by the host kernel. */
++ page_set_flags(0xffff0000, 0xffff0fff, 0);
+ }
+ #elif defined(TARGET_SPARC)
+ {
+Index: qemu/linux-user/qemu.h
+===================================================================
+--- qemu.orig/linux-user/qemu.h 2006-08-26 16:28:40.000000000 +0100
++++ qemu/linux-user/qemu.h 2006-08-26 16:33:50.000000000 +0100
+@@ -75,6 +75,9 @@
+ uint32_t v86mask;
+ #endif
+ int used; /* non zero if used */
++#ifdef USE_NPTL
++ uint32_t *child_tidptr;
++#endif
+ struct image_info *info;
+ uint8_t stack[0];
+ } __attribute__((aligned(16))) TaskState;
+Index: qemu/linux-user/syscall.c
+===================================================================
+--- qemu.orig/linux-user/syscall.c 2006-08-26 16:28:40.000000000 +0100
++++ qemu/linux-user/syscall.c 2006-08-26 16:31:53.000000000 +0100
+@@ -66,9 +66,18 @@
+ #include <linux/kd.h>
+
+ #include "qemu.h"
++#include "qemu_spinlock.h"
+
+ //#define DEBUG
+
++#ifdef USE_NPTL
++#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \
++ CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID)
++#else
++/* XXX: Hardcode the above values. */
++#define CLONE_NPTL_FLAGS2 0
++#endif
++
+ #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC)
+ /* 16 bit uid wrappers emulation */
+ #define USE_UID16
+@@ -1602,20 +1611,38 @@
+ thread/process */
+ #define NEW_STACK_SIZE 8192
+
++#ifdef USE_NPTL
++static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED;
++#endif
++
+ static int clone_func(void *arg)
+ {
+ CPUState *env = arg;
++#ifdef HAVE_NPTL
++ /* Wait until the parent has finshed initializing the tls state. */
++ while (!spin_trylock(&nptl_lock))
++ usleep(1);
++ spin_unlock(&nptl_lock);
++#endif
+ cpu_loop(env);
+ /* never exits */
+ return 0;
+ }
+
+-int do_fork(CPUState *env, unsigned int flags, unsigned long newsp)
++int do_fork(CPUState *env, unsigned int flags, unsigned long newsp,
++ uint32_t *parent_tidptr, void *newtls,
++ uint32_t *child_tidptr)
+ {
+ int ret;
+ TaskState *ts;
+ uint8_t *new_stack;
+ CPUState *new_env;
++#ifdef USE_NPTL
++ unsigned int nptl_flags;
++
++ if (flags & CLONE_PARENT_SETTID)
++ *parent_tidptr = gettid();
++#endif
+
+ if (flags & CLONE_VM) {
+ ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
+@@ -1665,16 +1692,60 @@
+ #error unsupported target CPU
+ #endif
+ new_env->opaque = ts;
++#ifdef USE_NPTL
++ nptl_flags = flags;
++ flags &= ~CLONE_NPTL_FLAGS2;
++ if (nptl_flags & CLONE_CHILD_CLEARTID) {
++ ts->child_tidptr = child_tidptr;
++ }
++ if (nptl_flags & CLONE_SETTLS)
++ cpu_set_tls (new_env, newtls);
++ /* Grab the global cpu lock so that the thread setup appears
++ atomic. */
++ if (nptl_flags & CLONE_CHILD_SETTID)
++ spin_lock(&nptl_lock);
++#else
++ if (flags & CLONE_NPTL_FLAGS2)
++ return -EINVAL;
++#endif
++
+ #ifdef __ia64__
+ ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
+ #else
+ ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
+ #endif
++#ifdef USE_NPTL
++ if (ret != -1) {
++ if (nptl_flags & CLONE_CHILD_SETTID)
++ *child_tidptr = ret;
++ }
++ /* Allow the child to continue. */
++ if (nptl_flags & CLONE_CHILD_SETTID)
++ spin_unlock(&nptl_lock);
++#endif
+ } else {
+- /* if no CLONE_VM, we consider it is a fork */
+- if ((flags & ~CSIGNAL) != 0)
+- return -EINVAL;
+- ret = fork();
++ /* if no CLONE_VM, we consider it is a fork */
++ if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0)
++ return -EINVAL;
++ ret = fork();
++#ifdef USE_NPTL
++ /* There is a race condition here. The parent process could
++ theoretically read the TID in the child process before the child
++ tid is set. This would require using either ptrace
++ (not implemented) or having *_tidptr to point at a shared memory
++ mapping. We can't repeat the spinlock hack used above because
++ the child process gets its own copy of the lock. */
++ if (ret == 0) {
++ /* Child Process. */
++ if (flags & CLONE_CHILD_SETTID)
++ *child_tidptr = gettid();
++ ts = (TaskState *)env->opaque;
++ if (flags & CLONE_CHILD_CLEARTID)
++ ts->child_tidptr = child_tidptr;
++ if (flags & CLONE_SETTLS)
++ cpu_set_tls (env, newtls);
++ }
++#endif
+ }
+ return ret;
+ }
+@@ -1918,7 +1989,7 @@
+ ret = do_brk(arg1);
+ break;
+ case TARGET_NR_fork:
+- ret = get_errno(do_fork(cpu_env, SIGCHLD, 0));
++ ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL));
+ break;
+ case TARGET_NR_waitpid:
+ {
+@@ -2989,7 +3060,8 @@
+ ret = get_errno(fsync(arg1));
+ break;
+ case TARGET_NR_clone:
+- ret = get_errno(do_fork(cpu_env, arg1, arg2));
++ ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3,
++ (void *)arg4, (uint32_t *)arg5));
+ break;
+ #ifdef __NR_exit_group
+ /* new thread calls */
+@@ -3339,7 +3411,8 @@
+ #endif
+ #ifdef TARGET_NR_vfork
+ case TARGET_NR_vfork:
+- ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0));
++ ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0,
++ NULL, NULL, NULL));
+ break;
+ #endif
+ #ifdef TARGET_NR_ugetrlimit
+@@ -3838,4 +3911,3 @@
+ #endif
+ return ret;
+ }
+-
+Index: qemu/target-arm/cpu.h
+===================================================================
+--- qemu.orig/target-arm/cpu.h 2006-03-09 19:18:27.000000000 +0000
++++ qemu/target-arm/cpu.h 2006-08-26 16:31:53.000000000 +0100
+@@ -35,6 +35,9 @@
+ #define EXCP_IRQ 5
+ #define EXCP_FIQ 6
+ #define EXCP_BKPT 7
++#define EXCP_KERNEL_TRAP 8 /* Jumped to kernel code page. */
++
++
+
+ /* We currently assume float and double are IEEE single and double
+ precision respectively.
+@@ -85,6 +88,7 @@
+ uint32_t c9_data;
+ uint32_t c13_fcse; /* FCSE PID. */
+ uint32_t c13_context; /* Context ID. */
++ uint32_t c13_tls; /* Paul Brook told me to just add this ;) */
+ } cp15;
+
+ /* Internal CPU feature flags. */
+@@ -135,6 +139,15 @@
+ int cpu_arm_signal_handler(int host_signum, struct siginfo *info,
+ void *puc);
+
++void cpu_lock(void);
++void cpu_unlock(void);
++#if defined(USE_NPTL)
++static inline void cpu_set_tls(CPUARMState *env, void *newtls)
++{
++ env->cp15.c13_tls = (uint32_t)newtls;
++}
++#endif
++
+ #define CPSR_M (0x1f)
+ #define CPSR_T (1 << 5)
+ #define CPSR_F (1 << 6)
+@@ -146,7 +159,11 @@
+ #define CPSR_J (1 << 24)
+ #define CPSR_IT_0_1 (3 << 25)
+ #define CPSR_Q (1 << 27)
+-#define CPSR_NZCV (0xf << 28)
++#define CPSR_V (1 << 28)
++#define CPSR_C (1 << 29)
++#define CPSR_Z (1 << 30)
++#define CPSR_N (1 << 31)
++#define CPSR_NZCV (CPSR_N | CPSR_Z | CPSR_C | CPSR_V)
+
+ #define CACHED_CPSR_BITS (CPSR_T | CPSR_Q | CPSR_NZCV)
+ /* Return the current CPSR value. */
+Index: qemu/target-arm/exec.h
+===================================================================
+--- qemu.orig/target-arm/exec.h 2006-03-09 19:18:27.000000000 +0000
++++ qemu/target-arm/exec.h 2006-08-26 16:31:53.000000000 +0100
+@@ -51,8 +51,6 @@
+
+ /* In op_helper.c */
+
+-void cpu_lock(void);
+-void cpu_unlock(void);
+ void helper_set_cp15(CPUState *, uint32_t, uint32_t);
+ uint32_t helper_get_cp15(CPUState *, uint32_t);
+
+Index: qemu/target-arm/op.c
+===================================================================
+--- qemu.orig/target-arm/op.c 2006-08-26 16:28:48.000000000 +0100
++++ qemu/target-arm/op.c 2006-08-26 16:31:53.000000000 +0100
+@@ -891,6 +891,12 @@
+ cpu_loop_exit();
+ }
+
++void OPPROTO op_kernel_trap(void)
++{
++ env->exception_index = EXCP_KERNEL_TRAP;
++ cpu_loop_exit();
++}
++
+ /* VFP support. We follow the convention used for VFP instrunctions:
+ Single precition routines have a "s" suffix, double precision a
+ "d" suffix. */
+Index: qemu/target-arm/translate.c
+===================================================================
+--- qemu.orig/target-arm/translate.c 2006-08-26 16:28:48.000000000 +0100
++++ qemu/target-arm/translate.c 2006-08-26 16:31:53.000000000 +0100
+@@ -2382,6 +2382,7 @@
+ s->is_jmp = DISAS_JUMP;
+ }
+
++
+ /* generate intermediate code in gen_opc_buf and gen_opparam_buf for
+ basic block 'tb'. If search_pc is TRUE, also generate PC
+ information for each intermediate instruction. */
+@@ -2416,6 +2417,15 @@
+ nb_gen_labels = 0;
+ lj = -1;
+ do {
++#ifdef CONFIG_USER_ONLY
++ /* Intercept jump to the magic kernel page. */
++ if (dc->pc > 0xffff0000) {
++ gen_op_kernel_trap();
++ dc->is_jmp = DISAS_UPDATE;
++ break;
++ }
++#endif
++
+ if (env->nb_breakpoints > 0) {
+ for(j = 0; j < env->nb_breakpoints; j++) {
+ if (env->breakpoints[j] == dc->pc) {
+Index: qemu/qemu_spinlock.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ qemu/qemu_spinlock.h 2006-08-26 16:31:53.000000000 +0100
+@@ -0,0 +1,182 @@
++/*
++ * internal execution defines for qemu
++ *
++ * Copyright (c) 2003 Fabrice Bellard
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#ifndef _QEMU_SPINLOCK_H
++#define _QEMU_SPINLOCK_H
++
++#ifdef __powerpc__
++static inline int testandset (int *p)
++{
++ int ret;
++ __asm__ __volatile__ (
++ "0: lwarx %0,0,%1\n"
++ " xor. %0,%3,%0\n"
++ " bne 1f\n"
++ " stwcx. %2,0,%1\n"
++ " bne- 0b\n"
++ "1: "
++ : "=&r" (ret)
++ : "r" (p), "r" (1), "r" (0)
++ : "cr0", "memory");
++ return ret;
++}
++#endif
++
++#ifdef __i386__
++static inline int testandset (int *p)
++{
++ long int readval = 0;
++
++ __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
++ : "+m" (*p), "+a" (readval)
++ : "r" (1)
++ : "cc");
++ return readval;
++}
++#endif
++
++#ifdef __x86_64__
++static inline int testandset (int *p)
++{
++ long int readval = 0;
++
++ __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
++ : "+m" (*p), "+a" (readval)
++ : "r" (1)
++ : "cc");
++ return readval;
++}
++#endif
++
++#ifdef __s390__
++static inline int testandset (int *p)
++{
++ int ret;
++
++ __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n"
++ " jl 0b"
++ : "=&d" (ret)
++ : "r" (1), "a" (p), "0" (*p)
++ : "cc", "memory" );
++ return ret;
++}
++#endif
++
++#ifdef __alpha__
++static inline int testandset (int *p)
++{
++ int ret;
++ unsigned long one;
++
++ __asm__ __volatile__ ("0: mov 1,%2\n"
++ " ldl_l %0,%1\n"
++ " stl_c %2,%1\n"
++ " beq %2,1f\n"
++ ".subsection 2\n"
++ "1: br 0b\n"
++ ".previous"
++ : "=r" (ret), "=m" (*p), "=r" (one)
++ : "m" (*p));
++ return ret;
++}
++#endif
++
++#ifdef __sparc__
++static inline int testandset (int *p)
++{
++ int ret;
++
++ __asm__ __volatile__("ldstub [%1], %0"
++ : "=r" (ret)
++ : "r" (p)
++ : "memory");
++
++ return (ret ? 1 : 0);
++}
++#endif
++
++#ifdef __arm__
++static inline int testandset (int *spinlock)
++{
++ register unsigned int ret;
++ __asm__ __volatile__("swp %0, %1, [%2]"
++ : "=r"(ret)
++ : "0"(1), "r"(spinlock));
++
++ return ret;
++}
++#endif
++
++#ifdef __mc68000
++static inline int testandset (int *p)
++{
++ char ret;
++ __asm__ __volatile__("tas %1; sne %0"
++ : "=r" (ret)
++ : "m" (p)
++ : "cc","memory");
++ return ret;
++}
++#endif
++
++#ifdef __ia64
++#include <ia64intrin.h>
++
++static inline int testandset (int *p)
++{
++ return __sync_lock_test_and_set (p, 1);
++}
++#endif
++
++typedef int spinlock_t;
++
++#define SPIN_LOCK_UNLOCKED 0
++
++#if defined(CONFIG_USER_ONLY)
++static inline void spin_lock(spinlock_t *lock)
++{
++ while (testandset(lock));
++}
++
++static inline void spin_unlock(spinlock_t *lock)
++{
++ *lock = 0;
++}
++
++static inline int spin_trylock(spinlock_t *lock)
++{
++ return !testandset(lock);
++}
++#else
++static inline void spin_lock(spinlock_t *lock)
++{
++}
++
++static inline void spin_unlock(spinlock_t *lock)
++{
++}
++
++static inline int spin_trylock(spinlock_t *lock)
++{
++ return 1;
++}
++#endif
++
++#endif /* ! _QEMU_SPINLOCK_H */
diff --git a/packages/qemu/qemu-0.8.0/.mtn2git_empty b/packages/qemu/qemu-0.8.0/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/qemu/qemu-0.8.0/.mtn2git_empty
diff --git a/packages/qemu/qemu-0.8.0/arm_nptl.patch b/packages/qemu/qemu-0.8.0/arm_nptl.patch
new file mode 100644
index 0000000000..daf105071c
--- /dev/null
+++ b/packages/qemu/qemu-0.8.0/arm_nptl.patch
@@ -0,0 +1,854 @@
+diff -ur qemu-0.8.0.orig/configure qemu-0.8.0/configure
+--- qemu-0.8.0.orig/configure 2005-12-20 00:51:53.000000000 +0200
++++ qemu-0.8.0/configure 2006-07-12 15:26:40.000000000 +0300
+@@ -89,6 +89,7 @@
+ cocoa="no"
+ check_gfx="yes"
+ check_gcc="yes"
++nptl=yes
+
+ # OS specific
+ targetos=`uname -s`
+@@ -205,6 +206,8 @@
+ ;;
+ --disable-gcc-check) check_gcc="no"
+ ;;
++ --disable-nptl) nptl="no"
++ ;;
+ esac
+ done
+
+@@ -299,6 +302,23 @@
+ fi
+ fi
+
++# check NPTL support
++cat > $TMPC <<EOF
++#include <sched.h>
++void foo()
++{
++#ifndef CLONE_SETTLS
++#error bork
++#endif
++}
++EOF
++
++if $cc -c -o $TMPO $TMPC 2> /dev/null ; then
++ :
++else
++ nptl="no"
++fi
++
+ ##########################################
+ # SDL probe
+
+@@ -489,6 +509,7 @@
+ fi
+ echo ""
+ echo "kqemu support $kqemu"
++echo "NPTL support $nptl"
+ if test $kqemu = "yes" -a $linux = "yes" ; then
+ echo ""
+ echo "KQEMU Linux module configuration:"
+@@ -793,6 +814,14 @@
+ fi
+ echo "" >> $config_mak
+ fi
++else
++ if test "$nptl" = "yes" ; then
++ case "$target_cpu" in
++ arm | armeb)
++ echo "#define USE_NPTL 1" >> $config_h
++ ;;
++ esac
++ fi
+ fi
+
+ if test "$cocoa" = "yes" ; then
+Only in qemu-0.8.0: configure.rej~
+Only in qemu-0.8.0: configure~
+diff -ur qemu-0.8.0.orig/exec-all.h qemu-0.8.0/exec-all.h
+--- qemu-0.8.0.orig/exec-all.h 2005-12-20 00:51:53.000000000 +0200
++++ qemu-0.8.0/exec-all.h 2006-07-12 15:23:46.000000000 +0300
+@@ -347,163 +347,7 @@
+ extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4];
+ extern void *io_mem_opaque[IO_MEM_NB_ENTRIES];
+
+-#ifdef __powerpc__
+-static inline int testandset (int *p)
+-{
+- int ret;
+- __asm__ __volatile__ (
+- "0: lwarx %0,0,%1\n"
+- " xor. %0,%3,%0\n"
+- " bne 1f\n"
+- " stwcx. %2,0,%1\n"
+- " bne- 0b\n"
+- "1: "
+- : "=&r" (ret)
+- : "r" (p), "r" (1), "r" (0)
+- : "cr0", "memory");
+- return ret;
+-}
+-#endif
+-
+-#ifdef __i386__
+-static inline int testandset (int *p)
+-{
+- long int readval = 0;
+-
+- __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
+- : "+m" (*p), "+a" (readval)
+- : "r" (1)
+- : "cc");
+- return readval;
+-}
+-#endif
+-
+-#ifdef __x86_64__
+-static inline int testandset (int *p)
+-{
+- long int readval = 0;
+-
+- __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
+- : "+m" (*p), "+a" (readval)
+- : "r" (1)
+- : "cc");
+- return readval;
+-}
+-#endif
+-
+-#ifdef __s390__
+-static inline int testandset (int *p)
+-{
+- int ret;
+-
+- __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n"
+- " jl 0b"
+- : "=&d" (ret)
+- : "r" (1), "a" (p), "0" (*p)
+- : "cc", "memory" );
+- return ret;
+-}
+-#endif
+-
+-#ifdef __alpha__
+-static inline int testandset (int *p)
+-{
+- int ret;
+- unsigned long one;
+-
+- __asm__ __volatile__ ("0: mov 1,%2\n"
+- " ldl_l %0,%1\n"
+- " stl_c %2,%1\n"
+- " beq %2,1f\n"
+- ".subsection 2\n"
+- "1: br 0b\n"
+- ".previous"
+- : "=r" (ret), "=m" (*p), "=r" (one)
+- : "m" (*p));
+- return ret;
+-}
+-#endif
+-
+-#ifdef __sparc__
+-static inline int testandset (int *p)
+-{
+- int ret;
+-
+- __asm__ __volatile__("ldstub [%1], %0"
+- : "=r" (ret)
+- : "r" (p)
+- : "memory");
+-
+- return (ret ? 1 : 0);
+-}
+-#endif
+-
+-#ifdef __arm__
+-static inline int testandset (int *spinlock)
+-{
+- register unsigned int ret;
+- __asm__ __volatile__("swp %0, %1, [%2]"
+- : "=r"(ret)
+- : "0"(1), "r"(spinlock));
+-
+- return ret;
+-}
+-#endif
+-
+-#ifdef __mc68000
+-static inline int testandset (int *p)
+-{
+- char ret;
+- __asm__ __volatile__("tas %1; sne %0"
+- : "=r" (ret)
+- : "m" (p)
+- : "cc","memory");
+- return ret;
+-}
+-#endif
+-
+-#ifdef __ia64
+-#include <ia64intrin.h>
+-
+-static inline int testandset (int *p)
+-{
+- return __sync_lock_test_and_set (p, 1);
+-}
+-#endif
+-
+-typedef int spinlock_t;
+-
+-#define SPIN_LOCK_UNLOCKED 0
+-
+-#if defined(CONFIG_USER_ONLY)
+-static inline void spin_lock(spinlock_t *lock)
+-{
+- while (testandset(lock));
+-}
+-
+-static inline void spin_unlock(spinlock_t *lock)
+-{
+- *lock = 0;
+-}
+-
+-static inline int spin_trylock(spinlock_t *lock)
+-{
+- return !testandset(lock);
+-}
+-#else
+-static inline void spin_lock(spinlock_t *lock)
+-{
+-}
+-
+-static inline void spin_unlock(spinlock_t *lock)
+-{
+-}
+-
+-static inline int spin_trylock(spinlock_t *lock)
+-{
+- return 1;
+-}
+-#endif
++#include "qemu_spinlock.h"
+
+ extern spinlock_t tb_lock;
+
+diff -ur qemu-0.8.0.orig/linux-user/arm/syscall.h qemu-0.8.0/linux-user/arm/syscall.h
+--- qemu-0.8.0.orig/linux-user/arm/syscall.h 2005-12-20 00:51:53.000000000 +0200
++++ qemu-0.8.0/linux-user/arm/syscall.h 2006-07-12 15:23:46.000000000 +0300
+@@ -28,7 +28,9 @@
+ #define ARM_SYSCALL_BASE 0x900000
+ #define ARM_THUMB_SYSCALL 0
+
+-#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2)
++#define ARM_NR_BASE 0xf0000
++#define ARM_NR_cacheflush (ARM_NR_BASE + 2)
++#define ARM_NR_set_tls (ARM_NR_BASE + 5)
+
+ #define ARM_NR_semihosting 0x123456
+ #define ARM_NR_thumb_semihosting 0xAB
+diff -ur qemu-0.8.0.orig/linux-user/main.c qemu-0.8.0/linux-user/main.c
+--- qemu-0.8.0.orig/linux-user/main.c 2006-07-12 15:20:37.000000000 +0300
++++ qemu-0.8.0/linux-user/main.c 2006-07-12 15:23:46.000000000 +0300
+@@ -326,6 +326,50 @@
+ }
+ }
+
++/* Handle a jump to the kernel code page. */
++static int
++do_kernel_trap(CPUARMState *env)
++{
++ uint32_t addr;
++ uint32_t *ptr;
++ uint32_t cpsr;
++
++ switch (env->regs[15]) {
++ case 0xffff0fc0: /* __kernel_cmpxchg */
++ /* XXX: This only works between threads, not between processes.
++ Use native atomic operations. */
++ /* ??? This probably breaks horribly if the access segfaults. */
++ cpu_lock();
++ ptr = (uint32_t *)env->regs[2];
++ cpsr = cpsr_read(env);
++ if (*ptr == env->regs[0]) {
++ *ptr = env->regs[1];
++ env->regs[0] = 0;
++ cpsr |= CPSR_C;
++ } else {
++ env->regs[0] = -1;
++ cpsr &= ~CPSR_C;
++ }
++ cpsr_write(env, cpsr, CPSR_C);
++ cpu_unlock();
++ break;
++ case 0xffff0fe0: /* __kernel_get_tls */
++ env->regs[0] = env->cp15.c13_tls;
++ break;
++ default:
++ return 1;
++ }
++ /* Jump back to the caller. */
++ addr = env->regs[14];
++ if (addr & 1) {
++ env->thumb = 1;
++ addr &= ~1;
++ }
++ env->regs[15] = addr;
++
++ return 0;
++}
++
+ void cpu_loop(CPUARMState *env)
+ {
+ int trapnr;
+@@ -368,10 +412,8 @@
+ n = insn & 0xffffff;
+ }
+
+- if (n == ARM_NR_cacheflush) {
+- arm_cache_flush(env->regs[0], env->regs[1]);
+- } else if (n == ARM_NR_semihosting
+- || n == ARM_NR_thumb_semihosting) {
++ if (n == ARM_NR_semihosting
++ || n == ARM_NR_thumb_semihosting) {
+ env->regs[0] = do_arm_semihosting (env);
+ } else if (n >= ARM_SYSCALL_BASE
+ || (env->thumb && n == ARM_THUMB_SYSCALL)) {
+@@ -381,14 +423,34 @@
+ } else {
+ n -= ARM_SYSCALL_BASE;
+ }
+- env->regs[0] = do_syscall(env,
+- n,
+- env->regs[0],
+- env->regs[1],
+- env->regs[2],
+- env->regs[3],
+- env->regs[4],
+- env->regs[5]);
++ if ( n > ARM_NR_BASE) {
++ switch (n)
++ {
++ case ARM_NR_cacheflush:
++ arm_cache_flush(env->regs[0], env->regs[1]);
++ break;
++#ifdef USE_NPTL
++ case ARM_NR_set_tls:
++ cpu_set_tls(env, env->regs[0]);
++ env->regs[0] = 0;
++ break;
++#endif
++ default:
++ printf ("Error: Bad syscall: %x\n", n);
++ goto error;
++ }
++ }
++ else
++ {
++ env->regs[0] = do_syscall(env,
++ n,
++ env->regs[0],
++ env->regs[1],
++ env->regs[2],
++ env->regs[3],
++ env->regs[4],
++ env->regs[5]);
++ }
+ } else {
+ goto error;
+ }
+@@ -427,6 +489,10 @@
+ }
+ }
+ break;
++ case EXCP_KERNEL_TRAP:
++ if (do_kernel_trap(env))
++ goto error;
++ break;
+ default:
+ error:
+ fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n",
+@@ -1602,6 +1668,10 @@
+ ts->heap_base = info->brk;
+ /* This will be filled in on the first SYS_HEAPINFO call. */
+ ts->heap_limit = 0;
++ /* Register the magic kernel code page. The cpu will generate a
++ special exception when it tries to execute code here. We can't
++ put real code here because it may be in use by the host kernel. */
++ page_set_flags(0xffff0000, 0xffff0fff, 0);
+ }
+ #elif defined(TARGET_SPARC)
+ {
+diff -ur qemu-0.8.0.orig/linux-user/qemu.h qemu-0.8.0/linux-user/qemu.h
+--- qemu-0.8.0.orig/linux-user/qemu.h 2005-12-20 00:51:53.000000000 +0200
++++ qemu-0.8.0/linux-user/qemu.h 2006-07-12 15:23:46.000000000 +0300
+@@ -76,6 +76,9 @@
+ uint32_t v86mask;
+ #endif
+ int used; /* non zero if used */
++#ifdef USE_NPTL
++ uint32_t *child_tidptr;
++#endif
+ uint8_t stack[0];
+ } __attribute__((aligned(16))) TaskState;
+
+Only in qemu-0.8.0.orig/linux-user: signal.c.orig
+diff -ur qemu-0.8.0.orig/linux-user/syscall.c qemu-0.8.0/linux-user/syscall.c
+--- qemu-0.8.0.orig/linux-user/syscall.c 2006-07-12 15:20:37.000000000 +0300
++++ qemu-0.8.0/linux-user/syscall.c 2006-07-12 15:36:51.000000000 +0300
+@@ -72,9 +72,18 @@
+ #include <linux/kd.h>
+
+ #include "qemu.h"
++#include "qemu_spinlock.h"
+
+ //#define DEBUG
+
++#ifdef USE_NPTL
++#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \
++ CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID)
++#else
++/* XXX: Hardcode the above values. */
++#define CLONE_NPTL_FLAGS2 0
++#endif
++
+ #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC)
+ /* 16 bit uid wrappers emulation */
+ #define USE_UID16
+@@ -1527,20 +1536,38 @@
+ thread/process */
+ #define NEW_STACK_SIZE 8192
+
++#ifdef USE_NPTL
++static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED;
++#endif
++
+ static int clone_func(void *arg)
+ {
+ CPUState *env = arg;
++#ifdef HAVE_NPTL
++ /* Wait until the parent has finshed initializing the tls state. */
++ while (!spin_trylock(&nptl_lock))
++ usleep(1);
++ spin_unlock(&nptl_lock);
++#endif
+ cpu_loop(env);
+ /* never exits */
+ return 0;
+ }
+
+-int do_fork(CPUState *env, unsigned int flags, unsigned long newsp)
++int do_fork(CPUState *env, unsigned int flags, unsigned long newsp,
++ uint32_t *parent_tidptr, void *newtls,
++ uint32_t *child_tidptr)
+ {
+ int ret;
+ TaskState *ts;
+ uint8_t *new_stack;
+ CPUState *new_env;
++#ifdef USE_NPTL
++ unsigned int nptl_flags;
++
++ if (flags & CLONE_PARENT_SETTID)
++ *parent_tidptr = gettid();
++#endif
+
+ if (flags & CLONE_VM) {
+ ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
+@@ -1576,16 +1603,62 @@
+ #error unsupported target CPU
+ #endif
+ new_env->opaque = ts;
++#ifdef USE_NPTL
++ nptl_flags = flags;
++ flags &= ~CLONE_NPTL_FLAGS2;
++
++ if (nptl_flags & CLONE_CHILD_CLEARTID) {
++ ts->child_tidptr = child_tidptr;
++ }
++
++ if (nptl_flags & CLONE_SETTLS)
++ cpu_set_tls (new_env, newtls);
++ /* Grab the global cpu lock so that the thread setup appears
++ atomic. */
++ if (nptl_flags & CLONE_CHILD_SETTID)
++ spin_lock(&nptl_lock);
++#else
++ if (flags & CLONE_NPTL_FLAGS2)
++ return -EINVAL;
++#endif
++
+ #ifdef __ia64__
+ ret = clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
+ #else
+ ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
+ #endif
++#ifdef USE_NPTL
++ if (ret != -1) {
++ if (nptl_flags & CLONE_CHILD_SETTID)
++ *child_tidptr = ret;
++ }
++ /* Allow the child to continue. */
++ if (nptl_flags & CLONE_CHILD_SETTID)
++ spin_unlock(&nptl_lock);
++#endif
+ } else {
+ /* if no CLONE_VM, we consider it is a fork */
+- if ((flags & ~CSIGNAL) != 0)
++ if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0)
+ return -EINVAL;
+ ret = fork();
++#ifdef USE_NPTL
++ /* There is a race condition here. The parent process could
++ theoretically read the TID in the child process before the child
++ tid is set. This would require using either ptrace
++ (not implemented) or having *_tidptr to point at a shared memory
++ mapping. We can't repeat the spinlock hack used above because
++ the child process gets its own copy of the lock. */
++ if (ret == 0) {
++ /* Child Process. */
++ if (flags & CLONE_CHILD_SETTID)
++ *child_tidptr = gettid();
++ ts = (TaskState *)env->opaque;
++ if (flags & CLONE_CHILD_CLEARTID)
++ ts->child_tidptr = child_tidptr;
++ if (flags & CLONE_SETTLS)
++ cpu_set_tls (env, newtls);
++ }
++#endif
+ }
+ return ret;
+ }
+@@ -1757,7 +1830,7 @@
+ ret = do_brk((char *)arg1);
+ break;
+ case TARGET_NR_fork:
+- ret = get_errno(do_fork(cpu_env, SIGCHLD, 0));
++ ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL));
+ break;
+ case TARGET_NR_waitpid:
+ {
+@@ -2564,7 +2637,8 @@
+ ret = get_errno(fsync(arg1));
+ break;
+ case TARGET_NR_clone:
+- ret = get_errno(do_fork(cpu_env, arg1, arg2));
++ ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3,
++ (void *)arg4, (uint32_t *)arg5));
+ break;
+ #ifdef __NR_exit_group
+ /* new thread calls */
+@@ -2925,7 +2999,8 @@
+ #endif
+ #ifdef TARGET_NR_vfork
+ case TARGET_NR_vfork:
+- ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0));
++ ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0,
++ NULL, NULL, NULL));
+ break;
+ #endif
+ #ifdef TARGET_NR_ugetrlimit
+@@ -3347,4 +3422,3 @@
+ #endif
+ return ret;
+ }
+-
+Only in qemu-0.8.0.orig/linux-user: syscall.c.orig
+Only in qemu-0.8.0/linux-user: syscall.c.rej~
+Only in qemu-0.8.0/linux-user: syscall.c~
+Only in qemu-0.8.0: qemu_spinlock.h
+diff -ur qemu-0.8.0.orig/target-arm/cpu.h qemu-0.8.0/target-arm/cpu.h
+--- qemu-0.8.0.orig/target-arm/cpu.h 2005-12-20 00:51:53.000000000 +0200
++++ qemu-0.8.0/target-arm/cpu.h 2006-07-12 15:27:28.000000000 +0300
+@@ -34,6 +34,9 @@
+ #define EXCP_DATA_ABORT 4
+ #define EXCP_IRQ 5
+ #define EXCP_FIQ 6
++#define EXCP_BKPT 7
++#define EXCP_KERNEL_TRAP 8 /* Jumped to kernel code page. */
++
+
+ /* We currently assume float and double are IEEE single and double
+ precision respectively.
+@@ -83,6 +86,7 @@
+ uint32_t c9_data;
+ uint32_t c13_fcse; /* FCSE PID. */
+ uint32_t c13_context; /* Context ID. */
++ uint32_t c13_tls; /* Paul Brook told me to just add this ;) */
+ } cp15;
+
+ /* exception/interrupt handling */
+@@ -126,6 +130,15 @@
+ int cpu_arm_signal_handler(int host_signum, struct siginfo *info,
+ void *puc);
+
++void cpu_lock(void);
++void cpu_unlock(void);
++#if defined(USE_NPTL)
++static inline void cpu_set_tls(CPUARMState *env, void *newtls)
++{
++ env->cp15.c13_tls = (uint32_t)newtls;
++}
++#endif
++
+ #define CPSR_M (0x1f)
+ #define CPSR_T (1 << 5)
+ #define CPSR_F (1 << 6)
+@@ -137,7 +150,11 @@
+ #define CPSR_J (1 << 24)
+ #define CPSR_IT_0_1 (3 << 25)
+ #define CPSR_Q (1 << 27)
+-#define CPSR_NZCV (0xf << 28)
++#define CPSR_V (1 << 28)
++#define CPSR_C (1 << 29)
++#define CPSR_Z (1 << 30)
++#define CPSR_N (1 << 31)
++#define CPSR_NZCV (CPSR_N | CPSR_Z | CPSR_C | CPSR_V)
+
+ #define CACHED_CPSR_BITS (CPSR_T | CPSR_Q | CPSR_NZCV)
+ /* Return the current CPSR value. */
+Only in qemu-0.8.0/target-arm: cpu.h~
+diff -ur qemu-0.8.0.orig/target-arm/exec.h qemu-0.8.0/target-arm/exec.h
+--- qemu-0.8.0.orig/target-arm/exec.h 2005-12-20 00:51:53.000000000 +0200
++++ qemu-0.8.0/target-arm/exec.h 2006-07-12 15:23:46.000000000 +0300
+@@ -51,8 +51,6 @@
+
+ /* In op_helper.c */
+
+-void cpu_lock(void);
+-void cpu_unlock(void);
+ void helper_set_cp15(CPUState *, uint32_t, uint32_t);
+ uint32_t helper_get_cp15(CPUState *, uint32_t);
+
+diff -ur qemu-0.8.0.orig/target-arm/op.c qemu-0.8.0/target-arm/op.c
+--- qemu-0.8.0.orig/target-arm/op.c 2005-12-20 00:51:53.000000000 +0200
++++ qemu-0.8.0/target-arm/op.c 2006-07-12 15:23:46.000000000 +0300
+@@ -885,6 +885,12 @@
+ cpu_loop_exit();
+ }
+
++void OPPROTO op_kernel_trap(void)
++{
++ env->exception_index = EXCP_KERNEL_TRAP;
++ cpu_loop_exit();
++}
++
+ /* VFP support. We follow the convention used for VFP instrunctions:
+ Single precition routines have a "s" suffix, double precision a
+ "d" suffix. */
+diff -ur qemu-0.8.0.orig/target-arm/translate.c qemu-0.8.0/target-arm/translate.c
+--- qemu-0.8.0.orig/target-arm/translate.c 2005-12-20 00:51:53.000000000 +0200
++++ qemu-0.8.0/target-arm/translate.c 2006-07-12 15:23:46.000000000 +0300
+@@ -2282,6 +2282,7 @@
+ s->is_jmp = DISAS_JUMP;
+ }
+
++
+ /* generate intermediate code in gen_opc_buf and gen_opparam_buf for
+ basic block 'tb'. If search_pc is TRUE, also generate PC
+ information for each intermediate instruction. */
+@@ -2316,6 +2317,15 @@
+ nb_gen_labels = 0;
+ lj = -1;
+ do {
++#ifdef CONFIG_USER_ONLY
++ /* Intercept jump to the magic kernel page. */
++ if (dc->pc > 0xffff0000) {
++ gen_op_kernel_trap();
++ dc->is_jmp = DISAS_UPDATE;
++ break;
++ }
++#endif
++
+ if (env->nb_breakpoints > 0) {
+ for(j = 0; j < env->nb_breakpoints; j++) {
+ if (env->breakpoints[j] == dc->pc) {
+diff -urN qemu-0.8.1.orig/qemu_spinlock.h qemu-0.8.1/qemu_spinlock.h
+--- qemu-0.8.1.orig/qemu_spinlock.h 1970-01-01 02:00:00.000000000 +0200
++++ qemu-0.8.1/qemu_spinlock.h 2006-06-04 00:59:23.000000000 +0300
+@@ -0,0 +1,182 @@
++/*
++ * internal execution defines for qemu
++ *
++ * Copyright (c) 2003 Fabrice Bellard
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#ifndef _QEMU_SPINLOCK_H
++#define _QEMU_SPINLOCK_H
++
++#ifdef __powerpc__
++static inline int testandset (int *p)
++{
++ int ret;
++ __asm__ __volatile__ (
++ "0: lwarx %0,0,%1\n"
++ " xor. %0,%3,%0\n"
++ " bne 1f\n"
++ " stwcx. %2,0,%1\n"
++ " bne- 0b\n"
++ "1: "
++ : "=&r" (ret)
++ : "r" (p), "r" (1), "r" (0)
++ : "cr0", "memory");
++ return ret;
++}
++#endif
++
++#ifdef __i386__
++static inline int testandset (int *p)
++{
++ long int readval = 0;
++
++ __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
++ : "+m" (*p), "+a" (readval)
++ : "r" (1)
++ : "cc");
++ return readval;
++}
++#endif
++
++#ifdef __x86_64__
++static inline int testandset (int *p)
++{
++ long int readval = 0;
++
++ __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
++ : "+m" (*p), "+a" (readval)
++ : "r" (1)
++ : "cc");
++ return readval;
++}
++#endif
++
++#ifdef __s390__
++static inline int testandset (int *p)
++{
++ int ret;
++
++ __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n"
++ " jl 0b"
++ : "=&d" (ret)
++ : "r" (1), "a" (p), "0" (*p)
++ : "cc", "memory" );
++ return ret;
++}
++#endif
++
++#ifdef __alpha__
++static inline int testandset (int *p)
++{
++ int ret;
++ unsigned long one;
++
++ __asm__ __volatile__ ("0: mov 1,%2\n"
++ " ldl_l %0,%1\n"
++ " stl_c %2,%1\n"
++ " beq %2,1f\n"
++ ".subsection 2\n"
++ "1: br 0b\n"
++ ".previous"
++ : "=r" (ret), "=m" (*p), "=r" (one)
++ : "m" (*p));
++ return ret;
++}
++#endif
++
++#ifdef __sparc__
++static inline int testandset (int *p)
++{
++ int ret;
++
++ __asm__ __volatile__("ldstub [%1], %0"
++ : "=r" (ret)
++ : "r" (p)
++ : "memory");
++
++ return (ret ? 1 : 0);
++}
++#endif
++
++#ifdef __arm__
++static inline int testandset (int *spinlock)
++{
++ register unsigned int ret;
++ __asm__ __volatile__("swp %0, %1, [%2]"
++ : "=r"(ret)
++ : "0"(1), "r"(spinlock));
++
++ return ret;
++}
++#endif
++
++#ifdef __mc68000
++static inline int testandset (int *p)
++{
++ char ret;
++ __asm__ __volatile__("tas %1; sne %0"
++ : "=r" (ret)
++ : "m" (p)
++ : "cc","memory");
++ return ret;
++}
++#endif
++
++#ifdef __ia64
++#include <ia64intrin.h>
++
++static inline int testandset (int *p)
++{
++ return __sync_lock_test_and_set (p, 1);
++}
++#endif
++
++typedef int spinlock_t;
++
++#define SPIN_LOCK_UNLOCKED 0
++
++#if defined(CONFIG_USER_ONLY)
++static inline void spin_lock(spinlock_t *lock)
++{
++ while (testandset(lock));
++}
++
++static inline void spin_unlock(spinlock_t *lock)
++{
++ *lock = 0;
++}
++
++static inline int spin_trylock(spinlock_t *lock)
++{
++ return !testandset(lock);
++}
++#else
++static inline void spin_lock(spinlock_t *lock)
++{
++}
++
++static inline void spin_unlock(spinlock_t *lock)
++{
++}
++
++static inline int spin_trylock(spinlock_t *lock)
++{
++ return 1;
++}
++#endif
++
++#endif /* ! _QEMU_SPINLOCK_H */
+
diff --git a/packages/qemu/qemu-0.8.2/.mtn2git_empty b/packages/qemu/qemu-0.8.2/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/qemu/qemu-0.8.2/.mtn2git_empty
diff --git a/packages/qemu/qemu-0.8.2/arm_nptl.patch b/packages/qemu/qemu-0.8.2/arm_nptl.patch
new file mode 100644
index 0000000000..f9b10aebc5
--- /dev/null
+++ b/packages/qemu/qemu-0.8.2/arm_nptl.patch
@@ -0,0 +1,857 @@
+Index: qemu/configure
+===================================================================
+--- qemu.orig/configure 2006-08-26 16:31:53.000000000 +0100
++++ qemu/configure 2006-08-26 16:31:53.000000000 +0100
+@@ -97,6 +97,7 @@
+ build_docs="no"
+ build_acpi_tables="no"
+ uname_release=""
++nptl="yes"
+
+ # OS specific
+ targetos=`uname -s`
+@@ -243,6 +244,8 @@
+ ;;
+ --enable-iasl) build_acpi_tables="yes"
+ ;;
++ --disable-nptl) nptl="no"
++ ;;
+ esac
+ done
+
+@@ -441,6 +444,23 @@
+ fi
+ fi
+
++# check NPTL support
++cat > $TMPC <<EOF
++#include <sched.h>
++void foo()
++{
++#ifndef CLONE_SETTLS
++#error bork
++#endif
++}
++EOF
++
++if $cc -c -o $TMPO $TMPC 2> /dev/null ; then
++ :
++else
++ nptl="no"
++fi
++
+ ##########################################
+ # SDL probe
+
+@@ -559,6 +579,7 @@
+ fi
+ echo "FMOD support $fmod $fmod_support"
+ echo "kqemu support $kqemu"
++echo "NPTL support $nptl"
+ echo "Documentation $build_docs"
+ [ ! -z "$uname_release" ] && \
+ echo "uname -r $uname_release"
+@@ -880,6 +901,14 @@
+ echo "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak
+ fi
+ fi
++else
++ if test "$nptl" = "yes" ; then
++ case "$target_cpu" in
++ arm | armeb)
++ echo "#define USE_NPTL 1" >> $config_h
++ ;;
++ esac
++ fi
+ fi
+
+ if test "$cocoa" = "yes" ; then
+Index: qemu/exec-all.h
+===================================================================
+--- qemu.orig/exec-all.h 2006-08-26 16:28:32.000000000 +0100
++++ qemu/exec-all.h 2006-08-26 16:31:53.000000000 +0100
+@@ -347,163 +347,7 @@
+ extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4];
+ extern void *io_mem_opaque[IO_MEM_NB_ENTRIES];
+
+-#ifdef __powerpc__
+-static inline int testandset (int *p)
+-{
+- int ret;
+- __asm__ __volatile__ (
+- "0: lwarx %0,0,%1\n"
+- " xor. %0,%3,%0\n"
+- " bne 1f\n"
+- " stwcx. %2,0,%1\n"
+- " bne- 0b\n"
+- "1: "
+- : "=&r" (ret)
+- : "r" (p), "r" (1), "r" (0)
+- : "cr0", "memory");
+- return ret;
+-}
+-#endif
+-
+-#ifdef __i386__
+-static inline int testandset (int *p)
+-{
+- long int readval = 0;
+-
+- __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
+- : "+m" (*p), "+a" (readval)
+- : "r" (1)
+- : "cc");
+- return readval;
+-}
+-#endif
+-
+-#ifdef __x86_64__
+-static inline int testandset (int *p)
+-{
+- long int readval = 0;
+-
+- __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
+- : "+m" (*p), "+a" (readval)
+- : "r" (1)
+- : "cc");
+- return readval;
+-}
+-#endif
+-
+-#ifdef __s390__
+-static inline int testandset (int *p)
+-{
+- int ret;
+-
+- __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n"
+- " jl 0b"
+- : "=&d" (ret)
+- : "r" (1), "a" (p), "0" (*p)
+- : "cc", "memory" );
+- return ret;
+-}
+-#endif
+-
+-#ifdef __alpha__
+-static inline int testandset (int *p)
+-{
+- int ret;
+- unsigned long one;
+-
+- __asm__ __volatile__ ("0: mov 1,%2\n"
+- " ldl_l %0,%1\n"
+- " stl_c %2,%1\n"
+- " beq %2,1f\n"
+- ".subsection 2\n"
+- "1: br 0b\n"
+- ".previous"
+- : "=r" (ret), "=m" (*p), "=r" (one)
+- : "m" (*p));
+- return ret;
+-}
+-#endif
+-
+-#ifdef __sparc__
+-static inline int testandset (int *p)
+-{
+- int ret;
+-
+- __asm__ __volatile__("ldstub [%1], %0"
+- : "=r" (ret)
+- : "r" (p)
+- : "memory");
+-
+- return (ret ? 1 : 0);
+-}
+-#endif
+-
+-#ifdef __arm__
+-static inline int testandset (int *spinlock)
+-{
+- register unsigned int ret;
+- __asm__ __volatile__("swp %0, %1, [%2]"
+- : "=r"(ret)
+- : "0"(1), "r"(spinlock));
+-
+- return ret;
+-}
+-#endif
+-
+-#ifdef __mc68000
+-static inline int testandset (int *p)
+-{
+- char ret;
+- __asm__ __volatile__("tas %1; sne %0"
+- : "=r" (ret)
+- : "m" (p)
+- : "cc","memory");
+- return ret;
+-}
+-#endif
+-
+-#ifdef __ia64
+-#include <ia64intrin.h>
+-
+-static inline int testandset (int *p)
+-{
+- return __sync_lock_test_and_set (p, 1);
+-}
+-#endif
+-
+-typedef int spinlock_t;
+-
+-#define SPIN_LOCK_UNLOCKED 0
+-
+-#if defined(CONFIG_USER_ONLY)
+-static inline void spin_lock(spinlock_t *lock)
+-{
+- while (testandset(lock));
+-}
+-
+-static inline void spin_unlock(spinlock_t *lock)
+-{
+- *lock = 0;
+-}
+-
+-static inline int spin_trylock(spinlock_t *lock)
+-{
+- return !testandset(lock);
+-}
+-#else
+-static inline void spin_lock(spinlock_t *lock)
+-{
+-}
+-
+-static inline void spin_unlock(spinlock_t *lock)
+-{
+-}
+-
+-static inline int spin_trylock(spinlock_t *lock)
+-{
+- return 1;
+-}
+-#endif
++#include "qemu_spinlock.h"
+
+ extern spinlock_t tb_lock;
+
+Index: qemu/linux-user/arm/syscall.h
+===================================================================
+--- qemu.orig/linux-user/arm/syscall.h 2006-03-09 19:18:11.000000000 +0000
++++ qemu/linux-user/arm/syscall.h 2006-08-26 16:31:53.000000000 +0100
+@@ -28,7 +28,9 @@
+ #define ARM_SYSCALL_BASE 0x900000
+ #define ARM_THUMB_SYSCALL 0
+
+-#define ARM_NR_cacheflush (ARM_SYSCALL_BASE + 0xf0000 + 2)
++#define ARM_NR_BASE 0xf0000
++#define ARM_NR_cacheflush (ARM_NR_BASE + 2)
++#define ARM_NR_set_tls (ARM_NR_BASE + 5)
+
+ #define ARM_NR_semihosting 0x123456
+ #define ARM_NR_thumb_semihosting 0xAB
+Index: qemu/linux-user/main.c
+===================================================================
+--- qemu.orig/linux-user/main.c 2006-08-26 16:28:40.000000000 +0100
++++ qemu/linux-user/main.c 2006-08-26 16:31:53.000000000 +0100
+@@ -309,6 +309,50 @@
+ }
+ }
+
++/* Handle a jump to the kernel code page. */
++static int
++do_kernel_trap(CPUARMState *env)
++{
++ uint32_t addr;
++ uint32_t *ptr;
++ uint32_t cpsr;
++
++ switch (env->regs[15]) {
++ case 0xffff0fc0: /* __kernel_cmpxchg */
++ /* XXX: This only works between threads, not between processes.
++ Use native atomic operations. */
++ /* ??? This probably breaks horribly if the access segfaults. */
++ cpu_lock();
++ ptr = (uint32_t *)env->regs[2];
++ cpsr = cpsr_read(env);
++ if (*ptr == env->regs[0]) {
++ *ptr = env->regs[1];
++ env->regs[0] = 0;
++ cpsr |= CPSR_C;
++ } else {
++ env->regs[0] = -1;
++ cpsr &= ~CPSR_C;
++ }
++ cpsr_write(env, cpsr, CPSR_C);
++ cpu_unlock();
++ break;
++ case 0xffff0fe0: /* __kernel_get_tls */
++ env->regs[0] = env->cp15.c13_tls;
++ break;
++ default:
++ return 1;
++ }
++ /* Jump back to the caller. */
++ addr = env->regs[14];
++ if (addr & 1) {
++ env->thumb = 1;
++ addr &= ~1;
++ }
++ env->regs[15] = addr;
++
++ return 0;
++}
++
+ void cpu_loop(CPUARMState *env)
+ {
+ int trapnr;
+@@ -365,10 +409,8 @@
+ }
+ }
+
+- if (n == ARM_NR_cacheflush) {
+- arm_cache_flush(env->regs[0], env->regs[1]);
+- } else if (n == ARM_NR_semihosting
+- || n == ARM_NR_thumb_semihosting) {
++ if (n == ARM_NR_semihosting
++ || n == ARM_NR_thumb_semihosting) {
+ env->regs[0] = do_arm_semihosting (env);
+ } else if (n == 0 || n >= ARM_SYSCALL_BASE
+ || (env->thumb && n == ARM_THUMB_SYSCALL)) {
+@@ -379,14 +421,34 @@
+ n -= ARM_SYSCALL_BASE;
+ env->eabi = 0;
+ }
+- env->regs[0] = do_syscall(env,
+- n,
+- env->regs[0],
+- env->regs[1],
+- env->regs[2],
+- env->regs[3],
+- env->regs[4],
+- env->regs[5]);
++ if ( n > ARM_NR_BASE) {
++ switch (n)
++ {
++ case ARM_NR_cacheflush:
++ arm_cache_flush(env->regs[0], env->regs[1]);
++ break;
++#ifdef USE_NPTL
++ case ARM_NR_set_tls:
++ cpu_set_tls(env, env->regs[0]);
++ env->regs[0] = 0;
++ break;
++#endif
++ default:
++ printf ("Error: Bad syscall: %x\n", n);
++ goto error;
++ }
++ }
++ else
++ {
++ env->regs[0] = do_syscall(env,
++ n,
++ env->regs[0],
++ env->regs[1],
++ env->regs[2],
++ env->regs[3],
++ env->regs[4],
++ env->regs[5]);
++ }
+ } else {
+ goto error;
+ }
+@@ -425,6 +487,10 @@
+ }
+ }
+ break;
++ case EXCP_KERNEL_TRAP:
++ if (do_kernel_trap(env))
++ goto error;
++ break;
+ default:
+ error:
+ fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n",
+@@ -1639,6 +1705,10 @@
+ ts->heap_base = info->brk;
+ /* This will be filled in on the first SYS_HEAPINFO call. */
+ ts->heap_limit = 0;
++ /* Register the magic kernel code page. The cpu will generate a
++ special exception when it tries to execute code here. We can't
++ put real code here because it may be in use by the host kernel. */
++ page_set_flags(0xffff0000, 0xffff0fff, 0);
+ }
+ #elif defined(TARGET_SPARC)
+ {
+Index: qemu/linux-user/qemu.h
+===================================================================
+--- qemu.orig/linux-user/qemu.h 2006-08-26 16:28:40.000000000 +0100
++++ qemu/linux-user/qemu.h 2006-08-26 16:33:50.000000000 +0100
+@@ -75,6 +75,9 @@
+ uint32_t v86mask;
+ #endif
+ int used; /* non zero if used */
++#ifdef USE_NPTL
++ uint32_t *child_tidptr;
++#endif
+ struct image_info *info;
+ uint8_t stack[0];
+ } __attribute__((aligned(16))) TaskState;
+Index: qemu/linux-user/syscall.c
+===================================================================
+--- qemu.orig/linux-user/syscall.c 2006-08-26 16:28:40.000000000 +0100
++++ qemu/linux-user/syscall.c 2006-08-26 16:31:53.000000000 +0100
+@@ -66,9 +66,18 @@
+ #include <linux/kd.h>
+
+ #include "qemu.h"
++#include "qemu_spinlock.h"
+
+ //#define DEBUG
+
++#ifdef USE_NPTL
++#define CLONE_NPTL_FLAGS2 (CLONE_SETTLS | \
++ CLONE_PARENT_SETTID | CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID)
++#else
++/* XXX: Hardcode the above values. */
++#define CLONE_NPTL_FLAGS2 0
++#endif
++
+ #if defined(TARGET_I386) || defined(TARGET_ARM) || defined(TARGET_SPARC)
+ /* 16 bit uid wrappers emulation */
+ #define USE_UID16
+@@ -1602,20 +1611,38 @@
+ thread/process */
+ #define NEW_STACK_SIZE 8192
+
++#ifdef USE_NPTL
++static spinlock_t nptl_lock = SPIN_LOCK_UNLOCKED;
++#endif
++
+ static int clone_func(void *arg)
+ {
+ CPUState *env = arg;
++#ifdef HAVE_NPTL
++ /* Wait until the parent has finshed initializing the tls state. */
++ while (!spin_trylock(&nptl_lock))
++ usleep(1);
++ spin_unlock(&nptl_lock);
++#endif
+ cpu_loop(env);
+ /* never exits */
+ return 0;
+ }
+
+-int do_fork(CPUState *env, unsigned int flags, unsigned long newsp)
++int do_fork(CPUState *env, unsigned int flags, unsigned long newsp,
++ uint32_t *parent_tidptr, void *newtls,
++ uint32_t *child_tidptr)
+ {
+ int ret;
+ TaskState *ts;
+ uint8_t *new_stack;
+ CPUState *new_env;
++#ifdef USE_NPTL
++ unsigned int nptl_flags;
++
++ if (flags & CLONE_PARENT_SETTID)
++ *parent_tidptr = gettid();
++#endif
+
+ if (flags & CLONE_VM) {
+ ts = malloc(sizeof(TaskState) + NEW_STACK_SIZE);
+@@ -1665,16 +1692,60 @@
+ #error unsupported target CPU
+ #endif
+ new_env->opaque = ts;
++#ifdef USE_NPTL
++ nptl_flags = flags;
++ flags &= ~CLONE_NPTL_FLAGS2;
++ if (nptl_flags & CLONE_CHILD_CLEARTID) {
++ ts->child_tidptr = child_tidptr;
++ }
++ if (nptl_flags & CLONE_SETTLS)
++ cpu_set_tls (new_env, newtls);
++ /* Grab the global cpu lock so that the thread setup appears
++ atomic. */
++ if (nptl_flags & CLONE_CHILD_SETTID)
++ spin_lock(&nptl_lock);
++#else
++ if (flags & CLONE_NPTL_FLAGS2)
++ return -EINVAL;
++#endif
++
+ #ifdef __ia64__
+ ret = __clone2(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
+ #else
+ ret = clone(clone_func, new_stack + NEW_STACK_SIZE, flags, new_env);
+ #endif
++#ifdef USE_NPTL
++ if (ret != -1) {
++ if (nptl_flags & CLONE_CHILD_SETTID)
++ *child_tidptr = ret;
++ }
++ /* Allow the child to continue. */
++ if (nptl_flags & CLONE_CHILD_SETTID)
++ spin_unlock(&nptl_lock);
++#endif
+ } else {
+- /* if no CLONE_VM, we consider it is a fork */
+- if ((flags & ~CSIGNAL) != 0)
+- return -EINVAL;
+- ret = fork();
++ /* if no CLONE_VM, we consider it is a fork */
++ if ((flags & ~(CSIGNAL | CLONE_NPTL_FLAGS2)) != 0)
++ return -EINVAL;
++ ret = fork();
++#ifdef USE_NPTL
++ /* There is a race condition here. The parent process could
++ theoretically read the TID in the child process before the child
++ tid is set. This would require using either ptrace
++ (not implemented) or having *_tidptr to point at a shared memory
++ mapping. We can't repeat the spinlock hack used above because
++ the child process gets its own copy of the lock. */
++ if (ret == 0) {
++ /* Child Process. */
++ if (flags & CLONE_CHILD_SETTID)
++ *child_tidptr = gettid();
++ ts = (TaskState *)env->opaque;
++ if (flags & CLONE_CHILD_CLEARTID)
++ ts->child_tidptr = child_tidptr;
++ if (flags & CLONE_SETTLS)
++ cpu_set_tls (env, newtls);
++ }
++#endif
+ }
+ return ret;
+ }
+@@ -1918,7 +1989,7 @@
+ ret = do_brk(arg1);
+ break;
+ case TARGET_NR_fork:
+- ret = get_errno(do_fork(cpu_env, SIGCHLD, 0));
++ ret = get_errno(do_fork(cpu_env, SIGCHLD, 0, NULL, NULL, NULL));
+ break;
+ case TARGET_NR_waitpid:
+ {
+@@ -2989,7 +3060,8 @@
+ ret = get_errno(fsync(arg1));
+ break;
+ case TARGET_NR_clone:
+- ret = get_errno(do_fork(cpu_env, arg1, arg2));
++ ret = get_errno(do_fork(cpu_env, arg1, arg2, (uint32_t *)arg3,
++ (void *)arg4, (uint32_t *)arg5));
+ break;
+ #ifdef __NR_exit_group
+ /* new thread calls */
+@@ -3339,7 +3411,8 @@
+ #endif
+ #ifdef TARGET_NR_vfork
+ case TARGET_NR_vfork:
+- ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0));
++ ret = get_errno(do_fork(cpu_env, CLONE_VFORK | CLONE_VM | SIGCHLD, 0,
++ NULL, NULL, NULL));
+ break;
+ #endif
+ #ifdef TARGET_NR_ugetrlimit
+@@ -3838,4 +3911,3 @@
+ #endif
+ return ret;
+ }
+-
+Index: qemu/target-arm/cpu.h
+===================================================================
+--- qemu.orig/target-arm/cpu.h 2006-03-09 19:18:27.000000000 +0000
++++ qemu/target-arm/cpu.h 2006-08-26 16:31:53.000000000 +0100
+@@ -35,6 +35,9 @@
+ #define EXCP_IRQ 5
+ #define EXCP_FIQ 6
+ #define EXCP_BKPT 7
++#define EXCP_KERNEL_TRAP 8 /* Jumped to kernel code page. */
++
++
+
+ /* We currently assume float and double are IEEE single and double
+ precision respectively.
+@@ -85,6 +88,7 @@
+ uint32_t c9_data;
+ uint32_t c13_fcse; /* FCSE PID. */
+ uint32_t c13_context; /* Context ID. */
++ uint32_t c13_tls; /* Paul Brook told me to just add this ;) */
+ } cp15;
+
+ /* Internal CPU feature flags. */
+@@ -135,6 +139,15 @@
+ int cpu_arm_signal_handler(int host_signum, struct siginfo *info,
+ void *puc);
+
++void cpu_lock(void);
++void cpu_unlock(void);
++#if defined(USE_NPTL)
++static inline void cpu_set_tls(CPUARMState *env, void *newtls)
++{
++ env->cp15.c13_tls = (uint32_t)newtls;
++}
++#endif
++
+ #define CPSR_M (0x1f)
+ #define CPSR_T (1 << 5)
+ #define CPSR_F (1 << 6)
+@@ -146,7 +159,11 @@
+ #define CPSR_J (1 << 24)
+ #define CPSR_IT_0_1 (3 << 25)
+ #define CPSR_Q (1 << 27)
+-#define CPSR_NZCV (0xf << 28)
++#define CPSR_V (1 << 28)
++#define CPSR_C (1 << 29)
++#define CPSR_Z (1 << 30)
++#define CPSR_N (1 << 31)
++#define CPSR_NZCV (CPSR_N | CPSR_Z | CPSR_C | CPSR_V)
+
+ #define CACHED_CPSR_BITS (CPSR_T | CPSR_Q | CPSR_NZCV)
+ /* Return the current CPSR value. */
+Index: qemu/target-arm/exec.h
+===================================================================
+--- qemu.orig/target-arm/exec.h 2006-03-09 19:18:27.000000000 +0000
++++ qemu/target-arm/exec.h 2006-08-26 16:31:53.000000000 +0100
+@@ -51,8 +51,6 @@
+
+ /* In op_helper.c */
+
+-void cpu_lock(void);
+-void cpu_unlock(void);
+ void helper_set_cp15(CPUState *, uint32_t, uint32_t);
+ uint32_t helper_get_cp15(CPUState *, uint32_t);
+
+Index: qemu/target-arm/op.c
+===================================================================
+--- qemu.orig/target-arm/op.c 2006-08-26 16:28:48.000000000 +0100
++++ qemu/target-arm/op.c 2006-08-26 16:31:53.000000000 +0100
+@@ -891,6 +891,12 @@
+ cpu_loop_exit();
+ }
+
++void OPPROTO op_kernel_trap(void)
++{
++ env->exception_index = EXCP_KERNEL_TRAP;
++ cpu_loop_exit();
++}
++
+ /* VFP support. We follow the convention used for VFP instrunctions:
+ Single precition routines have a "s" suffix, double precision a
+ "d" suffix. */
+Index: qemu/target-arm/translate.c
+===================================================================
+--- qemu.orig/target-arm/translate.c 2006-08-26 16:28:48.000000000 +0100
++++ qemu/target-arm/translate.c 2006-08-26 16:31:53.000000000 +0100
+@@ -2382,6 +2382,7 @@
+ s->is_jmp = DISAS_JUMP;
+ }
+
++
+ /* generate intermediate code in gen_opc_buf and gen_opparam_buf for
+ basic block 'tb'. If search_pc is TRUE, also generate PC
+ information for each intermediate instruction. */
+@@ -2416,6 +2417,15 @@
+ nb_gen_labels = 0;
+ lj = -1;
+ do {
++#ifdef CONFIG_USER_ONLY
++ /* Intercept jump to the magic kernel page. */
++ if (dc->pc > 0xffff0000) {
++ gen_op_kernel_trap();
++ dc->is_jmp = DISAS_UPDATE;
++ break;
++ }
++#endif
++
+ if (env->nb_breakpoints > 0) {
+ for(j = 0; j < env->nb_breakpoints; j++) {
+ if (env->breakpoints[j] == dc->pc) {
+Index: qemu/qemu_spinlock.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ qemu/qemu_spinlock.h 2006-08-26 16:31:53.000000000 +0100
+@@ -0,0 +1,182 @@
++/*
++ * internal execution defines for qemu
++ *
++ * Copyright (c) 2003 Fabrice Bellard
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#ifndef _QEMU_SPINLOCK_H
++#define _QEMU_SPINLOCK_H
++
++#ifdef __powerpc__
++static inline int testandset (int *p)
++{
++ int ret;
++ __asm__ __volatile__ (
++ "0: lwarx %0,0,%1\n"
++ " xor. %0,%3,%0\n"
++ " bne 1f\n"
++ " stwcx. %2,0,%1\n"
++ " bne- 0b\n"
++ "1: "
++ : "=&r" (ret)
++ : "r" (p), "r" (1), "r" (0)
++ : "cr0", "memory");
++ return ret;
++}
++#endif
++
++#ifdef __i386__
++static inline int testandset (int *p)
++{
++ long int readval = 0;
++
++ __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
++ : "+m" (*p), "+a" (readval)
++ : "r" (1)
++ : "cc");
++ return readval;
++}
++#endif
++
++#ifdef __x86_64__
++static inline int testandset (int *p)
++{
++ long int readval = 0;
++
++ __asm__ __volatile__ ("lock; cmpxchgl %2, %0"
++ : "+m" (*p), "+a" (readval)
++ : "r" (1)
++ : "cc");
++ return readval;
++}
++#endif
++
++#ifdef __s390__
++static inline int testandset (int *p)
++{
++ int ret;
++
++ __asm__ __volatile__ ("0: cs %0,%1,0(%2)\n"
++ " jl 0b"
++ : "=&d" (ret)
++ : "r" (1), "a" (p), "0" (*p)
++ : "cc", "memory" );
++ return ret;
++}
++#endif
++
++#ifdef __alpha__
++static inline int testandset (int *p)
++{
++ int ret;
++ unsigned long one;
++
++ __asm__ __volatile__ ("0: mov 1,%2\n"
++ " ldl_l %0,%1\n"
++ " stl_c %2,%1\n"
++ " beq %2,1f\n"
++ ".subsection 2\n"
++ "1: br 0b\n"
++ ".previous"
++ : "=r" (ret), "=m" (*p), "=r" (one)
++ : "m" (*p));
++ return ret;
++}
++#endif
++
++#ifdef __sparc__
++static inline int testandset (int *p)
++{
++ int ret;
++
++ __asm__ __volatile__("ldstub [%1], %0"
++ : "=r" (ret)
++ : "r" (p)
++ : "memory");
++
++ return (ret ? 1 : 0);
++}
++#endif
++
++#ifdef __arm__
++static inline int testandset (int *spinlock)
++{
++ register unsigned int ret;
++ __asm__ __volatile__("swp %0, %1, [%2]"
++ : "=r"(ret)
++ : "0"(1), "r"(spinlock));
++
++ return ret;
++}
++#endif
++
++#ifdef __mc68000
++static inline int testandset (int *p)
++{
++ char ret;
++ __asm__ __volatile__("tas %1; sne %0"
++ : "=r" (ret)
++ : "m" (p)
++ : "cc","memory");
++ return ret;
++}
++#endif
++
++#ifdef __ia64
++#include <ia64intrin.h>
++
++static inline int testandset (int *p)
++{
++ return __sync_lock_test_and_set (p, 1);
++}
++#endif
++
++typedef int spinlock_t;
++
++#define SPIN_LOCK_UNLOCKED 0
++
++#if defined(CONFIG_USER_ONLY)
++static inline void spin_lock(spinlock_t *lock)
++{
++ while (testandset(lock));
++}
++
++static inline void spin_unlock(spinlock_t *lock)
++{
++ *lock = 0;
++}
++
++static inline int spin_trylock(spinlock_t *lock)
++{
++ return !testandset(lock);
++}
++#else
++static inline void spin_lock(spinlock_t *lock)
++{
++}
++
++static inline void spin_unlock(spinlock_t *lock)
++{
++}
++
++static inline int spin_trylock(spinlock_t *lock)
++{
++ return 1;
++}
++#endif
++
++#endif /* ! _QEMU_SPINLOCK_H */
diff --git a/packages/qemu/qemu-native_0.8.0.bb b/packages/qemu/qemu-native_0.8.0.bb
index acb5543a90..2b143bdc0f 100644
--- a/packages/qemu/qemu-native_0.8.0.bb
+++ b/packages/qemu/qemu-native_0.8.0.bb
@@ -1,5 +1,6 @@
require qemu_${PV}.bb
inherit native
+FILESPATH =. "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/qemu-${PV}:"
S = "${WORKDIR}/qemu-${PV}"
prefix = "${STAGING_DIR}/${BUILD_SYS}"
diff --git a/packages/qemu/qemu-native_0.8.2.bb b/packages/qemu/qemu-native_0.8.2.bb
new file mode 100644
index 0000000000..e064723e4e
--- /dev/null
+++ b/packages/qemu/qemu-native_0.8.2.bb
@@ -0,0 +1,7 @@
+require qemu_${PV}.bb
+EXTRA_OECONF = ""
+inherit native
+FILESPATH =. "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/qemu-${PV}:"
+S = "${WORKDIR}/qemu-${PV}"
+prefix = "${STAGING_DIR}/${BUILD_SYS}"
+
diff --git a/packages/qemu/qemu_0.8.0.bb b/packages/qemu/qemu_0.8.0.bb
index fd7a892347..38bbcbacad 100644
--- a/packages/qemu/qemu_0.8.0.bb
+++ b/packages/qemu/qemu_0.8.0.bb
@@ -1,6 +1,9 @@
LICENSE = "GPL"
-SRC_URI = "http://fabrice.bellard.free.fr/qemu/qemu-${PV}.tar.gz"
+SRC_URI = "http://fabrice.bellard.free.fr/qemu/qemu-${PV}.tar.gz \
+ file://configure.patch;patch=1 \
+ file://arm_nptl.patch;patch=1"
+PR = "r1"
inherit autotools
diff --git a/packages/qemu/qemu_0.8.2.bb b/packages/qemu/qemu_0.8.2.bb
new file mode 100644
index 0000000000..49032fa59d
--- /dev/null
+++ b/packages/qemu/qemu_0.8.2.bb
@@ -0,0 +1,11 @@
+LICENSE = "GPL"
+
+SRC_URI = "http://fabrice.bellard.free.fr/qemu/qemu-${PV}.tar.gz \
+ file://configure.patch;patch=1 \
+ file://pl110_rgb-r0.patch;patch=1 \
+ file://arm_nptl.patch;patch=1"
+
+inherit autotools
+
+EXTRA_OECONF = "--cc=${CC}"
+
diff --git a/packages/qemu/qemu_cvs.bb b/packages/qemu/qemu_cvs.bb
index 5697e69578..0dfe01aa11 100644
--- a/packages/qemu/qemu_cvs.bb
+++ b/packages/qemu/qemu_cvs.bb
@@ -1,11 +1,10 @@
LICENSE = "GPL"
-PV = "0.8.0+cvs${SRCDATE}"
-PR = "r1"
+PV = "0.8.2+cvs${SRCDATE}"
SRC_URI = "cvs://anonymous@cvs.savannah.nongnu.org/sources/qemu;method=pserver;rsh=ssh;module=qemu \
file://configure.patch;patch=1 \
- file://mouse_fix-r0.patch;patch=1 \
- file://pl110_rgb-r0.patch;patch=1"
+ file://pl110_rgb-r0.patch;patch=1 \
+ file://arm_nptl.patch;patch=1"
S = "${WORKDIR}/qemu"
diff --git a/packages/subversion/subversion_1.3.2.bb b/packages/subversion/subversion_1.3.2.bb
new file mode 100644
index 0000000000..f508381d15
--- /dev/null
+++ b/packages/subversion/subversion_1.3.2.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "The Subversion (svn) client"
+SECTION = "console/network"
+DEPENDS = "apr-util-0.9.12 neon"
+MAINTAINER = "Mustafa Yuecel <yuecelm@ee.ethz.ch>"
+LICENSE = "Apache/BSD"
+HOMEPAGE = "http://subversion.tigris.org"
+PR = "r0"
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "http://subversion.tigris.org/downloads/${P}.tar.bz2 \
+ file://disable-revision-install.patch;patch=1"
+
+EXTRA_OECONF = "--with-neon=${STAGING_DIR}/${BUILD_SYS} \
+ --without-berkeley-db --without-apxs --without-apache \
+ --without-swig --with-apr=${STAGING_BINDIR} \
+ --with-apr-util=${STAGING_BINDIR}"
+
+inherit autotools
+
+do_configure() {
+ oe_runconf
+}
diff --git a/packages/syslog-ng/files/syslog-ng.conf b/packages/syslog-ng/files/syslog-ng.conf
new file mode 100644
index 0000000000..4d1e9f8b22
--- /dev/null
+++ b/packages/syslog-ng/files/syslog-ng.conf
@@ -0,0 +1,89 @@
+#
+# Syslog-ng example configuration for for Debian GNU/Linux
+#
+# Copyright (c) 1999 anonymous
+# Copyright (c) 1999 Balazs Scheidler
+# $Id: syslog-ng.conf.sample,v 1.3 2003/05/20 08:57:27 asd Exp $
+#
+# Syslog-ng configuration file, compatible with default Debian syslogd
+# installation.
+#
+
+options { long_hostnames(off); sync(0); };
+
+source src { file("/proc/kmsg"); unix-stream("/dev/log"); internal(); };
+source net { udp(); };
+
+destination authlog { file("/var/log/auth.log"); };
+destination syslog { file("/var/log/syslog"); };
+destination cron { file("/var/log/cron.log"); };
+destination daemon { file("/var/log/daemon.log"); };
+destination kern { file("/var/log/kern.log"); };
+destination lpr { file("/var/log/lpr.log"); };
+destination user { file("/var/log/user.log"); };
+destination uucp { file("/var/log/uucp.log"); };
+destination ppp { file("/var/log/ppp.log"); };
+destination mail { file("/var/log/mail.log"); };
+
+destination mailinfo { file("/var/log/mail.info"); };
+destination mailwarn { file("/var/log/mail.warn"); };
+destination mailerr { file("/var/log/mail.err"); };
+
+destination newscrit { file("/var/log/news/news.crit"); };
+destination newserr { file("/var/log/news/news.err"); };
+destination newsnotice { file("/var/log/news/news.notice"); };
+
+destination debug { file("/var/log/debug"); };
+destination messages { file("/var/log/messages"); };
+destination console { usertty("root"); };
+destination console_all { file("/dev/tty12"); };
+#destination loghost { udp("loghost" port(999)); };
+
+
+destination xconsole { pipe("/dev/xconsole"); };
+
+filter f_auth { facility(auth); };
+filter f_authpriv { facility(auth, authpriv); };
+filter f_syslog { not facility(authpriv, mail); };
+filter f_cron { facility(cron); };
+filter f_daemon { facility(daemon); };
+filter f_kern { facility(kern); };
+filter f_lpr { facility(lpr); };
+filter f_mail { facility(mail); };
+filter f_user { facility(user); };
+filter f_uucp { facility(cron); };
+filter f_ppp { facility(local2); };
+filter f_news { facility(news); };
+filter f_debug { not facility(auth, authpriv, news, mail); };
+filter f_messages { level(info..warn)
+ and not facility(auth, authpriv, mail, news); };
+filter f_emergency { level(emerg); };
+
+filter f_info { level(info); };
+filter f_notice { level(notice); };
+filter f_warn { level(warn); };
+filter f_crit { level(crit); };
+filter f_err { level(err); };
+
+log { source(src); filter(f_authpriv); destination(authlog); };
+log { source(src); filter(f_syslog); destination(syslog); };
+log { source(src); filter(f_cron); destination(cron); };
+log { source(src); filter(f_daemon); destination(daemon); };
+log { source(src); filter(f_kern); destination(kern); };
+log { source(src); filter(f_lpr); destination(lpr); };
+log { source(src); filter(f_mail); destination(mail); };
+log { source(src); filter(f_user); destination(user); };
+log { source(src); filter(f_uucp); destination(uucp); };
+log { source(src); filter(f_mail); filter(f_info); destination(mailinfo); };
+log { source(src); filter(f_mail); filter(f_warn); destination(mailwarn); };
+log { source(src); filter(f_mail); filter(f_err); destination(mailerr); };
+log { source(src); filter(f_news); filter(f_crit); destination(newscrit); };
+log { source(src); filter(f_news); filter(f_err); destination(newserr); };
+log { source(src); filter(f_news); filter(f_notice); destination(newsnotice); };
+log { source(src); filter(f_debug); destination(debug); };
+log { source(src); filter(f_messages); destination(messages); };
+log { source(src); filter(f_emergency); destination(console); };
+log { source(src); filter(f_ppp); destination(ppp); };
+log { source(src); destination(console_all); };
+
+
diff --git a/packages/syslog-ng/syslog-ng_1.6.8.bb b/packages/syslog-ng/syslog-ng_1.6.8.bb
index 734dc310fb..ce1f77813c 100644
--- a/packages/syslog-ng/syslog-ng_1.6.8.bb
+++ b/packages/syslog-ng/syslog-ng_1.6.8.bb
@@ -1,9 +1,10 @@
-PR = "r8"
+PR = "r9"
MAINTAINER = "Oyvind Repvik <nail@nslu2-linux.org"
DESCRIPTION = "Alternative system logger daemon"
DEPENDS = "libol flex"
SRC_URI = "http://www.balabit.com/downloads/syslog-ng/1.6/src/${PN}-${PV}.tar.gz \
+ file://syslog-ng.conf \
file://initscript"
S = "${WORKDIR}/${PN}-${PV}"
@@ -16,7 +17,7 @@ INITSCRIPT_PARAMS = "defaults 05"
do_install_append() {
install -d ${D}/${sysconfdir}/${PN}
- install ${S}/doc/syslog-ng.conf.sample ${D}${sysconfdir}/${PN}/syslog-ng.conf
+ install ${WORKDIR}/syslog-ng.conf ${D}${sysconfdir}/${PN}/syslog-ng.conf
install -d ${D}/${sysconfdir}/init.d
install -m 755 ${WORKDIR}/initscript ${D}/${sysconfdir}/init.d/syslog-ng
}
diff --git a/packages/udev/udev-097/links.conf b/packages/udev/udev-097/links.conf
new file mode 100644
index 0000000000..ee26012039
--- /dev/null
+++ b/packages/udev/udev-097/links.conf
@@ -0,0 +1,20 @@
+# This file does not exist. Please do not ask the debian maintainer about it.
+# You may use it to do strange and wonderful things, at your risk.
+
+L fd /proc/self/fd
+L stdin /proc/self/fd/0
+L stdout /proc/self/fd/1
+L stderr /proc/self/fd/2
+L core /proc/kcore
+L sndstat /proc/asound/oss/sndstat
+
+D pts
+D shm
+
+# Hic sunt leones.
+M ppp c 108 0
+D loop
+M loop/0 b 7 0
+D net
+M net/tun c 10 200
+
diff --git a/packages/udev/udev_097.bb b/packages/udev/udev_097.bb
index 2e9e8d500f..fe24573b8d 100644
--- a/packages/udev/udev_097.bb
+++ b/packages/udev/udev_097.bb
@@ -8,7 +8,7 @@ used to detect the type of a file system and read its metadata."
DESCRIPTION_libvolume-id-dev = "libvolume_id development headers, \
needed to link programs with libvolume_id."
-PR = "r0"
+PR = "r1"
SRC_URI = "http://kernel.org/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
file://noasmlinkage.patch;patch=1 \
diff --git a/packages/xorg-xserver/xserver-kdrive_git.bb b/packages/xorg-xserver/xserver-kdrive_git.bb
index 90fa12aebb..aa5784e1c7 100644
--- a/packages/xorg-xserver/xserver-kdrive_git.bb
+++ b/packages/xorg-xserver/xserver-kdrive_git.bb
@@ -1,22 +1,30 @@
PV = "1.1.0+git${SRCDATE}"
DEFAULT_PREFERENCE = "-2"
+PR = "r1"
+
LICENSE = "MIT"
DEPENDS = "tslib libxkbfile xf86dgaproto xf86vidmodeproto xf86miscproto xproto libxdmcp xextproto xtrans libxau virtual/libx11 libxext libxrandr fixesproto damageproto libxfont resourceproto compositeproto xcalibrateext recordproto videoproto scrnsaverproto"
PROVIDES = "virtual/xserver"
RPROVIDES = "virtual/xserver"
-PACKAGES = "xserver-kdrive-fbdev xserver-kdrive-fake xserver-kdrive-xephyr ${PN}-doc ${PN}-dev ${PN}-locale"
+PACKAGES =+ "xserver-kdrive-fbdev xserver-kdrive-fake xserver-kdrive-xephyr ${PN}-doc ${PN}-dev ${PN}-locale"
SECTION = "x11/base"
DESCRIPTION = "X server from freedesktop.org"
DESCRIPTION_xserver-kdrive-fbdev = "X server from freedesktop.org, supporting generic framebuffer devices"
DESCRIPTION_xserver-kdrive-fake = "Fake X server"
DESCRIPTION_xserver-kdrive-xephyr = "X server in an X window"
+FILES_${PN} += "${libdir}/xserver/SecurityPolicy"
+
FILES_xserver-kdrive-fbdev = "${bindir}/Xfbdev"
FILES_xserver-kdrive-fake = "${bindir}/Xfake"
FILES_xserver-kdrive-xephyr = "${bindir}/Xephyr"
+RDEPENDS_xserver-kdrive-fbdev = "${PN}"
+RDEPENDS_xserver-kdrive-fake = "${PN}"
+RDEPENDS_xserver-kdrive-xephyr = "${PN}"
+
SRC_URI = "git://anongit.freedesktop.org/xorg/xserver;protocol=git \
file://kmode.patch;patch=1 \
file://disable-apm.patch;patch=1 \