aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--classes/xfce.bbclass2
-rw-r--r--conf/checksums.ini52
-rw-r--r--conf/distro/include/preferred-om-2008-versions.inc2
-rw-r--r--conf/distro/include/preferred-xorg-versions-X11R7.4-updates.inc2
-rw-r--r--conf/licenses.conf3
-rw-r--r--conf/machine/geodegx.conf4
-rw-r--r--conf/machine/geodelx.conf15
-rw-r--r--conf/machine/include/tune-geode.inc (renamed from conf/machine/include/tune-geodegx.inc)3
-rw-r--r--conf/machine/include/tune-geodelx.inc9
-rw-r--r--docs/usermanual/reference/class_rootfs_ipkg.xml8
-rw-r--r--recipes/acpid/acpid/event.c.diff43
-rw-r--r--recipes/acpid/acpid/fixfd.diff12
-rw-r--r--recipes/acpid/acpid/netlink.diff2797
-rw-r--r--recipes/acpid/acpid_1.0.8.bb6
-rw-r--r--recipes/boost/boost-36.inc24
-rw-r--r--recipes/cups/cups.inc10
-rw-r--r--recipes/cups/cups_1.1.23.bb2
-rw-r--r--recipes/cups/cups_1.2.12.bb2
-rw-r--r--recipes/cups/cups_1.2.7.bb2
-rw-r--r--recipes/cups/cups_1.3.8.bb2
-rw-r--r--recipes/device-mapper/device-mapper-1.02.28/devmap-mknod-busybox.patch9
-rw-r--r--recipes/device-mapper/device-mapper-1.02.28/remove_insanity.patch42
-rw-r--r--recipes/device-mapper/device-mapper_1.01.05.bb4
-rw-r--r--recipes/device-mapper/device-mapper_1.02.28.bb37
-rw-r--r--recipes/devicekit/devicekit-disks_004.bb18
-rw-r--r--recipes/devicekit/libatasmart_0.13.bb20
-rw-r--r--recipes/gnash/gnash-minimal.inc2
-rw-r--r--recipes/gnash/gnash.inc2
-rw-r--r--recipes/gnome/libgnomeprintui_2.18.3.bb3
-rw-r--r--recipes/gnumeric/gnumeric_1.8.2.bb31
-rw-r--r--recipes/gnumeric/gnumeric_1.8.4.bb (renamed from recipes/gnumeric/gnumeric_1.8.3.bb)2
-rw-r--r--recipes/grub/grub-0.93/autohell.patch166
-rw-r--r--recipes/grub/grub-0.93/memcpy.patch13
-rw-r--r--recipes/grub/grub-0.93/reiserfs.patch11
-rw-r--r--recipes/grub/grub_0.93.bb15
-rw-r--r--recipes/grub/grub_0.97.bb36
-rw-r--r--recipes/gstreamer/gst-plugins-ugly-sid_0.10.7.bb8
-rw-r--r--recipes/gstreamer/gst-plugins-ugly_0.10.10.bb8
-rw-r--r--recipes/gtk-engines/gtk-engines_2.18.1.bb30
-rw-r--r--recipes/gtksourceview/gtksourceview2_2.6.0.bb18
-rw-r--r--recipes/hal/hal-cups-utils_0.6.19.bb23
-rw-r--r--recipes/initrdscripts/files/init.sh6
-rw-r--r--recipes/initrdscripts/initramfs-uniboot_1.0.bb2
-rw-r--r--recipes/linphone/linphone_1.3.99.8.bb2
-rw-r--r--recipes/mtools/files/no-x11.patch19
-rw-r--r--recipes/mtools/files/plainio.patch13
-rw-r--r--recipes/mtools/files/use-sg_io.patch80
-rw-r--r--recipes/mtools/mtools-native_4.0.10.bb (renamed from recipes/mtools/mtools-native_3.9.11.bb)0
-rw-r--r--recipes/mtools/mtools_4.0.10.bb (renamed from recipes/mtools/mtools_3.9.11.bb)7
-rw-r--r--recipes/ppp/ppp_2.4.3.bb3
-rw-r--r--recipes/python/python-pycups_1.9.45.bb16
-rw-r--r--recipes/qemu/qemu-0.10.3/06_exit_segfault.patch45
-rw-r--r--recipes/qemu/qemu-0.10.3/11_signal_sigaction.patch21
-rw-r--r--recipes/qemu/qemu-0.10.3/22_net_tuntap_stall.patch13
-rw-r--r--recipes/qemu/qemu-0.10.3/31_syscalls.patch22
-rw-r--r--recipes/qemu/qemu-0.10.3/32_syscall_sysctl.patch55
-rw-r--r--recipes/qemu/qemu-0.10.3/52_ne2000_return.patch17
-rw-r--r--recipes/qemu/qemu-0.10.3/61_safe_64bit_int.patch27
-rw-r--r--recipes/qemu/qemu-0.10.3/63_sparc_build.patch18
-rw-r--r--recipes/qemu/qemu-0.10.3/64_ppc_asm_constraints.patch18
-rw-r--r--recipes/qemu/qemu-0.10.3/66_tls_ld.patch55
-rw-r--r--recipes/qemu/qemu-0.10.3/91-oh-sdl-cursor.patch18
-rw-r--r--recipes/qemu/qemu-0.10.3/fix_baum_c_compilation.patch30
-rw-r--r--recipes/qemu/qemu-0.10.3/fix_segfault.patch37
-rw-r--r--recipes/qemu/qemu-0.10.3/no-strip.patch26
-rw-r--r--recipes/qemu/qemu_0.10.3.bb17
-rw-r--r--recipes/rt2x00/rt61-firmware_1.2.bb2
-rw-r--r--recipes/system-config-printer/system-config-printer_1.1.7.bb22
-rw-r--r--recipes/udev/udev_141.bb6
-rw-r--r--recipes/xorg-driver/xf86-video-geode_2.11.2.bb5
70 files changed, 3758 insertions, 342 deletions
diff --git a/classes/xfce.bbclass b/classes/xfce.bbclass
index 48e012e67e..b18313fa2a 100644
--- a/classes/xfce.bbclass
+++ b/classes/xfce.bbclass
@@ -5,7 +5,7 @@
# Global class to make it easier to maintain XFCE packages
HOMEPAGE = "http://www.xfce.org"
-LICENSE = "LGPL-2"
+LICENSE = "LGPLv2"
DEPENDS += "startup-notification"
XFCE_VERSION = ${PV}
diff --git a/conf/checksums.ini b/conf/checksums.ini
index ec6d883e74..2764372fc1 100644
--- a/conf/checksums.ini
+++ b/conf/checksums.ini
@@ -186,6 +186,10 @@ sha256=d392567cb39b4ea606c0e0acafd8ed72320311b995336ece5fcefcf9b150e9d7
md5=8b311547f4a2c8c6b6598e3318d66cd7
sha256=d2d21f995d1a152ca2d8beea6d37f31e48cca034b82ceb7322f39422e849e9cf
+[http://hal.freedesktop.org/releases/DeviceKit-disks-004.tar.gz]
+md5=1ed8e1931f56ad3fc53ba485391434b5
+sha256=e9cc2ed4db0f48a9fdb353f6774df585ac1bc3a0f7c77fcede1c1c27497882bd
+
[http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/Digest-SHA1-2.11.tar.gz]
md5=2449bfe21d6589c96eebf94dae24df6b
sha256=3cebe0a6894daee3bfa5d9619fc90e7619cb6a77ac1b04d027341cd6033ae989
@@ -1298,6 +1302,10 @@ sha256=aa3c42224ec702b6cdb69ca6501284cb6dacb87473a076d7337ee9635c96f160
md5=5c9b705700df51d232be223b6ab6414d
sha256=aa3c42224ec702b6cdb69ca6501284cb6dacb87473a076d7337ee9635c96f160
+[http://downloads.sourceforge.net/acpid/acpid-1.0.8.tar.gz]
+md5=1d9c52fe2c0b51f8463f357c2a3d3ddb
+sha256=d57ae5302c38c37d060a097fa51600fe06fbfffd575641d638407944f126b7b1
+
[http://ftp.gnu.org/gnu/classpathx/activation-1.1.1.tar.gz]
md5=de50d7728e8140eb404f2b4554321f8c
sha256=b1b5ef560d30fcb11fbf537246857d14110ce4eb2b200d4c54690472305d87b7
@@ -4562,6 +4570,10 @@ sha256=49c8303f58abf3a0efbbd42decdc5968688df32c154cffb20a1c3c1ae8b92048
md5=074cf116cc2c7194f2d100bc5f743833
sha256=963cc8a1f7e73a0929b7b527f6b4cfc5f78c932d673b5c13c889108d3182811a
+[ftp://sources.redhat.com/pub/dm/device-mapper.1.02.28.tgz]
+md5=c9ae0776994a419f9e1ba842164bb626
+sha256=24c7887fe896325a6cdc86b8beeb0d9c2de8b1c4cb20f53c2dc8f90963fc39bf
+
[https://stage.maemo.org/svn/maemo/projects/haf/trunk/fontconfig/device_symbols.h]
md5=c0124afc760d4fe8c24ffcf15ba7f391
sha256=4e0c1726f9c565deec6d6af9eebda47ca6dea473f3280cc89beb321ae33ff962
@@ -6122,6 +6134,10 @@ sha256=9635a44bceb478bbf2ee8a785cf6986fba525afb5fad1fd4bba73cf71f2d3edf
md5=8845d4536fcd3a329690c93bce9bbf8e
sha256=c7345faf10b269b3556f2e1373c4afc35f08891f8bbd54e45d49151a8c8e4ac0
+[http://fpdownload.macromedia.com/get/flashplayer/current//flash-plugin-10.0.22.87-release.i386.rpm]
+md5=a3bb1f9a8e2b1238ffaf89193e60be02
+sha256=ec5ace49df7cfe69b7c02c8d1b6df8089f32076a390b931051feed2a9762d554
+
[http://downloads.sourceforge.net/flex/flex-2.5.31.tar.bz2]
md5=363dcc4afc917dc51306eb9d3de0152f
sha256=701353279a17655d78e3b3678ad78d0375f5bf45877ad8b3507d589c42427f26
@@ -8374,6 +8390,10 @@ sha256=8418ed3a2e8dad923a6626d22eaffe796aab9cbcf827a17ab95bf99956e22a6d
md5=3ce6ba6483ccd6fe9974cface582337a
sha256=173df749482f7391e50a6eb8339107b2b201582978637c63190c4a79f8e66d07
+[http://ftp.gnome.org/pub/GNOME/sources/gnumeric/1.8/gnumeric-1.8.4.tar.bz2]
+md5=338f0084f04a16f78797ad01f85d3251
+sha256=a3c7fdbbafa6c9cfee7f16c067b043c3041cd0240292aa92b653a2221ae04503
+
[ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-1.4.2.2.tar.bz2]
md5=c34736eb7cb687f9e5b6d4df48aaf7c8
sha256=174e7f78c670d76984c4c4bd6077a0b9fec7b4be700b9f3e40c6889b78110c57
@@ -9882,6 +9902,10 @@ sha256=15aa3a926307b4b3e40f3a9b05c604df6811eb48814b1534db32aed414aefb0c
md5=060ea25c471e5f4cf5c1baeac27d0345
sha256=0d8b6630c546327ddc67c700859731036eebdf77e51ad8b71e4d19d28ca2ff2c
+[http://ftp.gnome.org/pub/GNOME/sources/gtk-engines/2.18/gtk-engines-2.18.1.tar.bz2]
+md5=5dc748cfb0587bb412adc49b666fb6f8
+sha256=d7e2672fcf80f5c35d481c24e0ab5b7d0f6526dcc3d8821ab76468c1816dc3bc
+
[http://ftp.gnome.org/pub/GNOME/sources/gtk-engines/2.2/gtk-engines-2.2.0.tar.bz2]
md5=78e9276c28b509f3203de4873c20a263
sha256=140541cae8b003d2f7210e2ef060ac328d7e45a04e2cf5fa943fff73c9955dd6
@@ -10006,6 +10030,10 @@ sha256=c1c2e1fb0168ecb3a5e773ac0cd74a0e5caeaaf402f108479337794dab8aa75f
md5=a56ea78c74fe93a604357d7c555af0e5
sha256=38c238ec57bf22023bbc50f70ecbaee8c06b817b9e11f1a3a0ae7faf95cc1f26
+[http://ftp.gnome.org/pub/GNOME/sources/gtksourceview/2.6/gtksourceview-2.6.0.tar.bz2]
+md5=dd065ab2e96e51aade949249c5556439
+sha256=92ddd976721e26377eaa59fea07707a0caa85eb874500868c1e6fdd9a21fe0dd
+
[http://downloads.sourceforge.net/gtkterm/gtkterm2-0.2.3.tar.gz]
md5=a49f93d15909dbd2e7011428ae01f0f0
sha256=fb68b18d752ae2379f144186b94743be991af1a42c88bc1e6f0685e45cb1d573
@@ -10158,6 +10186,10 @@ sha256=65d8f8eeb61e7609a8c5001b6660d90e7a482c4b74b4e226d09b433dc1a80c9d
md5=a6f532770cf9286e1de38d6570cbc6bc
sha256=65d8f8eeb61e7609a8c5001b6660d90e7a482c4b74b4e226d09b433dc1a80c9d
+[https://fedorahosted.org/releases/h/a/hal-cups-utils/hal-cups-utils-0.6.19.tar.gz]
+md5=58e1c8f5597dd39e57dcf3c4aabe60f8
+sha256=f40a7ebd1453d471a8a6bfd8c635708dd739a6160bb661813f936d936ba85618
+
[http://hal.freedesktop.org/releases/hal-info-20070618.tar.gz]
md5=c7005ccb1765d8359fd2348350770495
sha256=bec1b0ad166b6c4d5269e7aa6d7bdbd0eb05c8f2c30042e4dca18993ba5682f0
@@ -11330,6 +11362,10 @@ sha256=f24ae604a20da87e3716bb1d441c483e56479eaef4e99888f41be06059790bca
md5=4e979c0dda766ba1dd719905ca975c7b
sha256=202de62e2f3d0667cc464720d5897d0ccb29767ec24e0a4d4c5bd6c4d37425a4
+[http://download.java.net/dlj/binaries/jdk-6u10-dlj-linux-i586.bin]
+md5=b70924c697584ab7955050d7a9b4de57
+sha256=dae79e8c56090ac3fb4ac3fe0df9faf6a0c9694a89ef978dce0ab970557ad264
+
[http://www.jdom.org/dist/binary/jdom-1.1.tar.gz]
md5=22745cbaaddb12884ed8ee09083d8fe2
sha256=a13549087141be24ad176b659afdc2c675f1ffa5288ff999a193d6d44a282056
@@ -16882,6 +16918,10 @@ sha256=af083a73425d664d4607ef6c6564fd9319a0e47ee7c105259a45356cb834690e
md5=3e68b857b4e1f3a6521d1dfefbd30a36
sha256=af083a73425d664d4607ef6c6564fd9319a0e47ee7c105259a45356cb834690e
+[http://ftp.gnu.org/gnu/mtools/mtools-4.0.10.tar.bz2]
+md5=750c2beba968a5d46dbaae24551a82b9
+sha256=860fee13acb39365bd28763070e24011ea55f381f96714d2841937525aa02ded
+
[http://downloads.sourceforge.net/mtpaint/mtpaint-3.02.tar.bz2]
md5=828013176f135fc24ffdf16a011c51e6
sha256=991a1376dc23d0663d45b3b395c0e5c5542fee3906a120889583d67f854f5206
@@ -19342,6 +19382,10 @@ sha256=6bca237485a352362133792e000a3c8e367a26b0312c5c607db7c2a97717d15f
md5=2e81938855cf5cc38856bd4a31d79a4c
sha256=a13c81897c94b3d6e705fc9da07c610492e28cf7abd5ff8e992f0ec95a269d62
+[http://releases.mozilla.org/pub/mozilla.org/firefox/releases/3.0.4/linux-i686/xpi/pt-BR.xpi]
+md5=29c672886aa9ca41428ba04196938545
+sha256=1474828a58f893bed20f0e0cd26bc310c7472d69bf7a1ae01c00a371de256b1a
+
[ftp://ftp.ossp.org/pkg/lib/pth/pth-2.0.0.tar.gz]
md5=f84a87295fef3b41499f3b728b1f0050
sha256=1935a06368c1555d5f80329ba1e53f5b1a7dd9efb7fc9354427f2d1a583c81a3
@@ -19690,6 +19734,10 @@ sha256=a6d7db68c87699e283a1f58b637a7e730c350899fd7b35b88e63caa0e85a9ab9
md5=4d5674f3898a573691ffb335e8d749cd
sha256=b08d4ed54c9403c77778a3803e53a4f33f359b42d94f6f3e14abb1bf4941e6ea
+[http://cyberelk.net/tim/data/pycups/pycups-1.9.45.tar.bz2]
+md5=ff634a6751f8a859ed26751bf03abef0
+sha256=ef6e576e5465da9c338ac8ff9f162825cfb7997359efc52e6a110c295a9f363b
+
[http://pycurl.sourceforge.net/download/pycurl-7.14.0.tar.gz]
md5=6f73d518fb520af14634a06ee1b7ddce
sha256=a60e08b01fc3355ec18ec0e447349b6f8bff3f9628eb42891cff1eb51b9618b1
@@ -22354,6 +22402,10 @@ sha256=26c05ef7666881eb1d60291a4293e67d75dbf048ca8a30f6b9eb3dc86ad1b6b0
md5=d7b8f27b83ff080ff824177d65a7dae0
sha256=0a63da1c99b6a9b6a93b6fd0a9391c7d8216f658d2bea0ba81999e261c6b6649
+[http://cyberelk.net/tim/data/system-config-printer/1.1/system-config-printer-1.1.7.tar.bz2]
+md5=a77bde5adc5ee8822b0764ff786ccc09
+sha256=fdd50cb114151c66b8180c0ce90ba0e99f77a69770ac21598a87be935eec2224
+
[ftp://ftp.cistron.nl/pub/people/miquels/sysvinit/sysvinit-2.86.tar.gz]
md5=7d5d61c026122ab791ac04c8a84db967
sha256=035f98fae17d9cff002993c564ccc83dc4ed136127172caeff872b6abdb679d8
diff --git a/conf/distro/include/preferred-om-2008-versions.inc b/conf/distro/include/preferred-om-2008-versions.inc
index 8c5c4f7cb0..65676ec969 100644
--- a/conf/distro/include/preferred-om-2008-versions.inc
+++ b/conf/distro/include/preferred-om-2008-versions.inc
@@ -503,7 +503,7 @@ PREFERRED_VERSION_gnome-vfs ?= "2.22.0"
PREFERRED_VERSION_gnome-vfs-extras ?= "0.99.13"
PREFERRED_VERSION_gnome-vfs-obexftp ?= "0.4"
PREFERRED_VERSION_gnuchess ?= "5.05"
-PREFERRED_VERSION_gnumeric ?= "1.6.3"
+PREFERRED_VERSION_gnumeric ?= "1.8.4"
PREFERRED_VERSION_gnupg ?= "1.4.2.2"
PREFERRED_VERSION_gnuplot ?= "4.2.2"
PREFERRED_VERSION_gnuradio ?= "3.0.4"
diff --git a/conf/distro/include/preferred-xorg-versions-X11R7.4-updates.inc b/conf/distro/include/preferred-xorg-versions-X11R7.4-updates.inc
index 1f6076525f..6e42065aed 100644
--- a/conf/distro/include/preferred-xorg-versions-X11R7.4-updates.inc
+++ b/conf/distro/include/preferred-xorg-versions-X11R7.4-updates.inc
@@ -2,6 +2,6 @@
PREFERRED_VERSION_xserver-xorg ?= "1.5.3"
PREFERRED_VERSION_xf86-input-evdev ?= "2.1.0"
-PREFERRED_VERSION_xf86-video-geode ?= "2.11.0"
+PREFERRED_VERSION_xf86-video-geode ?= "2.11.2"
PREFERRED_VERSION_libxi ?= "1.2.0"
PREFERRED_VERSION_inputproto ?= "1.5.0"
diff --git a/conf/licenses.conf b/conf/licenses.conf
index 01c4747167..c0676275fa 100644
--- a/conf/licenses.conf
+++ b/conf/licenses.conf
@@ -1,6 +1,5 @@
SRC_DISTRIBUTE_LICENSES += "GPL GPLv2 GPLv3 LGPL LGPLv2.1 LGPLv3"
-SRC_DISTRIBUTE_LICENSES += "BSD Apache-2.0 QPL AFL"
+SRC_DISTRIBUTE_LICENSES += "BSD Apache-2.0 QPL AFL CUPS"
SRC_DISTRIBUTE_LICENSES += "MIT Sleepycat Classpath Perl PSF PD Artistic"
SRC_DISTRIBUTE_LICENSES += "bzip2 zlib ntp cron libpng netperf openssl"
SRC_DISTRIBUTE_LICENSES += "Info-ZIP tcp-wrappers"
-
diff --git a/conf/machine/geodegx.conf b/conf/machine/geodegx.conf
index 6fe6a830e6..0ec6782076 100644
--- a/conf/machine/geodegx.conf
+++ b/conf/machine/geodegx.conf
@@ -4,7 +4,7 @@
TARGET_ARCH = "i486"
-require conf/machine/include/tune-geodegx.inc
+require conf/machine/include/tune-geode.inc
PREFERRED_PROVIDER_virtual/kernel = "linux-geodegx"
BOOTSTRAP_EXTRA_RDEPENDS = "kernel pciutils udev kernel-modules"
@@ -14,4 +14,4 @@ udevdir = "/dev"
KERNEL_IMAGETYPE = "bzImage"
GLIBC_ADDONS = "nptl"
-GLIBC_EXTRA_OECONF = "--with-tls"
+GLIBC_EXTRA_OECONF = "--with-tls --with-cpu=geode"
diff --git a/conf/machine/geodelx.conf b/conf/machine/geodelx.conf
index de4d9ca16e..f8874fd966 100644
--- a/conf/machine/geodelx.conf
+++ b/conf/machine/geodelx.conf
@@ -1,14 +1,15 @@
-TARGET_ARCH = "i486"
+# Machine file for devices with the AMD Geode LX processor
+# Copyright (C) 2005, Advanced Micro Devices, Inc. All Rights Reserved
+# Released under the MIT license (see packages/COPYING)
-require conf/machine/include/tune-geodelx.inc
+TARGET_ARCH = "i486"
-PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}depmod:module-init-tools-cross"
+require conf/machine/include/tune-geode.inc
-PREFERRED_PROVIDER_virtual/kernel="linux-geodelx"
-
-SELECTED_OPTIMIZATION_glibc := "${@'${SELECTED_OPTIMIZATION}'.replace('-fomit-frame-pointer', '')}"
+PREFERRED_PROVIDER_virtual/kernel = "linux-geodelx"
KERNEL_IMAGETYPE = "bzImage"
GLIBC_ADDONS = "nptl"
-GLIBC_EXTRA_OECONF = "--with-tls"
+GLIBC_EXTRA_OECONF = "--with-tls --with-cpu=geode"
+SELECTED_OPTIMIZATION_pn-glibc := "${@'${SELECTED_OPTIMIZATION}'.replace('-fomit-frame-pointer', '')}"
diff --git a/conf/machine/include/tune-geodegx.inc b/conf/machine/include/tune-geode.inc
index cae285a91c..eda332a74e 100644
--- a/conf/machine/include/tune-geodegx.inc
+++ b/conf/machine/include/tune-geode.inc
@@ -1,6 +1,5 @@
-TARGET_CC_ARCH = "-march=geode"
+TARGET_CC_ARCH = "-march=geode -mtune=geode"
BASE_PACKAGE_ARCH = "geode"
PACKAGE_EXTRA_ARCHS += "x86 i386 geode"
FEED_ARCH = "geode"
-
diff --git a/conf/machine/include/tune-geodelx.inc b/conf/machine/include/tune-geodelx.inc
deleted file mode 100644
index 63e6678947..0000000000
--- a/conf/machine/include/tune-geodelx.inc
+++ /dev/null
@@ -1,9 +0,0 @@
-# Geode CPU has it's own target in GCC 4.3
-# in older versions k6-2 is closest
-#
-TARGET_CC_ARCH = "-march=geode"
-BASE_PACKAGE_ARCH = "geode"
-PACKAGE_EXTRA_ARCHS += "x86 i386 geode"
-
-FEED_ARCH = "geode"
-
diff --git a/docs/usermanual/reference/class_rootfs_ipkg.xml b/docs/usermanual/reference/class_rootfs_ipkg.xml
index b60adf8e70..fde8a38c03 100644
--- a/docs/usermanual/reference/class_rootfs_ipkg.xml
+++ b/docs/usermanual/reference/class_rootfs_ipkg.xml
@@ -41,7 +41,7 @@
<listitem>
<para>Installs the list of requested <command>.ipkg</command> packages,
- <command>${IPKG_INSTALL}</command>;</para>
+ <command>${PACKAGE_INSTALL}</command>;</para>
</listitem>
<listitem>
@@ -89,7 +89,7 @@
<variablelist>
<varlistentry>
- <term>IPKG_INSTALL</term>
+ <term>PACKAGE_INSTALL</term>
<listitem>
<para>The list of packages which will be installed into the root
@@ -114,7 +114,7 @@
</varlistentry>
<varlistentry>
- <term>PACKAGE_ARCH</term>
+ <term>PACKAGE_ARCHS</term>
<listitem>
<para>Defines the list of architectures that are support by the target
@@ -212,4 +212,4 @@
which is executed without <xref linkend="fakeroot" /> and therefore can be
used from other classes, such as <xref linkend="image_class" />, that
are already running under the control of <xref linkend="fakeroot" />.</para>
-</section> \ No newline at end of file
+</section>
diff --git a/recipes/acpid/acpid/event.c.diff b/recipes/acpid/acpid/event.c.diff
new file mode 100644
index 0000000000..4ef3bafd6b
--- /dev/null
+++ b/recipes/acpid/acpid/event.c.diff
@@ -0,0 +1,43 @@
+--- acpid-1.0.8.orig/event.c
++++ acpid-1.0.8/event.c
+@@ -23,6 +23,7 @@
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <sys/wait.h>
++#include <libgen.h>
+ #include <fcntl.h>
+ #include <unistd.h>
+ #include <stdio.h>
+@@ -90,6 +91,8 @@
+ struct dirent *dirent;
+ char *file = NULL;
+ int nrules = 0;
++ char *basen = NULL;
++ regex_t preg;
+
+ lock_rules();
+
+@@ -139,10 +142,19 @@
+ continue; /* skip non-regular files */
+ }
+
+- r = parse_file(file);
+- if (r) {
+- enlist_rule(&cmd_list, r);
+- nrules++;
++ /* check for run-parts style filename */
++ basen = basename(file);
++ if (regcomp(&preg, "^[a-zA-Z0-9_-]+$", RULE_REGEX_FLAGS) == 0){
++ if (regexec(&preg, basen, 0, NULL, 0) == 0){
++ r = parse_file(file);
++ if (r) {
++ enlist_rule(&cmd_list, r);
++ nrules++;
++ }
++ } else {
++ acpid_log(LOG_DEBUG, "ignoring conf file %s\n", file);
++ }
++
+ }
+ free(file);
+ }
diff --git a/recipes/acpid/acpid/fixfd.diff b/recipes/acpid/acpid/fixfd.diff
new file mode 100644
index 0000000000..93ceb5cfea
--- /dev/null
+++ b/recipes/acpid/acpid/fixfd.diff
@@ -0,0 +1,12 @@
+diff -Nru a/acpid.c b/acpid.c
+--- a/acpid.c 2008-11-03 14:04:43.000000000 +0100
++++ b/acpid.c 2008-12-19 18:38:14.291127677 +0100
+@@ -456,7 +456,7 @@
+ int log_opts;
+
+ /* open /dev/null */
+- nullfd = open("/dev/null", O_RDONLY);
++ nullfd = open("/dev/null", O_RDWR);
+ if (nullfd < 0) {
+ fprintf(stderr, "%s: can't open %s: %s\n", progname,
+ "/dev/null", strerror(errno));
diff --git a/recipes/acpid/acpid/netlink.diff b/recipes/acpid/acpid/netlink.diff
new file mode 100644
index 0000000000..5dbbedd5a3
--- /dev/null
+++ b/recipes/acpid/acpid/netlink.diff
@@ -0,0 +1,2797 @@
+diff -ruN acpid-1.0.8.orig/acpid.8 acpid-1.0.8/acpid.8
+--- acpid-1.0.8.orig/acpid.8 2008-11-03 14:04:43.000000000 +0100
++++ acpid-1.0.8/acpid.8 2009-03-29 17:10:14.000000000 +0200
+@@ -10,11 +10,13 @@
+ \fBacpid\fP is designed to notify user-space programs of ACPI events.
+ \fBacpid\fP should be started during the system boot, and will run as a
+ background process, by default. It will open an events file
+-(\fI/proc/acpi/event\fP by default) and attempt to read whole lines. When
+-a line is received (an \fIevent\fP), \fBacpid\fP will examine a list of rules,
+-and execute the rules that match the event.
+-\fBacpid\fP will ignore all incoming ACPI events if a lock file exists
+-(\fI/var/lock/acpid\fP by default).
++(\fI/proc/acpi/event\fP by default) and attempt to read whole lines which
++represent ACPI events. If the events file does not exist, \fBacpid\fP will
++attempt to connect to the Linux kernel via the input layer and netlink. When an
++ACPI event is received from one of these sources, \fBacpid\fP will examine a
++list of rules, and execute the rules that match the event. \fBacpid\fP will
++ignore all incoming ACPI events if a lock file exists (\fI/var/lock/acpid\fP by
++default).
+ .PP
+ \fIRules\fP are defined by simple configuration files. \fBacpid\fP
+ will look in a configuration directory (\fI/etc/acpi/events\fP by default),
+@@ -69,6 +71,9 @@
+ This option changes the event file from which \fBacpid\fP reads events.
+ Default is \fI/proc/acpi/event\fP.
+ .TP
++.BI \-n "\fR, \fP" \--netlink
++This option forces \fBacpid\fP to use the Linux kernel input layer and netlink interface for ACPI events.
++.TP
+ .BI \-f "\fR, \fP" \--foreground
+ This option keeps \fBacpid\fP in the foreground by not forking at startup.
+ .TP
+@@ -122,6 +127,8 @@
+ .PD 0
+ .B /proc/acpi/event
+ .br
++.B /dev/input/event*
++.br
+ .B /etc/acpi/
+ .br
+ .B /var/run/acpid.socket
+diff -ruN acpid-1.0.8.orig/acpid.c acpid-1.0.8/acpid.c
+--- acpid-1.0.8.orig/acpid.c 2008-11-03 14:04:43.000000000 +0100
++++ acpid-1.0.8/acpid.c 2009-03-29 17:10:14.000000000 +0200
+@@ -20,23 +20,23 @@
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+-#include <sys/types.h>
+-#include <sys/stat.h>
++#include <unistd.h>
+ #include <fcntl.h>
+ #include <signal.h>
+-#include <unistd.h>
++#include <string.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+-#include <string.h>
+ #include <errno.h>
+ #include <getopt.h>
+-#include <time.h>
+-#include <sys/poll.h>
+-#include <grp.h>
+-#include <syslog.h>
++#include <stdarg.h>
+
+ #include "acpid.h"
+-#include "ud_socket.h"
++#include "event.h"
++#include "connection_list.h"
++#include "proc.h"
++#include "sock.h"
++#include "input_layer.h"
++#include "netlink.h"
+
+ static int handle_cmdline(int *argc, char ***argv);
+ static void close_fds(void);
+@@ -45,7 +45,6 @@
+ static int create_pidfile(void);
+ static void clean_exit(int sig);
+ static void reload_conf(int sig);
+-static char *read_line(int fd);
+
+ /* global debug level */
+ int acpid_debug;
+@@ -53,23 +52,18 @@
+ /* do we log event info? */
+ int logevents;
+
+-static const char *progname;
+-static const char *confdir = ACPID_CONFDIR;
+-static const char *eventfile = ACPID_EVENTFILE;
+-static const char *socketfile = ACPID_SOCKETFILE;
++const char *progname;
++
+ static const char *lockfile = ACPID_LOCKFILE;
++static const char *confdir = ACPID_CONFDIR;
+ static int nosocket;
+-static const char *socketgroup;
+-static mode_t socketmode = ACPID_SOCKETMODE;
+ static int foreground;
+ static const char *pidfile = ACPID_PIDFILE;
++static int netlink;
+
+ int
+ main(int argc, char **argv)
+ {
+- int event_fd;
+- int sock_fd = -1; /* init to avoid a compiler warning */
+-
+ /* learn who we really are */
+ progname = (const char *)strrchr(argv[0], '/');
+ progname = progname ? (progname + 1) : argv[0];
+@@ -80,14 +74,22 @@
+ /* close any extra file descriptors */
+ close_fds();
+
+- /* actually open the event file */
+- event_fd = open(eventfile, O_RDONLY);
+- if (event_fd < 0) {
+- fprintf(stderr, "%s: can't open %s: %s\n", progname,
+- eventfile, strerror(errno));
+- exit(EXIT_FAILURE);
++ if (!netlink)
++ {
++ /* open the acpi event file in the proc fs */
++ /* if the open fails, try netlink */
++ if (open_proc())
++ netlink = 1;
++ }
++
++ if (netlink)
++ {
++ /* open the input layer */
++ open_input();
++
++ /* open netlink */
++ open_netlink();
+ }
+- fcntl(event_fd, F_SETFD, FD_CLOEXEC);
+
+ /*
+ * if there is data, and the kernel is NOT broken, this eats 1 byte. We
+@@ -124,34 +126,7 @@
+
+ /* open our socket */
+ if (!nosocket) {
+- sock_fd = ud_create_socket(socketfile);
+- if (sock_fd < 0) {
+- fprintf(stderr, "%s: can't open socket %s: %s\n",
+- progname, socketfile, strerror(errno));
+- exit(EXIT_FAILURE);
+- }
+- fcntl(sock_fd, F_SETFD, FD_CLOEXEC);
+- chmod(socketfile, socketmode);
+- if (socketgroup) {
+- struct group *gr;
+- struct stat buf;
+- gr = getgrnam(socketgroup);
+- if (!gr) {
+- fprintf(stderr, "%s: group %s does not exist\n",
+- progname, socketgroup);
+- exit(EXIT_FAILURE);
+- }
+- if (stat(socketfile, &buf) < 0) {
+- fprintf(stderr, "%s: can't stat %s\n",
+- progname, socketfile);
+- exit(EXIT_FAILURE);
+- }
+- if (chown(socketfile, buf.st_uid, gr->gr_gid) < 0) {
+- fprintf(stderr, "%s: chown(): %s\n",
+- progname, strerror(errno));
+- exit(EXIT_FAILURE);
+- }
+- }
++ open_sock();
+ }
+
+ /* if we're running in foreground, we don't daemonize */
+@@ -164,7 +139,8 @@
+ if (open_log() < 0) {
+ exit(EXIT_FAILURE);
+ }
+- acpid_log(LOG_INFO, "starting up\n");
++ acpid_log(LOG_INFO, "starting up with %s\n",
++ netlink ? "netlink and the input layer" : "proc fs");
+
+ /* trap key signals */
+ signal(SIGHUP, reload_conf);
+@@ -183,109 +159,50 @@
+ exit(EXIT_FAILURE);
+ }
+
+- /* main loop */
+ acpid_log(LOG_INFO, "waiting for events: event logging is %s\n",
+ logevents ? "on" : "off");
+- while (1) {
+- struct pollfd ar[2];
+- int r;
+- int fds = 0;
+-
+- /* poll for the socket and the event file */
+- ar[0].fd = event_fd; ar[0].events = POLLIN; fds++;
+- if (!nosocket) {
+- ar[1].fd = sock_fd; ar[1].events = POLLIN; fds++;
+- }
+- r = poll(ar, fds, -1);
+
+- if (r < 0 && errno == EINTR) {
++ /* main loop */
++ while (1)
++ {
++ fd_set readfds;
++ int nready;
++ int i;
++ struct connection *p;
++
++ /* it's going to get clobbered, so use a copy */
++ readfds = *get_fdset();
++
++ /* wait on data */
++ nready = select(get_highestfd() + 1, &readfds, NULL, NULL, NULL);
++
++ if (nready < 0 && errno == EINTR) {
+ continue;
+- } else if (r < 0) {
+- acpid_log(LOG_ERR, "poll(): %s\n", strerror(errno));
++ } else if (nready < 0) {
++ acpid_log(LOG_ERR, "select(): %s\n", strerror(errno));
+ continue;
+ }
+
+- /* was it an event? */
+- if (ar[0].revents) {
+- char *event;
+- struct stat trash;
+- int fexists;
+-
+- /* check for existence of a lockfile */
+- fexists = (stat(lockfile, &trash) == 0);
+-
+- /* this shouldn't happen */
+- if (!ar[0].revents & POLLIN) {
+- acpid_log(LOG_DEBUG,
+- "odd, poll set flags 0x%x\n",
+- ar[0].revents);
+- continue;
+- }
++ /* for each connection */
++ for (i = 0; i <= get_number_of_connections(); ++i)
++ {
++ int fd;
+
+- /* read an event */
+- event = read_line(event_fd);
++ p = get_connection(i);
+
+- /* if we're locked, don't process the event */
+- if (fexists) {
+- if (logevents) {
+- acpid_log(LOG_INFO,
+- "lockfile present, not processing "
+- "event \"%s\"\n", event);
+- }
+- continue;
+- }
+-
+- /* handle the event */
+- if (event) {
+- if (logevents) {
+- acpid_log(LOG_INFO,
+- "received event \"%s\"\n", event);
+- }
+- acpid_handle_event(event);
+- if (logevents) {
+- acpid_log(LOG_INFO,
+- "completed event \"%s\"\n", event);
+- }
+- } else if (errno == EPIPE) {
+- acpid_log(LOG_WARNING,
+- "events file connection closed\n");
++ /* if this connection is invalid, bail */
++ if (!p)
+ break;
+- } else {
+- static int nerrs;
+- if (++nerrs >= ACPID_MAX_ERRS) {
+- acpid_log(LOG_ERR,
+- "too many errors reading "
+- "events file - aborting\n");
+- break;
+- }
+- }
+- }
+
+- /* was it a new connection? */
+- if (!nosocket && ar[1].revents) {
+- int cli_fd;
+- struct ucred creds;
+- char buf[32];
+-
+- /* this shouldn't happen */
+- if (!ar[1].revents & POLLIN) {
+- acpid_log(LOG_DEBUG,
+- "odd, poll set flags 0x%x\n",
+- ar[1].revents);
+- continue;
+- }
++ /* get the file descriptor */
++ fd = p->fd;
+
+- /* accept and add to our lists */
+- cli_fd = ud_accept(sock_fd, &creds);
+- if (cli_fd < 0) {
+- acpid_log(LOG_ERR, "can't accept client: %s\n",
+- strerror(errno));
+- continue;
++ /* if this file descriptor has data waiting */
++ if (FD_ISSET(fd, &readfds))
++ {
++ /* delegate to this connection's process function */
++ p->process(fd);
+ }
+- fcntl(cli_fd, F_SETFD, FD_CLOEXEC);
+- snprintf(buf, sizeof(buf)-1, "%d[%d:%d]",
+- creds.pid, creds.uid, creds.gid);
+- acpid_add_client(cli_fd, buf);
+ }
+ }
+
+@@ -312,6 +229,7 @@
+ {"nosocket", 1, 0, 'S'},
+ {"pidfile", 1, 0, 'p'},
+ {"lockfile", 1, 0, 'L'},
++ {"netlink", 0, 0, 'n'},
+ {"version", 0, 0, 'v'},
+ {"help", 0, 0, 'h'},
+ {NULL, 0, 0, 0},
+@@ -327,7 +245,8 @@
+ "Use the specified socket file.", /* socketfile */
+ "Do not listen on a UNIX socket (overrides -s).",/* nosocket */
+ "Use the specified PID file.", /* pidfile */
+- "Use the specified lockfile to stop processing.", /* pidfile */
++ "Use the specified lockfile to stop processing.", /* lockfile */
++ "Force netlink/input layer mode. (overrides -e)", /* netlink */
+ "Print version information.", /* version */
+ "Print this message.", /* help */
+ };
+@@ -338,7 +257,7 @@
+ for (;;) {
+ int i;
+ i = getopt_long(*argc, *argv,
+- "c:de:flg:m:s:Sp:L:vh", opts, NULL);
++ "c:de:flg:m:s:Sp:L:nvh", opts, NULL);
+ if (i == -1) {
+ break;
+ }
+@@ -377,6 +296,9 @@
+ case 'L':
+ lockfile = optarg;
+ break;
++ case 'n':
++ netlink = 1;
++ break;
+ case 'v':
+ printf(PACKAGE "-" VERSION "\n");
+ exit(EXIT_SUCCESS);
+@@ -550,54 +472,11 @@
+ return 0;
+ }
+
+-/*
+- * This depends on fixes in linux ACPI after 2.4.8
+- */
+-#define MAX_BUFLEN 1024
+-static char *
+-read_line(int fd)
++int
++locked()
+ {
+- static char *buf;
+- int buflen = 64;
+- int i = 0;
+- int r;
+- int searching = 1;
+-
+- while (searching) {
+- buf = realloc(buf, buflen);
+- if (!buf) {
+- acpid_log(LOG_ERR, "malloc(%d): %s\n",
+- buflen, strerror(errno));
+- return NULL;
+- }
+- memset(buf+i, 0, buflen-i);
+-
+- while (i < buflen) {
+- r = read(fd, buf+i, 1);
+- if (r < 0 && errno != EINTR) {
+- /* we should do something with the data */
+- acpid_log(LOG_ERR, "read(): %s\n",
+- strerror(errno));
+- return NULL;
+- } else if (r == 0) {
+- /* signal this in an almost standard way */
+- errno = EPIPE;
+- return NULL;
+- } else if (r == 1) {
+- /* scan for a newline */
+- if (buf[i] == '\n') {
+- searching = 0;
+- buf[i] = '\0';
+- break;
+- }
+- i++;
+- }
+- }
+- if (buflen >= MAX_BUFLEN) {
+- break;
+- }
+- buflen *= 2;
+- }
++ struct stat trash;
+
+- return buf;
++ /* check for existence of a lockfile */
++ return (stat(lockfile, &trash) == 0);
+ }
+diff -ruN acpid-1.0.8.orig/acpid.h acpid-1.0.8/acpid.h
+--- acpid-1.0.8.orig/acpid.h 2008-11-03 14:04:43.000000000 +0100
++++ acpid-1.0.8/acpid.h 2009-03-29 17:10:14.000000000 +0200
+@@ -23,11 +23,7 @@
+ #ifndef ACPID_H__
+ #define ACPID_H__
+
+-#include <unistd.h>
+ #include <syslog.h>
+-#include <stdarg.h>
+-#include <sys/types.h>
+-#include <sys/stat.h>
+
+ #define ACPI_PROCDIR "/proc/acpi"
+ #define ACPID_EVENTFILE ACPI_PROCDIR "/event"
+@@ -40,19 +36,12 @@
+
+ #define PACKAGE "acpid"
+
+-/*
+- * acpid.c
+- */
+ extern int acpid_debug;
+ extern int logevents;
++extern const char *progname;
++
+ extern int acpid_log(int level, const char *fmt, ...);
+
+-/*
+- * event.c
+- */
+-extern int acpid_read_conf(const char *confdir);
+-extern int acpid_add_client(int client, const char *origin);
+-extern int acpid_cleanup_rules(int do_detach);
+-extern int acpid_handle_event(const char *event);
++extern int locked();
+
+ #endif /* ACPID_H__ */
+diff -ruN acpid-1.0.8.orig/acpi_genetlink.h acpid-1.0.8/acpi_genetlink.h
+--- acpid-1.0.8.orig/acpi_genetlink.h 1970-01-01 01:00:00.000000000 +0100
++++ acpid-1.0.8/acpi_genetlink.h 2009-03-29 17:10:14.000000000 +0200
+@@ -0,0 +1,33 @@
++#ifndef __ACPI_GENETLINK_H__
++#define __ACPI_GENETLINK_H__ 1
++
++#include <linux/types.h>
++
++struct acpi_genl_event {
++ char device_class[20];
++ char bus_id[15];
++ __u32 type;
++ __u32 data;
++};
++
++/* attributes of acpi_genl_family */
++enum {
++ ACPI_GENL_ATTR_UNSPEC,
++ ACPI_GENL_ATTR_EVENT, /* ACPI event info needed by user space */
++ __ACPI_GENL_ATTR_MAX,
++};
++#define ACPI_GENL_ATTR_MAX (__ACPI_GENL_ATTR_MAX - 1)
++
++/* commands supported by the acpi_genl_family */
++enum {
++ ACPI_GENL_CMD_UNSPEC,
++ ACPI_GENL_CMD_EVENT, /* kernel->user notifications for ACPI events */ __ACPI_GENL_CMD_MAX,
++};
++#define ACPI_GENL_CMD_MAX (__ACPI_GENL_CMD_MAX - 1)
++#define GENL_MAX_FAM_OPS 256
++#define GENL_MAX_FAM_GRPS 256
++
++#define ACPI_EVENT_FAMILY_NAME "acpi_event"
++#define ACPI_EVENT_MCAST_GROUP_NAME "acpi_mc_group"
++
++#endif
+diff -ruN acpid-1.0.8.orig/acpi_ids.c acpid-1.0.8/acpi_ids.c
+--- acpid-1.0.8.orig/acpi_ids.c 1970-01-01 01:00:00.000000000 +0100
++++ acpid-1.0.8/acpi_ids.c 2009-03-29 17:10:14.000000000 +0200
+@@ -0,0 +1,254 @@
++/*
++ * acpi_ids.c - ACPI Netlink Group and Family IDs
++ *
++ * Copyright (C) 2008 Ted Felix (www.tedfelix.com)
++ * Portions from acpi_genl Copyright (C) Zhang Rui <rui.zhang@intel.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#include <stdio.h>
++/* needed by netlink.h, should be in there */
++#include <arpa/inet.h>
++#include <linux/types.h>
++#include <string.h>
++
++#include "genetlink.h"
++#include "libnetlink.h"
++
++#include "acpid.h"
++
++#define GENL_MAX_FAM_GRPS 256
++#define ACPI_EVENT_FAMILY_NAME "acpi_event"
++#define ACPI_EVENT_MCAST_GROUP_NAME "acpi_mc_group"
++
++static int initialized = 0;
++static __u16 acpi_event_family_id = 0;
++static __u32 acpi_event_mcast_group_id = 0;
++
++/*
++ * A CTRL_CMD_GETFAMILY message returns an attribute table that looks
++ * like this:
++ *
++ * CTRL_ATTR_FAMILY_ID Use this to make sure we get the proper msgs
++ * CTRL_ATTR_MCAST_GROUPS
++ * CTRL_ATTR_MCAST_GRP_NAME
++ * CTRL_ATTR_MCAST_GRP_ID Need this for the group mask
++ * ...
++ */
++
++static int
++get_ctrl_grp_id(struct rtattr *arg)
++{
++ struct rtattr *tb[CTRL_ATTR_MCAST_GRP_MAX + 1];
++ char *name;
++
++ if (arg == NULL)
++ return -1;
++
++ /* nested within the CTRL_ATTR_MCAST_GROUPS attribute are the */
++ /* group name and ID */
++ parse_rtattr_nested(tb, CTRL_ATTR_MCAST_GRP_MAX, arg);
++
++ /* if either of the entries needed cannot be found, bail */
++ if (!tb[CTRL_ATTR_MCAST_GRP_NAME] || !tb[CTRL_ATTR_MCAST_GRP_ID])
++ return -1;
++
++ /* get the name of this multicast group we've found */
++ name = RTA_DATA(tb[CTRL_ATTR_MCAST_GRP_NAME]);
++
++ /* if it does not match the ACPI event multicast group name, bail */
++ if (strcmp(name, ACPI_EVENT_MCAST_GROUP_NAME))
++ return -1;
++
++ /* At this point, we've found what we were looking for. We now */
++ /* have the multicast group ID for ACPI events over generic netlink. */
++ acpi_event_mcast_group_id =
++ *((__u32 *)RTA_DATA(tb[CTRL_ATTR_MCAST_GRP_ID]));
++
++ return 0;
++}
++
++/* n = the response to a CTRL_CMD_GETFAMILY message */
++static int
++genl_get_mcast_group_id(struct nlmsghdr *n)
++{
++ /*
++ * Attribute table. Note the type name "rtattr" which means "route
++ * attribute". This is a vestige of one of netlink's main uses:
++ * routing.
++ */
++ struct rtattr *tb[CTRL_ATTR_MAX + 1];
++ /* pointer to the generic netlink header in the incoming message */
++ struct genlmsghdr *ghdr = NLMSG_DATA(n);
++ /* length of the attribute and payload */
++ int len = n->nlmsg_len - NLMSG_LENGTH(GENL_HDRLEN);
++ /* Pointer to the attribute portion of the message */
++ struct rtattr *attrs;
++
++ if (len < 0) {
++ fprintf(stderr, "%s: netlink CTRL_CMD_GETFAMILY response, "
++ "wrong controller message len: %d\n", progname, len);
++ return -1;
++ }
++
++ if (n->nlmsg_type != GENL_ID_CTRL) {
++ fprintf(stderr, "%s: not a netlink controller message, "
++ "nlmsg_len=%d nlmsg_type=0x%x\n",
++ progname, n->nlmsg_len, n->nlmsg_type);
++ return 0;
++ }
++
++ if (ghdr->cmd != CTRL_CMD_GETFAMILY &&
++ ghdr->cmd != CTRL_CMD_DELFAMILY &&
++ ghdr->cmd != CTRL_CMD_NEWFAMILY &&
++ ghdr->cmd != CTRL_CMD_NEWMCAST_GRP &&
++ ghdr->cmd != CTRL_CMD_DELMCAST_GRP) {
++ fprintf(stderr, "%s: unknown netlink controller command %d\n",
++ progname, ghdr->cmd);
++ return 0;
++ }
++
++ /* set attrs to point to the attribute */
++ attrs = (struct rtattr *)((char *)ghdr + GENL_HDRLEN);
++ /* Read the table from the message into "tb". This actually just */
++ /* places pointers into the message into tb[]. */
++ parse_rtattr(tb, CTRL_ATTR_MAX, attrs, len);
++
++ /* if a family ID attribute is present, get it */
++ if (tb[CTRL_ATTR_FAMILY_ID])
++ {
++ acpi_event_family_id =
++ *((__u32 *)RTA_DATA(tb[CTRL_ATTR_FAMILY_ID]));
++ }
++
++ /* if a "multicast groups" attribute is present... */
++ if (tb[CTRL_ATTR_MCAST_GROUPS]) {
++ struct rtattr *tb2[GENL_MAX_FAM_GRPS + 1];
++ int i;
++
++ /* get the group table within this attribute */
++ parse_rtattr_nested(tb2, GENL_MAX_FAM_GRPS,
++ tb[CTRL_ATTR_MCAST_GROUPS]);
++
++ /* for each group */
++ for (i = 0; i < GENL_MAX_FAM_GRPS; i++)
++ /* if this group is valid */
++ if (tb2[i])
++ /* Parse the ID. If successful, we're done. */
++ if (!get_ctrl_grp_id(tb2[i]))
++ return 0;
++ }
++
++ return -1;
++}
++
++static int
++genl_get_ids(char *family_name)
++{
++ /* handle to the netlink connection */
++ struct rtnl_handle rth;
++ /* holds the request we are going to send and the reply */
++ struct {
++ struct nlmsghdr n;
++ char buf[4096]; /* ??? Is this big enough for all cases? */
++ } req;
++ /* pointer to the nlmsghdr in req */
++ struct nlmsghdr *nlh;
++ /* pointer to the generic netlink header in req */
++ struct genlmsghdr *ghdr;
++ /* return value */
++ int ret = -1;
++
++ /* clear out the request */
++ memset(&req, 0, sizeof(req));
++
++ /* set up nlh to point to the netlink header in req */
++ nlh = &req.n;
++ /* set up the netlink header */
++ nlh->nlmsg_len = NLMSG_LENGTH(GENL_HDRLEN);
++ nlh->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK;
++ nlh->nlmsg_type = GENL_ID_CTRL;
++
++ /* set up ghdr to point to the generic netlink header */
++ ghdr = NLMSG_DATA(&req.n);
++ /* set the command we want to run: "GETFAMILY" */
++ ghdr->cmd = CTRL_CMD_GETFAMILY;
++
++ /* the message payload is the family name */
++ addattr_l(nlh, 128, CTRL_ATTR_FAMILY_NAME,
++ family_name, strlen(family_name) + 1);
++
++ /* open a generic netlink connection */
++ if (rtnl_open_byproto(&rth, 0, NETLINK_GENERIC) < 0) {
++ fprintf(stderr, "%s: cannot open generic netlink socket\n",
++ progname);
++ return -1;
++ }
++
++ /*
++ * Send CTRL_CMD_GETFAMILY message (in nlh) to the generic
++ * netlink controller. Reply will be in nlh upon return.
++ */
++ if (rtnl_talk(&rth, nlh, 0, 0, nlh, NULL, NULL) < 0) {
++ fprintf(stderr, "%s: error talking to the kernel via netlink\n",
++ progname);
++ goto ctrl_done;
++ }
++
++ /* process the response */
++ if (genl_get_mcast_group_id(nlh) < 0) {
++ fprintf(stderr, "%s: failed to get acpi_event netlink "
++ "multicast group\n", progname);
++ goto ctrl_done;
++ }
++
++ ret = 0;
++
++ctrl_done:
++ rtnl_close(&rth);
++ return ret;
++}
++
++/* initialize the ACPI IDs */
++static void
++acpi_ids_init()
++{
++ genl_get_ids(ACPI_EVENT_FAMILY_NAME);
++
++ initialized = 1;
++}
++
++/* returns the netlink family ID for ACPI event messages */
++__u16
++acpi_ids_getfamily()
++{
++ /* if the IDs haven't been initialized, initialize them */
++ if (initialized == 0)
++ acpi_ids_init();
++
++ return acpi_event_family_id;
++}
++
++/* returns the netlink multicast group ID for ACPI event messages */
++__u32
++acpi_ids_getgroup()
++{
++ /* if the IDs haven't been initialized, initialize them */
++ if (initialized == 0)
++ acpi_ids_init();
++
++ return acpi_event_mcast_group_id;
++}
+diff -ruN acpid-1.0.8.orig/acpi_ids.h acpid-1.0.8/acpi_ids.h
+--- acpid-1.0.8.orig/acpi_ids.h 1970-01-01 01:00:00.000000000 +0100
++++ acpid-1.0.8/acpi_ids.h 2009-03-29 17:10:14.000000000 +0200
+@@ -0,0 +1,30 @@
++/*
++ * acpi_ids.h - ACPI Netlink Group and Family IDs
++ *
++ * Copyright (C) 2008 Ted Felix (www.tedfelix.com)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#ifndef ACPI_IDS_H__
++#define ACPI_IDS_H__
++
++/* returns the netlink family ID for ACPI event messages */
++extern __u16 acpi_ids_getfamily();
++
++/* returns the netlink multicast group ID for ACPI event messages */
++extern __u32 acpi_ids_getgroup();
++
++#endif /* ACPI_IDS_H__ */
+diff -ruN acpid-1.0.8.orig/acpi_listen.c acpid-1.0.8/acpi_listen.c
+--- acpid-1.0.8.orig/acpi_listen.c 2008-11-03 14:04:43.000000000 +0100
++++ acpid-1.0.8/acpi_listen.c 2009-03-29 17:10:14.000000000 +0200
+@@ -42,8 +42,8 @@
+ static int handle_cmdline(int *argc, char ***argv);
+ static char *read_line(int fd);
+
+-static const char *progname;
+-static const char *socketfile = ACPID_SOCKETFILE;
++const char *progname;
++const char *socketfile = ACPID_SOCKETFILE;
+ static int max_events;
+
+ static void
+diff -ruN acpid-1.0.8.orig/connection_list.c acpid-1.0.8/connection_list.c
+--- acpid-1.0.8.orig/connection_list.c 1970-01-01 01:00:00.000000000 +0100
++++ acpid-1.0.8/connection_list.c 2009-03-29 17:10:14.000000000 +0200
+@@ -0,0 +1,124 @@
++/*
++ * connection_list.c - ACPI daemon connection list
++ *
++ * Copyright (C) 2008, Ted Felix (www.tedfelix.com)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ * Tabs at 4
++ */
++
++#include <unistd.h>
++#include <stdio.h>
++#include <sys/select.h>
++
++#include "acpid.h"
++
++#include "connection_list.h"
++
++#define max(a, b) (((a)>(b))?(a):(b))
++
++/*---------------------------------------------------------------*/
++/* private objects */
++
++#define MAX_CONNECTIONS 10
++
++static struct connection connection_list[MAX_CONNECTIONS];
++
++static int nconnections = 0;
++
++/* fd_set containing all the fd's that come in */
++static fd_set allfds;
++
++/* highest fd that is opened */
++/* (-2 + 1) causes select() to return immediately */
++static int highestfd = -2;
++
++/*---------------------------------------------------------------*/
++/* public functions */
++
++void
++add_connection(struct connection *p)
++{
++ if (nconnections < 0)
++ return;
++ if (nconnections >= MAX_CONNECTIONS) {
++ acpid_log(LOG_ERR, "Too many connections.\n");
++ return;
++ }
++
++ if (nconnections == 0)
++ FD_ZERO(&allfds);
++
++ /* add the connection to the connection list */
++ connection_list[nconnections] = *p;
++ ++nconnections;
++
++ /* add to the fd set */
++ FD_SET(p->fd, &allfds);
++ highestfd = max(highestfd, p->fd);
++}
++
++/*---------------------------------------------------------------*/
++
++struct connection *
++find_connection(int fd)
++{
++ int i;
++
++ /* for each connection */
++ for (i = 0; i < nconnections; ++i) {
++ /* if the file descriptors match, return the connection */
++ if (connection_list[i].fd == fd)
++ return &connection_list[i];
++ }
++
++ return NULL;
++}
++
++/*---------------------------------------------------------------*/
++
++int
++get_number_of_connections()
++{
++ return nconnections;
++}
++
++/*---------------------------------------------------------------*/
++
++struct connection *
++get_connection(int i)
++{
++ if (i < 0 || i >= nconnections)
++ return NULL;
++
++ return &connection_list[i];
++}
++
++/*---------------------------------------------------------------*/
++
++const fd_set *
++get_fdset()
++{
++ return &allfds;
++}
++
++/*---------------------------------------------------------------*/
++
++int
++get_highestfd()
++{
++ return highestfd;
++}
+diff -ruN acpid-1.0.8.orig/connection_list.h acpid-1.0.8/connection_list.h
+--- acpid-1.0.8.orig/connection_list.h 1970-01-01 01:00:00.000000000 +0100
++++ acpid-1.0.8/connection_list.h 2009-03-29 17:10:14.000000000 +0200
+@@ -0,0 +1,59 @@
++/*
++ * connection_list.h - ACPI daemon connection list
++ *
++ * Copyright (C) 2008, Ted Felix (www.tedfelix.com)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ * Tabs at 4
++ */
++
++#ifndef CONNECTION_LIST_H__
++#define CONNECTION_LIST_H__
++
++#include <sys/select.h>
++
++/*****************************************************************
++ * Connection List Public Members
++ *****************************************************************/
++
++struct connection
++{
++ /* file descriptor */
++ int fd;
++
++ /* process incoming data on the connection */
++ void (* process)(int fd);
++};
++
++/* add a connection to the list */
++extern void add_connection(struct connection *p);
++
++/* find a connection in the list by file descriptor */
++extern struct connection *find_connection(int fd);
++
++/* get the number of connections in the list */
++extern int get_number_of_connections();
++
++/* get a specific connection by index from the list */
++extern struct connection *get_connection(int i);
++
++/* get an fd_set with all the fd's that have been added to the list */
++extern const fd_set *get_fdset();
++
++/* get the highest fd that was added to the list */
++extern int get_highestfd();
++
++#endif /* CONNECTION_LIST_H__ */
+diff -ruN acpid-1.0.8.orig/event.c acpid-1.0.8/event.c
+--- acpid-1.0.8.orig/event.c 2008-11-03 14:04:43.000000000 +0100
++++ acpid-1.0.8/event.c 2009-03-29 17:10:14.000000000 +0200
+@@ -1,5 +1,5 @@
+ /*
+- * event.c - ACPI daemon
++ * event.c - ACPI daemon event handler
+ *
+ * Copyright (C) 2000 Andrew Henroid
+ * Copyright (C) 2001 Sun Microsystems (thockin@sun.com)
+diff -ruN acpid-1.0.8.orig/event.h acpid-1.0.8/event.h
+--- acpid-1.0.8.orig/event.h 1970-01-01 01:00:00.000000000 +0100
++++ acpid-1.0.8/event.h 2009-03-29 17:10:14.000000000 +0200
+@@ -0,0 +1,31 @@
++/*
++ * event.h - ACPI daemon event handler
++ *
++ * Copyright (C) 1999-2000 Andrew Henroid
++ * Copyright (C) 2001 Sun Microsystems
++ * Portions Copyright (C) 2004 Tim Hockin (thockin@hockin.org)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#ifndef EVENT_H__
++#define EVENT_H__
++
++extern int acpid_read_conf(const char *confdir);
++extern int acpid_add_client(int client, const char *origin);
++extern int acpid_cleanup_rules(int do_detach);
++extern int acpid_handle_event(const char *event);
++
++#endif /* EVENT_H__ */
+diff -ruN acpid-1.0.8.orig/genetlink.h acpid-1.0.8/genetlink.h
+--- acpid-1.0.8.orig/genetlink.h 1970-01-01 01:00:00.000000000 +0100
++++ acpid-1.0.8/genetlink.h 2009-03-29 17:10:14.000000000 +0200
+@@ -0,0 +1,81 @@
++#ifndef __LINUX_GENERIC_NETLINK_H
++#define __LINUX_GENERIC_NETLINK_H
++
++#include <linux/netlink.h>
++
++#define GENL_NAMSIZ 16 /* length of family name */
++
++#define GENL_MIN_ID NLMSG_MIN_TYPE
++#define GENL_MAX_ID 1023
++
++struct genlmsghdr {
++ __u8 cmd;
++ __u8 version;
++ __u16 reserved;
++};
++
++#define GENL_HDRLEN NLMSG_ALIGN(sizeof(struct genlmsghdr))
++
++#define GENL_ADMIN_PERM 0x01
++#define GENL_CMD_CAP_DO 0x02
++#define GENL_CMD_CAP_DUMP 0x04
++#define GENL_CMD_CAP_HASPOL 0x08
++
++/*
++ * List of reserved static generic netlink identifiers:
++ */
++#define GENL_ID_GENERATE 0
++#define GENL_ID_CTRL NLMSG_MIN_TYPE
++
++/**************************************************************************
++ * Controller
++ **************************************************************************/
++
++enum {
++ CTRL_CMD_UNSPEC,
++ CTRL_CMD_NEWFAMILY,
++ CTRL_CMD_DELFAMILY,
++ CTRL_CMD_GETFAMILY,
++ CTRL_CMD_NEWOPS,
++ CTRL_CMD_DELOPS,
++ CTRL_CMD_GETOPS,
++ CTRL_CMD_NEWMCAST_GRP,
++ CTRL_CMD_DELMCAST_GRP,
++ CTRL_CMD_GETMCAST_GRP, /* unused */
++ __CTRL_CMD_MAX,
++};
++
++#define CTRL_CMD_MAX (__CTRL_CMD_MAX - 1)
++
++enum {
++ CTRL_ATTR_UNSPEC,
++ CTRL_ATTR_FAMILY_ID,
++ CTRL_ATTR_FAMILY_NAME,
++ CTRL_ATTR_VERSION,
++ CTRL_ATTR_HDRSIZE,
++ CTRL_ATTR_MAXATTR,
++ CTRL_ATTR_OPS,
++ CTRL_ATTR_MCAST_GROUPS,
++ __CTRL_ATTR_MAX,
++};
++
++#define CTRL_ATTR_MAX (__CTRL_ATTR_MAX - 1)
++
++enum {
++ CTRL_ATTR_OP_UNSPEC,
++ CTRL_ATTR_OP_ID,
++ CTRL_ATTR_OP_FLAGS,
++ __CTRL_ATTR_OP_MAX,
++};
++
++#define CTRL_ATTR_OP_MAX (__CTRL_ATTR_OP_MAX - 1)
++
++enum {
++ CTRL_ATTR_MCAST_GRP_UNSPEC,
++ CTRL_ATTR_MCAST_GRP_NAME,
++ CTRL_ATTR_MCAST_GRP_ID,
++ __CTRL_ATTR_MCAST_GRP_MAX,
++};
++#define CTRL_ATTR_MCAST_GRP_MAX (__CTRL_ATTR_MCAST_GRP_MAX - 1)
++
++#endif /* __LINUX_GENERIC_NETLINK_H */
+diff -ruN acpid-1.0.8.orig/input_layer.c acpid-1.0.8/input_layer.c
+--- acpid-1.0.8.orig/input_layer.c 1970-01-01 01:00:00.000000000 +0100
++++ acpid-1.0.8/input_layer.c 2009-03-29 17:11:58.000000000 +0200
+@@ -0,0 +1,262 @@
++/*
++ * input_layer - Kernel ACPI Event Input Layer Interface
++ *
++ * Handles the details of getting kernel ACPI events from the input
++ * layer (/dev/input/event*).
++ *
++ * Inspired by (and in some cases blatantly lifted from) Vojtech Pavlik's
++ * evtest.c.
++ *
++ * Copyright (C) 2008, Ted Felix (www.tedfelix.com)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ * (tabs at 4)
++ */
++
++/* system */
++#include <unistd.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <fcntl.h>
++#include <linux/input.h>
++#include <string.h>
++#include <errno.h>
++#include <malloc.h>
++#include <glob.h>
++
++/* local */
++#include "acpid.h"
++#include "connection_list.h"
++#include "event.h"
++
++#define DIM(a) (sizeof(a) / sizeof(a[0]))
++
++struct evtab_entry {
++ struct input_event event;
++ const char *str;
++};
++
++/* event table: events we are interested in and their strings */
++/* use evtest.c or acpi_genl to find new events to add to this table */
++static struct evtab_entry evtab[] = {
++ {{{0,0}, EV_KEY, KEY_POWER, 1}, "button/power PBTN 00000080 00000000"},
++ {{{0,0}, EV_KEY, KEY_SLEEP, 1}, "button/sleep SBTN 00000080 00000000"},
++ {{{0,0}, EV_KEY, KEY_SUSPEND, 1},
++ "button/suspend SUSP 00000080 00000000"},
++ {{{0,0}, EV_SW, SW_LID, 1}, "button/lid LID close"},
++ {{{0,0}, EV_SW, SW_LID, 0}, "button/lid LID open"}
++};
++
++/*----------------------------------------------------------------------*/
++/* Given an input event, returns the string corresponding to that event.
++ If there is no corresponding string, NULL is returned. */
++static const char *
++event_string(struct input_event event)
++{
++ unsigned i;
++
++ /* for each entry in the event table */
++ for (i = 0; i < DIM(evtab); ++i)
++ {
++ /* if this is a matching event, return its string */
++ if (event.type == evtab[i].event.type &&
++ event.code == evtab[i].event.code &&
++ event.value == evtab[i].event.value) {
++ return evtab[i].str;
++ }
++ }
++
++ return NULL;
++}
++
++/*-----------------------------------------------------------------*/
++/* returns non-zero if the event type/code is one we need */
++static int
++need_event(int type, int code)
++{
++ unsigned i;
++
++ /* for each entry in the event table */
++ for (i = 0; i < DIM(evtab); ++i) {
++ /* if we found a matching event */
++ if (type == evtab[i].event.type &&
++ code == evtab[i].event.code) {
++ return 1;
++ }
++ }
++
++ return 0;
++}
++
++/*-----------------------------------------------------------------*/
++/* called when an input layer event is received */
++void process_input(int fd)
++{
++ struct input_event event;
++ ssize_t nbytes;
++ const char *str;
++ static int nerrs;
++
++ nbytes = read(fd, &event, sizeof(event));
++
++ if (nbytes == 0) {
++ acpid_log(LOG_WARNING, "input layer connection closed\n");
++ exit(EXIT_FAILURE);
++ }
++
++ if (nbytes < 0) {
++ /* if it's a signal, bail */
++ if (errno == EINTR)
++ return;
++
++ acpid_log(LOG_ERR, "input layer read error: %s (%d)\n",
++ strerror(errno), errno);
++ if (++nerrs >= ACPID_MAX_ERRS) {
++ acpid_log(LOG_ERR,
++ "too many errors reading "
++ "input layer - aborting\n");
++ exit(EXIT_FAILURE);
++ }
++ return;
++ }
++
++ /* ??? Is it possible for a partial message to come across? */
++ /* If so, we've got more code to write... */
++
++ if (nbytes != sizeof(event)) {
++ acpid_log(LOG_WARNING, "input layer unexpected length: "
++ "%d expected: %d\n", nbytes, sizeof(event));
++ return;
++ }
++
++ /* convert the event into a string */
++ str = event_string(event);
++ /* if this is not an event we care about, bail */
++ if (str == NULL)
++ return;
++
++ /* if we're locked, don't process the event */
++ if (locked()) {
++ if (logevents) {
++ acpid_log(LOG_INFO,
++ "lockfile present, not processing "
++ "input layer event \"%s\"\n", str);
++ }
++ return;
++ }
++
++ if (logevents)
++ acpid_log(LOG_INFO,
++ "received input layer event \"%s\"\n", str);
++
++ /* send the event off to the handler */
++ acpid_handle_event(str);
++
++ if (logevents)
++ acpid_log(LOG_INFO,
++ "completed input layer event \"%s\"\n", str);
++}
++
++#define BITS_PER_LONG (sizeof(long) * 8)
++#define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1)
++#define OFF(x) ((x)%BITS_PER_LONG)
++#define LONG(x) ((x)/BITS_PER_LONG)
++#define test_bit(bit, array) ((array[LONG(bit)] >> OFF(bit)) & 1)
++
++/*--------------------------------------------------------------------*/
++/* returns non-zero if the file descriptor supports one of the events */
++/* supported by event_string(). */
++static int
++has_event(int fd)
++{
++ int type, code;
++ unsigned long bit[EV_MAX][NBITS(KEY_MAX)];
++
++ memset(bit, 0, sizeof(bit));
++ /* get the event type bitmap */
++ ioctl(fd, EVIOCGBIT(0, sizeof(bit[0])), bit[0]);
++
++ /* for each event type */
++ for (type = 0; type < EV_MAX; type++) {
++ /* if this event type is supported */
++ if (test_bit(type, bit[0])) {
++ /* skip sync */
++ if (type == EV_SYN) continue;
++ /* get the event code mask */
++ ioctl(fd, EVIOCGBIT(type, sizeof(bit[type])), bit[type]);
++ /* for each event code */
++ for (code = 0; code < KEY_MAX; code++) {
++ /* if this event code is supported */
++ if (test_bit(code, bit[type])) {
++ /* if we need this event */
++ if (need_event(type, code) != 0)
++ return 1;
++ }
++ }
++ }
++ }
++ return 0;
++}
++
++/* ??? make this changeable by commandline option */
++#define INPUT_LAYER_FS "/dev/input/event*"
++
++/*-----------------------------------------------------------------*
++ * open each of the appropriate /dev/input/event* files for input */
++void open_input(void)
++{
++ char *filename = NULL;
++ glob_t globbuf;
++ unsigned i;
++ int fd;
++ int success = 0;
++ struct connection c;
++
++ /* get all the matching event filenames */
++ glob(INPUT_LAYER_FS, 0, NULL, &globbuf);
++
++ /* for each event file */
++ for (i = 0; i < globbuf.gl_pathc; ++i)
++ {
++ filename = globbuf.gl_pathv[i];
++
++ fd = open(filename, O_RDONLY | O_NONBLOCK);
++ if (fd >= 0) {
++ /* if this file doesn't have events we need, try the next */
++ if (!has_event(fd))
++ {
++ close(fd);
++ continue;
++ }
++
++ success = 1;
++
++ if (acpid_debug)
++ fprintf(stderr, "%s: input layer %s "
++ "opened successfully\n", progname, filename);
++
++ /* add a connection to the list */
++ c.fd = fd;
++ c.process = process_input;
++ add_connection(&c);
++ }
++ }
++
++ if (!success)
++ fprintf(stderr, "%s: cannot open input layer\n", progname);
++
++ globfree(&globbuf);
++}
+diff -ruN acpid-1.0.8.orig/input_layer.h acpid-1.0.8/input_layer.h
+--- acpid-1.0.8.orig/input_layer.h 1970-01-01 01:00:00.000000000 +0100
++++ acpid-1.0.8/input_layer.h 2009-03-29 17:10:14.000000000 +0200
+@@ -0,0 +1,32 @@
++/*
++ * input_layer.h - Kernel ACPI Event Input Layer Interface
++ *
++ * Handles the details of getting kernel ACPI events from the input
++ * layer (/dev/input/event*).
++ *
++ * Copyright (C) 2008, Ted Felix (www.tedfelix.com)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ * (tabs at 4)
++ */
++
++#ifndef INPUT_LAYER_H__
++#define INPUT_LAYER_H__
++
++/* Open each of the appropriate /dev/input/event* files for input. */
++extern void open_input(void);
++
++#endif /* INPUT_LAYER_H__ */
+diff -ruN acpid-1.0.8.orig/libnetlink.c acpid-1.0.8/libnetlink.c
+--- acpid-1.0.8.orig/libnetlink.c 1970-01-01 01:00:00.000000000 +0100
++++ acpid-1.0.8/libnetlink.c 2009-03-29 17:10:14.000000000 +0200
+@@ -0,0 +1,593 @@
++/*
++ * libnetlink.c RTnetlink service routines.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ *
++ * Authors: Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
++ *
++ * Modified by Ted Felix (www.tedfelix.com) to fix warnings.
++ *
++ */
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <unistd.h>
++#include <syslog.h>
++#include <fcntl.h>
++#include <net/if_arp.h>
++#include <sys/socket.h>
++#include <netinet/in.h>
++#include <string.h>
++#include <errno.h>
++#include <time.h>
++#include <sys/uio.h>
++
++#include "libnetlink.h"
++
++void rtnl_close(struct rtnl_handle *rth)
++{
++ if (rth->fd >= 0) {
++ close(rth->fd);
++ rth->fd = -1;
++ }
++}
++
++int rtnl_open_byproto(struct rtnl_handle *rth, unsigned subscriptions,
++ int protocol)
++{
++ socklen_t addr_len;
++ int sndbuf = 32768;
++ int rcvbuf = 32768;
++
++ memset(rth, 0, sizeof(rth));
++
++ rth->fd = socket(AF_NETLINK, SOCK_RAW, protocol);
++ if (rth->fd < 0) {
++ perror("Cannot open netlink socket");
++ return -1;
++ }
++
++ if (setsockopt(rth->fd,SOL_SOCKET,SO_SNDBUF,&sndbuf,sizeof(sndbuf)) < 0) {
++ perror("SO_SNDBUF");
++ return -1;
++ }
++
++ if (setsockopt(rth->fd,SOL_SOCKET,SO_RCVBUF,&rcvbuf,sizeof(rcvbuf)) < 0) {
++ perror("SO_RCVBUF");
++ return -1;
++ }
++
++ memset(&rth->local, 0, sizeof(rth->local));
++ rth->local.nl_family = AF_NETLINK;
++ rth->local.nl_groups = subscriptions;
++
++ if (bind(rth->fd, (struct sockaddr*)&rth->local, sizeof(rth->local)) < 0) {
++ perror("Cannot bind netlink socket");
++ return -1;
++ }
++ addr_len = sizeof(rth->local);
++ if (getsockname(rth->fd, (struct sockaddr*)&rth->local, &addr_len) < 0) {
++ perror("Cannot getsockname");
++ return -1;
++ }
++ if (addr_len != sizeof(rth->local)) {
++ fprintf(stderr, "Wrong address length %d\n", addr_len);
++ return -1;
++ }
++ if (rth->local.nl_family != AF_NETLINK) {
++ fprintf(stderr, "Wrong address family %d\n", rth->local.nl_family);
++ return -1;
++ }
++ rth->seq = time(NULL);
++ return 0;
++}
++
++int rtnl_open(struct rtnl_handle *rth, unsigned subscriptions)
++{
++ return rtnl_open_byproto(rth, subscriptions, NETLINK_ROUTE);
++}
++
++int rtnl_wilddump_request(struct rtnl_handle *rth, int family, int type)
++{
++ struct {
++ struct nlmsghdr nlh;
++ struct rtgenmsg g;
++ } req;
++ struct sockaddr_nl nladdr;
++
++ memset(&nladdr, 0, sizeof(nladdr));
++ nladdr.nl_family = AF_NETLINK;
++
++ memset(&req, 0, sizeof(req));
++ req.nlh.nlmsg_len = sizeof(req);
++ req.nlh.nlmsg_type = type;
++ req.nlh.nlmsg_flags = NLM_F_ROOT|NLM_F_MATCH|NLM_F_REQUEST;
++ req.nlh.nlmsg_pid = 0;
++ req.nlh.nlmsg_seq = rth->dump = ++rth->seq;
++ req.g.rtgen_family = family;
++
++ return sendto(rth->fd, (void*)&req, sizeof(req), 0,
++ (struct sockaddr*)&nladdr, sizeof(nladdr));
++}
++
++int rtnl_send(struct rtnl_handle *rth, const char *buf, int len)
++{
++ struct sockaddr_nl nladdr;
++
++ memset(&nladdr, 0, sizeof(nladdr));
++ nladdr.nl_family = AF_NETLINK;
++
++ return sendto(rth->fd, buf, len, 0, (struct sockaddr*)&nladdr, sizeof(nladdr));
++}
++
++int rtnl_dump_request(struct rtnl_handle *rth, int type, void *req, int len)
++{
++ struct nlmsghdr nlh;
++ struct sockaddr_nl nladdr;
++ struct iovec iov[2] = {
++ { .iov_base = &nlh, .iov_len = sizeof(nlh) },
++ { .iov_base = req, .iov_len = len }
++ };
++ struct msghdr msg = {
++ .msg_name = &nladdr,
++ .msg_namelen = sizeof(nladdr),
++ .msg_iov = iov,
++ .msg_iovlen = 2,
++ };
++
++ memset(&nladdr, 0, sizeof(nladdr));
++ nladdr.nl_family = AF_NETLINK;
++
++ nlh.nlmsg_len = NLMSG_LENGTH(len);
++ nlh.nlmsg_type = type;
++ nlh.nlmsg_flags = NLM_F_ROOT|NLM_F_MATCH|NLM_F_REQUEST;
++ nlh.nlmsg_pid = 0;
++ nlh.nlmsg_seq = rth->dump = ++rth->seq;
++
++ return sendmsg(rth->fd, &msg, 0);
++}
++
++int rtnl_dump_filter(struct rtnl_handle *rth,
++ rtnl_filter_t filter,
++ void *arg1,
++ rtnl_filter_t junk,
++ void *arg2)
++{
++ struct sockaddr_nl nladdr;
++ struct iovec iov;
++ struct msghdr msg = {
++ .msg_name = &nladdr,
++ .msg_namelen = sizeof(nladdr),
++ .msg_iov = &iov,
++ .msg_iovlen = 1,
++ };
++ char buf[16384];
++
++ iov.iov_base = buf;
++ while (1) {
++ int status;
++ struct nlmsghdr *h;
++
++ iov.iov_len = sizeof(buf);
++ status = recvmsg(rth->fd, &msg, 0);
++
++ if (status < 0) {
++ if (errno == EINTR)
++ continue;
++ perror("OVERRUN");
++ continue;
++ }
++
++ if (status == 0) {
++ fprintf(stderr, "EOF on netlink\n");
++ return -1;
++ }
++
++ h = (struct nlmsghdr*)buf;
++ while (NLMSG_OK(h, (unsigned)status)) {
++ int err;
++
++ if (nladdr.nl_pid != 0 ||
++ h->nlmsg_pid != rth->local.nl_pid ||
++ h->nlmsg_seq != rth->dump) {
++ if (junk) {
++ err = junk(&nladdr, h, arg2);
++ if (err < 0)
++ return err;
++ }
++ goto skip_it;
++ }
++
++ if (h->nlmsg_type == NLMSG_DONE)
++ return 0;
++ if (h->nlmsg_type == NLMSG_ERROR) {
++ struct nlmsgerr *msgerr = (struct nlmsgerr*)NLMSG_DATA(h);
++ if (h->nlmsg_len < NLMSG_LENGTH(sizeof(struct nlmsgerr))) {
++ fprintf(stderr, "ERROR truncated\n");
++ } else {
++ errno = -msgerr->error;
++ perror("RTNETLINK answers");
++ }
++ return -1;
++ }
++ err = filter(&nladdr, h, arg1);
++ if (err < 0)
++ return err;
++
++skip_it:
++ h = NLMSG_NEXT(h, status);
++ }
++ if (msg.msg_flags & MSG_TRUNC) {
++ fprintf(stderr, "Message truncated\n");
++ continue;
++ }
++ if (status) {
++ fprintf(stderr, "!!!Remnant of size %d\n", status);
++ exit(1);
++ }
++ }
++}
++
++int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n, pid_t peer,
++ unsigned groups, struct nlmsghdr *answer,
++ rtnl_filter_t junk,
++ void *jarg)
++{
++ int status;
++ unsigned seq;
++ struct nlmsghdr *h;
++ struct sockaddr_nl nladdr;
++ struct iovec iov = {
++ .iov_base = (void*) n,
++ .iov_len = n->nlmsg_len
++ };
++ struct msghdr msg = {
++ .msg_name = &nladdr,
++ .msg_namelen = sizeof(nladdr),
++ .msg_iov = &iov,
++ .msg_iovlen = 1,
++ };
++ char buf[16384];
++
++ memset(&nladdr, 0, sizeof(nladdr));
++ nladdr.nl_family = AF_NETLINK;
++ nladdr.nl_pid = peer;
++ nladdr.nl_groups = groups;
++
++ n->nlmsg_seq = seq = ++rtnl->seq;
++
++ if (answer == NULL)
++ n->nlmsg_flags |= NLM_F_ACK;
++
++ status = sendmsg(rtnl->fd, &msg, 0);
++
++ if (status < 0) {
++ perror("Cannot talk to rtnetlink");
++ return -1;
++ }
++
++ memset(buf,0,sizeof(buf));
++
++ iov.iov_base = buf;
++
++ while (1) {
++ iov.iov_len = sizeof(buf);
++ status = recvmsg(rtnl->fd, &msg, 0);
++
++ if (status < 0) {
++ if (errno == EINTR)
++ continue;
++ perror("OVERRUN");
++ continue;
++ }
++ if (status == 0) {
++ fprintf(stderr, "EOF on netlink\n");
++ return -1;
++ }
++ if (msg.msg_namelen != sizeof(nladdr)) {
++ fprintf(stderr, "sender address length == %d\n", msg.msg_namelen);
++ exit(1);
++ }
++ for (h = (struct nlmsghdr*)buf; (unsigned)status >= sizeof(*h); ) {
++ int err;
++ int len = h->nlmsg_len;
++ int l = len - sizeof(*h);
++
++ if (l<0 || len>status) {
++ if (msg.msg_flags & MSG_TRUNC) {
++ fprintf(stderr, "Truncated message\n");
++ return -1;
++ }
++ fprintf(stderr, "!!!malformed message: len=%d\n", len);
++ exit(1);
++ }
++
++ if (nladdr.nl_pid != (unsigned)peer ||
++ h->nlmsg_pid != rtnl->local.nl_pid ||
++ h->nlmsg_seq != seq) {
++ if (junk) {
++ err = junk(&nladdr, h, jarg);
++ if (err < 0)
++ return err;
++ }
++ /* Don't forget to skip that message. */
++ status -= NLMSG_ALIGN(len);
++ h = (struct nlmsghdr*)((char*)h + NLMSG_ALIGN(len));
++ continue;
++ }
++
++ if (h->nlmsg_type == NLMSG_ERROR) {
++ struct nlmsgerr *msgerr = (struct nlmsgerr*)NLMSG_DATA(h);
++ if ((unsigned)l < sizeof(struct nlmsgerr)) {
++ fprintf(stderr, "ERROR truncated\n");
++ } else {
++ errno = -msgerr->error;
++ if (errno == 0) {
++ if (answer)
++ memcpy(answer, h, h->nlmsg_len);
++ return 0;
++ }
++ perror("RTNETLINK1 answers");
++ }
++ return -1;
++ }
++ if (answer) {
++ memcpy(answer, h, h->nlmsg_len);
++ return 0;
++ }
++
++ fprintf(stderr, "Unexpected reply!!!\n");
++
++ status -= NLMSG_ALIGN(len);
++ h = (struct nlmsghdr*)((char*)h + NLMSG_ALIGN(len));
++ }
++ if (msg.msg_flags & MSG_TRUNC) {
++ fprintf(stderr, "Message truncated\n");
++ continue;
++ }
++ if (status) {
++ fprintf(stderr, "!!!Remnant of size %d\n", status);
++ exit(1);
++ }
++ }
++}
++
++int rtnl_listen(struct rtnl_handle *rtnl,
++ rtnl_filter_t handler,
++ void *jarg)
++{
++ int status;
++ struct nlmsghdr *h;
++ struct sockaddr_nl nladdr;
++ struct iovec iov;
++ struct msghdr msg = {
++ .msg_name = &nladdr,
++ .msg_namelen = sizeof(nladdr),
++ .msg_iov = &iov,
++ .msg_iovlen = 1,
++ };
++ char buf[8192];
++
++ memset(&nladdr, 0, sizeof(nladdr));
++ nladdr.nl_family = AF_NETLINK;
++ nladdr.nl_pid = 0;
++ nladdr.nl_groups = 0;
++
++ iov.iov_base = buf;
++ while (1) {
++ iov.iov_len = sizeof(buf);
++ status = recvmsg(rtnl->fd, &msg, 0);
++
++ if (status < 0) {
++ if (errno == EINTR)
++ continue;
++ perror("OVERRUN");
++ continue;
++ }
++ if (status == 0) {
++ fprintf(stderr, "EOF on netlink\n");
++ return -1;
++ }
++ if (msg.msg_namelen != sizeof(nladdr)) {
++ fprintf(stderr, "Sender address length == %d\n", msg.msg_namelen);
++ exit(1);
++ }
++ for (h = (struct nlmsghdr*)buf; (unsigned)status >= sizeof(*h); ) {
++ int err;
++ int len = h->nlmsg_len;
++ int l = len - sizeof(*h);
++
++ if (l<0 || len>status) {
++ if (msg.msg_flags & MSG_TRUNC) {
++ fprintf(stderr, "Truncated message\n");
++ return -1;
++ }
++ fprintf(stderr, "!!!malformed message: len=%d\n", len);
++ exit(1);
++ }
++
++ err = handler(&nladdr, h, jarg);
++ if (err < 0)
++ return err;
++
++ status -= NLMSG_ALIGN(len);
++ h = (struct nlmsghdr*)((char*)h + NLMSG_ALIGN(len));
++ }
++ if (msg.msg_flags & MSG_TRUNC) {
++ fprintf(stderr, "Message truncated\n");
++ continue;
++ }
++ if (status) {
++ fprintf(stderr, "!!!Remnant of size %d\n", status);
++ exit(1);
++ }
++ }
++}
++
++int rtnl_from_file(FILE *rtnl, rtnl_filter_t handler,
++ void *jarg)
++{
++ int status;
++ struct sockaddr_nl nladdr;
++ char buf[8192];
++ struct nlmsghdr *h = (void*)buf;
++
++ memset(&nladdr, 0, sizeof(nladdr));
++ nladdr.nl_family = AF_NETLINK;
++ nladdr.nl_pid = 0;
++ nladdr.nl_groups = 0;
++
++ while (1) {
++ int err, len, type;
++ int l;
++
++ status = fread(&buf, 1, sizeof(*h), rtnl);
++
++ if (status < 0) {
++ if (errno == EINTR)
++ continue;
++ perror("rtnl_from_file: fread");
++ return -1;
++ }
++ if (status == 0)
++ return 0;
++
++ len = h->nlmsg_len;
++ type= h->nlmsg_type;
++ l = len - sizeof(*h);
++
++ if (l<0 || (unsigned)len>sizeof(buf)) {
++ fprintf(stderr, "!!!malformed message: len=%d @%lu\n",
++ len, ftell(rtnl));
++ return -1;
++ }
++
++ status = fread(NLMSG_DATA(h), 1, NLMSG_ALIGN(l), rtnl);
++
++ if (status < 0) {
++ perror("rtnl_from_file: fread");
++ return -1;
++ }
++ if (status < l) {
++ fprintf(stderr, "rtnl-from_file: truncated message\n");
++ return -1;
++ }
++
++ err = handler(&nladdr, h, jarg);
++ if (err < 0)
++ return err;
++ }
++}
++
++int addattr32(struct nlmsghdr *n, int maxlen, int type, __u32 data)
++{
++ int len = RTA_LENGTH(4);
++ struct rtattr *rta;
++ if ((int)NLMSG_ALIGN(n->nlmsg_len) + len > maxlen) {
++ fprintf(stderr,"addattr32: Error! max allowed bound %d exceeded\n",maxlen);
++ return -1;
++ }
++ rta = NLMSG_TAIL(n);
++ rta->rta_type = type;
++ rta->rta_len = len;
++ memcpy(RTA_DATA(rta), &data, 4);
++ n->nlmsg_len = NLMSG_ALIGN(n->nlmsg_len) + len;
++ return 0;
++}
++
++int addattr_l(struct nlmsghdr *n, int maxlen, int type, const void *data,
++ int alen)
++{
++ int len = RTA_LENGTH(alen);
++ struct rtattr *rta;
++
++ if ((int)NLMSG_ALIGN(n->nlmsg_len) + RTA_ALIGN(len) > maxlen) {
++ fprintf(stderr, "addattr_l ERROR: message exceeded bound of %d\n",maxlen);
++ return -1;
++ }
++ rta = NLMSG_TAIL(n);
++ rta->rta_type = type;
++ rta->rta_len = len;
++ memcpy(RTA_DATA(rta), data, alen);
++ n->nlmsg_len = NLMSG_ALIGN(n->nlmsg_len) + RTA_ALIGN(len);
++ return 0;
++}
++
++int addraw_l(struct nlmsghdr *n, int maxlen, const void *data, int len)
++{
++ if ((int)NLMSG_ALIGN(n->nlmsg_len) + NLMSG_ALIGN(len) > maxlen) {
++ fprintf(stderr, "addraw_l ERROR: message exceeded bound of %d\n",maxlen);
++ return -1;
++ }
++
++ memcpy(NLMSG_TAIL(n), data, len);
++ memset((void *) NLMSG_TAIL(n) + len, 0, NLMSG_ALIGN(len) - len);
++ n->nlmsg_len = NLMSG_ALIGN(n->nlmsg_len) + NLMSG_ALIGN(len);
++ return 0;
++}
++
++int rta_addattr32(struct rtattr *rta, int maxlen, int type, __u32 data)
++{
++ int len = RTA_LENGTH(4);
++ struct rtattr *subrta;
++
++ if (RTA_ALIGN(rta->rta_len) + len > maxlen) {
++ fprintf(stderr,"rta_addattr32: Error! max allowed bound %d exceeded\n",maxlen);
++ return -1;
++ }
++ subrta = (struct rtattr*)(((char*)rta) + RTA_ALIGN(rta->rta_len));
++ subrta->rta_type = type;
++ subrta->rta_len = len;
++ memcpy(RTA_DATA(subrta), &data, 4);
++ rta->rta_len = NLMSG_ALIGN(rta->rta_len) + len;
++ return 0;
++}
++
++int rta_addattr_l(struct rtattr *rta, int maxlen, int type,
++ const void *data, int alen)
++{
++ struct rtattr *subrta;
++ int len = RTA_LENGTH(alen);
++
++ if (RTA_ALIGN(rta->rta_len) + RTA_ALIGN(len) > maxlen) {
++ fprintf(stderr,"rta_addattr_l: Error! max allowed bound %d exceeded\n",maxlen);
++ return -1;
++ }
++ subrta = (struct rtattr*)(((char*)rta) + RTA_ALIGN(rta->rta_len));
++ subrta->rta_type = type;
++ subrta->rta_len = len;
++ memcpy(RTA_DATA(subrta), data, alen);
++ rta->rta_len = NLMSG_ALIGN(rta->rta_len) + RTA_ALIGN(len);
++ return 0;
++}
++
++int parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int len)
++{
++ memset(tb, 0, sizeof(struct rtattr *) * (max + 1));
++ while (RTA_OK(rta, len)) {
++ if (rta->rta_type <= max)
++ tb[rta->rta_type] = rta;
++ rta = RTA_NEXT(rta,len);
++ }
++ if (len)
++ fprintf(stderr, "!!!Deficit %d, rta_len=%d\n", len, rta->rta_len);
++ return 0;
++}
++
++int parse_rtattr_byindex(struct rtattr *tb[], int max, struct rtattr *rta, int len)
++{
++ int i = 0;
++
++ memset(tb, 0, sizeof(struct rtattr *) * max);
++ while (RTA_OK(rta, len)) {
++ if (rta->rta_type <= max && i < max)
++ tb[i++] = rta;
++ rta = RTA_NEXT(rta,len);
++ }
++ if (len)
++ fprintf(stderr, "!!!Deficit %d, rta_len=%d\n", len, rta->rta_len);
++ return i;
++}
+diff -ruN acpid-1.0.8.orig/libnetlink.h acpid-1.0.8/libnetlink.h
+--- acpid-1.0.8.orig/libnetlink.h 1970-01-01 01:00:00.000000000 +0100
++++ acpid-1.0.8/libnetlink.h 2009-03-29 17:10:14.000000000 +0200
+@@ -0,0 +1,91 @@
++#ifndef __LIBNETLINK_H__
++#define __LIBNETLINK_H__ 1
++
++#include <asm/types.h>
++// needed by netlink.h, should be in there
++#include <arpa/inet.h>
++#include <linux/netlink.h>
++#include <linux/rtnetlink.h>
++
++struct rtnl_handle
++{
++ int fd;
++ struct sockaddr_nl local;
++ struct sockaddr_nl peer;
++ __u32 seq;
++ __u32 dump;
++};
++
++extern int rtnl_open(struct rtnl_handle *rth, unsigned subscriptions);
++extern int rtnl_open_byproto(struct rtnl_handle *rth, unsigned subscriptions, int protocol);
++extern void rtnl_close(struct rtnl_handle *rth);
++extern int rtnl_wilddump_request(struct rtnl_handle *rth, int fam, int type);
++extern int rtnl_dump_request(struct rtnl_handle *rth, int type, void *req, int len);
++
++typedef int (*rtnl_filter_t)(const struct sockaddr_nl *,
++ struct nlmsghdr *n, void *);
++extern int rtnl_dump_filter(struct rtnl_handle *rth, rtnl_filter_t filter,
++ void *arg1,
++ rtnl_filter_t junk,
++ void *arg2);
++extern int rtnl_talk(struct rtnl_handle *rtnl, struct nlmsghdr *n, pid_t peer,
++ unsigned groups, struct nlmsghdr *answer,
++ rtnl_filter_t junk,
++ void *jarg);
++extern int rtnl_send(struct rtnl_handle *rth, const char *buf, int);
++
++
++extern int addattr32(struct nlmsghdr *n, int maxlen, int type, __u32 data);
++extern int addattr_l(struct nlmsghdr *n, int maxlen, int type, const void *data, int alen);
++extern int addraw_l(struct nlmsghdr *n, int maxlen, const void *data, int len);
++extern int rta_addattr32(struct rtattr *rta, int maxlen, int type, __u32 data);
++extern int rta_addattr_l(struct rtattr *rta, int maxlen, int type, const void *data, int alen);
++
++extern int parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int len);
++extern int parse_rtattr_byindex(struct rtattr *tb[], int max, struct rtattr *rta, int len);
++
++#define parse_rtattr_nested(tb, max, rta) \
++ (parse_rtattr((tb), (max), RTA_DATA(rta), RTA_PAYLOAD(rta)))
++
++extern int rtnl_listen(struct rtnl_handle *, rtnl_filter_t handler,
++ void *jarg);
++extern int rtnl_from_file(FILE *, rtnl_filter_t handler,
++ void *jarg);
++
++#define NLMSG_TAIL(nmsg) \
++ ((struct rtattr *) (((void *) (nmsg)) + NLMSG_ALIGN((nmsg)->nlmsg_len)))
++
++#ifndef IFA_RTA
++#define IFA_RTA(r) \
++ ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifaddrmsg))))
++#endif
++#ifndef IFA_PAYLOAD
++#define IFA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifaddrmsg))
++#endif
++
++#ifndef IFLA_RTA
++#define IFLA_RTA(r) \
++ ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ifinfomsg))))
++#endif
++#ifndef IFLA_PAYLOAD
++#define IFLA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ifinfomsg))
++#endif
++
++#ifndef NDA_RTA
++#define NDA_RTA(r) \
++ ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ndmsg))))
++#endif
++#ifndef NDA_PAYLOAD
++#define NDA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ndmsg))
++#endif
++
++#ifndef NDTA_RTA
++#define NDTA_RTA(r) \
++ ((struct rtattr*)(((char*)(r)) + NLMSG_ALIGN(sizeof(struct ndtmsg))))
++#endif
++#ifndef NDTA_PAYLOAD
++#define NDTA_PAYLOAD(n) NLMSG_PAYLOAD(n,sizeof(struct ndtmsg))
++#endif
++
++#endif /* __LIBNETLINK_H__ */
++
+diff -ruN acpid-1.0.8.orig/Makefile acpid-1.0.8/Makefile
+--- acpid-1.0.8.orig/Makefile 2008-11-03 14:04:43.000000000 +0100
++++ acpid-1.0.8/Makefile 2009-03-29 17:10:14.000000000 +0200
+@@ -12,7 +12,8 @@
+ BIN_PROGS = acpi_listen
+ PROGS = $(SBIN_PROGS) $(BIN_PROGS)
+
+-acpid_SRCS = acpid.c event.c ud_socket.c
++acpid_SRCS = acpid.c acpi_ids.c connection_list.c event.c input_layer.c \
++ libnetlink.c netlink.c proc.c sock.c ud_socket.c
+ acpid_OBJS = $(acpid_SRCS:.c=.o)
+
+ acpi_listen_SRCS = acpi_listen.c ud_socket.c
+diff -ruN acpid-1.0.8.orig/netlink.c acpid-1.0.8/netlink.c
+--- acpid-1.0.8.orig/netlink.c 1970-01-01 01:00:00.000000000 +0100
++++ acpid-1.0.8/netlink.c 2009-03-29 17:10:14.000000000 +0200
+@@ -0,0 +1,239 @@
++/*
++ * netlink.c - Kernel ACPI Event Netlink Interface
++ *
++ * Handles the details of getting kernel ACPI events from netlink.
++ *
++ * Inspired by (and in some cases blatantly lifted from) Zhang Rui's
++ * acpi_genl and Alexey Kuznetsov's libnetlink. Thanks also to Yi Yang
++ * at intel.
++ *
++ * Copyright (C) 2008, Ted Felix (www.tedfelix.com)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ * (tabs at 4)
++ */
++
++/* system */
++#include <unistd.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <errno.h>
++
++/* local */
++#include "acpid.h"
++#include "event.h"
++
++#include "libnetlink.h"
++#include "genetlink.h"
++#include "acpi_genetlink.h"
++
++#include "acpi_ids.h"
++#include "connection_list.h"
++
++static void
++format_netlink(struct nlmsghdr *msg)
++{
++ struct rtattr *tb[ACPI_GENL_ATTR_MAX + 1];
++ struct genlmsghdr *ghdr = NLMSG_DATA(msg);
++ int len;
++ struct rtattr *attrs;
++
++ len = msg->nlmsg_len;
++
++ /* if this message doesn't have the proper family ID, drop it */
++ if (msg->nlmsg_type != acpi_ids_getfamily()) {
++ if (logevents) {
++ acpid_log(LOG_INFO, "wrong netlink family ID.\n");
++ }
++ return;
++ }
++
++ len -= NLMSG_LENGTH(GENL_HDRLEN);
++
++ if (len < 0) {
++ acpid_log(LOG_WARNING,
++ "wrong netlink controller message len: %d\n", len);
++ return;
++ }
++
++ attrs = (struct rtattr *)((char *)ghdr + GENL_HDRLEN);
++ /* parse the attributes in this message */
++ parse_rtattr(tb, ACPI_GENL_ATTR_MAX, attrs, len);
++
++ /* if there's an ACPI event attribute... */
++ if (tb[ACPI_GENL_ATTR_EVENT]) {
++ /* get the actual event struct */
++ struct acpi_genl_event *event =
++ RTA_DATA(tb[ACPI_GENL_ATTR_EVENT]);
++ char buf[64];
++
++ /* format it */
++ snprintf(buf, sizeof(buf), "%s %s %08x %08x",
++ event->device_class, event->bus_id, event->type, event->data);
++
++ /* if we're locked, don't process the event */
++ if (locked()) {
++ if (logevents) {
++ acpid_log(LOG_INFO,
++ "lockfile present, not processing "
++ "netlink event \"%s\"\n", buf);
++ }
++ return;
++ }
++
++ if (logevents)
++ acpid_log(LOG_INFO,
++ "received netlink event \"%s\"\n", buf);
++
++ /* send the event off to the handler */
++ acpid_handle_event(buf);
++
++ if (logevents)
++ acpid_log(LOG_INFO,
++ "completed netlink event \"%s\"\n", buf);
++ }
++}
++
++/* (based on rtnl_listen() in libnetlink.c) */
++void
++process_netlink(int fd)
++{
++ int status;
++ struct nlmsghdr *h;
++ /* the address for recvmsg() */
++ struct sockaddr_nl nladdr;
++ /* the io vector for recvmsg() */
++ struct iovec iov;
++ /* recvmsg() parameters */
++ struct msghdr msg = {
++ .msg_name = &nladdr,
++ .msg_namelen = sizeof(nladdr),
++ .msg_iov = &iov,
++ .msg_iovlen = 1,
++ };
++ /* buffer for the incoming data */
++ char buf[8192];
++ static int nerrs;
++
++ /* set up the netlink address */
++ memset(&nladdr, 0, sizeof(nladdr));
++ nladdr.nl_family = AF_NETLINK;
++ nladdr.nl_pid = 0;
++ nladdr.nl_groups = 0;
++
++ /* set up the I/O vector */
++ iov.iov_base = buf;
++ iov.iov_len = sizeof(buf);
++
++ /* read the data into the buffer */
++ status = recvmsg(fd, &msg, 0);
++
++ /* if there was a problem, print a message and keep trying */
++ if (status < 0) {
++ /* if we were interrupted by a signal, bail */
++ if (errno == EINTR)
++ return;
++
++ acpid_log(LOG_ERR, "netlink read error: %s (%d)\n",
++ strerror(errno), errno);
++ if (++nerrs >= ACPID_MAX_ERRS) {
++ acpid_log(LOG_ERR,
++ "too many errors reading via "
++ "netlink - aborting\n");
++ exit(EXIT_FAILURE);
++ }
++ return;
++ }
++ /* if an orderly shutdown has occurred, we're done */
++ if (status == 0) {
++ acpid_log(LOG_WARNING, "netlink connection closed\n");
++ exit(EXIT_FAILURE);
++ }
++ /* check to see if the address length has changed */
++ if (msg.msg_namelen != sizeof(nladdr)) {
++ acpid_log(LOG_WARNING, "netlink unexpected length: "
++ "%d expected: %d\n", msg.msg_namelen, sizeof(nladdr));
++ return;
++ }
++
++ /* for each message received */
++ for (h = (struct nlmsghdr*)buf; (unsigned)status >= sizeof(*h); ) {
++ int len = h->nlmsg_len;
++ int l = len - sizeof(*h);
++
++ if (l < 0 || len > status) {
++ if (msg.msg_flags & MSG_TRUNC) {
++ acpid_log(LOG_WARNING, "netlink msg truncated (1)\n");
++ return;
++ }
++ acpid_log(LOG_WARNING,
++ "malformed netlink msg, length %d\n", len);
++ return;
++ }
++
++ /* format the message */
++ format_netlink(h);
++
++ status -= NLMSG_ALIGN(len);
++ h = (struct nlmsghdr*)((char*)h + NLMSG_ALIGN(len));
++ }
++ if (msg.msg_flags & MSG_TRUNC) {
++ acpid_log(LOG_WARNING, "netlink msg truncated (2)\n");
++ return;
++ }
++ if (status) {
++ acpid_log(LOG_WARNING, "netlink remnant of size %d\n", status);
++ return;
++ }
++
++ return;
++}
++
++/* convert the netlink multicast group number into a bit map */
++/* (e.g. 4 => 16, 5 => 32) */
++static __u32
++nl_mgrp(__u32 group)
++{
++ if (group > 31) {
++ fprintf(stderr, "%s: unexpected group number %d\n",
++ progname, group);
++ return 0;
++ }
++ return group ? (1 << (group - 1)) : 0;
++}
++
++void open_netlink(void)
++{
++ struct rtnl_handle rth;
++ struct connection c;
++
++ /* open the appropriate netlink socket for input */
++ if (rtnl_open_byproto(
++ &rth, nl_mgrp(acpi_ids_getgroup()), NETLINK_GENERIC) < 0) {
++ fprintf(stderr, "%s: cannot open generic netlink socket\n",
++ progname);
++ return;
++ }
++
++ if (acpid_debug)
++ fprintf(stderr, "%s: netlink opened successfully\n", progname);
++
++ /* add a connection to the list */
++ c.fd = rth.fd;
++ c.process = process_netlink;
++ add_connection(&c);
++}
+diff -ruN acpid-1.0.8.orig/netlink.h acpid-1.0.8/netlink.h
+--- acpid-1.0.8.orig/netlink.h 1970-01-01 01:00:00.000000000 +0100
++++ acpid-1.0.8/netlink.h 2009-03-29 17:10:14.000000000 +0200
+@@ -0,0 +1,31 @@
++/*
++ * netlink.h - Kernel ACPI Event Netlink Interface
++ *
++ * Handles the details of getting kernel ACPI events from netlink.
++ *
++ * Copyright (C) 2008, Ted Felix (www.tedfelix.com)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ * (tabs at 4)
++ */
++
++#ifndef NETLINK_H__
++#define NETLINK_H__
++
++/* open the netlink connection */
++extern void open_netlink(void);
++
++#endif /* NETLINK_H__ */
+diff -ruN acpid-1.0.8.orig/proc.c acpid-1.0.8/proc.c
+--- acpid-1.0.8.orig/proc.c 1970-01-01 01:00:00.000000000 +0100
++++ acpid-1.0.8/proc.c 2009-03-29 17:18:26.000000000 +0200
+@@ -0,0 +1,207 @@
++/*
++ * proc.c - ACPI daemon proc filesystem interface
++ *
++ * Portions Copyright (C) 2000 Andrew Henroid
++ * Portions Copyright (C) 2001 Sun Microsystems
++ * Portions Copyright (C) 2004 Tim Hockin (thockin@hockin.org)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#include <unistd.h>
++#include <fcntl.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <errno.h>
++
++#include "acpid.h"
++#include "event.h"
++#include "connection_list.h"
++
++const char *eventfile = ACPID_EVENTFILE;
++
++static char *read_line(int fd);
++
++static void
++process_proc(int fd)
++{
++ char *event;
++
++ /* read an event */
++ event = read_line(fd);
++
++ /* if we're locked, don't process the event */
++ if (locked()) {
++ if (logevents && event != NULL) {
++ acpid_log(LOG_INFO,
++ "lockfile present, not processing "
++ "event \"%s\"\n", event);
++ }
++ return;
++ }
++
++ /* handle the event */
++ if (event) {
++ if (logevents) {
++ acpid_log(LOG_INFO,
++ "procfs received event \"%s\"\n", event);
++ }
++ acpid_handle_event(event);
++ if (logevents) {
++ acpid_log(LOG_INFO,
++ "procfs completed event \"%s\"\n", event);
++ }
++ } else if (errno == EPIPE) {
++ acpid_log(LOG_WARNING,
++ "events file connection closed\n");
++ exit(EXIT_FAILURE);
++ } else {
++ static int nerrs;
++ if (++nerrs >= ACPID_MAX_ERRS) {
++ acpid_log(LOG_ERR,
++ "too many errors reading "
++ "events file - aborting\n");
++ exit(EXIT_FAILURE);
++ }
++ }
++}
++
++int
++open_proc()
++{
++ int fd;
++ struct connection c;
++
++ fd = open(eventfile, O_RDONLY);
++ if (fd < 0) {
++ if (acpid_debug)
++ fprintf(stderr, "%s: can't open %s: %s\n", progname,
++ eventfile, strerror(errno));
++ return -1;
++ }
++ fcntl(fd, F_SETFD, FD_CLOEXEC);
++
++ if (acpid_debug)
++ fprintf(stderr, "%s: proc fs opened successfully\n", progname);
++
++ /* add a connection to the list */
++ c.fd = fd;
++ c.process = process_proc;
++ add_connection(&c);
++
++ return 0;
++}
++
++/*
++ * This depends on fixes in linux ACPI after 2.4.8
++ */
++#define BUFLEN 1024
++static char *
++read_line(int fd)
++{
++ static char buf[BUFLEN];
++ int i = 0;
++ int r;
++ int searching = 1;
++
++ while (searching) {
++ memset(buf+i, 0, BUFLEN-i);
++
++ /* only go to BUFLEN-1 so there will always be a 0 at the end */
++ while (i < BUFLEN-1) {
++ r = read(fd, buf+i, 1);
++ if (r < 0 && errno != EINTR) {
++ /* we should do something with the data */
++ acpid_log(LOG_ERR, "read(): %s\n",
++ strerror(errno));
++ return NULL;
++ } else if (r == 0) {
++ /* signal this in an almost standard way */
++ errno = EPIPE;
++ return NULL;
++ } else if (r == 1) {
++ /* scan for a newline */
++ if (buf[i] == '\n') {
++ searching = 0;
++ buf[i] = '\0';
++ break;
++ }
++ i++;
++ }
++ }
++ if (i >= BUFLEN - 1)
++ break;
++ }
++
++ return buf;
++}
++
++#if 0
++/* This version leaks memory. The above version is simpler and leak-free. */
++/* Downside is that the above version always uses 1k of RAM. */
++/*
++ * This depends on fixes in linux ACPI after 2.4.8
++ */
++#define MAX_BUFLEN 1024
++static char *
++read_line(int fd)
++{
++ static char *buf;
++ int buflen = 64;
++ int i = 0;
++ int r;
++ int searching = 1;
++
++ while (searching) {
++ /* ??? This memory is leaked since it is never freed */
++ buf = realloc(buf, buflen);
++ if (!buf) {
++ acpid_log(LOG_ERR, "malloc(%d): %s\n",
++ buflen, strerror(errno));
++ return NULL;
++ }
++ memset(buf+i, 0, buflen-i);
++
++ while (i < buflen) {
++ r = read(fd, buf+i, 1);
++ if (r < 0 && errno != EINTR) {
++ /* we should do something with the data */
++ acpid_log(LOG_ERR, "read(): %s\n",
++ strerror(errno));
++ return NULL;
++ } else if (r == 0) {
++ /* signal this in an almost standard way */
++ errno = EPIPE;
++ return NULL;
++ } else if (r == 1) {
++ /* scan for a newline */
++ if (buf[i] == '\n') {
++ searching = 0;
++ buf[i] = '\0';
++ break;
++ }
++ i++;
++ }
++ }
++ if (buflen >= MAX_BUFLEN) {
++ break;
++ }
++ buflen *= 2;
++ }
++
++ return buf;
++}
++#endif
+diff -ruN acpid-1.0.8.orig/proc.h acpid-1.0.8/proc.h
+--- acpid-1.0.8.orig/proc.h 1970-01-01 01:00:00.000000000 +0100
++++ acpid-1.0.8/proc.h 2009-03-29 17:10:14.000000000 +0200
+@@ -0,0 +1,30 @@
++/*
++ * proc.h - ACPI daemon proc filesystem interface
++ *
++ * Portions Copyright (C) 2000 Andrew Henroid
++ * Portions Copyright (C) 2001 Sun Microsystems
++ * Portions Copyright (C) 2004 Tim Hockin (thockin@hockin.org)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#ifndef PROC_H__
++#define PROC_H__
++
++extern const char *eventfile;
++
++extern int open_proc();
++
++#endif /* PROC_H__ */
+diff -ruN acpid-1.0.8.orig/sock.c acpid-1.0.8/sock.c
+--- acpid-1.0.8.orig/sock.c 1970-01-01 01:00:00.000000000 +0100
++++ acpid-1.0.8/sock.c 2009-03-29 17:10:14.000000000 +0200
+@@ -0,0 +1,98 @@
++/*
++ * sock.c - ACPI daemon socket interface
++ *
++ * Portions Copyright (C) 2000 Andrew Henroid
++ * Portions Copyright (C) 2001 Sun Microsystems
++ * Portions Copyright (C) 2004 Tim Hockin (thockin@hockin.org)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#include <unistd.h>
++#include <fcntl.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <errno.h>
++#include <grp.h>
++
++#include "acpid.h"
++#include "event.h"
++#include "ud_socket.h"
++#include "connection_list.h"
++
++const char *socketfile = ACPID_SOCKETFILE;
++const char *socketgroup;
++mode_t socketmode = ACPID_SOCKETMODE;
++
++static void
++process_sock(int fd)
++{
++ int cli_fd;
++ struct ucred creds;
++ char buf[32];
++
++ /* accept and add to our lists */
++ cli_fd = ud_accept(fd, &creds);
++ if (cli_fd < 0) {
++ acpid_log(LOG_ERR, "can't accept client: %s\n",
++ strerror(errno));
++ return;
++ }
++ fcntl(cli_fd, F_SETFD, FD_CLOEXEC);
++ snprintf(buf, sizeof(buf)-1, "%d[%d:%d]",
++ creds.pid, creds.uid, creds.gid);
++ acpid_add_client(cli_fd, buf);
++}
++
++void
++open_sock()
++{
++ int fd;
++ struct connection c;
++
++ fd = ud_create_socket(socketfile);
++ if (fd < 0) {
++ fprintf(stderr, "%s: can't open socket %s: %s\n",
++ progname, socketfile, strerror(errno));
++ exit(EXIT_FAILURE);
++ }
++ fcntl(fd, F_SETFD, FD_CLOEXEC);
++ chmod(socketfile, socketmode);
++ if (socketgroup) {
++ struct group *gr;
++ struct stat buf;
++ gr = getgrnam(socketgroup);
++ if (!gr) {
++ fprintf(stderr, "%s: group %s does not exist\n",
++ progname, socketgroup);
++ exit(EXIT_FAILURE);
++ }
++ if (stat(socketfile, &buf) < 0) {
++ fprintf(stderr, "%s: can't stat %s\n",
++ progname, socketfile);
++ exit(EXIT_FAILURE);
++ }
++ if (chown(socketfile, buf.st_uid, gr->gr_gid) < 0) {
++ fprintf(stderr, "%s: chown(): %s\n",
++ progname, strerror(errno));
++ exit(EXIT_FAILURE);
++ }
++ }
++
++ /* add a connection to the list */
++ c.fd = fd;
++ c.process = process_sock;
++ add_connection(&c);
++}
+diff -ruN acpid-1.0.8.orig/sock.h acpid-1.0.8/sock.h
+--- acpid-1.0.8.orig/sock.h 1970-01-01 01:00:00.000000000 +0100
++++ acpid-1.0.8/sock.h 2009-03-29 17:10:14.000000000 +0200
+@@ -0,0 +1,32 @@
++/*
++ * sock.h - ACPI daemon socket interface
++ *
++ * Portions Copyright (C) 2000 Andrew Henroid
++ * Portions Copyright (C) 2001 Sun Microsystems
++ * Portions Copyright (C) 2004 Tim Hockin (thockin@hockin.org)
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#ifndef SOCK_H__
++#define SOCK_H__
++
++extern const char *socketfile;
++extern const char *socketgroup;
++extern mode_t socketmode;
++
++extern void open_sock();
++
++#endif /* SOCK_H__ */
diff --git a/recipes/acpid/acpid_1.0.8.bb b/recipes/acpid/acpid_1.0.8.bb
new file mode 100644
index 0000000000..98638e6d1a
--- /dev/null
+++ b/recipes/acpid/acpid_1.0.8.bb
@@ -0,0 +1,6 @@
+require acpid.inc
+
+SRC_URI_append = " file://event.c.diff;patch=1 \
+ file://fixfd.diff;patch=1 \
+ file://netlink.diff;patch=1"
+
diff --git a/recipes/boost/boost-36.inc b/recipes/boost/boost-36.inc
index 5a4faaf1d6..4bd065f13a 100644
--- a/recipes/boost/boost-36.inc
+++ b/recipes/boost/boost-36.inc
@@ -43,18 +43,18 @@ S = "${WORKDIR}/${BOOST_P}"
# Make a package for each library, plus -dev
PACKAGES = "${PN}-dbg ${BOOST_PACKAGES}"
python __anonymous () {
- import bb
-
- packages = []
- extras = []
- for lib in bb.data.getVar('BOOST_LIBS', d, 1).split( ):
- pkg = "boost-%s" % lib.replace("_", "-")
- extras.append("--with-%s" % lib)
- packages.append(pkg)
- if not bb.data.getVar("FILES_%s" % pkg, d, 1):
- bb.data.setVar("FILES_%s" % pkg, "${libdir}/libboost_%s*.so*" % lib, d)
- bb.data.setVar("BOOST_PACKAGES", " ".join(packages), d)
- bb.data.setVar("BJAM_EXTRA", " ".join(extras), d)
+ import bb
+
+ packages = []
+ extras = []
+ for lib in bb.data.getVar('BOOST_LIBS', d, 1).split( ):
+ pkg = "boost-%s" % lib.replace("_", "-")
+ extras.append("--with-%s" % lib)
+ packages.append(pkg)
+ if not bb.data.getVar("FILES_%s" % pkg, d, 1):
+ bb.data.setVar("FILES_%s" % pkg, "${libdir}/libboost_%s*.so*" % lib, d)
+ bb.data.setVar("BOOST_PACKAGES", " ".join(packages), d)
+ bb.data.setVar("BJAM_EXTRA", " ".join(extras), d)
}
# Override the contents of specific packages
diff --git a/recipes/cups/cups.inc b/recipes/cups/cups.inc
index 8e2a7a8075..cbec781881 100644
--- a/recipes/cups/cups.inc
+++ b/recipes/cups/cups.inc
@@ -3,6 +3,8 @@ SECTION = "console/utils"
LICENSE = "GPL LGPL"
DEPENDS = "gnutls jpeg dbus dbus-glib libpng zlib fakeroot-native"
+INC_PR = "r7"
+
SRC_URI = "ftp://ftp.easysw.com/pub/cups/${PV}/cups-${PV}-source.tar.bz2 \
"
@@ -62,6 +64,13 @@ python do_package_append() {
os.system('chmod 0511 %s/install/cups/var/run/cups/certs' % workdir)
}
+do_stage_append() {
+ # Undo mangle of cups_datadir and cups_serverbin
+ sed -e 's:cups_datadir=.*:cups_datadir=${datadir}/cups:g' \
+ -e 's:cups_serverbin=.*:cups_serverbin=${libdir}/cups:g' \
+ -i ${STAGING_BINDIR_CROSS}/cups-config
+}
+
PACKAGES =+ "${PN}-lib ${PN}-libimage"
FILES_${PN}-lib = "${libdir}/libcups.so.*"
@@ -82,4 +91,3 @@ FILES_${PN} += "${datadir}/doc/cups/images \
${datadir}/doc/cups/*.css \
${datadir}/icons/ \
"
-
diff --git a/recipes/cups/cups_1.1.23.bb b/recipes/cups/cups_1.1.23.bb
index d6f0de8d7b..bc1053cd9e 100644
--- a/recipes/cups/cups_1.1.23.bb
+++ b/recipes/cups/cups_1.1.23.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "An Internet printing system for Unix."
SECTION = "console/utils"
LICENSE = "GPL LGPL"
DEPENDS = "openssl jpeg libpng zlib fakeroot-native"
-PR = "r6"
+PR = "${INC_PR}.1"
SRC_URI = "ftp://ftp3.easysw.com/pub/cups/${PV}/cups-${PV}-source.tar.bz2 \
file://strftime_fix.patch;patch=1"
diff --git a/recipes/cups/cups_1.2.12.bb b/recipes/cups/cups_1.2.12.bb
index 4f7d0d49b6..773f97e101 100644
--- a/recipes/cups/cups_1.2.12.bb
+++ b/recipes/cups/cups_1.2.12.bb
@@ -1,2 +1,2 @@
require cups.inc
-PR = "r2"
+PR = "${INC_PR}.1"
diff --git a/recipes/cups/cups_1.2.7.bb b/recipes/cups/cups_1.2.7.bb
index 8559bfcf8e..7084032662 100644
--- a/recipes/cups/cups_1.2.7.bb
+++ b/recipes/cups/cups_1.2.7.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "An Internet printing system for Unix."
SECTION = "console/utils"
LICENSE = "GPL LGPL"
DEPENDS = "gnutls jpeg dbus dbus-glib libpng zlib fakeroot-native"
-PR = "r1"
+PR = "${INC_PR}.1"
SRC_URI = "ftp://ftp3.easysw.com/pub/cups/${PV}/cups-${PV}-source.tar.bz2 \
"
diff --git a/recipes/cups/cups_1.3.8.bb b/recipes/cups/cups_1.3.8.bb
index 79cbc32715..c921133c5d 100644
--- a/recipes/cups/cups_1.3.8.bb
+++ b/recipes/cups/cups_1.3.8.bb
@@ -1,7 +1,7 @@
require cups.inc
SRC_URI += "file://use_echo_only_in_init.patch;patch=1"
-PR = "r2"
+PR = "${INC_PR}.1"
DEFAULT_PREFERENCE = "-1"
diff --git a/recipes/device-mapper/device-mapper-1.02.28/devmap-mknod-busybox.patch b/recipes/device-mapper/device-mapper-1.02.28/devmap-mknod-busybox.patch
new file mode 100644
index 0000000000..8b24f143dd
--- /dev/null
+++ b/recipes/device-mapper/device-mapper-1.02.28/devmap-mknod-busybox.patch
@@ -0,0 +1,9 @@
+--- device-mapper.1.01.05/scripts/devmap_mknod.sh 2002-07-23 05:50:13.000000000 -0700
++++ device-mapper.1.01.05/scripts/devmap_mknod.sh~ 2005-08-25 14:51:13.000000000 -0700
+@@ -37,5 +37,5 @@
+ test -e $CONTROL && rm -f $CONTROL
+
+ echo "Creating $CONTROL character device with major:$MAJOR minor:$MINOR."
+-mknod --mode=600 $CONTROL c $MAJOR $MINOR
++mknod -m 600 $CONTROL c $MAJOR $MINOR
+
diff --git a/recipes/device-mapper/device-mapper-1.02.28/remove_insanity.patch b/recipes/device-mapper/device-mapper-1.02.28/remove_insanity.patch
new file mode 100644
index 0000000000..f78c341c14
--- /dev/null
+++ b/recipes/device-mapper/device-mapper-1.02.28/remove_insanity.patch
@@ -0,0 +1,42 @@
+--- /tmp/Makefile.in 2009-05-21 13:45:20.000000000 +0200
++++ device-mapper.1.02.28/dmsetup/Makefile.in 2009-05-21 14:09:43.000000000 +0200
+@@ -31,12 +31,10 @@
+ include ../make.tmpl
+
+ dmsetup: $(OBJECTS) $(interfacedir)/libdevmapper.$(LIB_SUFFIX)
+- $(CC) -o $@ $(OBJECTS) $(CFLAGS) $(LDFLAGS) \
+- -L$(interfacedir) -L$(DESTDIR)/lib -ldevmapper $(LIBS)
++ $(CC) -o $@ $(OBJECTS) -L$(interfacedir) -ldevmapper $(LIBS) $(CFLAGS) $(LDFLAGS)
+
+ dmsetup.static: $(OBJECTS) $(interfacedir)/libdevmapper.a
+- $(CC) -o $@ $(OBJECTS) $(CFLAGS) $(LDFLAGS) -static \
+- -L$(interfacedir) -L$(DESTDIR)/lib -ldevmapper $(LIBS) \
++ $(CC) -o $@ $(OBJECTS) -L$(interfacedir) -ldevmapper $(LIBS) $(CFLAGS) $(LDFLAGS) -static \
+ $(LIB_PTHREAD)
+
+ install: $(INSTALL_TYPE)
+--- /tmp/make.tmpl.in 2009-05-21 14:24:02.000000000 +0200
++++ device-mapper.1.02.28/make.tmpl.in 2009-05-21 14:29:20.000000000 +0200
+@@ -151,19 +151,19 @@
+ $(TARGETS): $(OBJECTS)
+
+ %.o: %.c
+- $(CC) -c $(INCLUDES) $(DEFS) $(CFLAGS) $< -o $@
++ $(CC) -c $(INCLUDES) $(DEFS) $(CFLAGS) ${LDFLAGS} $< -o $@
+
+ %.pot: %.c Makefile
+ $(CC) -E $(INCLUDES) -include $(top_srcdir)/include/pogen.h \
+ $(DEFS) $(CFLAGS) $< > $@
+
+ %.so: %.o
+- $(CC) -c $(INCLUDES) $(DEFS) $(CFLAGS) $< -o $@
++ $(CC) -c $(INCLUDES) $(DEFS) $(CFLAGS) ${LDFLAGS} $< -o $@
+
+ ifeq ("@LIB_SUFFIX@","so")
+ $(LIB_SHARED): $(OBJECTS) $(LDDEPS)
+ $(CC) -shared -Wl,-soname,$(notdir $@).$(LIB_VERSION) \
+- $(CFLAGS) $(CLDFLAGS) $(OBJECTS) $(LIBS) -o $@
++ $(CFLAGS) $(CLDFLAGS) ${LDFLAGS} $(OBJECTS) $(LIBS) -o $@
+ endif
+
+ ifeq ("@LIB_SUFFIX@","dylib")
diff --git a/recipes/device-mapper/device-mapper_1.01.05.bb b/recipes/device-mapper/device-mapper_1.01.05.bb
index bc02e6a71f..2af9990839 100644
--- a/recipes/device-mapper/device-mapper_1.01.05.bb
+++ b/recipes/device-mapper/device-mapper_1.01.05.bb
@@ -3,7 +3,7 @@ DESCRIPTION = "The Device-mapper is a new component of the linux kernel \
that supports logical volume management. It is required by LVM2 and EVMS. \
The original LVM (included in stock 2.4 kernels) does not use it."
LICENSE = "GPL"
-PR = "r3"
+PR = "r4"
S = "${WORKDIR}/${PN}.${PV}"
@@ -15,6 +15,8 @@ inherit autotools update-rc.d
# The install-script will fail without this.
EXTRA_OECONF="--with-user= --with-group= "
+TARGET_CC_ARCH += "${LDFLAGS}"
+
INITSCRIPT_NAME = "devmap_mknod.sh"
INITSCRIPT_PARAMS = "defaults"
diff --git a/recipes/device-mapper/device-mapper_1.02.28.bb b/recipes/device-mapper/device-mapper_1.02.28.bb
new file mode 100644
index 0000000000..bd97d15848
--- /dev/null
+++ b/recipes/device-mapper/device-mapper_1.02.28.bb
@@ -0,0 +1,37 @@
+SECTION = "libs"
+DESCRIPTION = "The Device-mapper is a new component of the linux kernel \
+that supports logical volume management. It is required by LVM2 and EVMS. \
+The original LVM (included in stock 2.4 kernels) does not use it."
+LICENSE = "GPL"
+
+S = "${WORKDIR}/${PN}.${PV}"
+
+SRC_URI = "ftp://sources.redhat.com/pub/dm/device-mapper.${PV}.tgz \
+ file://devmap-mknod-busybox.patch;patch=1 \
+ file://remove_insanity.patch;patch=1 "
+
+inherit autotools_stage update-rc.d
+AUTOTOOLS_STAGE_PKGCONFIG = "1"
+
+# The install-script will fail without this.
+EXTRA_OECONF="--with-user= --with-group= "
+
+INITSCRIPT_NAME = "devmap_mknod.sh"
+INITSCRIPT_PARAMS = "defaults"
+
+do_install_append() {
+ install -d ${D}/${libdir}/ioctl
+ install -m 755 ${S}/lib/ioctl/libdevmapper.a ${D}/${libdir}/ioctl/
+ install -D -m 755 ${S}/scripts/${INITSCRIPT_NAME} ${D}${sysconfdir}/init.d/${INITSCRIPT_NAME}
+}
+
+FILES_${PN}-dev += "${libdir}/ioctl/*.a"
+
+do_stage_append() {
+ install -d ${STAGING_LIBDIR}/pkgconfig/
+ for pc in ${S}/*/*.pc ; do
+ cp $pc ${STAGING_LIBDIR}/pkgconfig/
+ cp $pc ${STAGING_LIBDIR}/pkgconfig/$(echo $(basename $pc) | sed s:lib::g)
+ done
+}
+
diff --git a/recipes/devicekit/devicekit-disks_004.bb b/recipes/devicekit/devicekit-disks_004.bb
new file mode 100644
index 0000000000..63df1e7361
--- /dev/null
+++ b/recipes/devicekit/devicekit-disks_004.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "Block device part of devicekit"
+LICENSE = "GPLv2"
+DEPENDS = "devicekit zlib sqlite3 policykit parted device-mapper libatasmart udev dbus-glib glib-2.0"
+
+SRC_URI = "http://hal.freedesktop.org/releases/DeviceKit-disks-${PV}.tar.gz"
+S = "${WORKDIR}/DeviceKit-disks-${PV}"
+
+inherit autotools_stage
+AUTOTOOLS_STAGE_PKGCONFIG = "1"
+
+FILES_${PN} += "${datadir}/dbus-1/ \
+ ${datadir}/PolicyKit \
+ ${base_libdir}/udev/* \
+"
+
+FILES_${PN}-dbg += "${base_libdir}/udev/.debug"
+
+
diff --git a/recipes/devicekit/libatasmart_0.13.bb b/recipes/devicekit/libatasmart_0.13.bb
new file mode 100644
index 0000000000..31565f6cfb
--- /dev/null
+++ b/recipes/devicekit/libatasmart_0.13.bb
@@ -0,0 +1,20 @@
+LICENSE = "LGPL"
+
+SRCREV = "a80d7d5c25e88adea7b8e843cdb57143e6cfb46b"
+SRC_URI = "git://git.0pointer.de/libatasmart.git;protocol=git"
+
+S = "${WORKDIR}/git"
+
+inherit autotools_stage lib_package
+AUTOTOOLS_STAGE_PKGCONFIG = "1"
+
+do_compile_prepend() {
+ rm strpool -f
+ ${BUILD_CC} -o strpool strpool.c
+ chmod +x strpool
+}
+
+do_stage_append() {
+ sed -i -e s://:/:g -e s:${base_libdir}/libudev.la:-ludev:g ${STAGING_LIBDIR}/libatasmart.la
+}
+
diff --git a/recipes/gnash/gnash-minimal.inc b/recipes/gnash/gnash-minimal.inc
index a8e5229f46..5a8a91e5e0 100644
--- a/recipes/gnash/gnash-minimal.inc
+++ b/recipes/gnash/gnash-minimal.inc
@@ -1,6 +1,6 @@
DESCRIPTION = "Gnash is a GNU Flash movie player that supports many SWF v7 features"
HOMEPAGE = "http://www.gnu.org/software/gnash"
-LICENSE = "GPL-2"
+LICENSE = "GPLv2"
DEPENDS = "virtual/libiconv virtual/libintl libtool agg libxml2 zlib boost jpeg pango curl freetype \
${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'ffmpeg libmad', d)}"
diff --git a/recipes/gnash/gnash.inc b/recipes/gnash/gnash.inc
index 3602f6fa90..ea20524cad 100644
--- a/recipes/gnash/gnash.inc
+++ b/recipes/gnash/gnash.inc
@@ -1,6 +1,6 @@
DESCRIPTION = "Gnash is a GNU Flash movie player that supports many SWF v7 features"
HOMEPAGE = "http://www.gnu.org/software/gnash"
-LICENSE = "GPL-2"
+LICENSE = "GPLv2"
DEPENDS = "giflib libtool gtk+ cairo libxml2 libsdl-mixer zlib boost jpeg pango curl freetype \
${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'ffmpeg libmad', d)}"
diff --git a/recipes/gnome/libgnomeprintui_2.18.3.bb b/recipes/gnome/libgnomeprintui_2.18.3.bb
index 7c6d289e3a..021b9ad068 100644
--- a/recipes/gnome/libgnomeprintui_2.18.3.bb
+++ b/recipes/gnome/libgnomeprintui_2.18.3.bb
@@ -1,6 +1,7 @@
LICENSE = "GPL"
SECTION = "x11/gnome/libs"
-DEPENDS = "libgnomeprint gtk+ libgnomecanvas gnome-icon-theme gnome-common"
+DEPENDS = "libgnomeprint gtk+ libgnomecanvas gnome-icon-theme"
+PR = "r1"
inherit gnome pkgconfig
diff --git a/recipes/gnumeric/gnumeric_1.8.2.bb b/recipes/gnumeric/gnumeric_1.8.2.bb
deleted file mode 100644
index 8d3b1b5fb7..0000000000
--- a/recipes/gnumeric/gnumeric_1.8.2.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-LICENSE = "GPL"
-SECTION = "x11/utils"
-S = "${WORKDIR}/gnumeric-${PV}"
-DEPENDS = "libgsf gtk+ libxml2 goffice libglade libart-lgpl intltool-native libgnomecanvas libgnomeprint libgnomeprintui libbonoboui orbit2-native"
-DESCRIPTION = "Gnumeric spreadsheet for GNOME"
-
-PR = "r1"
-
-PARALLEL_MAKE = ""
-
-inherit gnome flow-lossage
-
-SRC_URI += "file://remove-docs.patch;patch=1"
-
-EXTRA_OECONF=" --without-perl "
-
-PACKAGES_DYNAMIC = "gnumeric-plugin-*"
-
-FILES_${PN}-dbg += "${libdir}/gnumeric/1.8.2/plugins/*/.debug"
-FILES_gnumeric_append = " /usr/lib/libspreadsheet-${PV}.so "
-
-# We need native orbit-idl with target idl files. No way to say it in a clean way:
-do_configure_append () {
- find -name Makefile -exec sed -i '/\/usr\/bin\/orbit-idl-2/{s:/usr/bin:${STAGING_BINDIR_NATIVE}:;s:/usr/share:${STAGING_DATADIR}:g}' {} \;
-}
-
-python populate_packages_prepend () {
- gnumeric_libdir = bb.data.expand('${libdir}/gnumeric/${PV}/plugins', d)
-
- do_split_packages(d, gnumeric_libdir, '(.*)', 'gnumeric-plugin-%s', 'Gnumeric plugin for %s', allow_dirs=True)
-}
diff --git a/recipes/gnumeric/gnumeric_1.8.3.bb b/recipes/gnumeric/gnumeric_1.8.4.bb
index 92cdc4c6c9..e375f278f2 100644
--- a/recipes/gnumeric/gnumeric_1.8.3.bb
+++ b/recipes/gnumeric/gnumeric_1.8.4.bb
@@ -1,7 +1,7 @@
LICENSE = "GPL"
SECTION = "x11/utils"
S = "${WORKDIR}/gnumeric-${PV}"
-DEPENDS = "libgsf gtk+ libxml2 goffice libglade libart-lgpl intltool-native libgnomecanvas libgnomeprint libgnomeprintui libbonoboui orbit2-native"
+DEPENDS = "gdk-pixbuf-csource-native libgsf gtk+ libxml2 goffice libglade libart-lgpl intltool-native libgnomecanvas libgnomeprint libgnomeprintui libbonoboui orbit2-native"
DESCRIPTION = "Gnumeric spreadsheet for GNOME"
PR = "r0"
diff --git a/recipes/grub/grub-0.93/autohell.patch b/recipes/grub/grub-0.93/autohell.patch
deleted file mode 100644
index ca1f2d1cb5..0000000000
--- a/recipes/grub/grub-0.93/autohell.patch
+++ /dev/null
@@ -1,166 +0,0 @@
---- grub-0.93/configure.in~ 2002-11-29 20:12:08.000000000 +0000
-+++ grub-0.93/configure.in 2004-01-04 12:03:05.000000000 +0000
-@@ -54,7 +54,7 @@
- _AM_DEPENDENCIES(CC)
-
- dnl Because recent automake complains about AS, set it here.
--AS="$CC"
-+AM_PROG_AS
- AC_SUBST(AS)
-
- AC_ARG_WITH(binutils,
---- grub-0.93/stage1/Makefile.am~ 2002-09-08 02:58:08.000000000 +0100
-+++ grub-0.93/stage1/Makefile.am 2004-01-04 12:31:38.000000000 +0000
-@@ -4,7 +4,7 @@
- CLEANFILES = $(nodist_pkgdata_DATA)
-
- # We can't use builtins or standard includes.
--AM_ASFLAGS = $(STAGE1_CFLAGS) -fno-builtin -nostdinc
-+AM_CCASFLAGS = $(STAGE1_CFLAGS) -fno-builtin -nostdinc $(DEFAULT_INCLUDES)
- LDFLAGS = -nostdlib -Wl,-N,-Ttext,7C00
-
- noinst_PROGRAMS = stage1.exec
---- grub-0.93/stage2/Makefile.am~ 2002-11-29 18:00:53.000000000 +0000
-+++ grub-0.93/stage2/Makefile.am 2004-01-04 12:30:29.000000000 +0000
-@@ -12,6 +12,7 @@
-
- # For <stage1.h>.
- INCLUDES = -I$(top_srcdir)/stage1
-+AM_CCASFLAGS = $(DEFAULT_INCLUDES) $(INCLUDES)
-
- # The library for /sbin/grub.
- noinst_LIBRARIES = libgrub.a
-@@ -88,7 +89,7 @@
- fsys_vstafs.c fsys_xfs.c gunzip.c hercules.c md5.c serial.c \
- smp-imps.c stage2.c terminfo.c tparm.c
- pre_stage2_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS)
--pre_stage2_exec_ASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS)
-+pre_stage2_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) $(AM_CCASFLAGS)
- pre_stage2_exec_LDFLAGS = $(PRE_STAGE2_LINK)
-
- if NETBOOT_SUPPORT
-@@ -109,7 +110,7 @@
- echo "#define STAGE2_SIZE $$6" > stage2_size.h
-
- start_exec_SOURCES = start.S
--start_exec_ASFLAGS = $(STAGE2_COMPILE)
-+start_exec_CCASFLAGS = $(STAGE2_COMPILE) $(AM_CCASFLAGS)
- start_exec_LDFLAGS = $(START_LINK)
-
- # XXX: automake doesn't provide a way to specify dependencies for object
-@@ -127,8 +128,8 @@
- stage1_5.c fsys_ext2fs.c bios.c
- e2fs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \
- -DNO_BLOCK_FILES=1
--e2fs_stage1_5_exec_ASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \
-- -DNO_BLOCK_FILES=1
-+e2fs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \
-+ -DNO_BLOCK_FILES=1 $(AM_CCASFLAGS)
- e2fs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-
- # For fat_stage1_5 target.
-@@ -136,8 +137,8 @@
- stage1_5.c fsys_fat.c bios.c
- fat_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \
- -DNO_BLOCK_FILES=1
--fat_stage1_5_exec_ASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \
-- -DNO_BLOCK_FILES=1
-+fat_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \
-+ -DNO_BLOCK_FILES=1 $(AM_CCASFLAGS)
- fat_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-
- # For ffs_stage1_5 target.
-@@ -145,8 +146,8 @@
- stage1_5.c fsys_ffs.c bios.c
- ffs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \
- -DNO_BLOCK_FILES=1
--ffs_stage1_5_exec_ASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \
-- -DNO_BLOCK_FILES=1
-+ffs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \
-+ -DNO_BLOCK_FILES=1 $(AM_CCASFLAGS)
- ffs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-
- # For minix_stage1_5 target.
-@@ -154,8 +155,8 @@
- stage1_5.c fsys_minix.c bios.c
- minix_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \
- -DNO_BLOCK_FILES=1
--minix_stage1_5_exec_ASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \
-- -DNO_BLOCK_FILES=1
-+minix_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \
-+ -DNO_BLOCK_FILES=1 $(AM_CCASFLAGS)
- minix_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-
- # For reiserfs_stage1_5 target.
-@@ -163,8 +164,8 @@
- disk_io.c stage1_5.c fsys_reiserfs.c bios.c
- reiserfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \
- -DNO_BLOCK_FILES=1
--reiserfs_stage1_5_exec_ASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \
-- -DNO_BLOCK_FILES=1
-+reiserfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \
-+ -DNO_BLOCK_FILES=1 $(AM_CCASFLAGS)
- reiserfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-
- # For vstafs_stage1_5 target.
-@@ -172,8 +173,8 @@
- disk_io.c stage1_5.c fsys_vstafs.c bios.c
- vstafs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \
- -DNO_BLOCK_FILES=1
--vstafs_stage1_5_exec_ASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \
-- -DNO_BLOCK_FILES=1
-+vstafs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \
-+ -DNO_BLOCK_FILES=1 $(AM_CCASFLAGS)
- vstafs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-
- # For jfs_stage1_5 target.
-@@ -181,8 +182,8 @@
- disk_io.c stage1_5.c fsys_jfs.c bios.c
- jfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \
- -DNO_BLOCK_FILES=1
--jfs_stage1_5_exec_ASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \
-- -DNO_BLOCK_FILES=1
-+jfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \
-+ -DNO_BLOCK_FILES=1 $(AM_CCASFLAGS)
- jfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-
- # For xfs_stage1_5 target.
-@@ -190,16 +191,16 @@
- disk_io.c stage1_5.c fsys_xfs.c bios.c
- xfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \
- -DNO_BLOCK_FILES=1
--xfs_stage1_5_exec_ASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \
-- -DNO_BLOCK_FILES=1
-+xfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \
-+ -DNO_BLOCK_FILES=1 $(AM_CCASFLAGS)
- xfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-
- # For diskless target.
- diskless_exec_SOURCES = $(pre_stage2_exec_SOURCES)
- diskless_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \
- -DSUPPORT_DISKLESS=1
--diskless_exec_ASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \
-- -DSUPPORT_DISKLESS=1
-+diskless_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \
-+ -DSUPPORT_DISKLESS=1 $(AM_CCASFLAGS)
- diskless_exec_LDFLAGS = $(PRE_STAGE2_LINK)
- diskless_exec_LDADD = ../netboot/libdrivers.a
-
-@@ -210,7 +211,7 @@
-
- # For nbloader target.
- nbloader_exec_SOURCES = nbloader.S
--nbloader_exec_ASFLAGS = $(STAGE2_COMPILE)
-+nbloader_exec_CCASFLAGS = $(STAGE2_COMPILE) $(AM_CCASFLAGS)
- nbloader_exec_LDFLAGS = $(NBLOADER_LINK)
-
- # XXX: See the comment for start_exec-start.o.
-@@ -223,7 +224,7 @@
-
- # For pxeloader target.
- pxeloader_exec_SOURCES = pxeloader.S
--pxeloader_exec_ASFLAGS = $(STAGE2_COMPILE)
-+pxeloader_exec_CCASFLAGS = $(STAGE2_COMPILE) $(AM_CCASFLAGS)
- pxeloader_exec_LDFLAGS = $(PXELOADER_LINK)
-
- # XXX: See the comment for start_exec-start.o.
diff --git a/recipes/grub/grub-0.93/memcpy.patch b/recipes/grub/grub-0.93/memcpy.patch
deleted file mode 100644
index dd5da33a8b..0000000000
--- a/recipes/grub/grub-0.93/memcpy.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- grub-0.93/stage2/asm.S~ 2002-12-02 23:18:56.000000000 +0000
-+++ grub-0.93/stage2/asm.S 2004-01-04 12:50:11.000000000 +0000
-@@ -62,6 +62,10 @@
- start:
- _start:
- #endif /* ! STAGE1_5 */
-+
-+#undef memcpy
-+ENTRY(memcpy)
-+ jmp EXT_C(grub_memmove)
-
- ENTRY(main)
- /*
diff --git a/recipes/grub/grub-0.93/reiserfs.patch b/recipes/grub/grub-0.93/reiserfs.patch
deleted file mode 100644
index 5b4fb5bfa4..0000000000
--- a/recipes/grub/grub-0.93/reiserfs.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- grub-0.93/stage2/fsys_reiserfs.c~ 2002-11-29 17:46:01.000000000 +0000
-+++ grub-0.93/stage2/fsys_reiserfs.c 2004-01-04 12:16:34.000000000 +0000
-@@ -112,7 +112,7 @@
- /* offset in the log of where to start replay after a crash */
- __u32 j_first_unflushed_offset;
- /* mount id to detect very old transactions */
-- __u32 long j_mount_id;
-+ __u32 j_mount_id;
- };
-
- /* magic string to find desc blocks in the journal */
diff --git a/recipes/grub/grub_0.93.bb b/recipes/grub/grub_0.93.bb
deleted file mode 100644
index 9fc008412d..0000000000
--- a/recipes/grub/grub_0.93.bb
+++ /dev/null
@@ -1,15 +0,0 @@
-DESCRIPTION = "GRUB is the GRand Unified Bootloader"
-HOMEPAGE = "http://www.gnu.org/software/grub"
-SECTION = "bootloaders"
-PRIORITY = "optional"
-
-SRC_URI = "ftp://alpha.gnu.org/gnu/grub/grub-${PV}.tar.gz; \
- file://autohell.patch;patch=1 \
- file://memcpy.patch;patch=1 \
- file://reiserfs.patch;patch=1"
-
-inherit autotools
-
-COMPATIBLE_HOST = 'i.86.*-linux'
-
-FILES_${PN}-doc = "${datadir}"
diff --git a/recipes/grub/grub_0.97.bb b/recipes/grub/grub_0.97.bb
index ef37af19e0..40adff9ee9 100644
--- a/recipes/grub/grub_0.97.bb
+++ b/recipes/grub/grub_0.97.bb
@@ -2,8 +2,8 @@ DESCRIPTION = "GRand Unified Bootloader"
HOMEPAGE = "http://www.gnu.org/software/grub"
SECTION = "bootloaders"
PRIORITY = "optional"
-RDEPENDS = "diffutils"
-PR = "r4"
+RDEPENDS_${PN}-install = "diffutils"
+PR = "r5"
SRC_URI = "ftp://alpha.gnu.org/gnu/grub/grub-${PV}.tar.gz \
file://automake-1.10.patch;patch=1 \
@@ -11,20 +11,26 @@ SRC_URI = "ftp://alpha.gnu.org/gnu/grub/grub-${PV}.tar.gz \
inherit autotools
-python __anonymous () {
- import re
- host = bb.data.getVar('HOST_SYS', d, 1)
- if not re.match('i.86.*-linux', host):
- raise bb.parse.SkipPackage("incompatible with host %s" % host)
-}
-
do_install_append() {
- install -d ${D}/boot/
- ln -sf ../usr/lib/grub/i386${TARGET_VENDOR}/ ${D}/boot/grub
+ install -m 0644 -D ${WORKDIR}/menu.lst ${D}/boot/grub/menu.lst
- # TODO: better use grub-set-default script here?
- install -m 0644 ${WORKDIR}/menu.lst ${D}/boot/grub
+ # Copy stage1/1_5/2 files to /boot/grub
+ GRUB_TARGET_ARCH=$(echo ${TARGET_ARCH} | sed -e 's/.86/386/')
+ install -m 0644 \
+ ${D}/${libdir}/grub/${GRUB_TARGET_ARCH}${TARGET_VENDOR}/* \
+ ${D}/boot/grub/
}
-FILES_${PN}-doc = "${datadir}"
-FILES_${PN} = "/boot /usr"
+PACKAGES =+ "${PN}-install ${PN}-eltorito"
+
+FILES_${PN}-install = " \
+ ${sbindir}/grub-install \
+ ${sbindir}/grub-terminfo \
+ ${sbindir}/grub-md5-crypt \
+ ${bindir}/mbchk \
+ ${libdir}/grub \
+"
+FILES_${PN}-eltorito = "/boot/grub/stage2_eltorito"
+FILES_${PN} += "/boot"
+
+COMPATIBLE_HOST = "i.86.*-linux"
diff --git a/recipes/gstreamer/gst-plugins-ugly-sid_0.10.7.bb b/recipes/gstreamer/gst-plugins-ugly-sid_0.10.7.bb
index 77c4184c29..545a43a494 100644
--- a/recipes/gstreamer/gst-plugins-ugly-sid_0.10.7.bb
+++ b/recipes/gstreamer/gst-plugins-ugly-sid_0.10.7.bb
@@ -10,8 +10,8 @@ SRC_URI = "\
S = "${WORKDIR}/gst-plugins-ugly-${PV}"
python() {
- # Don't build, if we are building an ENTERPRISE distro
- enterprise = bb.data.getVar("ENTERPRISE_DISTRO", d, 1)
- if enterprise != "1":
- raise bb.parse.SkipPackage("gst-plugins-ugly-sid will only build if ENTERPRISE_DISTRO == 1")
+ # Don't build, if we are building an ENTERPRISE distro
+ enterprise = bb.data.getVar("ENTERPRISE_DISTRO", d, 1)
+ if enterprise != "1":
+ raise bb.parse.SkipPackage("gst-plugins-ugly-sid will only build if ENTERPRISE_DISTRO == 1")
}
diff --git a/recipes/gstreamer/gst-plugins-ugly_0.10.10.bb b/recipes/gstreamer/gst-plugins-ugly_0.10.10.bb
index 0678e229f8..49350ed641 100644
--- a/recipes/gstreamer/gst-plugins-ugly_0.10.10.bb
+++ b/recipes/gstreamer/gst-plugins-ugly_0.10.10.bb
@@ -10,9 +10,9 @@ SRC_URI += "\
"
python() {
- # Don't build, if we are building an ENTERPRISE distro
- enterprise = bb.data.getVar("ENTERPRISE_DISTRO", d, 1)
- if enterprise == "1":
- raise bb.parse.SkipPackage("gst-plugins-ugly will only build if ENTERPRISE_DISTRO != 1")
+ # Don't build, if we are building an ENTERPRISE distro
+ enterprise = bb.data.getVar("ENTERPRISE_DISTRO", d, 1)
+ if enterprise == "1":
+ raise bb.parse.SkipPackage("gst-plugins-ugly will only build if ENTERPRISE_DISTRO != 1")
}
diff --git a/recipes/gtk-engines/gtk-engines_2.18.1.bb b/recipes/gtk-engines/gtk-engines_2.18.1.bb
new file mode 100644
index 0000000000..177c5b8baf
--- /dev/null
+++ b/recipes/gtk-engines/gtk-engines_2.18.1.bb
@@ -0,0 +1,30 @@
+LICENSE = "GPL"
+SECTION = "x11/base"
+DESCRIPTION = "GTK theme engines"
+DEPENDS = "gtk+ cairo"
+
+RDEPENDS_gtk-theme-redmond = "gtk-engine-redmond95"
+RDEPENDS_gtk-theme-metal = "gtk-engine-metal"
+RDEPENDS_gtk-theme-mist = "gtk-engine-mist"
+RDEPENDS_gtk-theme-crux = "gtk-engine-crux-engine"
+RDEPENDS_gtk-theme-lighthouseblue = "gtk-engine-lighthouseblue"
+RDEPENDS_gtk-theme-thinice = "gtk-engine-thinice"
+RDEPENDS_gtk-theme-industrial = "gtk-engine-industrial"
+RDEPENDS_gtk-theme-clearlooks = "gtk-engine-clearlooks"
+
+inherit gnome gtk-binver
+
+PACKAGES_DYNAMIC = "gtk-engine-* gtk-theme-*"
+
+python populate_packages_prepend() {
+ import os.path
+
+ engines_ver = ['gtk-2.0/', gtkbinver_find(d), '/engines']
+
+ engines_root = os.path.join(bb.data.getVar('libdir', d, 1), ''.join(engines_ver))
+ themes_root = os.path.join(bb.data.getVar('datadir', d, 1), "themes")
+
+ do_split_packages(d, engines_root, '^lib(.*)\.so$', 'gtk-engine-%s', 'GTK %s theme engine', extra_depends='')
+ do_split_packages(d, themes_root, '(.*)', 'gtk-theme-%s', 'GTK theme %s', allow_dirs=True, extra_depends='')
+}
+
diff --git a/recipes/gtksourceview/gtksourceview2_2.6.0.bb b/recipes/gtksourceview/gtksourceview2_2.6.0.bb
new file mode 100644
index 0000000000..ee9f6549ac
--- /dev/null
+++ b/recipes/gtksourceview/gtksourceview2_2.6.0.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "Portable C library for multiline text editing"
+HOMEPAGE = "http://projects.gnome.org/gtksourceview/"
+LICENSE = "LGPL"
+DEPENDS = "gtk+ libgnomeprint"
+PR = "r0"
+PNAME = "gtksourceview"
+
+S = "${WORKDIR}/${PNAME}-${PV}"
+
+inherit gnome pkgconfig
+
+# overrule SRC_URI from gnome.conf
+SRC_URI = "${GNOME_MIRROR}/${PNAME}/${@gnome_verdir("${PV}")}/${PNAME}-${PV}.tar.bz2"
+
+do_stage() {
+autotools_stage_all
+}
+
diff --git a/recipes/hal/hal-cups-utils_0.6.19.bb b/recipes/hal/hal-cups-utils_0.6.19.bb
new file mode 100644
index 0000000000..289990e0f0
--- /dev/null
+++ b/recipes/hal/hal-cups-utils_0.6.19.bb
@@ -0,0 +1,23 @@
+DESCRIPTION = "Utilities to detect and configure printers automatically"
+HOMEPAGE = "https://fedorahosted.org/hal-cups-utils/"
+SECTION = "console/utils"
+LICENSE = "GPLv2 CUPS"
+DEPENDS = "hal dbus cups"
+RDEPENDS_${PN} += "python-dbus python-pycups python-cupshelpers python-subprocess python-syslog usbutils"
+
+SRC_URI = "https://fedorahosted.org/releases/h/a/hal-cups-utils/hal-cups-utils-${PV}.tar.gz"
+S = "${WORKDIR}/${PN}-${PV}"
+
+inherit autotools
+
+PACKAGES += "cups-backend-hal"
+
+FILES_${PN} += "${libdir}/hal/* ${datadir}/hal/*"
+FILES_${PN}-dbg += "${libdir}/hal/.debug ${libdir}/cups/backend/.debug"
+FILES_cups-backend-hal += "${libdir}/cups/backend/*"
+
+EXTRA_OECONF = "--libexecdir=${libdir}/hal/scripts"
+
+do_configure_append() {
+ sed -i 's,^#!/bin/env python,#!/usr/bin/python,' systemv/hal_lpadmin
+}
diff --git a/recipes/initrdscripts/files/init.sh b/recipes/initrdscripts/files/init.sh
index 221b8f56b9..26fd57fce4 100644
--- a/recipes/initrdscripts/files/init.sh
+++ b/recipes/initrdscripts/files/init.sh
@@ -5,9 +5,11 @@ BOOT_ROOT=
ROOT_DEVICE=
early_setup() {
- mkdir /proc
+ mkdir -p /proc /sys /mnt /tmp
+
mount -t proc proc /proc
- mkdir /mnt
+ mount -t sysfs sysfs /sys
+
modprobe -q mtdblock
}
diff --git a/recipes/initrdscripts/initramfs-uniboot_1.0.bb b/recipes/initrdscripts/initramfs-uniboot_1.0.bb
index 07e94f1dfc..fcbbdbd2cc 100644
--- a/recipes/initrdscripts/initramfs-uniboot_1.0.bb
+++ b/recipes/initrdscripts/initramfs-uniboot_1.0.bb
@@ -1,5 +1,5 @@
SRC_URI = "file://init.sh"
-PR = "r10"
+PR = "r11"
DESCRIPTON = "A modular initramfs init script system."
RRECOMMENDS = "kernel-module-mtdblock"
diff --git a/recipes/linphone/linphone_1.3.99.8.bb b/recipes/linphone/linphone_1.3.99.8.bb
index f96bd66b82..4e9b130c9a 100644
--- a/recipes/linphone/linphone_1.3.99.8.bb
+++ b/recipes/linphone/linphone_1.3.99.8.bb
@@ -1,6 +1,6 @@
DESCRIPTION = "SIP-based IP phone (Console edition)"
HOMEPAGE = "http://www.linphone.org/?lang=us"
-LICENSE = "GPL-2"
+LICENSE = "GPLv2"
DEPENDS = "libosip2 speex libogg alsa-lib readline"
PR = "r0"
diff --git a/recipes/mtools/files/no-x11.patch b/recipes/mtools/files/no-x11.patch
deleted file mode 100644
index 300f43f000..0000000000
--- a/recipes/mtools/files/no-x11.patch
+++ /dev/null
@@ -1,19 +0,0 @@
----
- Makefile.in | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- mtools-3.9.9.orig/Makefile.in
-+++ mtools-3.9.9/Makefile.in
-@@ -128,11 +128,11 @@ X_EXTRA_LIBS = @X_EXTRA_LIBS@
- X_PRE_LIBS = @X_PRE_LIBS@
- CFLAGS = $(CPPFLAGS) $(DEFS) $(MYCFLAGS) -I. @extraincludedir@ -I@srcdir@ $(USERCFLAGS)
- CXXFLAGS = $(CPPFLAGS) $(DEFS) $(MYCXXFLAGS) -I. @extraincludedir@ -I@srcdir@ $(USERCFLAGS)
- LINK = $(CC) $(LDFLAGS) $(USERLDFLAGS) @extralibdir@
- ALLLIBS = $(USERLDLIBS) $(MACHDEPLIBS) $(SHLIB) $(LIBS)
--X_LDFLAGS = $(X_EXTRA_LIBS) $(X_LIBS) $(X_PRE_LIBS) -lXau -lX11 $(LIBS)
-+X_LDFLAGS = $(X_EXTRA_LIBS) $(X_LIBS) $(X_PRE_LIBS) $(LIBS)
- X_CCFLAGS = $(X_CFLAGS) $(CFLAGS)
-
- all: mtools $(LINKS) mkmanifest @FLOPPYD@
-
- %.o: %.c
diff --git a/recipes/mtools/files/plainio.patch b/recipes/mtools/files/plainio.patch
new file mode 100644
index 0000000000..b4bd1d6615
--- /dev/null
+++ b/recipes/mtools/files/plainio.patch
@@ -0,0 +1,13 @@
+01_plainio.dpatch by Martin Pitt <mpitt@debian.org>
+Fixes garbage output of mtype under certain circumstances; closes #217413
+
+--- mtools-3.9.9/plain_io.c 2003-02-16 17:18:58.000000000 +0100
++++ mtools-3.9.9/plain_io.c 2004-01-14 00:56:11.000000000 +0100
+@@ -524,6 +524,7 @@
+ printOom();
+ return 0;
+ }
++ memset((void*)This, 0, sizeof(SimpleFile_t));
+ This->scsi_sector_size = 512;
+ This->seekable = 1;
+ #ifdef OS_hpux
diff --git a/recipes/mtools/files/use-sg_io.patch b/recipes/mtools/files/use-sg_io.patch
new file mode 100644
index 0000000000..33867deb1a
--- /dev/null
+++ b/recipes/mtools/files/use-sg_io.patch
@@ -0,0 +1,80 @@
+08.scsi.c.dpatch by Thomas Richter <thor@mail.math.tu-berlin.de>
+#393878 mzip unreliable on 2.6.18
+
+--- mtools-3.9.10/scsi.c 2002-11-02 13:09:28.000000000 +0100
++++ mtools-3.9.10/scsi.c 2006-10-17 21:11:01.000000000 +0200
+@@ -37,12 +37,7 @@
+ #endif
+
+ #ifdef OS_linux
+-#define SCSI_IOCTL_SEND_COMMAND 1
+-struct scsi_ioctl_command {
+- int inlen;
+- int outlen;
+- char cmd[5008];
+-};
++#include <scsi/sg.h>
+ #endif
+
+ #ifdef _SCO_DS
+--- mtools-3.9.10/scsi.c 2007-05-26 19:02:56.000000000 +1000
++++ mtools-3.9.10/scsi.c 2008-04-08 20:30:16.000000000 +1000
+@@ -148,37 +148,33 @@ int scsi_cmd(int fd, unsigned char *cdb,
+ return 0;
+
+ #elif defined OS_linux
+- struct scsi_ioctl_command my_scsi_cmd;
++ struct sg_io_hdr scsi_cmd;
+
++ /*
++ ** Init the command
++ */
++ memset(&scsi_cmd,0,sizeof(scsi_cmd));
++ scsi_cmd.interface_id = 'S';
++ scsi_cmd.dxfer_direction = (mode == SCSI_IO_READ)?(SG_DXFER_FROM_DEV):(SG_DXFER_TO_DEV);
++ scsi_cmd.cmd_len = cmdlen;
++ scsi_cmd.mx_sb_len = 0;
++ scsi_cmd.dxfer_len = len;
++ scsi_cmd.dxferp = data;
++ scsi_cmd.cmdp = cdb;
++ scsi_cmd.timeout = ~0; /* where is MAX_UINT defined??? */
++
++#if DEBUG
++ printf("CMD(%d): %02x%02x%02x%02x%02x%02x %sdevice\n",cmdlen,cdb[0],cdb[1],cdb[2],cdb[3],cdb[4],cdb[5],
++ (mode==SCSI_IO_READ)?("<-"):("->"));
++ printf("DATA : len = %d\n",len);
++#endif
+
+- memcpy(my_scsi_cmd.cmd, cdb, cmdlen); /* copy command */
+-
+- switch (mode) {
+- case SCSI_IO_READ:
+- my_scsi_cmd.inlen = 0;
+- my_scsi_cmd.outlen = len;
+- break;
+- case SCSI_IO_WRITE:
+- my_scsi_cmd.inlen = len;
+- my_scsi_cmd.outlen = 0;
+- memcpy(my_scsi_cmd.cmd + cmdlen,data,len);
+- break;
+- }
+-
+- if (ioctl(fd, SCSI_IOCTL_SEND_COMMAND, &my_scsi_cmd) < 0) {
++ if (ioctl(fd, SG_IO,&scsi_cmd) < 0) {
+ perror("scsi_io");
+ return -1;
+ }
+
+- switch (mode) {
+- case SCSI_IO_READ:
+- memcpy(data, &my_scsi_cmd.cmd[0], len);
+- break;
+- case SCSI_IO_WRITE:
+- break;
+- }
+-
+- return 0; /* where to get scsi status? */
++ return 0;
+
+ #elif (defined _SCO_DS) && (defined SCSIUSERCMD)
+ struct scsicmd my_scsi_cmd;
diff --git a/recipes/mtools/mtools-native_3.9.11.bb b/recipes/mtools/mtools-native_4.0.10.bb
index c82f7404eb..c82f7404eb 100644
--- a/recipes/mtools/mtools-native_3.9.11.bb
+++ b/recipes/mtools/mtools-native_4.0.10.bb
diff --git a/recipes/mtools/mtools_3.9.11.bb b/recipes/mtools/mtools_4.0.10.bb
index 4d1822f0d7..5b7f0cd890 100644
--- a/recipes/mtools/mtools_3.9.11.bb
+++ b/recipes/mtools/mtools_4.0.10.bb
@@ -1,16 +1,17 @@
# mtools OE build file
# Copyright (C) 2004-2006, Advanced Micro Devices, Inc. All Rights Reserved
+# Copyright (C) 2009, O.S. Systems Software Ltda. All Rights Reserved
# Released under the MIT license (see packages/COPYING)
DESCRIPTION="Mtools is a collection of utilities for accessing MS-DOS disks from Unix without mounting them."
HOMEPAGE="http://mtools.linux.lu"
LICENSE="GPL"
-PR = "r4"
-SRC_URI="http://mtools.linux.lu/mtools-${PV}.tar.gz \
+SRC_URI="http://ftp.gnu.org/gnu/mtools/mtools-${PV}.tar.bz2 \
file://m486.patch;patch=1 \
file://mtools-makeinfo.patch;patch=1 \
- file://no-x11.patch;patch=1"
+ file://plainio.patch;patch=1 \
+ file://use-sg_io.patch;patch=1"
S = "${WORKDIR}/mtools-${PV}"
diff --git a/recipes/ppp/ppp_2.4.3.bb b/recipes/ppp/ppp_2.4.3.bb
index 295a3fbe87..3b1f8ad28d 100644
--- a/recipes/ppp/ppp_2.4.3.bb
+++ b/recipes/ppp/ppp_2.4.3.bb
@@ -3,7 +3,7 @@ DESCRIPTION = "Point-to-Point Protocol (PPP) daemon"
HOMEPAGE = "http://samba.org/ppp/"
DEPENDS = "libpcap"
LICENSE = "BSD GPLv2"
-PR = "r5"
+PR = "r6"
SRC_URI = "http://ppp.samba.org/ftp/ppp/ppp-${PV}.tar.gz \
file://ppp-2.4.3-mppe-mppc-1.1.patch;patch=1 \
@@ -39,6 +39,7 @@ do_install_append () {
mkdir -p ${D}${bindir}/ ${D}${sysconfdir}/init.d
mkdir -p ${D}${sysconfdir}/ppp/ip-up.d/
mkdir -p ${D}${sysconfdir}/ppp/ip-down.d/
+ mkdir -p ${D}${sysconfdir}/ppp/peers/
install -m 0755 ${WORKDIR}/pon ${D}${bindir}/pon
install -m 0755 ${WORKDIR}/poff ${D}${bindir}/poff
install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/ppp
diff --git a/recipes/python/python-pycups_1.9.45.bb b/recipes/python/python-pycups_1.9.45.bb
new file mode 100644
index 0000000000..bd127d5559
--- /dev/null
+++ b/recipes/python/python-pycups_1.9.45.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "cups Python Bindings"
+SECTION = "devel/python"
+PRIORITY = "optional"
+LICENSE = "GPLv2"
+DEPENDS = "cups"
+SRCNAME = "pycups"
+
+SRC_URI = "http://cyberelk.net/tim/data/pycups/pycups-${PV}.tar.bz2"
+S = "${WORKDIR}/${SRCNAME}-${PV}"
+
+inherit distutils
+
+# used during compilation
+CFLAGS += -DVERSION=\\"${PV}\\"
+
+RDEPENDS = "python-core cups"
diff --git a/recipes/qemu/qemu-0.10.3/06_exit_segfault.patch b/recipes/qemu/qemu-0.10.3/06_exit_segfault.patch
new file mode 100644
index 0000000000..bc02d31839
--- /dev/null
+++ b/recipes/qemu/qemu-0.10.3/06_exit_segfault.patch
@@ -0,0 +1,45 @@
+#DPATCHLEVEL=0
+---
+# linux-user/main.c | 8 ++++----
+# 1 file changed, 4 insertions(+), 4 deletions(-)
+#
+Index: linux-user/main.c
+===================================================================
+--- linux-user/main.c.orig 2008-04-24 20:15:46.000000000 +0100
++++ linux-user/main.c 2008-04-24 20:15:53.000000000 +0100
+@@ -765,7 +765,7 @@
+ default:
+ printf ("Unhandled trap: 0x%x\n", trapnr);
+ cpu_dump_state(env, stderr, fprintf, 0);
+- exit (1);
++ _exit (1);
+ }
+ process_pending_signals (env);
+ }
+@@ -1697,7 +1697,7 @@
+ default:
+ printf ("Unhandled trap: 0x%x\n", trapnr);
+ cpu_dump_state(env, stderr, fprintf, 0);
+- exit (1);
++ _exit (1);
+ }
+ process_pending_signals (env);
+ }
+@@ -2026,7 +2026,7 @@
+ for(item = cpu_log_items; item->mask != 0; item++) {
+ printf("%-10s %s\n", item->name, item->help);
+ }
+- exit(1);
++ _exit(1);
+ }
+ cpu_set_log(mask);
+ } else if (!strcmp(r, "s")) {
+@@ -2045,7 +2045,7 @@
+ if (qemu_host_page_size == 0 ||
+ (qemu_host_page_size & (qemu_host_page_size - 1)) != 0) {
+ fprintf(stderr, "page size must be a power of two\n");
+- exit(1);
++ _exit(1);
+ }
+ } else if (!strcmp(r, "g")) {
+ gdbstub_port = atoi(argv[optind++]);
diff --git a/recipes/qemu/qemu-0.10.3/11_signal_sigaction.patch b/recipes/qemu/qemu-0.10.3/11_signal_sigaction.patch
new file mode 100644
index 0000000000..cd56541b71
--- /dev/null
+++ b/recipes/qemu/qemu-0.10.3/11_signal_sigaction.patch
@@ -0,0 +1,21 @@
+#DPATCHLEVEL=0
+---
+# linux-user/signal.c | 5 +++++
+# 1 file changed, 5 insertions(+)
+#
+Index: linux-user/signal.c
+===================================================================
+--- linux-user/signal.c.orig 2008-04-24 20:15:55.000000000 +0100
++++ linux-user/signal.c 2008-04-24 20:15:57.000000000 +0100
+@@ -512,6 +512,11 @@
+
+ if (sig < 1 || sig > TARGET_NSIG || sig == SIGKILL || sig == SIGSTOP)
+ return -EINVAL;
++
++ /* no point doing the stuff as those are not allowed for sigaction */
++ if ((sig == TARGET_SIGKILL) || (sig == TARGET_SIGSTOP))
++ return -EINVAL;
++
+ k = &sigact_table[sig - 1];
+ #if defined(DEBUG_SIGNAL)
+ fprintf(stderr, "sigaction sig=%d act=0x%08x, oact=0x%08x\n",
diff --git a/recipes/qemu/qemu-0.10.3/22_net_tuntap_stall.patch b/recipes/qemu/qemu-0.10.3/22_net_tuntap_stall.patch
new file mode 100644
index 0000000000..993960be98
--- /dev/null
+++ b/recipes/qemu/qemu-0.10.3/22_net_tuntap_stall.patch
@@ -0,0 +1,13 @@
+Index: qemu-0.10.3/net.c
+===================================================================
+--- qemu-0.10.3.orig/net.c 2009-05-19 17:46:54.650870195 +0400
++++ qemu-0.10.3/net.c 2009-05-19 17:47:05.612854521 +0400
+@@ -955,7 +955,7 @@
+ return -1;
+ }
+ memset(&ifr, 0, sizeof(ifr));
+- ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
++ ifr.ifr_flags = IFF_TAP | IFF_NO_PI | IFF_ONE_QUEUE;
+ if (ifname[0] != '\0')
+ pstrcpy(ifr.ifr_name, IFNAMSIZ, ifname);
+ else
diff --git a/recipes/qemu/qemu-0.10.3/31_syscalls.patch b/recipes/qemu/qemu-0.10.3/31_syscalls.patch
new file mode 100644
index 0000000000..20a1499d18
--- /dev/null
+++ b/recipes/qemu/qemu-0.10.3/31_syscalls.patch
@@ -0,0 +1,22 @@
+Index: linux-user/syscall.c
+===================================================================
+--- linux-user/syscall.c.orig 2008-04-24 20:15:46.000000000 +0100
++++ linux-user/syscall.c 2008-04-24 20:15:59.000000000 +0100
+@@ -250,6 +250,7 @@
+ extern int setresgid(gid_t, gid_t, gid_t);
+ extern int getresgid(gid_t *, gid_t *, gid_t *);
+ extern int setgroups(int, gid_t *);
++extern int uselib(const char*);
+
+ #define ERRNO_TABLE_SIZE 1200
+
+@@ -4041,7 +4042,8 @@
+ #endif
+ #ifdef TARGET_NR_uselib
+ case TARGET_NR_uselib:
+- goto unimplemented;
++ ret = get_errno(uselib(path((const char*)arg1)));
++ break;
+ #endif
+ #ifdef TARGET_NR_swapon
+ case TARGET_NR_swapon:
diff --git a/recipes/qemu/qemu-0.10.3/32_syscall_sysctl.patch b/recipes/qemu/qemu-0.10.3/32_syscall_sysctl.patch
new file mode 100644
index 0000000000..2a670c90be
--- /dev/null
+++ b/recipes/qemu/qemu-0.10.3/32_syscall_sysctl.patch
@@ -0,0 +1,55 @@
+#DPATCHLEVEL=0
+---
+# linux-user/syscall.c | 32 +++++++++++++++++++++++++++++---
+# 1 file changed, 29 insertions(+), 3 deletions(-)
+#
+Index: linux-user/syscall.c
+===================================================================
+--- linux-user/syscall.c.orig 2009-05-19 17:50:28.000000000 +0400
++++ linux-user/syscall.c 2009-05-19 17:52:19.094103462 +0400
+@@ -55,6 +55,7 @@
+ #include <netinet/ip.h>
+ #include <netinet/tcp.h>
+ #include <qemu-common.h>
++#include <sys/sysctl.h>
+ #ifdef HAVE_GPROF
+ #include <sys/gmon.h>
+ #endif
+@@ -5193,9 +5194,34 @@
+ break;
+ #endif
+ case TARGET_NR__sysctl:
+- /* We don't implement this, but ENOTDIR is always a safe
+- return value. */
+- ret = -TARGET_ENOTDIR;
++ {
++ struct __sysctl_args *args = (struct __sysctl_args *) arg1;
++ int *name_target, *name, nlen, *oldlenp, oldlen, newlen, i;
++ void *oldval, *newval;
++
++ name_target = (int *) tswapl((long) args->name);
++ nlen = tswapl(args->nlen);
++ oldval = (void *) tswapl((long) args->oldval);
++ oldlenp = (int *) tswapl((long) args->oldlenp);
++ oldlen = tswapl(*oldlenp);
++ newval = (void *) tswapl((long) args->newval);
++ newlen = tswapl(args->newlen);
++
++ name = alloca(nlen * sizeof (int));
++ for (i = 0; i < nlen; i++)
++ name[i] = tswapl(name_target[i]);
++
++ if (nlen == 2 && name[0] == CTL_KERN && name[1] == KERN_VERSION) {
++ ret = get_errno(
++ sysctl(name, nlen, oldval, &oldlen, newval, newlen));
++ if (!is_error(ret)) {
++ *oldlenp = tswapl(oldlen);
++ }
++ } else {
++ gemu_log("qemu: Unsupported sysctl name\n");
++ ret = -ENOSYS;
++ }
++ }
+ break;
+ case TARGET_NR_sched_setparam:
+ {
diff --git a/recipes/qemu/qemu-0.10.3/52_ne2000_return.patch b/recipes/qemu/qemu-0.10.3/52_ne2000_return.patch
new file mode 100644
index 0000000000..e364bff731
--- /dev/null
+++ b/recipes/qemu/qemu-0.10.3/52_ne2000_return.patch
@@ -0,0 +1,17 @@
+---
+ hw/ne2000.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: trunk/hw/ne2000.c
+===================================================================
+--- trunk.orig/hw/ne2000.c 2008-04-24 20:15:46.000000000 +0100
++++ trunk/hw/ne2000.c 2008-04-24 20:16:05.000000000 +0100
+@@ -217,7 +217,7 @@
+ NE2000State *s = opaque;
+
+ if (s->cmd & E8390_STOP)
+- return 1;
++ return 0;
+ return !ne2000_buffer_full(s);
+ }
+
diff --git a/recipes/qemu/qemu-0.10.3/61_safe_64bit_int.patch b/recipes/qemu/qemu-0.10.3/61_safe_64bit_int.patch
new file mode 100644
index 0000000000..80e7b22e27
--- /dev/null
+++ b/recipes/qemu/qemu-0.10.3/61_safe_64bit_int.patch
@@ -0,0 +1,27 @@
+#DPATCHLEVEL=0
+---
+# dyngen-exec.h | 4 ++--
+# 1 file changed, 2 insertions(+), 2 deletions(-)
+#
+Index: dyngen-exec.h
+===================================================================
+--- dyngen-exec.h.orig 2009-05-01 21:02:44.000000000 +0400
++++ dyngen-exec.h 2009-05-19 17:56:28.164854448 +0400
+@@ -41,7 +41,7 @@
+ // Linux/Sparc64 defines uint64_t
+ #if !(defined (__sparc_v9__) && defined(__linux__)) && !(defined(__APPLE__) && defined(__x86_64__))
+ /* XXX may be done for all 64 bits targets ? */
+-#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(_ARCH_PPC64)
++#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(_ARCH_PPC64) || defined(__sparc__)
+ typedef unsigned long uint64_t;
+ #else
+ typedef unsigned long long uint64_t;
+@@ -58,7 +58,7 @@
+ typedef signed int int32_t;
+ // Linux/Sparc64 defines int64_t
+ #if !(defined (__sparc_v9__) && defined(__linux__)) && !(defined(__APPLE__) && defined(__x86_64__))
+-#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(_ARCH_PPC64)
++#if defined (__x86_64__) || defined(__ia64) || defined(__s390x__) || defined(__alpha__) || defined(_ARCH_PPC64) || defined(__sparc__)
+ typedef signed long int64_t;
+ #else
+ typedef signed long long int64_t;
diff --git a/recipes/qemu/qemu-0.10.3/63_sparc_build.patch b/recipes/qemu/qemu-0.10.3/63_sparc_build.patch
new file mode 100644
index 0000000000..097f55a09e
--- /dev/null
+++ b/recipes/qemu/qemu-0.10.3/63_sparc_build.patch
@@ -0,0 +1,18 @@
+#DPATCHLEVEL=0
+---
+# sparc.ld | 2 +-
+# 1 file changed, 1 insertion(+), 1 deletion(-)
+#
+Index: sparc.ld
+===================================================================
+--- sparc.ld.orig 2008-04-24 20:15:46.000000000 +0100
++++ sparc.ld 2008-04-24 20:16:07.000000000 +0100
+@@ -6,7 +6,7 @@
+ SECTIONS
+ {
+ /* Read-only sections, merged into text segment: */
+- . = 0x60000000 + SIZEOF_HEADERS;
++ . = 0x60000000 + 0x400;
+ .interp : { *(.interp) }
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
diff --git a/recipes/qemu/qemu-0.10.3/64_ppc_asm_constraints.patch b/recipes/qemu/qemu-0.10.3/64_ppc_asm_constraints.patch
new file mode 100644
index 0000000000..7562daf77b
--- /dev/null
+++ b/recipes/qemu/qemu-0.10.3/64_ppc_asm_constraints.patch
@@ -0,0 +1,18 @@
+#DPATCHLEVEL=1
+---
+# cpu-all.h | 2 +-
+# 1 file changed, 1 insertion(+), 1 deletion(-)
+#
+Index: qemu-0.10.3/cpu-all.h
+===================================================================
+--- qemu-0.10.3.orig/cpu-all.h 2009-05-01 21:02:44.000000000 +0400
++++ qemu-0.10.3/cpu-all.h 2009-05-19 17:59:28.357103179 +0400
+@@ -288,7 +288,7 @@
+ static inline void stl_le_p(void *ptr, int v)
+ {
+ #ifdef _ARCH_PPC
+- __asm__ __volatile__ ("stwbrx %1,0,%2" : "=m" (*(uint32_t *)ptr) : "r" (v), "r" (ptr));
++ __asm__ __volatile__ ("stwbrx %0,0,%1" : : "r" (v), "r" (ptr) : "memory");
+ #else
+ uint8_t *p = ptr;
+ p[0] = v;
diff --git a/recipes/qemu/qemu-0.10.3/66_tls_ld.patch b/recipes/qemu/qemu-0.10.3/66_tls_ld.patch
new file mode 100644
index 0000000000..cbd3f873d8
--- /dev/null
+++ b/recipes/qemu/qemu-0.10.3/66_tls_ld.patch
@@ -0,0 +1,55 @@
+---
+ arm.ld | 7 +++++++
+ i386.ld | 7 +++++++
+ 2 files changed, 14 insertions(+)
+
+Index: arm.ld
+===================================================================
+--- arm.ld.orig 2008-04-24 20:15:45.000000000 +0100
++++ arm.ld 2008-04-24 20:16:11.000000000 +0100
+@@ -26,6 +26,10 @@
+ { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
+ .rela.rodata :
+ { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
++ .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
++ .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
++ .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
++ .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+ .rel.got : { *(.rel.got) }
+ .rela.got : { *(.rela.got) }
+ .rel.ctors : { *(.rel.ctors) }
+@@ -58,6 +62,9 @@
+ .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
+ __exidx_end = .;
+ .reginfo : { *(.reginfo) }
++ /* Thread Local Storage sections */
++ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
++ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+ /* Adjust the address for the data segment. We want to adjust up to
+ the same address within the page on the next page up. */
+ . = ALIGN(0x100000) + (. & (0x100000 - 1));
+Index: i386.ld
+===================================================================
+--- i386.ld.orig 2008-04-24 20:15:45.000000000 +0100
++++ i386.ld 2008-04-24 20:16:11.000000000 +0100
+@@ -28,6 +28,10 @@
+ { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
+ .rela.rodata :
+ { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
++ .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
++ .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
++ .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
++ .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
+ .rel.got : { *(.rel.got) }
+ .rela.got : { *(.rela.got) }
+ .rel.ctors : { *(.rel.ctors) }
+@@ -53,6 +57,9 @@
+ _etext = .;
+ PROVIDE (etext = .);
+ .fini : { *(.fini) } =0x47ff041f
++ /* Thread Local Storage sections */
++ .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
++ .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
+ . = ALIGN(32 / 8);
+ PROVIDE (__preinit_array_start = .);
+ .preinit_array : { *(.preinit_array) }
diff --git a/recipes/qemu/qemu-0.10.3/91-oh-sdl-cursor.patch b/recipes/qemu/qemu-0.10.3/91-oh-sdl-cursor.patch
new file mode 100644
index 0000000000..b3d95a4534
--- /dev/null
+++ b/recipes/qemu/qemu-0.10.3/91-oh-sdl-cursor.patch
@@ -0,0 +1,18 @@
+=== modified file 'sdl.c'
+---
+ sdl.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: sdl.c
+===================================================================
+--- sdl.c.orig 2008-04-24 20:15:45.000000000 +0100
++++ sdl.c 2008-04-24 20:16:12.000000000 +0100
+@@ -247,7 +247,7 @@
+
+ if (kbd_mouse_is_absolute()) {
+ SDL_ShowCursor(1);
+- SDL_SetCursor(sdl_cursor_hidden);
++ /* SDL_SetCursor(sdl_cursor_hidden); */
+ } else {
+ SDL_ShowCursor(0);
+ }
diff --git a/recipes/qemu/qemu-0.10.3/fix_baum_c_compilation.patch b/recipes/qemu/qemu-0.10.3/fix_baum_c_compilation.patch
new file mode 100644
index 0000000000..a2eb438ed9
--- /dev/null
+++ b/recipes/qemu/qemu-0.10.3/fix_baum_c_compilation.patch
@@ -0,0 +1,30 @@
+Index: trunk/hw/baum.c
+===================================================================
+--- trunk.orig/hw/baum.c 2008-11-29 05:12:40.418390606 +0300
++++ trunk/hw/baum.c 2008-11-29 05:13:11.498378426 +0300
+@@ -569,8 +569,10 @@ CharDriverState *chr_baum_init(void)
+ CharDriverState *chr;
+ brlapi_handle_t *handle;
+ #ifdef CONFIG_SDL
++#ifdef SDL_VIDEO_DRIVER_X11
+ SDL_SysWMinfo info;
+ #endif
++#endif
+ int tty;
+
+ baum = qemu_mallocz(sizeof(BaumDriverState));
+@@ -605,12 +607,14 @@ CharDriverState *chr_baum_init(void)
+ }
+
+ #ifdef CONFIG_SDL
++#ifdef SDL_VIDEO_DRIVER_X11
+ memset(&info, 0, sizeof(info));
+ SDL_VERSION(&info.version);
+ if (SDL_GetWMInfo(&info))
+ tty = info.info.x11.wmwindow;
+ else
+ #endif
++#endif
+ tty = BRLAPI_TTY_DEFAULT;
+
+ if (brlapi__enterTtyMode(handle, tty, NULL) == -1) {
diff --git a/recipes/qemu/qemu-0.10.3/fix_segfault.patch b/recipes/qemu/qemu-0.10.3/fix_segfault.patch
new file mode 100644
index 0000000000..32ca3c0b6b
--- /dev/null
+++ b/recipes/qemu/qemu-0.10.3/fix_segfault.patch
@@ -0,0 +1,37 @@
+---
+ linux-user/syscall.c | 22 ----------------------
+ 1 file changed, 22 deletions(-)
+
+Index: qemu-0.10.3/linux-user/syscall.c
+===================================================================
+--- qemu-0.10.3.orig/linux-user/syscall.c 2009-05-19 18:18:04.000000000 +0400
++++ qemu-0.10.3/linux-user/syscall.c 2009-05-19 18:18:40.397103379 +0400
+@@ -6024,28 +6024,6 @@
+ goto unimplemented_nowarn;
+ #endif
+
+-#ifdef TARGET_NR_clock_gettime
+- case TARGET_NR_clock_gettime:
+- {
+- struct timespec ts;
+- ret = get_errno(clock_gettime(arg1, &ts));
+- if (!is_error(ret)) {
+- host_to_target_timespec(arg2, &ts);
+- }
+- break;
+- }
+-#endif
+-#ifdef TARGET_NR_clock_getres
+- case TARGET_NR_clock_getres:
+- {
+- struct timespec ts;
+- ret = get_errno(clock_getres(arg1, &ts));
+- if (!is_error(ret)) {
+- host_to_target_timespec(arg2, &ts);
+- }
+- break;
+- }
+-#endif
+ #ifdef TARGET_NR_clock_nanosleep
+ case TARGET_NR_clock_nanosleep:
+ {
diff --git a/recipes/qemu/qemu-0.10.3/no-strip.patch b/recipes/qemu/qemu-0.10.3/no-strip.patch
new file mode 100644
index 0000000000..4813dd4e2b
--- /dev/null
+++ b/recipes/qemu/qemu-0.10.3/no-strip.patch
@@ -0,0 +1,26 @@
+Index: trunk/Makefile
+===================================================================
+--- trunk.orig/Makefile 2008-04-24 20:15:37.000000000 +0100
++++ trunk/Makefile 2008-04-24 20:16:30.000000000 +0100
+@@ -196,7 +196,7 @@
+ install: all $(if $(BUILD_DOCS),install-doc)
+ mkdir -p "$(DESTDIR)$(bindir)"
+ ifneq ($(TOOLS),)
+- $(INSTALL) -m 755 -s $(TOOLS) "$(DESTDIR)$(bindir)"
++ $(INSTALL) -m 755 $(TOOLS) "$(DESTDIR)$(bindir)"
+ endif
+ mkdir -p "$(DESTDIR)$(datadir)"
+ set -e; for x in bios.bin vgabios.bin vgabios-cirrus.bin ppc_rom.bin \
+Index: trunk/Makefile.target
+===================================================================
+--- trunk.orig/Makefile.target 2008-04-24 20:15:37.000000000 +0100
++++ trunk/Makefile.target 2008-04-24 20:16:30.000000000 +0100
+@@ -685,7 +685,7 @@
+
+ install: all
+ ifneq ($(PROGS),)
+- $(INSTALL) -m 755 -s $(PROGS) "$(DESTDIR)$(bindir)"
++ $(INSTALL) -m 755 $(PROGS) "$(DESTDIR)$(bindir)"
+ endif
+
+ # Include automatically generated dependency files
diff --git a/recipes/qemu/qemu_0.10.3.bb b/recipes/qemu/qemu_0.10.3.bb
index d6ad1d7e4a..f65f60decd 100644
--- a/recipes/qemu/qemu_0.10.3.bb
+++ b/recipes/qemu/qemu_0.10.3.bb
@@ -1,14 +1,27 @@
LICENSE = "GPL"
DEPENDS = "zlib"
-# Need to port OE patches there
-DEFAULT_PREFERENCE = "-1"
+PR = "r1"
FILESPATH = "${FILE_DIRNAME}/qemu-${PV}"
FILESDIR = "${WORKDIR}"
SRC_URI = "\
http://download.savannah.gnu.org/releases/qemu/qemu-${PV}.tar.gz \
+ file://06_exit_segfault.patch;patch=1;pnum=0 \
+ file://11_signal_sigaction.patch;patch=1;pnum=0 \
+ file://22_net_tuntap_stall.patch;patch=1 \
+ file://31_syscalls.patch;patch=1;pnum=0 \
+ file://32_syscall_sysctl.patch;patch=1;pnum=0 \
+ file://52_ne2000_return.patch;patch=1 \
+ file://61_safe_64bit_int.patch;patch=1;pnum=0 \
+ file://63_sparc_build.patch;patch=1;pnum=0 \
+ file://64_ppc_asm_constraints.patch;patch=1 \
+ file://66_tls_ld.patch;patch=1;pnum=0 \
+ file://91-oh-sdl-cursor.patch;patch=1;pnum=0 \
+ file://fix_segfault.patch;patch=1 \
+ file://no-strip.patch;patch=1 \
+ file://fix_baum_c_compilation.patch;patch=1 \
"
S = "${WORKDIR}/qemu-${PV}"
diff --git a/recipes/rt2x00/rt61-firmware_1.2.bb b/recipes/rt2x00/rt61-firmware_1.2.bb
index ae683c8060..9fad60d906 100644
--- a/recipes/rt2x00/rt61-firmware_1.2.bb
+++ b/recipes/rt2x00/rt61-firmware_1.2.bb
@@ -7,7 +7,7 @@ S = "${WORKDIR}/RT61_Firmware_V${PV}"
do_install() {
install -d ${D}/${base_libdir}/firmware
- install -m 0644 rt61.bin ${D}/${base_libdir}/firmware/
+ install -m 0644 *.bin ${D}/${base_libdir}/firmware/
}
FILES_${PN} = "${base_libdir}/firmware/"
diff --git a/recipes/system-config-printer/system-config-printer_1.1.7.bb b/recipes/system-config-printer/system-config-printer_1.1.7.bb
new file mode 100644
index 0000000000..5a6d6320ac
--- /dev/null
+++ b/recipes/system-config-printer/system-config-printer_1.1.7.bb
@@ -0,0 +1,22 @@
+DESCRIPTION = "cups Python Bindings"
+SECTION = "devel/python"
+PRIORITY = "optional"
+LICENSE = "GPLv2"
+DEPENDS = "cups"
+RDEPENDS_python-cupshelpers += "python-pprint python-netclient python-misc"
+PR = "r2"
+
+SRC_URI = "http://cyberelk.net/tim/data/${PN}/1.1/${PN}-${PV}.tar.bz2"
+S = "${WORKDIR}/${PN}-${PV}"
+
+inherit distutils
+
+do_configure_prepend() {
+ # disable xmlto usage since we won't use manpages
+ sed -i 's,xmlto,echo xmlto,g' ${S}/Makefile*
+}
+
+PACKAGES += "python-cupshelpers"
+
+FILES_${PN} = "" # we're not going to support it for now
+FILES_python-cupshelpers = "${libdir}"
diff --git a/recipes/udev/udev_141.bb b/recipes/udev/udev_141.bb
index 1482601bf9..e7438fb4d6 100644
--- a/recipes/udev/udev_141.bb
+++ b/recipes/udev/udev_141.bb
@@ -6,7 +6,7 @@ LICENSE = "GPL"
# Untested
DEFAULT_PREFERENCE = "-1"
-PR = "r4"
+PR = "r6"
SRC_URI = "http://kernel.org/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
file://mount.blacklist \
@@ -61,7 +61,8 @@ do_install () {
install -d ${D}${sysconfdir}/default
install -m 0755 ${WORKDIR}/default ${D}${sysconfdir}/default/udev
- install -d ${D}${sysconfdir}/udev/rules.d/
+ mv ${D}${base_libdir}/udev/rules.d ${D}${sysconfdir}/udev/
+ ln -sf ${sysconfdir}/udev/rules.d ${D}${base_libdir}/udev/
install -m 0644 ${WORKDIR}/mount.blacklist ${D}${sysconfdir}/udev/
install -m 0644 ${WORKDIR}/local.rules ${D}${sysconfdir}/udev/rules.d/local.rules
@@ -91,6 +92,7 @@ do_install_append_h2200() {
do_stage_append() {
install -m 0644 ${S}/extras/volume_id/lib/libvolume_id.h ${STAGING_INCDIR}
oe_libinstall -C extras/volume_id/lib -so libvolume_id ${STAGING_LIBDIR}
+ oe_libinstall -C udev/lib -so libudev ${STAGING_LIBDIR}
}
diff --git a/recipes/xorg-driver/xf86-video-geode_2.11.2.bb b/recipes/xorg-driver/xf86-video-geode_2.11.2.bb
new file mode 100644
index 0000000000..380ce2ea0b
--- /dev/null
+++ b/recipes/xorg-driver/xf86-video-geode_2.11.2.bb
@@ -0,0 +1,5 @@
+require xorg-driver-video.inc
+PE = "1"
+
+COMPATIBLE_HOST = 'i.86.*-linux'
+DESCRIPTION = "X.org server -- Geode GX2/LX display driver"