From 0f4562c2e5d8b535d31fe9183022cac3af0d3d8c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 6 Nov 2011 17:43:57 +0100 Subject: [PATCH 01/89] linux: run depmod in 'scripts/image' instead in every package Signed-off-by: Stephan Raue --- packages/linux-drivers/AF9035/install | 5 ----- packages/linux-drivers/AF9035/meta | 2 +- packages/linux-drivers/a867_drv/install | 5 ----- packages/linux-drivers/a867_drv/meta | 2 +- packages/linux-drivers/asix-ax887xx/install | 5 ----- packages/linux-drivers/asix-ax887xx/meta | 2 +- packages/linux-drivers/bcm_sta/install | 5 ----- packages/linux-drivers/bcm_sta/meta | 2 +- packages/linux/install | 5 ----- packages/multimedia/crystalhd/install | 5 ----- packages/multimedia/crystalhd/meta | 2 +- packages/x11/driver/xf86-video-fglrx/install | 7 ------- packages/x11/driver/xf86-video-nvidia/install | 7 ------- scripts/image | 8 ++++++++ 14 files changed, 13 insertions(+), 49 deletions(-) diff --git a/packages/linux-drivers/AF9035/install b/packages/linux-drivers/AF9035/install index d6ae5e6c2e..8d14198583 100755 --- a/packages/linux-drivers/AF9035/install +++ b/packages/linux-drivers/AF9035/install @@ -31,8 +31,3 @@ mkdir -p $INSTALL/lib/modules/$VER/AF9035 mkdir -p $INSTALL/lib/firmware cp $PKG_DIR/firmware/*.fw $INSTALL/lib/firmware - -$ROOT/$TOOLCHAIN/sbin/depmod -b $INSTALL $VER > /dev/null -for i in `ls $INSTALL/lib/modules/*/modules.* | grep -v modules.dep | grep -v modules.alias | grep -v modules.symbols`; do - rm -f $i -done diff --git a/packages/linux-drivers/AF9035/meta b/packages/linux-drivers/AF9035/meta index 67803f5d29..5a10f15ee5 100644 --- a/packages/linux-drivers/AF9035/meta +++ b/packages/linux-drivers/AF9035/meta @@ -26,7 +26,7 @@ PKG_LICENSE="GPL" PKG_SITE="http://www.abclinuxu.cz/hardware/pridavne-karty/televizni-karty/dvb-t/usb/aver-tv-volar-hd-a835" PKG_URL="http://xgazza.altervista.org/Linux/DVB/Drivers/${PKG_NAME}_${PKG_VERSION}.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain linux busybox-hosttools" +PKG_BUILD_DEPENDS="toolchain linux" PKG_PRIORITY="optional" PKG_SECTION="driver" PKG_SHORTDESC="AF9035 driver: Afa Technologies Inc. AF9035A USB Device" diff --git a/packages/linux-drivers/a867_drv/install b/packages/linux-drivers/a867_drv/install index 238f6a8dc2..d31dae7330 100755 --- a/packages/linux-drivers/a867_drv/install +++ b/packages/linux-drivers/a867_drv/install @@ -26,8 +26,3 @@ VER=`ls $BUILD/linux*/modules/lib/modules` mkdir -p $INSTALL/lib/modules/$VER/a867 cp $PKG_BUILD/a867.ko $INSTALL/lib/modules/$VER/a867/ - -$ROOT/$TOOLCHAIN/sbin/depmod -b $INSTALL $VER > /dev/null -for i in `ls $INSTALL/lib/modules/*/modules.* | grep -v modules.dep | grep -v modules.alias | grep -v modules.symbols`; do - rm -f $i -done diff --git a/packages/linux-drivers/a867_drv/meta b/packages/linux-drivers/a867_drv/meta index 7178a7209e..cee50485a5 100644 --- a/packages/linux-drivers/a867_drv/meta +++ b/packages/linux-drivers/a867_drv/meta @@ -26,7 +26,7 @@ PKG_LICENSE="GPL" PKG_SITE="http://www.avermedia.com/Product/ProductDetail.aspx?Id=516&tab=APDriver" PKG_URL="http://www.avermedia.com/avertv/Upload/Download/${PKG_NAME}_${PKG_VERSION}.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain linux busybox-hosttools" +PKG_BUILD_DEPENDS="toolchain linux" PKG_PRIORITY="optional" PKG_SECTION="driver" PKG_SHORTDESC="AVerTV Volar HD Nano A867R driver" diff --git a/packages/linux-drivers/asix-ax887xx/install b/packages/linux-drivers/asix-ax887xx/install index 22d7f9193e..1265bf3cbf 100755 --- a/packages/linux-drivers/asix-ax887xx/install +++ b/packages/linux-drivers/asix-ax887xx/install @@ -26,8 +26,3 @@ VER=`ls $BUILD/linux*/modules/lib/modules` mkdir -p $INSTALL/lib/modules/$VER/asix-ax887xx cp $PKG_BUILD/asix.ko $INSTALL/lib/modules/$VER/asix-ax887xx - -$ROOT/$TOOLCHAIN/sbin/depmod -b $INSTALL $VER > /dev/null -for i in `ls $INSTALL/lib/modules/*/modules.* | grep -v modules.dep | grep -v modules.alias | grep -v modules.symbols`; do - rm -f $i -done diff --git a/packages/linux-drivers/asix-ax887xx/meta b/packages/linux-drivers/asix-ax887xx/meta index fe3d033f7f..9716d8038b 100644 --- a/packages/linux-drivers/asix-ax887xx/meta +++ b/packages/linux-drivers/asix-ax887xx/meta @@ -26,7 +26,7 @@ PKG_LICENSE="GPL" PKG_SITE="http://www.asix.com.tw" PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain linux busybox-hosttools" +PKG_BUILD_DEPENDS="toolchain linux" PKG_PRIORITY="optional" PKG_SECTION="driver" PKG_SHORTDESC="asix-ax887xx: ASIX AX88772B/772A/760/772/178 Linux USB LANDriver" diff --git a/packages/linux-drivers/bcm_sta/install b/packages/linux-drivers/bcm_sta/install index 14c895425d..067e2d299a 100755 --- a/packages/linux-drivers/bcm_sta/install +++ b/packages/linux-drivers/bcm_sta/install @@ -27,8 +27,3 @@ VER=`ls $BUILD/linux*/modules/lib/modules` mkdir -p $INSTALL/lib/modules/$VER/bcm_sta [ "$TARGET_ARCH" = "i386" ] && cp $PKG_BUILD/x86-32/wl.ko $INSTALL/lib/modules/$VER/bcm_sta [ "$TARGET_ARCH" = "x86_64" ] && cp $PKG_BUILD/x86-64/wl.ko $INSTALL/lib/modules/$VER/bcm_sta - -$ROOT/$TOOLCHAIN/sbin/depmod -b $INSTALL $VER > /dev/null -for i in `ls $INSTALL/lib/modules/*/modules.* | grep -v modules.dep | grep -v modules.alias | grep -v modules.symbols`; do - rm -f $i -done diff --git a/packages/linux-drivers/bcm_sta/meta b/packages/linux-drivers/bcm_sta/meta index 540b86a4bd..0dfff5c60d 100644 --- a/packages/linux-drivers/bcm_sta/meta +++ b/packages/linux-drivers/bcm_sta/meta @@ -26,7 +26,7 @@ PKG_LICENSE="nonfree" PKG_SITE="http://www.broadcom.com/" PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain linux busybox-hosttools" +PKG_BUILD_DEPENDS="toolchain linux" PKG_PRIORITY="optional" PKG_SECTION="driver" PKG_SHORTDESC="bcm_sta: Broadcom's BCM4311-, BCM4312-, BCM4313-, BCM4321-, BCM4322-, BCM43224-, and BCM43225-based WLAN driver" diff --git a/packages/linux/install b/packages/linux/install index a2162fbb64..3164ccfa44 100755 --- a/packages/linux/install +++ b/packages/linux/install @@ -30,11 +30,6 @@ mkdir -p $INSTALL/lib/modules/$VER cp -r $PKG_BUILD/modules/* $INSTALL rm -f $INSTALL/lib/modules/$VER/modules.* -$ROOT/$TOOLCHAIN/sbin/depmod -b $INSTALL $VER > /dev/null -for i in `ls $INSTALL/lib/modules/*/modules.* | grep -v modules.dep | grep -v modules.alias | grep -v modules.symbols`; do - rm -f $i -done - # copy kernel firmwares (if present and requested) mkdir -p $INSTALL/lib/firmware [ -d $PKG_BUILD/modules/lib/firmware ] && \ diff --git a/packages/multimedia/crystalhd/install b/packages/multimedia/crystalhd/install index 4015b22193..b39ef43bc2 100755 --- a/packages/multimedia/crystalhd/install +++ b/packages/multimedia/crystalhd/install @@ -35,8 +35,3 @@ mkdir -p $INSTALL/lib/udev/rules.d mkdir -p $INSTALL/lib/modules/$VER/crystalhd cp $PKG_BUILD/driver/linux/crystalhd.ko $INSTALL/lib/modules/$VER/crystalhd - -$ROOT/$TOOLCHAIN/sbin/depmod -b $INSTALL $VER > /dev/null -for i in `ls $INSTALL/lib/modules/*/modules.* | grep -v modules.dep | grep -v modules.alias | grep -v modules.symbols`; do - rm -f $i -done diff --git a/packages/multimedia/crystalhd/meta b/packages/multimedia/crystalhd/meta index d2dd717cde..f3e3bb4152 100644 --- a/packages/multimedia/crystalhd/meta +++ b/packages/multimedia/crystalhd/meta @@ -26,7 +26,7 @@ PKG_LICENSE="GPL" PKG_SITE="http://code.google.com/p/crystalhd-for-osx/" PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="linux" -PKG_BUILD_DEPENDS="toolchain busybox-hosttools linux" +PKG_BUILD_DEPENDS="toolchain linux" PKG_PRIORITY="optional" PKG_SECTION="multimedia" PKG_SHORTDESC="crystalhd: OSX and Linux driver and library support for the Broadcom Crystal HD Video Accelerator." diff --git a/packages/x11/driver/xf86-video-fglrx/install b/packages/x11/driver/xf86-video-fglrx/install index 98965e03b2..165db6f21b 100755 --- a/packages/x11/driver/xf86-video-fglrx/install +++ b/packages/x11/driver/xf86-video-fglrx/install @@ -22,8 +22,6 @@ . config/options $1 -$SCRIPTS/build busybox-hosttools - VER=`ls $BUILD/linux*/modules/lib/modules` if [ "$TARGET_ARCH" = i386 ]; then @@ -40,11 +38,6 @@ fi mkdir -p $INSTALL/lib/modules/$VER/ati cp $PKG_BUILD/common/lib/modules/fglrx/build_mod/2.6.x/fglrx.ko $INSTALL/lib/modules/$VER/ati -$ROOT/$TOOLCHAIN/sbin/depmod -b $INSTALL $VER > /dev/null -for i in `ls $INSTALL/lib/modules/*/modules.* | grep -v modules.dep | grep -v modules.alias | grep -v modules.symbols`; do - rm -f $i -done - # X.Org modules mkdir -p $INSTALL/$XORG_PATH_MODULES cp -P $PKG_BUILD/$BASEDIR/usr/X11R6/$LIBDIR/modules/*.so $INSTALL/$XORG_PATH_MODULES diff --git a/packages/x11/driver/xf86-video-nvidia/install b/packages/x11/driver/xf86-video-nvidia/install index c2ef9a73d2..10ffeebe25 100755 --- a/packages/x11/driver/xf86-video-nvidia/install +++ b/packages/x11/driver/xf86-video-nvidia/install @@ -22,8 +22,6 @@ . config/options $1 -$SCRIPTS/build busybox-hosttools - VER=`ls $BUILD/linux*/modules/lib/modules` mkdir -p $INSTALL/$XORG_PATH_MODULES/drivers @@ -46,11 +44,6 @@ mkdir -p $INSTALL/usr/lib mkdir -p $INSTALL/lib/modules/$VER/nvidia cp $PKG_BUILD/kernel/nvidia.ko $INSTALL/lib/modules/$VER/nvidia -$ROOT/$TOOLCHAIN/sbin/depmod -b $INSTALL $VER > /dev/null -for i in `ls $INSTALL/lib/modules/*/modules.* | grep -v modules.dep | grep -v modules.alias | grep -v modules.symbols`; do - rm -f $i -done - mkdir -p $INSTALL/usr/bin cp $PKG_BUILD/nvidia-smi $INSTALL/usr/bin diff --git a/scripts/image b/scripts/image index f2ae1a0bd7..edee6cb589 100755 --- a/scripts/image +++ b/scripts/image @@ -26,6 +26,7 @@ $SCRIPTS/checkdeps build $SCRIPTS/build toolchain $SCRIPTS/build squashfs $SCRIPTS/build fakeroot +$SCRIPTS/build busybox-hosttools export INSTALL=$BUILD/image/system @@ -146,6 +147,13 @@ IMAGE_NAME="$DISTRONAME-$TARGET_VERSION" # OEM packages [ "$OEM_SUPPORT" = "yes" ] && $SCRIPTS/install oem +# run depmod + KVER=`ls $BUILD/linux-*/modules/lib/modules` + $ROOT/$TOOLCHAIN/sbin/depmod -b $INSTALL $KVER > /dev/null + for i in `ls $INSTALL/lib/modules/*/modules.* | grep -v modules.dep | grep -v modules.alias | grep -v modules.symbols`; do + rm -f $i + done + # strip kernel modules for MOD in `find $INSTALL/lib/modules/ -name *.ko`; do $STRIP --strip-debug $MOD From 6da2a8e2513be4263cbd1c1184451ac8375a45cb Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 6 Nov 2011 18:20:16 +0100 Subject: [PATCH 02/89] udev: install bins to /usr/bin, install udev rules and scripts to /usr/lib/udev Signed-off-by: Stephan Raue --- packages/audio/pulseaudio/install | 4 +- packages/devel/usbmuxd/install | 4 +- packages/multimedia/crystalhd/install | 4 +- packages/network/bluez/install | 16 +++---- packages/network/ethtool/install | 2 - packages/sysutils/remote/eventlircd/install | 10 ++--- packages/sysutils/udev/build | 5 ++- packages/sysutils/udev/init.d/13_udev-trigger | 6 +-- packages/sysutils/udev/install | 44 +++++++++---------- packages/sysutils/udisks/init.d/15_automount | 2 +- packages/sysutils/udisks/install | 14 +++--- packages/sysutils/v4l-utils/install | 4 +- packages/x11/xserver/xorg-server/install | 4 +- .../xserver/xorg-server/udev.d/97-xorg.rules | 2 +- scripts/install | 4 +- 15 files changed, 62 insertions(+), 63 deletions(-) diff --git a/packages/audio/pulseaudio/install b/packages/audio/pulseaudio/install index 6dd8c7a1b8..89b4fc1a60 100755 --- a/packages/audio/pulseaudio/install +++ b/packages/audio/pulseaudio/install @@ -23,8 +23,8 @@ mkdir -p $INSTALL/etc/pulse cp $PKG_DIR/config/default.pa $INSTALL/etc/pulse cp $PKG_BUILD/src/system.pa $INSTALL/etc/pulse -mkdir -p $INSTALL/lib/udev/rules.d - cp $PKG_BUILD/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules $INSTALL/lib/udev/rules.d +mkdir -p $INSTALL/usr/lib/udev/rules.d + cp $PKG_BUILD/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules $INSTALL/usr/lib/udev/rules.d mkdir -p $INSTALL/usr/bin cp $PKG_BUILD/src/.libs/pacat $INSTALL/usr/bin diff --git a/packages/devel/usbmuxd/install b/packages/devel/usbmuxd/install index 5757d1b4c8..f48e0e6084 100755 --- a/packages/devel/usbmuxd/install +++ b/packages/devel/usbmuxd/install @@ -28,5 +28,5 @@ mkdir -p $INSTALL/usr/lib mkdir -p $INSTALL/usr/sbin cp -P $PKG_BUILD/build/daemon/usbmuxd $INSTALL/usr/sbin -mkdir -p $INSTALL/lib/udev/rules.d - cp -P $PKG_BUILD/build/udev/*.rules $INSTALL/lib/udev/rules.d +mkdir -p $INSTALL/usr/lib/udev/rules.d + cp -P $PKG_BUILD/build/udev/*.rules $INSTALL/usr/lib/udev/rules.d diff --git a/packages/multimedia/crystalhd/install b/packages/multimedia/crystalhd/install index b39ef43bc2..15caef385c 100755 --- a/packages/multimedia/crystalhd/install +++ b/packages/multimedia/crystalhd/install @@ -30,8 +30,8 @@ mkdir -p $INSTALL/lib/firmware mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/linux_lib/libcrystalhd/*.so* $INSTALL/usr/lib -mkdir -p $INSTALL/lib/udev/rules.d - cp $PKG_BUILD/driver/linux/*.rules $INSTALL/lib/udev/rules.d +mkdir -p $INSTALL/usr/lib/udev/rules.d + cp $PKG_BUILD/driver/linux/*.rules $INSTALL/usr/lib/udev/rules.d mkdir -p $INSTALL/lib/modules/$VER/crystalhd cp $PKG_BUILD/driver/linux/crystalhd.ko $INSTALL/lib/modules/$VER/crystalhd diff --git a/packages/network/bluez/install b/packages/network/bluez/install index 19e4d5c3c0..ee8540ddfc 100755 --- a/packages/network/bluez/install +++ b/packages/network/bluez/install @@ -34,15 +34,15 @@ mkdir -p $INSTALL/etc/bluetooth mkdir -p $INSTALL/etc/dbus-1/system.d cp $PKG_BUILD/src/bluetooth.conf $INSTALL/etc/dbus-1/system.d -mkdir -p $INSTALL/lib/udev -# not needed: cp $PKG_BUILD/scripts/bluetooth_serial $INSTALL/lib/udev -# not needed: chmod +x $INSTALL/lib/udev/bluetooth_serial - cp $PKG_BUILD/tools/hid2hci $INSTALL/lib/udev +mkdir -p $INSTALL/usr/lib/udev +# not needed: cp $PKG_BUILD/scripts/bluetooth_serial $INSTALL/usr/lib/udev +# not needed: chmod +x $INSTALL/usr/lib/udev/bluetooth_serial + cp $PKG_BUILD/tools/hid2hci $INSTALL/usr/lib/udev -mkdir -p $INSTALL/lib/udev/rules.d - cp $PKG_BUILD/scripts/97-bluetooth.rules $INSTALL/lib/udev/rules.d -# todo: cp $PKG_BUILD/scripts/97-bluetooth-hid2hci.rules $INSTALL/lib/udev/rules.d -# not needed: cp $PKG_BUILD/scripts/97-bluetooth-serial.rules $INSTALL/lib/udev/rules.d +mkdir -p $INSTALL/usr/lib/udev/rules.d + cp $PKG_BUILD/scripts/97-bluetooth.rules $INSTALL/usr/lib/udev/rules.d +# todo: cp $PKG_BUILD/scripts/97-bluetooth-hid2hci.rules $INSTALL/usr/lib/udev/rules.d +# not needed: cp $PKG_BUILD/scripts/97-bluetooth-serial.rules $INSTALL/usr/lib/udev/rules.d mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/lib/.libs/libbluetooth.so* $INSTALL/usr/lib diff --git a/packages/network/ethtool/install b/packages/network/ethtool/install index 59c3dd5651..dcd2fb7e72 100755 --- a/packages/network/ethtool/install +++ b/packages/network/ethtool/install @@ -25,5 +25,3 @@ mkdir -p $INSTALL/usr/sbin cp $PKG_BUILD/ethtool $INSTALL/usr/sbin -mkdir -p $INSTALL/lib/udev/rules.d - cp $PKG_DIR/udev.d/*.rules $INSTALL/lib/udev/rules.d \ No newline at end of file diff --git a/packages/sysutils/remote/eventlircd/install b/packages/sysutils/remote/eventlircd/install index 7e4837fce5..b9e8029395 100755 --- a/packages/sysutils/remote/eventlircd/install +++ b/packages/sysutils/remote/eventlircd/install @@ -25,11 +25,11 @@ mkdir -p $INSTALL/usr/sbin cp $PKG_BUILD/src/eventlircd $INSTALL/usr/sbin -mkdir -p $INSTALL/lib/udev - cp $PKG_BUILD/udev/lircd_helper $INSTALL/lib/udev - chmod +x $INSTALL/lib/udev/lircd_helper - cp $PKG_BUILD/udev/wakeup_enable $INSTALL/lib/udev - chmod +x $INSTALL/lib/udev/wakeup_enable +mkdir -p $INSTALL/usr/lib/udev + cp $PKG_BUILD/udev/lircd_helper $INSTALL/usr/lib/udev + chmod +x $INSTALL/usr/lib/udev/lircd_helper + cp $PKG_BUILD/udev/wakeup_enable $INSTALL/usr/lib/udev + chmod +x $INSTALL/usr/lib/udev/wakeup_enable mkdir -p $INSTALL/etc/eventlircd.d cp $PKG_DIR/evmap/*.evmap $INSTALL/etc/eventlircd.d diff --git a/packages/sysutils/udev/build b/packages/sysutils/udev/build index 8acffaf7b1..a27286425b 100755 --- a/packages/sysutils/udev/build +++ b/packages/sysutils/udev/build @@ -31,8 +31,9 @@ LDFLAGS="$LDFLAGS -I$SYSROOT_PREFIX/usr/include/glib-2.0" \ --build=$HOST_NAME \ --prefix=/usr \ --sysconfdir=/etc \ - --sbindir=/sbin \ - --libexecdir=/lib/udev \ + --bindir=/usr/bin \ + --sbindir=/usr/bin \ + --libexecdir=/usr/lib/udev \ --localstatedir=/var \ --disable-silent-rules \ --disable-static \ diff --git a/packages/sysutils/udev/init.d/13_udev-trigger b/packages/sysutils/udev/init.d/13_udev-trigger index 65f1cebc65..18b5f503d2 100644 --- a/packages/sysutils/udev/init.d/13_udev-trigger +++ b/packages/sysutils/udev/init.d/13_udev-trigger @@ -24,10 +24,10 @@ # runlevels: openelec, installer, textmode progress "request udev events from the kernel (type: subsystems)" - /sbin/udevadm trigger --type=subsystems --action=add + udevadm trigger --type=subsystems --action=add progress "request udev events from the kernel (type: devices)" - /sbin/udevadm trigger --type=devices --action=add + udevadm trigger --type=devices --action=add progress "watching udev event queue from the kernel" - /sbin/udevadm settle & + udevadm settle & diff --git a/packages/sysutils/udev/install b/packages/sysutils/udev/install index 20f83e0763..ca46e0b7cb 100755 --- a/packages/sysutils/udev/install +++ b/packages/sysutils/udev/install @@ -32,38 +32,38 @@ add_group tape 33 add_group tty 5 add_group video 39 -mkdir -p $INSTALL/sbin - cp $PKG_BUILD/$1/udevadm $INSTALL/sbin - cp $PKG_BUILD/$1/udevd $INSTALL/sbin +mkdir -p $INSTALL/usr/bin + cp $PKG_BUILD/$1/udevadm $INSTALL/usr/bin + cp $PKG_BUILD/$1/udevd $INSTALL/usr/bin mkdir -p $INSTALL/usr/lib cp -PR $PKG_BUILD/libudev/.libs/libudev.so* $INSTALL/usr/lib cp -PR $PKG_BUILD/extras/gudev/.libs/libgudev*.so* $INSTALL/usr/lib rm -rf $INSTALL/usr/lib/libgudev*.*T -mkdir -p $INSTALL/lib/udev +mkdir -p $INSTALL/usr/lib/udev for i in accelerometer ata_id cdrom_id collect firmware input_id mtd_probe path_id scsi_id usb-db usb_id v4l_id; do - cp $PKG_BUILD/extras/$i/$i $INSTALL/lib/udev + cp $PKG_BUILD/extras/$i/$i $INSTALL/usr/lib/udev done - cp $PKG_BUILD/extras/usb-db/pci-db $INSTALL/lib/udev + cp $PKG_BUILD/extras/usb-db/pci-db $INSTALL/usr/lib/udev -mkdir -p $INSTALL/lib/udev/rules.d - cp $PKG_BUILD/extras/accelerometer/61-accelerometer.rules $INSTALL/lib/udev/rules.d - cp $PKG_BUILD/extras/firmware/50-firmware.rules $INSTALL/lib/udev/rules.d - cp $PKG_BUILD/rules/rules.d/50-udev-default.rules $INSTALL/lib/udev/rules.d - cp $PKG_BUILD/extras/cdrom_id/60-cdrom_id.rules $INSTALL/lib/udev/rules.d - cp $PKG_BUILD/rules/rules.d/60-persistent-alsa.rules $INSTALL/lib/udev/rules.d - cp $PKG_BUILD/rules/rules.d/60-persistent-input.rules $INSTALL/lib/udev/rules.d - cp $PKG_BUILD/rules/rules.d/60-persistent-serial.rules $INSTALL/lib/udev/rules.d - cp $PKG_BUILD/rules/rules.d/60-persistent-storage-tape.rules $INSTALL/lib/udev/rules.d - cp $PKG_BUILD/rules/rules.d/60-persistent-storage.rules $INSTALL/lib/udev/rules.d - cp $PKG_BUILD/extras/v4l_id/60-persistent-v4l.rules $INSTALL/lib/udev/rules.d - cp $PKG_BUILD/extras/mtd_probe/75-probe_mtd.rules $INSTALL/lib/udev/rules.d - cp $PKG_BUILD/rules/rules.d/78-sound-card.rules $INSTALL/lib/udev/rules.d - cp $PKG_BUILD/rules/rules.d/80-drivers.rules $INSTALL/lib/udev/rules.d - cp $PKG_BUILD/rules/rules.d/95-udev-late.rules $INSTALL/lib/udev/rules.d +mkdir -p $INSTALL/usr/lib/udev/rules.d + cp $PKG_BUILD/extras/accelerometer/61-accelerometer.rules $INSTALL/usr/lib/udev/rules.d + cp $PKG_BUILD/extras/firmware/50-firmware.rules $INSTALL/usr/lib/udev/rules.d + cp $PKG_BUILD/rules/rules.d/50-udev-default.rules $INSTALL/usr/lib/udev/rules.d + cp $PKG_BUILD/extras/cdrom_id/60-cdrom_id.rules $INSTALL/usr/lib/udev/rules.d + cp $PKG_BUILD/rules/rules.d/60-persistent-alsa.rules $INSTALL/usr/lib/udev/rules.d + cp $PKG_BUILD/rules/rules.d/60-persistent-input.rules $INSTALL/usr/lib/udev/rules.d + cp $PKG_BUILD/rules/rules.d/60-persistent-serial.rules $INSTALL/usr/lib/udev/rules.d + cp $PKG_BUILD/rules/rules.d/60-persistent-storage-tape.rules $INSTALL/usr/lib/udev/rules.d + cp $PKG_BUILD/rules/rules.d/60-persistent-storage.rules $INSTALL/usr/lib/udev/rules.d + cp $PKG_BUILD/extras/v4l_id/60-persistent-v4l.rules $INSTALL/usr/lib/udev/rules.d + cp $PKG_BUILD/extras/mtd_probe/75-probe_mtd.rules $INSTALL/usr/lib/udev/rules.d + cp $PKG_BUILD/rules/rules.d/78-sound-card.rules $INSTALL/usr/lib/udev/rules.d + cp $PKG_BUILD/rules/rules.d/80-drivers.rules $INSTALL/usr/lib/udev/rules.d + cp $PKG_BUILD/rules/rules.d/95-udev-late.rules $INSTALL/usr/lib/udev/rules.d -mkdir -p $INSTALL/lib/udev/devices +mkdir -p $INSTALL/usr/lib/udev/devices mkdir -p $INSTALL/etc/udev cp $PKG_BUILD/udev.conf $INSTALL/etc/udev diff --git a/packages/sysutils/udisks/init.d/15_automount b/packages/sysutils/udisks/init.d/15_automount index bdaec73e5e..66d4d68a7e 100644 --- a/packages/sysutils/udisks/init.d/15_automount +++ b/packages/sysutils/udisks/init.d/15_automount @@ -24,4 +24,4 @@ # runlevels: openelec, installer, textmode progress "request events from the kernel (subsystem: block)" - /sbin/udevadm trigger --subsystem-match=block --action=add & + udevadm trigger --subsystem-match=block --action=add & diff --git a/packages/sysutils/udisks/install b/packages/sysutils/udisks/install index db9474e26d..f3ba306b35 100755 --- a/packages/sysutils/udisks/install +++ b/packages/sysutils/udisks/install @@ -25,14 +25,14 @@ mkdir -p $INSTALL/etc/dbus-1/system.d cp $PKG_BUILD/data/org.freedesktop.UDisks.conf $INSTALL/etc/dbus-1/system.d -mkdir -p $INSTALL/lib/udev - cp -P $PKG_BUILD/src/probers/udisks-dm-export $INSTALL/lib/udev - cp -P $PKG_BUILD/src/probers/udisks-part-id $INSTALL/lib/udev - cp -P $PKG_BUILD/src/probers/udisks-probe-ata-smart $INSTALL/lib/udev - cp -P $PKG_BUILD/src/probers/udisks-probe-sas-expander $INSTALL/lib/udev +mkdir -p $INSTALL/usr/lib/udev + cp -P $PKG_BUILD/src/probers/udisks-dm-export $INSTALL/usr/lib/udev + cp -P $PKG_BUILD/src/probers/udisks-part-id $INSTALL/usr/lib/udev + cp -P $PKG_BUILD/src/probers/udisks-probe-ata-smart $INSTALL/usr/lib/udev + cp -P $PKG_BUILD/src/probers/udisks-probe-sas-expander $INSTALL/usr/lib/udev -mkdir -p $INSTALL/lib/udev/rules.d -# cp $PKG_BUILD/data/80-udisks.rules $INSTALL/lib/udev/rules.d +mkdir -p $INSTALL/usr/lib/udev/rules.d +# cp $PKG_BUILD/data/80-udisks.rules $INSTALL/usr/lib/udev/rules.d mkdir -p $INSTALL/sbin cp -P $PKG_BUILD/tools/umount.udisks $INSTALL/sbin diff --git a/packages/sysutils/v4l-utils/install b/packages/sysutils/v4l-utils/install index 035878ddeb..d5935ab8b0 100755 --- a/packages/sysutils/v4l-utils/install +++ b/packages/sysutils/v4l-utils/install @@ -25,8 +25,8 @@ mkdir -p $INSTALL/usr/bin cp $PKG_BUILD/utils/keytable/ir-keytable $INSTALL/usr/bin -mkdir -p $INSTALL/lib/udev/rules.d - cp $PKG_BUILD/utils/keytable/*.rules $INSTALL/lib/udev/rules.d +mkdir -p $INSTALL/usr/lib/udev/rules.d + cp $PKG_BUILD/utils/keytable/*.rules $INSTALL/usr/lib/udev/rules.d mkdir -p $INSTALL/etc cp $PKG_BUILD/utils/keytable/rc_maps.cfg $INSTALL/etc diff --git a/packages/x11/xserver/xorg-server/install b/packages/x11/xserver/xorg-server/install index 2998966072..ac7a347123 100755 --- a/packages/x11/xserver/xorg-server/install +++ b/packages/x11/xserver/xorg-server/install @@ -30,8 +30,8 @@ XORG_DST="$INSTALL/$XORG_PATH_MODULES" mkdir -p $INSTALL/usr/bin cp $XORG_SRC/Xorg $INSTALL/usr/bin -mkdir -p $INSTALL/lib/udev - cp $PKG_DIR/scripts/xorg_start $INSTALL/lib/udev +mkdir -p $INSTALL/usr/lib/udev + cp $PKG_DIR/scripts/xorg_start $INSTALL/usr/lib/udev mkdir -p $XORG_DST cp -P $XORG_SRC/exa/.libs/libexa.so $XORG_DST diff --git a/packages/x11/xserver/xorg-server/udev.d/97-xorg.rules b/packages/x11/xserver/xorg-server/udev.d/97-xorg.rules index ebc76a2736..31b10b620a 100644 --- a/packages/x11/xserver/xorg-server/udev.d/97-xorg.rules +++ b/packages/x11/xserver/xorg-server/udev.d/97-xorg.rules @@ -42,6 +42,6 @@ GOTO="end_video" # start Xorg LABEL="start_xorg" -ENV{xorg_driver}=="?*", RUN+="/lib/udev/xorg_start" +ENV{xorg_driver}=="?*", RUN+="xorg_start" LABEL="end_video" diff --git a/scripts/install b/scripts/install index cfc0abb316..a4a81a8e35 100755 --- a/scripts/install +++ b/scripts/install @@ -54,8 +54,8 @@ if [ -d $PKG_DIR/profile.d ]; then fi if [ -d $PKG_DIR/udev.d ]; then - mkdir -p $INSTALL/lib/udev/rules.d - cp $PKG_DIR/udev.d/*.rules $INSTALL/lib/udev/rules.d + mkdir -p $INSTALL/usr/lib/udev/rules.d + cp $PKG_DIR/udev.d/*.rules $INSTALL/usr/lib/udev/rules.d fi if [ -d $PKG_DIR/init.network ]; then From d4480c9b0ef915d023b0c263b604762c21736aa5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 6 Nov 2011 18:39:00 +0100 Subject: [PATCH 03/89] udev: move /lib/firmware to /usr/lib/firmware, add support for /storage/.config/firmware Signed-off-by: Stephan Raue --- packages/linux-drivers/AF9035/install | 4 ++-- packages/linux-firmware/dvb-firmware/install | 4 ++-- packages/linux-firmware/misc-firmware/install | 4 ++-- packages/linux-firmware/wlan-firmware/install | 4 ++-- packages/linux/install | 4 ++-- packages/multimedia/crystalhd/install | 4 ++-- packages/sysutils/udev/build | 2 +- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/linux-drivers/AF9035/install b/packages/linux-drivers/AF9035/install index 8d14198583..343e55d80c 100755 --- a/packages/linux-drivers/AF9035/install +++ b/packages/linux-drivers/AF9035/install @@ -29,5 +29,5 @@ mkdir -p $INSTALL/lib/modules/$VER/AF9035 cp $PKG_BUILD/tua9001.ko $INSTALL/lib/modules/$VER/AF9035 cp $PKG_BUILD/af9033.ko $INSTALL/lib/modules/$VER/AF9035 -mkdir -p $INSTALL/lib/firmware - cp $PKG_DIR/firmware/*.fw $INSTALL/lib/firmware +mkdir -p $INSTALL/usr/lib/firmware + cp $PKG_DIR/firmware/*.fw $INSTALL/usr/lib/firmware diff --git a/packages/linux-firmware/dvb-firmware/install b/packages/linux-firmware/dvb-firmware/install index e15be287d7..1f73289b6e 100755 --- a/packages/linux-firmware/dvb-firmware/install +++ b/packages/linux-firmware/dvb-firmware/install @@ -22,5 +22,5 @@ . config/options $1 -mkdir -p $INSTALL - cp -PR $PKG_BUILD/.install/* $INSTALL +mkdir -p $INSTALL/usr + cp -PR $PKG_BUILD/.install/* $INSTALL/usr diff --git a/packages/linux-firmware/misc-firmware/install b/packages/linux-firmware/misc-firmware/install index e15be287d7..1f73289b6e 100755 --- a/packages/linux-firmware/misc-firmware/install +++ b/packages/linux-firmware/misc-firmware/install @@ -22,5 +22,5 @@ . config/options $1 -mkdir -p $INSTALL - cp -PR $PKG_BUILD/.install/* $INSTALL +mkdir -p $INSTALL/usr + cp -PR $PKG_BUILD/.install/* $INSTALL/usr diff --git a/packages/linux-firmware/wlan-firmware/install b/packages/linux-firmware/wlan-firmware/install index e15be287d7..1f73289b6e 100755 --- a/packages/linux-firmware/wlan-firmware/install +++ b/packages/linux-firmware/wlan-firmware/install @@ -22,5 +22,5 @@ . config/options $1 -mkdir -p $INSTALL - cp -PR $PKG_BUILD/.install/* $INSTALL +mkdir -p $INSTALL/usr + cp -PR $PKG_BUILD/.install/* $INSTALL/usr diff --git a/packages/linux/install b/packages/linux/install index 3164ccfa44..5a035d03af 100755 --- a/packages/linux/install +++ b/packages/linux/install @@ -31,9 +31,9 @@ mkdir -p $INSTALL/lib/modules/$VER rm -f $INSTALL/lib/modules/$VER/modules.* # copy kernel firmwares (if present and requested) - mkdir -p $INSTALL/lib/firmware + mkdir -p $INSTALL/usr/lib/firmware [ -d $PKG_BUILD/modules/lib/firmware ] && \ - cp -rf $PKG_BUILD/modules/lib/firmware/* $INSTALL/lib/firmware || true + cp -rf $PKG_BUILD/modules/lib/firmware/* $INSTALL/usr/lib/firmware || true mkdir -p $INSTALL/etc cp $PKG_DIR/config/modules $INSTALL/etc diff --git a/packages/multimedia/crystalhd/install b/packages/multimedia/crystalhd/install index 15caef385c..de76e3536b 100755 --- a/packages/multimedia/crystalhd/install +++ b/packages/multimedia/crystalhd/install @@ -24,8 +24,8 @@ VER=`ls $BUILD/linux*/modules/lib/modules` -mkdir -p $INSTALL/lib/firmware - cp $PKG_BUILD/firmware/fwbin/*/*.bin $INSTALL/lib/firmware +mkdir -p $INSTALL/usr/lib/firmware + cp $PKG_BUILD/firmware/fwbin/*/*.bin $INSTALL/usr/lib/firmware mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/linux_lib/libcrystalhd/*.so* $INSTALL/usr/lib diff --git a/packages/sysutils/udev/build b/packages/sysutils/udev/build index a27286425b..1c503aaee6 100755 --- a/packages/sysutils/udev/build +++ b/packages/sysutils/udev/build @@ -53,7 +53,7 @@ LDFLAGS="$LDFLAGS -I$SYSROOT_PREFIX/usr/include/glib-2.0" \ --disable-edd \ --without-selinux \ --without-systemdsystemunitdir \ - --with-firmware-path=/lib/firmware \ + --with-firmware-path="/storage/.config/firmware:/usr/lib/firmware" \ --with-pci-ids-path=/usr/share/pci.ids \ --with-usb-ids-path=/usr/share/usb.ids \ --with-gnu-ld \ From 1bbe6ed3e1f02356df2bb271f9108ee884fe7ad4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 4 Nov 2011 10:13:37 +0100 Subject: [PATCH 04/89] config/functions: quote variables Signed-off-by: Stephan Raue --- config/functions | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/config/functions b/config/functions index 5f5b8339a1..2fe22d986d 100644 --- a/config/functions +++ b/config/functions @@ -117,39 +117,39 @@ add_group() { do_autoreconf() { export ACLOCAL_DIR=$SYSROOT_PREFIX/usr/share/aclocal - if [ -e $ROOT/$TOOLCHAIN/bin/autoconf ]; then + if [ -e "$ROOT/$TOOLCHAIN/bin/autoconf" ]; then export AUTOCONF=$ROOT/$TOOLCHAIN/bin/autoconf fi - if [ -e $ROOT/$TOOLCHAIN/bin/automake ]; then + if [ -e "$ROOT/$TOOLCHAIN/bin/automake" ]; then export AUTOMAKE=$ROOT/$TOOLCHAIN/bin/automake fi - if [ -e $ROOT/$TOOLCHAIN/bin/autopoint ]; then + if [ -e "$ROOT/$TOOLCHAIN/bin/autopoint" ]; then export AUTOPOINT=$ROOT/$TOOLCHAIN/bin/autopoint fi - if [ -e $ROOT/$TOOLCHAIN/bin/libtoolize ]; then + if [ -e "$ROOT/$TOOLCHAIN/bin/libtoolize" ]; then export LIBTOOLIZE=$ROOT/$TOOLCHAIN/bin/libtoolize fi - if [ -e $ROOT/$TOOLCHAIN/bin/intltoolize ]; then + if [ -e "$ROOT/$TOOLCHAIN/bin/intltoolize" ]; then export INTLTOOLIZE=$ROOT/$TOOLCHAIN/bin/intltoolize fi - if [ -e $ROOT/$TOOLCHAIN/bin/aclocal ]; then + if [ -e "$ROOT/$TOOLCHAIN/bin/aclocal" ]; then export ACLOCAL="$ROOT/$TOOLCHAIN/bin/aclocal -I $ACLOCAL_DIR" fi - if [ -e $ROOT/$TOOLCHAIN/bin/autoheader ]; then + if [ -e "$ROOT/$TOOLCHAIN/bin/autoheader" ]; then export AUTOHEADER=$ROOT/$TOOLCHAIN/bin/autoheader fi - if [ -e $ROOT/$TOOLCHAIN/bin/libtool ]; then + if [ -e "$ROOT/$TOOLCHAIN/bin/libtool" ]; then export LIBTOOL=$ROOT/$TOOLCHAIN/bin/libtool fi - if [ -e $ROOT/$TOOLCHAIN/bin/autoreconf -a -e $INTLTOOLIZE ]; then + if [ -e "$ROOT/$TOOLCHAIN/bin/autoreconf" -a -e "$INTLTOOLIZE" ]; then mkdir -p $ACLOCAL_DIR export AUTORECONF="$ROOT/$TOOLCHAIN/bin/autoreconf --verbose --force --install -I $ACLOCAL_DIR" $AUTORECONF $@ From 4d7cc4c15523e6a6d0d4ae3d5256b7d223175eb0 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 4 Nov 2011 10:14:27 +0100 Subject: [PATCH 05/89] zlib-host: depends on cmake Signed-off-by: Stephan Raue --- packages/compress/zlib-host/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/compress/zlib-host/meta b/packages/compress/zlib-host/meta index 7b974cf8e0..aca8853b54 100644 --- a/packages/compress/zlib-host/meta +++ b/packages/compress/zlib-host/meta @@ -26,7 +26,7 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.zlib.net" PKG_URL="" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="ccache cmake" PKG_PRIORITY="optional" PKG_SECTION="compress" PKG_SHORTDESC="zlib: A general purpose (ZIP) data compression library" From b492315f3dc5697d4a710fe34f5bc67abc3f4ef4 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 4 Nov 2011 10:14:34 +0100 Subject: [PATCH 06/89] zlib: depends on cmake Signed-off-by: Stephan Raue --- packages/compress/zlib/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/compress/zlib/meta b/packages/compress/zlib/meta index 0b8d75061e..9881372fa3 100644 --- a/packages/compress/zlib/meta +++ b/packages/compress/zlib/meta @@ -26,7 +26,7 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.zlib.net" PKG_URL="http://www.zlib.net/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="toolchain cmake" PKG_PRIORITY="optional" PKG_SECTION="compress" PKG_SHORTDESC="zlib: A general purpose (ZIP) data compression library" From 09ba4da8371e6aa8041e464d65e144c6f6038c36 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 4 Nov 2011 11:28:21 +0100 Subject: [PATCH 07/89] intltool: move to autotools group Signed-off-by: Stephan Raue --- packages/toolchain/devel/{ => autotools}/intltool/build | 0 packages/toolchain/devel/{ => autotools}/intltool/meta | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename packages/toolchain/devel/{ => autotools}/intltool/build (100%) rename packages/toolchain/devel/{ => autotools}/intltool/meta (100%) diff --git a/packages/toolchain/devel/intltool/build b/packages/toolchain/devel/autotools/intltool/build similarity index 100% rename from packages/toolchain/devel/intltool/build rename to packages/toolchain/devel/autotools/intltool/build diff --git a/packages/toolchain/devel/intltool/meta b/packages/toolchain/devel/autotools/intltool/meta similarity index 100% rename from packages/toolchain/devel/intltool/meta rename to packages/toolchain/devel/autotools/intltool/meta From 3d6d7e2270d54e6af19e56901e31ea06387d67c7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 4 Nov 2011 11:28:48 +0100 Subject: [PATCH 08/89] autotools: add metafile Signed-off-by: Stephan Raue --- packages/toolchain/devel/autotools/meta | 37 +++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 packages/toolchain/devel/autotools/meta diff --git a/packages/toolchain/devel/autotools/meta b/packages/toolchain/devel/autotools/meta new file mode 100644 index 0000000000..addb34bdc0 --- /dev/null +++ b/packages/toolchain/devel/autotools/meta @@ -0,0 +1,37 @@ +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +PKG_NAME="autotools" +PKG_VERSION="" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.openelec.tv" +PKG_URL="" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache autoconf automake intltool" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/devel" +PKG_SHORTDESC="autotools: Metapackage" +PKG_LONGDESC="" +PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" + From 9000893b5bb23355ddf0ded65589f77ba4da94c7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 4 Nov 2011 11:30:34 +0100 Subject: [PATCH 09/89] autotools: depends on autoconf-archive Signed-off-by: Stephan Raue --- packages/toolchain/devel/autotools/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/toolchain/devel/autotools/meta b/packages/toolchain/devel/autotools/meta index addb34bdc0..e5f92635f0 100644 --- a/packages/toolchain/devel/autotools/meta +++ b/packages/toolchain/devel/autotools/meta @@ -26,7 +26,7 @@ PKG_LICENSE="GPL" PKG_SITE="http://www.openelec.tv" PKG_URL="" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="ccache autoconf automake intltool" +PKG_BUILD_DEPENDS="ccache autoconf automake intltool autoconf-archive" PKG_PRIORITY="optional" PKG_SECTION="toolchain/devel" PKG_SHORTDESC="autotools: Metapackage" From 3c1fd69515fcbf1d77195166354bded1dd23ea8e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 4 Nov 2011 11:30:56 +0100 Subject: [PATCH 10/89] toolchain: depends on package 'autotools' Signed-off-by: Stephan Raue --- packages/toolchain/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/toolchain/meta b/packages/toolchain/meta index a1aae5528d..eca42af944 100644 --- a/packages/toolchain/meta +++ b/packages/toolchain/meta @@ -26,7 +26,7 @@ PKG_LICENSE="GPL" PKG_SITE="http://www.openelec.tv" PKG_URL="" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="make xz sed pkg-config automake autoconf autoconf-archive intltool gcc-final bison flex cmake jam yasm nasm" +PKG_BUILD_DEPENDS="make xz sed pkg-config autotools gcc-final bison flex cmake jam yasm nasm" PKG_PRIORITY="optional" PKG_SECTION="toolchain/devel" PKG_SHORTDESC="toolchain: OpenELEC.tv' toolchain" From 3d75e56f7ff26c5659c91a8c417f9cb74abfcfa8 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 4 Nov 2011 11:32:23 +0100 Subject: [PATCH 11/89] libffi: add patch to use proper includedir Signed-off-by: Stephan Raue --- packages/devel/libffi/build | 1 + .../patches/libffi-3.0.10-includedir.patch | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 packages/devel/libffi/patches/libffi-3.0.10-includedir.patch diff --git a/packages/devel/libffi/build b/packages/devel/libffi/build index 08f3b805ef..ea2e76e9e6 100755 --- a/packages/devel/libffi/build +++ b/packages/devel/libffi/build @@ -27,6 +27,7 @@ mkdir -p .build-target && cd .build-target ../configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ + --includedir=/usr/include \ --sysconfdir=/etc \ --disable-static \ --enable-shared \ diff --git a/packages/devel/libffi/patches/libffi-3.0.10-includedir.patch b/packages/devel/libffi/patches/libffi-3.0.10-includedir.patch new file mode 100644 index 0000000000..bb709a368c --- /dev/null +++ b/packages/devel/libffi/patches/libffi-3.0.10-includedir.patch @@ -0,0 +1,22 @@ +diff -Naur libffi-3.0.10/include/Makefile.am libffi-3.0.10.patch/include/Makefile.am +--- libffi-3.0.10/include/Makefile.am 2011-08-22 20:38:12.000000000 +0200 ++++ libffi-3.0.10.patch/include/Makefile.am 2011-11-04 09:26:38.587669344 +0100 +@@ -5,5 +5,5 @@ + DISTCLEANFILES=ffitarget.h + EXTRA_DIST=ffi.h.in ffi_common.h + +-includesdir = $(libdir)/@PACKAGE_NAME@-@PACKAGE_VERSION@/include ++includesdir = $(includedir)/@PACKAGE_NAME@ + nodist_includes_HEADERS = ffi.h ffitarget.h +diff -Naur libffi-3.0.10/libffi.pc.in libffi-3.0.10.patch/libffi.pc.in +--- libffi-3.0.10/libffi.pc.in 2011-08-22 20:38:12.000000000 +0200 ++++ libffi-3.0.10.patch/libffi.pc.in 2011-11-04 09:25:20.218682315 +0100 +@@ -1,7 +1,7 @@ + prefix=@prefix@ + exec_prefix=@exec_prefix@ + libdir=@libdir@ +-includedir=${libdir}/@PACKAGE_NAME@-@PACKAGE_VERSION@/include ++includedir=@includedir@/@PACKAGE_NAME@ + + Name: @PACKAGE_NAME@ + Description: Library supporting Foreign Function Interfaces From 83f518bff128666f5f14f9064c1a12660045a331 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 4 Nov 2011 11:33:09 +0100 Subject: [PATCH 12/89] libffi: add support to build before toolchain is built Signed-off-by: Stephan Raue --- packages/devel/libffi-host/build | 4 ++++ packages/devel/libffi-host/meta | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/devel/libffi-host/build b/packages/devel/libffi-host/build index 6cc66d174c..37b59c6ba6 100755 --- a/packages/devel/libffi-host/build +++ b/packages/devel/libffi-host/build @@ -27,10 +27,14 @@ $SCRIPTS/unpack libffi setup_toolchain host cd $BUILD/libffi-* + +do_autoreconf + mkdir -p .build-host && cd .build-host ../configure --host=$HOST_NAME \ --build=$HOST_NAME \ --prefix=$ROOT/$TOOLCHAIN \ + --includedir=$ROOT/$TOOLCHAIN/include \ --sysconfdir=/etc \ --disable-static \ --enable-shared \ diff --git a/packages/devel/libffi-host/meta b/packages/devel/libffi-host/meta index cad9095434..74c4db302c 100644 --- a/packages/devel/libffi-host/meta +++ b/packages/devel/libffi-host/meta @@ -26,7 +26,7 @@ PKG_LICENSE="GPL" PKG_SITE="http://sourceware.org/$PKG_NAME/" PKG_URL="" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="ccache autotools" PKG_PRIORITY="optional" PKG_SECTION="devel" PKG_SHORTDESC="Foreign Function Interface Library" From 0e29536713c6f347d0101b0ec13b2781bbdce934 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 4 Nov 2011 11:34:01 +0100 Subject: [PATCH 13/89] glib-host: add support to build before toolchain is built, detect libffi if pkg-config is not built Signed-off-by: Stephan Raue --- packages/devel/glib-host/build | 4 ++-- packages/devel/glib-host/meta | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/devel/glib-host/build b/packages/devel/glib-host/build index fb63d840d5..8e7f921401 100755 --- a/packages/devel/glib-host/build +++ b/packages/devel/glib-host/build @@ -27,10 +27,10 @@ $SCRIPTS/unpack glib setup_toolchain host export ZLIB_CFLAGS="" export ZLIB_LIBS="" +export LIBFFI_CFLAGS="-I$ROOT/$TOOLCHAIN/include/libffi" +export LIBFFI_LIBS="-L$ROOT/$TOOLCHAIN/lib -lffi" cd $BUILD/glib* - -do_autoreconf mkdir -p .build-host && cd .build-host ../configure --host=$HOST_NAME \ --build=$HOST_NAME \ diff --git a/packages/devel/glib-host/meta b/packages/devel/glib-host/meta index 59f1a0f1c4..4f9e1ee2b7 100644 --- a/packages/devel/glib-host/meta +++ b/packages/devel/glib-host/meta @@ -26,7 +26,7 @@ PKG_LICENSE="LGPL" PKG_SITE="http://www.gtk.org/" PKG_URL="" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain libffi-host zlib-host" +PKG_BUILD_DEPENDS="ccache libffi-host zlib-host" PKG_PRIORITY="optional" PKG_SECTION="devel" PKG_SHORTDESC="glib-host: C support library" From 5283a3356791ac605b7841b467958e15625e4ae7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 4 Nov 2011 11:34:47 +0100 Subject: [PATCH 14/89] pkg-config: update to pkg-config-0.26 Signed-off-by: Stephan Raue --- packages/toolchain/devel/pkg-config/build | 3 +++ packages/toolchain/devel/pkg-config/meta | 4 ++-- .../pkg-config-0.25-m4_pattern_allow.patch | 20 ------------------- 3 files changed, 5 insertions(+), 22 deletions(-) delete mode 100644 packages/toolchain/devel/pkg-config/patches/pkg-config-0.25-m4_pattern_allow.patch diff --git a/packages/toolchain/devel/pkg-config/build b/packages/toolchain/devel/pkg-config/build index d71c51c390..2cfb88571e 100755 --- a/packages/toolchain/devel/pkg-config/build +++ b/packages/toolchain/devel/pkg-config/build @@ -22,6 +22,9 @@ . config/options $1 +export GLIB_CFLAGS="-I$ROOT/$TOOLCHAIN/include/glib-2.0 -I$ROOT/$TOOLCHAIN/lib/glib-2.0/include" +export GLIB_LIBS="-L$ROOT/$TOOLCHAIN/lib -lglib-2.0" + setup_toolchain host cd $PKG_BUILD diff --git a/packages/toolchain/devel/pkg-config/meta b/packages/toolchain/devel/pkg-config/meta index 49447fefa7..5e9565196b 100644 --- a/packages/toolchain/devel/pkg-config/meta +++ b/packages/toolchain/devel/pkg-config/meta @@ -19,14 +19,14 @@ ################################################################################ PKG_NAME="pkg-config" -PKG_VERSION="0.25" +PKG_VERSION="0.26" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://www.freedesktop.org/software/pkgconfig/" PKG_URL="http://pkgconfig.freedesktop.org/releases/$PKG_NAME-$PKG_VERSION.tar.gz" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="ccache" +PKG_BUILD_DEPENDS="ccache glib-host" PKG_PRIORITY="optional" PKG_SECTION="toolchain/devel" PKG_SHORTDESC="pkg-config: A library configuration management system" diff --git a/packages/toolchain/devel/pkg-config/patches/pkg-config-0.25-m4_pattern_allow.patch b/packages/toolchain/devel/pkg-config/patches/pkg-config-0.25-m4_pattern_allow.patch deleted file mode 100644 index 7613fe0268..0000000000 --- a/packages/toolchain/devel/pkg-config/patches/pkg-config-0.25-m4_pattern_allow.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff -Naur pkg-config-0.25-old/pkg.m4 pkg-config-0.25-new/pkg.m4 ---- pkg-config-0.25-old/pkg.m4 2009-12-06 12:39:02.000000000 -0800 -+++ pkg-config-0.25-new/pkg.m4 2010-05-28 16:55:19.000000000 -0700 -@@ -26,7 +26,15 @@ - # ---------------------------------- - AC_DEFUN([PKG_PROG_PKG_CONFIG], - [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) --m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) -+m4_pattern_allow([^PKG_CONFIG$]) -+m4_pattern_allow([^PKG_CONFIG_ALLOW_SYSTEM_CFLAGS$]) -+m4_pattern_allow([^PKG_CONFIG_ALLOW_SYSTEM_LIBS$]) -+m4_pattern_allow([^PKG_CONFIG_DEBUG_SPEW$]) -+m4_pattern_allow([^PKG_CONFIG_DISABLE_UNINSTALLED$]) -+m4_pattern_allow([^PKG_CONFIG_LIBDIR$]) -+m4_pattern_allow([^PKG_CONFIG_PATH$]) -+m4_pattern_allow([^PKG_CONFIG_SYSROOT_DIR$]) -+m4_pattern_allow([^PKG_CONFIG_TOP_BUILD_DIR$]) - AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) - AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) - AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) From 9a7d0e1a5a0c799396a180206456ba53069a244e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 4 Nov 2011 19:50:31 +0100 Subject: [PATCH 15/89] zlib: dont build via cmake anymore Signed-off-by: Stephan Raue --- packages/compress/zlib-host/build | 9 ++---- packages/compress/zlib-host/meta | 2 +- packages/compress/zlib/build | 10 ++----- packages/compress/zlib/install | 2 +- packages/compress/zlib/meta | 2 +- packages/compress/zlib/unpack | 28 +++++++++++++++++++ .../initramfs/compress/zlib-initramfs/install | 2 +- 7 files changed, 36 insertions(+), 19 deletions(-) create mode 100755 packages/compress/zlib/unpack diff --git a/packages/compress/zlib-host/build b/packages/compress/zlib-host/build index bb37eaa29e..5a31f9905e 100755 --- a/packages/compress/zlib-host/build +++ b/packages/compress/zlib-host/build @@ -28,14 +28,9 @@ setup_toolchain host cd $BUILD/zlib-* -# needed for building with cmake - rm -rf zconf.h +cd zlib-host -mkdir -p .build-host && cd .build-host - -cmake -DCMAKE_TOOLCHAIN_FILE=$CMAKE_CONF \ - -DCMAKE_INSTALL_PREFIX=$ROOT/$TOOLCHAIN \ - .. +./configure --prefix=$ROOT/$TOOLCHAIN make make install diff --git a/packages/compress/zlib-host/meta b/packages/compress/zlib-host/meta index aca8853b54..0c039c36e3 100644 --- a/packages/compress/zlib-host/meta +++ b/packages/compress/zlib-host/meta @@ -26,7 +26,7 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.zlib.net" PKG_URL="" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="ccache cmake" +PKG_BUILD_DEPENDS="ccache" PKG_PRIORITY="optional" PKG_SECTION="compress" PKG_SHORTDESC="zlib: A general purpose (ZIP) data compression library" diff --git a/packages/compress/zlib/build b/packages/compress/zlib/build index 4b44b2b650..92303b6af0 100755 --- a/packages/compress/zlib/build +++ b/packages/compress/zlib/build @@ -24,14 +24,8 @@ cd $PKG_BUILD -# needed for building with cmake - rm -rf zconf.h - -mkdir -p .build-target && cd .build-target - -cmake -DCMAKE_TOOLCHAIN_FILE=$CMAKE_CONF \ - -DCMAKE_INSTALL_PREFIX=/usr \ - .. +./configure --prefix=/usr make + $MAKEINSTALL diff --git a/packages/compress/zlib/install b/packages/compress/zlib/install index e281394a2b..afe2733c0a 100755 --- a/packages/compress/zlib/install +++ b/packages/compress/zlib/install @@ -23,4 +23,4 @@ . config/options $1 mkdir -p $INSTALL/usr/lib - cp -R $PKG_BUILD/.build-target/*.so* $INSTALL/usr/lib + cp -R $PKG_BUILD/*.so* $INSTALL/usr/lib diff --git a/packages/compress/zlib/meta b/packages/compress/zlib/meta index 9881372fa3..0b8d75061e 100644 --- a/packages/compress/zlib/meta +++ b/packages/compress/zlib/meta @@ -26,7 +26,7 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.zlib.net" PKG_URL="http://www.zlib.net/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain cmake" +PKG_BUILD_DEPENDS="toolchain" PKG_PRIORITY="optional" PKG_SECTION="compress" PKG_SHORTDESC="zlib: A general purpose (ZIP) data compression library" diff --git a/packages/compress/zlib/unpack b/packages/compress/zlib/unpack new file mode 100755 index 0000000000..85da904707 --- /dev/null +++ b/packages/compress/zlib/unpack @@ -0,0 +1,28 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +. config/options $1 + +ZLIB_DIR=`ls -d $PKG_BUILD` + +cp -r "$ZLIB_DIR" "$BUILD/zlib-host" || rm -rf "$BUILD/zlib-host" +mv "$BUILD/zlib-host" "$ZLIB_DIR" diff --git a/packages/initramfs/compress/zlib-initramfs/install b/packages/initramfs/compress/zlib-initramfs/install index a6b4c723e0..6c59423c48 100755 --- a/packages/initramfs/compress/zlib-initramfs/install +++ b/packages/initramfs/compress/zlib-initramfs/install @@ -25,4 +25,4 @@ ZLIB_DIR="$BUILD/zlib-*" mkdir -p $INSTALL/lib - cp -R $ZLIB_DIR/.build-target/*.so* $INSTALL/lib + cp -R $ZLIB_DIR/*.so* $INSTALL/lib From d3a374667d878de491141cfd0888bec4675650ea Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 4 Nov 2011 21:51:00 +0100 Subject: [PATCH 16/89] util-linux: install tools in /usr/bin instead /bin, /sbin or /usr/sbin Signed-off-by: Stephan Raue --- packages/sysutils/util-linux/build | 2 ++ packages/sysutils/util-linux/install | 12 ++++++------ packages/sysutils/util-linux/udev.d.bk/10-fsck.rules | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/packages/sysutils/util-linux/build b/packages/sysutils/util-linux/build index 9844a006e5..8ed4735ca6 100755 --- a/packages/sysutils/util-linux/build +++ b/packages/sysutils/util-linux/build @@ -27,6 +27,8 @@ gt_cv_func_gnugettext1_libintl=no \ ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ + --bindir=/usr/bin \ + --sbindir=/usr/bin \ --disable-silent-rules \ --enable-shared \ --disable-static \ diff --git a/packages/sysutils/util-linux/install b/packages/sysutils/util-linux/install index 659b5e8784..7486115d0b 100755 --- a/packages/sysutils/util-linux/install +++ b/packages/sysutils/util-linux/install @@ -22,12 +22,12 @@ . config/options $1 -mkdir -p $INSTALL/sbin - cp $PKG_BUILD/misc-utils/.libs/blkid $INSTALL/sbin - cp $PKG_BUILD/sys-utils/fstrim $INSTALL/sbin - cp $PKG_BUILD/mount/.libs/swapon $INSTALL/sbin - ln -sf swapon $INSTALL/sbin/swapoff - cp $PKG_BUILD/fsck/.libs/fsck $INSTALL/sbin +mkdir -p $INSTALL/usr/bin + cp $PKG_BUILD/misc-utils/.libs/blkid $INSTALL/usr/bin + cp $PKG_BUILD/sys-utils/fstrim $INSTALL/usr/bin + cp $PKG_BUILD/mount/.libs/swapon $INSTALL/usr/bin + ln -sf swapon $INSTALL/usr/bin/swapoff + cp $PKG_BUILD/fsck/.libs/fsck $INSTALL/usr/bin mkdir -p $INSTALL/usr/lib cp -PR $PKG_BUILD/libblkid/src/.libs/libblkid.so* $INSTALL/usr/lib diff --git a/packages/sysutils/util-linux/udev.d.bk/10-fsck.rules b/packages/sysutils/util-linux/udev.d.bk/10-fsck.rules index e2af879c71..29cee79a44 100644 --- a/packages/sysutils/util-linux/udev.d.bk/10-fsck.rules +++ b/packages/sysutils/util-linux/udev.d.bk/10-fsck.rules @@ -22,7 +22,7 @@ SUBSYSTEM!="block", GOTO="end" DEVTYPE!="partition", GOTO="end" -ACTION=="add|change", RUN+="/sbin/fsck -M -T -a /dev/%k" +ACTION=="add|change", RUN+="/usr/bin/fsck -M -T -a /dev/%k" # exit LABEL="end" From 5e8009189847bf7d491df2d106a641d09074945e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 5 Nov 2011 01:00:30 +0100 Subject: [PATCH 17/89] ConsoleKit: install bins to /usr/bin Signed-off-by: Stephan Raue --- packages/sysutils/ConsoleKit/build | 3 ++- packages/sysutils/ConsoleKit/install | 10 ++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/sysutils/ConsoleKit/build b/packages/sysutils/ConsoleKit/build index b89b782e8b..13942fed6a 100755 --- a/packages/sysutils/ConsoleKit/build +++ b/packages/sysutils/ConsoleKit/build @@ -26,8 +26,9 @@ cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ + --bindir=/usr/bin \ + --sbindir=/usr/bin \ --sysconfdir=/etc \ - --sbindir=/sbin \ --libexecdir=/usr/lib/ConsoleKit \ --localstatedir=/var \ --disable-static \ diff --git a/packages/sysutils/ConsoleKit/install b/packages/sysutils/ConsoleKit/install index dc6238b008..3ac6908ecf 100755 --- a/packages/sysutils/ConsoleKit/install +++ b/packages/sysutils/ConsoleKit/install @@ -30,13 +30,11 @@ mkdir -p $INSTALL/etc/ConsoleKit/seats.d mkdir -p $INSTALL/etc/dbus-1/system.d cp -P $PKG_BUILD/data/ConsoleKit.conf $INSTALL/etc/dbus-1/system.d -mkdir -p $INSTALL/sbin - cp -P $PKG_BUILD/tools/ck-log-system-restart $INSTALL/sbin - cp -P $PKG_BUILD/tools/ck-log-system-start $INSTALL/sbin - cp -P $PKG_BUILD/tools/ck-log-system-stop $INSTALL/sbin - cp -P $PKG_BUILD/src/console-kit-daemon $INSTALL/sbin - mkdir -p $INSTALL/usr/bin + cp -P $PKG_BUILD/tools/ck-log-system-restart $INSTALL/usr/bin + cp -P $PKG_BUILD/tools/ck-log-system-start $INSTALL/usr/bin + cp -P $PKG_BUILD/tools/ck-log-system-stop $INSTALL/usr/bin + cp -P $PKG_BUILD/src/console-kit-daemon $INSTALL/usr/bin cp -P $PKG_BUILD/tools/.libs/ck-launch-session $INSTALL/usr/bin cp -P $PKG_BUILD/tools/ck-list-sessions $INSTALL/usr/bin cp -P $PKG_BUILD/tools/ck-history $INSTALL/usr/bin From 1389ac969c689fb5ce449411e63d50536d37ccd1 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 5 Nov 2011 01:00:52 +0100 Subject: [PATCH 18/89] e2fsprogs: install bins to /usr/bin Signed-off-by: Stephan Raue --- packages/sysutils/e2fsprogs/build | 2 ++ packages/sysutils/e2fsprogs/install | 38 ++++++++++++++--------------- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/packages/sysutils/e2fsprogs/build b/packages/sysutils/e2fsprogs/build index 93a7dcb5d5..6e4961d798 100755 --- a/packages/sysutils/e2fsprogs/build +++ b/packages/sysutils/e2fsprogs/build @@ -27,6 +27,8 @@ cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ + --bindir=/usr/bin \ + --sbindir=/usr/bin \ --sysconfdir=/etc \ --enable-verbose-makecmds \ --enable-symlink-install \ diff --git a/packages/sysutils/e2fsprogs/install b/packages/sysutils/e2fsprogs/install index 41e7d9399a..699adb350c 100755 --- a/packages/sysutils/e2fsprogs/install +++ b/packages/sysutils/e2fsprogs/install @@ -25,23 +25,23 @@ mkdir -p $INSTALL/etc cp $PKG_BUILD/misc/mke2fs.conf $INSTALL/etc -mkdir -p $INSTALL/sbin - cp $PKG_BUILD/e2fsck/e2fsck $INSTALL/sbin - ln -sf e2fsck $INSTALL/sbin/fsck.ext2 - ln -sf e2fsck $INSTALL/sbin/fsck.ext3 - ln -sf e2fsck $INSTALL/sbin/fsck.ext4 - ln -sf e2fsck $INSTALL/sbin/fsck.ext4dev - cp $PKG_BUILD/misc/mke2fs $INSTALL/sbin - ln -sf mke2fs $INSTALL/sbin/mkfs.ext2 - ln -sf mke2fs $INSTALL/sbin/mkfs.ext3 - ln -sf mke2fs $INSTALL/sbin/mkfs.ext4 - ln -sf mke2fs $INSTALL/sbin/mkfs.ext4dev - cp $PKG_BUILD/resize/resize2fs $INSTALL/sbin - cp $PKG_BUILD/misc/tune2fs $INSTALL/sbin +mkdir -p $INSTALL/usr/bin + cp $PKG_BUILD/e2fsck/e2fsck $INSTALL/usr/bin + ln -sf e2fsck $INSTALL/usr/bin/fsck.ext2 + ln -sf e2fsck $INSTALL/usr/bin/fsck.ext3 + ln -sf e2fsck $INSTALL/usr/bin/fsck.ext4 + ln -sf e2fsck $INSTALL/usr/bin/fsck.ext4dev + cp $PKG_BUILD/misc/mke2fs $INSTALL/usr/bin + ln -sf mke2fs $INSTALL/usr/bin/mkfs.ext2 + ln -sf mke2fs $INSTALL/usr/bin/mkfs.ext3 + ln -sf mke2fs $INSTALL/usr/bin/mkfs.ext4 + ln -sf mke2fs $INSTALL/usr/bin/mkfs.ext4dev + cp $PKG_BUILD/resize/resize2fs $INSTALL/usr/bin + cp $PKG_BUILD/misc/tune2fs $INSTALL/usr/bin -mkdir -p $INSTALL/lib - cp -P $PKG_BUILD/lib/*.so.[0-9] $INSTALL/lib - cp -P $PKG_BUILD/lib/e2p/libe2p.so.* $INSTALL/lib - cp -P $PKG_BUILD/lib/et/libcom_err.so.* $INSTALL/lib - cp -P $PKG_BUILD/lib/ext2fs/libext2fs.so.* $INSTALL/lib - cp -P $PKG_BUILD/lib/ss/libss.so.* $INSTALL/lib +mkdir -p $INSTALL/usr/lib + cp -P $PKG_BUILD/lib/*.so.[0-9] $INSTALL/usr/lib + cp -P $PKG_BUILD/lib/e2p/libe2p.so.* $INSTALL/usr/lib + cp -P $PKG_BUILD/lib/et/libcom_err.so.* $INSTALL/usr/lib + cp -P $PKG_BUILD/lib/ext2fs/libext2fs.so.* $INSTALL/usr/lib + cp -P $PKG_BUILD/lib/ss/libss.so.* $INSTALL/usr/lib From e4c9f8bc48d9948639fea940f8b9c01d379ca44e Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 5 Nov 2011 01:01:13 +0100 Subject: [PATCH 19/89] ntfs-3g_ntfsprogs: install bins to /usr/bin Signed-off-by: Stephan Raue --- packages/sysutils/ntfs-3g_ntfsprogs/build | 2 ++ packages/sysutils/ntfs-3g_ntfsprogs/install | 10 ++++------ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/sysutils/ntfs-3g_ntfsprogs/build b/packages/sysutils/ntfs-3g_ntfsprogs/build index 18d13a123f..d3056136f1 100755 --- a/packages/sysutils/ntfs-3g_ntfsprogs/build +++ b/packages/sysutils/ntfs-3g_ntfsprogs/build @@ -26,6 +26,8 @@ cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ + --bindir=/usr/bin \ + --sbindir=/usr/bin \ --enable-shared \ --disable-static \ --disable-dependency-tracking \ diff --git a/packages/sysutils/ntfs-3g_ntfsprogs/install b/packages/sysutils/ntfs-3g_ntfsprogs/install index 8eace56988..4222508f28 100755 --- a/packages/sysutils/ntfs-3g_ntfsprogs/install +++ b/packages/sysutils/ntfs-3g_ntfsprogs/install @@ -22,9 +22,7 @@ . config/options $1 -mkdir -p $INSTALL/bin - cp $PKG_BUILD/src/ntfs-3g $INSTALL/bin - -mkdir -p $INSTALL/sbin - ln -sf /bin/ntfs-3g $INSTALL/sbin/mount.ntfs - ln -sf /bin/ntfs-3g $INSTALL/sbin/mount.ntfs-3g +mkdir -p $INSTALL/usr/bin + cp $PKG_BUILD/src/ntfs-3g $INSTALL/usr/bin + ln -sf ntfs-3g $INSTALL/usr/bin/mount.ntfs + ln -sf ntfs-3g $INSTALL/usr/bin/mount.ntfs-3g From 69aace620eb6e20a79ddc61cf4f168245eb246bd Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 5 Nov 2011 01:01:29 +0100 Subject: [PATCH 20/89] grep: install bins to /usr/bin Signed-off-by: Stephan Raue --- packages/sysutils/grep/install | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/sysutils/grep/install b/packages/sysutils/grep/install index bb01f9a050..31fd6792a9 100755 --- a/packages/sysutils/grep/install +++ b/packages/sysutils/grep/install @@ -22,5 +22,5 @@ . config/options $1 -mkdir -p $INSTALL/bin - cp $PKG_BUILD/src/grep $INSTALL/bin +mkdir -p $INSTALL/usr/bin + cp $PKG_BUILD/src/grep $INSTALL/usr/bin From 3fe6fa660b9dbb8f0f1e9e3cea61474e61543062 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 5 Nov 2011 01:03:14 +0100 Subject: [PATCH 21/89] eglibc: install libs which are not needed for initramfs to /usr/lib, install tools to /usr/bin Signed-off-by: Stephan Raue --- packages/toolchain/devel/eglibc/install | 31 ++++++++++++++----------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/packages/toolchain/devel/eglibc/install b/packages/toolchain/devel/eglibc/install index 97d5936204..2fac3902b9 100755 --- a/packages/toolchain/devel/eglibc/install +++ b/packages/toolchain/devel/eglibc/install @@ -25,25 +25,28 @@ mkdir -p $INSTALL/lib cp $PKG_BUILD/objdir-$1/elf/ld*.so.* $INSTALL/lib cp $PKG_BUILD/objdir-$1/libc.so.6 $INSTALL/lib - cp $PKG_BUILD/objdir-$1/dlfcn/libdl.so.2 $INSTALL/lib - cp $PKG_BUILD/objdir-$1/nptl/libpthread.so.0 $INSTALL/lib cp $PKG_BUILD/objdir-$1/math/libm.so.6 $INSTALL/lib - cp $PKG_BUILD/objdir-$1/login/libutil.so.1 $INSTALL/lib # e.g. for utmp support, needed by PAM_filter - cp $PKG_BUILD/objdir-$1/rt/librt.so.1 $INSTALL/lib - cp $PKG_BUILD/objdir-$1/resolv/libnss_dns.so.2 $INSTALL/lib - cp $PKG_BUILD/objdir-$1/nis/libnsl.so.1 $INSTALL/lib - cp $PKG_BUILD/objdir-$1/nis/libnss_compat.so.2 $INSTALL/lib - cp $PKG_BUILD/objdir-$1/nss/libnss_files.so.2 $INSTALL/lib - cp $PKG_BUILD/objdir-$1/crypt/libcrypt.so.1 $INSTALL/lib - cp $PKG_BUILD/objdir-$1/resolv/libresolv.so.2 $INSTALL/lib + +mkdir -p $INSTALL/usr/lib + cp $PKG_BUILD/objdir-$1/crypt/libcrypt.so.1 $INSTALL/usr/lib + cp $PKG_BUILD/objdir-$1/dlfcn/libdl.so.2 $INSTALL/usr/lib + cp $PKG_BUILD/objdir-$1/nis/libnsl.so.1 $INSTALL/usr/lib + cp $PKG_BUILD/objdir-$1/nis/libnss_compat.so.2 $INSTALL/usr/lib + cp $PKG_BUILD/objdir-$1/nss/libnss_files.so.2 $INSTALL/usr/lib + cp $PKG_BUILD/objdir-$1/resolv/libnss_dns.so.2 $INSTALL/usr/lib + cp $PKG_BUILD/objdir-$1/resolv/libresolv.so.2 $INSTALL/usr/lib + cp $PKG_BUILD/objdir-$1/rt/librt.so.1 $INSTALL/usr/lib + cp $PKG_BUILD/objdir-$1/nptl/libpthread.so.0 $INSTALL/usr/lib + cp $PKG_BUILD/objdir-$1/login/libutil.so.1 $INSTALL/usr/lib # e.g. for utmp support, needed by PAM_filter + [ "$DEVTOOLS" = yes ] && cp $PKG_BUILD/objdir-$1/nptl_db/libthread_db.so.1 $INSTALL/lib # for GDB -mkdir -p $INSTALL/bin - cp $PKG_BUILD/objdir-$1/elf/ldd $INSTALL/bin - sed -i 's%bash%sh%g' $INSTALL/bin/ldd +mkdir -p $INSTALL/usr/bin + cp $PKG_BUILD/objdir-$1/elf/ldd $INSTALL/usr/bin + sed -i 's%bash%sh%g' $INSTALL/usr/bin/ldd - cp $PKG_BUILD/objdir-$1/locale/locale $INSTALL/bin + cp $PKG_BUILD/objdir-$1/locale/locale $INSTALL/usr/bin # libiconv replacement: # mkdir -p $INSTALL/usr/lib/gconv From 3f81554ec00d82faedfe666d7d1b41174e921d67 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 5 Nov 2011 01:21:07 +0100 Subject: [PATCH 22/89] LVM2: install bins to /usr/bin Signed-off-by: Stephan Raue --- packages/sysutils/LVM2/build | 3 +++ packages/sysutils/LVM2/install | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/sysutils/LVM2/build b/packages/sysutils/LVM2/build index 6ccacdb5e4..a90a9db9d9 100755 --- a/packages/sysutils/LVM2/build +++ b/packages/sysutils/LVM2/build @@ -27,6 +27,8 @@ ac_cv_func_malloc_0_nonnull=yes \ ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ + --bindir=/usr/bin \ + --sbindir=/usr/bin \ --disable-lvm1_fallback \ --disable-static_link \ --disable-readline \ @@ -47,3 +49,4 @@ ac_cv_func_malloc_0_nonnull=yes \ make $MAKEINSTALL +make DESTDIR=`pwd`/.install install \ No newline at end of file diff --git a/packages/sysutils/LVM2/install b/packages/sysutils/LVM2/install index ea7d1253ba..9e07a90c7d 100755 --- a/packages/sysutils/LVM2/install +++ b/packages/sysutils/LVM2/install @@ -29,7 +29,7 @@ mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/libdm/ioctl/libdevmapper.so* $INSTALL/usr/lib if [ "$DEVTOOLS" = yes ]; then - mkdir -p $INSTALL/sbin - cp $PKG_BUILD/tools/lvm $INSTALL/sbin + mkdir -p $INSTALL/usr/bin + cp $PKG_BUILD/tools/lvm $INSTALL/usr/bin fi From 6de7e6b365fa2c16c5585b70f30b1c6e843ac925 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 5 Nov 2011 01:25:00 +0100 Subject: [PATCH 23/89] diskdev_cmds-initramfs: install bins to /bin Signed-off-by: Stephan Raue --- .../initramfs/sysutils/diskdev_cmds-initramfs/install | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/initramfs/sysutils/diskdev_cmds-initramfs/install b/packages/initramfs/sysutils/diskdev_cmds-initramfs/install index 3e4e3ef6e3..ce907bf067 100755 --- a/packages/initramfs/sysutils/diskdev_cmds-initramfs/install +++ b/packages/initramfs/sysutils/diskdev_cmds-initramfs/install @@ -24,7 +24,7 @@ DISKDEV_CMDS_DIR="$BUILD/diskdev_cmds-*" -mkdir -p $INSTALL/sbin - cp $DISKDEV_CMDS_DIR/fsck_hfs.tproj/fsck_hfs $INSTALL/sbin - ln -sf fsck_hfs $INSTALL/sbin/fsck.hfs - ln -sf fsck_hfs $INSTALL/sbin/fsck.hfsplus +mkdir -p $INSTALL/bin + cp $DISKDEV_CMDS_DIR/fsck_hfs.tproj/fsck_hfs $INSTALL/bin + ln -sf fsck_hfs $INSTALL/bin/fsck.hfs + ln -sf fsck_hfs $INSTALL/bin/fsck.hfsplus From 2b295192c8ea45fee4bba3f3c261c60261badd49 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 5 Nov 2011 01:25:29 +0100 Subject: [PATCH 24/89] diskdev_cmds: install bins to /bin, dont install filesystem create tools Signed-off-by: Stephan Raue --- packages/sysutils/diskdev_cmds/install | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/packages/sysutils/diskdev_cmds/install b/packages/sysutils/diskdev_cmds/install index 032b34818e..387ea8d658 100755 --- a/packages/sysutils/diskdev_cmds/install +++ b/packages/sysutils/diskdev_cmds/install @@ -22,11 +22,7 @@ . config/options $1 -mkdir -p $INSTALL/sbin - cp $PKG_BUILD/fsck_hfs.tproj/fsck_hfs $INSTALL/sbin - ln -sf fsck_hfs $INSTALL/sbin/fsck.hfs - ln -sf fsck_hfs $INSTALL/sbin/fsck.hfsplus - - cp $PKG_BUILD/newfs_hfs.tproj/newfs_hfs $INSTALL/sbin - ln -sf newfs_hfs $INSTALL/sbin/mkfs.hfs - ln -sf newfs_hfs $INSTALL/sbin/mkfs.hfsplus +mkdir -p $INSTALL/bin + cp $PKG_BUILD/fsck_hfs.tproj/fsck_hfs $INSTALL/bin + ln -sf fsck_hfs $INSTALL/bin/fsck.hfs + ln -sf fsck_hfs $INSTALL/bin/fsck.hfsplus From 1abbda5d8c5b209c847cff1c2f22448b00d61fd3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 5 Nov 2011 01:25:46 +0100 Subject: [PATCH 25/89] e2fsprogs-initramfs: install bins to /bin Signed-off-by: Stephan Raue --- .../initramfs/sysutils/e2fsprogs-initramfs/install | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/initramfs/sysutils/e2fsprogs-initramfs/install b/packages/initramfs/sysutils/e2fsprogs-initramfs/install index 20ee681f73..cdd6680349 100755 --- a/packages/initramfs/sysutils/e2fsprogs-initramfs/install +++ b/packages/initramfs/sysutils/e2fsprogs-initramfs/install @@ -27,12 +27,12 @@ E2FSPROGS_DIR="$BUILD/e2fsprogs-*" mkdir -p $INSTALL/etc cp $E2FSPROGS_DIR/misc/mke2fs.conf $INSTALL/etc -mkdir -p $INSTALL/sbin - cp $E2FSPROGS_DIR/e2fsck/e2fsck $INSTALL/sbin - ln -sf e2fsck $INSTALL/sbin/fsck.ext2 - ln -sf e2fsck $INSTALL/sbin/fsck.ext3 - ln -sf e2fsck $INSTALL/sbin/fsck.ext4 - ln -sf e2fsck $INSTALL/sbin/fsck.ext4dev +mkdir -p $INSTALL/bin + cp $E2FSPROGS_DIR/e2fsck/e2fsck $INSTALL/bin + ln -sf e2fsck $INSTALL/bin/fsck.ext2 + ln -sf e2fsck $INSTALL/bin/fsck.ext3 + ln -sf e2fsck $INSTALL/bin/fsck.ext4 + ln -sf e2fsck $INSTALL/bin/fsck.ext4dev mkdir -p $INSTALL/lib cp -P $E2FSPROGS_DIR/lib/e2p/libe2p.so.* $INSTALL/lib From 49aee97185f1c686b42ca9aa86d7fe6a3c4785d3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 5 Nov 2011 01:28:22 +0100 Subject: [PATCH 26/89] plymouth-lite: install bins to /bin Signed-off-by: Stephan Raue --- packages/initramfs/sysutils/busybox-initramfs/scripts/init | 6 +++--- packages/initramfs/sysutils/plymouth-lite/install | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/initramfs/sysutils/busybox-initramfs/scripts/init b/packages/initramfs/sysutils/busybox-initramfs/scripts/init index 31b0962c15..2621d54f7d 100755 --- a/packages/initramfs/sysutils/busybox-initramfs/scripts/init +++ b/packages/initramfs/sysutils/busybox-initramfs/scripts/init @@ -101,8 +101,8 @@ NFS_OVERLAY="192.168.1.1:/var/lib/overlay" if [ "$SPLASH" = "no" ]; then break else - if [ -f "/sbin/ply-image" ]; then - /sbin/ply-image "$SPLASHIMAGE" & + if [ -f "/bin/ply-image" ]; then + /bin/ply-image "$SPLASHIMAGE" & fi fi } @@ -160,7 +160,7 @@ NFS_OVERLAY="192.168.1.1:/var/lib/overlay" if [ "$FS_TYPE" = "\"hfs\"" -o "$FS_TYPE" = "\"hfsplus\"" ]; then progress "check filesystem $DEVICE [$FS_TYPE]..." - /sbin/fsck_hfs -r -y $DEVICE > /dev/null 2>&1 + /bin/fsck_hfs -r -y $DEVICE > /dev/null 2>&1 fi done } diff --git a/packages/initramfs/sysutils/plymouth-lite/install b/packages/initramfs/sysutils/plymouth-lite/install index df85e99e69..c01a7bf46d 100755 --- a/packages/initramfs/sysutils/plymouth-lite/install +++ b/packages/initramfs/sysutils/plymouth-lite/install @@ -22,8 +22,8 @@ . config/options $1 -mkdir -p $INSTALL/sbin - cp $PKG_BUILD/ply-image $INSTALL/sbin +mkdir -p $INSTALL/bin + cp $PKG_BUILD/ply-image $INSTALL/bin mkdir -p $INSTALL/splash if [ -f $PROJECT_DIR/$PROJECT/splash/splash.png ]; then From 9f13a9baec73da94dbe6b9f3a13bc4eb5b442889 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 5 Nov 2011 01:31:24 +0100 Subject: [PATCH 27/89] hdparm: install bins to /usr/bin Signed-off-by: Stephan Raue --- packages/tools/hdparm/build | 2 +- packages/tools/hdparm/install | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/tools/hdparm/build b/packages/tools/hdparm/build index 35ae8ec7a8..0a9e5c080d 100755 --- a/packages/tools/hdparm/build +++ b/packages/tools/hdparm/build @@ -25,4 +25,4 @@ LDFLAGS="$CFLAGS $LDFLAGS -fwhole-program" cd $PKG_BUILD - make binprefix="/usr" sbindir="/sbin" + make binprefix="/usr" sbindir="/usr/bin" diff --git a/packages/tools/hdparm/install b/packages/tools/hdparm/install index 766f42c877..abb22d7069 100755 --- a/packages/tools/hdparm/install +++ b/packages/tools/hdparm/install @@ -22,5 +22,5 @@ . config/options $1 -mkdir -p $INSTALL/sbin - cp $PKG_BUILD/hdparm $INSTALL/sbin +mkdir -p $INSTALL/usr/bin + cp $PKG_BUILD/hdparm $INSTALL/usr/bin From 7526bdf542f54139c70fda3b198a0a45a143045c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 5 Nov 2011 01:42:55 +0100 Subject: [PATCH 28/89] wpa_supplicant: install bins to /usr/bin Signed-off-by: Stephan Raue --- packages/network/connman/build | 4 +++- packages/network/wpa_supplicant/build | 2 +- packages/network/wpa_supplicant/install | 6 +++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/network/connman/build b/packages/network/connman/build index d91bd8074f..1015f250fb 100755 --- a/packages/network/connman/build +++ b/packages/network/connman/build @@ -22,8 +22,10 @@ . config/options $1 +export WPASUPPLICANT="/usr/bin/wpa_supplicant" + cd $PKG_BUILD -ac_cv_path_WPASUPPLICANT="/sbin/wpa_supplicant" \ +#ac_cv_path_WPASUPPLICANT="/sbin/wpa_supplicant" \ ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ diff --git a/packages/network/wpa_supplicant/build b/packages/network/wpa_supplicant/build index cbfcf9cb08..77909d5388 100755 --- a/packages/network/wpa_supplicant/build +++ b/packages/network/wpa_supplicant/build @@ -30,4 +30,4 @@ cp $ROOT/$PKG_DIR/config/makefile.config .config # echo "CONFIG_GNUTLS_EXTRA=y" >> .config [ ! "$DEBUG" = "yes" ] && echo "CONFIG_NO_STDOUT_DEBUG=y" >> .config -make +make LIBDIR=/usr/lib BINDIR=/usr/bin diff --git a/packages/network/wpa_supplicant/install b/packages/network/wpa_supplicant/install index 8b38a06262..4458efd4b4 100755 --- a/packages/network/wpa_supplicant/install +++ b/packages/network/wpa_supplicant/install @@ -25,9 +25,9 @@ mkdir -p $INSTALL/etc/dbus-1/system.d cp $PKG_BUILD/wpa_supplicant/dbus/dbus-wpa_supplicant.conf $INSTALL/etc/dbus-1/system.d -mkdir -p $INSTALL/sbin - cp $PKG_BUILD/wpa_supplicant/wpa_supplicant $INSTALL/sbin - cp $PKG_BUILD/wpa_supplicant/wpa_passphrase $INSTALL/sbin +mkdir -p $INSTALL/usr/bin + cp $PKG_BUILD/wpa_supplicant/wpa_supplicant $INSTALL/usr/bin + cp $PKG_BUILD/wpa_supplicant/wpa_passphrase $INSTALL/usr/bin mkdir -p $INSTALL/usr/share/dbus-1/system-services cp $PKG_BUILD/wpa_supplicant/dbus/fi.w1.wpa_supplicant1.service $INSTALL/usr/share/dbus-1/system-services From a17a361950de4154d64d6ec45727affe2c917502 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 5 Nov 2011 02:53:07 +0100 Subject: [PATCH 29/89] udisks: install bins to /usr/bin Signed-off-by: Stephan Raue --- packages/sysutils/udisks/build | 2 ++ packages/sysutils/udisks/install | 4 +--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/sysutils/udisks/build b/packages/sysutils/udisks/build index 796665aa7f..a1dc97187f 100755 --- a/packages/sysutils/udisks/build +++ b/packages/sysutils/udisks/build @@ -26,6 +26,8 @@ cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ + --bindir=/usr/bin \ + --sbindir=/usr/bin \ --sysconfdir=/etc \ --datadir=/usr/share \ --libexecdir=/usr/lib/udisks \ diff --git a/packages/sysutils/udisks/install b/packages/sysutils/udisks/install index f3ba306b35..15ce595976 100755 --- a/packages/sysutils/udisks/install +++ b/packages/sysutils/udisks/install @@ -34,11 +34,9 @@ mkdir -p $INSTALL/usr/lib/udev mkdir -p $INSTALL/usr/lib/udev/rules.d # cp $PKG_BUILD/data/80-udisks.rules $INSTALL/usr/lib/udev/rules.d -mkdir -p $INSTALL/sbin - cp -P $PKG_BUILD/tools/umount.udisks $INSTALL/sbin - mkdir -p $INSTALL/usr/bin cp -P $PKG_BUILD/tools/udisks $INSTALL/usr/bin + cp -P $PKG_BUILD/tools/umount.udisks $INSTALL/usr/bin mkdir -p $INSTALL/usr/lib/udisks cp -P $PKG_BUILD/src/udisks-daemon $INSTALL/usr/lib/udisks From 6523518686dbb960edc92a8643609f3538e833d3 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 7 Nov 2011 10:45:28 +0100 Subject: [PATCH 30/89] xbmc: update to xbmc-b44b653 Signed-off-by: Stephan Raue --- .../mediacenter/xbmc-theme-Confluence/meta | 2 +- packages/mediacenter/xbmc/meta | 2 +- ...e96bf4fc0467744f840fbc85d1a65cbb6f08.patch | 48 - ...-add_support_to_specify_GIT_REV-0.1.patch} | 0 ...13-reenable_lcd_config_settings-0.1.patch} | 0 ...c-b44b653-303-fix_libdvd_xFLAGS-0.1.patch} | 0 ...xbmc-b44b653-311-fix_rsxs_build-0.1.patch} | 0 ... => xbmc-b44b653-341-xbmc-PR468-0.1.patch} | 2276 ++++++----------- ...4b653-351-increase_YV12_buffers-0.1.patch} | 0 ...xSwapBuffers_going_to_far_ahead-0.1.patch} | 0 ...mber_of_video_surface_allocated-0.1.patch} | 0 ...4b653-402-enable_yasm_in_ffmpeg-0.1.patch} | 0 ...xbmc-b44b653-404-add_lame_check-0.6.patch} | 0 ...ONOPTIMIZE_with_external_Python-0.1.patch} | 0 ...-b44b653-452-change_lcd_content-0.1.patch} | 0 ...53-453-add_openelec.tv_RSS_news-0.1.patch} | 0 ...c-b44b653-454-disable_backslash-0.1.patch} | 0 ...44b653-457-fix_connection_check-0.1.patch} | 0 ...-add_remote_irtrans_mediacenter-0.1.patch} | 0 ...b44b653-463-add_remote_devinput-0.1.patch} | 0 ...4-add_eject_keymapping_for_lirc-0.1.patch} | 0 21 files changed, 834 insertions(+), 1494 deletions(-) delete mode 100644 packages/mediacenter/xbmc/patches/xbmc-4c32cde-342-revert_ffmpeg_00d1e96bf4fc0467744f840fbc85d1a65cbb6f08.patch rename packages/mediacenter/xbmc/patches/{xbmc-4c32cde-001-add_support_to_specify_GIT_REV-0.1.patch => xbmc-b44b653-001-add_support_to_specify_GIT_REV-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-4c32cde-013-reenable_lcd_config_settings-0.1.patch => xbmc-b44b653-013-reenable_lcd_config_settings-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-4c32cde-303-fix_libdvd_xFLAGS-0.1.patch => xbmc-b44b653-303-fix_libdvd_xFLAGS-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-4c32cde-311-fix_rsxs_build-0.1.patch => xbmc-b44b653-311-fix_rsxs_build-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-4c32cde-341-xbmc-PR468-0.1.patch => xbmc-b44b653-341-xbmc-PR468-0.1.patch} (53%) rename packages/mediacenter/xbmc/patches/{xbmc-4c32cde-351-increase_YV12_buffers-0.1.patch => xbmc-b44b653-351-increase_YV12_buffers-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-4c32cde-353-limit_glxSwapBuffers_going_to_far_ahead-0.1.patch => xbmc-b44b653-353-limit_glxSwapBuffers_going_to_far_ahead-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-4c32cde-354-vaapi_increase_number_of_video_surface_allocated-0.1.patch => xbmc-b44b653-354-vaapi_increase_number_of_video_surface_allocated-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-4c32cde-402-enable_yasm_in_ffmpeg-0.1.patch => xbmc-b44b653-402-enable_yasm_in_ffmpeg-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-4c32cde-404-add_lame_check-0.6.patch => xbmc-b44b653-404-add_lame_check-0.6.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-4c32cde-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch => xbmc-b44b653-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-4c32cde-452-change_lcd_content-0.1.patch => xbmc-b44b653-452-change_lcd_content-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-4c32cde-453-add_openelec.tv_RSS_news-0.1.patch => xbmc-b44b653-453-add_openelec.tv_RSS_news-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-4c32cde-454-disable_backslash-0.1.patch => xbmc-b44b653-454-disable_backslash-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-4c32cde-457-fix_connection_check-0.1.patch => xbmc-b44b653-457-fix_connection_check-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-4c32cde-462-add_remote_irtrans_mediacenter-0.1.patch => xbmc-b44b653-462-add_remote_irtrans_mediacenter-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-4c32cde-463-add_remote_devinput-0.1.patch => xbmc-b44b653-463-add_remote_devinput-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-4c32cde-464-add_eject_keymapping_for_lirc-0.1.patch => xbmc-b44b653-464-add_eject_keymapping_for_lirc-0.1.patch} (100%) diff --git a/packages/mediacenter/xbmc-theme-Confluence/meta b/packages/mediacenter/xbmc-theme-Confluence/meta index 1cc36a46eb..63971295d2 100644 --- a/packages/mediacenter/xbmc-theme-Confluence/meta +++ b/packages/mediacenter/xbmc-theme-Confluence/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="xbmc-theme-Confluence" -PKG_VERSION="4c32cde" +PKG_VERSION="b44b653" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/xbmc/meta b/packages/mediacenter/xbmc/meta index 90cc7efef6..49c6321c9b 100644 --- a/packages/mediacenter/xbmc/meta +++ b/packages/mediacenter/xbmc/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="xbmc" -PKG_VERSION="4c32cde" +PKG_VERSION="b44b653" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/xbmc/patches/xbmc-4c32cde-342-revert_ffmpeg_00d1e96bf4fc0467744f840fbc85d1a65cbb6f08.patch b/packages/mediacenter/xbmc/patches/xbmc-4c32cde-342-revert_ffmpeg_00d1e96bf4fc0467744f840fbc85d1a65cbb6f08.patch deleted file mode 100644 index 641471f691..0000000000 --- a/packages/mediacenter/xbmc/patches/xbmc-4c32cde-342-revert_ffmpeg_00d1e96bf4fc0467744f840fbc85d1a65cbb6f08.patch +++ /dev/null @@ -1,48 +0,0 @@ -diff -Naur xbmc-4c32cde/lib/ffmpeg/libavcodec/h264.c xbmc-4c32cde.patch/lib/ffmpeg/libavcodec/h264.c ---- xbmc-4c32cde/lib/ffmpeg/libavcodec/h264.c 2011-10-28 15:29:40.000000000 +0200 -+++ xbmc-4c32cde.patch/lib/ffmpeg/libavcodec/h264.c 2011-10-29 15:18:16.716609657 +0200 -@@ -1802,7 +1802,7 @@ - if(h->sps.frame_mbs_only_flag) - s->height= 16*s->mb_height - 2*FFMIN(h->sps.crop_bottom, 7); - else -- s->height= 16*s->mb_height - 4*FFMIN(h->sps.crop_bottom, 7); -+ s->height= 16*s->mb_height - 4*FFMIN(h->sps.crop_bottom, 3); - - if (s->context_initialized - && ( s->width != s->avctx->width || s->height != s->avctx->height -diff -Naur xbmc-4c32cde/lib/ffmpeg/libavcodec/h264_ps.c xbmc-4c32cde.patch/lib/ffmpeg/libavcodec/h264_ps.c ---- xbmc-4c32cde/lib/ffmpeg/libavcodec/h264_ps.c 2011-10-28 15:29:39.000000000 +0200 -+++ xbmc-4c32cde.patch/lib/ffmpeg/libavcodec/h264_ps.c 2011-10-29 15:18:16.718609683 +0200 -@@ -374,7 +374,7 @@ - if(sps->crop_left || sps->crop_top){ - av_log(h->s.avctx, AV_LOG_ERROR, "insane cropping not completely supported, this could look slightly wrong ...\n"); - } -- if(sps->crop_right >= 8 || sps->crop_bottom >= 8){ -+ if(sps->crop_right >= 8 || sps->crop_bottom >= (8>> !sps->frame_mbs_only_flag)){ - av_log(h->s.avctx, AV_LOG_ERROR, "brainfart cropping not supported, this could look slightly wrong ...\n"); - } - }else{ -diff -Naur xbmc-4c32cde/lib/ffmpeg/libavcodec/mpegvideo.c xbmc-4c32cde.patch/lib/ffmpeg/libavcodec/mpegvideo.c ---- xbmc-4c32cde/lib/ffmpeg/libavcodec/mpegvideo.c 2011-10-28 15:29:40.000000000 +0200 -+++ xbmc-4c32cde.patch/lib/ffmpeg/libavcodec/mpegvideo.c 2011-10-29 15:18:16.719609696 +0200 -@@ -498,7 +498,7 @@ - - if(s->codec_id == CODEC_ID_MPEG2VIDEO && !s->progressive_sequence) - s->mb_height = (s->height + 31) / 32 * 2; -- else if (s->codec_id != CODEC_ID_H264) -+ else - s->mb_height = (s->height + 15) / 16; - - if(s->avctx->pix_fmt == PIX_FMT_NONE){ -diff -Naur xbmc-4c32cde/lib/ffmpeg/libavcodec/utils.c xbmc-4c32cde.patch/lib/ffmpeg/libavcodec/utils.c ---- xbmc-4c32cde/lib/ffmpeg/libavcodec/utils.c 2011-10-28 15:29:41.000000000 +0200 -+++ xbmc-4c32cde.patch/lib/ffmpeg/libavcodec/utils.c 2011-10-29 15:18:16.721609720 +0200 -@@ -145,7 +145,7 @@ - case PIX_FMT_YUVA420P: - w_align= 16; //FIXME check for non mpeg style codecs and use less alignment - h_align= 16; -- if(s->codec_id == CODEC_ID_MPEG2VIDEO || s->codec_id == CODEC_ID_MJPEG || s->codec_id == CODEC_ID_AMV || s->codec_id == CODEC_ID_THP || s->codec_id == CODEC_ID_H264) -+ if(s->codec_id == CODEC_ID_MPEG2VIDEO || s->codec_id == CODEC_ID_MJPEG || s->codec_id == CODEC_ID_AMV || s->codec_id == CODEC_ID_THP) - h_align= 32; // interlaced is rounded up to 2 MBs - break; - case PIX_FMT_YUV411P: diff --git a/packages/mediacenter/xbmc/patches/xbmc-4c32cde-001-add_support_to_specify_GIT_REV-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-b44b653-001-add_support_to_specify_GIT_REV-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-4c32cde-001-add_support_to_specify_GIT_REV-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-b44b653-001-add_support_to_specify_GIT_REV-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-4c32cde-013-reenable_lcd_config_settings-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-b44b653-013-reenable_lcd_config_settings-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-4c32cde-013-reenable_lcd_config_settings-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-b44b653-013-reenable_lcd_config_settings-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-4c32cde-303-fix_libdvd_xFLAGS-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-b44b653-303-fix_libdvd_xFLAGS-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-4c32cde-303-fix_libdvd_xFLAGS-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-b44b653-303-fix_libdvd_xFLAGS-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-4c32cde-311-fix_rsxs_build-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-b44b653-311-fix_rsxs_build-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-4c32cde-311-fix_rsxs_build-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-b44b653-311-fix_rsxs_build-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-4c32cde-341-xbmc-PR468-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-b44b653-341-xbmc-PR468-0.1.patch similarity index 53% rename from packages/mediacenter/xbmc/patches/xbmc-4c32cde-341-xbmc-PR468-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-b44b653-341-xbmc-PR468-0.1.patch index 9f2150ea86..69a09161fd 100644 --- a/packages/mediacenter/xbmc/patches/xbmc-4c32cde-341-xbmc-PR468-0.1.patch +++ b/packages/mediacenter/xbmc/patches/xbmc-b44b653-341-xbmc-PR468-0.1.patch @@ -1,39 +1,15 @@ -From 23d2cd19f9f867637bb0e72e57bba56ded85f60c Mon Sep 17 00:00:00 2001 -From: Rainer Hochecker -Date: Sat, 8 Oct 2011 10:44:23 +0200 -Subject: [PATCH 1/6] vdpau: notify decoder when refresh rate is going to - change and flush renderer - ---- - xbmc/ApplicationMessenger.cpp | 5 ++ - xbmc/ApplicationMessenger.h | 1 + - xbmc/cores/VideoRenderers/BaseRenderer.h | 1 + - xbmc/cores/VideoRenderers/LinuxRendererGL.cpp | 14 ++++ - xbmc/cores/VideoRenderers/LinuxRendererGL.h | 1 + - xbmc/cores/VideoRenderers/RenderManager.cpp | 29 ++++++++ - xbmc/cores/VideoRenderers/RenderManager.h | 2 + - xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 79 ++++++++++++++++++--- - xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h | 22 ++++-- - xbmc/guilib/DispResource.h | 33 +++++++++ - xbmc/windowing/X11/WinSystemX11.cpp | 90 ++++++++++++++++++++++++ - xbmc/windowing/X11/WinSystemX11.h | 11 +++ - xbmc/windowing/X11/WinSystemX11GL.cpp | 2 + - 13 files changed, 274 insertions(+), 16 deletions(-) - create mode 100644 xbmc/guilib/DispResource.h - -diff --git a/xbmc/ApplicationMessenger.cpp b/xbmc/ApplicationMessenger.cpp -index 9cd3723..5e7bcfa 100644 ---- a/xbmc/ApplicationMessenger.cpp -+++ b/xbmc/ApplicationMessenger.cpp -@@ -42,6 +42,7 @@ - #include "guilib/GUIDialog.h" +diff -Naur xbmc-b44b653/xbmc/ApplicationMessenger.cpp xbmc-b44b653.patch/xbmc/ApplicationMessenger.cpp +--- xbmc-b44b653/xbmc/ApplicationMessenger.cpp 2011-11-06 23:13:34.000000000 +0100 ++++ xbmc-b44b653.patch/xbmc/ApplicationMessenger.cpp 2011-11-06 23:52:47.037192895 +0100 +@@ -43,6 +43,7 @@ #include "windowing/WindowingFactory.h" #include "GUIInfoManager.h" + #include "utils/Splash.h" +#include "cores/VideoRenderers/RenderManager.h" #include "powermanagement/PowerManager.h" -@@ -231,6 +232,10 @@ void CApplicationMessenger::ProcessMessage(ThreadMessage *pMsg) +@@ -232,6 +233,10 @@ case POWERSTATE_MINIMIZE: Minimize(); break; @@ -44,11 +20,10 @@ index 9cd3723..5e7bcfa 100644 } } break; -diff --git a/xbmc/ApplicationMessenger.h b/xbmc/ApplicationMessenger.h -index b0b4687..31b4ffb 100644 ---- a/xbmc/ApplicationMessenger.h -+++ b/xbmc/ApplicationMessenger.h -@@ -76,6 +76,7 @@ class CGUIWindow; +diff -Naur xbmc-b44b653/xbmc/ApplicationMessenger.h xbmc-b44b653.patch/xbmc/ApplicationMessenger.h +--- xbmc-b44b653/xbmc/ApplicationMessenger.h 2011-11-06 23:13:35.000000000 +0100 ++++ xbmc-b44b653.patch/xbmc/ApplicationMessenger.h 2011-11-06 23:52:47.038192908 +0100 +@@ -76,6 +76,7 @@ #define TMSG_MINIMIZE 309 #define TMSG_TOGGLEFULLSCREEN 310 #define TMSG_SETLANGUAGE 311 @@ -56,884 +31,10 @@ index b0b4687..31b4ffb 100644 #define TMSG_HTTPAPI 400 -diff --git a/xbmc/cores/VideoRenderers/BaseRenderer.h b/xbmc/cores/VideoRenderers/BaseRenderer.h -index faef87c..af51852 100644 ---- a/xbmc/cores/VideoRenderers/BaseRenderer.h -+++ b/xbmc/cores/VideoRenderers/BaseRenderer.h -@@ -64,6 +64,7 @@ public: - float GetAspectRatio() const; - - virtual bool AddVideoPicture(DVDVideoPicture* picture) { return false; } -+ virtual void Flush() {}; - - virtual unsigned int GetProcessorSize() { return 0; } - -diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp -index 02d317e..0e247aa 100644 ---- a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp -+++ b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp -@@ -554,6 +554,20 @@ void CLinuxRendererGL::Reset() - } - } - -+void CLinuxRendererGL::Flush() -+{ -+ if (!m_bValidated) -+ return; -+ -+ glFinish(); -+ -+ for (int i = 0 ; i < m_NumYV12Buffers ; i++) -+ (this->*m_textureDelete)(i); -+ -+ glFinish(); -+ m_bValidated = false; -+} -+ - void CLinuxRendererGL::Update(bool bPauseDrawing) - { - if (!m_bConfigured) return; -diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGL.h b/xbmc/cores/VideoRenderers/LinuxRendererGL.h -index 8f1664a..38c84aa 100644 ---- a/xbmc/cores/VideoRenderers/LinuxRendererGL.h -+++ b/xbmc/cores/VideoRenderers/LinuxRendererGL.h -@@ -140,6 +140,7 @@ public: - virtual unsigned int PreInit(); - virtual void UnInit(); - virtual void Reset(); /* resets renderer after seek for example */ -+ virtual void Flush(); - - #ifdef HAVE_LIBVDPAU - virtual void AddProcessor(CVDPAU* vdpau); -diff --git a/xbmc/cores/VideoRenderers/RenderManager.cpp b/xbmc/cores/VideoRenderers/RenderManager.cpp -index 50c465c..31bb49a 100644 ---- a/xbmc/cores/VideoRenderers/RenderManager.cpp -+++ b/xbmc/cores/VideoRenderers/RenderManager.cpp -@@ -337,6 +337,35 @@ void CXBMCRenderManager::UnInit() - m_pRenderer->UnInit(); - } - -+bool CXBMCRenderManager::Flush() -+{ -+ if (!m_pRenderer) -+ return true; -+ -+ if (g_application.IsCurrentThread()) -+ { -+ CLog::Log(LOGDEBUG, "%s - flushing renderer", __FUNCTION__); -+ -+ CRetakeLock lock(m_sharedSection); -+ m_pRenderer->Flush(); -+ m_flushEvent.Set(); -+ } -+ else -+ { -+ ThreadMessage msg = {TMSG_RENDERER_FLUSH}; -+ m_flushEvent.Reset(); -+ g_application.getApplicationMessenger().SendMessage(msg, false); -+ if (!m_flushEvent.WaitMSec(1000)) -+ { -+ CLog::Log(LOGERROR, "%s - timed out waiting for renderer to flush", __FUNCTION__); -+ return false; -+ } -+ else -+ return true; -+ } -+ return true; -+} -+ - void CXBMCRenderManager::SetupScreenshot() - { - CSharedLock lock(m_sharedSection); -diff --git a/xbmc/cores/VideoRenderers/RenderManager.h b/xbmc/cores/VideoRenderers/RenderManager.h -index f8f68ab..b81bced 100644 ---- a/xbmc/cores/VideoRenderers/RenderManager.h -+++ b/xbmc/cores/VideoRenderers/RenderManager.h -@@ -76,6 +76,7 @@ public: - void FlipPage(volatile bool& bStop, double timestamp = 0.0, int source = -1, EFIELDSYNC sync = FS_NONE); - unsigned int PreInit(); - void UnInit(); -+ bool Flush(); - - void AddOverlay(CDVDOverlay* o, double pts) - { -@@ -227,6 +228,7 @@ protected: - EPRESENTSTEP m_presentstep; - int m_presentsource; - CEvent m_presentevent; -+ CEvent m_flushEvent; - - - OVERLAY::CRenderer m_overlays; -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp -index 0ad0451..06629df 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp -@@ -95,6 +95,7 @@ CVDPAU::CVDPAU() - recover = false; - m_mixerfield = VDP_VIDEO_MIXER_PICTURE_STRUCTURE_FRAME; - m_mixerstep = 0; -+ m_DisplayState = VDPAU_OPEN; - - m_glPixmap = 0; - m_Pixmap = 0; -@@ -191,6 +192,8 @@ bool CVDPAU::Open(AVCodecContext* avctx, const enum PixelFormat, unsigned int su - avctx->release_buffer = CVDPAU::FFReleaseBuffer; - avctx->draw_horiz_band = CVDPAU::FFDrawSlice; - avctx->slice_flags=SLICE_FLAG_CODED_ORDER|SLICE_FLAG_ALLOW_FIELD; -+ -+ g_Windowing.Register(this); - return true; - } - return false; -@@ -208,6 +211,8 @@ void CVDPAU::Close() - FiniVDPAUOutput(); - FiniVDPAUProcs(); - -+ g_Windowing.Unregister(this); -+ - if (m_glPixmap) - { - CLog::Log(LOGINFO, "GLX: Destroying glPixmap"); -@@ -363,6 +368,11 @@ bool CVDPAU::MakePixmap(int width, int height) - - void CVDPAU::BindPixmap() - { -+ { CSingleLock lock(m_DisplaySection); -+ if (m_DisplayState != VDPAU_OPEN) -+ return; -+ } -+ - if (m_glPixmap) - { - if(presentSurface != VDP_INVALID_HANDLE) -@@ -389,6 +399,11 @@ void CVDPAU::BindPixmap() - - void CVDPAU::ReleasePixmap() - { -+ { CSingleLock lock(m_DisplaySection); -+ if (m_DisplayState != VDPAU_OPEN) -+ return; -+ } -+ - if (m_glPixmap) - { - glXReleaseTexImageEXT(m_Display, m_glPixmap, GLX_FRONT_LEFT_EXT); -@@ -396,22 +411,53 @@ void CVDPAU::ReleasePixmap() - else CLog::Log(LOGERROR,"(VDPAU) ReleasePixmap called without valid pixmap"); - } - --bool CVDPAU::CheckRecover(bool force) -+void CVDPAU::OnLostDevice() -+{ -+ CSingleLock lock(m_DisplaySection); -+ m_DisplayState = VDPAU_LOST; -+ m_DisplayEvent.Reset(); -+} -+ -+void CVDPAU::OnResetDevice() -+{ -+ CSingleLock lock(m_DisplaySection); -+ -+ if (m_DisplayState == VDPAU_LOST) -+ { -+ m_DisplayState = VDPAU_RESET; -+ m_DisplayEvent.Set(); -+ } -+} -+ -+int CVDPAU::Check(AVCodecContext* avctx) - { -- if (recover || force) -+ CSingleLock lock(m_DisplaySection); -+ -+ if (m_DisplayState == VDPAU_LOST) -+ { -+ lock.Leave(); -+ if (!m_DisplayEvent.WaitMSec(2000)) -+ { -+ CLog::Log(LOGERROR, "CVDPAU::Check - device didn't reset in reasonable time"); -+ return VC_ERROR; -+ } -+ lock.Enter(); -+ } -+ if (recover || m_DisplayState == VDPAU_RESET) - { - CLog::Log(LOGNOTICE,"Attempting recovery"); - - FiniVDPAUOutput(); - FiniVDPAUProcs(); - -- recover = false; -- - InitVDPAUProcs(); - -- return true; -+ recover = false; -+ m_DisplayState = VDPAU_OPEN; -+ -+ return VC_FLUSHED; - } -- return false; -+ return 0; - } - - bool CVDPAU::IsVDPAUFormat(PixelFormat format) -@@ -750,6 +796,9 @@ void CVDPAU::InitVDPAUProcs() - &VDPPreemptionCallbackFunction, - (void*)this); - CheckStatus(vdp_st, __LINE__); -+ -+ CSingleLock lock(m_DisplaySection); -+ m_DisplayState = VDPAU_OPEN; - } - - void CVDPAU::FiniVDPAUProcs() -@@ -1132,8 +1181,9 @@ int CVDPAU::Decode(AVCodecContext *avctx, AVFrame *pFrame) - VdpStatus vdp_st; - VdpTime time; - -- if (CheckRecover(false)) -- return VC_FLUSHED; -+ int result = Check(avctx); -+ if (result) -+ return result; - - if (!vdpauConfigured) - return VC_ERROR; -@@ -1318,6 +1368,11 @@ int CVDPAU::Decode(AVCodecContext *avctx, AVFrame *pFrame) - - bool CVDPAU::GetPicture(AVCodecContext* avctx, AVFrame* frame, DVDVideoPicture* picture) - { -+ { CSingleLock lock(m_DisplaySection); -+ if (m_DisplayState != VDPAU_OPEN) -+ return false; -+ } -+ - *picture = m_DVDVideoPics.front(); - // if this is the first field of an interlaced frame, we'll need - // this same picture for the second field later -@@ -1358,6 +1413,12 @@ void CVDPAU::Present() - { - //CLog::Log(LOGNOTICE,"%s",__FUNCTION__); - VdpStatus vdp_st; -+ -+ { CSingleLock lock(m_DisplaySection); -+ if (m_DisplayState != VDPAU_OPEN) -+ return; -+ } -+ - presentSurface = outputSurface; - - vdp_st = vdp_presentation_queue_display(vdp_flip_queue, -@@ -1370,7 +1431,7 @@ void CVDPAU::Present() - - void CVDPAU::VDPPreemptionCallbackFunction(VdpDevice device, void* context) - { -- CLog::Log(LOGERROR,"VDPAU Device Preempted - attempting recovery"); -+ CLog::Log(LOGDEBUG,"VDPAU Device Preempted - attempting recovery"); - CVDPAU* pCtx = (CVDPAU*)context; - pCtx->recover = true; - } -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h -index 2056de1..6eab3fc 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h -@@ -33,6 +33,8 @@ - #include - #include "threads/CriticalSection.h" - #include "settings/VideoSettings.h" -+#include "guilib/DispResource.h" -+#include "threads/Event.h" - namespace Surface { class CSurface; } - - #define NUM_OUTPUT_SURFACES 4 -@@ -44,6 +46,7 @@ namespace Surface { class CSurface; } - - class CVDPAU - : public CDVDVideoCodecFFmpeg::IHardwareDecoder -+ , public IDispResource - { - public: - -@@ -69,13 +72,8 @@ public: - virtual void Reset(); - virtual void Close(); - -- virtual int Check(AVCodecContext* avctx) -- { -- if(CheckRecover(false)) -- return VC_FLUSHED; -- else -- return 0; -- } -+ virtual int Check(AVCodecContext* avctx); -+ - virtual const std::string Name() { return "vdpau"; } - - bool MakePixmap(int width, int height); -@@ -227,4 +225,14 @@ public: - , VdpChromaType &chroma_type); - - std::vector m_videoSurfaces; -+ -+ enum EDisplayState -+ { VDPAU_OPEN -+ , VDPAU_RESET -+ , VDPAU_LOST -+ } m_DisplayState; -+ CCriticalSection m_DisplaySection; -+ CEvent m_DisplayEvent; -+ virtual void OnLostDevice(); -+ virtual void OnResetDevice(); - }; -diff --git a/xbmc/guilib/DispResource.h b/xbmc/guilib/DispResource.h -new file mode 100644 -index 0000000..d2833cb ---- /dev/null -+++ b/xbmc/guilib/DispResource.h -@@ -0,0 +1,33 @@ -+/* -+* Copyright (C) 2005-2008 Team XBMC -+* http://www.xbmc.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, 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 XBMC; see the file COPYING. If not, write to -+* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -+* http://www.gnu.org/copyleft/gpl.html -+* -+*/ -+ -+#pragma once -+ -+#ifdef HAS_GLX -+class IDispResource -+{ -+public: -+ virtual ~IDispResource() {}; -+ virtual void OnLostDevice() {}; -+ virtual void OnResetDevice() {}; -+}; -+ -+#endif -diff --git a/xbmc/windowing/X11/WinSystemX11.cpp b/xbmc/windowing/X11/WinSystemX11.cpp -index 4287a04..ea20c0e 100644 ---- a/xbmc/windowing/X11/WinSystemX11.cpp -+++ b/xbmc/windowing/X11/WinSystemX11.cpp -@@ -27,9 +27,18 @@ - #include "WinSystemX11.h" - #include "settings/Settings.h" - #include "guilib/Texture.h" -+#include "guilib/DispResource.h" - #include "utils/log.h" - #include "XRandR.h" - #include -+#include "threads/SingleLock.h" -+#include -+#include "cores/VideoRenderers/RenderManager.h" -+#include "utils/TimeUtils.h" -+ -+#if defined(HAS_XRANDR) -+#include -+#endif - - using namespace std; - -@@ -42,6 +51,7 @@ CWinSystemX11::CWinSystemX11() : CWinSystemBase() - m_glWindow = 0; - m_wmWindow = 0; - m_bWasFullScreenBeforeMinimize = false; -+ m_dpyLostTime = 0; - } - - CWinSystemX11::~CWinSystemX11() -@@ -126,6 +136,13 @@ bool CWinSystemX11::CreateNewWindow(const CStdString& name, bool fullScreen, RES - SDL_WM_SetIcon(SDL_CreateRGBSurfaceFrom(iconTexture.GetPixels(), iconTexture.GetWidth(), iconTexture.GetHeight(), 32, iconTexture.GetPitch(), 0xff0000, 0x00ff00, 0x0000ff, 0xff000000L), NULL); - SDL_WM_SetCaption("XBMC Media Center", NULL); - -+ // register XRandR Events -+#if defined(HAS_XRANDR) -+ int iReturn; -+ XRRQueryExtension(m_dpy, &m_RREventBase, &iReturn); -+ XRRSelectInput(m_dpy, m_wmWindow, RRScreenChangeNotifyMask); -+#endif -+ - m_bWindowCreated = true; - return true; - } -@@ -175,7 +192,10 @@ bool CWinSystemX11::SetFullScreen(bool fullScreen, RESOLUTION_INFO& res, bool bl - mode.id = res.strId; - - if(m_bFullScreen) -+ { -+ OnLostDevice(); - g_xrandr.SetMode(out, mode); -+ } - else - g_xrandr.RestoreState(); - #endif -@@ -444,4 +464,74 @@ bool CWinSystemX11::Show(bool raise) - XSync(m_dpy, False); - return true; - } -+ -+void CWinSystemX11::CheckDisplayEvents() -+{ -+#if defined(HAS_XRANDR) -+ bool bGotEvent(false); -+ bool bTimeout(false); -+ XEvent Event; -+ while (XCheckTypedEvent(m_dpy, m_RREventBase + RRScreenChangeNotify, &Event)) -+ { -+ if (Event.type == m_RREventBase + RRScreenChangeNotify) -+ { -+ CLog::Log(LOGDEBUG, "%s: Received RandR event %i", __FUNCTION__, Event.type); -+ bGotEvent = true; -+ } -+ XRRUpdateConfiguration(&Event); -+ } -+ -+ // check fail safe timer -+ if (m_dpyLostTime && CurrentHostCounter() - m_dpyLostTime > (uint64_t)3 * CurrentHostFrequency()) -+ { -+ CLog::Log(LOGERROR, "%s - no display event after 3 seconds", __FUNCTION__); -+ bTimeout = true; -+ } -+ -+ if (bGotEvent || bTimeout) -+ { -+ CLog::Log(LOGDEBUG, "%s - notify display reset event", __FUNCTION__); -+ -+ CSingleLock lock(m_resourceSection); -+ -+ // tell any shared resources -+ for (vector::iterator i = m_resources.begin(); i != m_resources.end(); i++) -+ (*i)->OnResetDevice(); -+ -+ // reset fail safe timer -+ m_dpyLostTime = 0; -+ } -+#endif -+} -+ -+void CWinSystemX11::OnLostDevice() -+{ -+ CLog::Log(LOGDEBUG, "%s - notify display change event", __FUNCTION__); -+ -+ { CSingleLock lock(m_resourceSection); -+ for (vector::iterator i = m_resources.begin(); i != m_resources.end(); i++) -+ (*i)->OnLostDevice(); -+ } -+ -+ // make sure renderer has no invalid references -+ g_renderManager.Flush(); -+ -+ // fail safe timer -+ m_dpyLostTime = CurrentHostCounter(); -+} -+ -+void CWinSystemX11::Register(IDispResource *resource) -+{ -+ CSingleLock lock(m_resourceSection); -+ m_resources.push_back(resource); -+} -+ -+void CWinSystemX11::Unregister(IDispResource* resource) -+{ -+ CSingleLock lock(m_resourceSection); -+ vector::iterator i = find(m_resources.begin(), m_resources.end(), resource); -+ if (i != m_resources.end()) -+ m_resources.erase(i); -+} -+ - #endif -diff --git a/xbmc/windowing/X11/WinSystemX11.h b/xbmc/windowing/X11/WinSystemX11.h -index da6accf..5b941be 100644 ---- a/xbmc/windowing/X11/WinSystemX11.h -+++ b/xbmc/windowing/X11/WinSystemX11.h -@@ -26,6 +26,9 @@ - #include "windowing/WinSystem.h" - #include "utils/Stopwatch.h" - #include -+#include "threads/CriticalSection.h" -+ -+class IDispResource; - - class CWinSystemX11 : public CWinSystemBase - { -@@ -51,6 +54,8 @@ public: - virtual bool Restore() ; - virtual bool Hide(); - virtual bool Show(bool raise = true); -+ virtual void Register(IDispResource *resource); -+ virtual void Unregister(IDispResource *resource); - - // Local to WinSystemX11 only - Display* GetDisplay() { return m_dpy; } -@@ -58,6 +63,8 @@ public: - - protected: - bool RefreshGlxContext(); -+ void CheckDisplayEvents(); -+ void OnLostDevice(); - - SDL_Surface* m_SDLSurface; - GLXContext m_glContext; -@@ -65,6 +72,10 @@ protected: - Window m_wmWindow; - Display* m_dpy; - bool m_bWasFullScreenBeforeMinimize; -+ int m_RREventBase; -+ CCriticalSection m_resourceSection; -+ std::vector m_resources; -+ uint64_t m_dpyLostTime; - - private: - bool IsSuitableVisual(XVisualInfo *vInfo); -diff --git a/xbmc/windowing/X11/WinSystemX11GL.cpp b/xbmc/windowing/X11/WinSystemX11GL.cpp -index 94f369e..ed9ed6d 100644 ---- a/xbmc/windowing/X11/WinSystemX11GL.cpp -+++ b/xbmc/windowing/X11/WinSystemX11GL.cpp -@@ -43,6 +43,8 @@ CWinSystemX11GL::~CWinSystemX11GL() - - bool CWinSystemX11GL::PresentRenderImpl(const CDirtyRegionList& dirty) - { -+ CheckDisplayEvents(); -+ - if(m_iVSyncMode == 3) - { - glFinish(); --- -1.7.5.4 - - -From e29ca1112c976afd9a78c7cdfbda7e26efb8880a Mon Sep 17 00:00:00 2001 -From: Rainer Hochecker -Date: Sat, 15 Oct 2011 22:28:24 +0200 -Subject: [PATCH 2/6] vdpau: remove recover variable and use diplay state - ---- - xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 39 +++++++++++++++-------- - xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h | 5 ++- - 2 files changed, 28 insertions(+), 16 deletions(-) - -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp -index 06629df..8debcb6 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp -@@ -92,7 +92,7 @@ CVDPAU::CVDPAU() - surfaceNum = presentSurfaceNum = 0; - picAge.b_age = picAge.ip_age[0] = picAge.ip_age[1] = 256*256*256*64; - vdpauConfigured = false; -- recover = false; -+ m_DisplayState = VDPAU_OPEN; - m_mixerfield = VDP_VIDEO_MIXER_PICTURE_STRUCTURE_FRAME; - m_mixerstep = 0; - m_DisplayState = VDPAU_OPEN; -@@ -443,7 +443,7 @@ int CVDPAU::Check(AVCodecContext* avctx) - } - lock.Enter(); - } -- if (recover || m_DisplayState == VDPAU_RESET) -+ if (m_DisplayState == VDPAU_RESET) - { - CLog::Log(LOGNOTICE,"Attempting recovery"); - -@@ -452,7 +452,6 @@ int CVDPAU::Check(AVCodecContext* avctx) - - InitVDPAUProcs(); - -- recover = false; - m_DisplayState = VDPAU_OPEN; - - return VC_FLUSHED; -@@ -1038,10 +1037,12 @@ int CVDPAU::FFGetBuffer(AVCodecContext *avctx, AVFrame *pic) - struct pictureAge* pA = &vdp->picAge; - - // while we are waiting to recover we can't do anything -- if(vdp->recover) -- { -- CLog::Log(LOGWARNING, "CVDPAU::FFGetBuffer - returning due to awaiting recovery"); -- return -1; -+ { CSingleLock lock(vdp->m_DisplaySection); -+ if(vdp->m_DisplayState != VDPAU_OPEN) -+ { -+ CLog::Log(LOGWARNING, "CVDPAU::FFGetBuffer - returning due to awaiting recovery"); -+ return -1; -+ } - } - - vdpau_render_state * render = NULL; -@@ -1134,9 +1135,11 @@ void CVDPAU::FFDrawSlice(struct AVCodecContext *s, - CDVDVideoCodecFFmpeg* ctx = (CDVDVideoCodecFFmpeg*)s->opaque; - CVDPAU* vdp = (CVDPAU*)ctx->GetHardware(); - -- /* while we are waiting to recover we can't do anything */ -- if(vdp->recover) -- return; -+ // while we are waiting to recover we can't do anything -+ { CSingleLock lock(vdp->m_DisplaySection); -+ if(vdp->m_DisplayState != VDPAU_OPEN) -+ return; -+ } - - if(src->linesize[0] || src->linesize[1] || src->linesize[2] - || offset[0] || offset[1] || offset[2]) -@@ -1433,23 +1436,31 @@ void CVDPAU::VDPPreemptionCallbackFunction(VdpDevice device, void* context) - { - CLog::Log(LOGDEBUG,"VDPAU Device Preempted - attempting recovery"); - CVDPAU* pCtx = (CVDPAU*)context; -- pCtx->recover = true; -+ -+ { CSingleLock lock(pCtx->m_DisplaySection); -+ if(pCtx->m_DisplayState == VDPAU_OPEN) -+ pCtx->m_DisplayState = VDPAU_RESET; -+ } - } - - bool CVDPAU::CheckStatus(VdpStatus vdp_st, int line) - { -+ CSingleLock lock(m_DisplaySection); -+ - if (vdp_st == VDP_STATUS_HANDLE_DEVICE_MISMATCH - || vdp_st == VDP_STATUS_DISPLAY_PREEMPTED) -- recover = true; -+ if(m_DisplayState == VDPAU_OPEN) -+ m_DisplayState = VDPAU_RESET; - - // no need to log errors about this case, as it will happen on cleanup -- if (vdp_st == VDP_STATUS_INVALID_HANDLE && recover && vdpauConfigured) -+ if (vdp_st == VDP_STATUS_INVALID_HANDLE && (m_DisplayState != VDPAU_OPEN) && vdpauConfigured) - return false; - - if (vdp_st != VDP_STATUS_OK) - { - CLog::Log(LOGERROR, " (VDPAU) Error: %s(%d) at %s:%d\n", vdp_get_error_string(vdp_st), vdp_st, __FILE__, line); -- recover = true; -+ if(m_DisplayState == VDPAU_OPEN) -+ m_DisplayState = VDPAU_RESET; - return true; - } - return false; -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h -index 6eab3fc..31cb653 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h -@@ -102,7 +102,6 @@ public: - void InitCSCMatrix(int Height); - bool CheckStatus(VdpStatus vdp_st, int line); - -- bool CheckRecover(bool force = false); - void CheckFeatures(); - void SetColor(); - void SetNoiseReduction(); -@@ -111,7 +110,6 @@ public: - void SetHWUpscaling(); - - pictureAge picAge; -- bool recover; - vdpau_render_state *past[2], *current, *future; - int tmpDeintMode, tmpDeintGUI, tmpDeint; - float tmpNoiseReduction, tmpSharpness; -@@ -226,6 +224,9 @@ public: - - std::vector m_videoSurfaces; - -+ // OnLostDevice triggers transition from all states to LOST -+ // internal errors trigger transition from OPEN to RESET -+ // OnResetDevice triggers transition from LOST to RESET - enum EDisplayState - { VDPAU_OPEN - , VDPAU_RESET --- -1.7.5.4 - - -From 27662f3b3212db24c5691514a7159f801a02e4d2 Mon Sep 17 00:00:00 2001 -From: Rainer Hochecker -Date: Wed, 19 Oct 2011 16:20:15 +0200 -Subject: [PATCH 3/6] vdpau: fix memory leak and access violation in - vdpau_render_state structure - ---- - xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 54 +++++++++++++++++++----- - xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h | 2 + - 2 files changed, 45 insertions(+), 11 deletions(-) - -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp -index 8debcb6..cb2aaac 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp -@@ -151,6 +151,9 @@ bool CVDPAU::Open(AVCodecContext* avctx, const enum PixelFormat, unsigned int su - } - } - -+ if (!m_dllAvUtil.Load()) -+ return false; -+ - InitVDPAUProcs(); - - if (vdp_device != VDP_INVALID_HANDLE) -@@ -212,6 +215,7 @@ void CVDPAU::Close() - FiniVDPAUProcs(); - - g_Windowing.Unregister(this); -+ m_dllAvUtil.Unload(); - - if (m_glPixmap) - { -@@ -431,19 +435,24 @@ void CVDPAU::OnResetDevice() - - int CVDPAU::Check(AVCodecContext* avctx) - { -- CSingleLock lock(m_DisplaySection); -+ EDisplayState state; - -- if (m_DisplayState == VDPAU_LOST) -+ { CSingleLock lock(m_DisplaySection); -+ state = m_DisplayState; -+ } -+ -+ if (state == VDPAU_LOST) - { -- lock.Leave(); - if (!m_DisplayEvent.WaitMSec(2000)) - { - CLog::Log(LOGERROR, "CVDPAU::Check - device didn't reset in reasonable time"); - return VC_ERROR; - } -- lock.Enter(); -+ { CSingleLock lock(m_DisplaySection); -+ state = m_DisplayState; -+ } - } -- if (m_DisplayState == VDPAU_RESET) -+ if (state == VDPAU_RESET) - { - CLog::Log(LOGNOTICE,"Attempting recovery"); - -@@ -452,8 +461,6 @@ int CVDPAU::Check(AVCodecContext* avctx) - - InitVDPAUProcs(); - -- m_DisplayState = VDPAU_OPEN; -- - return VC_FLUSHED; - } - return 0; -@@ -863,6 +870,7 @@ void CVDPAU::FiniVDPAUOutput() - vdp_st = vdp_video_surface_destroy(m_videoSurfaces[i]->surface); - CheckStatus(vdp_st, __LINE__); - m_videoSurfaces[i]->surface = VDP_INVALID_HANDLE; -+ m_dllAvUtil.av_freep(&m_videoSurfaces[i]->bitstream_buffers); - free(m_videoSurfaces[i]); - } - m_videoSurfaces.clear(); -@@ -1065,6 +1073,11 @@ int CVDPAU::FFGetBuffer(AVCodecContext *avctx, AVFrame *pic) - VdpDecoderProfile profile; - ReadFormatOf(avctx->pix_fmt, profile, vdp->vdp_chroma_type); - render = (vdpau_render_state*)calloc(sizeof(vdpau_render_state), 1); -+ if (render == NULL) -+ { -+ CLog::Log(LOGWARNING, "CVDPAU::FFGetBuffer - calloc failed"); -+ return -1; -+ } - vdp_st = vdp->vdp_video_surface_create(vdp->vdp_device, - vdp->vdp_chroma_type, - avctx->width, -@@ -1112,19 +1125,38 @@ int CVDPAU::FFGetBuffer(AVCodecContext *avctx, AVFrame *pic) - void CVDPAU::FFReleaseBuffer(AVCodecContext *avctx, AVFrame *pic) - { - //CLog::Log(LOGNOTICE,"%s",__FUNCTION__); -- vdpau_render_state * render; -- int i; -+ CDVDVideoCodecFFmpeg* ctx = (CDVDVideoCodecFFmpeg*)avctx->opaque; -+ CVDPAU* vdp = (CVDPAU*)ctx->GetHardware(); -+ vdpau_render_state * render; -+ unsigned int i; - - render=(vdpau_render_state*)pic->data[0]; - if(!render) - { -- CLog::Log(LOGERROR, "CVDPAU::FFDrawSlice - invalid context handle provided"); -+ CLog::Log(LOGERROR, "CVDPAU::FFReleaseBuffer - invalid context handle provided"); - return; - } - -- render->state &= ~FF_VDPAU_STATE_USED_FOR_REFERENCE; - for(i=0; i<4; i++) - pic->data[i]= NULL; -+ -+ // find render state in queue -+ bool found(false); -+ for(i = 0; i < vdp->m_videoSurfaces.size(); ++i) -+ { -+ if(vdp->m_videoSurfaces[i] == render) -+ { -+ found = true; -+ break; -+ } -+ } -+ if (!found) -+ { -+ CLog::Log(LOGDEBUG, "CVDPAU::FFReleaseBuffer - buffer not found"); -+ return; -+ } -+ -+ render->state &= ~FF_VDPAU_STATE_USED_FOR_REFERENCE; - } - - -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h -index 31cb653..d10d845 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h -@@ -21,6 +21,7 @@ - * - */ - -+#include "DllAvUtil.h" - #include "DVDVideoCodec.h" - #include "DVDVideoCodecFFmpeg.h" - #include "libavcodec/vdpau.h" -@@ -223,6 +224,7 @@ public: - , VdpChromaType &chroma_type); - - std::vector m_videoSurfaces; -+ DllAvUtil m_dllAvUtil; - - // OnLostDevice triggers transition from all states to LOST - // internal errors trigger transition from OPEN to RESET --- -1.7.5.4 - - -From dcfe717dd680598f09fd3fbe34e77bd75d390660 Mon Sep 17 00:00:00 2001 -From: Rainer Hochecker -Date: Fri, 21 Oct 2011 09:06:06 +0200 -Subject: [PATCH 4/6] vdpau: revamp error recovery, verify picture buffers - from ffmpeg because some decoders like vc-1 dont flush - ---- - xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 168 ++++++++++++------------ - xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h | 3 - - 2 files changed, 84 insertions(+), 87 deletions(-) - -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp -index cb2aaac..814c05c 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp -@@ -73,12 +73,6 @@ static struct SInterlaceMapping +diff -Naur xbmc-b44b653/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp xbmc-b44b653.patch/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp +--- xbmc-b44b653/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp 2011-11-06 23:13:41.000000000 +0100 ++++ xbmc-b44b653.patch/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp 2011-11-06 23:52:47.042192960 +0100 +@@ -73,12 +73,6 @@ , {VS_INTERLACEMETHOD_NONE , (VdpVideoMixerFeature)-1} }; @@ -946,7 +47,14 @@ index cb2aaac..814c05c 100644 //since libvdpau 0.4, vdp_device_create_x11() installs a callback on the Display*, //if we unload libvdpau with dlclose(), we segfault on XCloseDisplay, //so we just keep a static handle to libvdpau around -@@ -99,7 +93,6 @@ CVDPAU::CVDPAU() +@@ -92,13 +86,12 @@ + surfaceNum = presentSurfaceNum = 0; + picAge.b_age = picAge.ip_age[0] = picAge.ip_age[1] = 256*256*256*64; + vdpauConfigured = false; +- recover = false; ++ m_DisplayState = VDPAU_OPEN; + m_mixerfield = VDP_VIDEO_MIXER_PICTURE_STRUCTURE_FRAME; + m_mixerstep = 0; m_glPixmap = 0; m_Pixmap = 0; @@ -954,10 +62,49 @@ index cb2aaac..814c05c 100644 if (!glXBindTexImageEXT) glXBindTexImageEXT = (PFNGLXBINDTEXIMAGEEXTPROC)glXGetProcAddress((GLubyte *) "glXBindTexImageEXT"); if (!glXReleaseTexImageEXT) -@@ -230,13 +223,6 @@ void CVDPAU::Close() - XFreePixmap(m_Display, m_Pixmap); - m_Pixmap = NULL; +@@ -150,6 +143,9 @@ + } } + ++ if (!m_dllAvUtil.Load()) ++ return false; ++ + InitVDPAUProcs(); + + if (vdp_device != VDP_INVALID_HANDLE) +@@ -184,13 +180,14 @@ + } + + InitCSCMatrix(avctx->height); +- MakePixmap(avctx->width,avctx->height); + + /* finally setup ffmpeg */ + avctx->get_buffer = CVDPAU::FFGetBuffer; + avctx->release_buffer = CVDPAU::FFReleaseBuffer; + avctx->draw_horiz_band = CVDPAU::FFDrawSlice; + avctx->slice_flags=SLICE_FLAG_CODED_ORDER|SLICE_FLAG_ALLOW_FIELD; ++ ++ g_Windowing.Register(this); + return true; + } + return false; +@@ -208,26 +205,8 @@ + FiniVDPAUOutput(); + FiniVDPAUProcs(); + +- if (m_glPixmap) +- { +- CLog::Log(LOGINFO, "GLX: Destroying glPixmap"); +- glXReleaseTexImageEXT(m_Display, m_glPixmap, GLX_FRONT_LEFT_EXT); +- glXDestroyPixmap(m_Display, m_glPixmap); +- m_glPixmap = NULL; +- } +- if (m_Pixmap) +- { +- CLog::Log(LOGINFO, "GLX: Destroying XPixmap"); +- XFreePixmap(m_Display, m_Pixmap); +- m_Pixmap = NULL; +- } - - if (m_glContext) - { @@ -965,10 +112,12 @@ index cb2aaac..814c05c 100644 - glXDestroyContext(m_Display, m_glContext); - m_glContext = NULL; - } ++ g_Windowing.Unregister(this); ++ m_dllAvUtil.Unload(); } bool CVDPAU::MakePixmapGL() -@@ -284,36 +270,9 @@ bool CVDPAU::MakePixmapGL() +@@ -275,36 +254,9 @@ XFree(fbConfigs); return false; } @@ -1005,7 +154,109 @@ index cb2aaac..814c05c 100644 } bool CVDPAU::MakePixmap(int width, int height) -@@ -798,17 +757,26 @@ void CVDPAU::InitVDPAUProcs() +@@ -363,6 +315,13 @@ + + void CVDPAU::BindPixmap() + { ++ CSharedLock lock(m_DecoderSection); ++ ++ { CSharedLock dLock(m_DisplaySection); ++ if (m_DisplayState != VDPAU_OPEN) ++ return; ++ } ++ + if (m_glPixmap) + { + if(presentSurface != VDP_INVALID_HANDLE) +@@ -389,6 +348,13 @@ + + void CVDPAU::ReleasePixmap() + { ++ CSharedLock lock(m_DecoderSection); ++ ++ { CSharedLock dLock(m_DisplaySection); ++ if (m_DisplayState != VDPAU_OPEN) ++ return; ++ } ++ + if (m_glPixmap) + { + glXReleaseTexImageEXT(m_Display, m_glPixmap, GLX_FRONT_LEFT_EXT); +@@ -396,22 +362,67 @@ + else CLog::Log(LOGERROR,"(VDPAU) ReleasePixmap called without valid pixmap"); + } + +-bool CVDPAU::CheckRecover(bool force) ++void CVDPAU::OnLostDevice() + { +- if (recover || force) ++ CLog::Log(LOGNOTICE,"CVDPAU::OnLostDevice event"); ++ ++ { CExclusiveLock lock(m_DecoderSection); ++ FiniVDPAUOutput(); ++ FiniVDPAUProcs(); ++ } ++ ++ CExclusiveLock lock(m_DisplaySection); ++ m_DisplayState = VDPAU_LOST; ++ m_DisplayEvent.Reset(); ++} ++ ++void CVDPAU::OnResetDevice() ++{ ++ CLog::Log(LOGNOTICE,"CVDPAU::OnResetDevice event"); ++ ++ CExclusiveLock lock(m_DisplaySection); ++ if (m_DisplayState == VDPAU_LOST) ++ { ++ m_DisplayState = VDPAU_RESET; ++ m_DisplayEvent.Set(); ++ } ++} ++ ++int CVDPAU::Check(AVCodecContext* avctx) ++{ ++ EDisplayState state; ++ ++ { CSharedLock lock(m_DisplaySection); ++ state = m_DisplayState; ++ } ++ ++ if (state == VDPAU_LOST) ++ { ++ CLog::Log(LOGNOTICE,"CVDPAU::Check waiting for display reset event"); ++ if (!m_DisplayEvent.WaitMSec(2000)) ++ { ++ CLog::Log(LOGERROR, "CVDPAU::Check - device didn't reset in reasonable time"); ++ return VC_ERROR; ++ } ++ { CSharedLock lock(m_DisplaySection); ++ state = m_DisplayState; ++ } ++ } ++ if (state == VDPAU_RESET) + { + CLog::Log(LOGNOTICE,"Attempting recovery"); + ++ CSingleLock gLock(g_graphicsContext); ++ CExclusiveLock lock(m_DecoderSection); ++ + FiniVDPAUOutput(); + FiniVDPAUProcs(); + +- recover = false; +- + InitVDPAUProcs(); + +- return true; ++ return VC_FLUSHED; + } +- return false; ++ return 0; + } + + bool CVDPAU::IsVDPAUFormat(PixelFormat format) +@@ -746,14 +757,35 @@ #undef VDP_PROC @@ -1013,9 +264,20 @@ index cb2aaac..814c05c 100644 - &VDPPreemptionCallbackFunction, - (void*)this); - CheckStatus(vdp_st, __LINE__); -- - CSingleLock lock(m_DisplaySection); - m_DisplayState = VDPAU_OPEN; ++ // set all vdpau resources to invalid ++ vdp_flip_target = VDP_INVALID_HANDLE; ++ vdp_flip_queue = VDP_INVALID_HANDLE; ++ videoMixer = VDP_INVALID_HANDLE; ++ totalAvailableOutputSurfaces = 0; ++ presentSurface = VDP_INVALID_HANDLE; ++ outputSurface = VDP_INVALID_HANDLE; ++ for (int i = 0; i < NUM_OUTPUT_SURFACES; i++) ++ outputSurfaces[i] = VDP_INVALID_HANDLE; ++ ++ m_vdpauOutputMethod = OUTPUT_NONE; ++ ++ CExclusiveLock lock(m_DisplaySection); ++ m_DisplayState = VDPAU_OPEN; + vdpauConfigured = false; } @@ -1030,14 +292,20 @@ index cb2aaac..814c05c 100644 + render->bitstream_buffers_allocated = 0; + free(render); + } -+ -+ while (!m_DVDVideoPics.empty()) -+ m_DVDVideoPics.pop(); + if (vdp_device == VDP_INVALID_HANDLE) return; VdpStatus vdp_st; -@@ -841,15 +809,18 @@ void CVDPAU::FiniVDPAUOutput() +@@ -779,6 +811,8 @@ + + void CVDPAU::FiniVDPAUOutput() + { ++ FiniOutputMethod(); ++ + if (vdp_device == VDP_INVALID_HANDLE || !vdpauConfigured) return; + + CLog::Log(LOGNOTICE, " (VDPAU) %s", __FUNCTION__); +@@ -786,40 +820,23 @@ VdpStatus vdp_st; vdp_st = vdp_decoder_destroy(decoder); @@ -1046,42 +314,33 @@ index cb2aaac..814c05c 100644 + return; decoder = VDP_INVALID_HANDLE; - vdp_st = vdp_presentation_queue_destroy(vdp_flip_queue); +- vdp_st = vdp_presentation_queue_destroy(vdp_flip_queue); - CheckStatus(vdp_st, __LINE__); -+ if (CheckStatus(vdp_st, __LINE__)) -+ return; - vdp_flip_queue = VDP_INVALID_HANDLE; - - vdp_st = vdp_presentation_queue_target_destroy(vdp_flip_target); +- vdp_flip_queue = VDP_INVALID_HANDLE; +- +- vdp_st = vdp_presentation_queue_target_destroy(vdp_flip_target); - CheckStatus(vdp_st, __LINE__); -+ if (CheckStatus(vdp_st, __LINE__)) -+ return; - vdp_flip_target = VDP_INVALID_HANDLE; - - outputSurface = presentSurface = VDP_INVALID_HANDLE; -@@ -857,23 +828,30 @@ void CVDPAU::FiniVDPAUOutput() - for (int i = 0; i < totalAvailableOutputSurfaces; i++) - { - vdp_st = vdp_output_surface_destroy(outputSurfaces[i]); -- CheckStatus(vdp_st, __LINE__); -+ if (CheckStatus(vdp_st, __LINE__)) -+ return; - outputSurfaces[i] = VDP_INVALID_HANDLE; - } - - vdp_st = vdp_video_mixer_destroy(videoMixer); -- CheckStatus(vdp_st, __LINE__); -+ if (CheckStatus(vdp_st, __LINE__)) -+ return; - videoMixer = VDP_INVALID_HANDLE; - -- for(unsigned int i = 0; i < m_videoSurfaces.size(); i++) +- vdp_flip_target = VDP_INVALID_HANDLE; +- +- outputSurface = presentSurface = VDP_INVALID_HANDLE; +- +- for (int i = 0; i < totalAvailableOutputSurfaces; i++) + while (!m_videoSurfaces.empty()) { +- vdp_st = vdp_output_surface_destroy(outputSurfaces[i]); +- CheckStatus(vdp_st, __LINE__); +- outputSurfaces[i] = VDP_INVALID_HANDLE; +- } +- +- vdp_st = vdp_video_mixer_destroy(videoMixer); +- CheckStatus(vdp_st, __LINE__); +- videoMixer = VDP_INVALID_HANDLE; +- +- for(unsigned int i = 0; i < m_videoSurfaces.size(); i++) +- { - vdp_st = vdp_video_surface_destroy(m_videoSurfaces[i]->surface); - CheckStatus(vdp_st, __LINE__); - m_videoSurfaces[i]->surface = VDP_INVALID_HANDLE; -- m_dllAvUtil.av_freep(&m_videoSurfaces[i]->bitstream_buffers); - free(m_videoSurfaces[i]); + vdpau_render_state *render = m_videoSurfaces.back(); + m_videoSurfaces.pop_back(); @@ -1095,17 +354,35 @@ index cb2aaac..814c05c 100644 + return; } - m_videoSurfaces.clear(); -+ - while (!m_DVDVideoPics.empty()) - m_DVDVideoPics.pop(); +- while (!m_DVDVideoPics.empty()) +- m_DVDVideoPics.pop(); } -@@ -947,17 +925,20 @@ bool CVDPAU::ConfigVDPAU(AVCodecContext* avctx, int ref_frames) + + +@@ -891,17 +908,37 @@ vid_height, max_references, &decoder); - CHECK_VDPAU_RETURN(vdp_st, false); + if (CheckStatus(vdp_st, __LINE__)) + return false; ++ ++ m_vdpauOutputMethod = OUTPUT_NONE; ++ ++ vdpauConfigured = true; ++ return true; ++} ++ ++bool CVDPAU::ConfigOutputMethod(AVCodecContext *avctx, AVFrame *pFrame) ++{ ++ VdpStatus vdp_st; ++ ++ if (m_vdpauOutputMethod == OUTPUT_PIXMAP) ++ return true; ++ ++ FiniOutputMethod(); ++ ++ MakePixmap(avctx->width,avctx->height); vdp_st = vdp_presentation_queue_target_create_x11(vdp_device, m_Pixmap, //x_window, @@ -1123,7 +400,7 @@ index cb2aaac..814c05c 100644 totalAvailableOutputSurfaces = 0; -@@ -973,7 +954,8 @@ bool CVDPAU::ConfigVDPAU(AVCodecContext* avctx, int ref_frames) +@@ -917,7 +954,8 @@ OutWidth, OutHeight, &outputSurfaces[i]); @@ -1133,412 +410,14 @@ index cb2aaac..814c05c 100644 totalAvailableOutputSurfaces++; } CLog::Log(LOGNOTICE, " (VDPAU) Total Output Surfaces Available: %i of a max (tmp: %i const: %i)", -@@ -983,8 +965,10 @@ bool CVDPAU::ConfigVDPAU(AVCodecContext* avctx, int ref_frames) - - surfaceNum = presentSurfaceNum = 0; - outputSurface = outputSurfaces[surfaceNum]; -+ outputSurface = presentSurface = VDP_INVALID_HANDLE; -+ videoMixer = VDP_INVALID_HANDLE; - --vdpauConfigured = true; -+ vdpauConfigured = true; - return true; - } - -@@ -1152,7 +1136,7 @@ void CVDPAU::FFReleaseBuffer(AVCodecContext *avctx, AVFrame *pic) - } - if (!found) - { -- CLog::Log(LOGDEBUG, "CVDPAU::FFReleaseBuffer - buffer not found"); -+ CLog::Log(LOGDEBUG, "CVDPAU::FFReleaseBuffer - ignoring invalid buffer"); - return; - } - -@@ -1190,6 +1174,22 @@ void CVDPAU::FFDrawSlice(struct AVCodecContext *s, - return; - } - -+ // ffmpeg vc-1 decoder does not flush, make sure the data buffer is still valid -+ bool found(false); -+ for(unsigned int i = 0; i < vdp->m_videoSurfaces.size(); ++i) -+ { -+ if(vdp->m_videoSurfaces[i] == render) -+ { -+ found = true; -+ break; -+ } -+ } -+ if (!found) -+ { -+ CLog::Log(LOGWARNING, "CVDPAU::FFDrawSlice - ignoring invalid buffer"); -+ return; -+ } -+ - uint32_t max_refs = 0; - if(s->pix_fmt == PIX_FMT_VDPAU_H264) - max_refs = render->info.h264.num_ref_frames; -@@ -1250,6 +1250,22 @@ int CVDPAU::Decode(AVCodecContext *avctx, AVFrame *pFrame) - if(!render) - return VC_ERROR; - -+ // ffmpeg vc-1 decoder does not flush, make sure the data buffer is still valid -+ bool found(false); -+ for(unsigned int i = 0; i < m_videoSurfaces.size(); ++i) -+ { -+ if(m_videoSurfaces[i] == render) -+ { -+ found = true; -+ break; -+ } -+ } -+ if (!found) -+ { -+ CLog::Log(LOGWARNING, "CVDPAU::Decode - ignoring invalid buffer"); -+ return VC_BUFFER; -+ } -+ - render->state |= FF_VDPAU_STATE_USED_FOR_RENDER; - - ClearUsedForRender(&past[0]); -@@ -1464,35 +1480,19 @@ void CVDPAU::Present() - CheckStatus(vdp_st, __LINE__); - } - --void CVDPAU::VDPPreemptionCallbackFunction(VdpDevice device, void* context) --{ -- CLog::Log(LOGDEBUG,"VDPAU Device Preempted - attempting recovery"); -- CVDPAU* pCtx = (CVDPAU*)context; -- -- { CSingleLock lock(pCtx->m_DisplaySection); -- if(pCtx->m_DisplayState == VDPAU_OPEN) -- pCtx->m_DisplayState = VDPAU_RESET; -- } --} -- - bool CVDPAU::CheckStatus(VdpStatus vdp_st, int line) - { - CSingleLock lock(m_DisplaySection); - -- if (vdp_st == VDP_STATUS_HANDLE_DEVICE_MISMATCH -- || vdp_st == VDP_STATUS_DISPLAY_PREEMPTED) -- if(m_DisplayState == VDPAU_OPEN) -- m_DisplayState = VDPAU_RESET; -- -- // no need to log errors about this case, as it will happen on cleanup -- if (vdp_st == VDP_STATUS_INVALID_HANDLE && (m_DisplayState != VDPAU_OPEN) && vdpauConfigured) -- return false; -- - if (vdp_st != VDP_STATUS_OK) - { - CLog::Log(LOGERROR, " (VDPAU) Error: %s(%d) at %s:%d\n", vdp_get_error_string(vdp_st), vdp_st, __FILE__, line); -+ -+ vdp_device = VDP_INVALID_HANDLE; -+ - if(m_DisplayState == VDPAU_OPEN) - m_DisplayState = VDPAU_RESET; -+ - return true; - } - return false; -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h -index d10d845..868ca60 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h -@@ -87,7 +87,6 @@ public: - PFNGLXRELEASETEXIMAGEEXTPROC glXReleaseTexImageEXT; - GLXPixmap m_glPixmap; - Pixmap m_Pixmap; -- GLXContext m_glContext; - - static void FFReleaseBuffer(AVCodecContext *avctx, AVFrame *pic); - static void FFDrawSlice(struct AVCodecContext *s, -@@ -95,8 +94,6 @@ public: - int y, int type, int height); - static int FFGetBuffer(AVCodecContext *avctx, AVFrame *pic); - -- static void VDPPreemptionCallbackFunction(VdpDevice device, void* context); -- - void Present(); - bool ConfigVDPAU(AVCodecContext *avctx, int ref_frames); - void SpewHardwareAvailable(); --- -1.7.5.4 - - -From ad1dfc3aefe71075185cd8aaec5639b4af4de390 Mon Sep 17 00:00:00 2001 -From: Rainer Hochecker -Date: Sat, 22 Oct 2011 10:31:47 +0200 -Subject: [PATCH 5/6] LinuxRendererGL: call glFinish in uninit - ---- - xbmc/cores/VideoRenderers/LinuxRendererGL.cpp | 2 ++ - 1 files changed, 2 insertions(+), 0 deletions(-) - -diff --git a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp -index 0e247aa..4c736bf 100644 ---- a/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp -+++ b/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp -@@ -1049,6 +1049,8 @@ void CLinuxRendererGL::UnInit() - CLog::Log(LOGDEBUG, "LinuxRendererGL: Cleaning up GL resources"); - CSingleLock lock(g_graphicsContext); - -+ glFinish(); -+ - if (m_rgbPbo) - { - glDeleteBuffersARB(1, &m_rgbPbo); --- -1.7.5.4 - - -From e80b167c14fd96065ce40ac588772582788d8e93 Mon Sep 17 00:00:00 2001 -From: Rainer Hochecker -Date: Sat, 22 Oct 2011 14:49:40 +0200 -Subject: [PATCH 6/6] vdpau: change order of creation/clear down of pixmap and - presentation queue - ---- - xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp | 197 ++++++++++++++++-------- - xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h | 17 ++- - xbmc/windowing/X11/WinSystemX11.cpp | 6 +- - 3 files changed, 152 insertions(+), 68 deletions(-) - -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp -index 814c05c..c10c5b8 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp -@@ -89,7 +89,6 @@ CVDPAU::CVDPAU() - m_DisplayState = VDPAU_OPEN; - m_mixerfield = VDP_VIDEO_MIXER_PICTURE_STRUCTURE_FRAME; - m_mixerstep = 0; -- m_DisplayState = VDPAU_OPEN; - - m_glPixmap = 0; - m_Pixmap = 0; -@@ -181,7 +180,6 @@ bool CVDPAU::Open(AVCodecContext* avctx, const enum PixelFormat, unsigned int su - } - - InitCSCMatrix(avctx->height); -- MakePixmap(avctx->width,avctx->height); - - /* finally setup ffmpeg */ - avctx->get_buffer = CVDPAU::FFGetBuffer; -@@ -209,20 +207,6 @@ void CVDPAU::Close() - - g_Windowing.Unregister(this); - m_dllAvUtil.Unload(); -- -- if (m_glPixmap) -- { -- CLog::Log(LOGINFO, "GLX: Destroying glPixmap"); -- glXReleaseTexImageEXT(m_Display, m_glPixmap, GLX_FRONT_LEFT_EXT); -- glXDestroyPixmap(m_Display, m_glPixmap); -- m_glPixmap = NULL; -- } -- if (m_Pixmap) -- { -- CLog::Log(LOGINFO, "GLX: Destroying XPixmap"); -- XFreePixmap(m_Display, m_Pixmap); -- m_Pixmap = NULL; -- } - } - - bool CVDPAU::MakePixmapGL() -@@ -331,7 +315,9 @@ bool CVDPAU::MakePixmap(int width, int height) - - void CVDPAU::BindPixmap() - { -- { CSingleLock lock(m_DisplaySection); -+ CSharedLock lock(m_DecoderSection); -+ -+ { CSharedLock dLock(m_DisplaySection); - if (m_DisplayState != VDPAU_OPEN) - return; - } -@@ -362,7 +348,9 @@ void CVDPAU::BindPixmap() - - void CVDPAU::ReleasePixmap() - { -- { CSingleLock lock(m_DisplaySection); -+ CSharedLock lock(m_DecoderSection); -+ -+ { CSharedLock dLock(m_DisplaySection); - if (m_DisplayState != VDPAU_OPEN) - return; - } -@@ -376,15 +364,23 @@ void CVDPAU::ReleasePixmap() - - void CVDPAU::OnLostDevice() - { -- CSingleLock lock(m_DisplaySection); -+ CLog::Log(LOGNOTICE,"CVDPAU::OnLostDevice event"); -+ -+ { CExclusiveLock lock(m_DecoderSection); -+ FiniVDPAUOutput(); -+ FiniVDPAUProcs(); -+ } -+ -+ CExclusiveLock lock(m_DisplaySection); - m_DisplayState = VDPAU_LOST; - m_DisplayEvent.Reset(); - } - - void CVDPAU::OnResetDevice() - { -- CSingleLock lock(m_DisplaySection); -+ CLog::Log(LOGNOTICE,"CVDPAU::OnResetDevice event"); - -+ CExclusiveLock lock(m_DisplaySection); - if (m_DisplayState == VDPAU_LOST) - { - m_DisplayState = VDPAU_RESET; -@@ -396,18 +392,19 @@ int CVDPAU::Check(AVCodecContext* avctx) - { - EDisplayState state; - -- { CSingleLock lock(m_DisplaySection); -+ { CSharedLock lock(m_DisplaySection); - state = m_DisplayState; - } - - if (state == VDPAU_LOST) - { -+ CLog::Log(LOGNOTICE,"CVDPAU::Check waiting for display reset event"); - if (!m_DisplayEvent.WaitMSec(2000)) - { - CLog::Log(LOGERROR, "CVDPAU::Check - device didn't reset in reasonable time"); - return VC_ERROR; - } -- { CSingleLock lock(m_DisplaySection); -+ { CSharedLock lock(m_DisplaySection); - state = m_DisplayState; - } - } -@@ -415,6 +412,9 @@ int CVDPAU::Check(AVCodecContext* avctx) - { - CLog::Log(LOGNOTICE,"Attempting recovery"); - -+ CSingleLock gLock(g_graphicsContext); -+ CExclusiveLock lock(m_DecoderSection); -+ - FiniVDPAUOutput(); - FiniVDPAUProcs(); - -@@ -757,7 +757,19 @@ void CVDPAU::InitVDPAUProcs() - - #undef VDP_PROC - -- CSingleLock lock(m_DisplaySection); -+ // set all vdpau resources to invalid -+ vdp_flip_target = VDP_INVALID_HANDLE; -+ vdp_flip_queue = VDP_INVALID_HANDLE; -+ videoMixer = VDP_INVALID_HANDLE; -+ totalAvailableOutputSurfaces = 0; -+ presentSurface = VDP_INVALID_HANDLE; -+ outputSurface = VDP_INVALID_HANDLE; -+ for (int i = 0; i < NUM_OUTPUT_SURFACES; i++) -+ outputSurfaces[i] = VDP_INVALID_HANDLE; -+ -+ m_vdpauOutputMethod = OUTPUT_NONE; -+ -+ CExclusiveLock lock(m_DisplaySection); - m_DisplayState = VDPAU_OPEN; - vdpauConfigured = false; - } -@@ -774,9 +786,6 @@ void CVDPAU::FiniVDPAUProcs() - free(render); - } - -- while (!m_DVDVideoPics.empty()) -- m_DVDVideoPics.pop(); -- - if (vdp_device == VDP_INVALID_HANDLE) return; - - VdpStatus vdp_st; -@@ -802,6 +811,8 @@ void CVDPAU::InitCSCMatrix(int Height) - - void CVDPAU::FiniVDPAUOutput() - { -+ FiniOutputMethod(); -+ - if (vdp_device == VDP_INVALID_HANDLE || !vdpauConfigured) return; - - CLog::Log(LOGNOTICE, " (VDPAU) %s", __FUNCTION__); -@@ -813,31 +824,6 @@ void CVDPAU::FiniVDPAUOutput() - return; - decoder = VDP_INVALID_HANDLE; - -- vdp_st = vdp_presentation_queue_destroy(vdp_flip_queue); -- if (CheckStatus(vdp_st, __LINE__)) -- return; -- vdp_flip_queue = VDP_INVALID_HANDLE; -- -- vdp_st = vdp_presentation_queue_target_destroy(vdp_flip_target); -- if (CheckStatus(vdp_st, __LINE__)) -- return; -- vdp_flip_target = VDP_INVALID_HANDLE; -- -- outputSurface = presentSurface = VDP_INVALID_HANDLE; -- -- for (int i = 0; i < totalAvailableOutputSurfaces; i++) -- { -- vdp_st = vdp_output_surface_destroy(outputSurfaces[i]); -- if (CheckStatus(vdp_st, __LINE__)) -- return; -- outputSurfaces[i] = VDP_INVALID_HANDLE; -- } -- -- vdp_st = vdp_video_mixer_destroy(videoMixer); -- if (CheckStatus(vdp_st, __LINE__)) -- return; -- videoMixer = VDP_INVALID_HANDLE; -- - while (!m_videoSurfaces.empty()) - { - vdpau_render_state *render = m_videoSurfaces.back(); -@@ -851,9 +837,6 @@ void CVDPAU::FiniVDPAUOutput() - if (CheckStatus(vdp_st, __LINE__)) - return; - } -- -- while (!m_DVDVideoPics.empty()) -- m_DVDVideoPics.pop(); - } - - -@@ -928,6 +911,23 @@ bool CVDPAU::ConfigVDPAU(AVCodecContext* avctx, int ref_frames) - if (CheckStatus(vdp_st, __LINE__)) - return false; - -+ m_vdpauOutputMethod = OUTPUT_NONE; -+ -+ vdpauConfigured = true; -+ return true; -+} -+ -+bool CVDPAU::ConfigOutputMethod(AVCodecContext *avctx, AVFrame *pFrame) -+{ -+ VdpStatus vdp_st; -+ -+ if (m_vdpauOutputMethod == OUTPUT_PIXMAP) -+ return true; -+ -+ FiniOutputMethod(); -+ -+ MakePixmap(avctx->width,avctx->height); -+ - vdp_st = vdp_presentation_queue_target_create_x11(vdp_device, - m_Pixmap, //x_window, - &vdp_flip_target); -@@ -964,11 +964,67 @@ bool CVDPAU::ConfigVDPAU(AVCodecContext* avctx, int ref_frames) +@@ -926,9 +964,67 @@ NUM_OUTPUT_SURFACES); surfaceNum = presentSurfaceNum = 0; - outputSurface = outputSurfaces[surfaceNum]; - outputSurface = presentSurface = VDP_INVALID_HANDLE; - videoMixer = VDP_INVALID_HANDLE; - -- vdpauConfigured = true; ++ outputSurface = presentSurface = VDP_INVALID_HANDLE; ++ videoMixer = VDP_INVALID_HANDLE; ++ + m_vdpauOutputMethod = OUTPUT_PIXMAP; + + return true; @@ -1596,56 +475,140 @@ index 814c05c..c10c5b8 100644 + + while (!m_DVDVideoPics.empty()) + m_DVDVideoPics.pop(); -+ + +-vdpauConfigured = true; return true; } -@@ -1029,7 +1085,9 @@ int CVDPAU::FFGetBuffer(AVCodecContext *avctx, AVFrame *pic) +@@ -989,10 +1085,14 @@ struct pictureAge* pA = &vdp->picAge; // while we are waiting to recover we can't do anything -- { CSingleLock lock(vdp->m_DisplaySection); +- if(vdp->recover) +- { +- CLog::Log(LOGWARNING, "CVDPAU::FFGetBuffer - returning due to awaiting recovery"); +- return -1; + CSharedLock lock(vdp->m_DecoderSection); + + { CSharedLock dLock(vdp->m_DisplaySection); - if(vdp->m_DisplayState != VDPAU_OPEN) - { - CLog::Log(LOGWARNING, "CVDPAU::FFGetBuffer - returning due to awaiting recovery"); -@@ -1114,6 +1172,8 @@ void CVDPAU::FFReleaseBuffer(AVCodecContext *avctx, AVFrame *pic) - vdpau_render_state * render; - unsigned int i; ++ if(vdp->m_DisplayState != VDPAU_OPEN) ++ { ++ CLog::Log(LOGWARNING, "CVDPAU::FFGetBuffer - returning due to awaiting recovery"); ++ return -1; ++ } + } -+ CSharedLock lock(vdp->m_DecoderSection); + vdpau_render_state * render = NULL; +@@ -1015,6 +1115,11 @@ + VdpDecoderProfile profile; + ReadFormatOf(avctx->pix_fmt, profile, vdp->vdp_chroma_type); + render = (vdpau_render_state*)calloc(sizeof(vdpau_render_state), 1); ++ if (render == NULL) ++ { ++ CLog::Log(LOGWARNING, "CVDPAU::FFGetBuffer - calloc failed"); ++ return -1; ++ } + vdp_st = vdp->vdp_video_surface_create(vdp->vdp_device, + vdp->vdp_chroma_type, + avctx->width, +@@ -1062,19 +1167,40 @@ + void CVDPAU::FFReleaseBuffer(AVCodecContext *avctx, AVFrame *pic) + { + //CLog::Log(LOGNOTICE,"%s",__FUNCTION__); +- vdpau_render_state * render; +- int i; ++ CDVDVideoCodecFFmpeg* ctx = (CDVDVideoCodecFFmpeg*)avctx->opaque; ++ CVDPAU* vdp = (CVDPAU*)ctx->GetHardware(); ++ vdpau_render_state * render; ++ unsigned int i; + ++ CSharedLock lock(vdp->m_DecoderSection); + render=(vdpau_render_state*)pic->data[0]; if(!render) { -@@ -1152,11 +1212,14 @@ void CVDPAU::FFDrawSlice(struct AVCodecContext *s, +- CLog::Log(LOGERROR, "CVDPAU::FFDrawSlice - invalid context handle provided"); ++ CLog::Log(LOGERROR, "CVDPAU::FFReleaseBuffer - invalid context handle provided"); + return; + } + +- render->state &= ~FF_VDPAU_STATE_USED_FOR_REFERENCE; + for(i=0; i<4; i++) + pic->data[i]= NULL; ++ ++ // find render state in queue ++ bool found(false); ++ for(i = 0; i < vdp->m_videoSurfaces.size(); ++i) ++ { ++ if(vdp->m_videoSurfaces[i] == render) ++ { ++ found = true; ++ break; ++ } ++ } ++ if (!found) ++ { ++ CLog::Log(LOGDEBUG, "CVDPAU::FFReleaseBuffer - ignoring invalid buffer"); ++ return; ++ } ++ ++ render->state &= ~FF_VDPAU_STATE_USED_FOR_REFERENCE; + } + + +@@ -1085,9 +1211,14 @@ + CDVDVideoCodecFFmpeg* ctx = (CDVDVideoCodecFFmpeg*)s->opaque; CVDPAU* vdp = (CVDPAU*)ctx->GetHardware(); - // while we are waiting to recover we can't do anything -- { CSingleLock lock(vdp->m_DisplaySection); +- /* while we are waiting to recover we can't do anything */ +- if(vdp->recover) +- return; ++ // while we are waiting to recover we can't do anything + CSharedLock lock(vdp->m_DecoderSection); + + { CSharedLock dLock(vdp->m_DisplaySection); - if(vdp->m_DisplayState != VDPAU_OPEN) - return; - } - ++ if(vdp->m_DisplayState != VDPAU_OPEN) ++ return; ++ } + + if(src->linesize[0] || src->linesize[1] || src->linesize[2] || offset[0] || offset[1] || offset[2]) - { -@@ -1216,6 +1279,8 @@ int CVDPAU::Decode(AVCodecContext *avctx, AVFrame *pFrame) +@@ -1106,6 +1237,22 @@ + return; + } + ++ // ffmpeg vc-1 decoder does not flush, make sure the data buffer is still valid ++ bool found(false); ++ for(unsigned int i = 0; i < vdp->m_videoSurfaces.size(); ++i) ++ { ++ if(vdp->m_videoSurfaces[i] == render) ++ { ++ found = true; ++ break; ++ } ++ } ++ if (!found) ++ { ++ CLog::Log(LOGWARNING, "CVDPAU::FFDrawSlice - ignoring invalid buffer"); ++ return; ++ } ++ + uint32_t max_refs = 0; + if(s->pix_fmt == PIX_FMT_VDPAU_H264) + max_refs = render->info.h264.num_ref_frames; +@@ -1132,12 +1279,19 @@ VdpStatus vdp_st; VdpTime time; +- if (CheckRecover(false)) +- return VC_FLUSHED; + CSharedLock lock(m_DecoderSection); + - int result = Check(avctx); - if (result) - return result; -@@ -1223,6 +1288,10 @@ int CVDPAU::Decode(AVCodecContext *avctx, AVFrame *pFrame) ++ int result = Check(avctx); ++ if (result) ++ return result; + if (!vdpauConfigured) return VC_ERROR; @@ -1656,56 +619,171 @@ index 814c05c..c10c5b8 100644 outputSurface = outputSurfaces[surfaceNum]; CheckFeatures(); -@@ -1419,7 +1488,9 @@ int CVDPAU::Decode(AVCodecContext *avctx, AVFrame *pFrame) +@@ -1165,6 +1319,22 @@ + if(!render) + return VC_ERROR; + ++ // ffmpeg vc-1 decoder does not flush, make sure the data buffer is still valid ++ bool found(false); ++ for(unsigned int i = 0; i < m_videoSurfaces.size(); ++i) ++ { ++ if(m_videoSurfaces[i] == render) ++ { ++ found = true; ++ break; ++ } ++ } ++ if (!found) ++ { ++ CLog::Log(LOGWARNING, "CVDPAU::Decode - ignoring invalid buffer"); ++ return VC_BUFFER; ++ } ++ + render->state |= FF_VDPAU_STATE_USED_FOR_RENDER; + + ClearUsedForRender(&past[0]); +@@ -1318,6 +1488,13 @@ bool CVDPAU::GetPicture(AVCodecContext* avctx, AVFrame* frame, DVDVideoPicture* picture) { -- { CSingleLock lock(m_DisplaySection); + CSharedLock lock(m_DecoderSection); + + { CSharedLock dLock(m_DisplaySection); - if (m_DisplayState != VDPAU_OPEN) - return false; - } -@@ -1465,7 +1536,9 @@ void CVDPAU::Present() ++ if (m_DisplayState != VDPAU_OPEN) ++ return false; ++ } ++ + *picture = m_DVDVideoPics.front(); + // if this is the first field of an interlaced frame, we'll need + // this same picture for the second field later +@@ -1358,6 +1535,14 @@ + { //CLog::Log(LOGNOTICE,"%s",__FUNCTION__); VdpStatus vdp_st; - -- { CSingleLock lock(m_DisplaySection); ++ + CSharedLock lock(m_DecoderSection); + + { CSharedLock dLock(m_DisplaySection); - if (m_DisplayState != VDPAU_OPEN) - return; - } -@@ -1482,13 +1555,11 @@ void CVDPAU::Present() ++ if (m_DisplayState != VDPAU_OPEN) ++ return; ++ } ++ + presentSurface = outputSurface; + vdp_st = vdp_presentation_queue_display(vdp_flip_queue, +@@ -1368,27 +1553,17 @@ + CheckStatus(vdp_st, __LINE__); + } + +-void CVDPAU::VDPPreemptionCallbackFunction(VdpDevice device, void* context) +-{ +- CLog::Log(LOGERROR,"VDPAU Device Preempted - attempting recovery"); +- CVDPAU* pCtx = (CVDPAU*)context; +- pCtx->recover = true; +-} +- bool CVDPAU::CheckStatus(VdpStatus vdp_st, int line) { -- CSingleLock lock(m_DisplaySection); +- if (vdp_st == VDP_STATUS_HANDLE_DEVICE_MISMATCH +- || vdp_st == VDP_STATUS_DISPLAY_PREEMPTED) +- recover = true; +- +- // no need to log errors about this case, as it will happen on cleanup +- if (vdp_st == VDP_STATUS_INVALID_HANDLE && recover && vdpauConfigured) +- return false; - if (vdp_st != VDP_STATUS_OK) { CLog::Log(LOGERROR, " (VDPAU) Error: %s(%d) at %s:%d\n", vdp_get_error_string(vdp_st), vdp_st, __FILE__, line); - -- vdp_device = VDP_INVALID_HANDLE; +- recover = true; ++ + CExclusiveLock lock(m_DisplaySection); ++ ++ if(m_DisplayState == VDPAU_OPEN) ++ m_DisplayState = VDPAU_RESET; ++ + return true; + } + return false; +diff -Naur xbmc-b44b653/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h xbmc-b44b653.patch/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h +--- xbmc-b44b653/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h 2011-11-06 23:13:41.000000000 +0100 ++++ xbmc-b44b653.patch/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h 2011-11-06 23:52:47.047193025 +0100 +@@ -21,6 +21,7 @@ + * + */ - if(m_DisplayState == VDPAU_OPEN) - m_DisplayState = VDPAU_RESET; -diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h -index 868ca60..0686d98 100644 ---- a/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h -+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.h -@@ -33,6 +33,7 @@ ++#include "DllAvUtil.h" + #include "DVDVideoCodec.h" + #include "DVDVideoCodecFFmpeg.h" + #include "libavcodec/vdpau.h" +@@ -32,7 +33,10 @@ #include #include #include "threads/CriticalSection.h" +#include "threads/SharedSection.h" #include "settings/VideoSettings.h" - #include "guilib/DispResource.h" - #include "threads/Event.h" -@@ -134,6 +135,8 @@ public: ++#include "guilib/DispResource.h" ++#include "threads/Event.h" + namespace Surface { class CSurface; } + + #define NUM_OUTPUT_SURFACES 4 +@@ -44,6 +48,7 @@ + + class CVDPAU + : public CDVDVideoCodecFFmpeg::IHardwareDecoder ++ , public IDispResource + { + public: + +@@ -69,13 +74,8 @@ + virtual void Reset(); + virtual void Close(); + +- virtual int Check(AVCodecContext* avctx) +- { +- if(CheckRecover(false)) +- return VC_FLUSHED; +- else +- return 0; +- } ++ virtual int Check(AVCodecContext* avctx); ++ + virtual const std::string Name() { return "vdpau"; } + + bool MakePixmap(int width, int height); +@@ -88,7 +88,6 @@ + PFNGLXRELEASETEXIMAGEEXTPROC glXReleaseTexImageEXT; + GLXPixmap m_glPixmap; + Pixmap m_Pixmap; +- GLXContext m_glContext; + + static void FFReleaseBuffer(AVCodecContext *avctx, AVFrame *pic); + static void FFDrawSlice(struct AVCodecContext *s, +@@ -96,15 +95,12 @@ + int y, int type, int height); + static int FFGetBuffer(AVCodecContext *avctx, AVFrame *pic); + +- static void VDPPreemptionCallbackFunction(VdpDevice device, void* context); +- + void Present(); + bool ConfigVDPAU(AVCodecContext *avctx, int ref_frames); + void SpewHardwareAvailable(); + void InitCSCMatrix(int Height); + bool CheckStatus(VdpStatus vdp_st, int line); + +- bool CheckRecover(bool force = false); + void CheckFeatures(); + void SetColor(); + void SetNoiseReduction(); +@@ -113,7 +109,6 @@ + void SetHWUpscaling(); + + pictureAge picAge; +- bool recover; + vdpau_render_state *past[2], *current, *future; + int tmpDeintMode, tmpDeintGUI, tmpDeint; + float tmpNoiseReduction, tmpSharpness; +@@ -140,6 +135,8 @@ void InitVDPAUProcs(); void FiniVDPAUProcs(); void FiniVDPAUOutput(); @@ -1714,10 +792,12 @@ index 868ca60..0686d98 100644 VdpDevice vdp_device; VdpGetProcAddress * vdp_get_proc_address; -@@ -223,6 +226,15 @@ public: - std::vector m_videoSurfaces; - DllAvUtil m_dllAvUtil; +@@ -227,4 +224,28 @@ + , VdpChromaType &chroma_type); + std::vector m_videoSurfaces; ++ DllAvUtil m_dllAvUtil; ++ + enum VDPAUOutputMethod + { + OUTPUT_NONE, @@ -1727,43 +807,351 @@ index 868ca60..0686d98 100644 + }; + VDPAUOutputMethod m_vdpauOutputMethod; + - // OnLostDevice triggers transition from all states to LOST - // internal errors trigger transition from OPEN to RESET - // OnResetDevice triggers transition from LOST to RESET -@@ -231,8 +243,9 @@ public: - , VDPAU_RESET - , VDPAU_LOST - } m_DisplayState; -- CCriticalSection m_DisplaySection; -- CEvent m_DisplayEvent; ++ // OnLostDevice triggers transition from all states to LOST ++ // internal errors trigger transition from OPEN to RESET ++ // OnResetDevice triggers transition from LOST to RESET ++ enum EDisplayState ++ { VDPAU_OPEN ++ , VDPAU_RESET ++ , VDPAU_LOST ++ } m_DisplayState; + CSharedSection m_DecoderSection; + CSharedSection m_DisplaySection; + CEvent m_DisplayEvent; - virtual void OnLostDevice(); - virtual void OnResetDevice(); ++ virtual void OnLostDevice(); ++ virtual void OnResetDevice(); }; -diff --git a/xbmc/windowing/X11/WinSystemX11.cpp b/xbmc/windowing/X11/WinSystemX11.cpp -index ea20c0e..62cf554 100644 ---- a/xbmc/windowing/X11/WinSystemX11.cpp -+++ b/xbmc/windowing/X11/WinSystemX11.cpp -@@ -508,14 +508,14 @@ void CWinSystemX11::OnLostDevice() - { - CLog::Log(LOGDEBUG, "%s - notify display change event", __FUNCTION__); +diff -Naur xbmc-b44b653/xbmc/cores/VideoRenderers/BaseRenderer.h xbmc-b44b653.patch/xbmc/cores/VideoRenderers/BaseRenderer.h +--- xbmc-b44b653/xbmc/cores/VideoRenderers/BaseRenderer.h 2011-11-06 23:13:42.000000000 +0100 ++++ xbmc-b44b653.patch/xbmc/cores/VideoRenderers/BaseRenderer.h 2011-11-06 23:52:47.047193025 +0100 +@@ -64,6 +64,7 @@ + float GetAspectRatio() const; + virtual bool AddVideoPicture(DVDVideoPicture* picture) { return false; } ++ virtual void Flush() {}; + + virtual unsigned int GetProcessorSize() { return 0; } + +diff -Naur xbmc-b44b653/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp xbmc-b44b653.patch/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp +--- xbmc-b44b653/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp 2011-11-06 23:13:42.000000000 +0100 ++++ xbmc-b44b653.patch/xbmc/cores/VideoRenderers/LinuxRendererGL.cpp 2011-11-06 23:52:47.049193053 +0100 +@@ -554,6 +554,20 @@ + } + } + ++void CLinuxRendererGL::Flush() ++{ ++ if (!m_bValidated) ++ return; ++ ++ glFinish(); ++ ++ for (int i = 0 ; i < m_NumYV12Buffers ; i++) ++ (this->*m_textureDelete)(i); ++ ++ glFinish(); ++ m_bValidated = false; ++} ++ + void CLinuxRendererGL::Update(bool bPauseDrawing) + { + if (!m_bConfigured) return; +@@ -1035,6 +1049,8 @@ + CLog::Log(LOGDEBUG, "LinuxRendererGL: Cleaning up GL resources"); + CSingleLock lock(g_graphicsContext); + ++ glFinish(); ++ + if (m_rgbPbo) + { + glDeleteBuffersARB(1, &m_rgbPbo); +diff -Naur xbmc-b44b653/xbmc/cores/VideoRenderers/LinuxRendererGL.h xbmc-b44b653.patch/xbmc/cores/VideoRenderers/LinuxRendererGL.h +--- xbmc-b44b653/xbmc/cores/VideoRenderers/LinuxRendererGL.h 2011-11-06 23:13:42.000000000 +0100 ++++ xbmc-b44b653.patch/xbmc/cores/VideoRenderers/LinuxRendererGL.h 2011-11-06 23:52:47.049193053 +0100 +@@ -140,6 +140,7 @@ + virtual unsigned int PreInit(); + virtual void UnInit(); + virtual void Reset(); /* resets renderer after seek for example */ ++ virtual void Flush(); + + #ifdef HAVE_LIBVDPAU + virtual void AddProcessor(CVDPAU* vdpau); +diff -Naur xbmc-b44b653/xbmc/cores/VideoRenderers/RenderManager.cpp xbmc-b44b653.patch/xbmc/cores/VideoRenderers/RenderManager.cpp +--- xbmc-b44b653/xbmc/cores/VideoRenderers/RenderManager.cpp 2011-11-06 23:13:42.000000000 +0100 ++++ xbmc-b44b653.patch/xbmc/cores/VideoRenderers/RenderManager.cpp 2011-11-06 23:52:47.050193066 +0100 +@@ -337,6 +337,35 @@ + m_pRenderer->UnInit(); + } + ++bool CXBMCRenderManager::Flush() ++{ ++ if (!m_pRenderer) ++ return true; ++ ++ if (g_application.IsCurrentThread()) ++ { ++ CLog::Log(LOGDEBUG, "%s - flushing renderer", __FUNCTION__); ++ ++ CRetakeLock lock(m_sharedSection); ++ m_pRenderer->Flush(); ++ m_flushEvent.Set(); ++ } ++ else ++ { ++ ThreadMessage msg = {TMSG_RENDERER_FLUSH}; ++ m_flushEvent.Reset(); ++ g_application.getApplicationMessenger().SendMessage(msg, false); ++ if (!m_flushEvent.WaitMSec(1000)) ++ { ++ CLog::Log(LOGERROR, "%s - timed out waiting for renderer to flush", __FUNCTION__); ++ return false; ++ } ++ else ++ return true; ++ } ++ return true; ++} ++ + void CXBMCRenderManager::SetupScreenshot() + { + CSharedLock lock(m_sharedSection); +diff -Naur xbmc-b44b653/xbmc/cores/VideoRenderers/RenderManager.h xbmc-b44b653.patch/xbmc/cores/VideoRenderers/RenderManager.h +--- xbmc-b44b653/xbmc/cores/VideoRenderers/RenderManager.h 2011-11-06 23:13:41.000000000 +0100 ++++ xbmc-b44b653.patch/xbmc/cores/VideoRenderers/RenderManager.h 2011-11-06 23:52:47.050193066 +0100 +@@ -76,6 +76,7 @@ + void FlipPage(volatile bool& bStop, double timestamp = 0.0, int source = -1, EFIELDSYNC sync = FS_NONE); + unsigned int PreInit(); + void UnInit(); ++ bool Flush(); + + void AddOverlay(CDVDOverlay* o, double pts) + { +@@ -227,6 +228,7 @@ + EPRESENTSTEP m_presentstep; + int m_presentsource; + CEvent m_presentevent; ++ CEvent m_flushEvent; + + + OVERLAY::CRenderer m_overlays; +diff -Naur xbmc-b44b653/xbmc/guilib/DispResource.h xbmc-b44b653.patch/xbmc/guilib/DispResource.h +--- xbmc-b44b653/xbmc/guilib/DispResource.h 1970-01-01 01:00:00.000000000 +0100 ++++ xbmc-b44b653.patch/xbmc/guilib/DispResource.h 2011-11-06 23:52:47.050193066 +0100 +@@ -0,0 +1,33 @@ ++/* ++* Copyright (C) 2005-2008 Team XBMC ++* http://www.xbmc.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, 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 XBMC; see the file COPYING. If not, write to ++* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. ++* http://www.gnu.org/copyleft/gpl.html ++* ++*/ ++ ++#pragma once ++ ++#ifdef HAS_GLX ++class IDispResource ++{ ++public: ++ virtual ~IDispResource() {}; ++ virtual void OnLostDevice() {}; ++ virtual void OnResetDevice() {}; ++}; ++ ++#endif +diff -Naur xbmc-b44b653/xbmc/windowing/X11/WinSystemX11.cpp xbmc-b44b653.patch/xbmc/windowing/X11/WinSystemX11.cpp +--- xbmc-b44b653/xbmc/windowing/X11/WinSystemX11.cpp 2011-11-06 23:13:40.000000000 +0100 ++++ xbmc-b44b653.patch/xbmc/windowing/X11/WinSystemX11.cpp 2011-11-06 23:52:47.051193079 +0100 +@@ -27,9 +27,18 @@ + #include "WinSystemX11.h" + #include "settings/Settings.h" + #include "guilib/Texture.h" ++#include "guilib/DispResource.h" + #include "utils/log.h" + #include "XRandR.h" + #include ++#include "threads/SingleLock.h" ++#include ++#include "cores/VideoRenderers/RenderManager.h" ++#include "utils/TimeUtils.h" ++ ++#if defined(HAS_XRANDR) ++#include ++#endif + + using namespace std; + +@@ -42,6 +51,7 @@ + m_glWindow = 0; + m_wmWindow = 0; + m_bWasFullScreenBeforeMinimize = false; ++ m_dpyLostTime = 0; + } + + CWinSystemX11::~CWinSystemX11() +@@ -126,6 +136,13 @@ + SDL_WM_SetIcon(SDL_CreateRGBSurfaceFrom(iconTexture.GetPixels(), iconTexture.GetWidth(), iconTexture.GetHeight(), 32, iconTexture.GetPitch(), 0xff0000, 0x00ff00, 0x0000ff, 0xff000000L), NULL); + SDL_WM_SetCaption("XBMC Media Center", NULL); + ++ // register XRandR Events ++#if defined(HAS_XRANDR) ++ int iReturn; ++ XRRQueryExtension(m_dpy, &m_RREventBase, &iReturn); ++ XRRSelectInput(m_dpy, m_wmWindow, RRScreenChangeNotifyMask); ++#endif ++ + m_bWindowCreated = true; + return true; + } +@@ -175,7 +192,10 @@ + mode.id = res.strId; + + if(m_bFullScreen) ++ { ++ OnLostDevice(); + g_xrandr.SetMode(out, mode); ++ } + else + g_xrandr.RestoreState(); + #endif +@@ -444,4 +464,74 @@ + XSync(m_dpy, False); + return true; + } ++ ++void CWinSystemX11::CheckDisplayEvents() ++{ ++#if defined(HAS_XRANDR) ++ bool bGotEvent(false); ++ bool bTimeout(false); ++ XEvent Event; ++ while (XCheckTypedEvent(m_dpy, m_RREventBase + RRScreenChangeNotify, &Event)) ++ { ++ if (Event.type == m_RREventBase + RRScreenChangeNotify) ++ { ++ CLog::Log(LOGDEBUG, "%s: Received RandR event %i", __FUNCTION__, Event.type); ++ bGotEvent = true; ++ } ++ XRRUpdateConfiguration(&Event); ++ } ++ ++ // check fail safe timer ++ if (m_dpyLostTime && CurrentHostCounter() - m_dpyLostTime > (uint64_t)3 * CurrentHostFrequency()) ++ { ++ CLog::Log(LOGERROR, "%s - no display event after 3 seconds", __FUNCTION__); ++ bTimeout = true; ++ } ++ ++ if (bGotEvent || bTimeout) ++ { ++ CLog::Log(LOGDEBUG, "%s - notify display reset event", __FUNCTION__); ++ ++ CSingleLock lock(m_resourceSection); ++ ++ // tell any shared resources ++ for (vector::iterator i = m_resources.begin(); i != m_resources.end(); i++) ++ (*i)->OnResetDevice(); ++ ++ // reset fail safe timer ++ m_dpyLostTime = 0; ++ } ++#endif ++} ++ ++void CWinSystemX11::OnLostDevice() ++{ ++ CLog::Log(LOGDEBUG, "%s - notify display change event", __FUNCTION__); ++ + // make sure renderer has no invalid references + g_renderManager.Flush(); + - { CSingleLock lock(m_resourceSection); - for (vector::iterator i = m_resources.begin(); i != m_resources.end(); i++) - (*i)->OnLostDevice(); - } ++ { CSingleLock lock(m_resourceSection); ++ for (vector::iterator i = m_resources.begin(); i != m_resources.end(); i++) ++ (*i)->OnLostDevice(); ++ } ++ ++ // fail safe timer ++ m_dpyLostTime = CurrentHostCounter(); ++} ++ ++void CWinSystemX11::Register(IDispResource *resource) ++{ ++ CSingleLock lock(m_resourceSection); ++ m_resources.push_back(resource); ++} ++ ++void CWinSystemX11::Unregister(IDispResource* resource) ++{ ++ CSingleLock lock(m_resourceSection); ++ vector::iterator i = find(m_resources.begin(), m_resources.end(), resource); ++ if (i != m_resources.end()) ++ m_resources.erase(i); ++} ++ + #endif +diff -Naur xbmc-b44b653/xbmc/windowing/X11/WinSystemX11GL.cpp xbmc-b44b653.patch/xbmc/windowing/X11/WinSystemX11GL.cpp +--- xbmc-b44b653/xbmc/windowing/X11/WinSystemX11GL.cpp 2011-11-06 23:13:40.000000000 +0100 ++++ xbmc-b44b653.patch/xbmc/windowing/X11/WinSystemX11GL.cpp 2011-11-06 23:52:47.051193079 +0100 +@@ -43,6 +43,8 @@ -- // make sure renderer has no invalid references -- g_renderManager.Flush(); -- - // fail safe timer - m_dpyLostTime = CurrentHostCounter(); - } --- -1.7.5.4 - + bool CWinSystemX11GL::PresentRenderImpl(const CDirtyRegionList& dirty) + { ++ CheckDisplayEvents(); ++ + if(m_iVSyncMode == 3) + { + glFinish(); +diff -Naur xbmc-b44b653/xbmc/windowing/X11/WinSystemX11.h xbmc-b44b653.patch/xbmc/windowing/X11/WinSystemX11.h +--- xbmc-b44b653/xbmc/windowing/X11/WinSystemX11.h 2011-11-06 23:13:39.000000000 +0100 ++++ xbmc-b44b653.patch/xbmc/windowing/X11/WinSystemX11.h 2011-11-06 23:52:47.051193079 +0100 +@@ -26,6 +26,9 @@ + #include "windowing/WinSystem.h" + #include "utils/Stopwatch.h" + #include ++#include "threads/CriticalSection.h" ++ ++class IDispResource; + + class CWinSystemX11 : public CWinSystemBase + { +@@ -51,6 +54,8 @@ + virtual bool Restore() ; + virtual bool Hide(); + virtual bool Show(bool raise = true); ++ virtual void Register(IDispResource *resource); ++ virtual void Unregister(IDispResource *resource); + + // Local to WinSystemX11 only + Display* GetDisplay() { return m_dpy; } +@@ -58,6 +63,8 @@ + + protected: + bool RefreshGlxContext(); ++ void CheckDisplayEvents(); ++ void OnLostDevice(); + + SDL_Surface* m_SDLSurface; + GLXContext m_glContext; +@@ -65,6 +72,10 @@ + Window m_wmWindow; + Display* m_dpy; + bool m_bWasFullScreenBeforeMinimize; ++ int m_RREventBase; ++ CCriticalSection m_resourceSection; ++ std::vector m_resources; ++ uint64_t m_dpyLostTime; + + private: + bool IsSuitableVisual(XVisualInfo *vInfo); diff --git a/packages/mediacenter/xbmc/patches/xbmc-4c32cde-351-increase_YV12_buffers-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-b44b653-351-increase_YV12_buffers-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-4c32cde-351-increase_YV12_buffers-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-b44b653-351-increase_YV12_buffers-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-4c32cde-353-limit_glxSwapBuffers_going_to_far_ahead-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-b44b653-353-limit_glxSwapBuffers_going_to_far_ahead-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-4c32cde-353-limit_glxSwapBuffers_going_to_far_ahead-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-b44b653-353-limit_glxSwapBuffers_going_to_far_ahead-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-4c32cde-354-vaapi_increase_number_of_video_surface_allocated-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-b44b653-354-vaapi_increase_number_of_video_surface_allocated-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-4c32cde-354-vaapi_increase_number_of_video_surface_allocated-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-b44b653-354-vaapi_increase_number_of_video_surface_allocated-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-4c32cde-402-enable_yasm_in_ffmpeg-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-b44b653-402-enable_yasm_in_ffmpeg-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-4c32cde-402-enable_yasm_in_ffmpeg-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-b44b653-402-enable_yasm_in_ffmpeg-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-4c32cde-404-add_lame_check-0.6.patch b/packages/mediacenter/xbmc/patches/xbmc-b44b653-404-add_lame_check-0.6.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-4c32cde-404-add_lame_check-0.6.patch rename to packages/mediacenter/xbmc/patches/xbmc-b44b653-404-add_lame_check-0.6.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-4c32cde-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-b44b653-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-4c32cde-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-b44b653-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-4c32cde-452-change_lcd_content-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-b44b653-452-change_lcd_content-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-4c32cde-452-change_lcd_content-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-b44b653-452-change_lcd_content-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-4c32cde-453-add_openelec.tv_RSS_news-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-b44b653-453-add_openelec.tv_RSS_news-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-4c32cde-453-add_openelec.tv_RSS_news-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-b44b653-453-add_openelec.tv_RSS_news-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-4c32cde-454-disable_backslash-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-b44b653-454-disable_backslash-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-4c32cde-454-disable_backslash-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-b44b653-454-disable_backslash-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-4c32cde-457-fix_connection_check-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-b44b653-457-fix_connection_check-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-4c32cde-457-fix_connection_check-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-b44b653-457-fix_connection_check-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-4c32cde-462-add_remote_irtrans_mediacenter-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-b44b653-462-add_remote_irtrans_mediacenter-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-4c32cde-462-add_remote_irtrans_mediacenter-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-b44b653-462-add_remote_irtrans_mediacenter-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-4c32cde-463-add_remote_devinput-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-b44b653-463-add_remote_devinput-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-4c32cde-463-add_remote_devinput-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-b44b653-463-add_remote_devinput-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-4c32cde-464-add_eject_keymapping_for_lirc-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-b44b653-464-add_eject_keymapping_for_lirc-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-4c32cde-464-add_eject_keymapping_for_lirc-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-b44b653-464-add_eject_keymapping_for_lirc-0.1.patch From 4baf10c211897b6cec6f075b4757542bd2daab53 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 7 Nov 2011 10:46:13 +0100 Subject: [PATCH 31/89] libcec: update to libcec-84c27c4 Signed-off-by: Stephan Raue --- packages/devel/libcec/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/devel/libcec/meta b/packages/devel/libcec/meta index 664e100d3a..51772f4944 100644 --- a/packages/devel/libcec/meta +++ b/packages/devel/libcec/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="libcec" -PKG_VERSION="cb91287" +PKG_VERSION="84c27c4" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From 76da2745325a70546c5ca01ee3f0b4894eb9def0 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Mon, 7 Nov 2011 10:46:50 +0100 Subject: [PATCH 32/89] cmake: update to cmake-2.8.6 Signed-off-by: Stephan Raue --- packages/toolchain/devel/cmake/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/toolchain/devel/cmake/meta b/packages/toolchain/devel/cmake/meta index 3982512831..201b57a3b0 100644 --- a/packages/toolchain/devel/cmake/meta +++ b/packages/toolchain/devel/cmake/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="cmake" -PKG_VERSION="2.8.5" +PKG_VERSION="2.8.6" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="BSD" From 211c31ad170a4c1f32ade3ee244c727ed291ce44 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 8 Nov 2011 12:15:22 +0100 Subject: [PATCH 33/89] gmp: build gmp target libs, split to gmp and gmp-host Signed-off-by: Stephan Raue --- packages/devel/gmp/build | 44 +++++++++++++++++++ packages/devel/gmp/install | 26 +++++++++++ packages/{toolchain/math => devel}/gmp/meta | 6 +-- packages/toolchain/devel/binutils/meta | 2 +- packages/toolchain/lang/gcc-core/meta | 2 +- packages/toolchain/lang/gcc-final/meta | 2 +- packages/toolchain/math/cloog-ppl/meta | 2 +- .../toolchain/math/{gmp => gmp-host}/build | 7 +-- packages/toolchain/math/gmp-host/meta | 36 +++++++++++++++ packages/toolchain/math/mpc/build | 3 -- packages/toolchain/math/mpc/meta | 2 +- packages/toolchain/math/mpfr/meta | 2 +- packages/toolchain/math/ppl/meta | 2 +- 13 files changed, 120 insertions(+), 16 deletions(-) create mode 100755 packages/devel/gmp/build create mode 100755 packages/devel/gmp/install rename packages/{toolchain/math => devel}/gmp/meta (96%) rename packages/toolchain/math/{gmp => gmp-host}/build (94%) create mode 100644 packages/toolchain/math/gmp-host/meta diff --git a/packages/devel/gmp/build b/packages/devel/gmp/build new file mode 100755 index 0000000000..f984060784 --- /dev/null +++ b/packages/devel/gmp/build @@ -0,0 +1,44 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +. config/options $1 + +export CFLAGS="$CFLAGS -fPIC" +export CPPFLAGS="$CPPFLAGS -fexceptions" + +cd $PKG_BUILD + +mkdir -p .objdir-target && cd .objdir-target + +../configure --host=$TARGET_NAME \ + --build=$HOST_NAME \ + --prefix=/usr \ + --sysconfdir=/etc \ + --datadir=/usr/share \ + --localstatedir=/var \ + --disable-static \ + --enable-shared \ + --disable-mpbsd \ + --disable-cxx \ + +make +$MAKEINSTALL \ No newline at end of file diff --git a/packages/devel/gmp/install b/packages/devel/gmp/install new file mode 100755 index 0000000000..4ea4daa37e --- /dev/null +++ b/packages/devel/gmp/install @@ -0,0 +1,26 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +. config/options $1 + +mkdir -p $INSTALL/usr/lib + cp -P $PKG_BUILD/.objdir-target/.libs/libgmp.so* $INSTALL/usr/lib diff --git a/packages/toolchain/math/gmp/meta b/packages/devel/gmp/meta similarity index 96% rename from packages/toolchain/math/gmp/meta rename to packages/devel/gmp/meta index 9486cd1bf8..4eec81da7f 100644 --- a/packages/toolchain/math/gmp/meta +++ b/packages/devel/gmp/meta @@ -26,11 +26,11 @@ PKG_LICENSE="LGPL" PKG_SITE="http://gmplib.org/" PKG_URL="http://ftp.sunet.se/pub/gnu/gmp/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="ccache" +PKG_BUILD_DEPENDS="toolchain" PKG_PRIORITY="optional" -PKG_SECTION="toolchain/math" +PKG_SECTION="devel" PKG_SHORTDESC="gmp: The GNU MP (multiple precision arithmetic) library" PKG_LONGDESC="GNU MP is a library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating point numbers. It has a rich set of functions, and the functions have a regular interface. GNU MP is designed to be as fast as possible, both for small operands and for huge operands. The speed is achieved by using fullwords as the basic arithmetic type, by using fast algorithms, by carefully optimized assembly code for the most common inner loops for a lots of CPUs, and by a general emphasis on speed (instead of simplicity or elegance). The speed of GNU MP is believed to be faster than any other similar library. The advantage for GNU MP increases with the operand sizes for certain operations, since GNU MP in many cases has asymptotically faster algorithms." PKG_IS_ADDON="no" -PKG_AUTORECONF="no" +PKG_AUTORECONF="yes" diff --git a/packages/toolchain/devel/binutils/meta b/packages/toolchain/devel/binutils/meta index 32c7de3622..83ca639309 100644 --- a/packages/toolchain/devel/binutils/meta +++ b/packages/toolchain/devel/binutils/meta @@ -29,7 +29,7 @@ PKG_URL="http://www.mirrorservice.org/sites/ftp.kernel.org/pub/linux/devel/binut #PKG_URL="http://ftp.gnu.org/gnu/binutils/$PKG_NAME-$PKG_VERSION.tar.bz2" #PKG_URL="ftp://ftp.kernel.org/pub/linux/devel/binutils/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="ccache bison flex linux-headers gmp mpfr ppl cloog-ppl libelf" +PKG_BUILD_DEPENDS="ccache bison flex linux-headers gmp-host mpfr ppl cloog-ppl libelf" PKG_PRIORITY="optional" PKG_SECTION="toolchain/devel" PKG_SHORTDESC="binutils: A GNU collection of binary utilities" diff --git a/packages/toolchain/lang/gcc-core/meta b/packages/toolchain/lang/gcc-core/meta index 1aed495658..90e8b78507 100644 --- a/packages/toolchain/lang/gcc-core/meta +++ b/packages/toolchain/lang/gcc-core/meta @@ -26,7 +26,7 @@ PKG_LICENSE="GPL" PKG_SITE="http://gcc.gnu.org/" PKG_URL="" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="ccache autoconf-2.64 binutils gmp mpfr mpc ppl cloog-ppl libelf" +PKG_BUILD_DEPENDS="ccache autoconf-2.64 binutils gmp-host mpfr mpc ppl cloog-ppl libelf" PKG_PRIORITY="optional" PKG_SECTION="toolchain/lang" PKG_SHORTDESC="gcc: The GNU Compiler Collection Version 4 (aka GNU C Compiler)" diff --git a/packages/toolchain/lang/gcc-final/meta b/packages/toolchain/lang/gcc-final/meta index 3e378ac96c..46a3fff01b 100644 --- a/packages/toolchain/lang/gcc-final/meta +++ b/packages/toolchain/lang/gcc-final/meta @@ -26,7 +26,7 @@ PKG_LICENSE="GPL" PKG_SITE="http://gcc.gnu.org/" PKG_URL="" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="ccache autoconf-2.64 binutils gmp mpfr mpc ppl cloog-ppl libelf eglibc" +PKG_BUILD_DEPENDS="ccache autoconf-2.64 binutils gmp-host mpfr mpc ppl cloog-ppl libelf eglibc" PKG_PRIORITY="optional" PKG_SECTION="toolchain/lang" PKG_SHORTDESC="gcc: The GNU Compiler Collection Version 4 (aka GNU C Compiler)" diff --git a/packages/toolchain/math/cloog-ppl/meta b/packages/toolchain/math/cloog-ppl/meta index 07685bf0de..d740e280f8 100644 --- a/packages/toolchain/math/cloog-ppl/meta +++ b/packages/toolchain/math/cloog-ppl/meta @@ -26,7 +26,7 @@ PKG_LICENSE="GPL" PKG_SITE="http://www.cloog.org/" PKG_URL="ftp://gcc.gnu.org/pub/gcc/infrastructure/$PKG_NAME-$PKG_VERSION.tar.gz" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="ccache gmp ppl" +PKG_BUILD_DEPENDS="ccache gmp-host ppl" PKG_PRIORITY="optional" PKG_SECTION="toolchain/math" PKG_SHORTDESC="cloog-ppl: Code Generator in the Polyhedral Model's Home" diff --git a/packages/toolchain/math/gmp/build b/packages/toolchain/math/gmp-host/build similarity index 94% rename from packages/toolchain/math/gmp/build rename to packages/toolchain/math/gmp-host/build index 8c82bc67f9..b26d3c0621 100755 --- a/packages/toolchain/math/gmp/build +++ b/packages/toolchain/math/gmp-host/build @@ -22,15 +22,16 @@ . config/options $1 +$SCRIPTS/unpack gmp + setup_toolchain host export CFLAGS="$CFLAGS -fPIC" export CPPFLAGS="$CPPFLAGS -fexceptions" -cd $PKG_BUILD +cd $BUILD/gmp-* -mkdir -p objdir -cd objdir +mkdir -p .objdir-host && cd .objdir-host ../configure --host=$HOST_NAME \ --build=$HOST_NAME \ diff --git a/packages/toolchain/math/gmp-host/meta b/packages/toolchain/math/gmp-host/meta new file mode 100644 index 0000000000..f99ea13388 --- /dev/null +++ b/packages/toolchain/math/gmp-host/meta @@ -0,0 +1,36 @@ +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +PKG_NAME="gmp" +PKG_VERSION="" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="LGPL" +PKG_SITE="http://gmplib.org/" +PKG_URL="" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="ccache" +PKG_PRIORITY="optional" +PKG_SECTION="toolchain/math" +PKG_SHORTDESC="gmp: The GNU MP (multiple precision arithmetic) library" +PKG_LONGDESC="GNU MP is a library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating point numbers. It has a rich set of functions, and the functions have a regular interface. GNU MP is designed to be as fast as possible, both for small operands and for huge operands. The speed is achieved by using fullwords as the basic arithmetic type, by using fast algorithms, by carefully optimized assembly code for the most common inner loops for a lots of CPUs, and by a general emphasis on speed (instead of simplicity or elegance). The speed of GNU MP is believed to be faster than any other similar library. The advantage for GNU MP increases with the operand sizes for certain operations, since GNU MP in many cases has asymptotically faster algorithms." +PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" diff --git a/packages/toolchain/math/mpc/build b/packages/toolchain/math/mpc/build index 52776b66c8..76f268a356 100755 --- a/packages/toolchain/math/mpc/build +++ b/packages/toolchain/math/mpc/build @@ -22,9 +22,6 @@ . config/options $1 -$SCRIPTS/build gmp -$SCRIPTS/build mpfr - setup_toolchain host cd $PKG_BUILD diff --git a/packages/toolchain/math/mpc/meta b/packages/toolchain/math/mpc/meta index 94b79f2bbe..6ea3da4b8d 100644 --- a/packages/toolchain/math/mpc/meta +++ b/packages/toolchain/math/mpc/meta @@ -26,7 +26,7 @@ PKG_LICENSE="LGPL" PKG_SITE="http://www.multiprecision.org" PKG_URL="http://www.multiprecision.org/mpc/download/$PKG_NAME-$PKG_VERSION.tar.gz" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="ccache gmp mpfr" +PKG_BUILD_DEPENDS="ccache gmp-host mpfr" PKG_PRIORITY="optional" PKG_SECTION="toolchain/math" PKG_SHORTDESC="mpc: A C library for the arithmetic of high precision complex numbers" diff --git a/packages/toolchain/math/mpfr/meta b/packages/toolchain/math/mpfr/meta index 50bfa5c47a..43c437e6cb 100644 --- a/packages/toolchain/math/mpfr/meta +++ b/packages/toolchain/math/mpfr/meta @@ -26,7 +26,7 @@ PKG_LICENSE="LGPL" PKG_SITE="http://www.mpfr.org/" PKG_URL="http://ftp.gnu.org/gnu/mpfr/$PKG_NAME-$PKG_VERSION.tar.xz" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="ccache gmp" +PKG_BUILD_DEPENDS="ccache gmp-host" PKG_PRIORITY="optional" PKG_SECTION="toolchain/math" PKG_SHORTDESC="mpfr: A C library for multiple-precision floating-point computations with exact roundi" diff --git a/packages/toolchain/math/ppl/meta b/packages/toolchain/math/ppl/meta index 6aec57b2f1..cc8b0aa281 100644 --- a/packages/toolchain/math/ppl/meta +++ b/packages/toolchain/math/ppl/meta @@ -27,7 +27,7 @@ PKG_SITE="http://www.cs.unipr.it/ppl" PKG_URL="http://www.cs.unipr.it/ppl/Download/ftp/releases/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_URL="http://www.mirrorservice.org/sites/www.ibiblio.org/gentoo/distfiles/ppl-0.11.2.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="ccache gmp" +PKG_BUILD_DEPENDS="ccache gmp-host" PKG_PRIORITY="optional" PKG_SECTION="toolchain/math" PKG_SHORTDESC="ppl: Parma Polyhedra Library" From a94e78743b6d75a2263059d38f4d11e4b6550466 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 8 Nov 2011 12:16:00 +0100 Subject: [PATCH 34/89] new package: add package 'cryptodev-linux' Signed-off-by: Stephan Raue --- packages/security/cryptodev-linux/build | 29 +++++++++++++++ packages/security/cryptodev-linux/install | 28 +++++++++++++++ packages/security/cryptodev-linux/meta | 36 +++++++++++++++++++ packages/security/cryptodev-linux/need_unpack | 32 +++++++++++++++++ 4 files changed, 125 insertions(+) create mode 100755 packages/security/cryptodev-linux/build create mode 100755 packages/security/cryptodev-linux/install create mode 100644 packages/security/cryptodev-linux/meta create mode 100755 packages/security/cryptodev-linux/need_unpack diff --git a/packages/security/cryptodev-linux/build b/packages/security/cryptodev-linux/build new file mode 100755 index 0000000000..7e4881333d --- /dev/null +++ b/packages/security/cryptodev-linux/build @@ -0,0 +1,29 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +. config/options $1 + +cd $PKG_BUILD + make V=1 CC=$CC -C $(kernel_path) SUBDIRS=`pwd` modules + +mkdir -p $SYSROOT_PREFIX/usr/include/crypto + cp crypto/cryptodev.h $SYSROOT_PREFIX/usr/include/crypto \ No newline at end of file diff --git a/packages/security/cryptodev-linux/install b/packages/security/cryptodev-linux/install new file mode 100755 index 0000000000..a565817e1b --- /dev/null +++ b/packages/security/cryptodev-linux/install @@ -0,0 +1,28 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +. config/options $1 + +VER=`ls $BUILD/linux*/modules/lib/modules` + +mkdir -p $INSTALL/lib/modules/$VER/cryptodev + cp $PKG_BUILD/cryptodev.ko $INSTALL/lib/modules/$VER/cryptodev diff --git a/packages/security/cryptodev-linux/meta b/packages/security/cryptodev-linux/meta new file mode 100644 index 0000000000..729fb578d2 --- /dev/null +++ b/packages/security/cryptodev-linux/meta @@ -0,0 +1,36 @@ +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +PKG_NAME="cryptodev-linux" +PKG_VERSION="1.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://home.gna.org/cryptodev-linux/" +PKG_URL="http://download.gna.org/cryptodev-linux/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain linux" +PKG_PRIORITY="optional" +PKG_SECTION="driver" +PKG_SHORTDESC="cryptodev-linux: a device that allows access to Linux kernel cryptographic drivers" +PKG_LONGDESC="Cryptodev-linux is a device that allows access to Linux kernel cryptographic drivers; thus allowing of userspace applications to take advantage of hardware accelerators. Cryptodev-linux is implemented as a standalone module that requires no dependencies other than a stock linux kernel. It's API is similar to OpenBSD's cryptodev userspace API (/dev/crypto)." +PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" diff --git a/packages/security/cryptodev-linux/need_unpack b/packages/security/cryptodev-linux/need_unpack new file mode 100755 index 0000000000..5d6df529ff --- /dev/null +++ b/packages/security/cryptodev-linux/need_unpack @@ -0,0 +1,32 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +. config/options $1 + +STAMP=$STAMPS/$1/unpack + +test $PKG_DIR/config/linux.$TARGET_ARCH.conf -nt $STAMP -o \ + $PROJECT_DIR/$PROJECT/linux/linux.$TARGET_ARCH.conf -nt $STAMP -o \ + $PKG_DIR/url -nt $STAMP -o \ + $PKG_DIR/meta -nt $STAMP && rm -f $STAMP + +exit 0 From e23a5c10c6fd33b0e39f4a3dc59e09d5cc01ca80 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 8 Nov 2011 12:16:38 +0100 Subject: [PATCH 35/89] polkit: update to polkit-0.102 Signed-off-by: Stephan Raue --- packages/security/polkit/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/security/polkit/meta b/packages/security/polkit/meta index 396aff420d..3fa1006410 100644 --- a/packages/security/polkit/meta +++ b/packages/security/polkit/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="polkit" -PKG_VERSION="0.101" +PKG_VERSION="0.102" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="MIT" From 137353cf43fbf82409e20fb8280e014f832da051 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 8 Nov 2011 12:37:49 +0100 Subject: [PATCH 36/89] new package: add package 'nettle' Signed-off-by: Stephan Raue --- packages/security/nettle/build | 37 ++++++++++++++++++++++++++++++++ packages/security/nettle/install | 29 +++++++++++++++++++++++++ packages/security/nettle/meta | 36 +++++++++++++++++++++++++++++++ 3 files changed, 102 insertions(+) create mode 100755 packages/security/nettle/build create mode 100755 packages/security/nettle/install create mode 100644 packages/security/nettle/meta diff --git a/packages/security/nettle/build b/packages/security/nettle/build new file mode 100755 index 0000000000..bb60b56693 --- /dev/null +++ b/packages/security/nettle/build @@ -0,0 +1,37 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +. config/options $1 + +cd $PKG_BUILD +./configure --host=$TARGET_NAME \ + --build=$HOST_NAME \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --disable-static \ + --enable-shared \ + --disable-openssl \ + --with-gnu-ld + +make +$MAKEINSTALL diff --git a/packages/security/nettle/install b/packages/security/nettle/install new file mode 100755 index 0000000000..1f374394e5 --- /dev/null +++ b/packages/security/nettle/install @@ -0,0 +1,29 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +. config/options $1 + +mkdir -p $INSTALL/usr/lib + cp -P $PKG_BUILD/libnettle.so $INSTALL/usr/lib + ln -sf libnettle.so $INSTALL/usr/lib/`basename $PKG_BUILD/.lib/libnettle.so.[0-9]` + cp -P $PKG_BUILD/libhogweed.so $INSTALL/usr/lib + ln -sf libhogweed.so $INSTALL/usr/lib/`basename $PKG_BUILD/.lib/libhogweed.so.[0-9]` diff --git a/packages/security/nettle/meta b/packages/security/nettle/meta new file mode 100644 index 0000000000..aaa9ce2775 --- /dev/null +++ b/packages/security/nettle/meta @@ -0,0 +1,36 @@ +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +PKG_NAME="nettle" +PKG_VERSION="2.4" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.lysator.liu.se/~nisse/nettle" +PKG_URL="http://www.lysator.liu.se/~nisse/archive/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="gmp" +PKG_BUILD_DEPENDS="toolchain gmp" +PKG_PRIORITY="optional" +PKG_SECTION="security" +PKG_SHORTDESC="nettle: a cryptographic library" +PKG_LONGDESC="Nettle is a cryptographic library that is designed to fit easily in more or less any context: In crypto toolkits for object-oriented languages (C++, Python, Pike, ...), in applications like LSH or GNUPG, or even in kernel space. In most contexts, you need more than the basic cryptographic algorithms, you also need some way to keep track of available algorithms, their properties and variants. You often have some algorithm selection process, often dictated by a protocol you want to implement." +PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From f3fd1da33821eba09b28007a287718d18970ee14 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 8 Nov 2011 18:10:49 +0100 Subject: [PATCH 37/89] gnutls: update to gnutls-3.0.7 Signed-off-by: Stephan Raue --- packages/security/gnutls/build | 49 ++++++++++++++------------------ packages/security/gnutls/install | 4 +-- packages/security/gnutls/meta | 8 +++--- 3 files changed, 26 insertions(+), 35 deletions(-) diff --git a/packages/security/gnutls/build b/packages/security/gnutls/build index 8189b6997b..c36e5b94f6 100755 --- a/packages/security/gnutls/build +++ b/packages/security/gnutls/build @@ -26,8 +26,6 @@ strip_lto cd $PKG_BUILD - -cd lib ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ @@ -35,35 +33,30 @@ cd lib --localstatedir=/var \ --disable-static \ --enable-shared \ + --enable-hardware-acceleration \ + --enable-cryptodev \ + --enable-openssl-compatibility \ + --without-p11-kit \ --with-included-libtasn1 \ - --with-lzo \ + --with-included-libcfg \ + --with-libnettle-prefix="$SYSROOT_PREFIX/usr" \ --with-libz-prefix="$SYSROOT_PREFIX/usr" \ - --with-libgcrypt \ - --with-libgcrypt-prefix="$SYSROOT_PREFIX/usr" \ + --disable-gtk-doc \ + --disable-gtk-doc-html \ + --disable-gtk-doc-pdf \ --disable-nls \ + --disable-guile \ + --disable-valgrind-tests \ --with-gnu-ld -# --enable-cryptodev \ # TODO: add later +# --enable-extra-pki \ +# --enable-srp-authentication \ +# --enable-anon-authentication \ +# --disable-psk-authentication=yes \ +# --disable-openpgp-authentication=yes \ -make -$MAKEINSTALL - -cd ../libextra -./configure --host=$TARGET_NAME \ - --build=$HOST_NAME \ - --prefix=/usr \ - --sysconfdir=/etc \ - --localstatedir=/var \ - --disable-static \ - --enable-shared \ - --with-included-libtasn1 \ - --with-lzo \ - --with-libgcrypt \ - --with-libgcrypt-prefix="$SYSROOT_PREFIX/usr" \ - --with-gnu-ld - -# --enable-openssl-compatibility \ -# --enable-cryptodev \ # TODO: add later - -make -$MAKEINSTALL +make -C gl +make -C lib +make -C extra +$MAKEINSTALL -C lib +$MAKEINSTALL -C extra diff --git a/packages/security/gnutls/install b/packages/security/gnutls/install index baec342186..9591cfe7d6 100755 --- a/packages/security/gnutls/install +++ b/packages/security/gnutls/install @@ -26,7 +26,5 @@ mkdir -p $INSTALL/usr/lib cp -P $PKG_BUILD/lib/.libs/libgnutls.so* $INSTALL/usr/lib cp -P $PKG_BUILD/lib/.libs/libgnutlsxx.so* $INSTALL/usr/lib rm -rf $INSTALL/usr/lib/libgnutlsxx.so*T - cp -P $PKG_BUILD/libextra/.libs/libgnutls-extra.so* $INSTALL/usr/lib - rm -rf $INSTALL/usr/lib/libgnutls-extra.so*T - cp -P $PKG_BUILD/libextra/.libs/libgnutls-openssl.so* $INSTALL/usr/lib + cp -P $PKG_BUILD/extra/.libs/libgnutls-openssl.so* $INSTALL/usr/lib rm -rf $INSTALL/usr/lib/libgnutls-openssl.so*T diff --git a/packages/security/gnutls/meta b/packages/security/gnutls/meta index 6d34bf55cc..97734a5e61 100644 --- a/packages/security/gnutls/meta +++ b/packages/security/gnutls/meta @@ -19,14 +19,14 @@ ################################################################################ PKG_NAME="gnutls" -PKG_VERSION="2.10.5" +PKG_VERSION="3.0.7" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="LGPL" PKG_SITE="http://www.gnutls.org/" -PKG_URL="http://ftp.gnu.org/gnu/gnutls/$PKG_NAME-$PKG_VERSION.tar.bz2" -PKG_DEPENDS="zlib lzo libgcrypt" -PKG_BUILD_DEPENDS="toolchain zlib lzo libgcrypt" +PKG_URL="http://ftp.gnu.org/gnu/gnutls/$PKG_NAME-$PKG_VERSION.tar.xz" +PKG_DEPENDS="cryptodev-linux zlib nettle" +PKG_BUILD_DEPENDS="toolchain cryptodev-linux zlib nettle" PKG_PRIORITY="optional" PKG_SECTION="security" PKG_SHORTDESC="gnutls: Development Library for TLS applications" From 82ec6a823d67f7c6566eaef6640fe6ec94fc6d61 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 8 Nov 2011 18:11:29 +0100 Subject: [PATCH 38/89] libssh: update to libssh-0.5.2 Signed-off-by: Stephan Raue --- packages/network/libssh/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/network/libssh/meta b/packages/network/libssh/meta index da304252f4..193cab4347 100644 --- a/packages/network/libssh/meta +++ b/packages/network/libssh/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="libssh" -PKG_VERSION="0.5.0" +PKG_VERSION="0.5.2" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="OpenSource" From 6af8ab8530458240f42633d9ccdf59f0fea121fb Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 8 Nov 2011 18:11:56 +0100 Subject: [PATCH 39/89] libmicrohttpd: update to libmicrohttpd-0.9.16 Signed-off-by: Stephan Raue --- packages/web/libmicrohttpd/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/web/libmicrohttpd/meta b/packages/web/libmicrohttpd/meta index 1c98852e19..0357f5bae5 100644 --- a/packages/web/libmicrohttpd/meta +++ b/packages/web/libmicrohttpd/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="libmicrohttpd" -PKG_VERSION="0.9.9" +PKG_VERSION="0.9.16" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From 1c4dd5181798f8599855bae753e486bb4204f41c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 8 Nov 2011 18:13:09 +0100 Subject: [PATCH 40/89] makemkv: update to makemkv-1.6.16 Signed-off-by: Stephan Raue --- packages/addons/multimedia/makemkv/changelog.txt | 3 +++ packages/addons/multimedia/makemkv/meta | 4 ++-- ...-0.1.patch => makemkv-1.6.16-000-crosscompiling-0.1.patch} | 0 3 files changed, 5 insertions(+), 2 deletions(-) rename packages/addons/multimedia/makemkv/patches.upstream/{makemkv-1.6.15-000-crosscompiling-0.1.patch => makemkv-1.6.16-000-crosscompiling-0.1.patch} (100%) diff --git a/packages/addons/multimedia/makemkv/changelog.txt b/packages/addons/multimedia/makemkv/changelog.txt index d75afa10ac..585dfdacb5 100644 --- a/packages/addons/multimedia/makemkv/changelog.txt +++ b/packages/addons/multimedia/makemkv/changelog.txt @@ -1,3 +1,6 @@ +1.90.1 +- update to makemkv-1.6.16 + 1.90.0 - prepare for OpenELEC-1.90 release diff --git a/packages/addons/multimedia/makemkv/meta b/packages/addons/multimedia/makemkv/meta index 0b9d84f234..46b09433d2 100644 --- a/packages/addons/multimedia/makemkv/meta +++ b/packages/addons/multimedia/makemkv/meta @@ -19,8 +19,8 @@ ################################################################################ PKG_NAME="makemkv" -PKG_VERSION="1.6.15" -PKG_REV="0" +PKG_VERSION="1.6.16" +PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="OSS" PKG_SITE="http://www.makemkv.com/forum2/viewforum.php?f=3" diff --git a/packages/addons/multimedia/makemkv/patches.upstream/makemkv-1.6.15-000-crosscompiling-0.1.patch b/packages/addons/multimedia/makemkv/patches.upstream/makemkv-1.6.16-000-crosscompiling-0.1.patch similarity index 100% rename from packages/addons/multimedia/makemkv/patches.upstream/makemkv-1.6.15-000-crosscompiling-0.1.patch rename to packages/addons/multimedia/makemkv/patches.upstream/makemkv-1.6.16-000-crosscompiling-0.1.patch From 9169369bc25b458fe39e547d5d6fc4a49778bff2 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 4 Nov 2011 21:49:17 +0100 Subject: [PATCH 41/89] udev: add patch to change blkid path's Signed-off-by: Stephan Raue --- .../patches/udev-173-003-blkid_path-0.1.patch | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 packages/sysutils/udev/patches/udev-173-003-blkid_path-0.1.patch diff --git a/packages/sysutils/udev/patches/udev-173-003-blkid_path-0.1.patch b/packages/sysutils/udev/patches/udev-173-003-blkid_path-0.1.patch new file mode 100644 index 0000000000..98372ad256 --- /dev/null +++ b/packages/sysutils/udev/patches/udev-173-003-blkid_path-0.1.patch @@ -0,0 +1,19 @@ +diff -Naur udev-173/rules/rules.d/60-persistent-storage.rules udev-173.patch/rules/rules.d/60-persistent-storage.rules +--- udev-173/rules/rules.d/60-persistent-storage.rules 2011-07-18 20:00:25.000000000 +0200 ++++ udev-173.patch/rules/rules.d/60-persistent-storage.rules 2011-11-04 20:42:24.734426182 +0100 +@@ -66,12 +66,12 @@ + ENV{DEVTYPE}=="disk", KERNEL!="sd*|sr*", ATTR{removable}=="1", GOTO="persistent_storage_end" + + # probe filesystem metadata of optical drives which have a media inserted +-KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="?*", IMPORT{program}="/sbin/blkid -o udev -p -u noraid -O $env{ID_CDROM_MEDIA_SESSION_LAST_OFFSET} $tempnode" ++KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="?*", IMPORT{program}="/usr/bin/blkid -o udev -p -u noraid -O $env{ID_CDROM_MEDIA_SESSION_LAST_OFFSET} $tempnode" + # single-session CDs do not have ID_CDROM_MEDIA_SESSION_LAST_OFFSET +-KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="", IMPORT{program}="/sbin/blkid -o udev -p -u noraid $tempnode" ++KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="", IMPORT{program}="/usr/bin/blkid -o udev -p -u noraid $tempnode" + + # probe filesystem metadata of disks +-KERNEL!="sr*", IMPORT{program}="/sbin/blkid -o udev -p $tempnode" ++KERNEL!="sr*", IMPORT{program}="/usr/bin/blkid -o udev -p $tempnode" + + # watch metadata changes by tools closing the device after writing + KERNEL!="sr*", OPTIONS+="watch" From 6eaa968a66cdc8dc299469cee06dd1755a77c27c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 8 Nov 2011 19:22:38 +0100 Subject: [PATCH 42/89] libatasmart: update to libatasmart-0.18 Signed-off-by: Stephan Raue --- packages/sysutils/libatasmart/build | 8 ++++---- packages/sysutils/libatasmart/meta | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/sysutils/libatasmart/build b/packages/sysutils/libatasmart/build index 8d9ad06f03..6b3e2df4df 100755 --- a/packages/sysutils/libatasmart/build +++ b/packages/sysutils/libatasmart/build @@ -22,9 +22,11 @@ . config/options $1 -cd $PKG_BUILD +export CC_FOR_BUILD="$HOST_CC" +export BUILD_CFLAGS="$HOST_CFLAGS" +export BUILD_LDFLAGS="$HOST_LDFLAGS" -mkdir -p m4 && do_autoreconf +cd $PKG_BUILD ./configure --host=$TARGET_NAME \ --build=$HOST_NAME \ --prefix=/usr \ @@ -34,7 +36,5 @@ mkdir -p m4 && do_autoreconf --disable-static \ --enable-shared \ -make CC="$HOST_CC" CFLAGS="$HOST_CFLAGS" LDFLAGS="$HOST_LDFLAGS" strpool make - $MAKEINSTALL diff --git a/packages/sysutils/libatasmart/meta b/packages/sysutils/libatasmart/meta index ea0a5bbec5..79acb669a6 100644 --- a/packages/sysutils/libatasmart/meta +++ b/packages/sysutils/libatasmart/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="libatasmart" -PKG_VERSION="0.17" +PKG_VERSION="0.18" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From 9f90b403d336e216f8a087127db90a6ba5ee2262 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 8 Nov 2011 19:23:54 +0100 Subject: [PATCH 43/89] sqlite: update to sqlite-autoconf-3070900 Signed-off-by: Stephan Raue --- packages/databases/sqlite/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/databases/sqlite/meta b/packages/databases/sqlite/meta index 077a8a3318..7088517ad1 100644 --- a/packages/databases/sqlite/meta +++ b/packages/databases/sqlite/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="sqlite" -PKG_VERSION="autoconf-3070800" +PKG_VERSION="autoconf-3070900" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="PublicDomain" From d559275a6305b5ab18aca896f59370edc5e78979 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 8 Nov 2011 19:24:28 +0100 Subject: [PATCH 44/89] php: update to php-5.3.8 Signed-off-by: Stephan Raue --- packages/lang/php/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/lang/php/meta b/packages/lang/php/meta index 8c8adf0eb5..d891b508ae 100644 --- a/packages/lang/php/meta +++ b/packages/lang/php/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="php" -PKG_VERSION="5.3.6" +PKG_VERSION="5.3.8" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="OpenSource" From fc5e7061c66c5eb87778845297fbdb81292c8100 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 8 Nov 2011 20:29:34 +0100 Subject: [PATCH 45/89] linux: driver for DVB-T AVerMedia AverTV Hybrid Volar HX (A827) --- config/functions | 15 ++++ config/path | 1 + packages/linux-drivers/aver_h826d/build | 29 ++++++++ packages/linux-drivers/aver_h826d/install | 28 ++++++++ .../kdep_2.6.30/OBJ-4GREG/_prebuild.o_shipped | Bin 0 -> 720948 bytes .../OBJ-4GREG/aver/osdep_dvb.o_shipped | Bin 0 -> 7292 bytes .../kdep_2.6.30/OBJ-x64/_prebuild.o_shipped | Bin 0 -> 963808 bytes .../OBJ-x64/aver/osdep_dvb.o_shipped | Bin 0 -> 10224 bytes packages/linux-drivers/aver_h826d/meta | 36 ++++++++++ .../aver_h826d-0.10-100-latest_kernel.patch | 65 ++++++++++++++++++ ...ver_h826d-0.10-100-latest_kernel.patch.txt | 1 + packages/linux-drivers/aver_h826d/unpack | 52 ++++++++++++++ projects/Fusion/options | 2 +- projects/Generic/options | 2 +- projects/Generic_OSS/options | 2 +- projects/ION/options | 2 +- projects/Intel/options | 2 +- projects/Ultra/options | 2 +- 18 files changed, 233 insertions(+), 6 deletions(-) mode change 100644 => 100755 config/functions mode change 100644 => 100755 config/path create mode 100755 packages/linux-drivers/aver_h826d/build create mode 100755 packages/linux-drivers/aver_h826d/install create mode 100644 packages/linux-drivers/aver_h826d/kdep_2.6.30/OBJ-4GREG/_prebuild.o_shipped create mode 100644 packages/linux-drivers/aver_h826d/kdep_2.6.30/OBJ-4GREG/aver/osdep_dvb.o_shipped create mode 100644 packages/linux-drivers/aver_h826d/kdep_2.6.30/OBJ-x64/_prebuild.o_shipped create mode 100644 packages/linux-drivers/aver_h826d/kdep_2.6.30/OBJ-x64/aver/osdep_dvb.o_shipped create mode 100644 packages/linux-drivers/aver_h826d/meta create mode 100644 packages/linux-drivers/aver_h826d/patches-manual/aver_h826d-0.10-100-latest_kernel.patch create mode 100644 packages/linux-drivers/aver_h826d/patches-manual/aver_h826d-0.10-100-latest_kernel.patch.txt create mode 100755 packages/linux-drivers/aver_h826d/unpack diff --git a/config/functions b/config/functions old mode 100644 new mode 100755 index 2fe22d986d..65c788030b --- a/config/functions +++ b/config/functions @@ -15,6 +15,7 @@ setup_toolchain() { export NM=$TARGET_NM export RANLIB=$TARGET_RANLIB export OBJCOPY=$TARGET_OBJCOPY + export OBJDUMP=$TARGET_OBJDUMP export STRIP=$TARGET_STRIP export CPPFLAGS="$TARGET_CPPFLAGS" export CFLAGS="$TARGET_CFLAGS" @@ -174,3 +175,17 @@ strip_gold() { LDFLAGS=`echo $LDFLAGS | sed -e "s|-fuse-ld=gold||g"` } +fix_module_depends() { + # modify .modinfo section in kernel module to depends on other required modules + local MODULE="$1" + local DEPENDS="$2" + cp ${MODULE} ${MODULE}_orig + $OBJDUMP -s -j .modinfo ${MODULE}_orig | awk 'BEGIN{v=0;} /Contents/ {v=1; next;} {if (v==1) print $0;}' >new.modinfo1 + cat new.modinfo1 | cut -c7-41 | awk '{printf($0);}' | sed 's/ //g;s/../\\\x&/g;' >new.modinfo2 + /bin/echo -ne `cat new.modinfo2` >new.modinfo3 + cat new.modinfo3 | tr '\000' '\n' | awk '/^depends=/ {next;} {print $0;}' | tr '\n' '\000' >new.modinfo4 + /bin/echo -ne "depends=$DEPENDS\0" >>new.modinfo4 + $OBJCOPY --remove-section=.modinfo --add-section=.modinfo=new.modinfo4 --set-section-flags .modinfo=contents,alloc,load,readonly,data ${MODULE}_orig ${MODULE} + rm new.modinfo* +} + diff --git a/config/path b/config/path old mode 100644 new mode 100755 index f60f280fa5..d4b2024426 --- a/config/path +++ b/config/path @@ -82,6 +82,7 @@ TARGET_AR=${TARGET_PREFIX}ar TARGET_NM=${TARGET_PREFIX}nm TARGET_RANLIB=${TARGET_PREFIX}ranlib TARGET_OBJCOPY=${TARGET_PREFIX}objcopy +TARGET_OBJDUMP=${TARGET_PREFIX}objdump TARGET_STRIP=${TARGET_PREFIX}strip . config/optimize diff --git a/packages/linux-drivers/aver_h826d/build b/packages/linux-drivers/aver_h826d/build new file mode 100755 index 0000000000..60a261766a --- /dev/null +++ b/packages/linux-drivers/aver_h826d/build @@ -0,0 +1,29 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +. config/options $1 + +cd $PKG_BUILD/installer/src + +make KERNELDIR=$(kernel_path) + +fix_module_depends "h826d.ko" "averusbh826d,videodev" diff --git a/packages/linux-drivers/aver_h826d/install b/packages/linux-drivers/aver_h826d/install new file mode 100755 index 0000000000..bdcf91d47c --- /dev/null +++ b/packages/linux-drivers/aver_h826d/install @@ -0,0 +1,28 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +. config/options $1 + +VER=`ls $BUILD/linux*/modules/lib/modules` + +mkdir -p $INSTALL/lib/modules/$VER/aver_h826d + cp $PKG_BUILD/installer/src/*.ko $INSTALL/lib/modules/$VER/aver_h826d diff --git a/packages/linux-drivers/aver_h826d/kdep_2.6.30/OBJ-4GREG/_prebuild.o_shipped b/packages/linux-drivers/aver_h826d/kdep_2.6.30/OBJ-4GREG/_prebuild.o_shipped new file mode 100644 index 0000000000000000000000000000000000000000..f167884b53c91d9005b9f8d9e49b484cbe0436f0 GIT binary patch literal 720948 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

8yWW5PLVt8q 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

WD*%R?dcTZEFxLm_2dgmQZx3aR!Yl&|NZ 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⪼|3Ui~z$EV^RGlKg#_`Kp_nJ5gUgPTdWs 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 literal 0 HcmV?d00001 diff --git a/packages/linux-drivers/aver_h826d/kdep_2.6.30/OBJ-4GREG/aver/osdep_dvb.o_shipped b/packages/linux-drivers/aver_h826d/kdep_2.6.30/OBJ-4GREG/aver/osdep_dvb.o_shipped new file mode 100644 index 0000000000000000000000000000000000000000..9c98ea81376152f428676141ef208a855d39bfab GIT binary patch literal 7292 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%0D=*jsQYVd%u%>3VaaX;=oY)CRJacc9#`V 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%0A7yc@T&r(l!;RCi=a} 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 aq(l{@X_X((JW4&pQKa!2rcyvUkLQ!N4ce+4%?m zgOp07#&1aJvvHxTNKeGAIlE)rdU5Pwu5>py;ls|)uua@e0wgMbTuktGx=9&z*l3_; zt4dC4-m7n6@KcSRnyO9UG$q0zaK{SxavzoXI{KWmDP0J})#=X@HS%Bn{>MjsSEV7} zz=Wqbc;iN_GJ7Z+r~r)nLxZX#AB>rIsvJSdzre@H7uC3~7dYAJZStQ8d*#?Wo`+Sb zJUA097+kPs6nG#WXT$@K;c;dhcF~raig@4&JVwU@EqIKOf7tvM$icnXhmQV};fu^Yl|1cPwkK!vVNFuTzwv4-Q zb@csG+GRY}72DEZg7H!DE!hvLuWP!c+u0AfHW_#obXPMLf@!>FY%AiuzpxUU?KU&Vc+@c4DycLpB6iTlpP zu%;_*b>cM%>fao@#w zEQ|X-g-2`LHvy03aoXam;IT69yA+Qn5w8wqy zW=GryQVDd%eN*sQ9rr;+K*Tv8W?$gxxDSjdkc|7T;Oc0&HvOp*4$c(9^3t{ZHV5+_ z`aW*VQwA{_!@TxhLph|UeS2+pwWMD|r&%gh#3Xd>nmCGj=AY%l zfR?}{BD=u)tP(odzJjYJd?ohHu-&-tb%xbN?s?YWh)2tBCnIu zU&2Cw)RppjY5FSlxJ##MQTjb@Z-Bn#^}_TU>h&>sy&%0+y*?_h=cl{W>tE!xDy;&G1eVI{`1BuD>Lc=c zUixS1_0RJ9$@CA^>!0NH-1GwV`mns7lm4c9eMnx0#>ixAHnVJy5+qAg>kaz1(d9SCQ8<(>v7bujTcO z^fvYSD|sE2UaMZ0$ZL6e1zxlIu3Bx&;MwNf_ACo57Tx)uvG?Tf7lLn(j`o}$?OGDA z8SRBbOHeKaYolHVRnthKtHa03B7yCL^3Uky1(A8`60^9YJFC4in^y*~c{0Ou{P(abkuOgl6Yc4V_TCZg`b2#C7_jQdmFGmFy{{#G zflo!(mEap^ezf?-31qV#-FFK1n)fv)j26As+7^L6s%~% zT4Yy!T6q?Fk=JSf;Wc9b_q2Pf2zR9EI*);OMEsgD#LJbKENcBFzI6Wf_a`!c`-ZPO z`A^pQPjT|2-k$rt1|R7R$xim4v-RwG@|yg1k5TmiN0FK5+yOkD1H7cS2+ca}k3Zay z-~O?xTqfzr>n?cbc;^{7O#dw1&Ic!0i$|e$k)-XngPVH(FnGU(P4ds-;~(~8Pr?#4 zCVhycp9jBO3R^Q{#%m`zc+mCAy*vtUiN)<$;T7g)GWr zNo4Bi89byDfTjP5#(_T$h#r?Tk0na`9It04I|P>U<&0aIqO253R2l)h!^%dA)ZjI0tTS1$Wj<6W2p zb&18@cvNkKO~Yz|4X6aMvxmn10Sc{cDk+^f{yWzvrj?+YbG*wL_@48$Co-fvUULp^ z9ozQ?{@7bO-Wr6s@uAYvjyDGHd&7RdBVCN4JlF1uUv(b*WUx3#dm}?SVJq2L8o%b; zc+DrdT}gd4a&YXtSmx&rya4BGK*K8SYj&ph6ogO58DKDv&KkGe#4iNZy^X55G2pprN^yDttZ<27dy z2a$tk%)2M^CwKp69J&7&v3cpcH2-0JW+WEat=P`PnKjMz!v2I~!_AkTV)oo?xhM!1 zH7s=gm5I661``R`J1`Wh0FXzMN9BG{NC&9mVi^YCnQhcjz+QnjgQ{<5U+;u$K>Nh*(% zbbrz}*`tz9%}ZLC^!c7qNoVFJS&MH3ZW6w_$dzM?qdSYE`v=dzJmI^xY3caCzX?04 zS~g&ZEJq%lUMcBw&O78v4~>>R*Yq&fHh0GJZxzqIHq)N)%}7kY_W7Mnj}PE|yqOIv zjz;tOYn8Q_XU{2gw#CtLTpA-A|B2gx{l}=@8S@3KIdH$It85P<7(8x}8Fc9-*5Z4y z{3WK8BtBQ#Hd6Hs7cC%Nc+;e4Z`2u%Nd{Hc;#<(58r>zVzrg5TI^J6R6;urdR{>(9 z4Q%Cu$g2z~@OA?S1P7j8kp-%$B*jvv5TNRkXm5}B*pn=JR8|>*ED-dLQG=q%C!6%F zlT@PmludfnN$OMTUb5eUG*s=PA#3rskPmcJts2jxBWv+ABy%(%N6Egvj0Py^&3-6| z2MTq5-jAV1FEVq?A(fw=LxzwbnOKYW;P72P{eA&Sm~u-|#DD3pB6wJfGWeUg@@8~w zj7-AFm1kB*W{%ozuZwOk!XQ4sE825^$94=z5pMNN`N%rqYcdOeJwtFG$&fD87{?0~ zUuObOyl~;%fsum)!+&p@0yaH;Z1G(9K4PQ>M|<~kT*nH=;b;~+6Wv>3p}dm0vXYdw zc#ME6n953=h%tFAzLVb^D7F^Wpt$C@>8tTOa^PxfQ3^lc-}D0C!3-8HRPT4;0j#@O z%^tEE|HN`aTQ)BZ!cwTyQyjXoLmG=H`=sy2nLc_ey7wn?->ErUYJ!fcfwqy4W*@kY)#A%cWXmsK2=Axr{LupKc@R@f!E59n1xNer&p9&a zP$k=nBVc}eo*|PxnIBO;QRRBRdJ*bFL(N$^)fNo1ei4cKkx?1VQ1&N8E;It6F4~_g zxfFB3kr!QZsA`h3q=t(kYkDpbVAfZS@8eJKh+-}Jn@H8tq+6E!gzmqO^Uu)-6N@RI z0!|T3rBHf0M#R)#?^d}SPjg}+^3^dtBB~z`QC)M8P#Mfk`tYS*|7UtNZybf`Vt6AK z*)5To{zH)~uNZ`HE6Cp4D)2|@(RHZ(6qz6*zu?wxnNiatSB-+(%KN6xp<3XGpnNXl zLNl*fEptcNd!jw(O)3w4XHseCo8XZ2@>oSSSG94}KJZCgmaXLAl7$l|eCM3#8|C3o zQR<49RFL};Lh>nTU0T&G`XMGAwB|j9@yV=H^Dt3e%3{r;av>c}zoAOE?;J?3yQe7H zQ-n2jNU}OUcT~1Yvfm4U_&%$V;v$Z8V#SW(@Ss<6i?7&!5kCqpY_Q?NyXQS8^v8$< zVmsVLKg7H)joo`aU*xsWC zpal701)-3ks?#)JHNxeAXAwr^>|V+E9BnN+gc+0VZEOS(=uHm7j@6nGRqZ(?FrHYl z=(L$xEOKk~;L%FIUDV5I*PMP^Cb(ze!N&nG{96~Dh0OSV5l7{8lpmz?Z&Ue|hVK$q zvsN4{_GuJqic((0S38N5Ptu_k>}MMn1$X9Ck=Yo1C_F0R0|@t5j8W*J_#x;y6zwV^ zD#sZ7#CiZt4i24^BvRT=&TH#0>?O_3foG+GiC+5#4{!!$e|Fy2t+v2(=%w{Ypu0G*nON&O0@i4{W4KY=$5Rl0X^z1q_0P^djoo86 zW&F~Qpj;x*C5O>AqX`lW-p}P=(Z>^_&kvDB?Z4F8F9>qIS3}8a<1m;rIpC6qG#ap% zeH>Yv-pkhd@Ri=;M~m7@67&36)7+tJt zBNVZ`+&<*CTCP-65=w?lUl}%r=v&^O^{=CRJF52 zdr?#Ha1hs2K`lAfKk*Ff&PSA90@-pBSsVom=md9B7MhgsA6pvjeOJ`RXiu>gIVK6q zcMxO6UIQ@z4_d8pCGb|k$dwnABT;LLuEak{;>ApKi}u)rg-b=VR7p*-&8;M=L@uI{ znZ8$1^2|KkTd~hewPT7O9Ux=r9vCY&5s5g%YCd|K9h#?73=Dq@U%V<3rsjGIR7QV0mDl9&JKmK^&|=LV@x84b_kq-(+mideZ;F z7iIS$KVGyl`=0KU-`Kj==cE^%1IWR@C*hI9zk87p-}mbLSQo_3x#)iN{XsnFzh(Rj ztLd#kzpbFSUW*r$Y^*QX&+u8vz!v;_0sl685}&Vt7yOaq_QES|v;BEQVwqQ3XCKrg zkAu=yOwK#aE#*?o)m1EKN`Qfx#=7%o_!e1!Mj*e~xP$jMc*l-3m^p8e+ne(7c#g+k zxySa6NchI_coD^+VAI^8wr?of$}Tz5+@(lN%pKZabF;F|ai3i-*~30~!dE&m8S>e0 zS9UBsa5<*OJno1h8d&tNr}(^;*q0A%@xrQsXQ~o*!kZ2XU)|SZ@3*(u2Rq(69v80c z`@r@MOZd(qjE|E-n&y_-zOoz`t=JQoSc$pVGw+KJnkZgIK?ff|UzybI#3qK%;)*?zpbl4E+1XO!nCHxBlFBElRrFt5W?r}kiD?sgo-j1Dw)w^%M?HkF0 zm0h;49IL~rfD7@w?Vafp@XN^4N^XFvEZ=ahNA|FA&abH+7cK8-)+3F0*q@g2=`D&b zv+~C6>N|rCf?l)V2Vxxqy_VsD%C>NYgg)cc7i&UA7|8TjSP-35@?N@D<$obN>{jeX z$yz4ceEIq{bat-DS|Ue`Ie0l#y{s6TsUvd=DsKcbF=o-#BzCf_;VR*b<{EfYKXNUA1CZkbxV4S)GxYO(mQ z%C8=NnEmXjN>!3wlErW06HVyJ#cTxG|AD`N5x@5H1O7`bKBRu&mn6xz5@wQLrTSO0 zW>jgi=8QM|2~O-=i%S@ zL&=(|qGZkajmeq|yvdpi@%tkDzPLJB^QpnfnhD4=5&tgvk7UiImnUl`btG#h6Kv@Y_HI};?TCp*OvZB!#8eP8vJ5*?;vH^|G$y;5l7)A1a zTFG5ntyp_DD{szKWR6zuL@N)ONyA z!BJkR=!yeb+lOf;eI;wr{8Q-{UbkBBwI8qO;Q*6-l7Ss+`gr&HE6ywp*LxG!SJWA< ziD$rmSaREc6+A0-(VO_GIJJs+i%ik1SyVda)*X3YgEum(V)W@MDb-kEn5B%MX^XO} z*ndX26dbH;Vfe>8ehZ!9znX>Gt*4B$?mQbqY_;54LR$cJ6qj71Rg@V-4WhOcxkqKJNBQx?=9IMJaBxVvcqpZQacPg zc;1c!_>Mio1IPO-*ZP}EEVf#m)9TQqwDvGs1I~UbixFa+?5Nx#dvVqy-!8HDbbN67 zzFkOe?>IQ9@*Un=|I-StA6EQ_C^wm5YFB_y9kzb-eby7dx?-}(u7XK7TCCV=%zZBc z=s07ibb*KYnJWHhd$rwRcX|{4in?g;`_b2+!kxkzM@M&-MsaX_@l6U;f5oL7F7F-D zwPpO_$6joYjMR{IXi|zu`_Y~a9Op~*{G&*I8Cr9%6QurJFd0n}aybbN1l#G&YdB>qmda$1RWe=Ku}GOYIi|~+b?403rB&!|R zr*V;hwRj6Z0D#fEK}%$jrghx1vI1#Y`?Tn9@8FZ!S1JNzIdbpg%-@`Dmprh)&C+_> z1;~i+m#h3$GzmZ+PS02GiO&x8PJ99U{?4aS(8W5+y_GoLSdev$lt$G2kgn^A=8e=< z_@i*4iguOBj7sy)TCpUq2l1zQxo_4kxBzc}i#PR3=Ppt2SIGMSYtcRhcQM`zP=K_1 z4*p(UF;1jlV9xkN2z3yEb6kY=4TOIrfR2&Gpjz=4Mw2W=8W(HQpkW}VMB{q^EPW!1 zDf_(RTA)2EV3-e`k*KMQ?zgPQ@1t~d|1qKOCKl6NYS+w3OrMiE1LLQ1gyt~y8#;9{ z!A|^yf3b*;!J;JV6DAFoM%l9yQp4V+?qB$19m6d&fo7OJkA1>ftBoF!h_A& z1N0!;RRZYMgvpgr!oy6Fi(JMf-3z}$NJ^m2sVeiBo)>)!HKIvCbsYW(x)j}}=>q}$ zw;iANon}z#SN-(&0c6LHcIZU(H#7wo{QPG7ahy-qq93pouqy}kx+7sYRHN?&U`A{+ zkB*&ZIt@4akBg_#eY*@icZ~*?S&uQ@vGvI&M2V+ z*5bv4aMi7#jB2Zq@n{S*pH2K^DZbj%=dj(6FrgeO9P0)|>EsbqjOi&A$|MEceekQm zC{wp*3TqeqroS#^SM7?$sOga^U*3E(w)0fYwW7DzgxGSb=2rE%oe!yXukXxKtMNs= zRv}`h^501$hzFjDUZCVBN`llLp|9N62wS?Y8e`?SX+B zjsJyEl{jH&p9?x-{L^0KU~7Pqo%D@|Ck$*2KG+(3ur>H#Yw*F=0PmQj54Hv$Yz;ox8ho%d;E+Pn2U`P- z=Sd%I4L;Z!eAW2p#Xr~@e6Th6{1?CzHJJ2iTLbzhz={r7jadvDLg7iDVEfrV zCXGHiFc89_Q%!T^RU^s)DJyA7HmB8oEE;U}2*uCR3wTLhD_M0pw-vWVL+mET8X$f9 zgRyKl=9+&`-xkrB;kMQ+aWHy>zEyn8zV&PAkiPvVtsR&p7(Z=_`uFq=)(+TLv?Yr6 z6=m`Gka7EneREqn1XHW!3^dI6~dx#i`paHg%+(u6aiIUWb*ifDaY?FG^LxL7YrLtAM2Ak!j3sDPC!ghy$I z5v_owElU62@7jBx$IPUyud6@*=JRRioPG9V?X}llYwfkyUK?X8sf8D)s0IF}4sv^I%9#s~ii_(I>7e&EDl3WJMP!wU-rMMbJ+Np!{)Zh@B5vTxSwtz| zCL8mM$V>T`UzGEnKIc6x)=!S;e~3b#U-T87gaE5cy?k_fp_5Tw+-B(J;wLfY7pQr%IQZ(yvY%~t#=U@Uih-u&$PsUTC$A15Dga0__ zKh~mp{-KFF|B(w*oyrBLer)m|Tl`0w8FYq}|JdO_&hQ^+`j4~pBO_}D^?`qkCyoS0)+eBz7pRBkWxXrT#%{(oyF=+(r;mrTyePa$4bm1YAA3?gyUr_zV zUO1s$P}B8H*NFTDqq~m!$h({S^B2^@aSq92RHizXP<{=0S}<6SNzAFU)H3WP>KSTy z&q1hX$tOO3aQ=ci&NWkxB?9G4i~SGmp0LmMVtzUCU{n3ekElm_@g)x*0sK}W5c#eV z);YxVd+c5H)YGgF0OeSpSm$mOd>cGC%gNMyyg17j^L?GOoNUj>x3hdn$vgR-|9zVK z1q%rr-#u)958L0v_V?)a5uj^NELYmTyC~egyGXU~3fuMTcNc}*cZJ{j-=}%Y^sVWm zaKL6eumcM6`~l(FH#_(~O>59wnGrd?^^>=BN@iZPa4@#@ysr1hyI}b4vNts0kgL*h z!sc`9485Smx{(F0fRS?OF*y<2n&6?44I^>BwYVPmSH<6sHjOBQGathd`u1{xNbd`J z@SF1;xU$dLnr@EaxThnXM8|>)pny4HvN9(SM=>m*P+;=x;-DA5*pIKP>rN|+seA8> zfNtcyLjf2GpXc^3@cEl>YCcM$d*h`zGhjMa+!$Q{I6K_ASSoC_-#Xkn-hL};on^mO zYsD1$JH2`7$a$q+Ij*F>0sI6da~H^~SI!}Y(|aYIZk{?_*>3{$aF|yBb9Nf6Tp?B8jA zn!ZohN7c%VFyZ`;N*6e*BRT65^}g_0Nf`kcyHFw$?YRNXbmoc=GQFNKO1gCq-|^_> zqrs*#C+c#b9XSL1U=3m=z!oFGh=<-k&3Dy>(%Vu1Mpf;)EZl-~h zOb4ONedz7NaoAnSS<@K>nD;HNKpHKkba31&stgn+U!VxAv+L477G#;Pf=`vDd5g@;;&)+x3A92wyF9h>NaP1nnd~!ng=A$?V zvC~LVUbp}+us`FKlDt6QZ;T(`sZkXE$$zH?p^odT@09TBw1cwO8he>p&$+9)2w{A@ zT7eN!GMT_Xcylh5Zz=#h!fW7IHN$8!RWj%s6ZHDgh%ZmRQvUxX+SA7dg7Ip-_?&-^ z{sikMb>k?cy;?dA*=2nMcp-`y%6|b@|Mzn}W`gt+N43rUQ+i&s&WgL$4UWy_DmS#M z9h>5ok2SqE*QtCQ-D`8LDz4>X`c?c!A-gfv(~l7UY&z{+()T4;ofWOB`MH`6t5IXV z0c0g$){}CRj2dtGtilz-|InYWDfbJDVN^;XIu}^#>MlMzPstD?^bF_>32}Q>Loa@- zgm=lxH=5YYejncEu4<4n>~GB3EUMKs_g`x;Q7F*YoGRL#;9J2u6go zI&9^nci{e=pK%_g7H`x?Djp(PVOpvFO-s19eO&G!I{U$@`1m!}C>;H5*)aEI{MY+7R)d&r_pQlx zRKai_y>AzN2=}J0*pzVFKaYz+HUR$oBDM~lAQJz6ZSiK_KQ$X0TE$TTd1B~0mf2}t zo^qEn05~!9HiJ|ms0E>=-FtKRBtQ<>*WeLLt!MXk%mg*Dj7l>_SNgaO*o84V1B;}n zRO2pZji|zu)pYC4zcP56H_4^U!nE77R}B&PcDN@qLZ+qxf(wE`&{KLX@9mh?ya~$m zq0O5*?FB7L*fT1%KQ)#8nzWluzYbUscktPKl7a~*5O(lKCIo67jwOMy)KDnNc2=%cN(=w7vW_G4)L2EsWQ9c7#qZg2h%egq%p+ltrWY9!fbEgf$ z0eB25>3TDY`0VSdip%wUVsyTE*Y8Hm*@~JW55kpG@2ph0FAv=XgW&t0Abix|itp3) zRw@OMo-iN*H}7SmA*B+o&cdD1; z!IQQZ-_kjXKi7DxM2~UC+j=p6QM;NBnqAZhyoS~$96Yy8==4QmMQSCRbe@ggw?p1i zt}uiUjmTx1W>TdOL1@Jn5wG3)j)&^X^HU%DGHeSR8(2TdwU>Yfc~k|(YxFrME^@mF zk;li2*v3r&XC4o?2F^PaG4`@|(X12nu+urr|XyzCobRwq)qAT)oCjL|7 zrSvm&t`@~)u_nDW75Kd#y1kkzJwxuR%xH?vRti-s`FQA@|5Nxb*DwNjuk9TN_k4v=HukEaKYi]eQIJX1as8*(?%2EcAPR&Em;zqP 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 literal 0 HcmV?d00001 diff --git a/packages/linux-drivers/aver_h826d/kdep_2.6.30/OBJ-x64/aver/osdep_dvb.o_shipped b/packages/linux-drivers/aver_h826d/kdep_2.6.30/OBJ-x64/aver/osdep_dvb.o_shipped new file mode 100644 index 0000000000000000000000000000000000000000..38ab6ef00846ad74400d1d02fab561952678311e GIT binary patch literal 10224 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 +@@ -435 +434 @@ +- init_MUTEX(tmp); ++ sema_init(tmp, 1); +@@ -439 +438 @@ +- init_MUTEX_LOCKED(tmp); ++ sema_init(tmp, 0); +@@ -1069,0 +1069 @@ ++static DEFINE_MUTEX(dvbdev_mutex); +@@ -1072 +1072 @@ +- lock_kernel(); ++ mutex_lock(&dvbdev_mutex); +@@ -1077 +1077 @@ +- unlock_kernel(); ++ mutex_unlock(&dvbdev_mutex); +diff -Nr -u0 original/installer/src/aver/osdep_dvb.c modified/installer/src/aver/osdep_dvb.c +--- original/installer/src/aver/osdep_dvb.c 2009-11-13 11:54:57.000000000 +0100 ++++ modified/installer/src/aver/osdep_dvb.c 2011-08-28 20:19:36.000000000 +0200 +@@ -79 +78,0 @@ +-#include +@@ -233 +232 @@ +- init_MUTEX(&p->feedlock); ++ sema_init(&p->feedlock, 1); +diff -Nr -u0 original/installer/src/aver/osdep_th2.c modified/installer/src/aver/osdep_th2.c +--- original/installer/src/aver/osdep_th2.c 2009-11-13 11:54:57.000000000 +0100 ++++ modified/installer/src/aver/osdep_th2.c 2011-08-28 20:20:00.000000000 +0200 +@@ -78 +77,0 @@ +-#include +@@ -80,0 +80 @@ ++#include "osdep.h" +@@ -90 +90 @@ +- lock_kernel(); ++ SysLockKernel(); +@@ -100 +100 @@ +- unlock_kernel(); ++ SysUnlockKernel(); +diff -Nr -u0 original/installer/src/aver/osdep_v4l2.c modified/installer/src/aver/osdep_v4l2.c +--- original/installer/src/aver/osdep_v4l2.c 2009-11-13 11:54:58.000000000 +0100 ++++ modified/installer/src/aver/osdep_v4l2.c 2011-08-28 20:20:19.000000000 +0200 +@@ -75,0 +76,2 @@ ++#define VFL_TYPE_VTX 3 ++ +@@ -84 +85,0 @@ +-#include diff --git a/packages/linux-drivers/aver_h826d/patches-manual/aver_h826d-0.10-100-latest_kernel.patch.txt b/packages/linux-drivers/aver_h826d/patches-manual/aver_h826d-0.10-100-latest_kernel.patch.txt new file mode 100644 index 0000000000..181f84035f --- /dev/null +++ b/packages/linux-drivers/aver_h826d/patches-manual/aver_h826d-0.10-100-latest_kernel.patch.txt @@ -0,0 +1 @@ +http://linuxtv.org/wiki/index.php/AVerMedia_AverTV_Hybrid_Volar_HX_(A827) \ No newline at end of file diff --git a/packages/linux-drivers/aver_h826d/unpack b/packages/linux-drivers/aver_h826d/unpack new file mode 100755 index 0000000000..de62af18dc --- /dev/null +++ b/packages/linux-drivers/aver_h826d/unpack @@ -0,0 +1,52 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +. config/options $1 + +ZIP_PKG="`echo $PKG_URL | sed 's%.*/\(.*\)$%\1%'`" + +mkdir -p $BUILD/${PKG_NAME}-${PKG_VERSION} + +unzip $SOURCES/$1/$ZIP_PKG -d $BUILD/${PKG_NAME}-${PKG_VERSION} >/dev/null 2>&1 + +tail -n +115 $BUILD/${PKG_NAME}-${PKG_VERSION}/H826D_Installer_*/AVERMEDIA-Linux-*-H826D-0.10-beta.sh | bzip2 -d | tar xf - -C $BUILD/${PKG_NAME}-${PKG_VERSION} + +# this code is copied from scripts/unpack +PKG_BUILD=`ls -d $BUILD/${PKG_NAME}[-_.]${PKG_VERSION}` +for i in $PKG_DIR/patches-manual/$PKG_NAME-$PKG_VERSION*.patch ; do + if [ -f "$i" ]; then + PATCH=`basename $i` + PT=`echo $PATCH | sed 's/.*\.\(.*\)$/\1/'` + if [ "$PT" != "patch" -a "$PT" != "$TARGET_ARCH" ]; then + printf "%${INDENT}c SKIP PATCH: $i\n" >&$SILENT_OUT + continue; + else + printf "%${INDENT}c APPLY PATCH: $i\n" >&$SILENT_OUT + cat $i | patch -p1 -d `echo "$PKG_BUILD" | cut -f1 -d\ ` -p1 >&$VERBOSE_OUT + fi + fi +done + +# prebuild objects were hex edited for kernel 3.1 +[ "$TARGET_ARCH" = "x86_64" ] && KVSTR=x64 +[ "$TARGET_ARCH" = "i386" ] && KVSTR=4GREG +cp -rf $PKG_DIR/kdep_2.6.30/OBJ-$KVSTR/* $BUILD/${PKG_NAME}-${PKG_VERSION}/installer/src diff --git a/projects/Fusion/options b/projects/Fusion/options index 866fd589b8..9f50fdb787 100755 --- a/projects/Fusion/options +++ b/projects/Fusion/options @@ -150,7 +150,7 @@ # asix-ax887xx: Asix AX887xx USB LAN Driver # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="asix-ax887xx AF9035" - ADDITIONAL_DRIVERS="asix-ax887xx AF9035 a867_drv" + ADDITIONAL_DRIVERS="asix-ax887xx AF9035 a867_drv aver_h826d" # build with network support (yes / no) NETWORK="yes" diff --git a/projects/Generic/options b/projects/Generic/options index 98d89832a1..d1bfa313be 100755 --- a/projects/Generic/options +++ b/projects/Generic/options @@ -150,7 +150,7 @@ # asix-ax887xx: Asix AX887xx USB LAN Driver # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="asix-ax887xx AF9035" - ADDITIONAL_DRIVERS="asix-ax887xx AF9035 a867_drv" + ADDITIONAL_DRIVERS="asix-ax887xx AF9035 a867_drv aver_h826d" # build with network support (yes / no) NETWORK="yes" diff --git a/projects/Generic_OSS/options b/projects/Generic_OSS/options index 9903a82c34..57887cf8ff 100755 --- a/projects/Generic_OSS/options +++ b/projects/Generic_OSS/options @@ -150,7 +150,7 @@ # asix-ax887xx: Asix AX887xx USB LAN Driver # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="asix-ax887xx AF9035" - ADDITIONAL_DRIVERS="asix-ax887xx AF9035 a867_drv" + ADDITIONAL_DRIVERS="asix-ax887xx AF9035 a867_drv aver_h826d" # build with network support (yes / no) NETWORK="yes" diff --git a/projects/ION/options b/projects/ION/options index 9162623451..737a6d1b8c 100755 --- a/projects/ION/options +++ b/projects/ION/options @@ -150,7 +150,7 @@ # asix-ax887xx: Asix AX887xx USB LAN Driver # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="asix-ax887xx AF9035" - ADDITIONAL_DRIVERS="asix-ax887xx AF9035 a867_drv" + ADDITIONAL_DRIVERS="asix-ax887xx AF9035 a867_drv aver_h826d" # build with network support (yes / no) NETWORK="yes" diff --git a/projects/Intel/options b/projects/Intel/options index f6c24db492..329a066a5a 100755 --- a/projects/Intel/options +++ b/projects/Intel/options @@ -150,7 +150,7 @@ # asix-ax887xx: Asix AX887xx USB LAN Driver # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="asix-ax887xx AF9035" - ADDITIONAL_DRIVERS="asix-ax887xx AF9035 a867_drv" + ADDITIONAL_DRIVERS="asix-ax887xx AF9035 a867_drv aver_h826d" # build with network support (yes / no) NETWORK="yes" diff --git a/projects/Ultra/options b/projects/Ultra/options index 24f4c4467b..d9f110b8f9 100755 --- a/projects/Ultra/options +++ b/projects/Ultra/options @@ -150,7 +150,7 @@ # asix-ax887xx: Asix AX887xx USB LAN Driver # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="asix-ax887xx AF9035" - ADDITIONAL_DRIVERS="asix-ax887xx AF9035 a867_drv" + ADDITIONAL_DRIVERS="asix-ax887xx AF9035 a867_drv aver_h826d" # build with network support (yes / no) NETWORK="yes" From 6f6704c849aae44936da8d623c341c03282d4f8f Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 8 Nov 2011 20:30:38 +0100 Subject: [PATCH 46/89] linux: driver for DVB-T AVerMedia AverTV Hybrid Volar HX (A827) - fix permissions --- config/functions | 0 config/path | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 config/functions mode change 100755 => 100644 config/path diff --git a/config/functions b/config/functions old mode 100755 new mode 100644 diff --git a/config/path b/config/path old mode 100755 new mode 100644 From ba8ad0e4bc352e597df616499870c4d12014fe23 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 8 Nov 2011 20:43:47 +0100 Subject: [PATCH 47/89] remove package 'usbmuxd' Signed-off-by: Stephan Raue --- packages/devel/usbmuxd/build | 39 ------------------- packages/devel/usbmuxd/install | 32 --------------- packages/devel/usbmuxd/meta | 36 ----------------- .../patches/usbmuxd-1.0.6-version.tag.patch | 22 ----------- 4 files changed, 129 deletions(-) delete mode 100755 packages/devel/usbmuxd/build delete mode 100755 packages/devel/usbmuxd/install delete mode 100644 packages/devel/usbmuxd/meta delete mode 100644 packages/devel/usbmuxd/patches/usbmuxd-1.0.6-version.tag.patch diff --git a/packages/devel/usbmuxd/build b/packages/devel/usbmuxd/build deleted file mode 100755 index cc77ea9b1c..0000000000 --- a/packages/devel/usbmuxd/build +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh - -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -. config/options $1 - -cd $PKG_BUILD - -# Set the owner of the device node to be usbmuxd - sed -i 's/ATTR{idVendor}=="05ac"/OWNER="root", ATTR{idVendor}=="05ac"/' udev/85-usbmuxd.rules.in - sed -i 's/-U usbmux/-U root/' udev/85-usbmuxd.rules.in - -mkdir -p build && cd build - -cmake -DCMAKE_TOOLCHAIN_FILE=$CMAKE_CONF \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DLIB_SUFFIX="" \ - .. - -make -$MAKEINSTALL diff --git a/packages/devel/usbmuxd/install b/packages/devel/usbmuxd/install deleted file mode 100755 index f48e0e6084..0000000000 --- a/packages/devel/usbmuxd/install +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/sh - -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -. config/options $1 - -mkdir -p $INSTALL/usr/lib - cp -P $PKG_BUILD/build/libusbmuxd/libusbmuxd.so* $INSTALL/usr/lib - -mkdir -p $INSTALL/usr/sbin - cp -P $PKG_BUILD/build/daemon/usbmuxd $INSTALL/usr/sbin - -mkdir -p $INSTALL/usr/lib/udev/rules.d - cp -P $PKG_BUILD/build/udev/*.rules $INSTALL/usr/lib/udev/rules.d diff --git a/packages/devel/usbmuxd/meta b/packages/devel/usbmuxd/meta deleted file mode 100644 index 663b7554b0..0000000000 --- a/packages/devel/usbmuxd/meta +++ /dev/null @@ -1,36 +0,0 @@ -################################################################################ -# This file is part of OpenELEC - http://www.openelec.tv -# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) -# -# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to -# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. -# http://www.gnu.org/copyleft/gpl.html -################################################################################ - -PKG_NAME="usbmuxd" -PKG_VERSION="1.0.6" -PKG_REV="1" -PKG_ARCH="any" -PKG_LICENSE="GPL" -PKG_SITE="http://marcansoft.com/uploads/" -PKG_URL="http://marcansoft.com/uploads/usbmuxd/$PKG_NAME-$PKG_VERSION.tar.bz2" -PKG_DEPENDS="libusb" -PKG_BUILD_DEPENDS="toolchain libusb" -PKG_PRIORITY="optional" -PKG_SECTION="devel" -PKG_SHORTDESC="usbmuxd: a daemon used for communicating with Apple's iPod Touch and iPhone devices." -PKG_LONGDESC="usbmuxd is a daemon used for communicating with Apple's iPod Touch and iPhone devices. It allows multiple services on the device to be accessed simultaneously." -PKG_IS_ADDON="no" - -PKG_AUTORECONF="no" diff --git a/packages/devel/usbmuxd/patches/usbmuxd-1.0.6-version.tag.patch b/packages/devel/usbmuxd/patches/usbmuxd-1.0.6-version.tag.patch deleted file mode 100644 index c273cd3796..0000000000 --- a/packages/devel/usbmuxd/patches/usbmuxd-1.0.6-version.tag.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff -Naur usbmuxd-1.0.6/Modules/describe.sh usbmuxd-1.0.6.patch/Modules/describe.sh ---- usbmuxd-1.0.6/Modules/describe.sh 2010-09-28 03:32:44.000000000 +0200 -+++ usbmuxd-1.0.6.patch/Modules/describe.sh 2011-01-05 14:28:41.461148284 +0100 -@@ -1,17 +1,8 @@ --#!/bin/bash -+#!/bin/sh - --# Check for git and a git repo. --if head=`git rev-parse --verify HEAD 2>/dev/null`; then -- /bin/echo -n `git describe` -- -- # Are there uncommitted changes? -- git update-index --refresh --unmerged > /dev/null -- git diff-index --quiet HEAD || /bin/echo -n -dirty --else - # Check for version tag - if [ -e version.tag ]; then - /bin/echo -n `cat version.tag` - fi --fi - - echo From ae234aa3aa0b3416b055cd40fcc8fc85207edc2c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 8 Nov 2011 20:44:51 +0100 Subject: [PATCH 48/89] attr: update to attr-2.4.46 Signed-off-by: Stephan Raue --- packages/devel/attr/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/devel/attr/meta b/packages/devel/attr/meta index 8c5c6c0054..5d8ee30221 100644 --- a/packages/devel/attr/meta +++ b/packages/devel/attr/meta @@ -20,7 +20,7 @@ ################################################################################ PKG_NAME="attr" -PKG_VERSION="2.4.44" +PKG_VERSION="2.4.46" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From 018653f7bc63f9581839207c44a10686a89e0358 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 8 Nov 2011 20:45:21 +0100 Subject: [PATCH 49/89] glib: update to glib-2.31.0 Signed-off-by: Stephan Raue --- packages/devel/glib/meta | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/devel/glib/meta b/packages/devel/glib/meta index 317666404e..08d4e09aa4 100644 --- a/packages/devel/glib/meta +++ b/packages/devel/glib/meta @@ -19,12 +19,12 @@ ################################################################################ PKG_NAME="glib" -PKG_VERSION="2.30.0" +PKG_VERSION="2.31.0" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="LGPL" PKG_SITE="http://www.gtk.org/" -PKG_URL="http://ftp.gnome.org/pub/gnome/sources/glib/2.30/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_URL="http://ftp.gnome.org/pub/gnome/sources/glib/2.31/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="zlib libiconv libffi pcre" PKG_BUILD_DEPENDS="toolchain zlib libiconv libffi pcre glib-host gtk-doc" PKG_PRIORITY="optional" From 677044c54a3a40bf5bbaf6c9359b23eb0eb47fb5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 8 Nov 2011 20:45:55 +0100 Subject: [PATCH 50/89] gobject-introspection: update to gobject-introspection-1.31.0 Signed-off-by: Stephan Raue --- packages/devel/gobject-introspection/meta | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/devel/gobject-introspection/meta b/packages/devel/gobject-introspection/meta index ce31af4ce9..ea901906ac 100644 --- a/packages/devel/gobject-introspection/meta +++ b/packages/devel/gobject-introspection/meta @@ -19,12 +19,12 @@ ################################################################################ PKG_NAME="gobject-introspection" -PKG_VERSION="0.10.0" +PKG_VERSION="1.31.0" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://live.gnome.org/GObjectIntrospection" -PKG_URL="http://ftp.gnome.org/pub/gnome/sources/gobject-introspection/0.10/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_URL="http://ftp.gnome.org/pub/gnome/sources/gobject-introspection/1.31/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" PKG_BUILD_DEPENDS="toolchain" PKG_PRIORITY="optional" From 2411b282506bd10e9eae3237d24330106f7c9f5f Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 8 Nov 2011 20:47:15 +0100 Subject: [PATCH 51/89] pcre: update to pcre-8.20 Signed-off-by: Stephan Raue --- packages/devel/pcre/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/devel/pcre/meta b/packages/devel/pcre/meta index d7d704bae6..317a5dad83 100644 --- a/packages/devel/pcre/meta +++ b/packages/devel/pcre/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="pcre" -PKG_VERSION="8.13" +PKG_VERSION="8.20" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="OSS" From 913f9826e9933cc7821caefd6cd8ff518f5a6525 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 8 Nov 2011 20:47:44 +0100 Subject: [PATCH 52/89] ccache: update to ccache-3.1.6 Signed-off-by: Stephan Raue --- packages/toolchain/devel/ccache/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/toolchain/devel/ccache/meta b/packages/toolchain/devel/ccache/meta index 075430609d..715707c736 100644 --- a/packages/toolchain/devel/ccache/meta +++ b/packages/toolchain/devel/ccache/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="ccache" -PKG_VERSION="3.1.5" +PKG_VERSION="3.1.6" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" From 131611e7e9bebf332a43bb96ff965c7afb3c33be Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Tue, 8 Nov 2011 20:48:15 +0100 Subject: [PATCH 53/89] yasm: update to yasm-1.2.0 Signed-off-by: Stephan Raue --- packages/toolchain/lang/yasm/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/toolchain/lang/yasm/meta b/packages/toolchain/lang/yasm/meta index df6752e083..00d7b666b6 100644 --- a/packages/toolchain/lang/yasm/meta +++ b/packages/toolchain/lang/yasm/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="yasm" -PKG_VERSION="1.1.0" +PKG_VERSION="1.2.0" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="BSD" From 111b538caca69c4aa5aec903cf3deabc2152809a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 9 Nov 2011 00:22:44 +0100 Subject: [PATCH 54/89] bcm_sta: cosmetics Signed-off-by: Stephan Raue --- packages/linux-drivers/bcm_sta/install | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/linux-drivers/bcm_sta/install b/packages/linux-drivers/bcm_sta/install index 067e2d299a..3645075d50 100755 --- a/packages/linux-drivers/bcm_sta/install +++ b/packages/linux-drivers/bcm_sta/install @@ -25,5 +25,9 @@ VER=`ls $BUILD/linux*/modules/lib/modules` mkdir -p $INSTALL/lib/modules/$VER/bcm_sta -[ "$TARGET_ARCH" = "i386" ] && cp $PKG_BUILD/x86-32/wl.ko $INSTALL/lib/modules/$VER/bcm_sta -[ "$TARGET_ARCH" = "x86_64" ] && cp $PKG_BUILD/x86-64/wl.ko $INSTALL/lib/modules/$VER/bcm_sta + if [ "$TARGET_ARCH" = "i386" ]; then + cp $PKG_BUILD/x86-32/wl.ko $INSTALL/lib/modules/$VER/bcm_sta + fi + if [ "$TARGET_ARCH" = "x86_64" ]; then + cp $PKG_BUILD/x86-64/wl.ko $INSTALL/lib/modules/$VER/bcm_sta + fi From 235942a5863d8c38e16a869f2157483fd89057ac Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 9 Nov 2011 00:36:25 +0100 Subject: [PATCH 55/89] projects/ATV/options: install Aver h826d driver by default Signed-off-by: Stephan Raue --- projects/ATV/options | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/ATV/options b/projects/ATV/options index 4543d2cdad..8c1d0c7a81 100755 --- a/projects/ATV/options +++ b/projects/ATV/options @@ -150,7 +150,7 @@ # asix-ax887xx: Asix AX887xx USB LAN Driver # Space separated list is supported, # e.g. ADDITIONAL_DRIVERS="asix-ax887xx AF9035" - ADDITIONAL_DRIVERS="asix-ax887xx AF9035 bcm_sta a867_drv" + ADDITIONAL_DRIVERS="asix-ax887xx AF9035 bcm_sta a867_drv aver_h826d" # build with network support (yes / no) NETWORK="yes" From c8a11630091942f967077a60fd9cf0b5813b259d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 9 Nov 2011 01:51:51 +0100 Subject: [PATCH 56/89] xf86-video-nvidia: update to xf86-video-nvidia-290.06 Signed-off-by: Stephan Raue --- packages/x11/driver/xf86-video-nvidia/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/x11/driver/xf86-video-nvidia/meta b/packages/x11/driver/xf86-video-nvidia/meta index 4af43a0e46..c2783c031a 100644 --- a/packages/x11/driver/xf86-video-nvidia/meta +++ b/packages/x11/driver/xf86-video-nvidia/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="xf86-video-nvidia" -PKG_VERSION="290.03" +PKG_VERSION="290.06" PKG_REV="1" PKG_ARCH="i386 x86_64" PKG_LICENSE="nonfree" From a9c7f69d99489c2ef12cb7f5bac91f7bafdb9858 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 9 Nov 2011 02:22:30 +0100 Subject: [PATCH 57/89] transmission: update to transmission-2.42 Signed-off-by: Stephan Raue --- .../service/downloadmanager/transmission/build | 8 ++------ .../downloadmanager/transmission/changelog.txt | 3 +++ .../service/downloadmanager/transmission/meta | 4 ++-- .../patches/transmission-2.42-utp.patch | 14 ++++++++++++++ 4 files changed, 21 insertions(+), 8 deletions(-) create mode 100644 packages/addons/service/downloadmanager/transmission/patches/transmission-2.42-utp.patch diff --git a/packages/addons/service/downloadmanager/transmission/build b/packages/addons/service/downloadmanager/transmission/build index 7c3d851b73..eb85b5db5e 100755 --- a/packages/addons/service/downloadmanager/transmission/build +++ b/packages/addons/service/downloadmanager/transmission/build @@ -25,7 +25,7 @@ # transmission (svn 11666) fails to build with LTO support strip_lto -export LDFLAGS="$LDFLAGS -liconv" +export LIBS="-liconv" cd $PKG_BUILD ./configure --host=$TARGET_NAME \ @@ -35,12 +35,8 @@ cd $PKG_BUILD --localstatedir=/var \ --disable-static \ --enable-shared \ + --disable-utp \ --enable-largefile \ - --disable-gtk \ - --disable-libnotify \ - --disable-libappindicator \ - --disable-libcanberra \ - --disable-gconf2 \ --disable-nls \ --disable-cli \ --disable-mac \ diff --git a/packages/addons/service/downloadmanager/transmission/changelog.txt b/packages/addons/service/downloadmanager/transmission/changelog.txt index 85f94fefdc..ce4ab8e981 100644 --- a/packages/addons/service/downloadmanager/transmission/changelog.txt +++ b/packages/addons/service/downloadmanager/transmission/changelog.txt @@ -1,3 +1,6 @@ +1.90.1 +- update to transmission-2.42 + 1.90.0 - prepare for OpenELEC-1.90 release diff --git a/packages/addons/service/downloadmanager/transmission/meta b/packages/addons/service/downloadmanager/transmission/meta index ac8ebfc340..6b5a6b30f9 100644 --- a/packages/addons/service/downloadmanager/transmission/meta +++ b/packages/addons/service/downloadmanager/transmission/meta @@ -19,8 +19,8 @@ ################################################################################ PKG_NAME="transmission" -PKG_VERSION="2.41" -PKG_REV="0" +PKG_VERSION="2.42" +PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="OSS" PKG_SITE="http://www.transmissionbt.com/" diff --git a/packages/addons/service/downloadmanager/transmission/patches/transmission-2.42-utp.patch b/packages/addons/service/downloadmanager/transmission/patches/transmission-2.42-utp.patch new file mode 100644 index 0000000000..1978f7af18 --- /dev/null +++ b/packages/addons/service/downloadmanager/transmission/patches/transmission-2.42-utp.patch @@ -0,0 +1,14 @@ +--- a/third-party/libutp/utypes.h.orig Wed Sep 28 19:46:15 2011 ++++ b/third-party/libutp/utypes.h Wed Sep 28 19:47:06 2011 +@@ -36,7 +36,11 @@ typedef const char * cstr; + typedef char * str; + + #ifndef __cplusplus ++#ifdef HAVE_STDBOOL_H ++#include ++#else + typedef uint8 bool; ++#endif + #endif + + #endif //__UTYPES_H__ From 641024e9712b2c20a6d93b0350363cddf46c692c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 9 Nov 2011 02:31:14 +0100 Subject: [PATCH 58/89] hts-tvheadend: update to hts-tvheadend-fdc743f Signed-off-by: Stephan Raue --- .../addons/service/multimedia/hts-tvheadend/changelog.txt | 3 +++ packages/addons/service/multimedia/hts-tvheadend/meta | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/addons/service/multimedia/hts-tvheadend/changelog.txt b/packages/addons/service/multimedia/hts-tvheadend/changelog.txt index 6acfabf6b1..da8981dbf1 100644 --- a/packages/addons/service/multimedia/hts-tvheadend/changelog.txt +++ b/packages/addons/service/multimedia/hts-tvheadend/changelog.txt @@ -1,3 +1,6 @@ +1.90.1 +- update to hts-tvheadend-fdc743f + 1.90.0 - add (CH) GA Weissenstein default muxes - prepare for OpenELEC-1.90 release diff --git a/packages/addons/service/multimedia/hts-tvheadend/meta b/packages/addons/service/multimedia/hts-tvheadend/meta index 869e5f621f..999e8c46b0 100644 --- a/packages/addons/service/multimedia/hts-tvheadend/meta +++ b/packages/addons/service/multimedia/hts-tvheadend/meta @@ -19,8 +19,8 @@ ################################################################################ PKG_NAME="hts-tvheadend" -PKG_VERSION="c88a646" -PKG_REV="0" +PKG_VERSION="fdc743f" +PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://www.lonelycoder.com/hts/tvheadend_overview.html" From ad890c3165eb79a1317c90adb35ddf53f3e7441a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 9 Nov 2011 04:10:20 +0100 Subject: [PATCH 59/89] udev: update to udev-175 Signed-off-by: Stephan Raue --- packages/sysutils/udev/install | 5 +++-- packages/sysutils/udev/meta | 4 ++-- ...lkid_path-0.1.patch => udev-175-003-blkid_path-0.1.patch} | 0 3 files changed, 5 insertions(+), 4 deletions(-) rename packages/sysutils/udev/patches/{udev-173-003-blkid_path-0.1.patch => udev-175-003-blkid_path-0.1.patch} (100%) diff --git a/packages/sysutils/udev/install b/packages/sysutils/udev/install index ca46e0b7cb..340da9e3dc 100755 --- a/packages/sysutils/udev/install +++ b/packages/sysutils/udev/install @@ -42,13 +42,12 @@ mkdir -p $INSTALL/usr/lib rm -rf $INSTALL/usr/lib/libgudev*.*T mkdir -p $INSTALL/usr/lib/udev - for i in accelerometer ata_id cdrom_id collect firmware input_id mtd_probe path_id scsi_id usb-db usb_id v4l_id; do + for i in accelerometer ata_id cdrom_id collect firmware mtd_probe scsi_id usb-db v4l_id; do cp $PKG_BUILD/extras/$i/$i $INSTALL/usr/lib/udev done cp $PKG_BUILD/extras/usb-db/pci-db $INSTALL/usr/lib/udev mkdir -p $INSTALL/usr/lib/udev/rules.d - cp $PKG_BUILD/extras/accelerometer/61-accelerometer.rules $INSTALL/usr/lib/udev/rules.d cp $PKG_BUILD/extras/firmware/50-firmware.rules $INSTALL/usr/lib/udev/rules.d cp $PKG_BUILD/rules/rules.d/50-udev-default.rules $INSTALL/usr/lib/udev/rules.d cp $PKG_BUILD/extras/cdrom_id/60-cdrom_id.rules $INSTALL/usr/lib/udev/rules.d @@ -58,6 +57,8 @@ mkdir -p $INSTALL/usr/lib/udev/rules.d cp $PKG_BUILD/rules/rules.d/60-persistent-storage-tape.rules $INSTALL/usr/lib/udev/rules.d cp $PKG_BUILD/rules/rules.d/60-persistent-storage.rules $INSTALL/usr/lib/udev/rules.d cp $PKG_BUILD/extras/v4l_id/60-persistent-v4l.rules $INSTALL/usr/lib/udev/rules.d + cp $PKG_BUILD/extras/accelerometer/61-accelerometer.rules $INSTALL/usr/lib/udev/rules.d + cp $PKG_BUILD/rules/rules.d/75-net-description.rules $INSTALL/usr/lib/udev/rules.d cp $PKG_BUILD/extras/mtd_probe/75-probe_mtd.rules $INSTALL/usr/lib/udev/rules.d cp $PKG_BUILD/rules/rules.d/78-sound-card.rules $INSTALL/usr/lib/udev/rules.d cp $PKG_BUILD/rules/rules.d/80-drivers.rules $INSTALL/usr/lib/udev/rules.d diff --git a/packages/sysutils/udev/meta b/packages/sysutils/udev/meta index ae102e74f2..538006f46c 100644 --- a/packages/sysutils/udev/meta +++ b/packages/sysutils/udev/meta @@ -19,14 +19,14 @@ ################################################################################ PKG_NAME="udev" -PKG_VERSION="173" +PKG_VERSION="175" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://ftp.kernel.org/pub/linux/utils/kernel/hotplug/udev.html" #PKG_URL="http://www.eu.kernel.org/pub/linux/utils/kernel/hotplug/$PKG_NAME-$PKG_VERSION.tar.bz2" #PKG_URL="ftp://ftp.pgpi.com/linux/kernel/pub/linux/utils/kernel/hotplug/$PKG_NAME-$PKG_VERSION.tar.bz2" -PKG_URL="http://www.mirrorservice.org/sites/ftp.kernel.org/pub/linux/utils/kernel/hotplug/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_URL="http://people.freedesktop.org/~kay/udev/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="glib pciutils usbutils libusb-compat" PKG_BUILD_DEPENDS="toolchain glib pciutils usbutils libusb-compat" PKG_PRIORITY="optional" diff --git a/packages/sysutils/udev/patches/udev-173-003-blkid_path-0.1.patch b/packages/sysutils/udev/patches/udev-175-003-blkid_path-0.1.patch similarity index 100% rename from packages/sysutils/udev/patches/udev-173-003-blkid_path-0.1.patch rename to packages/sysutils/udev/patches/udev-175-003-blkid_path-0.1.patch From 772bc3051eb803527205656873052c0195e61925 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 9 Nov 2011 17:14:15 +0100 Subject: [PATCH 60/89] expat-host: add support to build within toolchain Signed-off-by: Stephan Raue --- packages/textproc/expat-host/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/textproc/expat-host/meta b/packages/textproc/expat-host/meta index 7ed99955af..9c62e0a861 100644 --- a/packages/textproc/expat-host/meta +++ b/packages/textproc/expat-host/meta @@ -26,7 +26,7 @@ PKG_LICENSE="OSS" PKG_SITE="http://expat.sourceforge.net/" PKG_URL="" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_BUILD_DEPENDS="ccache autotools" PKG_PRIORITY="optional" PKG_SECTION="textproc" PKG_SHORTDESC="expat: XML parser library" From 55a3ed891001f73dc9226495746e889694e5b875 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 9 Nov 2011 17:16:38 +0100 Subject: [PATCH 61/89] Python: split to host and target package, update dependencies Signed-off-by: Stephan Raue --- packages/devel/boost/meta | 2 +- packages/devel/glib-host/meta | 2 +- packages/devel/glib/meta | 2 +- packages/graphics/Mesa/meta | 2 +- packages/graphics/mesa/meta | 2 +- packages/lang/Python-host/build | 68 +++++++++++++++++++ packages/lang/Python-host/meta | 36 ++++++++++ .../scripts/python-config | 0 packages/lang/Python/build | 51 +------------- packages/lang/Python/meta | 4 +- packages/textproc/libxml2-host/meta | 2 +- packages/x11/lib/libxcb/meta | 2 +- packages/x11/proto/xcb-proto/meta | 2 +- 13 files changed, 117 insertions(+), 58 deletions(-) create mode 100755 packages/lang/Python-host/build create mode 100644 packages/lang/Python-host/meta rename packages/lang/{Python => Python-host}/scripts/python-config (100%) diff --git a/packages/devel/boost/meta b/packages/devel/boost/meta index 8968d56fbd..165d1ccd84 100644 --- a/packages/devel/boost/meta +++ b/packages/devel/boost/meta @@ -26,7 +26,7 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.boost.org/" PKG_URL="$SOURCEFORGE_SRC/boost/boost/1.45.0/${PKG_NAME}_${PKG_VERSION}.tar.bz2" PKG_DEPENDS="zlib bzip2" -PKG_BUILD_DEPENDS="toolchain boost-jam Python zlib bzip2" +PKG_BUILD_DEPENDS="toolchain boost-jam Python-host zlib bzip2" PKG_PRIORITY="optional" PKG_SECTION="devel" PKG_SHORTDESC="boost: Peer-reviewed STL style libraries for C++" diff --git a/packages/devel/glib-host/meta b/packages/devel/glib-host/meta index 4f9e1ee2b7..46ccacd267 100644 --- a/packages/devel/glib-host/meta +++ b/packages/devel/glib-host/meta @@ -26,7 +26,7 @@ PKG_LICENSE="LGPL" PKG_SITE="http://www.gtk.org/" PKG_URL="" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="ccache libffi-host zlib-host" +PKG_BUILD_DEPENDS="ccache libffi-host zlib-host Python-host" PKG_PRIORITY="optional" PKG_SECTION="devel" PKG_SHORTDESC="glib-host: C support library" diff --git a/packages/devel/glib/meta b/packages/devel/glib/meta index 08d4e09aa4..efed62e0fb 100644 --- a/packages/devel/glib/meta +++ b/packages/devel/glib/meta @@ -26,7 +26,7 @@ PKG_LICENSE="LGPL" PKG_SITE="http://www.gtk.org/" PKG_URL="http://ftp.gnome.org/pub/gnome/sources/glib/2.31/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="zlib libiconv libffi pcre" -PKG_BUILD_DEPENDS="toolchain zlib libiconv libffi pcre glib-host gtk-doc" +PKG_BUILD_DEPENDS="toolchain zlib libiconv libffi pcre glib-host gtk-doc Python-host" PKG_PRIORITY="optional" PKG_SECTION="devel" PKG_SHORTDESC="glib: C support library" diff --git a/packages/graphics/Mesa/meta b/packages/graphics/Mesa/meta index 23c4e1a806..6879701736 100644 --- a/packages/graphics/Mesa/meta +++ b/packages/graphics/Mesa/meta @@ -26,7 +26,7 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.mesa3d.org/" PKG_URL="ftp://ftp.freedesktop.org/pub/mesa/$PKG_VERSION/MesaLib-$PKG_VERSION.tar.bz2" PKG_DEPENDS="libXdamage libdrm expat libXext libXfixes libXxf86vm libxcb libX11" -PKG_BUILD_DEPENDS="toolchain Python makedepend libxml2-host expat glproto dri2proto libdrm libXext libXdamage libXfixes libXxf86vm libxcb libX11" +PKG_BUILD_DEPENDS="toolchain Python-host makedepend libxml2-host expat glproto dri2proto libdrm libXext libXdamage libXfixes libXxf86vm libxcb libX11" PKG_PRIORITY="optional" PKG_SECTION="graphics" PKG_SHORTDESC="mesa: 3-D graphics library with OpenGL API" diff --git a/packages/graphics/mesa/meta b/packages/graphics/mesa/meta index 36fd38a007..3ef7e191a4 100644 --- a/packages/graphics/mesa/meta +++ b/packages/graphics/mesa/meta @@ -26,7 +26,7 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.mesa3d.org/" PKG_URL="http://cgit.freedesktop.org/mesa/mesa/snapshot/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="libXdamage libdrm expat libXext libXfixes libXxf86vm libxcb libX11" -PKG_BUILD_DEPENDS="toolchain Python makedepend libxml2-host expat glproto dri2proto libdrm libXext libXdamage libXfixes libXxf86vm libxcb libX11" +PKG_BUILD_DEPENDS="toolchain Python-host makedepend libxml2-host expat glproto dri2proto libdrm libXext libXdamage libXfixes libXxf86vm libxcb libX11" PKG_PRIORITY="optional" PKG_SECTION="graphics" PKG_SHORTDESC="mesa: 3-D graphics library with OpenGL API" diff --git a/packages/lang/Python-host/build b/packages/lang/Python-host/build new file mode 100755 index 0000000000..be9ccc37fd --- /dev/null +++ b/packages/lang/Python-host/build @@ -0,0 +1,68 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +. config/options $1 + +$SCRIPTS/unpack Python + +setup_toolchain host + +PY_DISABLED_MODULES="readline _curses _curses_panel _tkinter nis gdbm bsddb _codecs_kr _codecs_jp _codecs_cn _codecs_tw _codecs_hk" + +cd $BUILD/Python-* +mkdir -p .objdir-host && cd .objdir-host + +OPT="$HOST_CFLAGS" \ +LDFLAGS="$LDFLAGS -lexpat" \ +../configure --host=$HOST_NAME \ + --build=$HOST_NAME \ + --prefix=$ROOT/$TOOLCHAIN \ + --cache-file=config.cache \ + --enable-shared \ + --without-cxx-main \ + --with-threads \ + --enable-unicode=ucs4 \ + --with-system-expat \ + +make PYTHON_MODULES_INCLUDE="$HOST_INCDIR" \ + PYTHON_MODULES_LIB="$HOST_LIBDIR" \ + PYTHON_DISABLE_MODULES="$PY_DISABLED_MODULES" \ + +make PYTHON_MODULES_INCLUDE="$HOST_INCDIR" \ + PYTHON_MODULES_LIB="$HOST_LIBDIR" \ + PYTHON_DISABLE_MODULES="$PY_DISABLED_MODULES" \ + install + +cp Parser/pgen ./hostpgen +cp python ./hostpython + +# symlink python binary to python2 (needed for Mesa) + ln -sf python $ROOT/$TOOLCHAIN/bin/python2 + +# replace python-config to make sure python uses $SYSROOT_PREFIX + mkdir -p $ROOT/$TOOLCHAIN/bin + rm -rf $ROOT/$TOOLCHAIN/bin/python*-config + + sed -e "s:%PREFIX%:$SYSROOT_PREFIX/usr:g" -e "s:%CFLAGS%:$TARGET_CFLAGS:g" \ + $ROOT/$PKG_DIR/scripts/python-config > $ROOT/$TOOLCHAIN/bin/python2.7-config + chmod +x $ROOT/$TOOLCHAIN/bin/python2.7-config + ln -s python2.7-config $ROOT/$TOOLCHAIN/bin/python-config diff --git a/packages/lang/Python-host/meta b/packages/lang/Python-host/meta new file mode 100644 index 0000000000..e5c6e7822b --- /dev/null +++ b/packages/lang/Python-host/meta @@ -0,0 +1,36 @@ +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +PKG_NAME="Python-host" +PKG_VERSION="" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://www.python.org/" +PKG_URL="" +PKG_DEPENDS="zlib-host expat-host" +PKG_BUILD_DEPENDS="ccache zlib-host expat-host" +PKG_PRIORITY="optional" +PKG_SECTION="lang" +PKG_SHORTDESC="python: The Python programming language" +PKG_LONGDESC="Python is an interpreted object-oriented programming language, and is often compared with Tcl, Perl, Java or Scheme." +PKG_IS_ADDON="no" + +PKG_AUTORECONF="no" diff --git a/packages/lang/Python/scripts/python-config b/packages/lang/Python-host/scripts/python-config similarity index 100% rename from packages/lang/Python/scripts/python-config rename to packages/lang/Python-host/scripts/python-config diff --git a/packages/lang/Python/build b/packages/lang/Python/build index 26088f8220..7d6f05c2b1 100755 --- a/packages/lang/Python/build +++ b/packages/lang/Python/build @@ -24,51 +24,15 @@ PY_DISABLED_MODULES="readline _curses _curses_panel _tkinter nis gdbm bsddb _codecs_kr _codecs_jp _codecs_cn _codecs_tw _codecs_hk" -cd $PKG_BUILD - -mkdir -p .objdir-host && cd .objdir-host - -setup_toolchain host - -OPT="$HOST_CFLAGS" \ -LDFLAGS="$LDFLAGS -lexpat" \ -../configure --host=$HOST_NAME \ - --build=$HOST_NAME \ - --prefix=$ROOT/$TOOLCHAIN \ - --cache-file=config.cache \ - --enable-shared \ - --without-cxx-main \ - --with-threads \ - --enable-unicode=ucs4 \ - --with-system-expat \ - -make PYTHON_MODULES_INCLUDE="$HOST_INCDIR" \ - PYTHON_MODULES_LIB="$HOST_LIBDIR" - -make PYTHON_MODULES_INCLUDE="$HOST_INCDIR" \ - PYTHON_MODULES_LIB="$HOST_LIBDIR" \ - install - -# symlink python binary to python2 (needed for Mesa) - ln -sf python $ROOT/$TOOLCHAIN/bin/python2 - -cp Parser/pgen ./hostpgen -cp python ./hostpython - -cd .. - -mkdir -p .objdir-target && cd .objdir-target - -setup_toolchain target - # dont use some optimizations because of problems # this fixes problems with expat (maybe) LDFLAGS=`echo $LDFLAGS | sed -e "s|-Wl,--as-needed||"` strip_lto -#LDFLAGS="$LDFLAGS -lexpat -lffi" \ -#LDFLAGS="$LDFLAGS -lffi" \ +cd $PKG_BUILD +mkdir -p .objdir-target && cd .objdir-target + ac_cv_file_dev_ptc=no \ ac_cv_file_dev_ptmx=yes \ ac_cv_func_lchflags_works=no \ @@ -118,12 +82,3 @@ make -j1 CC="$TARGET_CC" \ PYTHON_MODULES_INCLUDE="$TARGET_INCDIR" \ PYTHON_MODULES_LIB="$TARGET_LIBDIR" \ install - -# replace python-config to make sure python uses $SYSROOT_PREFIX - mkdir -p $ROOT/$TOOLCHAIN/bin - rm -rf $ROOT/$TOOLCHAIN/bin/python*-config - - sed -e "s:%PREFIX%:$SYSROOT_PREFIX/usr:g" -e "s:%CFLAGS%:$TARGET_CFLAGS:g" \ - $ROOT/$PKG_DIR/scripts/python-config > $ROOT/$TOOLCHAIN/bin/python2.7-config - chmod +x $ROOT/$TOOLCHAIN/bin/python2.7-config - ln -s python2.7-config $ROOT/$TOOLCHAIN/bin/python-config diff --git a/packages/lang/Python/meta b/packages/lang/Python/meta index a325e4d0c9..568bc7b861 100644 --- a/packages/lang/Python/meta +++ b/packages/lang/Python/meta @@ -25,8 +25,8 @@ PKG_ARCH="any" PKG_LICENSE="OSS" PKG_SITE="http://www.python.org/" PKG_URL="http://www.python.org/ftp/python/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.xz" -PKG_DEPENDS="zlib openssl libffi file" -PKG_BUILD_DEPENDS="toolchain expat-host sqlite expat zlib-host zlib openssl libffi" +PKG_DEPENDS="sqlite expat zlib openssl libffi file" +PKG_BUILD_DEPENDS="toolchain sqlite expat zlib openssl libffi" PKG_PRIORITY="optional" PKG_SECTION="lang" PKG_SHORTDESC="python: The Python programming language" diff --git a/packages/textproc/libxml2-host/meta b/packages/textproc/libxml2-host/meta index e98d4e804c..a4755f2d23 100644 --- a/packages/textproc/libxml2-host/meta +++ b/packages/textproc/libxml2-host/meta @@ -26,7 +26,7 @@ PKG_LICENSE="MIT" PKG_SITE="http://xmlsoft.org" PKG_URL="" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain zlib-host Python" +PKG_BUILD_DEPENDS="toolchain zlib-host Python-host" PKG_PRIORITY="optional" PKG_SECTION="textproc" PKG_SHORTDESC="libxml: XML parser library for Gnome" diff --git a/packages/x11/lib/libxcb/meta b/packages/x11/lib/libxcb/meta index 09a70be2e4..386078417f 100644 --- a/packages/x11/lib/libxcb/meta +++ b/packages/x11/lib/libxcb/meta @@ -26,7 +26,7 @@ PKG_LICENSE="OSS" PKG_SITE="http://xcb.freedesktop.org" PKG_URL="http://xcb.freedesktop.org/dist/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="libXau" -PKG_BUILD_DEPENDS="toolchain util-macros Python xcb-proto libpthread-stubs libXau" +PKG_BUILD_DEPENDS="toolchain util-macros Python-host xcb-proto libpthread-stubs libXau" PKG_PRIORITY="optional" PKG_SECTION="x11/lib" PKG_SHORTDESC="libxcb: X C-language Bindings library" diff --git a/packages/x11/proto/xcb-proto/meta b/packages/x11/proto/xcb-proto/meta index 7b178be864..35e2b5d945 100644 --- a/packages/x11/proto/xcb-proto/meta +++ b/packages/x11/proto/xcb-proto/meta @@ -26,7 +26,7 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.X.org" PKG_URL="http://xcb.freedesktop.org/dist/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain util-macros Python" +PKG_BUILD_DEPENDS="toolchain util-macros Python-host" PKG_PRIORITY="optional" PKG_SECTION="x11/proto" PKG_SHORTDESC="xcb-proto: X C-language Bindings protocol headers" From 6ca0a4413170d6e0ae77ea11a5547b780571bb4c Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 9 Nov 2011 17:55:21 +0100 Subject: [PATCH 62/89] Imaging: update download url, thanks to Spulit1 Signed-off-by: Stephan Raue --- packages/python/graphics/Imaging/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/python/graphics/Imaging/meta b/packages/python/graphics/Imaging/meta index c7928a6268..010da8fc68 100644 --- a/packages/python/graphics/Imaging/meta +++ b/packages/python/graphics/Imaging/meta @@ -24,7 +24,7 @@ PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="BSD" PKG_SITE="http://www.pythonware.com/products/pil/" -PKG_URL="http://effbot.org/downloads/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_URL="http://effbot.org/media/downloads/$PKG_NAME-$PKG_VERSION.tar.gz" PKG_DEPENDS="Python distribute zlib freetype $LIBJPEG" PKG_BUILD_DEPENDS="toolchain Python distribute distutilscross zlib freetype $LIBJPEG" PKG_PRIORITY="optional" From bb0bbd638855c21aebceea44345779cdb1bcf15a Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 9 Nov 2011 18:03:27 +0100 Subject: [PATCH 63/89] Python: depends on Python-host Signed-off-by: Stephan Raue --- packages/lang/Python/meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/lang/Python/meta b/packages/lang/Python/meta index 568bc7b861..300b89caab 100644 --- a/packages/lang/Python/meta +++ b/packages/lang/Python/meta @@ -26,7 +26,7 @@ PKG_LICENSE="OSS" PKG_SITE="http://www.python.org/" PKG_URL="http://www.python.org/ftp/python/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.xz" PKG_DEPENDS="sqlite expat zlib openssl libffi file" -PKG_BUILD_DEPENDS="toolchain sqlite expat zlib openssl libffi" +PKG_BUILD_DEPENDS="toolchain Python-host sqlite expat zlib openssl libffi" PKG_PRIORITY="optional" PKG_SECTION="lang" PKG_SHORTDESC="python: The Python programming language" From 88ccfc3a8461cbe4a3238d7398d7c2211eac2d66 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 9 Nov 2011 22:09:29 +0100 Subject: [PATCH 64/89] evtest: fix addon Signed-off-by: Stephan Raue --- packages/addons/debugging/tools/evtest/addon | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/addons/debugging/tools/evtest/addon b/packages/addons/debugging/tools/evtest/addon index 175d4e3742..ba9fd9267c 100755 --- a/packages/addons/debugging/tools/evtest/addon +++ b/packages/addons/debugging/tools/evtest/addon @@ -29,4 +29,4 @@ mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/bin mkdir -p $ADDON_BUILD/$PKG_ADDON_ID/lib cp -P $BUILD/libiconv-[0-9]*/lib/.libs/libiconv.so* $ADDON_BUILD/$PKG_ADDON_ID/lib cp -P $BUILD/libxml2-[0-9]*/.build-target/.libs/libxml2.so* $ADDON_BUILD/$PKG_ADDON_ID/lib - cp -P $BUILD/zlib-[0-9]*/.build-target/libz.so.* $ADDON_BUILD/$PKG_ADDON_ID/lib + cp -P $BUILD/zlib-[0-9]*/libz.so.* $ADDON_BUILD/$PKG_ADDON_ID/lib From b9bec710c721d2d797c3404e3eab84428ee9d350 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 9 Nov 2011 22:22:13 +0100 Subject: [PATCH 65/89] SABnzbd-Suite: update version rebuilding against updated OpenSSL Signed-off-by: Stephan Raue --- .../addons/service/downloadmanager/SABnzbd-Suite/changelog.txt | 3 +++ packages/addons/service/downloadmanager/SABnzbd-Suite/meta | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/addons/service/downloadmanager/SABnzbd-Suite/changelog.txt b/packages/addons/service/downloadmanager/SABnzbd-Suite/changelog.txt index 02012ef083..ec98f9bbc7 100644 --- a/packages/addons/service/downloadmanager/SABnzbd-Suite/changelog.txt +++ b/packages/addons/service/downloadmanager/SABnzbd-Suite/changelog.txt @@ -1,3 +1,6 @@ +1.90.1 +- rebuild for OpenSSL upgrade + 1.90.0 - prepare for OpenELEC-1.90 release diff --git a/packages/addons/service/downloadmanager/SABnzbd-Suite/meta b/packages/addons/service/downloadmanager/SABnzbd-Suite/meta index eb3c7eca8f..c6ca4e906b 100644 --- a/packages/addons/service/downloadmanager/SABnzbd-Suite/meta +++ b/packages/addons/service/downloadmanager/SABnzbd-Suite/meta @@ -20,7 +20,7 @@ PKG_NAME="SABnzbd-Suite" PKG_VERSION="1.90" -PKG_REV="0" +PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="OSS" PKG_SITE="http://www.openelec.tv" From f5b6b91bd4e7ede3e7933f8d5a2d635a2fda75fe Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 10 Nov 2011 00:52:41 +0100 Subject: [PATCH 66/89] Revert "remove package libtirpc" This reverts commit b83ca586c0b2aac99d030e7f3964cbacbbcdb2ac. --- packages/network/libnfs/build | 3 +- .../libnfs-95b7217-00-tirpc_fixes.patch | 114 ++++ packages/network/libtirpc/build | 36 + packages/network/libtirpc/install | 30 + packages/network/libtirpc/meta | 36 + ...c-0.2.2-Delete_unused_local_variable.patch | 19 + .../libtirpc-0.2.2-libtirpc-0.2.3rc1.patch | 637 ++++++++++++++++++ .../libtirpc-0.2.2-wrap-segfault.patch | 28 + 8 files changed, 902 insertions(+), 1 deletion(-) create mode 100644 packages/network/libnfs/patches/libnfs-95b7217-00-tirpc_fixes.patch create mode 100755 packages/network/libtirpc/build create mode 100755 packages/network/libtirpc/install create mode 100644 packages/network/libtirpc/meta create mode 100644 packages/network/libtirpc/patches/libtirpc-0.2.2-Delete_unused_local_variable.patch create mode 100644 packages/network/libtirpc/patches/libtirpc-0.2.2-libtirpc-0.2.3rc1.patch create mode 100644 packages/network/libtirpc/patches/libtirpc-0.2.2-wrap-segfault.patch diff --git a/packages/network/libnfs/build b/packages/network/libnfs/build index 6cc0ac13ab..0fa9ba0f6f 100755 --- a/packages/network/libnfs/build +++ b/packages/network/libnfs/build @@ -32,7 +32,8 @@ cd $PKG_BUILD --libdir=/usr/lib \ --sysconfdir=/etc \ --disable-examples \ - --disable-tirpc \ + --enable-tirpc \ + --with-tirpcinclude="$SYSROOT_PREFIX/usr/include/tirpc" \ make $MAKEINSTALL diff --git a/packages/network/libnfs/patches/libnfs-95b7217-00-tirpc_fixes.patch b/packages/network/libnfs/patches/libnfs-95b7217-00-tirpc_fixes.patch new file mode 100644 index 0000000000..746955b4f5 --- /dev/null +++ b/packages/network/libnfs/patches/libnfs-95b7217-00-tirpc_fixes.patch @@ -0,0 +1,114 @@ +diff --git a/Makefile.am b/Makefile.am +index 03e4419..5172bed 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -5,3 +5,5 @@ pkgconfig_DATA = libnfs.pc + + EXTRA_DIST = README COPYING libnfs.pc.in + ++ACLOCAL_AMFLAGS = -I aclocal ++ +diff --git a/aclocal/libtirpc.m4 b/aclocal/libtirpc.m4 +new file mode 100644 +index 0000000..9f0fde0 +--- /dev/null ++++ b/aclocal/libtirpc.m4 +@@ -0,0 +1,40 @@ ++dnl Checks for TI-RPC library and headers ++dnl ++AC_DEFUN([AC_LIBTIRPC], [ ++ ++ AC_ARG_WITH([tirpcinclude], ++ [AC_HELP_STRING([--with-tirpcinclude=DIR], ++ [use TI-RPC headers in DIR])], ++ [tirpc_header_dir=$withval], ++ [tirpc_header_dir=/usr/include/tirpc]) ++ ++ dnl if --enable-tirpc was specifed, the following components ++ dnl must be present, and we set up HAVE_ macros for them. ++ ++ if test "$enable_tirpc" != "no"; then ++ ++ dnl look for the library; add to LIBS if found ++ AC_CHECK_LIB([tirpc], [clnt_tli_create], , ++ [if test "$enable_tirpc" = "yes"; then ++ AC_MSG_ERROR([libtirpc not found.]) ++ else ++ AC_MSG_WARN([libtirpc not found. TIRPC disabled!]) ++ enable_tirpc="no" ++ fi]) ++ fi ++ ++ if test "$enable_tirpc" != "no"; then ++ dnl also must have the headers installed where we expect ++ dnl look for headers; add -I compiler option if found ++ AC_CHECK_HEADERS([${tirpc_header_dir}/netconfig.h], ++ AC_SUBST([AM_CPPFLAGS], ["-I${tirpc_header_dir}"]), ++ [if test "$enable_tirpc" = "yes"; then ++ AC_MSG_ERROR([libtirpc headers not found.]) ++ else ++ AC_MSG_WARN([libtirpc headers not found. TIRPC disabled!]) ++ enable_tirpc="no" ++ fi]) ++ ++ fi ++ ++])dnl +diff --git a/configure.ac b/configure.ac +index 24400c3..f84e391 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1,5 +1,6 @@ + AC_PREREQ(2.50) + AC_INIT([libnfs], [1.0.0]) ++AC_CONFIG_MACRO_DIR(aclocal) + AC_CONFIG_HEADERS([config.h]) + AM_INIT_AUTOMAKE([foreign]) + AC_CANONICAL_HOST +@@ -22,7 +23,14 @@ if test x$HAVE_RPCGEN != xyes; then + AC_MSG_ERROR([Can not find required program]) + fi + +-#option: examples ++dnl option: libtirpc ++AC_ARG_ENABLE(tirpc, ++ [AC_HELP_STRING([--enable-tirpc], ++ [enable use of TI-RPC @<:@default=no@:>@])], ++ enable_tirpc=$enableval, ++ enable_tirpc='no') ++ ++dnl option: examples + AC_ARG_ENABLE([examples], + [AC_HELP_STRING([--enable-examples], + [Build example programs])], +@@ -34,12 +42,6 @@ if test x$ENABLE_EXAMPLES = xyes; then + fi + AC_SUBST(MAYBE_EXAMPLES) + +-AC_ARG_ENABLE(tirpc, +- [AC_HELP_STRING([--enable-tirpc], +- [enable use of TI-RPC @<:@default=no@:>@])], +- enable_tirpc=$enableval, +- enable_tirpc='no') +- + case $host in + *darwin*) + RPCGENFLAGS=-DU_INT64_PLATTFORM_TYPE="u_int64_t" +@@ -71,11 +73,13 @@ AC_CHECK_MEMBER([struct sockaddr.sa_len], + #include + ]) + ++PKG_PROG_PKG_CONFIG() ++ ++dnl Check for TI-RPC library and headers ++AC_LIBTIRPC ++ ++dnl Check for TI-RPC library and headers + echo "Use TI-RPC: $enable_tirpc" +-if test "$enable_tirpc" = "yes"; then +- CFLAGS="${CFLAGS} -I /usr/include/tirpc" +- LDFLAGS="${LDFLAGS} -ltirpc" +-fi + + #output + AC_CONFIG_FILES([Makefile] diff --git a/packages/network/libtirpc/build b/packages/network/libtirpc/build new file mode 100755 index 0000000000..8ef956a03a --- /dev/null +++ b/packages/network/libtirpc/build @@ -0,0 +1,36 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +. config/options $1 + +cd $PKG_BUILD +./configure --host=$TARGET_NAME \ + --build=$HOST_NAME \ + --prefix=/usr \ + --sysconfdir=/etc \ + --disable-static \ + --enable-shared \ + --enable-gss \ + --with-gnu-ld + +make +$MAKEINSTALL diff --git a/packages/network/libtirpc/install b/packages/network/libtirpc/install new file mode 100755 index 0000000000..fd9621cbc5 --- /dev/null +++ b/packages/network/libtirpc/install @@ -0,0 +1,30 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +. config/options $1 + +mkdir -p $INSTALL/usr/lib + cp $PKG_BUILD/src/.libs/*.so* $INSTALL/usr/lib + +mkdir -p $INSTALL/etc + cp $PKG_BUILD/doc/etc_netconfig $INSTALL/etc/netconfig + diff --git a/packages/network/libtirpc/meta b/packages/network/libtirpc/meta new file mode 100644 index 0000000000..5f6309d7f4 --- /dev/null +++ b/packages/network/libtirpc/meta @@ -0,0 +1,36 @@ +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +PKG_NAME="libtirpc" +PKG_VERSION="0.2.2" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="https://sourceforge.net/projects/libtirpc/" +PKG_URL="https://downloads.sourceforge.net/project/libtirpc/libtirpc/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libgssglue" +PKG_BUILD_DEPENDS="toolchain libgssglue" +PKG_PRIORITY="optional" +PKG_SECTION="network" +PKG_SHORTDESC="libtirpc: Transport Independent RPC Library" +PKG_LONGDESC="Libtirpc is a port of Suns Transport-Independent RPC library to Linux. It's being developed by the Bull GNU/Linux NFSv4 project." +PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" diff --git a/packages/network/libtirpc/patches/libtirpc-0.2.2-Delete_unused_local_variable.patch b/packages/network/libtirpc/patches/libtirpc-0.2.2-Delete_unused_local_variable.patch new file mode 100644 index 0000000000..88a3d9b026 --- /dev/null +++ b/packages/network/libtirpc/patches/libtirpc-0.2.2-Delete_unused_local_variable.patch @@ -0,0 +1,19 @@ +X-Git-Url: http://git.infradead.org + +diff --git a/src/rpc_soc.c b/src/rpc_soc.c +index c678429..63d2197 100644 +--- a/src/rpc_soc.c ++++ b/src/rpc_soc.c +@@ -560,12 +560,10 @@ clntunix_create(raddr, prog, vers, sockp, sendsz, recvsz) + u_int recvsz; + { + struct netbuf *svcaddr; +- struct netconfig *nconf; + CLIENT *cl; + int len; + + cl = NULL; +- nconf = NULL; + svcaddr = NULL; + if (((svcaddr = malloc(sizeof(struct netbuf))) == NULL ) || + ((svcaddr->buf = malloc(sizeof(struct sockaddr_un))) == NULL)) { diff --git a/packages/network/libtirpc/patches/libtirpc-0.2.2-libtirpc-0.2.3rc1.patch b/packages/network/libtirpc/patches/libtirpc-0.2.2-libtirpc-0.2.3rc1.patch new file mode 100644 index 0000000000..d57a59e1f2 --- /dev/null +++ b/packages/network/libtirpc/patches/libtirpc-0.2.2-libtirpc-0.2.3rc1.patch @@ -0,0 +1,637 @@ +diff --git a/src/Makefile.am b/src/Makefile.am +index 7ee8cbc..6731ff9 100644 +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -50,7 +50,7 @@ libtirpc_la_SOURCES = auth_none.c auth_unix.c authunix_prot.c bindresvport.c cln + rpc_callmsg.c rpc_generic.c rpc_soc.c rpcb_clnt.c rpcb_prot.c \ + rpcb_st_xdr.c svc.c svc_auth.c svc_dg.c svc_auth_unix.c svc_generic.c \ + svc_raw.c svc_run.c svc_simple.c svc_vc.c getpeereid.c \ +- auth_time.c auth_des.c authdes_prot.c des_crypt.c ++ auth_time.c auth_des.c authdes_prot.c + + ## XDR + libtirpc_la_SOURCES += xdr.c xdr_rec.c xdr_array.c xdr_float.c xdr_mem.c xdr_reference.c xdr_stdio.c +diff --git a/src/auth_des.c b/src/auth_des.c +index 37e7667..f0c8b8c 100644 +--- a/src/auth_des.c ++++ b/src/auth_des.c +@@ -223,6 +223,7 @@ authdes_pk_seccreate(const char *servername, netobj *pkey, u_int window, + goto failed; + } + ad->ad_nis_srvr = NULL; /* not needed any longer */ ++ auth_get(auth); /* Reference for caller */ + return (auth); + + failed: +@@ -472,6 +473,12 @@ authdes_destroy(AUTH *auth) + FREE(auth, sizeof(AUTH)); + } + ++static bool_t ++authdes_wrap(AUTH *auth, XDR *xdrs, xdrproc_t xfunc, caddr_t xwhere) ++{ ++ return ((*xfunc)(xdrs, xwhere)); ++} ++ + static struct auth_ops * + authdes_ops(void) + { +@@ -487,6 +494,8 @@ authdes_ops(void) + ops.ah_validate = authdes_validate; + ops.ah_refresh = authdes_refresh; + ops.ah_destroy = authdes_destroy; ++ ops.ah_wrap = authdes_wrap; ++ ops.ah_unwrap = authdes_wrap; + } + mutex_unlock(&authdes_ops_lock); + return (&ops); +diff --git a/src/auth_gss.c b/src/auth_gss.c +index df3017a..a992049 100644 +--- a/src/auth_gss.c ++++ b/src/auth_gss.c +@@ -200,6 +200,8 @@ authgss_create(CLIENT *clnt, gss_name_t name, struct rpc_gss_sec *sec) + + if (!authgss_refresh(auth)) + auth = NULL; ++ else ++ auth_get(auth); /* Reference for caller */ + + clnt->cl_auth = save_auth; + +@@ -555,9 +557,20 @@ authgss_destroy_context(AUTH *auth) + + if (gd->gc.gc_ctx.length != 0) { + if (gd->established) { ++ AUTH *save_auth = NULL; ++ ++ /* Make sure we use the right auth_ops */ ++ if (gd->clnt->cl_auth != auth) { ++ save_auth = gd->clnt->cl_auth; ++ gd->clnt->cl_auth = auth; ++ } ++ + gd->gc.gc_proc = RPCSEC_GSS_DESTROY; + clnt_call(gd->clnt, NULLPROC, (xdrproc_t)xdr_void, NULL, + (xdrproc_t)xdr_void, NULL, AUTH_TIMEOUT); ++ ++ if (save_auth != NULL) ++ gd->clnt->cl_auth = save_auth; + } + gss_release_buffer(&min_stat, &gd->gc.gc_ctx); + /* XXX ANDROS check size of context - should be 8 */ +diff --git a/src/auth_none.c b/src/auth_none.c +index a439ec6..008c589 100644 +--- a/src/auth_none.c ++++ b/src/auth_none.c +@@ -155,6 +155,12 @@ authnone_destroy(AUTH *client) + { + } + ++static bool_t ++authnone_wrap(AUTH *auth, XDR *xdrs, xdrproc_t xfunc, caddr_t xwhere) ++{ ++ return ((*xfunc)(xdrs, xwhere)); ++} ++ + static struct auth_ops * + authnone_ops() + { +@@ -170,6 +176,8 @@ authnone_ops() + ops.ah_validate = authnone_validate; + ops.ah_refresh = authnone_refresh; + ops.ah_destroy = authnone_destroy; ++ ops.ah_wrap = authnone_wrap; ++ ops.ah_unwrap = authnone_wrap; + } + mutex_unlock(&ops_lock); + return (&ops); +diff --git a/src/auth_unix.c b/src/auth_unix.c +index c2469da..4b9b13f 100644 +--- a/src/auth_unix.c ++++ b/src/auth_unix.c +@@ -162,6 +162,7 @@ authunix_create(machname, uid, gid, len, aup_gids) + */ + auth->ah_cred = au->au_origcred; + marshal_new_auth(auth); ++ auth_get(auth); /* Reference for caller */ + return (auth); + #ifndef _KERNEL + cleanup_authunix_create: +@@ -396,6 +397,12 @@ marshal_new_auth(auth) + XDR_DESTROY(xdrs); + } + ++static bool_t ++authunix_wrap(AUTH *auth, XDR *xdrs, xdrproc_t xfunc, caddr_t xwhere) ++{ ++ return ((*xfunc)(xdrs, xwhere)); ++} ++ + static struct auth_ops * + authunix_ops() + { +@@ -411,6 +418,8 @@ authunix_ops() + ops.ah_validate = authunix_validate; + ops.ah_refresh = authunix_refresh; + ops.ah_destroy = authunix_destroy; ++ ops.ah_wrap = authunix_wrap; ++ ops.ah_unwrap = authunix_wrap; + } + mutex_unlock(&ops_lock); + return (&ops); +diff --git a/src/authgss_prot.c b/src/authgss_prot.c +index 9d7fa09..0168318 100644 +--- a/src/authgss_prot.c ++++ b/src/authgss_prot.c +@@ -161,6 +161,7 @@ xdr_rpc_gss_wrap_data(XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr, + databuflen = end - start - 4; + XDR_SETPOS(xdrs, start + 4); + databuf.value = XDR_INLINE(xdrs, databuflen); ++ databuf.length = databuflen; + + xdr_stat = FALSE; + +@@ -169,7 +170,6 @@ xdr_rpc_gss_wrap_data(XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr, + XDR_SETPOS(xdrs, start); + if (!xdr_u_int(xdrs, (u_int *)&databuflen)) + return (FALSE); +- databuf.length = databuflen; + + /* Checksum rpc_gss_data_t. */ + maj_stat = gss_get_mic(&min_stat, ctx, qop, +diff --git a/src/clnt_dg.c b/src/clnt_dg.c +index 79fed5d..4a1f60a 100644 +--- a/src/clnt_dg.c ++++ b/src/clnt_dg.c +@@ -366,7 +366,7 @@ call_again: + + if ((! XDR_PUTINT32(xdrs, (int32_t *)&proc)) || + (! AUTH_MARSHALL(cl->cl_auth, xdrs)) || +- (! (*xargs)(xdrs, argsp))) { ++ (! AUTH_WRAP(cl->cl_auth, xdrs, xargs, argsp))) { + cu->cu_error.re_status = RPC_CANTENCODEARGS; + goto out; + } +@@ -400,8 +400,8 @@ get_reply: + * (We assume that this is actually only executed once.) + */ + reply_msg.acpted_rply.ar_verf = _null_auth; +- reply_msg.acpted_rply.ar_results.where = resultsp; +- reply_msg.acpted_rply.ar_results.proc = xresults; ++ reply_msg.acpted_rply.ar_results.where = NULL; ++ reply_msg.acpted_rply.ar_results.proc = (xdrproc_t)xdr_void; + + fd.fd = cu->cu_fd; + fd.events = POLLIN; +@@ -512,6 +512,10 @@ get_reply: + &reply_msg.acpted_rply.ar_verf)) { + cu->cu_error.re_status = RPC_AUTHERROR; + cu->cu_error.re_why = AUTH_INVALIDRESP; ++ } else if (! AUTH_UNWRAP(cl->cl_auth, &reply_xdrs, ++ xresults, resultsp)) { ++ if (cu->cu_error.re_status == RPC_SUCCESS) ++ cu->cu_error.re_status = RPC_CANTDECODERES; + } + if (reply_msg.acpted_rply.ar_verf.oa_base != NULL) { + xdrs->x_op = XDR_FREE; +diff --git a/src/clnt_vc.c b/src/clnt_vc.c +index 359063c..097cae8 100644 +--- a/src/clnt_vc.c ++++ b/src/clnt_vc.c +@@ -364,7 +364,7 @@ call_again: + if ((! XDR_PUTBYTES(xdrs, ct->ct_u.ct_mcallc, ct->ct_mpos)) || + (! XDR_PUTINT32(xdrs, (int32_t *)&proc)) || + (! AUTH_MARSHALL(cl->cl_auth, xdrs)) || +- (! (*xdr_args)(xdrs, args_ptr))) { ++ (! AUTH_WRAP(cl->cl_auth, xdrs, xdr_args, args_ptr))) { + if (ct->ct_error.re_status == RPC_SUCCESS) + ct->ct_error.re_status = RPC_CANTENCODEARGS; + (void)xdrrec_endofrecord(xdrs, TRUE); +@@ -420,7 +420,8 @@ call_again: + &reply_msg.acpted_rply.ar_verf)) { + ct->ct_error.re_status = RPC_AUTHERROR; + ct->ct_error.re_why = AUTH_INVALIDRESP; +- } else if (! (*xdr_results)(xdrs, results_ptr)) { ++ } else if (! AUTH_UNWRAP(cl->cl_auth, xdrs, ++ xdr_results, results_ptr)) { + if (ct->ct_error.re_status == RPC_SUCCESS) + ct->ct_error.re_status = RPC_CANTDECODERES; + } +diff --git a/src/svc.c b/src/svc.c +index b4a63d0..08cd6c9 100644 +--- a/src/svc.c ++++ b/src/svc.c +@@ -77,9 +77,6 @@ static struct svc_callout + + extern rwlock_t svc_lock; + extern rwlock_t svc_fd_lock; +-#ifdef HAVE_LIBGSSAPI +-extern struct svc_auth_ops svc_auth_gss_ops; +-#endif + + static struct svc_callout *svc_find (rpcprog_t, rpcvers_t, + struct svc_callout **, char *); +@@ -717,11 +714,9 @@ svc_getreq_common (fd) + SVC_DESTROY (xprt); + break; + } +- else if ((xprt->xp_auth != NULL) +-#ifdef HAVE_LIBGSSAPI +- && (xprt->xp_auth->svc_ah_ops != &svc_auth_gss_ops) +-#endif +- ) { ++ else if ((xprt->xp_auth != NULL) && ++ (xprt->xp_auth->svc_ah_private == NULL)) ++ { + xprt->xp_auth = NULL; + } + } +diff --git a/src/svc_auth.c b/src/svc_auth.c +index c6b3a0b..e80d5f9 100644 +--- a/src/svc_auth.c ++++ b/src/svc_auth.c +@@ -98,8 +98,8 @@ _authenticate(rqst, msg) + rqst->rq_xprt->xp_verf.oa_length = 0; + cred_flavor = rqst->rq_cred.oa_flavor; + switch (cred_flavor) { +- case AUTH_NULL: +- dummy = _svcauth_null(rqst, msg); ++ case AUTH_NONE: ++ dummy = _svcauth_none(rqst, msg); + return (dummy); + case AUTH_SYS: + dummy = _svcauth_unix(rqst, msg); +@@ -132,15 +132,6 @@ _authenticate(rqst, msg) + return (AUTH_REJECTEDCRED); + } + +-/*ARGSUSED*/ +-enum auth_stat +-_svcauth_null(rqst, msg) +- struct svc_req *rqst; +- struct rpc_msg *msg; +-{ +- return (AUTH_OK); +-} +- + /* + * Allow the rpc service to register new authentication types that it is + * prepared to handle. When an authentication flavor is registered, +diff --git a/src/svc_auth_unix.c b/src/svc_auth_unix.c +index ce83859..9585069 100644 +--- a/src/svc_auth_unix.c ++++ b/src/svc_auth_unix.c +@@ -43,6 +43,8 @@ + + #include + ++extern SVCAUTH svc_auth_none; ++ + /* + * Unix longhand authenticator + */ +@@ -67,6 +69,8 @@ _svcauth_unix(rqst, msg) + assert(rqst != NULL); + assert(msg != NULL); + ++ rqst->rq_xprt->xp_auth = &svc_auth_none; ++ + area = (struct area *) rqst->rq_clntcred; + aup = &area->area_aup; + aup->aup_machname = area->area_machname; +@@ -142,5 +146,6 @@ _svcauth_short(rqst, msg) + struct svc_req *rqst; + struct rpc_msg *msg; + { ++ rqst->rq_xprt->xp_auth = &svc_auth_none; + return (AUTH_REJECTEDCRED); + } +diff --git a/src/svc_dg.c b/src/svc_dg.c +index 66a56ee..5ef9df2 100644 +--- a/src/svc_dg.c ++++ b/src/svc_dg.c +@@ -134,6 +134,7 @@ svc_dg_create(fd, sendsize, recvsize) + su->su_cache = NULL; + xprt->xp_fd = fd; + xprt->xp_p2 = su; ++ xprt->xp_auth = NULL; + xprt->xp_verf.oa_base = su->su_verfbody; + svc_dg_ops(xprt); + xprt->xp_rtaddr.maxlen = sizeof (struct sockaddr_storage); +@@ -234,10 +235,27 @@ svc_dg_reply(xprt, msg) + bool_t stat = FALSE; + size_t slen; + ++ xdrproc_t xdr_results; ++ caddr_t xdr_location; ++ bool_t has_args; ++ ++ if (msg->rm_reply.rp_stat == MSG_ACCEPTED && ++ msg->rm_reply.rp_acpt.ar_stat == SUCCESS) { ++ has_args = TRUE; ++ xdr_results = msg->acpted_rply.ar_results.proc; ++ xdr_location = msg->acpted_rply.ar_results.where; ++ ++ msg->acpted_rply.ar_results.proc = (xdrproc_t)xdr_void; ++ msg->acpted_rply.ar_results.where = NULL; ++ } else ++ has_args = FALSE; ++ + xdrs->x_op = XDR_ENCODE; + XDR_SETPOS(xdrs, 0); + msg->rm_xid = su->su_xid; +- if (xdr_replymsg(xdrs, msg)) { ++ if (xdr_replymsg(xdrs, msg) && ++ (!has_args || ++ (SVCAUTH_WRAP(xprt->xp_auth, xdrs, xdr_results, xdr_location)))) { + struct msghdr *msg = &su->su_msghdr; + struct iovec iov; + +@@ -264,7 +282,12 @@ svc_dg_getargs(xprt, xdr_args, args_ptr) + xdrproc_t xdr_args; + void *args_ptr; + { +- return (*xdr_args)(&(su_data(xprt)->su_xdrs), args_ptr); ++ if (! SVCAUTH_UNWRAP(xprt->xp_auth, &(su_data(xprt)->su_xdrs), ++ xdr_args, args_ptr)) { ++ (void)svc_freeargs(xprt, xdr_args, args_ptr); ++ return FALSE; ++ } ++ return TRUE; + } + + static bool_t +@@ -288,6 +311,10 @@ svc_dg_destroy(xprt) + xprt_unregister(xprt); + if (xprt->xp_fd != -1) + (void)close(xprt->xp_fd); ++ if (xprt->xp_auth != NULL) { ++ SVCAUTH_DESTROY(xprt->xp_auth); ++ xprt->xp_auth = NULL; ++ } + XDR_DESTROY(&(su->su_xdrs)); + (void) mem_free(rpc_buffer(xprt), su->su_iosz); + (void) mem_free(su, sizeof (*su)); +diff --git a/src/svc_vc.c b/src/svc_vc.c +index aaaf2d7..74632e2 100644 +--- a/src/svc_vc.c ++++ b/src/svc_vc.c +@@ -172,6 +172,7 @@ svc_vc_create(fd, sendsize, recvsize) + xprt->xp_p1 = r; + xprt->xp_p2 = NULL; + xprt->xp_p3 = NULL; ++ xprt->xp_auth = NULL; + xprt->xp_verf = _null_auth; + svc_vc_rendezvous_ops(xprt); + xprt->xp_port = (u_short)-1; /* It is the rendezvouser */ +@@ -283,6 +284,7 @@ makefd_xprt(fd, sendsize, recvsize) + xdrrec_create(&(cd->xdrs), sendsize, recvsize, + xprt, read_vc, write_vc); + xprt->xp_p1 = cd; ++ xprt->xp_auth = NULL; + xprt->xp_verf.oa_base = cd->verf_body; + svc_vc_ops(xprt); /* truely deals with calls */ + xprt->xp_port = 0; /* this is a connection, not a rendezvouser */ +@@ -412,6 +414,10 @@ __svc_vc_dodestroy(xprt) + XDR_DESTROY(&(cd->xdrs)); + mem_free(cd, sizeof(struct cf_conn)); + } ++ if (xprt->xp_auth != NULL) { ++ SVCAUTH_DESTROY(xprt->xp_auth); ++ xprt->xp_auth = NULL; ++ } + if (xprt->xp_rtaddr.buf) + mem_free(xprt->xp_rtaddr.buf, xprt->xp_rtaddr.maxlen); + if (xprt->xp_ltaddr.buf) +@@ -610,7 +616,11 @@ svc_vc_recv(xprt, msg) + } + + xdrs->x_op = XDR_DECODE; +- (void)xdrrec_skiprecord(xdrs); ++ /* ++ * No need skip records with nonblocking connections ++ */ ++ if (cd->nonblock == FALSE) ++ (void)xdrrec_skiprecord(xdrs); + if (xdr_callmsg(xdrs, msg)) { + cd->x_id = msg->rm_xid; + return (TRUE); +@@ -628,8 +638,13 @@ svc_vc_getargs(xprt, xdr_args, args_ptr) + + assert(xprt != NULL); + /* args_ptr may be NULL */ +- return ((*xdr_args)(&(((struct cf_conn *)(xprt->xp_p1))->xdrs), +- args_ptr)); ++ ++ if (! SVCAUTH_UNWRAP(xprt->xp_auth, ++ &(((struct cf_conn *)(xprt->xp_p1))->xdrs), ++ xdr_args, args_ptr)) { ++ return FALSE; ++ } ++ return TRUE; + } + + static bool_t +@@ -658,15 +673,35 @@ svc_vc_reply(xprt, msg) + XDR *xdrs; + bool_t rstat; + ++ xdrproc_t xdr_results; ++ caddr_t xdr_location; ++ bool_t has_args; ++ + assert(xprt != NULL); + assert(msg != NULL); + + cd = (struct cf_conn *)(xprt->xp_p1); + xdrs = &(cd->xdrs); + ++ if (msg->rm_reply.rp_stat == MSG_ACCEPTED && ++ msg->rm_reply.rp_acpt.ar_stat == SUCCESS) { ++ has_args = TRUE; ++ xdr_results = msg->acpted_rply.ar_results.proc; ++ xdr_location = msg->acpted_rply.ar_results.where; ++ ++ msg->acpted_rply.ar_results.proc = (xdrproc_t)xdr_void; ++ msg->acpted_rply.ar_results.where = NULL; ++ } else ++ has_args = FALSE; ++ + xdrs->x_op = XDR_ENCODE; + msg->rm_xid = cd->x_id; +- rstat = xdr_replymsg(xdrs, msg); ++ rstat = FALSE; ++ if (xdr_replymsg(xdrs, msg) && ++ (!has_args || ++ (SVCAUTH_WRAP(xprt->xp_auth, xdrs, xdr_results, xdr_location)))) { ++ rstat = TRUE; ++ } + (void)xdrrec_endofrecord(xdrs, TRUE); + return (rstat); + } +diff --git a/src/xdr_rec.c b/src/xdr_rec.c +index 4e815d7..2aca623 100644 +--- a/src/xdr_rec.c ++++ b/src/xdr_rec.c +@@ -64,7 +64,6 @@ + #include + #include + #include "rpc_com.h" +-#include + static bool_t xdrrec_getlong(XDR *, long *); + static bool_t xdrrec_putlong(XDR *, const long *); + static bool_t xdrrec_getbytes(XDR *, char *, u_int); +@@ -330,22 +329,22 @@ xdrrec_getpos(xdrs) + RECSTREAM *rstrm = (RECSTREAM *)xdrs->x_private; + off_t pos; + +- pos = lseek((int)(u_long)rstrm->tcp_handle, (off_t)0, 1); +- if (pos != -1) +- switch (xdrs->x_op) { ++ switch (xdrs->x_op) { + +- case XDR_ENCODE: +- pos += rstrm->out_finger - rstrm->out_base; +- break; ++ case XDR_ENCODE: ++ pos = rstrm->out_finger - rstrm->out_base ++ - BYTES_PER_XDR_UNIT; ++ break; + +- case XDR_DECODE: +- pos -= rstrm->in_boundry - rstrm->in_finger; +- break; ++ case XDR_DECODE: ++ pos = rstrm->in_boundry - rstrm->in_finger ++ - BYTES_PER_XDR_UNIT; ++ break; + +- default: +- pos = (off_t) -1; +- break; +- } ++ default: ++ pos = (off_t) -1; ++ break; ++ } + return ((u_int) pos); + } + +diff --git a/tirpc/rpc/auth.h b/tirpc/rpc/auth.h +index 734e6b9..5f66e67 100644 +--- a/tirpc/rpc/auth.h ++++ b/tirpc/rpc/auth.h +@@ -203,8 +203,22 @@ typedef struct __auth { + + } *ah_ops; + void *ah_private; ++ int ah_refcnt; + } AUTH; + ++static __inline int ++auth_get(AUTH *auth) ++{ ++ return __sync_add_and_fetch(&auth->ah_refcnt, 1); ++} ++ ++static __inline int ++auth_put(AUTH *auth) ++{ ++ return __sync_sub_and_fetch(&auth->ah_refcnt, 1); ++} ++ ++ + + /* + * Authentication ops. +@@ -234,10 +248,23 @@ typedef struct __auth { + #define auth_refresh(auth, msg) \ + ((*((auth)->ah_ops->ah_refresh))(auth, msg)) + +-#define AUTH_DESTROY(auth) \ +- ((*((auth)->ah_ops->ah_destroy))(auth)) +-#define auth_destroy(auth) \ +- ((*((auth)->ah_ops->ah_destroy))(auth)) ++#define AUTH_DESTROY(auth) \ ++ do { \ ++ int refs; \ ++ if ((refs = auth_put((auth))) == 0) \ ++ ((*((auth)->ah_ops->ah_destroy))(auth));\ ++ log_debug("%s: auth_put(), refs %d\n", \ ++ __func__, refs); \ ++ } while (0) ++ ++#define auth_destroy(auth) \ ++ do { \ ++ int refs; \ ++ if ((refs = auth_put((auth))) == 0) \ ++ ((*((auth)->ah_ops->ah_destroy))(auth));\ ++ log_debug("%s: auth_put(), refs %d\n", \ ++ __func__, refs); \ ++ } while (0) + + #define AUTH_WRAP(auth, xdrs, xfunc, xwhere) \ + ((*((auth)->ah_ops->ah_wrap))(auth, xdrs, \ +@@ -373,7 +400,7 @@ __END_DECLS + __BEGIN_DECLS + struct svc_req; + struct rpc_msg; +-enum auth_stat _svcauth_null (struct svc_req *, struct rpc_msg *); ++enum auth_stat _svcauth_none (struct svc_req *, struct rpc_msg *); + enum auth_stat _svcauth_short (struct svc_req *, struct rpc_msg *); + enum auth_stat _svcauth_unix (struct svc_req *, struct rpc_msg *); + __END_DECLS +diff --git a/tirpc/rpc/des.h b/tirpc/rpc/des.h +index e3d6897..d2881ad 100644 +--- a/tirpc/rpc/des.h ++++ b/tirpc/rpc/des.h +@@ -33,6 +33,9 @@ + * Copyright (c) 1986 by Sun Microsystems, Inc. + */ + ++#ifndef _RPC_DES_H_ ++#define _RPC_DES_H_ ++ + #define DES_MAXLEN 65536 /* maximum # of bytes to encrypt */ + #define DES_QUICKLEN 16 /* maximum # of bytes to encrypt quickly */ + +@@ -80,3 +83,5 @@ struct desparams { + * Software DES. + */ + extern int _des_crypt( char *, int, struct desparams * ); ++ ++#endif +diff --git a/tirpc/rpc/svc_auth.h b/tirpc/rpc/svc_auth.h +index 659e90c..14269d1 100644 +--- a/tirpc/rpc/svc_auth.h ++++ b/tirpc/rpc/svc_auth.h +@@ -44,17 +44,23 @@ + /* + * Interface to server-side authentication flavors. + */ +-typedef struct { ++typedef struct SVCAUTH { + struct svc_auth_ops { +- int (*svc_ah_wrap)(void); +- int (*svc_ah_unwrap)(void); +- int (*svc_ah_destroy)(void); ++ int (*svc_ah_wrap)(struct SVCAUTH *, XDR *, xdrproc_t, ++ caddr_t); ++ int (*svc_ah_unwrap)(struct SVCAUTH *, XDR *, xdrproc_t, ++ caddr_t); ++ int (*svc_ah_destroy)(struct SVCAUTH *); + } *svc_ah_ops; + caddr_t svc_ah_private; + } SVCAUTH; + +-#define SVCAUTH_DESTROY(cred) ((*(cred)->svc_ah_ops->svc_ah_destroy)()) +-#define svcauth_destroy(cred) ((*(cred)->svc_ah_ops->svc_ah_destroy)()) ++#define SVCAUTH_WRAP(auth, xdrs, xfunc, xwhere) \ ++ ((*((auth)->svc_ah_ops->svc_ah_wrap))(auth, xdrs, xfunc, xwhere)) ++#define SVCAUTH_UNWRAP(auth, xdrs, xfunc, xwhere) \ ++ ((*((auth)->svc_ah_ops->svc_ah_unwrap))(auth, xdrs, xfunc, xwhere)) ++#define SVCAUTH_DESTROY(auth) \ ++ ((*((auth)->svc_ah_ops->svc_ah_destroy))(auth)) + + /* + * Server side authenticator diff --git a/packages/network/libtirpc/patches/libtirpc-0.2.2-wrap-segfault.patch b/packages/network/libtirpc/patches/libtirpc-0.2.2-wrap-segfault.patch new file mode 100644 index 0000000000..8a04c16de4 --- /dev/null +++ b/packages/network/libtirpc/patches/libtirpc-0.2.2-wrap-segfault.patch @@ -0,0 +1,28 @@ +diff -up libtirpc-0.2.2/src/svc_dg.c.orig libtirpc-0.2.2/src/svc_dg.c +--- libtirpc-0.2.2/src/svc_dg.c.orig 2011-07-19 15:02:41.087631000 -0400 ++++ libtirpc-0.2.2/src/svc_dg.c 2011-07-19 15:04:43.154243000 -0400 +@@ -254,8 +254,8 @@ svc_dg_reply(xprt, msg) + XDR_SETPOS(xdrs, 0); + msg->rm_xid = su->su_xid; + if (xdr_replymsg(xdrs, msg) && +- (!has_args || +- (SVCAUTH_WRAP(xprt->xp_auth, xdrs, xdr_results, xdr_location)))) { ++ (!has_args || (xprt->xp_auth && ++ SVCAUTH_WRAP(xprt->xp_auth, xdrs, xdr_results, xdr_location)))) { + struct msghdr *msg = &su->su_msghdr; + struct iovec iov; + +diff -up libtirpc-0.2.2/src/svc_vc.c.orig libtirpc-0.2.2/src/svc_vc.c +--- libtirpc-0.2.2/src/svc_vc.c.orig 2011-07-19 15:05:28.577588000 -0400 ++++ libtirpc-0.2.2/src/svc_vc.c 2011-07-19 15:05:40.058928000 -0400 +@@ -698,8 +698,8 @@ svc_vc_reply(xprt, msg) + msg->rm_xid = cd->x_id; + rstat = FALSE; + if (xdr_replymsg(xdrs, msg) && +- (!has_args || +- (SVCAUTH_WRAP(xprt->xp_auth, xdrs, xdr_results, xdr_location)))) { ++ (!has_args || (xprt->xp_auth && ++ SVCAUTH_WRAP(xprt->xp_auth, xdrs, xdr_results, xdr_location)))) { + rstat = TRUE; + } + (void)xdrrec_endofrecord(xdrs, TRUE); From 0f8417735087e74eafe40ea5834670394bb618e8 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 10 Nov 2011 04:50:44 +0100 Subject: [PATCH 67/89] new package: add package 'libgssglue' Signed-off-by: Stephan Raue --- packages/network/libgssglue/build | 37 +++++++++++++++++++++++++++++ packages/network/libgssglue/install | 26 ++++++++++++++++++++ packages/network/libgssglue/meta | 36 ++++++++++++++++++++++++++++ 3 files changed, 99 insertions(+) create mode 100755 packages/network/libgssglue/build create mode 100755 packages/network/libgssglue/install create mode 100644 packages/network/libgssglue/meta diff --git a/packages/network/libgssglue/build b/packages/network/libgssglue/build new file mode 100755 index 0000000000..863198b42a --- /dev/null +++ b/packages/network/libgssglue/build @@ -0,0 +1,37 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +. config/options $1 + +cd $PKG_BUILD +ac_cv_func_realloc_0_nonnull=yes \ +ac_cv_func_malloc_0_nonnull=yes \ +./configure --host=$TARGET_NAME \ + --build=$HOST_NAME \ + --prefix=/usr \ + --sysconfdir=/etc \ + --disable-static \ + --enable-shared \ + --with-gnu-ld + +make +$MAKEINSTALL diff --git a/packages/network/libgssglue/install b/packages/network/libgssglue/install new file mode 100755 index 0000000000..d4f74e8383 --- /dev/null +++ b/packages/network/libgssglue/install @@ -0,0 +1,26 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +. config/options $1 + +mkdir -p $INSTALL/usr/lib + cp $PKG_BUILD/src/.libs/*.so* $INSTALL/usr/lib diff --git a/packages/network/libgssglue/meta b/packages/network/libgssglue/meta new file mode 100644 index 0000000000..a1b011d49c --- /dev/null +++ b/packages/network/libgssglue/meta @@ -0,0 +1,36 @@ +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +PKG_NAME="libgssglue" +PKG_VERSION="0.3" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="GPL" +PKG_SITE="http://www.citi.umich.edu/projects/nfsv4/linux/libgssglue/" +PKG_URL="http://www.citi.umich.edu/projects/nfsv4/linux/libgssglue/$PKG_NAME-$PKG_VERSION.tar.gz" +PKG_DEPENDS="" +PKG_BUILD_DEPENDS="toolchain" +PKG_PRIORITY="optional" +PKG_SECTION="network" +PKG_SHORTDESC="libgssglue: a library which exports a gssapi interface, but doesn't implement any gssapi mechanisms itself" +PKG_LONGDESC="libgssglue is a library which exports a gssapi interface, but doesn't implement any gssapi mechanisms itself; instead it calls gssapi routines in other libraries, depending on the mechanism." +PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" From 19545b6b543ca9764675adc118f1a7742edae8ff Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 10 Nov 2011 04:51:34 +0100 Subject: [PATCH 68/89] new package: add package 'rpcbind' Signed-off-by: Stephan Raue --- packages/network/rpcbind/build | 36 + packages/network/rpcbind/init.d/22_rpcbind | 26 + packages/network/rpcbind/install | 27 + packages/network/rpcbind/meta | 36 + .../rpcbind-0.2.0-001-rpcbind-0.2.1rc3.patch | 1054 +++++++++++++++++ 5 files changed, 1179 insertions(+) create mode 100755 packages/network/rpcbind/build create mode 100644 packages/network/rpcbind/init.d/22_rpcbind create mode 100755 packages/network/rpcbind/install create mode 100644 packages/network/rpcbind/meta create mode 100644 packages/network/rpcbind/patches/rpcbind-0.2.0-001-rpcbind-0.2.1rc3.patch diff --git a/packages/network/rpcbind/build b/packages/network/rpcbind/build new file mode 100755 index 0000000000..d38081ff5e --- /dev/null +++ b/packages/network/rpcbind/build @@ -0,0 +1,36 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +. config/options $1 + +cd $PKG_BUILD +./configure --host=$TARGET_NAME \ + --build=$HOST_NAME \ + --prefix=/usr \ + --sysconfdir=/etc \ + --enable-warmstarts \ + --disable-libwrap \ + --with-statedir=/tmp \ + --with-rpcuser=root \ + +make +$MAKEINSTALL diff --git a/packages/network/rpcbind/init.d/22_rpcbind b/packages/network/rpcbind/init.d/22_rpcbind new file mode 100644 index 0000000000..4bca01420f --- /dev/null +++ b/packages/network/rpcbind/init.d/22_rpcbind @@ -0,0 +1,26 @@ +################################################################################ +# Copyright (C) 2009-2010 OpenELEC.tv +# http://www.openelec.tv +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +# start rpcbind daemon +# +# runlevels: openelec, textmode + +progress "start rpcbind daemon" + rpcbind \ No newline at end of file diff --git a/packages/network/rpcbind/install b/packages/network/rpcbind/install new file mode 100755 index 0000000000..b155f0e712 --- /dev/null +++ b/packages/network/rpcbind/install @@ -0,0 +1,27 @@ +#!/bin/sh + +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +. config/options $1 + +mkdir -p $INSTALL/usr/bin + cp $PKG_BUILD/rpcbind $INSTALL/usr/bin + cp $PKG_BUILD/rpcinfo $INSTALL/usr/bin diff --git a/packages/network/rpcbind/meta b/packages/network/rpcbind/meta new file mode 100644 index 0000000000..e570f477b6 --- /dev/null +++ b/packages/network/rpcbind/meta @@ -0,0 +1,36 @@ +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +PKG_NAME="rpcbind" +PKG_VERSION="0.2.0" +PKG_REV="1" +PKG_ARCH="any" +PKG_LICENSE="OSS" +PKG_SITE="http://rpcbind.sourceforge.net/" +PKG_URL="$SOURCEFORGE_SRC/rpcbind/rpcbind/$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.bz2" +PKG_DEPENDS="libtirpc" +PKG_BUILD_DEPENDS="toolchain libtirpc" +PKG_PRIORITY="optional" +PKG_SECTION="network" +PKG_SHORTDESC="rpcbind: a server that converts RPC program numbers into universal addresses." +PKG_LONGDESC="The rpcbind utility is a server that converts RPC program numbers into universal addresses." +PKG_IS_ADDON="no" + +PKG_AUTORECONF="yes" diff --git a/packages/network/rpcbind/patches/rpcbind-0.2.0-001-rpcbind-0.2.1rc3.patch b/packages/network/rpcbind/patches/rpcbind-0.2.0-001-rpcbind-0.2.1rc3.patch new file mode 100644 index 0000000000..ff46f67a35 --- /dev/null +++ b/packages/network/rpcbind/patches/rpcbind-0.2.0-001-rpcbind-0.2.1rc3.patch @@ -0,0 +1,1054 @@ +diff --git a/.gitignore b/.gitignore +index 5a7546c..bee4bab 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -1,3 +1,4 @@ ++INSTALL + Makefile + Makefile.in + aclocal.m4 +@@ -13,18 +14,14 @@ depcomp + install-sh + libtool + ltmain.sh +-man/Makefile +-man/Makefile.in + missing +-src/.deps/ +-src/Makefile +-src/Makefile.in + src/config.h + src/stamp-h2 + stamp-h1 + # file generated during compilation ++.deps + *.o +-src/rpcbind +-src/rpcinfo ++rpcbind ++rpcinfo + # cscope database files + cscope.* +diff --git a/INSTALL b/INSTALL +index 98e5d87..7d1c323 100644 +--- a/INSTALL ++++ b/INSTALL +@@ -1,32 +1,25 @@ +-Copyright 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software +-Foundation, Inc. ++Installation Instructions ++************************* + +- This file is free documentation; the Free Software Foundation gives +-unlimited permission to copy, distribute and modify it. +- +- +-rpcbind Quick Installation +-========================== +- +-$ ./configure +-$ make +-# make install +- +- The install phase will install the rpcbind and rpcinfo commands +-under /usr/bin. If you wish they replace the basic portmap and +-rpcinfo commands, you can run: +- +-# mv /sbin/portmap /sbin/portmap.sav +-# ln -s /usr/bin/rpcbind /sbin/portmap +- +-# mv /usr/sbin/rpcinfo /usr/sbin/rpcinfo.sav +-# ln -s /usr/bin/rpcinfo /usr/sbin/rpcinfo ++Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, ++2006, 2007, 2008, 2009 Free Software Foundation, Inc. + ++ Copying and distribution of this file, with or without modification, ++are permitted in any medium without royalty provided the copyright ++notice and this notice are preserved. This file is offered as-is, ++without warranty of any kind. + + Basic Installation + ================== + +- These are generic installation instructions. ++ Briefly, the shell commands `./configure; make; make install' should ++configure, build, and install this package. The following ++more-detailed instructions are generic; see the `README' file for ++instructions specific to this package. Some packages provide this ++`INSTALL' file but do not implement all of the features documented ++below. The lack of an optional feature in a given package is not ++necessarily a bug. More recommendations for GNU packages can be found ++in *note Makefile Conventions: (standards)Makefile Conventions. + + The `configure' shell script attempts to guess correct values for + various system-dependent variables used during compilation. It uses +@@ -39,9 +32,9 @@ debugging `configure'). + + It can also use an optional file (typically called `config.cache' + and enabled with `--cache-file=config.cache' or simply `-C') that saves +-the results of its tests to speed up reconfiguring. (Caching is ++the results of its tests to speed up reconfiguring. Caching is + disabled by default to prevent problems with accidental use of stale +-cache files.) ++cache files. + + If you need to do unusual things to compile the package, please try + to figure out how `configure' could check whether to do them, and mail +@@ -51,30 +44,37 @@ some point `config.cache' contains results you don't want to keep, you + may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +-`configure' by a program called `autoconf'. You only need +-`configure.ac' if you want to change it or regenerate `configure' using +-a newer version of `autoconf'. ++`configure' by a program called `autoconf'. You need `configure.ac' if ++you want to change it or regenerate `configure' using a newer version ++of `autoconf'. + +-The simplest way to compile this package is: ++ The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type +- `./configure' to configure the package for your system. If you're +- using `csh' on an old version of System V, you might need to type +- `sh ./configure' instead to prevent `csh' from trying to execute +- `configure' itself. ++ `./configure' to configure the package for your system. + +- Running `configure' takes awhile. While running, it prints some +- messages telling which features it is checking for. ++ Running `configure' might take a while. While running, it prints ++ some messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with +- the package. ++ the package, generally using the just-built uninstalled binaries. + + 4. Type `make install' to install the programs and any data files and +- documentation. +- +- 5. You can remove the program binaries and object files from the ++ documentation. When installing into a prefix owned by root, it is ++ recommended that the package be configured and built as a regular ++ user, and only the `make install' phase executed with root ++ privileges. ++ ++ 5. Optionally, type `make installcheck' to repeat any self-tests, but ++ this time using the binaries in their final installed location. ++ This target does not install anything. Running this target as a ++ regular user, particularly if the prior `make install' required ++ root privileges, verifies that the installation completed ++ correctly. ++ ++ 6. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is +@@ -83,6 +83,16 @@ The simplest way to compile this package is: + all sorts of other programs in order to regenerate files that came + with the distribution. + ++ 7. Often, you can also type `make uninstall' to remove the installed ++ files again. In practice, not all packages have tested that ++ uninstallation works correctly, even though it is required by the ++ GNU Coding Standards. ++ ++ 8. Some packages, particularly those that use Automake, provide `make ++ distcheck', which can by used by developers to test that all other ++ targets like `make install' and `make uninstall' work correctly. ++ This target is generally not run by end users. ++ + Compilers and Options + ===================== + +@@ -94,7 +104,7 @@ for details on some of the pertinent environment variables. + by setting variables in the command line or in the environment. Here + is an example: + +- ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix ++ ./configure CC=c99 CFLAGS=-g LIBS=-lposix + + *Note Defining Variables::, for more details. + +@@ -103,44 +113,89 @@ Compiling For Multiple Architectures + + You can compile the package for more than one kind of computer at the + same time, by placing the object files for each architecture in their +-own directory. To do this, you must use a version of `make' that +-supports the `VPATH' variable, such as GNU `make'. `cd' to the ++own directory. To do this, you can use GNU `make'. `cd' to the + directory where you want the object files and executables to go and run + the `configure' script. `configure' automatically checks for the +-source code in the directory that `configure' is in and in `..'. ++source code in the directory that `configure' is in and in `..'. This ++is known as a "VPATH" build. + +- If you have to use a `make' that does not support the `VPATH' +-variable, you have to compile the package for one architecture at a +-time in the source code directory. After you have installed the +-package for one architecture, use `make distclean' before reconfiguring +-for another architecture. ++ With a non-GNU `make', it is safer to compile the package for one ++architecture at a time in the source code directory. After you have ++installed the package for one architecture, use `make distclean' before ++reconfiguring for another architecture. ++ ++ On MacOS X 10.5 and later systems, you can create libraries and ++executables that work on multiple system types--known as "fat" or ++"universal" binaries--by specifying multiple `-arch' options to the ++compiler but only a single `-arch' option to the preprocessor. Like ++this: ++ ++ ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ ++ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ ++ CPP="gcc -E" CXXCPP="g++ -E" ++ ++ This is not guaranteed to produce working output in all cases, you ++may have to build one architecture at a time and combine the results ++using the `lipo' tool if you have problems. + + Installation Names + ================== + +- By default, `make install' will install the package's files in +-`/usr/local/bin', `/usr/local/man', etc. You can specify an +-installation prefix other than `/usr/local' by giving `configure' the +-option `--prefix=PATH'. ++ By default, `make install' installs the package's commands under ++`/usr/local/bin', include files under `/usr/local/include', etc. You ++can specify an installation prefix other than `/usr/local' by giving ++`configure' the option `--prefix=PREFIX', where PREFIX must be an ++absolute file name. + + You can specify separate installation prefixes for + architecture-specific files and architecture-independent files. If you +-give `configure' the option `--exec-prefix=PATH', the package will use +-PATH as the prefix for installing programs and libraries. +-Documentation and other data files will still use the regular prefix. ++pass the option `--exec-prefix=PREFIX' to `configure', the package uses ++PREFIX as the prefix for installing programs and libraries. ++Documentation and other data files still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +-options like `--bindir=PATH' to specify different values for particular ++options like `--bindir=DIR' to specify different values for particular + kinds of files. Run `configure --help' for a list of the directories +-you can set and what kinds of files go in them. ++you can set and what kinds of files go in them. In general, the ++default for these options is expressed in terms of `${prefix}', so that ++specifying just `--prefix' will affect all of the other directory ++specifications that were not explicitly provided. ++ ++ The most portable way to affect installation locations is to pass the ++correct locations to `configure'; however, many packages provide one or ++both of the following shortcuts of passing variable assignments to the ++`make install' command line to change installation locations without ++having to reconfigure or recompile. ++ ++ The first method involves providing an override variable for each ++affected directory. For example, `make install ++prefix=/alternate/directory' will choose an alternate location for all ++directory configuration variables that were expressed in terms of ++`${prefix}'. Any directories that were specified during `configure', ++but not in terms of `${prefix}', must each be overridden at install ++time for the entire installation to be relocated. The approach of ++makefile variable overrides for each directory variable is required by ++the GNU Coding Standards, and ideally causes no recompilation. ++However, some platforms have known limitations with the semantics of ++shared libraries that end up requiring recompilation when using this ++method, particularly noticeable in packages that use GNU Libtool. ++ ++ The second method involves providing the `DESTDIR' variable. For ++example, `make install DESTDIR=/alternate/directory' will prepend ++`/alternate/directory' before all installation names. The approach of ++`DESTDIR' overrides is not required by the GNU Coding Standards, and ++does not work on platforms that have drive letters. On the other hand, ++it does better at avoiding recompilation issues, and works well even ++when some directory options were not specified in terms of `${prefix}' ++at `configure' time. ++ ++Optional Features ++================= + + If the package supports it, you can cause programs to be installed + with an extra prefix or suffix on their names by giving `configure' the + option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +-Optional Features +-================= +- + Some packages pay attention to `--enable-FEATURE' options to + `configure', where FEATURE indicates an optional part of the package. + They may also pay attention to `--with-PACKAGE' options, where PACKAGE +@@ -153,6 +208,45 @@ find the X include and library files automatically, but if it doesn't, + you can use the `configure' options `--x-includes=DIR' and + `--x-libraries=DIR' to specify their locations. + ++ Some packages offer the ability to configure how verbose the ++execution of `make' will be. For these packages, running `./configure ++--enable-silent-rules' sets the default to minimal output, which can be ++overridden with `make V=1'; while running `./configure ++--disable-silent-rules' sets the default to verbose, which can be ++overridden with `make V=0'. ++ ++Particular systems ++================== ++ ++ On HP-UX, the default C compiler is not ANSI C compatible. If GNU ++CC is not installed, it is recommended to use the following options in ++order to use an ANSI C compiler: ++ ++ ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" ++ ++and if that doesn't work, install pre-built binaries of GCC for HP-UX. ++ ++ On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot ++parse its `' header file. The option `-nodtk' can be used as ++a workaround. If GNU CC is not installed, it is therefore recommended ++to try ++ ++ ./configure CC="cc" ++ ++and if that doesn't work, try ++ ++ ./configure CC="cc -nodtk" ++ ++ On Solaris, don't put `/usr/ucb' early in your `PATH'. This ++directory contains several dysfunctional programs; working variants of ++these programs are available in `/usr/bin'. So, if you need `/usr/ucb' ++in your `PATH', put it _after_ `/usr/bin'. ++ ++ On Haiku, software installed for all users goes in `/boot/common', ++not `/usr/local'. It is recommended to use the following options: ++ ++ ./configure --prefix=/boot/common ++ + Specifying the System Type + ========================== + +@@ -168,14 +262,15 @@ type, such as `sun4', or a canonical name which has the form: + + where SYSTEM can have one of these forms: + +- OS KERNEL-OS ++ OS ++ KERNEL-OS + + See the file `config.sub' for the possible values of each field. If + `config.sub' isn't included in this package, then this package doesn't + need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +-use the `--target=TYPE' option to select the type of system they will ++use the option `--target=TYPE' to select the type of system they will + produce code for. + + If you want to _use_ a cross compiler, that generates code for a +@@ -205,9 +300,14 @@ them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +-will cause the specified gcc to be used as the C compiler (unless it is ++causes the specified `gcc' to be used as the C compiler (unless it is + overridden in the site shell script). + ++Unfortunately, this technique does not work for `CONFIG_SHELL' due to ++an Autoconf bug. Until the bug is fixed you can use this workaround: ++ ++ CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash ++ + `configure' Invocation + ====================== + +@@ -216,7 +316,14 @@ operates. + + `--help' + `-h' +- Print a summary of the options to `configure', and exit. ++ Print a summary of all of the options to `configure', and exit. ++ ++`--help=short' ++`--help=recursive' ++ Print a summary of the options unique to this package's ++ `configure', and exit. The `short' variant lists options used ++ only in the top level, while the `recursive' variant lists options ++ also present in any nested packages. + + `--version' + `-V' +@@ -243,6 +350,16 @@ operates. + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + ++`--prefix=DIR' ++ Use DIR as the installation prefix. *note Installation Names:: ++ for more details, including other options available for fine-tuning ++ the installation locations. ++ ++`--no-create' ++`-n' ++ Run the configure checks, but stop before creating any output ++ files. ++ + `configure' also accepts some other, not widely useful, options. Run + `configure --help' for more details. + +diff --git a/Makefile.am b/Makefile.am +index cd56148..9fa608e 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -1,2 +1,44 @@ +-SUBDIRS= src man ++AM_CPPFLAGS = \ ++ -DCHECK_LOCAL \ ++ -DPORTMAP \ ++ -DFACILITY=LOG_MAIL \ ++ -DSEVERITY=LOG_INFO \ ++ -DINET6 \ ++ -DRPCBIND_STATEDIR="\"$(statedir)\"" \ ++ -DRPCUSER="\"$(rpcuser)\"" \ ++ -D_GNU_SOURCE \ ++ $(TIRPC_CFLAGS) + ++if DEBUG ++AM_CPPFLAGS += -DRPCBIND_DEBUG -DSVC_RUN_DEBUG -DDEBUG_RMTCALL ++AM_CPPFLAGS += -DND_DEBUG -DBIND_DEBUG ++endif ++ ++if WARMSTART ++AM_CPPFLAGS += -DWARMSTART ++endif ++ ++if LIBWRAP ++AM_CPPFLAGS += -DLIBWRAP ++endif ++ ++bin_PROGRAMS = rpcbind rpcinfo ++ ++rpcbind_SOURCES = \ ++ src/check_bound.c \ ++ src/pmap_svc.c \ ++ src/rpcb_stat.c \ ++ src/rpcb_svc.c \ ++ src/rpcb_svc_4.c \ ++ src/rpcb_svc_com.c \ ++ src/rpcbind.c \ ++ src/rpcbind.h \ ++ src/security.c \ ++ src/util.c \ ++ src/warmstart.c ++rpcbind_LDADD = $(TIRPC_LIBS) ++ ++rpcinfo_SOURCES = src/rpcinfo.c ++rpcinfo_LDADD = $(TIRPC_LIBS) ++ ++dist_man8_MANS = man/rpcbind.8 man/rpcinfo.8 +diff --git a/autogen.sh b/autogen.sh +index 1613b6d..761db90 100755 +--- a/autogen.sh ++++ b/autogen.sh +@@ -36,7 +36,7 @@ if test x"${1}" = x"clean"; then + fi + + aclocal +-libtoolize --force --copy +-autoheader ++#libtoolize --force --copy ++#autoheader + automake --add-missing --copy --gnu # -Wall + autoconf # -Wall +diff --git a/configure.in b/configure.in +index de1c730..2b67720 100644 +--- a/configure.in ++++ b/configure.in +@@ -1,66 +1,39 @@ +- AC_INIT(rpcbind, 0.2.0) ++AC_INIT(rpcbind, 0.2.0) + +- AM_INIT_AUTOMAKE +-# AM_MAINTAINER_MODE ++AM_INIT_AUTOMAKE + AC_CONFIG_SRCDIR([src/rpcbind.c]) +- AC_PROG_CC +- AM_CONFIG_HEADER(config.h) +- AC_HEADER_DIRENT +- AC_PREFIX_DEFAULT(/usr) +- +-AC_CONFIG_SRCDIR([src/config.h.in]) +-AC_CONFIG_HEADERS([src/config.h]) +- +-AC_PROG_LIBTOOL +- +-AC_ARG_ENABLE(debug,[ --enable-debug Turns on rpcbind debugging], +- [case "${enableval}" in +- yes) debug=true ;; +- no) debug=no ;; +- *) AC_MSG_ERROR(bad value ${enableval} for --enable-debug) ;; +- esac],[debug=false]) +-AM_CONDITIONAL(DEBUG, test x$debug = xtrue) +- +-AC_ARG_ENABLE(warmstarts,[ --enable-warmstarts Enables Warm Starts], +- [case "${enableval}" in +- yes) warmstarts=true ;; +- no) warmstarts=no ;; +- *) AC_MSG_ERROR(bad value ${enableval} for --enable-warmstarts) ;; +- esac],[warmstarts=false]) +-AM_CONDITIONAL(WARMSTART, test x$warmstarts = xtrue) +- +-if test "$warmstarts" = "true" ; then +- AC_ARG_WITH(statedir, +- [ --with-statedir=/foo use state dir /foo [/tmp]], +- statedir=$withval, +- statedir=/tmp) +- AC_SUBST(statedir) +- AC_DEFINE_UNQUOTED(RPCBIND_STATEDIR, "$statedir", [This defines the location where the state files will be kept for warm starts]) +-fi +-AC_ARG_WITH(rpcuser, +- [ --with-rpcuser=user uid to use [root]], +- rpcuser=$withval, +- rpcuser=root) +- AC_SUBST(rpcuser) +-AC_DEFINE_UNQUOTED(RPCBIND_USER, "$rpcuser", [This defines the uid to run as]) ++AC_PREFIX_DEFAULT(/usr) ++AC_PROG_CC ++ ++AC_ARG_ENABLE([libwrap], ++ AS_HELP_STRING([--enable-libwrap], [Enables host name checking through tcpd @<:@default=no@:>@])) ++AM_CONDITIONAL(LIBWRAP, test x$enable_libwrap = xyes) ++ ++AC_ARG_ENABLE([debug], ++ AS_HELP_STRING([--enable-debug], [Turns on rpcbind debugging @<:@default=no@:>@])) ++AM_CONDITIONAL(DEBUG, test x$enable_debug = xyes) ++ ++AC_ARG_ENABLE([warmstarts], ++ AS_HELP_STRING([--enable-warmstarts], [Enables Warm Starts @<:@default=no@:>@])) ++AM_CONDITIONAL(WARMSTART, test x$enable_warmstarts = xyes) ++ ++AC_ARG_WITH([statedir], ++ AS_HELP_STRING([--with-statedir=ARG], [use ARG as state dir @<:@default=/tmp@:>@]) ++ ,, [with_statedir=/tmp]) ++AC_SUBST([statedir], [$with_statedir]) ++ ++AC_ARG_WITH([rpcuser], ++ AS_HELP_STRING([--with-rpcuser=ARG], [use ARG for RPC @<:@default=root@:>@]), ++ ,, [with_rpcuser=root]) ++AC_SUBST([rpcuser], [$with_rpcuser]) ++ ++PKG_CHECK_MODULES([TIRPC], [libtirpc]) + +-AC_CHECK_HEADERS([arpa/inet.h fcntl.h netdb.h \ +- netinet/in.h stdlib.h string.h \ +- sys/param.h sys/socket.h \ +- sys/time.h syslog.h \ +- unistd.h nss.h]) ++AS_IF([test x$enable_libwrap = xyes], [ ++ AC_CHECK_LIB([wrap], [hosts_access], , ++ AC_MSG_ERROR([libwrap support requested but unable to find libwrap])) ++]) + +-AC_CHECK_LIB([pthread], [pthread_create]) +-AC_CHECK_LIB([tirpc], [clnt_create]) +-AC_ARG_ENABLE(libwrap,[ --enable-libwrap Enables host name checking], +- [case "${enableval}" in +- yes) libwarp=true +- AC_CHECK_LIB([wrap], [hosts_access]) ;; +- no) libwarp=no ;; +- *) AC_MSG_ERROR(bad value ${enableval} for --enable-libwrap) ;; +- esac],[libwarp=false]) +-AM_CONDITIONAL(LIBWRAP, test x$libwarp = xtrue) ++AC_SEARCH_LIBS([pthread_create], [pthread]) + +-AC_CONFIG_FILES([Makefile src/Makefile man/Makefile]) +-AC_OUTPUT() +- ++AC_OUTPUT([Makefile]) +diff --git a/man/Makefile.am b/man/Makefile.am +deleted file mode 100644 +index 84818e9..0000000 +--- a/man/Makefile.am ++++ /dev/null +@@ -1,2 +0,0 @@ +-man8_MANS = rpcbind.8 +-EXTRA_DIST = $(man8_MANS) +diff --git a/man/rpcbind.8 b/man/rpcbind.8 +index 32806d4..c5b8fb7 100644 +--- a/man/rpcbind.8 ++++ b/man/rpcbind.8 +@@ -82,6 +82,8 @@ during operation, and will abort on certain errors if + is also specified. + With this option, the name-to-address translation consistency + checks are shown in detail. ++.It Fl f ++Do not fork and become a background process. + .It Fl h + Specify specific IP addresses to bind to for UDP requests. + This option +diff --git a/src/Makefile.am b/src/Makefile.am +deleted file mode 100644 +index cc0a85b..0000000 +--- a/src/Makefile.am ++++ /dev/null +@@ -1,34 +0,0 @@ +-INCLUDES = -I$(srcdir)/tirpc -DPORTMAP -DINET6 -DVERSION="\"$(VERSION)\"" \ +- -D_GNU_SOURCE -Wall -pipe +-if DEBUG +-INCLUDES += -DRPCBIND_DEBUG -DSVC_RUN_DEBUG -DDEBUG_RMTCALL +-INCLUDES += -DND_DEBUG -DBIND_DEBUG +-endif +- +-if WARMSTART +-INCLUDES += -DWARMSTART +-endif +- +-if LIBWRAP +-INCLUDES += -DLIBWRAP +-endif +- +- +-bin_PROGRAMS = rpcbind rpcinfo +- +-rpcbind_SOURCES = check_bound.c rpcbind.c \ +- rpcb_svc_4.c rpcb_svc_com.c \ +- util.c pmap_svc.c rpcb_stat.c \ +- rpcb_svc.c security.c warmstart.c \ +- rpcbind.h +- +-rpcinfo_SOURCES = rpcinfo.c +-rpcinfo_LDFLAGS = -lpthread -ltirpc +-rpcinfo_LDADD = $(LIB_TIRPC) +- +- +-rpcbind_LDFLAGS = -lpthread -ltirpc +-rpcbind_LDADD = $(LIB_TIRPC) +-AM_CPPFLAGS = -I/usr/include/tirpc -DCHECK_LOCAL -DPORTMAP \ +- -DFACILITY=LOG_MAIL -DSEVERITY=LOG_INFO +- +diff --git a/src/config.h.in b/src/config.h.in +deleted file mode 100644 +index 67a0e39..0000000 +--- a/src/config.h.in ++++ /dev/null +@@ -1,105 +0,0 @@ +-/* config.h.in. Generated from configure.in by autoheader. */ +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_ARPA_INET_H +- +-/* Define to 1 if you have the header file, and it defines `DIR'. +- */ +-#undef HAVE_DIRENT_H +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_FCNTL_H +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_INTTYPES_H +- +-/* Define to 1 if you have the `pthread' library (-lpthread). */ +-#undef HAVE_LIBPTHREAD +- +-/* Define to 1 if you have the `tirpc' library (-ltirpc). */ +-#undef HAVE_LIBTIRPC +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_MEMORY_H +- +-/* Define to 1 if you have the header file, and it defines `DIR'. */ +-#undef HAVE_NDIR_H +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_NETDB_H +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_NETINET_IN_H +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_STDINT_H +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_STDLIB_H +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_STRINGS_H +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_STRING_H +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_SYSLOG_H +- +-/* Define to 1 if you have the header file, and it defines `DIR'. +- */ +-#undef HAVE_SYS_DIR_H +- +-/* Define to 1 if you have the header file, and it defines `DIR'. +- */ +-#undef HAVE_SYS_NDIR_H +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_SYS_PARAM_H +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_SYS_SOCKET_H +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_SYS_STAT_H +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_SYS_TIME_H +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_SYS_TYPES_H +- +-/* Define to 1 if you have the header file. */ +-#undef HAVE_UNISTD_H +- +-/* Name of package */ +-#undef PACKAGE +- +-/* Define to the address where bug reports for this package should be sent. */ +-#undef PACKAGE_BUGREPORT +- +-/* Define to the full name of this package. */ +-#undef PACKAGE_NAME +- +-/* Define to the full name and version of this package. */ +-#undef PACKAGE_STRING +- +-/* Define to the one symbol short name of this package. */ +-#undef PACKAGE_TARNAME +- +-/* Define to the version of this package. */ +-#undef PACKAGE_VERSION +- +-/* Define to 1 if you have the ANSI C header files. */ +-#undef STDC_HEADERS +- +-/* Version number of package */ +-#undef VERSION +- +-/* This defines the location where the state files will be kept for warm +- starts */ +-#undef RPCBIND_STATEDIR +- +-/* This defines the uid to run as */ +-#undef RPCBIND_USER +- +diff --git a/src/pmap_svc.c b/src/pmap_svc.c +index 4736700..337e64d 100644 +--- a/src/pmap_svc.c ++++ b/src/pmap_svc.c +@@ -80,7 +80,7 @@ pmap_service(struct svc_req *rqstp, SVCXPRT *xprt) + if (debugging) + fprintf(stderr, "PMAPPROC_NULL\n"); + #endif +- check_access(xprt, rqstp->rq_proc, NULL, PMAPVERS); ++ check_access(xprt, rqstp->rq_proc, 0, PMAPVERS); + if ((!svc_sendreply(xprt, (xdrproc_t) xdr_void, NULL)) && + debugging) { + if (doabort) { +@@ -201,11 +201,11 @@ pmapproc_change(struct svc_req *rqstp /*__unused*/, SVCXPRT *xprt, unsigned long + reg.pm_prog, reg.pm_vers); + #endif + +- if (!check_access(xprt, op, ®, PMAPVERS)) { ++ if (!check_access(xprt, op, reg.pm_prog, PMAPVERS)) { + svcerr_weakauth(xprt); + return (FALSE); + } +- ++ + rpcbreg.r_prog = reg.pm_prog; + rpcbreg.r_vers = reg.pm_vers; + +@@ -276,7 +276,7 @@ pmapproc_getport(struct svc_req *rqstp /*__unused*/, SVCXPRT *xprt) + return (FALSE); + } + +- if (!check_access(xprt, PMAPPROC_GETPORT, ®, PMAPVERS)) { ++ if (!check_access(xprt, PMAPPROC_GETPORT, reg.pm_prog, PMAPVERS)) { + svcerr_weakauth(xprt); + return FALSE; + } +@@ -340,7 +340,7 @@ pmapproc_dump(struct svc_req *rqstp /*__unused*/, SVCXPRT *xprt) + return (FALSE); + } + +- if (!check_access(xprt, PMAPPROC_DUMP, NULL, PMAPVERS)) { ++ if (!check_access(xprt, PMAPPROC_DUMP, 0, PMAPVERS)) { + svcerr_weakauth(xprt); + return FALSE; + } +diff --git a/src/rpcb_svc.c b/src/rpcb_svc.c +index 0514ba5..e350f85 100644 +--- a/src/rpcb_svc.c ++++ b/src/rpcb_svc.c +@@ -75,6 +75,7 @@ rpcb_service_3(struct svc_req *rqstp, SVCXPRT *transp) + char *result; + xdrproc_t xdr_argument, xdr_result; + void *(*local) __P((void *, struct svc_req *, SVCXPRT *, rpcvers_t)); ++ rpcprog_t setprog = 0; + + rpcbs_procinfo(RPCBVERS_3_STAT, rqstp->rq_proc); + +@@ -88,7 +89,7 @@ rpcb_service_3(struct svc_req *rqstp, SVCXPRT *transp) + fprintf(stderr, "RPCBPROC_NULL\n"); + #endif + /* This call just logs, no actual checks */ +- check_access(transp, rqstp->rq_proc, NULL, RPCBVERS); ++ check_access(transp, rqstp->rq_proc, 0, RPCBVERS); + (void) svc_sendreply(transp, (xdrproc_t)xdr_void, (char *)NULL); + return; + +@@ -166,7 +167,13 @@ rpcb_service_3(struct svc_req *rqstp, SVCXPRT *transp) + (void) fprintf(stderr, "rpcbind: could not decode\n"); + return; + } +- if (!check_access(transp, rqstp->rq_proc, &argument, RPCBVERS)) { ++ ++ if (rqstp->rq_proc == RPCBPROC_SET ++ || rqstp->rq_proc == RPCBPROC_UNSET ++ || rqstp->rq_proc == RPCBPROC_GETADDR) ++ setprog = argument.rpcbproc_set_3_arg.r_prog; ++ ++ if (!check_access(transp, rqstp->rq_proc, setprog, RPCBVERS)) { + svcerr_weakauth(transp); + goto done; + } +diff --git a/src/rpcb_svc_4.c b/src/rpcb_svc_4.c +index 9fd5bef..313e6d1 100644 +--- a/src/rpcb_svc_4.c ++++ b/src/rpcb_svc_4.c +@@ -78,6 +78,7 @@ rpcb_service_4(struct svc_req *rqstp, SVCXPRT *transp) + char *result; + xdrproc_t xdr_argument, xdr_result; + void *(*local) __P((void *, struct svc_req *, SVCXPRT *, rpcvers_t)); ++ rpcprog_t setprog = 0; + + rpcbs_procinfo(RPCBVERS_4_STAT, rqstp->rq_proc); + +@@ -90,7 +91,7 @@ rpcb_service_4(struct svc_req *rqstp, SVCXPRT *transp) + if (debugging) + fprintf(stderr, "RPCBPROC_NULL\n"); + #endif +- check_access(transp, rqstp->rq_proc, NULL, RPCBVERS4); ++ check_access(transp, rqstp->rq_proc, 0, RPCBVERS4); + (void) svc_sendreply(transp, (xdrproc_t) xdr_void, + (char *)NULL); + return; +@@ -220,7 +221,13 @@ rpcb_service_4(struct svc_req *rqstp, SVCXPRT *transp) + (void) fprintf(stderr, "rpcbind: could not decode\n"); + return; + } +- if (!check_access(transp, rqstp->rq_proc, &argument, RPCBVERS4)) { ++ ++ if (rqstp->rq_proc == RPCBPROC_SET ++ || rqstp->rq_proc == RPCBPROC_UNSET ++ || rqstp->rq_proc == RPCBPROC_GETADDR) ++ setprog = argument.rpcbproc_set_4_arg.r_prog; ++ ++ if (!check_access(transp, rqstp->rq_proc, setprog, RPCBVERS4)) { + svcerr_weakauth(transp); + goto done; + } +diff --git a/src/rpcb_svc_com.c b/src/rpcb_svc_com.c +index 291421f..5bb9a44 100644 +--- a/src/rpcb_svc_com.c ++++ b/src/rpcb_svc_com.c +@@ -1372,10 +1372,13 @@ static char * + getowner(SVCXPRT *transp, char *owner, size_t ownersize) + { + uid_t uid; +- +- if (__rpc_get_local_uid(transp, &uid) < 0) +- snprintf(owner, ownersize, "unknown"); +- else if (uid == 0) ++ ++ if (__rpc_get_local_uid(transp, &uid) < 0) { ++ if (is_localroot(svc_getrpccaller(transp))) ++ snprintf(owner, ownersize, "superuser"); ++ else ++ snprintf(owner, ownersize, "unknown"); ++ } else if (uid == 0) + snprintf(owner, ownersize, "superuser"); + else + snprintf(owner, ownersize, "%d", uid); +diff --git a/src/rpcbind.c b/src/rpcbind.c +index 525ffba..24e069b 100644 +--- a/src/rpcbind.c ++++ b/src/rpcbind.c +@@ -68,7 +68,6 @@ + #include + #include + #include +-#include "config.h" + #include "rpcbind.h" + + /*#define RPCBIND_DEBUG*/ +@@ -77,6 +76,7 @@ + + int debugging = 0; /* Tell me what's going on */ + int doabort = 0; /* When debugging, do an abort on errors */ ++int dofork = 1; /* fork? */ + + rpcblist_ptr list_rbl; /* A list of version 3/4 rpcbind services */ + +@@ -213,8 +213,8 @@ main(int argc, char *argv[]) + printf("\n"); + } + #endif +- } else { +- if (daemon(0, 0)) ++ } else if (dofork) { ++ if (daemon(0, 0)) + err(1, "fork failed"); + } + +@@ -276,6 +276,7 @@ init_transport(struct netconfig *nconf) + int addrlen = 0; + int nhostsbak; + int checkbind; ++ int on = 1; + struct sockaddr *sa = NULL; + u_int32_t host_addr[4]; /* IPv4 or IPv6 */ + struct sockaddr_un sun; +@@ -493,6 +494,14 @@ init_transport(struct netconfig *nconf) + } + oldmask = umask(S_IXUSR|S_IXGRP|S_IXOTH); + __rpc_fd2sockinfo(fd, &si); ++ if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, ++ sizeof(on)) != 0) { ++ syslog(LOG_ERR, "cannot set SO_REUSEADDR on %s", ++ nconf->nc_netid); ++ if (res != NULL) ++ freeaddrinfo(res); ++ return 1; ++ } + if (bind(fd, sa, addrlen) < 0) { + syslog(LOG_ERR, "cannot bind %s: %m", nconf->nc_netid); + if (res != NULL) +@@ -731,7 +740,7 @@ parseargs(int argc, char *argv[]) + { + int c; + oldstyle_local = 1; +- while ((c = getopt(argc, argv, "dwah:ils")) != -1) { ++ while ((c = getopt(argc, argv, "adh:ilswf")) != -1) { + switch (c) { + case 'a': + doabort = 1; /* when debugging, do an abort on */ +@@ -758,13 +767,16 @@ parseargs(int argc, char *argv[]) + case 's': + runasdaemon = 1; + break; ++ case 'f': ++ dofork = 0; ++ break; + #ifdef WARMSTART + case 'w': + warmstart = 1; + break; + #endif + default: /* error */ +- fprintf(stderr, "usage: rpcbind [-Idwils]\n"); ++ fprintf(stderr, "usage: rpcbind [-adhilswf]\n"); + exit (1); + } + } +diff --git a/src/rpcbind.h b/src/rpcbind.h +index c800577..74f9591 100644 +--- a/src/rpcbind.h ++++ b/src/rpcbind.h +@@ -119,7 +119,7 @@ void rpcbind_abort(void); + void reap(int); + void toggle_verboselog(int); + +-int check_access(SVCXPRT *, rpcproc_t, void *, unsigned int); ++int check_access(SVCXPRT *, rpcproc_t, rpcprog_t, unsigned int); + int check_callit(SVCXPRT *, struct r_rmtcall_args *, int); + void logit(int, struct sockaddr *, rpcproc_t, rpcprog_t, const char *); + int is_loopback(struct netbuf *); +diff --git a/src/security.c b/src/security.c +index 0edeac6..d272f74 100644 +--- a/src/security.c ++++ b/src/security.c +@@ -62,34 +62,21 @@ int log_severity = PORTMAP_LOG_FACILITY|PORTMAP_LOG_SEVERITY; + extern int verboselog; + + int +-check_access(SVCXPRT *xprt, rpcproc_t proc, void *args, unsigned int rpcbvers) ++check_access(SVCXPRT *xprt, rpcproc_t proc, rpcprog_t prog, unsigned int rpcbvers) + { + struct netbuf *caller = svc_getrpccaller(xprt); + struct sockaddr *addr = (struct sockaddr *)caller->buf; + #ifdef LIBWRAP + struct request_info req; + #endif +- rpcprog_t prog = 0; +- rpcb *rpcbp; +- struct pmap *pmap; + + /* + * The older PMAP_* equivalents have the same numbers, so + * they are accounted for here as well. + */ + switch (proc) { +- case RPCBPROC_GETADDR: + case RPCBPROC_SET: + case RPCBPROC_UNSET: +- if (rpcbvers > PMAPVERS) { +- rpcbp = (rpcb *)args; +- prog = rpcbp->r_prog; +- } else { +- pmap = (struct pmap *)args; +- prog = pmap->pm_prog; +- } +- if (proc == RPCBPROC_GETADDR) +- break; + if (!insecure && !is_loopback(caller)) { + #ifdef RPCBIND_DEBUG + if (debugging) +@@ -101,6 +88,7 @@ check_access(SVCXPRT *xprt, rpcproc_t proc, void *args, unsigned int rpcbvers) + return 0; + } + break; ++ case RPCBPROC_GETADDR: + case RPCBPROC_CALLIT: + case RPCBPROC_INDIRECT: + case RPCBPROC_DUMP: +@@ -150,8 +138,7 @@ is_loopback(struct netbuf *nbuf) + "Checking caller's adress (port = %d)\n", + ntohs(sin->sin_port)); + #endif +- return ((sin->sin_addr.s_addr == htonl(INADDR_LOOPBACK)) && +- (ntohs(sin->sin_port) < IPPORT_RESERVED)); ++ return (sin->sin_addr.s_addr == htonl(INADDR_LOOPBACK)); + #ifdef INET6 + case AF_INET6: + if (!oldstyle_local) +@@ -163,10 +150,9 @@ is_loopback(struct netbuf *nbuf) + "Checking caller's adress (port = %d)\n", + ntohs(sin6->sin6_port)); + #endif +- return ((IN6_IS_ADDR_LOOPBACK(&sin6->sin6_addr) || ++ return (IN6_IS_ADDR_LOOPBACK(&sin6->sin6_addr) || + (IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr) && +- sin6->sin6_addr.s6_addr32[3] == htonl(INADDR_LOOPBACK))) && +- (ntohs(sin6->sin6_port) < IPV6PORT_RESERVED)); ++ sin6->sin6_addr.s6_addr32[3] == htonl(INADDR_LOOPBACK))); + #endif + case AF_LOCAL: + return 1; +diff --git a/src/warmstart.c b/src/warmstart.c +index 25e5d89..d1bb971 100644 +--- a/src/warmstart.c ++++ b/src/warmstart.c +@@ -46,7 +46,6 @@ + #include + #include + +-#include "config.h" + #include "rpcbind.h" + + #ifndef RPCBIND_STATEDIR From d5f9b33f7701535b1b80c897f1184df9f00f6fd5 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 10 Nov 2011 04:51:57 +0100 Subject: [PATCH 69/89] libshairport: add upstream patches Signed-off-by: Stephan Raue --- ...2.0.20310_lib-007_fix_syslog_defines.patch | 24 +++++++++++++++++++ ...1.2.0.20310_lib-008_add_missing_libs.patch | 21 ++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 packages/network/libshairport/patches/libshairport-1.2.0.20310_lib-007_fix_syslog_defines.patch create mode 100644 packages/network/libshairport/patches/libshairport-1.2.0.20310_lib-008_add_missing_libs.patch diff --git a/packages/network/libshairport/patches/libshairport-1.2.0.20310_lib-007_fix_syslog_defines.patch b/packages/network/libshairport/patches/libshairport-1.2.0.20310_lib-007_fix_syslog_defines.patch new file mode 100644 index 0000000000..85517396e6 --- /dev/null +++ b/packages/network/libshairport/patches/libshairport-1.2.0.20310_lib-007_fix_syslog_defines.patch @@ -0,0 +1,24 @@ +--- a/src/shairport.h 2011-10-01 04:09:16.000000000 +0200 ++++ b/src/shairport.h 2011-11-07 18:05:05.000000000 +0100 +@@ -16,10 +16,17 @@ + + #define HWID_SIZE 6 + #define SHAIRPORT_LOG 1 +-#define LOG_INFO 1 +-#define LOG_DEBUG 5 +-#define LOG_DEBUG_V 6 +-#define LOG_DEBUG_VV 7 ++ ++#ifndef LOG_INFO ++#define LOG_INFO 5 ++#endif ++ ++#ifndef LOG_DEBUG ++#define LOG_DEBUG 6 ++#endif ++ ++#define LOG_DEBUG_V 7 ++#define LOG_DEBUG_VV 8 + + struct shairbuffer + { diff --git a/packages/network/libshairport/patches/libshairport-1.2.0.20310_lib-008_add_missing_libs.patch b/packages/network/libshairport/patches/libshairport-1.2.0.20310_lib-008_add_missing_libs.patch new file mode 100644 index 0000000000..d06abf20c1 --- /dev/null +++ b/packages/network/libshairport/patches/libshairport-1.2.0.20310_lib-008_add_missing_libs.patch @@ -0,0 +1,21 @@ +--- a/configure.in-org 2011-11-08 11:53:42.802419355 -0500 ++++ b/configure.in 2011-11-08 11:55:38.082419413 -0500 +@@ -11,8 +11,9 @@ AC_PROG_LIBTOOL + + # Checks for libraries. + #AC_CHECK_LIB([c], [main]) +-#AC_CHECK_LIB([m], [main]) ++AC_CHECK_LIB([m], [main]) + AC_CHECK_LIB([ssl], [main],, AC_MSG_ERROR($missing_library)) ++AC_CHECK_LIB([crypto], [main],, AC_MSG_ERROR($missing_library)) + AC_CHECK_LIB([pthread], [main],, AC_MSG_ERROR($missing_library)) + + OUTPUT_FILES="Makefile" +@@ -21,4 +22,4 @@ LIBDIR=$PREFIX + + AC_CONFIG_FILES([${OUTPUT_FILES}]) + AC_OUTPUT(Makefile src/Makefile) +-AC_OUTPUT +\ No newline at end of file ++AC_OUTPUT + From 291b2561023effb8bdc74accba342e7bf2151e0d Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 10 Nov 2011 04:52:27 +0100 Subject: [PATCH 70/89] xbmc: update to xbmc-6922560 Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc-theme-Confluence/meta | 2 +- packages/mediacenter/xbmc/meta | 2 +- ...> xbmc-6922560-001-add_support_to_specify_GIT_REV-0.1.patch} | 0 ... => xbmc-6922560-013-reenable_lcd_config_settings-0.1.patch} | 0 ...S-0.1.patch => xbmc-6922560-303-fix_libdvd_xFLAGS-0.1.patch} | 0 ...uild-0.1.patch => xbmc-6922560-311-fix_rsxs_build-0.1.patch} | 0 ...mc-PR468-0.1.patch => xbmc-6922560-341-xbmc-PR468-0.1.patch} | 0 ...1.patch => xbmc-6922560-351-increase_YV12_buffers-0.1.patch} | 0 ...22560-353-limit_glxSwapBuffers_going_to_far_ahead-0.1.patch} | 0 ...-vaapi_increase_number_of_video_surface_allocated-0.1.patch} | 0 ...1.patch => xbmc-6922560-402-enable_yasm_in_ffmpeg-0.1.patch} | 0 ...heck-0.6.patch => xbmc-6922560-404-add_lame_check-0.6.patch} | 0 ...60-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch} | 0 ...-0.1.patch => xbmc-6922560-452-change_lcd_content-0.1.patch} | 0 ...atch => xbmc-6922560-453-add_openelec.tv_RSS_news-0.1.patch} | 0 ...h-0.1.patch => xbmc-6922560-454-disable_backslash-0.1.patch} | 0 ....1.patch => xbmc-6922560-457-fix_connection_check-0.1.patch} | 0 ...> xbmc-6922560-462-add_remote_irtrans_mediacenter-0.1.patch} | 0 ...0.1.patch => xbmc-6922560-463-add_remote_devinput-0.1.patch} | 0 ...=> xbmc-6922560-464-add_eject_keymapping_for_lirc-0.1.patch} | 0 20 files changed, 2 insertions(+), 2 deletions(-) rename packages/mediacenter/xbmc/patches/{xbmc-b44b653-001-add_support_to_specify_GIT_REV-0.1.patch => xbmc-6922560-001-add_support_to_specify_GIT_REV-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-b44b653-013-reenable_lcd_config_settings-0.1.patch => xbmc-6922560-013-reenable_lcd_config_settings-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-b44b653-303-fix_libdvd_xFLAGS-0.1.patch => xbmc-6922560-303-fix_libdvd_xFLAGS-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-b44b653-311-fix_rsxs_build-0.1.patch => xbmc-6922560-311-fix_rsxs_build-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-b44b653-341-xbmc-PR468-0.1.patch => xbmc-6922560-341-xbmc-PR468-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-b44b653-351-increase_YV12_buffers-0.1.patch => xbmc-6922560-351-increase_YV12_buffers-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-b44b653-353-limit_glxSwapBuffers_going_to_far_ahead-0.1.patch => xbmc-6922560-353-limit_glxSwapBuffers_going_to_far_ahead-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-b44b653-354-vaapi_increase_number_of_video_surface_allocated-0.1.patch => xbmc-6922560-354-vaapi_increase_number_of_video_surface_allocated-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-b44b653-402-enable_yasm_in_ffmpeg-0.1.patch => xbmc-6922560-402-enable_yasm_in_ffmpeg-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-b44b653-404-add_lame_check-0.6.patch => xbmc-6922560-404-add_lame_check-0.6.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-b44b653-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch => xbmc-6922560-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-b44b653-452-change_lcd_content-0.1.patch => xbmc-6922560-452-change_lcd_content-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-b44b653-453-add_openelec.tv_RSS_news-0.1.patch => xbmc-6922560-453-add_openelec.tv_RSS_news-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-b44b653-454-disable_backslash-0.1.patch => xbmc-6922560-454-disable_backslash-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-b44b653-457-fix_connection_check-0.1.patch => xbmc-6922560-457-fix_connection_check-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-b44b653-462-add_remote_irtrans_mediacenter-0.1.patch => xbmc-6922560-462-add_remote_irtrans_mediacenter-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-b44b653-463-add_remote_devinput-0.1.patch => xbmc-6922560-463-add_remote_devinput-0.1.patch} (100%) rename packages/mediacenter/xbmc/patches/{xbmc-b44b653-464-add_eject_keymapping_for_lirc-0.1.patch => xbmc-6922560-464-add_eject_keymapping_for_lirc-0.1.patch} (100%) diff --git a/packages/mediacenter/xbmc-theme-Confluence/meta b/packages/mediacenter/xbmc-theme-Confluence/meta index 63971295d2..0a17b43587 100644 --- a/packages/mediacenter/xbmc-theme-Confluence/meta +++ b/packages/mediacenter/xbmc-theme-Confluence/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="xbmc-theme-Confluence" -PKG_VERSION="b44b653" +PKG_VERSION="6922560" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/xbmc/meta b/packages/mediacenter/xbmc/meta index 49c6321c9b..094e4db159 100644 --- a/packages/mediacenter/xbmc/meta +++ b/packages/mediacenter/xbmc/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="xbmc" -PKG_VERSION="b44b653" +PKG_VERSION="6922560" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/mediacenter/xbmc/patches/xbmc-b44b653-001-add_support_to_specify_GIT_REV-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-6922560-001-add_support_to_specify_GIT_REV-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-b44b653-001-add_support_to_specify_GIT_REV-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-6922560-001-add_support_to_specify_GIT_REV-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-b44b653-013-reenable_lcd_config_settings-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-6922560-013-reenable_lcd_config_settings-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-b44b653-013-reenable_lcd_config_settings-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-6922560-013-reenable_lcd_config_settings-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-b44b653-303-fix_libdvd_xFLAGS-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-6922560-303-fix_libdvd_xFLAGS-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-b44b653-303-fix_libdvd_xFLAGS-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-6922560-303-fix_libdvd_xFLAGS-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-b44b653-311-fix_rsxs_build-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-6922560-311-fix_rsxs_build-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-b44b653-311-fix_rsxs_build-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-6922560-311-fix_rsxs_build-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-b44b653-341-xbmc-PR468-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-6922560-341-xbmc-PR468-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-b44b653-341-xbmc-PR468-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-6922560-341-xbmc-PR468-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-b44b653-351-increase_YV12_buffers-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-6922560-351-increase_YV12_buffers-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-b44b653-351-increase_YV12_buffers-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-6922560-351-increase_YV12_buffers-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-b44b653-353-limit_glxSwapBuffers_going_to_far_ahead-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-6922560-353-limit_glxSwapBuffers_going_to_far_ahead-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-b44b653-353-limit_glxSwapBuffers_going_to_far_ahead-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-6922560-353-limit_glxSwapBuffers_going_to_far_ahead-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-b44b653-354-vaapi_increase_number_of_video_surface_allocated-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-6922560-354-vaapi_increase_number_of_video_surface_allocated-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-b44b653-354-vaapi_increase_number_of_video_surface_allocated-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-6922560-354-vaapi_increase_number_of_video_surface_allocated-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-b44b653-402-enable_yasm_in_ffmpeg-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-6922560-402-enable_yasm_in_ffmpeg-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-b44b653-402-enable_yasm_in_ffmpeg-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-6922560-402-enable_yasm_in_ffmpeg-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-b44b653-404-add_lame_check-0.6.patch b/packages/mediacenter/xbmc/patches/xbmc-6922560-404-add_lame_check-0.6.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-b44b653-404-add_lame_check-0.6.patch rename to packages/mediacenter/xbmc/patches/xbmc-6922560-404-add_lame_check-0.6.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-b44b653-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-6922560-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-b44b653-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-6922560-408-enable_PYTHONOPTIMIZE_with_external_Python-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-b44b653-452-change_lcd_content-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-6922560-452-change_lcd_content-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-b44b653-452-change_lcd_content-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-6922560-452-change_lcd_content-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-b44b653-453-add_openelec.tv_RSS_news-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-6922560-453-add_openelec.tv_RSS_news-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-b44b653-453-add_openelec.tv_RSS_news-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-6922560-453-add_openelec.tv_RSS_news-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-b44b653-454-disable_backslash-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-6922560-454-disable_backslash-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-b44b653-454-disable_backslash-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-6922560-454-disable_backslash-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-b44b653-457-fix_connection_check-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-6922560-457-fix_connection_check-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-b44b653-457-fix_connection_check-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-6922560-457-fix_connection_check-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-b44b653-462-add_remote_irtrans_mediacenter-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-6922560-462-add_remote_irtrans_mediacenter-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-b44b653-462-add_remote_irtrans_mediacenter-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-6922560-462-add_remote_irtrans_mediacenter-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-b44b653-463-add_remote_devinput-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-6922560-463-add_remote_devinput-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-b44b653-463-add_remote_devinput-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-6922560-463-add_remote_devinput-0.1.patch diff --git a/packages/mediacenter/xbmc/patches/xbmc-b44b653-464-add_eject_keymapping_for_lirc-0.1.patch b/packages/mediacenter/xbmc/patches/xbmc-6922560-464-add_eject_keymapping_for_lirc-0.1.patch similarity index 100% rename from packages/mediacenter/xbmc/patches/xbmc-b44b653-464-add_eject_keymapping_for_lirc-0.1.patch rename to packages/mediacenter/xbmc/patches/xbmc-6922560-464-add_eject_keymapping_for_lirc-0.1.patch From c15903544182edc719431b4c6f8a717a5901d507 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 10 Nov 2011 04:53:17 +0100 Subject: [PATCH 71/89] libnfs: install rpcbind too, cleanup Signed-off-by: Stephan Raue --- packages/network/libnfs/build | 3 +- packages/network/libnfs/meta | 4 +- .../libnfs-95b7217-00-tirpc_fixes.patch | 114 ------------------ 3 files changed, 3 insertions(+), 118 deletions(-) delete mode 100644 packages/network/libnfs/patches/libnfs-95b7217-00-tirpc_fixes.patch diff --git a/packages/network/libnfs/build b/packages/network/libnfs/build index 0fa9ba0f6f..6cc0ac13ab 100755 --- a/packages/network/libnfs/build +++ b/packages/network/libnfs/build @@ -32,8 +32,7 @@ cd $PKG_BUILD --libdir=/usr/lib \ --sysconfdir=/etc \ --disable-examples \ - --enable-tirpc \ - --with-tirpcinclude="$SYSROOT_PREFIX/usr/include/tirpc" \ + --disable-tirpc \ make $MAKEINSTALL diff --git a/packages/network/libnfs/meta b/packages/network/libnfs/meta index 4cd20ac533..576c4981ba 100644 --- a/packages/network/libnfs/meta +++ b/packages/network/libnfs/meta @@ -25,8 +25,8 @@ PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="https://github.com/sahlberg/libnfs" PKG_URL="$DISTRO_SRC/$PKG_NAME-$PKG_VERSION.tar.bz2" -PKG_DEPENDS="libtirpc" -PKG_BUILD_DEPENDS="toolchain libtirpc" +PKG_DEPENDS="rpcbind" +PKG_BUILD_DEPENDS="toolchain" PKG_PRIORITY="optional" PKG_SECTION="network" PKG_SHORTDESC="libnfs: a client library for accessing NFS shares over a network." diff --git a/packages/network/libnfs/patches/libnfs-95b7217-00-tirpc_fixes.patch b/packages/network/libnfs/patches/libnfs-95b7217-00-tirpc_fixes.patch deleted file mode 100644 index 746955b4f5..0000000000 --- a/packages/network/libnfs/patches/libnfs-95b7217-00-tirpc_fixes.patch +++ /dev/null @@ -1,114 +0,0 @@ -diff --git a/Makefile.am b/Makefile.am -index 03e4419..5172bed 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -5,3 +5,5 @@ pkgconfig_DATA = libnfs.pc - - EXTRA_DIST = README COPYING libnfs.pc.in - -+ACLOCAL_AMFLAGS = -I aclocal -+ -diff --git a/aclocal/libtirpc.m4 b/aclocal/libtirpc.m4 -new file mode 100644 -index 0000000..9f0fde0 ---- /dev/null -+++ b/aclocal/libtirpc.m4 -@@ -0,0 +1,40 @@ -+dnl Checks for TI-RPC library and headers -+dnl -+AC_DEFUN([AC_LIBTIRPC], [ -+ -+ AC_ARG_WITH([tirpcinclude], -+ [AC_HELP_STRING([--with-tirpcinclude=DIR], -+ [use TI-RPC headers in DIR])], -+ [tirpc_header_dir=$withval], -+ [tirpc_header_dir=/usr/include/tirpc]) -+ -+ dnl if --enable-tirpc was specifed, the following components -+ dnl must be present, and we set up HAVE_ macros for them. -+ -+ if test "$enable_tirpc" != "no"; then -+ -+ dnl look for the library; add to LIBS if found -+ AC_CHECK_LIB([tirpc], [clnt_tli_create], , -+ [if test "$enable_tirpc" = "yes"; then -+ AC_MSG_ERROR([libtirpc not found.]) -+ else -+ AC_MSG_WARN([libtirpc not found. TIRPC disabled!]) -+ enable_tirpc="no" -+ fi]) -+ fi -+ -+ if test "$enable_tirpc" != "no"; then -+ dnl also must have the headers installed where we expect -+ dnl look for headers; add -I compiler option if found -+ AC_CHECK_HEADERS([${tirpc_header_dir}/netconfig.h], -+ AC_SUBST([AM_CPPFLAGS], ["-I${tirpc_header_dir}"]), -+ [if test "$enable_tirpc" = "yes"; then -+ AC_MSG_ERROR([libtirpc headers not found.]) -+ else -+ AC_MSG_WARN([libtirpc headers not found. TIRPC disabled!]) -+ enable_tirpc="no" -+ fi]) -+ -+ fi -+ -+])dnl -diff --git a/configure.ac b/configure.ac -index 24400c3..f84e391 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -1,5 +1,6 @@ - AC_PREREQ(2.50) - AC_INIT([libnfs], [1.0.0]) -+AC_CONFIG_MACRO_DIR(aclocal) - AC_CONFIG_HEADERS([config.h]) - AM_INIT_AUTOMAKE([foreign]) - AC_CANONICAL_HOST -@@ -22,7 +23,14 @@ if test x$HAVE_RPCGEN != xyes; then - AC_MSG_ERROR([Can not find required program]) - fi - --#option: examples -+dnl option: libtirpc -+AC_ARG_ENABLE(tirpc, -+ [AC_HELP_STRING([--enable-tirpc], -+ [enable use of TI-RPC @<:@default=no@:>@])], -+ enable_tirpc=$enableval, -+ enable_tirpc='no') -+ -+dnl option: examples - AC_ARG_ENABLE([examples], - [AC_HELP_STRING([--enable-examples], - [Build example programs])], -@@ -34,12 +42,6 @@ if test x$ENABLE_EXAMPLES = xyes; then - fi - AC_SUBST(MAYBE_EXAMPLES) - --AC_ARG_ENABLE(tirpc, -- [AC_HELP_STRING([--enable-tirpc], -- [enable use of TI-RPC @<:@default=no@:>@])], -- enable_tirpc=$enableval, -- enable_tirpc='no') -- - case $host in - *darwin*) - RPCGENFLAGS=-DU_INT64_PLATTFORM_TYPE="u_int64_t" -@@ -71,11 +73,13 @@ AC_CHECK_MEMBER([struct sockaddr.sa_len], - #include - ]) - -+PKG_PROG_PKG_CONFIG() -+ -+dnl Check for TI-RPC library and headers -+AC_LIBTIRPC -+ -+dnl Check for TI-RPC library and headers - echo "Use TI-RPC: $enable_tirpc" --if test "$enable_tirpc" = "yes"; then -- CFLAGS="${CFLAGS} -I /usr/include/tirpc" -- LDFLAGS="${LDFLAGS} -ltirpc" --fi - - #output - AC_CONFIG_FILES([Makefile] From fbf9a7aa759c977e8c25e08a948ca9dfe113f844 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 10 Nov 2011 04:54:33 +0100 Subject: [PATCH 72/89] Python-host: cleanup Signed-off-by: Stephan Raue --- packages/lang/Python-host/build | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/lang/Python-host/build b/packages/lang/Python-host/build index be9ccc37fd..0fd791fa87 100755 --- a/packages/lang/Python-host/build +++ b/packages/lang/Python-host/build @@ -52,8 +52,7 @@ make PYTHON_MODULES_INCLUDE="$HOST_INCDIR" \ PYTHON_DISABLE_MODULES="$PY_DISABLED_MODULES" \ install -cp Parser/pgen ./hostpgen -cp python ./hostpython +cp Parser/pgen $ROOT/$TOOLCHAIN/bin # symlink python binary to python2 (needed for Mesa) ln -sf python $ROOT/$TOOLCHAIN/bin/python2 From 66a9b2fe425ac156b620477a86aeae7db92190dc Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Thu, 10 Nov 2011 04:54:40 +0100 Subject: [PATCH 73/89] Python: cleanup Signed-off-by: Stephan Raue --- packages/lang/Python/build | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/lang/Python/build b/packages/lang/Python/build index 7d6f05c2b1..9aefc85f5e 100755 --- a/packages/lang/Python/build +++ b/packages/lang/Python/build @@ -60,9 +60,8 @@ OPT="$CFLAGS -fno-strict-aliasing" \ --with-system-expat \ make -j1 CC="$TARGET_CC" \ - HOSTPYTHON=../.objdir-host/hostpython \ - HOSTPGEN=../.objdir-host/hostpgen \ - RUNSHARED="LD_LIBRARY_PATH=../.objdir-host:" \ + HOSTPYTHON=$ROOT/$TOOLCHAIN/bin/python \ + HOSTPGEN=$ROOT/$TOOLCHAIN/bin/pgen \ BLDSHARED="$CC -shared" \ PYTHON_DISABLE_MODULES="$PY_DISABLED_MODULES" \ CROSS_COMPILE="$TARGET_NAME" \ @@ -72,9 +71,8 @@ make -j1 CC="$TARGET_CC" \ make -j1 CC="$TARGET_CC" \ DESTDIR=$SYSROOT_PREFIX \ - HOSTPYTHON=../.objdir-host/hostpython \ - HOSTPGEN=../.objdir-host/hostpgen \ - RUNSHARED="LD_LIBRARY_PATH=../.objdir-host:" \ + HOSTPYTHON=$ROOT/$TOOLCHAIN/bin/python \ + HOSTPGEN=$ROOT/$TOOLCHAIN/bin/pgen \ BLDSHARED="$CC -shared" \ PYTHON_DISABLE_MODULES="$PY_DISABLED_MODULES" \ CROSS_COMPILE="$TARGET_NAME" \ @@ -82,3 +80,4 @@ make -j1 CC="$TARGET_CC" \ PYTHON_MODULES_INCLUDE="$TARGET_INCDIR" \ PYTHON_MODULES_LIB="$TARGET_LIBDIR" \ install + From e7675482c98065f3c1c85ec4ff00e004b2389abe Mon Sep 17 00:00:00 2001 From: Gujs Date: Wed, 9 Nov 2011 19:12:36 +0100 Subject: [PATCH 74/89] eventlircd: add support and evmap for remote PHILIPS MCE USB IR Receiver- Spinel plus --- .../eventlircd/evmap/03_0471_0613.evmap | 38 +++++++++++++++++++ .../eventlircd/udev.d/98-eventlircd.rules | 4 ++ 2 files changed, 42 insertions(+) create mode 100644 packages/sysutils/remote/eventlircd/evmap/03_0471_0613.evmap diff --git a/packages/sysutils/remote/eventlircd/evmap/03_0471_0613.evmap b/packages/sysutils/remote/eventlircd/evmap/03_0471_0613.evmap new file mode 100644 index 0000000000..07bf67c4eb --- /dev/null +++ b/packages/sysutils/remote/eventlircd/evmap/03_0471_0613.evmap @@ -0,0 +1,38 @@ +# 0471:0613 PHILIPS MCE USB IR Receiver- Spinel plus + + KEY_1 = KEY_NUMERIC_1 # 1 + KEY_2 = KEY_NUMERIC_2 # 2 + KEY_3 = KEY_NUMERIC_3 # 3 + KEY_4 = KEY_NUMERIC_4 # 4 + KEY_5 = KEY_NUMERIC_5 # 5 + KEY_6 = KEY_NUMERIC_6 # 6 + KEY_7 = KEY_NUMERIC_7 # 7 + KEY_8 = KEY_NUMERIC_8 # 8 + KEY_9 = KEY_NUMERIC_9 # 9 + KEY_0 = KEY_NUMERIC_0 # 0 + shift+KEY_8 = KEY_NUMERIC_STAR # * + shift+KEY_3 = KEY_NUMERIC_POUND # # + + KEY_POWER = KEY_POWER # Power + KEY_RECORD = KEY_RECORD # Record + KEY_PAUSE = KEY_PAUSE # Pause + KEY_STOPCD = KEY_STOP # Stop + KEY_REWIND = KEY_REWIND # Rev + KEY_PLAY = KEY_PLAY # Play + KEY_FASTFORWARD = KEY_FASTFORWARD # Fwd + KEY_PREVIOUSSONG = KEY_PREVIOUS # Prev + KEY_NEXTSONG = KEY_NEXT # Next + KEY_BACK = KEY_EXIT # BACK + KEY_PROPS = KEY_INFO # Info/EPG + KEY_LEFT = KEY_LEFT # Left Arrow + KEY_RIGHT = KEY_RIGHT # Right Arrow + KEY_UP = KEY_UP # Up Arrow + KEY_DOWN = KEY_DOWN # Down Arrow + KEY_ENTER = KEY_OK # Enter & Ok + KEY_VOLUMEUP = KEY_VOLUMEUP # Vol + + KEY_VOLUMEDOWN = KEY_VOLUMEDOWN # Vol - + KEY_CHANNELUP = KEY_CHANNELUP # CH/PG up + KEY_CHANNELDOWN = KEY_CHANNELDOWN # CH/PG down + KEY_MUTE = KEY_MUTE # Mute + KEY_PROGRAM = KEY_SUBTITLE # Program # remapped to Subtitle + KEY_ESC = KEY_DELETE # Delete/Clear diff --git a/packages/sysutils/remote/eventlircd/udev.d/98-eventlircd.rules b/packages/sysutils/remote/eventlircd/udev.d/98-eventlircd.rules index 259831e33e..fb8febd84f 100644 --- a/packages/sysutils/remote/eventlircd/udev.d/98-eventlircd.rules +++ b/packages/sysutils/remote/eventlircd/udev.d/98-eventlircd.rules @@ -135,6 +135,10 @@ ENV{ID_VENDOR_ID}=="9022", ENV{ID_MODEL_ID}=="d660", \ ENV{eventlircd_enable}="true", \ ENV{eventlircd_evmap}="03_$env{ID_VENDOR_ID}_$env{ID_MODEL_ID}.evmap" +ENV{ID_VENDOR_ID}=="0471", ENV{ID_MODEL_ID}=="0613", \ + ENV{eventlircd_enable}="true", \ + ENV{eventlircd_evmap}="03_$env{ID_VENDOR_ID}_$env{ID_MODEL_ID}.evmap" + # Enable wake-on-usb for the USB remotes. RUN+="wakeup_enable" From 439c7f856a1b48cec95e780302e5d2bd40053d15 Mon Sep 17 00:00:00 2001 From: stephan Date: Fri, 11 Nov 2011 13:45:21 +0100 Subject: [PATCH 75/89] autotools: rework dependencies Signed-off-by: stephan --- packages/toolchain/devel/autotools/autoconf-2.64/meta | 2 +- packages/toolchain/devel/autotools/autoconf/meta | 2 +- packages/toolchain/devel/autotools/libtool-host/meta | 2 +- packages/toolchain/devel/autotools/meta | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/toolchain/devel/autotools/autoconf-2.64/meta b/packages/toolchain/devel/autotools/autoconf-2.64/meta index b2a865c43d..a24a33c639 100644 --- a/packages/toolchain/devel/autotools/autoconf-2.64/meta +++ b/packages/toolchain/devel/autotools/autoconf-2.64/meta @@ -26,7 +26,7 @@ PKG_LICENSE="GPL" PKG_SITE="http://sources.redhat.com/autoconf/" PKG_URL="http://ftp.gnu.org/gnu/autoconf/$PKG_NAME.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="ccache m4 libtool-host" +PKG_BUILD_DEPENDS="ccache m4" PKG_PRIORITY="optional" PKG_SECTION="toolchain/devel" PKG_SHORTDESC="autoconf: A GNU tool for automatically configuring source code" diff --git a/packages/toolchain/devel/autotools/autoconf/meta b/packages/toolchain/devel/autotools/autoconf/meta index 4e42810efa..87b2020f74 100644 --- a/packages/toolchain/devel/autotools/autoconf/meta +++ b/packages/toolchain/devel/autotools/autoconf/meta @@ -26,7 +26,7 @@ PKG_LICENSE="GPL" PKG_SITE="http://sources.redhat.com/autoconf/" PKG_URL="http://ftp.gnu.org/gnu/autoconf/$PKG_NAME-$PKG_VERSION.tar.bz2" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="ccache m4 gettext libtool-host" +PKG_BUILD_DEPENDS="ccache m4 gettext" PKG_PRIORITY="optional" PKG_SECTION="toolchain/devel" PKG_SHORTDESC="autoconf: A GNU tool for automatically configuring source code" diff --git a/packages/toolchain/devel/autotools/libtool-host/meta b/packages/toolchain/devel/autotools/libtool-host/meta index 36b315c854..a32fae2a24 100644 --- a/packages/toolchain/devel/autotools/libtool-host/meta +++ b/packages/toolchain/devel/autotools/libtool-host/meta @@ -26,7 +26,7 @@ PKG_LICENSE="GPL" PKG_SITE="http://www.gnu.org/software/libtool/libtool.html" PKG_URL="" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="ccache" +PKG_BUILD_DEPENDS="ccache autoconf" PKG_PRIORITY="optional" PKG_SECTION="toolchain/devel" PKG_SHORTDESC="libtool: Generic library support script" diff --git a/packages/toolchain/devel/autotools/meta b/packages/toolchain/devel/autotools/meta index e5f92635f0..9fe676869b 100644 --- a/packages/toolchain/devel/autotools/meta +++ b/packages/toolchain/devel/autotools/meta @@ -26,7 +26,7 @@ PKG_LICENSE="GPL" PKG_SITE="http://www.openelec.tv" PKG_URL="" PKG_DEPENDS="" -PKG_BUILD_DEPENDS="ccache autoconf automake intltool autoconf-archive" +PKG_BUILD_DEPENDS="ccache autoconf automake libtool-host intltool autoconf-archive" PKG_PRIORITY="optional" PKG_SECTION="toolchain/devel" PKG_SHORTDESC="autotools: Metapackage" From 70cddceb380eecf0bc4cc2c2cb97586f676678a7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 11 Nov 2011 13:46:55 +0100 Subject: [PATCH 76/89] scripts/checkdeps: cleanup dependencies Signed-off-by: Stephan Raue --- scripts/checkdeps | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/checkdeps b/scripts/checkdeps index 3348295948..ef91fcae0f 100755 --- a/scripts/checkdeps +++ b/scripts/checkdeps @@ -33,8 +33,8 @@ case $1 in deps_pkg="wget" ;; build) - deps="gcc g++ sed patch touch tar bzip2 gzip perl cp gawk makeinfo gettext autopoint gperf autoconf automake m4 cvs zip unzip mkfontscale libtool diff xsltproc msgfmt" - deps_pkg="gcc g++ sed patch fileutils tar bzip2 gzip perl coreutils gawk texinfo gettext gettext-devel gperf autoconf automake m4 cvs zip unzip xutils libtool diff xsltproc gettext" + deps="gcc g++ sed patch touch tar bzip2 gzip perl cp gawk makeinfo gperf cvs zip unzip mkfontscale diff xsltproc" + deps_pkg="gcc g++ sed patch fileutils tar bzip2 gzip perl coreutils gawk texinfo gperf cvs zip unzip xutils diff xsltproc" files="/usr/include/stdio.h /usr/include/ncurses.h" files_pkg="libc6-dev libncurses5-dev" ;; From c4d65f57a047349e8a9149193cbfd1686ec5c428 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Fri, 11 Nov 2011 13:47:56 +0100 Subject: [PATCH 77/89] eglibc: update to eglibc-2.14.1-15769 Signed-off-by: Stephan Raue --- CHANGELOG | 2 +- packages/toolchain/devel/eglibc/build | 2 + packages/toolchain/devel/eglibc/meta | 2 +- ...atch => eglibc-2.14.1-15769-bad-fix.patch} | 59 +++++++++---------- ... => eglibc-2.14.1-15769-libgcc_eh-1.patch} | 0 ...eglibc-2.14.1-15769-restore-rpc+nis.patch} | 0 ... eglibc-2.14.1-15769-select_fd_type.patch} | 0 7 files changed, 32 insertions(+), 33 deletions(-) rename packages/toolchain/devel/eglibc/patches/{eglibc-2.14-15360-bad-fix.patch => eglibc-2.14.1-15769-bad-fix.patch} (70%) rename packages/toolchain/devel/eglibc/patches/{eglibc-2.14-15360-libgcc_eh-1.patch => eglibc-2.14.1-15769-libgcc_eh-1.patch} (100%) rename packages/toolchain/devel/eglibc/patches/{eglibc-2.14-15360-restore-rpc+nis.patch => eglibc-2.14.1-15769-restore-rpc+nis.patch} (100%) rename packages/toolchain/devel/eglibc/patches/{eglibc-2.14-15360-select_fd_type.patch => eglibc-2.14.1-15769-select_fd_type.patch} (100%) diff --git a/CHANGELOG b/CHANGELOG index 07793f5221..37626b8d88 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,7 +4,7 @@ Changelog OpenELEC-1.0 to OpenELEC-2.0 Package updates: - update XBMC to XBMC-11.0 (Eden) - - update eglibc to eglibc-2.14 + - update eglibc to eglibc-2.14.1 - update Python to Python-2.7.2 - update gcc to gcc-4.6.2 - update openssl to openssl-1.0.0e diff --git a/packages/toolchain/devel/eglibc/build b/packages/toolchain/devel/eglibc/build index 16736697bf..a363bd03ab 100755 --- a/packages/toolchain/devel/eglibc/build +++ b/packages/toolchain/devel/eglibc/build @@ -34,6 +34,8 @@ strip_gold # Fails to compile using the gold linker. LDFLAGS=`echo $LDFLAGS | sed -e "s|-Ofast|-O2|g"` LDFLAGS=`echo $LDFLAGS | sed -e "s|-O.|-O2|g"` + LDFLAGS=`echo $LDFLAGS | sed -e "s|-Wl,--as-needed||"` + # set some CFLAGS we need CFLAGS="$CFLAGS -g -fno-stack-protector" diff --git a/packages/toolchain/devel/eglibc/meta b/packages/toolchain/devel/eglibc/meta index 68bfdde822..ff1819032f 100644 --- a/packages/toolchain/devel/eglibc/meta +++ b/packages/toolchain/devel/eglibc/meta @@ -19,7 +19,7 @@ ################################################################################ PKG_NAME="eglibc" -PKG_VERSION="2.14-15360" +PKG_VERSION="2.14.1-15769" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" diff --git a/packages/toolchain/devel/eglibc/patches/eglibc-2.14-15360-bad-fix.patch b/packages/toolchain/devel/eglibc/patches/eglibc-2.14.1-15769-bad-fix.patch similarity index 70% rename from packages/toolchain/devel/eglibc/patches/eglibc-2.14-15360-bad-fix.patch rename to packages/toolchain/devel/eglibc/patches/eglibc-2.14.1-15769-bad-fix.patch index 1f67b780eb..f76512f9e0 100644 --- a/packages/toolchain/devel/eglibc/patches/eglibc-2.14-15360-bad-fix.patch +++ b/packages/toolchain/devel/eglibc/patches/eglibc-2.14.1-15769-bad-fix.patch @@ -3,10 +3,9 @@ From: Andreas Schwab Date: Wed, 22 Sep 2010 12:06:30 +0200 Subject: [PATCH] Fix memory leak on init/fini dependency list -diff --git a/elf/dl-close.c b/elf/dl-close.c -index 73b2a2f..9bd91e3 100644 ---- a/elf/dl-close.c -+++ b/elf/dl-close.c +diff -Naur eglibc-2.14.1-15769/elf/dl-close.c eglibc-2.14.1-15769.patch/elf/dl-close.c +--- eglibc-2.14.1-15769/elf/dl-close.c 2011-11-10 17:59:49.000000000 +0100 ++++ eglibc-2.14.1-15769.patch/elf/dl-close.c 2011-11-11 13:11:54.317765891 +0100 @@ -1,5 +1,5 @@ /* Close a shared object opened by `_dl_open'. - Copyright (C) 1996-2007, 2009, 2010, 2011 Free Software Foundation, Inc. @@ -14,7 +13,7 @@ index 73b2a2f..9bd91e3 100644 This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or -@@ -119,17 +119,8 @@ _dl_close_worker (struct link_map *map) +@@ -119,17 +119,8 @@ if (map->l_direct_opencount > 0 || map->l_type != lt_loaded || dl_close_state != not_pending) { @@ -33,12 +32,11 @@ index 73b2a2f..9bd91e3 100644 + dl_close_state = rerun; /* There are still references to this object. Do nothing more. */ - if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0)) -diff --git a/elf/dl-deps.c b/elf/dl-deps.c -index 9e30594..3890d00 100644 ---- a/elf/dl-deps.c -+++ b/elf/dl-deps.c -@@ -478,6 +478,7 @@ _dl_map_object_deps (struct link_map *map, + if (__builtin_expect (GLRO_dl_debug_mask & DL_DEBUG_FILES, 0)) +diff -Naur eglibc-2.14.1-15769/elf/dl-deps.c eglibc-2.14.1-15769.patch/elf/dl-deps.c +--- eglibc-2.14.1-15769/elf/dl-deps.c 2011-11-10 17:59:49.000000000 +0100 ++++ eglibc-2.14.1-15769.patch/elf/dl-deps.c 2011-11-11 13:14:07.711207504 +0100 +@@ -478,6 +478,7 @@ nneeded * sizeof needed[0]); atomic_write_barrier (); l->l_initfini = l_initfini; @@ -46,7 +44,7 @@ index 9e30594..3890d00 100644 } /* If we have no auxiliary objects just go on to the next map. */ -@@ -681,6 +682,7 @@ Filters not supported with LD_TRACE_PRELINKING")); +@@ -678,6 +679,7 @@ l_initfini[nlist] = NULL; atomic_write_barrier (); map->l_initfini = l_initfini; @@ -54,18 +52,19 @@ index 9e30594..3890d00 100644 if (l_reldeps != NULL) { atomic_write_barrier (); -@@ -689,5 +691,5 @@ Filters not supported with LD_TRACE_PRELINKING")); +@@ -686,7 +688,7 @@ _dl_scope_free (old_l_reldeps); } if (old_l_initfini != NULL) - map->l_orig_initfini = old_l_initfini; + _dl_scope_free (old_l_initfini); - } -diff --git a/elf/dl-libc.c b/elf/dl-libc.c -index 7be9483..a13fce3 100644 ---- a/elf/dl-libc.c -+++ b/elf/dl-libc.c -@@ -265,13 +265,13 @@ libc_freeres_fn (free_mem) + + if (errno_reason) + _dl_signal_error (errno_reason == -1 ? 0 : errno_reason, objname, +diff -Naur eglibc-2.14.1-15769/elf/dl-libc.c eglibc-2.14.1-15769.patch/elf/dl-libc.c +--- eglibc-2.14.1-15769/elf/dl-libc.c 2011-11-10 17:59:49.000000000 +0100 ++++ eglibc-2.14.1-15769.patch/elf/dl-libc.c 2011-11-11 13:11:54.319765853 +0100 +@@ -265,13 +265,13 @@ for (Lmid_t ns = 0; ns < GL(dl_nns); ++ns) { @@ -80,7 +79,7 @@ index 7be9483..a13fce3 100644 while (lnp != NULL) { struct libname_list *old = lnp; -@@ -279,6 +279,10 @@ libc_freeres_fn (free_mem) +@@ -279,6 +279,10 @@ if (! old->dont_free) free (old); } @@ -91,11 +90,10 @@ index 7be9483..a13fce3 100644 } if (__builtin_expect (GL(dl_ns)[ns]._ns_global_scope_alloc, 0) != 0 -diff --git a/elf/rtld.c b/elf/rtld.c -index 4a9109e..617e30e 100644 ---- a/elf/rtld.c -+++ b/elf/rtld.c -@@ -2251,6 +2251,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", +diff -Naur eglibc-2.14.1-15769/elf/rtld.c eglibc-2.14.1-15769.patch/elf/rtld.c +--- eglibc-2.14.1-15769/elf/rtld.c 2011-11-10 17:59:49.000000000 +0100 ++++ eglibc-2.14.1-15769.patch/elf/rtld.c 2011-11-11 13:11:54.320765834 +0100 +@@ -2264,6 +2264,7 @@ lnp->dont_free = 1; lnp = lnp->next; } @@ -103,10 +101,9 @@ index 4a9109e..617e30e 100644 if (l != &GL(dl_rtld_map)) _dl_relocate_object (l, l->l_scope, GLRO(dl_lazy) ? RTLD_LAZY : 0, -diff --git a/include/link.h b/include/link.h -index e877104..051b99a 100644 ---- a/include/link.h -+++ b/include/link.h +diff -Naur eglibc-2.14.1-15769/include/link.h eglibc-2.14.1-15769.patch/include/link.h +--- eglibc-2.14.1-15769/include/link.h 2011-11-10 17:59:51.000000000 +0100 ++++ eglibc-2.14.1-15769.patch/include/link.h 2011-11-11 13:11:54.321765815 +0100 @@ -1,6 +1,6 @@ /* Data structure for communication from the run-time dynamic linker for loaded ELF shared objects. @@ -115,7 +112,7 @@ index e877104..051b99a 100644 This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or -@@ -192,6 +192,9 @@ struct link_map +@@ -192,6 +192,9 @@ during LD_TRACE_PRELINKING=1 contains any DT_SYMBOLIC libraries. */ @@ -125,7 +122,7 @@ index e877104..051b99a 100644 /* Collected information about own RPATH directories. */ struct r_search_path_struct l_rpath_dirs; -@@ -240,9 +243,6 @@ struct link_map +@@ -240,9 +243,6 @@ /* List of object in order of the init and fini calls. */ struct link_map **l_initfini; diff --git a/packages/toolchain/devel/eglibc/patches/eglibc-2.14-15360-libgcc_eh-1.patch b/packages/toolchain/devel/eglibc/patches/eglibc-2.14.1-15769-libgcc_eh-1.patch similarity index 100% rename from packages/toolchain/devel/eglibc/patches/eglibc-2.14-15360-libgcc_eh-1.patch rename to packages/toolchain/devel/eglibc/patches/eglibc-2.14.1-15769-libgcc_eh-1.patch diff --git a/packages/toolchain/devel/eglibc/patches/eglibc-2.14-15360-restore-rpc+nis.patch b/packages/toolchain/devel/eglibc/patches/eglibc-2.14.1-15769-restore-rpc+nis.patch similarity index 100% rename from packages/toolchain/devel/eglibc/patches/eglibc-2.14-15360-restore-rpc+nis.patch rename to packages/toolchain/devel/eglibc/patches/eglibc-2.14.1-15769-restore-rpc+nis.patch diff --git a/packages/toolchain/devel/eglibc/patches/eglibc-2.14-15360-select_fd_type.patch b/packages/toolchain/devel/eglibc/patches/eglibc-2.14.1-15769-select_fd_type.patch similarity index 100% rename from packages/toolchain/devel/eglibc/patches/eglibc-2.14-15360-select_fd_type.patch rename to packages/toolchain/devel/eglibc/patches/eglibc-2.14.1-15769-select_fd_type.patch From 32e81df74a6ab8d2be55818e167d85e39bc17580 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 12 Nov 2011 02:19:41 +0100 Subject: [PATCH 78/89] busybox: dont install symlinks in /usr, add switch_root and mount.cifs to busybox Signed-off-by: Stephan Raue --- packages/sysutils/busybox/config/busybox.conf | 14 +++++++------- packages/sysutils/busybox/profile.d/systemid.conf | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/sysutils/busybox/config/busybox.conf b/packages/sysutils/busybox/config/busybox.conf index 9cb258f583..17a1e9f14f 100644 --- a/packages/sysutils/busybox/config/busybox.conf +++ b/packages/sysutils/busybox/config/busybox.conf @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Busybox version: 1.19.2 -# Wed Sep 28 18:13:56 2011 +# Busybox version: 1.19.3 +# Fri Nov 11 18:25:06 2011 # CONFIG_HAVE_DOT_CONFIG=y @@ -23,8 +23,8 @@ CONFIG_FEATURE_BUFFERS_GO_ON_STACK=y CONFIG_SHOW_USAGE=y CONFIG_FEATURE_VERBOSE_USAGE=y # CONFIG_FEATURE_COMPRESS_USAGE is not set -# CONFIG_FEATURE_INSTALLER is not set -# CONFIG_INSTALL_NO_USR is not set +CONFIG_FEATURE_INSTALLER=y +CONFIG_INSTALL_NO_USR=y # CONFIG_LOCALE_SUPPORT is not set CONFIG_UNICODE_SUPPORT=y # CONFIG_UNICODE_USING_LOCALE is not set @@ -517,7 +517,7 @@ CONFIG_DEFAULT_DEPMOD_FILE="modules.dep" # CONFIG_REV is not set # CONFIG_ACPID is not set # CONFIG_FEATURE_ACPID_COMPAT is not set -# CONFIG_BLKID is not set +CONFIG_BLKID=y # CONFIG_FEATURE_BLKID_TYPE is not set CONFIG_DMESG=y CONFIG_FEATURE_DMESG_PRETTY=y @@ -572,7 +572,7 @@ CONFIG_FEATURE_MOUNT_VERBOSE=y CONFIG_FEATURE_MOUNT_HELPERS=y CONFIG_FEATURE_MOUNT_LABEL=y CONFIG_FEATURE_MOUNT_NFS=y -# CONFIG_FEATURE_MOUNT_CIFS is not set +CONFIG_FEATURE_MOUNT_CIFS=y CONFIG_FEATURE_MOUNT_FLAGS=y # CONFIG_FEATURE_MOUNT_FSTAB is not set # CONFIG_PIVOT_ROOT is not set @@ -585,7 +585,7 @@ CONFIG_RDATE=y # CONFIG_SETARCH is not set # CONFIG_SWAPONOFF is not set # CONFIG_FEATURE_SWAPON_PRI is not set -# CONFIG_SWITCH_ROOT is not set +CONFIG_SWITCH_ROOT=y CONFIG_UMOUNT=y CONFIG_FEATURE_UMOUNT_ALL=y diff --git a/packages/sysutils/busybox/profile.d/systemid.conf b/packages/sysutils/busybox/profile.d/systemid.conf index d358798797..a3d985e9cb 100644 --- a/packages/sysutils/busybox/profile.d/systemid.conf +++ b/packages/sysutils/busybox/profile.d/systemid.conf @@ -32,7 +32,7 @@ elif [ -e "/sys/class/net/wlan0/address" ]; then fi if [ -n "$MAC_ADRESS" ]; then - SYSTEMID=`/bin/echo $MAC_ADRESS | /usr/bin/md5sum | /usr/bin/cut -f1 -d" "` + SYSTEMID=`echo $MAC_ADRESS | md5sum | cut -f1 -d" "` fi export SYSTEMID From 5e18d23a149f75441856e94b76f017d977a24142 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 12 Nov 2011 02:19:59 +0100 Subject: [PATCH 79/89] Python: fix build Signed-off-by: Stephan Raue --- packages/lang/Python/build | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/lang/Python/build b/packages/lang/Python/build index 9aefc85f5e..f0786dd0ae 100755 --- a/packages/lang/Python/build +++ b/packages/lang/Python/build @@ -63,6 +63,7 @@ make -j1 CC="$TARGET_CC" \ HOSTPYTHON=$ROOT/$TOOLCHAIN/bin/python \ HOSTPGEN=$ROOT/$TOOLCHAIN/bin/pgen \ BLDSHARED="$CC -shared" \ + RUNSHARED="LD_LIBRARY_PATH=$ROOT/$TOOLCHAIN/:$LD_LIBRARY_PATH" \ PYTHON_DISABLE_MODULES="$PY_DISABLED_MODULES" \ CROSS_COMPILE="$TARGET_NAME" \ CROSS_COMPILE_TARGET="yes" \ @@ -74,6 +75,7 @@ make -j1 CC="$TARGET_CC" \ HOSTPYTHON=$ROOT/$TOOLCHAIN/bin/python \ HOSTPGEN=$ROOT/$TOOLCHAIN/bin/pgen \ BLDSHARED="$CC -shared" \ + RUNSHARED="LD_LIBRARY_PATH=$ROOT/$TOOLCHAIN/:$LD_LIBRARY_PATH" \ PYTHON_DISABLE_MODULES="$PY_DISABLED_MODULES" \ CROSS_COMPILE="$TARGET_NAME" \ CROSS_COMPILE_TARGET="yes" \ From 7ae6ec453b299165a25cf19a6f63ad5c1f30cf55 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 12 Nov 2011 04:31:40 +0100 Subject: [PATCH 80/89] alsa-utils: move soundconfig to /usr/lib/udev, cleanup Signed-off-by: Stephan Raue --- packages/audio/alsa-utils/install | 5 +++-- packages/audio/alsa-utils/udev.d/40-alsa.rules | 13 +------------ 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/packages/audio/alsa-utils/install b/packages/audio/alsa-utils/install index a599857b56..f5284f5a5c 100755 --- a/packages/audio/alsa-utils/install +++ b/packages/audio/alsa-utils/install @@ -25,13 +25,14 @@ mkdir -p $INSTALL/usr/bin cp $PKG_BUILD/amixer/amixer $INSTALL/usr/bin cp $PKG_BUILD/aplay/aplay $INSTALL/usr/bin - cp $PKG_DIR/scripts/soundconfig $INSTALL/usr/bin cp $PKG_BUILD/speaker-test/speaker-test $INSTALL/usr/bin +mkdir -p $INSTALL/usr/lib/udev + cp $PKG_DIR/scripts/soundconfig $INSTALL/usr/lib/udev + mkdir -p $INSTALL/usr/sbin cp $PKG_BUILD/alsactl/alsactl $INSTALL/usr/sbin mkdir -p $INSTALL/usr/share/alsa/init cp $PKG_BUILD/alsactl/init/* $INSTALL/usr/share/alsa/init rm -rf $INSTALL/usr/share/alsa/init/Makefile* - diff --git a/packages/audio/alsa-utils/udev.d/40-alsa.rules b/packages/audio/alsa-utils/udev.d/40-alsa.rules index fba4e61f66..c20bd742ae 100644 --- a/packages/audio/alsa-utils/udev.d/40-alsa.rules +++ b/packages/audio/alsa-utils/udev.d/40-alsa.rules @@ -18,16 +18,5 @@ # http://www.gnu.org/copyleft/gpl.html ################################################################################ -# Give the audio group ownership of sound devices -SUBSYSTEM=="sound", GROUP="audio" -SUBSYSTEM=="snd", GROUP="audio" - -# ALSA Devices # When a sound device is detected, restore the volume settings -KERNEL=="controlC[0-9]*", NAME="snd/%k", ACTION=="add", RUN+="/usr/bin/soundconfig" -KERNEL=="hw[CD0-9]*", NAME="snd/%k" -KERNEL=="pcm[CD0-9cp]*", NAME="snd/%k" -KERNEL=="midiC[D0-9]*", NAME="snd/%k" -KERNEL=="timer", NAME="snd/%k" -KERNEL=="seq", NAME="snd/%k" -KERNEL=="mixer0", SYMLINK+="mixer" + KERNEL=="controlC[0-9]*", NAME="snd/%k", ACTION=="add", RUN+="soundconfig" From 9e555571a9cf74926a0ee668a1db17b5e70118ec Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 12 Nov 2011 04:32:59 +0100 Subject: [PATCH 81/89] libsamplerate: update to libsamplerate-0.1.8, enable libsndfile support Signed-off-by: Stephan Raue --- packages/audio/libsamplerate/build | 2 +- packages/audio/libsamplerate/meta | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/audio/libsamplerate/build b/packages/audio/libsamplerate/build index b5e8f9ab90..0c5634b2f6 100755 --- a/packages/audio/libsamplerate/build +++ b/packages/audio/libsamplerate/build @@ -32,7 +32,7 @@ cd $PKG_BUILD --disable-static \ --datadir=/usr/share \ --disable-fftw \ - --disable-sndfile \ + --enable-sndfile \ make diff --git a/packages/audio/libsamplerate/meta b/packages/audio/libsamplerate/meta index 49aadaaf73..1f7431b4de 100644 --- a/packages/audio/libsamplerate/meta +++ b/packages/audio/libsamplerate/meta @@ -19,14 +19,14 @@ ################################################################################ PKG_NAME="libsamplerate" -PKG_VERSION="0.1.7" +PKG_VERSION="0.1.8" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://www.mega-nerd.com/SRC/" PKG_URL="http://www.mega-nerd.com/SRC/$PKG_NAME-$PKG_VERSION.tar.gz" -PKG_DEPENDS="" -PKG_BUILD_DEPENDS="toolchain" +PKG_DEPENDS="libsndfile" +PKG_BUILD_DEPENDS="toolchain libsndfile" PKG_PRIORITY="optional" PKG_SECTION="audio" PKG_SHORTDESC="libsamplerate: A Sample Rate Converter library for audio" From 2b97ecc8d516b7bf5c504320893ae22f61ada8ee Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 12 Nov 2011 04:34:37 +0100 Subject: [PATCH 82/89] libsndfile: enable flac, libogg, libvorbis and sqlite support Signed-off-by: Stephan Raue --- packages/audio/libsndfile/build | 4 ++-- packages/audio/libsndfile/meta | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/audio/libsndfile/build b/packages/audio/libsndfile/build index 3589a7ddda..7cf787b5db 100755 --- a/packages/audio/libsndfile/build +++ b/packages/audio/libsndfile/build @@ -29,9 +29,9 @@ cd $PKG_BUILD --disable-static \ --enable-shared \ --disable-silent-rules \ - --disable-sqlite \ + --enable-sqlite \ --enable-alsa \ - --disable-external-libs \ + --enable-external-libs \ --disable-experimental \ --disable-test-coverage \ --enable-largefile \ diff --git a/packages/audio/libsndfile/meta b/packages/audio/libsndfile/meta index bf4b6ab070..35768b3722 100644 --- a/packages/audio/libsndfile/meta +++ b/packages/audio/libsndfile/meta @@ -25,8 +25,8 @@ PKG_ARCH="any" PKG_LICENSE="LGPL" PKG_SITE="http://www.mega-nerd.com/libsndfile/" PKG_URL="http://www.mega-nerd.com/$PKG_NAME/files/$PKG_NAME-$PKG_VERSION.tar.gz" -PKG_DEPENDS="alsa-lib" -PKG_BUILD_DEPENDS="toolchain alsa-lib" +PKG_DEPENDS="alsa-lib sqlite flac libvorbis libogg" +PKG_BUILD_DEPENDS="toolchain alsa-lib sqlite flac libvorbis libogg" PKG_PRIORITY="optional" PKG_SECTION="audio" PKG_SHORTDESC="libsndfile: A library for accessing various audio file formats" From 027ac35b88efe348d18ddd7571ad0d076a20e727 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 12 Nov 2011 05:47:42 +0100 Subject: [PATCH 83/89] tools/mkpkg: add script to get and pack eglibc-2.14.1 Signed-off-by: Stephan Raue --- tools/mkpkg/mkpkg_eglibc-2.14.1 | 45 +++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100755 tools/mkpkg/mkpkg_eglibc-2.14.1 diff --git a/tools/mkpkg/mkpkg_eglibc-2.14.1 b/tools/mkpkg/mkpkg_eglibc-2.14.1 new file mode 100755 index 0000000000..4f790f9d65 --- /dev/null +++ b/tools/mkpkg/mkpkg_eglibc-2.14.1 @@ -0,0 +1,45 @@ +#!/bin/sh +################################################################################ +# This file is part of OpenELEC - http://www.openelec.tv +# Copyright (C) 2009-2011 Stephan Raue (stephan@openelec.tv) +# +# 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, 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 OpenELEC.tv; see the file COPYING. If not, write to +# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +# http://www.gnu.org/copyleft/gpl.html +################################################################################ + +echo "getting sources..." + svn co svn://svn.eglibc.org/branches/eglibc-2_14/libc eglibc-2.14.1-latest + svn co svn://svn.eglibc.org/branches/eglibc-2_14/ports eglibc-2.14.1-latest/ports + svn co svn://svn.eglibc.org/branches/eglibc-2_14/linuxthreads/linuxthreads eglibc-2.14.1-latest/linuxthreads + svn co svn://svn.eglibc.org/branches/eglibc-2_14/linuxthreads/linuxthreads_db eglibc-2.14.1-latest/linuxthreads_db + +echo "getting version..." + cd eglibc-2.14.1-latest + SVN_REV=`LANG=C svn info 2>/dev/null | grep Revision: | sed -e 's/.*\: //'` + echo $SVN_REV + cd .. + +echo "copying sources..." + rm -rf eglibc-2.14.1-$SVN_REV + cp -R eglibc-2.14.1-latest eglibc-2.14.1-$SVN_REV + +echo "cleaning sources..." + find eglibc-2.14.1-$SVN_REV -name .svn -exec rm -rf {} ";" + +echo "packing sources..." + tar cvJf eglibc-2.14.1-$SVN_REV.tar.xz eglibc-2.14.1-$SVN_REV + +echo "remove temporary sourcedir..." + rm -rf eglibc-2.14.1-$SVN_REV From 961c6b170ae33ddfcc08f4ee50ea177d1f16d299 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 12 Nov 2011 05:48:47 +0100 Subject: [PATCH 84/89] alsa-plugins: install some more symlinks Signed-off-by: Stephan Raue --- packages/audio/alsa-plugins/install | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/audio/alsa-plugins/install b/packages/audio/alsa-plugins/install index 626ab795a1..de131369b6 100755 --- a/packages/audio/alsa-plugins/install +++ b/packages/audio/alsa-plugins/install @@ -24,6 +24,10 @@ mkdir -p $INSTALL/usr/lib/alsa cp -P $PKG_BUILD/*/.libs/*.so $INSTALL/usr/lib/alsa + if [ -f $INSTALL/usr/lib/alsa/libasound_module_rate_speexrate.so ]; then + ln -sf libasound_module_rate_speexrate.so $INSTALL/usr/lib/alsa/libasound_module_rate_speexrate_best.so + ln -sf libasound_module_rate_speexrate.so $INSTALL/usr/lib/alsa/libasound_module_rate_speexrate_medium.so + fi mkdir -p $INSTALL/usr/share/alsa/pcm cp -R $PKG_DIR/config/*.conf $INSTALL/usr/share/alsa/pcm From 5b4fb51136863f6119940aec4e19fc370ef5b5b7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 12 Nov 2011 05:49:54 +0100 Subject: [PATCH 85/89] alsa: install alsa-plugins if pulseaudio is enabled Signed-off-by: Stephan Raue --- packages/audio/alsa/meta | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/audio/alsa/meta b/packages/audio/alsa/meta index 512a494749..5a494cdb61 100644 --- a/packages/audio/alsa/meta +++ b/packages/audio/alsa/meta @@ -34,3 +34,9 @@ PKG_LONGDESC="ALSA (Advanced Linux Sound Architecture) is the next generation Li PKG_IS_ADDON="no" PKG_AUTORECONF="no" + +if [ "$PULSEAUDIO_SUPPORT" = yes ]; then + PKG_DEPENDS="$PKG_DEPENDS alsa-plugins" + PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS alsa-plugins" +fi + From 57b55aea96bcca67e0bfd9d566b26353c86000fc Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 12 Nov 2011 05:50:48 +0100 Subject: [PATCH 86/89] xbmc: install pulseaudio if enabled Signed-off-by: Stephan Raue --- packages/mediacenter/xbmc/meta | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/mediacenter/xbmc/meta b/packages/mediacenter/xbmc/meta index 094e4db159..5af42f16f3 100644 --- a/packages/mediacenter/xbmc/meta +++ b/packages/mediacenter/xbmc/meta @@ -47,6 +47,11 @@ PKG_AUTORECONF="no" PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS dbus" PKG_DEPENDS="$PKG_DEPENDS dbus" +if [ "$PULSEAUDIO_SUPPORT" = yes ]; then + PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS pulseaudio" + PKG_DEPENDS="$PKG_DEPENDS pulseaudio" +fi + if [ "$CEC_SUPPORT" = yes ]; then PKG_BUILD_DEPENDS="$PKG_BUILD_DEPENDS libcec" PKG_DEPENDS="$PKG_DEPENDS libcec" From b412475cbed9800b712e679bd76e87b8e1a2ccdf Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sat, 12 Nov 2011 15:41:24 +0100 Subject: [PATCH 87/89] dbus: dont build with x11 support Signed-off-by: Stephan Raue --- packages/sysutils/dbus/build | 4 ++-- packages/sysutils/dbus/meta | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/sysutils/dbus/build b/packages/sysutils/dbus/build index 61eeed1888..31310402b2 100755 --- a/packages/sysutils/dbus/build +++ b/packages/sysutils/dbus/build @@ -42,13 +42,13 @@ mkdir -p .build-target && cd .build-target --disable-xml-docs \ --disable-doxygen-docs \ --enable-abstract-sockets \ - --enable-x11-autolaunch \ + --disable-x11-autolaunch \ --disable-selinux \ --disable-libaudit \ --enable-dnotify \ --enable-inotify \ --with-xml=expat \ - --with-x \ + --without-x \ --with-dbus-user=dbus \ make diff --git a/packages/sysutils/dbus/meta b/packages/sysutils/dbus/meta index 6f6c013875..7dad0841e1 100644 --- a/packages/sysutils/dbus/meta +++ b/packages/sysutils/dbus/meta @@ -25,8 +25,8 @@ PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://dbus.freedesktop.org" PKG_URL="http://dbus.freedesktop.org/releases/$PKG_NAME/$PKG_NAME-$PKG_VERSION.tar.gz" -PKG_DEPENDS="expat libX11" -PKG_BUILD_DEPENDS="toolchain expat libX11" +PKG_DEPENDS="expat" +PKG_BUILD_DEPENDS="toolchain expat" PKG_PRIORITY="required" PKG_SECTION="system" PKG_SHORTDESC="dbus: simple interprocess messaging system" From 7cbf464906b3b57e96ee7fc0b434971ea99ed8ab Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 16 Nov 2011 18:57:27 +0100 Subject: [PATCH 88/89] pulseaudio: rework package Signed-off-by: Stephan Raue --- packages/audio/pulseaudio/build | 16 +- packages/audio/pulseaudio/config/default.pa | 3 +- .../init.d/{35_PulseAudio => 91_PulseAudio} | 6 +- packages/audio/pulseaudio/install | 4 +- packages/audio/pulseaudio/meta | 4 +- ...-fixed-latency-range-in-alsa-modules.patch | 218 ++++++++++++++++++ ...tency-range-handling-for-udev-detect.patch | 78 +++++++ ...cy_range-modarg-for-module-alsa-card.patch | 32 +++ 8 files changed, 340 insertions(+), 21 deletions(-) rename packages/audio/pulseaudio/init.d/{35_PulseAudio => 91_PulseAudio} (90%) create mode 100644 packages/audio/pulseaudio/patches/pulseaudio-1.1-0001-alsa-support-fixed-latency-range-in-alsa-modules.patch create mode 100644 packages/audio/pulseaudio/patches/pulseaudio-1.1-0002-alsa-fixed-latency-range-handling-for-udev-detect.patch create mode 100644 packages/audio/pulseaudio/patches/pulseaudio-1.1-0003-alsa-fixed_latency_range-modarg-for-module-alsa-card.patch diff --git a/packages/audio/pulseaudio/build b/packages/audio/pulseaudio/build index f26b88e560..9b748cfcd3 100755 --- a/packages/audio/pulseaudio/build +++ b/packages/audio/pulseaudio/build @@ -44,7 +44,7 @@ cd $PKG_BUILD --disable-nls \ --enable-largefile \ --disable-rpath \ - --enable-x11 \ + --disable-x11 \ --enable-samplerate \ --disable-oss-output \ --disable-oss-wrapper \ @@ -70,26 +70,20 @@ cd $PKG_BUILD --disable-orc \ --disable-manpages \ --disable-per-user-esound-socket \ - --enable-legacy-runtime-dir \ - --enable-legacy-database-entry-format \ + --disable-legacy-runtime-dir \ + --disable-legacy-database-entry-format \ --with-system-user=root \ --with-system-group=root \ --with-access-group=root \ --with-module-dir="/usr/lib/pulse" \ -# --with-system-user=pulse \ -# --with-system-group=pulse \ -# --with-access-group=pulse-access \ - -# --with-system-user=root \ -# --with-system-group=root \ -# --with-access-group=root \ - make mkdir -p $SYSROOT_PREFIX/usr/lib cp -P src/.libs/libpulse.so* $SYSROOT_PREFIX/usr/lib cp -P src/.libs/libpulse-simple.so* $SYSROOT_PREFIX/usr/lib + cp -P src/.libs/libpulsecommon-*.so* $SYSROOT_PREFIX/usr/lib + cp -P src/.libs/libpulsecore-*.so $SYSROOT_PREFIX/usr/lib mkdir -p $SYSROOT_PREFIX/usr/lib/pkgconfig cp libpulse.pc $SYSROOT_PREFIX/usr/lib/pkgconfig diff --git a/packages/audio/pulseaudio/config/default.pa b/packages/audio/pulseaudio/config/default.pa index 431d5e420b..814f24e45a 100644 --- a/packages/audio/pulseaudio/config/default.pa +++ b/packages/audio/pulseaudio/config/default.pa @@ -41,9 +41,10 @@ load-module module-augment-properties ### Load audio drivers statically ### (it's probably better to not load these drivers manually, but instead ### use module-udev-detect -- see below -- for doing this automatically) -load-module module-alsa-sink device=hw:1,7 +#load-module module-alsa-sink device=hw:1,7 #load-module module-alsa-sink #load-module module-alsa-source device=hw:1,0 +load-module module-alsa-source device=hw:1,7 #load-module module-null-sink #load-module module-pipe-sink diff --git a/packages/audio/pulseaudio/init.d/35_PulseAudio b/packages/audio/pulseaudio/init.d/91_PulseAudio similarity index 90% rename from packages/audio/pulseaudio/init.d/35_PulseAudio rename to packages/audio/pulseaudio/init.d/91_PulseAudio index 0b4f058936..8d4f0b5706 100644 --- a/packages/audio/pulseaudio/init.d/35_PulseAudio +++ b/packages/audio/pulseaudio/init.d/91_PulseAudio @@ -23,10 +23,6 @@ # runlevels: openelec, textmode progress "starting PulseAudio daemon" - pulseaudio --system \ - --daemonize \ + pulseaudio --system --daemonize \ --log-target=file:/var/log/pulseaudio.log \ --log-level=debug >/dev/null 2>&1 - -# --disallow-exit \ -# --disallow-module-loading \ diff --git a/packages/audio/pulseaudio/install b/packages/audio/pulseaudio/install index 89b4fc1a60..d692ee1fc7 100755 --- a/packages/audio/pulseaudio/install +++ b/packages/audio/pulseaudio/install @@ -20,7 +20,7 @@ mkdir -p $INSTALL/etc/pulse cp $PKG_BUILD/src/client.conf $INSTALL/etc/pulse cp $PKG_BUILD/src/daemon.conf $INSTALL/etc/pulse # cp $PKG_BUILD/src/default.pa $INSTALL/etc/pulse - cp $PKG_DIR/config/default.pa $INSTALL/etc/pulse +# cp $PKG_DIR/config/default.pa $INSTALL/etc/pulse cp $PKG_BUILD/src/system.pa $INSTALL/etc/pulse mkdir -p $INSTALL/usr/lib/udev/rules.d @@ -35,7 +35,7 @@ mkdir -p $INSTALL/usr/bin ln -sf pactl $INSTALL/usr/bin/parec ln -sf pactl $INSTALL/usr/bin/parecord cp $PKG_BUILD/src/.libs/pasuspender $INSTALL/usr/bin - cp $PKG_BUILD/src/.libs/pax11publish $INSTALL/usr/bin +# cp $PKG_BUILD/src/.libs/pax11publish $INSTALL/usr/bin cp $PKG_BUILD/src/.libs/pulseaudio $INSTALL/usr/bin # cp $PKG_BUILD/src/start-pulseaudio-x11 $INSTALL/usr/bin diff --git a/packages/audio/pulseaudio/meta b/packages/audio/pulseaudio/meta index 8c9c2ac957..a5cd5f98b2 100644 --- a/packages/audio/pulseaudio/meta +++ b/packages/audio/pulseaudio/meta @@ -24,8 +24,8 @@ PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="GPL" PKG_SITE="http://pulseaudio.org/" -PKG_URL="http://freedesktop.org/software/pulseaudio/releases/$PKG_NAME-$PKG_VERSION.tar.gz" -PKG_DEPENDS="libtool json-c alsa-lib libsndfile libsamplerate speex dbus udev openssl alsa-plugins" +PKG_URL="http://freedesktop.org/software/pulseaudio/releases/$PKG_NAME-$PKG_VERSION.tar.xz" +PKG_DEPENDS="libtool json-c alsa-lib libsndfile libsamplerate speex dbus udev openssl" PKG_BUILD_DEPENDS="toolchain libtool json-c alsa-lib libsndfile libsamplerate speex dbus udev openssl" PKG_PRIORITY="optional" PKG_SECTION="audio" diff --git a/packages/audio/pulseaudio/patches/pulseaudio-1.1-0001-alsa-support-fixed-latency-range-in-alsa-modules.patch b/packages/audio/pulseaudio/patches/pulseaudio-1.1-0001-alsa-support-fixed-latency-range-in-alsa-modules.patch new file mode 100644 index 0000000000..2c71ab052e --- /dev/null +++ b/packages/audio/pulseaudio/patches/pulseaudio-1.1-0001-alsa-support-fixed-latency-range-in-alsa-modules.patch @@ -0,0 +1,218 @@ +From 7a387fed36ed5bc0b925269fb76b5e8e3a738a5f Mon Sep 17 00:00:00 2001 +From: "Lars R. Damerow" +Date: Thu, 3 Nov 2011 21:14:45 +0100 +Subject: [PATCH 1/3] alsa: support fixed latency range in alsa modules + +This adds a boolean module parameter to disable automatic dynamic +latency readjustments on underruns, but leaves automatic dynamic +watermark readjustments untouched. +--- + src/modules/alsa/alsa-sink.c | 23 +++++++++++++++++++---- + src/modules/alsa/alsa-source.c | 22 ++++++++++++++++++---- + src/modules/alsa/module-alsa-sink.c | 4 +++- + src/modules/alsa/module-alsa-source.c | 4 +++- + src/pulsecore/protocol-native.c | 4 ++++ + 5 files changed, 47 insertions(+), 10 deletions(-) + +diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c +index 7b31b1b..1386196 100644 +--- a/src/modules/alsa/alsa-sink.c ++++ b/src/modules/alsa/alsa-sink.c +@@ -134,7 +134,7 @@ struct userdata { + char *device_name; /* name of the PCM device */ + char *control_device; /* name of the control device */ + +- pa_bool_t use_mmap:1, use_tsched:1, deferred_volume:1; ++ pa_bool_t use_mmap:1, use_tsched:1, deferred_volume:1, fixed_latency_range:1; + + pa_bool_t first, after_rewind; + +@@ -331,7 +331,12 @@ static void increase_watermark(struct userdata *u) { + return; + } + +- /* Hmm, we cannot increase the watermark any further, hence let's raise the latency */ ++ /* Hmm, we cannot increase the watermark any further, hence let's ++ raise the latency, unless doing so was disabled in ++ configuration */ ++ if (u->fixed_latency_range) ++ return; ++ + old_min_latency = u->sink->thread_info.min_latency; + new_min_latency = PA_MIN(old_min_latency * 2, old_min_latency + TSCHED_WATERMARK_INC_STEP_USEC); + new_min_latency = PA_MIN(new_min_latency, u->sink->thread_info.max_latency); +@@ -1969,7 +1974,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca + uint32_t nfrags, frag_size, buffer_size, tsched_size, tsched_watermark, rewind_safeguard; + snd_pcm_uframes_t period_frames, buffer_frames, tsched_frames; + size_t frame_size; +- pa_bool_t use_mmap = TRUE, b, use_tsched = TRUE, d, ignore_dB = FALSE, namereg_fail = FALSE, deferred_volume = FALSE, set_formats = FALSE; ++ pa_bool_t use_mmap = TRUE, b, use_tsched = TRUE, d, ignore_dB = FALSE, namereg_fail = FALSE, deferred_volume = FALSE, set_formats = FALSE, fixed_latency_range = FALSE; + pa_sink_new_data data; + pa_alsa_profile_set *profile_set = NULL; + +@@ -2039,6 +2044,11 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca + goto fail; + } + ++ if (pa_modargs_get_value_boolean(ma, "fixed_latency_range", &fixed_latency_range) < 0) { ++ pa_log("Failed to parse fixed_latency_range argument."); ++ goto fail; ++ } ++ + use_tsched = pa_alsa_may_tsched(use_tsched); + + u = pa_xnew0(struct userdata, 1); +@@ -2047,6 +2057,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca + u->use_mmap = use_mmap; + u->use_tsched = use_tsched; + u->deferred_volume = deferred_volume; ++ u->fixed_latency_range = fixed_latency_range; + u->first = TRUE; + u->rewind_safeguard = rewind_safeguard; + u->rtpoll = pa_rtpoll_new(); +@@ -2143,9 +2154,13 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca + if (u->use_mmap) + pa_log_info("Successfully enabled mmap() mode."); + +- if (u->use_tsched) ++ if (u->use_tsched) { + pa_log_info("Successfully enabled timer-based scheduling mode."); + ++ if (u->fixed_latency_range) ++ pa_log_info("Disabling latency range changes on underrun"); ++ } ++ + if (is_iec958(u) || is_hdmi(u)) + set_formats = TRUE; + +diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c +index 7a51572..255a61d 100644 +--- a/src/modules/alsa/alsa-source.c ++++ b/src/modules/alsa/alsa-source.c +@@ -121,7 +121,7 @@ struct userdata { + char *device_name; /* name of the PCM device */ + char *control_device; /* name of the control device */ + +- pa_bool_t use_mmap:1, use_tsched:1, deferred_volume:1; ++ pa_bool_t use_mmap:1, use_tsched:1, deferred_volume:1, fixed_latency_range:1; + + pa_bool_t first; + +@@ -306,7 +306,12 @@ static void increase_watermark(struct userdata *u) { + return; + } + +- /* Hmm, we cannot increase the watermark any further, hence let's raise the latency */ ++ /* Hmm, we cannot increase the watermark any further, hence let's ++ raise the latency unless doing so was disabled in ++ configuration */ ++ if (u->fixed_latency_range) ++ return; ++ + old_min_latency = u->source->thread_info.min_latency; + new_min_latency = PA_MIN(old_min_latency * 2, old_min_latency + TSCHED_WATERMARK_INC_STEP_USEC); + new_min_latency = PA_MIN(new_min_latency, u->source->thread_info.max_latency); +@@ -1710,7 +1715,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p + uint32_t nfrags, frag_size, buffer_size, tsched_size, tsched_watermark; + snd_pcm_uframes_t period_frames, buffer_frames, tsched_frames; + size_t frame_size; +- pa_bool_t use_mmap = TRUE, b, use_tsched = TRUE, d, ignore_dB = FALSE, namereg_fail = FALSE, deferred_volume = FALSE; ++ pa_bool_t use_mmap = TRUE, b, use_tsched = TRUE, d, ignore_dB = FALSE, namereg_fail = FALSE, deferred_volume = FALSE, fixed_latency_range = FALSE; + pa_source_new_data data; + pa_alsa_profile_set *profile_set = NULL; + +@@ -1774,6 +1779,11 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p + goto fail; + } + ++ if (pa_modargs_get_value_boolean(ma, "fixed_latency_range", &fixed_latency_range) < 0) { ++ pa_log("Failed to parse fixed_latency_range argument."); ++ goto fail; ++ } ++ + use_tsched = pa_alsa_may_tsched(use_tsched); + + u = pa_xnew0(struct userdata, 1); +@@ -1782,6 +1792,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p + u->use_mmap = use_mmap; + u->use_tsched = use_tsched; + u->deferred_volume = deferred_volume; ++ u->fixed_latency_range = fixed_latency_range; + u->first = TRUE; + u->rtpoll = pa_rtpoll_new(); + pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll); +@@ -1877,8 +1888,11 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p + if (u->use_mmap) + pa_log_info("Successfully enabled mmap() mode."); + +- if (u->use_tsched) ++ if (u->use_tsched) { + pa_log_info("Successfully enabled timer-based scheduling mode."); ++ if (u->fixed_latency_range) ++ pa_log_info("Disabling latency range changes on overrun"); ++ } + + /* ALSA might tweak the sample spec, so recalculate the frame size */ + frame_size = pa_frame_size(&ss); +diff --git a/src/modules/alsa/module-alsa-sink.c b/src/modules/alsa/module-alsa-sink.c +index 019ccf0..927f075 100644 +--- a/src/modules/alsa/module-alsa-sink.c ++++ b/src/modules/alsa/module-alsa-sink.c +@@ -59,7 +59,8 @@ PA_MODULE_USAGE( + "rewind_safeguard= " + "deferred_volume= " + "deferred_volume_safety_margin= " +- "deferred_volume_extra_delay="); ++ "deferred_volume_extra_delay= " ++ "fixed_latency_range="); + + static const char* const valid_modargs[] = { + "name", +@@ -85,6 +86,7 @@ static const char* const valid_modargs[] = { + "deferred_volume", + "deferred_volume_safety_margin", + "deferred_volume_extra_delay", ++ "fixed_latency_range", + NULL + }; + +diff --git a/src/modules/alsa/module-alsa-source.c b/src/modules/alsa/module-alsa-source.c +index 2d2c8b6..efb2d0c 100644 +--- a/src/modules/alsa/module-alsa-source.c ++++ b/src/modules/alsa/module-alsa-source.c +@@ -67,7 +67,8 @@ PA_MODULE_USAGE( + "control=" + "deferred_volume= " + "deferred_volume_safety_margin= " +- "deferred_volume_extra_delay="); ++ "deferred_volume_extra_delay= " ++ "fixed_latency_range="); + + static const char* const valid_modargs[] = { + "name", +@@ -92,6 +93,7 @@ static const char* const valid_modargs[] = { + "deferred_volume", + "deferred_volume_safety_margin", + "deferred_volume_extra_delay", ++ "fixed_latency_range", + NULL + }; + +diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c +index 0ee4ead..d6bff11 100644 +--- a/src/pulsecore/protocol-native.c ++++ b/src/pulsecore/protocol-native.c +@@ -1008,6 +1008,10 @@ static void fix_playback_buffer_attr(playback_stream *s) { + tlength_usec -= s->configured_sink_latency; + } + ++ pa_log_debug("Requested latency=%0.2f ms, Received latency=%0.2f ms", ++ (double) sink_usec / PA_USEC_PER_MSEC, ++ (double) s->configured_sink_latency / PA_USEC_PER_MSEC); ++ + /* FIXME: This is actually larger than necessary, since not all of + * the sink latency is actually rewritable. */ + if (tlength_usec < s->configured_sink_latency + 2*minreq_usec) +-- +1.7.6.4 + diff --git a/packages/audio/pulseaudio/patches/pulseaudio-1.1-0002-alsa-fixed-latency-range-handling-for-udev-detect.patch b/packages/audio/pulseaudio/patches/pulseaudio-1.1-0002-alsa-fixed-latency-range-handling-for-udev-detect.patch new file mode 100644 index 0000000000..e75cecf650 --- /dev/null +++ b/packages/audio/pulseaudio/patches/pulseaudio-1.1-0002-alsa-fixed-latency-range-handling-for-udev-detect.patch @@ -0,0 +1,78 @@ +From c07c4b353dffe17607fee89e294181bb4e2da40d Mon Sep 17 00:00:00 2001 +From: "Lars R. Damerow" +Date: Thu, 3 Nov 2011 21:29:03 +0100 +Subject: [PATCH 2/3] alsa: fixed latency range handling for udev-detect + +--- + src/modules/module-udev-detect.c | 13 ++++++++++++- + 1 files changed, 12 insertions(+), 1 deletions(-) + +diff --git a/src/modules/module-udev-detect.c b/src/modules/module-udev-detect.c +index c5312a8..1192194 100644 +--- a/src/modules/module-udev-detect.c ++++ b/src/modules/module-udev-detect.c +@@ -45,6 +45,7 @@ PA_MODULE_VERSION(PACKAGE_VERSION); + PA_MODULE_LOAD_ONCE(TRUE); + PA_MODULE_USAGE( + "tsched= " ++ "fixed_latency_range= " + "ignore_dB= " + "deferred_volume="); + +@@ -62,6 +63,7 @@ struct userdata { + pa_hashmap *devices; + + pa_bool_t use_tsched:1; ++ pa_bool_t fixed_latency_range:1; + pa_bool_t ignore_dB:1; + pa_bool_t deferred_volume:1; + +@@ -75,6 +77,7 @@ struct userdata { + + static const char* const valid_modargs[] = { + "tsched", ++ "fixed_latency_range", + "ignore_dB", + "deferred_volume", + NULL +@@ -388,6 +391,7 @@ static void card_changed(struct userdata *u, struct udev_device *dev) { + "card_name=\"%s\" " + "namereg_fail=false " + "tsched=%s " ++ "fixed_latency_range=%s " + "ignore_dB=%s " + "deferred_volume=%s " + "card_properties=\"module-udev-detect.discovered=1\"", +@@ -395,6 +399,7 @@ static void card_changed(struct userdata *u, struct udev_device *dev) { + n, + d->card_name, + pa_yes_no(u->use_tsched), ++ pa_yes_no(u->fixed_latency_range), + pa_yes_no(u->ignore_dB), + pa_yes_no(u->deferred_volume)); + pa_xfree(n); +@@ -665,7 +670,7 @@ int pa__init(pa_module *m) { + struct udev_enumerate *enumerate = NULL; + struct udev_list_entry *item = NULL, *first = NULL; + int fd; +- pa_bool_t use_tsched = TRUE, ignore_dB = FALSE, deferred_volume = m->core->deferred_volume; ++ pa_bool_t use_tsched = TRUE, fixed_latency_range = FALSE, ignore_dB = FALSE, deferred_volume = m->core->deferred_volume; + + + pa_assert(m); +@@ -686,6 +691,12 @@ int pa__init(pa_module *m) { + } + u->use_tsched = use_tsched; + ++ if (pa_modargs_get_value_boolean(ma, "fixed_latency_range", &fixed_latency_range) < 0) { ++ pa_log("Failed to parse fixed_latency_range= argument."); ++ goto fail; ++ } ++ u->fixed_latency_range = fixed_latency_range; ++ + if (pa_modargs_get_value_boolean(ma, "ignore_dB", &ignore_dB) < 0) { + pa_log("Failed to parse ignore_dB= argument."); + goto fail; +-- +1.7.6.4 + diff --git a/packages/audio/pulseaudio/patches/pulseaudio-1.1-0003-alsa-fixed_latency_range-modarg-for-module-alsa-card.patch b/packages/audio/pulseaudio/patches/pulseaudio-1.1-0003-alsa-fixed_latency_range-modarg-for-module-alsa-card.patch new file mode 100644 index 0000000000..d9665c2af6 --- /dev/null +++ b/packages/audio/pulseaudio/patches/pulseaudio-1.1-0003-alsa-fixed_latency_range-modarg-for-module-alsa-card.patch @@ -0,0 +1,32 @@ +From 1e6eda8eda615ec1275a1f208e5f3c9b41238f10 Mon Sep 17 00:00:00 2001 +From: "Lars R. Damerow" +Date: Thu, 3 Nov 2011 21:31:48 +0100 +Subject: [PATCH 3/3] alsa: fixed_latency_range modarg for module-alsa-card + +--- + src/modules/alsa/module-alsa-card.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/src/modules/alsa/module-alsa-card.c b/src/modules/alsa/module-alsa-card.c +index 5bf6480..344563f 100644 +--- a/src/modules/alsa/module-alsa-card.c ++++ b/src/modules/alsa/module-alsa-card.c +@@ -64,6 +64,7 @@ PA_MODULE_USAGE( + "tsched_buffer_size= " + "tsched_buffer_watermark= " + "profile= " ++ "fixed_latency_range= " + "ignore_dB= " + "deferred_volume= " + "profile_set= "); +@@ -88,6 +89,7 @@ static const char* const valid_modargs[] = { + "tsched", + "tsched_buffer_size", + "tsched_buffer_watermark", ++ "fixed_latency_range", + "profile", + "ignore_dB", + "deferred_volume", +-- +1.7.6.4 + From 3a50559893d2e487962b06991e511d2dd5278ec7 Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Wed, 16 Nov 2011 04:08:22 +0100 Subject: [PATCH 89/89] wpa_supplicant: add patch to change paths Signed-off-by: Stephan Raue --- .../patches/wpa_supplicant-0.7.3-path.patch | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 packages/network/wpa_supplicant/patches/wpa_supplicant-0.7.3-path.patch diff --git a/packages/network/wpa_supplicant/patches/wpa_supplicant-0.7.3-path.patch b/packages/network/wpa_supplicant/patches/wpa_supplicant-0.7.3-path.patch new file mode 100644 index 0000000000..92898a64e5 --- /dev/null +++ b/packages/network/wpa_supplicant/patches/wpa_supplicant-0.7.3-path.patch @@ -0,0 +1,18 @@ +diff -Naur wpa_supplicant-0.7.3/wpa_supplicant/dbus/fi.epitest.hostap.WPASupplicant.service wpa_supplicant-0.7.3.patch/wpa_supplicant/dbus/fi.epitest.hostap.WPASupplicant.service +--- wpa_supplicant-0.7.3/wpa_supplicant/dbus/fi.epitest.hostap.WPASupplicant.service 2010-09-07 17:43:39.000000000 +0200 ++++ wpa_supplicant-0.7.3.patch/wpa_supplicant/dbus/fi.epitest.hostap.WPASupplicant.service 2011-11-06 22:34:15.331582673 +0100 +@@ -1,4 +1,4 @@ + [D-BUS Service] + Name=fi.epitest.hostap.WPASupplicant +-Exec=/sbin/wpa_supplicant -u ++Exec=/usr/bin/wpa_supplicant -u + User=root +diff -Naur wpa_supplicant-0.7.3/wpa_supplicant/dbus/fi.w1.wpa_supplicant1.service wpa_supplicant-0.7.3.patch/wpa_supplicant/dbus/fi.w1.wpa_supplicant1.service +--- wpa_supplicant-0.7.3/wpa_supplicant/dbus/fi.w1.wpa_supplicant1.service 2010-09-07 17:43:39.000000000 +0200 ++++ wpa_supplicant-0.7.3.patch/wpa_supplicant/dbus/fi.w1.wpa_supplicant1.service 2011-11-06 22:34:24.216699484 +0100 +@@ -1,4 +1,4 @@ + [D-BUS Service] + Name=fi.w1.wpa_supplicant1 +-Exec=/sbin/wpa_supplicant -u ++Exec=/usr/bin/wpa_supplicant -u + User=root