summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--community-staging/r8168-lts/PKGBUILD4
-rw-r--r--community/cdrtools/PKGBUILD8
-rw-r--r--community/icecast/PKGBUILD13
-rw-r--r--community/icecast/icecast.service9
-rw-r--r--community/spacefm/PKGBUILD6
-rw-r--r--community/udevil/PKGBUILD6
-rw-r--r--core/sudo/PKGBUILD8
-rw-r--r--extra/php-apc/PKGBUILD6
-rw-r--r--extra/php/PKGBUILD8
-rw-r--r--extra/php/php-fpm.conf.in.patch10
-rw-r--r--extra/telepathy-gabble/PKGBUILD6
-rw-r--r--extra/telepathy-glib/PKGBUILD10
-rw-r--r--extra/telepathy-idle/PKGBUILD15
-rw-r--r--kernels/linux-libre-rt/PKGBUILD6
-rw-r--r--kernels/linux-libre-rt/config.i6864
-rw-r--r--kernels/linux-libre-rt/config.x86_644
-rw-r--r--kernels/linux-libre-rt/linux-libre-rt.install2
-rw-r--r--libre/linux-libre-lts/PKGBUILD14
-rw-r--r--libre/linux-libre-lts/config.i68632
-rw-r--r--libre/linux-libre-lts/config.x86_6432
-rw-r--r--libre/linux-libre-lts/linux-libre-lts.install2
-rw-r--r--libre/linux-libre/PKGBUILD10
-rw-r--r--libre/linux-libre/config.i6862
-rw-r--r--libre/linux-libre/config.x86_642
-rw-r--r--libre/linux-libre/linux-libre.install2
-rw-r--r--libre/mcomix-libre/PKGBUILD47
-rw-r--r--libre/mcomix-libre/mcomix.install32
-rw-r--r--multilib/lib32-krb5/PKGBUILD6
-rw-r--r--multilib/lib32-libxml2/PKGBUILD15
-rw-r--r--multilib/lib32-libxrandr/PKGBUILD8
-rw-r--r--multilib/lib32-p11-kit/PKGBUILD6
-rw-r--r--testing/git/ChangeLog57
-rw-r--r--testing/git/PKGBUILD115
-rw-r--r--testing/git/git-daemon70
-rw-r--r--testing/git/git-daemon.conf5
-rw-r--r--testing/git/git-daemon.socket10
-rw-r--r--testing/git/git-daemon@.service11
-rw-r--r--testing/git/git.install22
-rw-r--r--testing/irqbalance/PKGBUILD40
-rw-r--r--testing/irqbalance/irqbalance-2011-08-09.patch1584
-rw-r--r--testing/irqbalance/irqbalance.conf.d6
-rw-r--r--testing/irqbalance/irqbalance.rc.d46
-rw-r--r--testing/irqbalance/irqbalance.service8
-rw-r--r--testing/memcached/PKGBUILD38
-rw-r--r--testing/memcached/memcached.conf4
-rw-r--r--testing/memcached/memcached.install22
-rw-r--r--testing/memcached/memcached.service11
-rw-r--r--testing/memcached/memcached.sh63
-rw-r--r--testing/spamassassin/PKGBUILD60
-rw-r--r--testing/spamassassin/spamassassin.install11
-rw-r--r--testing/spamassassin/spamassassin.service14
-rw-r--r--testing/spamassassin/spamd55
-rw-r--r--testing/spamassassin/spamd.conf.d1
-rw-r--r--testing/transmission/PKGBUILD78
-rw-r--r--testing/transmission/transmission-cli.install16
-rw-r--r--testing/transmission/transmission-gtk.install12
-rw-r--r--testing/transmission/transmission-qt.install11
-rw-r--r--testing/transmission/transmission.systemd11
-rw-r--r--testing/transmission/transmission.tmpfiles1
-rw-r--r--testing/transmission/transmissiond46
-rw-r--r--testing/transmission/transmissiond.conf4
61 files changed, 2647 insertions, 120 deletions
diff --git a/community-staging/r8168-lts/PKGBUILD b/community-staging/r8168-lts/PKGBUILD
index 7ee3ed602..411291872 100644
--- a/community-staging/r8168-lts/PKGBUILD
+++ b/community-staging/r8168-lts/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 74721 2012-08-02 11:16:52Z mtorromeo $
+# $Id: PKGBUILD 75227 2012-08-16 12:37:34Z mtorromeo $
# Maintainer: Massimiliano Torromeo <massimiliano.torromeo@gmail.com>
pkgname=r8168-lts
_pkgname=r8168
pkgver=8.031.00
-pkgrel=4
+pkgrel=5
pkgdesc="A kernel module for Realtek 8168 network cards for linux-lts"
url="http://www.realtek.com.tw"
license=("GPL")
diff --git a/community/cdrtools/PKGBUILD b/community/cdrtools/PKGBUILD
index dbe53d8f6..140834e21 100644
--- a/community/cdrtools/PKGBUILD
+++ b/community/cdrtools/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 72573 2012-06-16 18:43:00Z stativ $
+# $Id: PKGBUILD 75213 2012-08-16 09:19:22Z stativ $
# Maintainer: Lukas Jirkovsky <l.jirkovsky@gmail.com>
pkgname=cdrtools
-pkgver=3.01a07
-pkgrel=4
+pkgver=3.01a08
+pkgrel=1
pkgdesc="Original cdrtools supporting CD, DVD and BluRay burning"
arch=('i686' 'x86_64')
url="http://cdrecord.berlios.de/private/cdrecord.html"
@@ -14,7 +14,7 @@ options=(!makeflags)
backup=('etc/default/cdrecord' 'etc/default/rscsi')
install=cdrtools.install
source=(ftp://ftp.berlios.de/pub/cdrecord/alpha/cdrtools-$pkgver.tar.gz)
-md5sums=('b690d11ee6c9464b89d8684172807b51')
+md5sums=('bed40540ef0dfc41d4b6e62c70012a01')
build() {
cd "$srcdir"/cdrtools-${pkgver%%a*}
diff --git a/community/icecast/PKGBUILD b/community/icecast/PKGBUILD
index 2787666ab..a9b3ce358 100644
--- a/community/icecast/PKGBUILD
+++ b/community/icecast/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 72696 2012-06-20 10:14:35Z lfleischer $
+# $Id: PKGBUILD 75222 2012-08-16 11:13:33Z lfleischer $
# Maintainer:
# Contributor: Andrea Scarpino <andrea@archlinux.org>
# Contributor: Andreas Radke <andyrtr@archlinux.org>
@@ -6,7 +6,7 @@
pkgname=icecast
pkgver=2.3.3
-pkgrel=1
+pkgrel=2
pkgdesc='Streaming audio over the Internet'
arch=('i686' 'x86_64')
license=('GPL')
@@ -17,11 +17,13 @@ backup=('etc/icecast.xml'
source=("http://downloads.us.xiph.org/releases/${pkgname}/${pkgname}-${pkgver}.tar.gz"
'icecastd'
'icecast.logrotate'
- 'start-by-nobody.patch')
+ 'start-by-nobody.patch'
+ 'icecast.service')
md5sums=('2b5d1b40778922e5f6431b7758c359ad'
'e823c1fdb080aae3d0c54ef8be95f7cb'
'59c6552bcb1dd9fb542af8670dfabd3c'
- 'd8e929d2214123a1954da4383bf16583')
+ 'd8e929d2214123a1954da4383bf16583'
+ 'ada6c389351af0487b5c62198adb4e2f')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
@@ -47,4 +49,7 @@ package() {
# create log directory
install -d -g99 -o99 "${pkgdir}/var/log/icecast"
+
+ # install systemd unit
+ install -Dm0644 "${srcdir}/icecast.service" "${pkgdir}/usr/lib/systemd/system/icecast.service"
}
diff --git a/community/icecast/icecast.service b/community/icecast/icecast.service
new file mode 100644
index 000000000..fb3900b45
--- /dev/null
+++ b/community/icecast/icecast.service
@@ -0,0 +1,9 @@
+[Unit]
+Description=Icecast Network Audio Streaming Server
+After=network.target
+
+[Service]
+ExecStart=/usr/bin/icecast -b -c /etc/icecast.xml
+
+[Install]
+WantedBy=multi-user.target
diff --git a/community/spacefm/PKGBUILD b/community/spacefm/PKGBUILD
index 912d15ee2..a87cc4df0 100644
--- a/community/spacefm/PKGBUILD
+++ b/community/spacefm/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 74358 2012-07-25 19:18:50Z bpiotrowski $
+# $Id: PKGBUILD 75235 2012-08-16 20:04:22Z bpiotrowski $
# Maintainer: Bartłomiej Piotrowski <nospam@bpiotrowski.pl>
# Contributor: IgnorantGuru http://igurublog.wordpress.com/contact-ignorantguru/
# Contributor: ridikulus_rat <the.ridikulus.rat@gmail.com>
pkgname=spacefm
-pkgver=0.7.10
+pkgver=0.7.11
pkgrel=1
pkgdesc="A multi-panel tabbed file manager"
arch=('i686' 'x86_64')
@@ -22,7 +22,7 @@ optdepends=('lsof: device processes'
'udisks: mount as non-root user'
'udisks2: mount as non-root user')
source=(https://raw.github.com/IgnorantGuru/spacefm/master/packages/${pkgver}/spacefm-${pkgver}.tar.xz)
-md5sums=('16de3087b7225b89fad93a0710f2bbcf')
+md5sums=('99719d34fd60ad9514c10a25f52d0bb3')
build() {
cd $srcdir/$pkgname-$pkgver
diff --git a/community/udevil/PKGBUILD b/community/udevil/PKGBUILD
index 091a56764..639697109 100644
--- a/community/udevil/PKGBUILD
+++ b/community/udevil/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 74360 2012-07-25 19:22:08Z bpiotrowski $
+# $Id: PKGBUILD 75211 2012-08-16 07:12:48Z bpiotrowski $
# Maintainer: Bartłomiej Piotrowski <nospam@bpiotrowski.pl>
# Contributor: IgnorantGuru http://igurublog.wordpress.com/contact-ignorantguru/
pkgname=udevil
-pkgver=0.3.1
+pkgver=0.3.2
pkgrel=1
arch=('i686' 'x86_64')
pkgdesc='Mount and unmount without password'
@@ -24,7 +24,7 @@ provides=('devmon')
backup=('etc/udevil/udevil.conf')
install=$pkgname.install
source=(https://raw.github.com/IgnorantGuru/$pkgname/master/packages/$pkgver/$pkgname-$pkgver.tar.xz)
-md5sums=('f2541fe24c83cbc2cb63c5912fc417d9')
+md5sums=('47b8f9334266d65020daa4679f71b504')
build() {
cd $srcdir/$pkgname-$pkgver
diff --git a/core/sudo/PKGBUILD b/core/sudo/PKGBUILD
index eaf765f3f..ce8a8773e 100644
--- a/core/sudo/PKGBUILD
+++ b/core/sudo/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 160450 2012-06-02 03:17:41Z allan $
+# $Id: PKGBUILD 165376 2012-08-17 00:20:05Z allan $
# Maintainer: Allan McRae <allan@archlinux.org>
# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
pkgname=sudo
-_ver=1.8.5p2
+_ver=1.8.5p3
pkgver=${_ver/[a-z]/.${_ver//[0-9.]/}}
pkgrel=1
pkgdesc="Give certain users the ability to run some commands as root"
@@ -15,8 +15,8 @@ backup=('etc/sudoers' 'etc/pam.d/sudo')
options=('!libtool' '!makeflags')
source=(ftp://ftp.sudo.ws/pub/sudo/$pkgname-$_ver.tar.gz{,.sig}
sudo.pam)
-md5sums=('dc42ed9f0946d92273762d0ae7314d59'
- '756d80fc1c996d4f5458deec5a69b5c4'
+md5sums=('aa50e0a9ca02ac35d1020881bd3a221f'
+ 'aceea97d5f4fe063d6803bead339364d'
'4e7ad4ec8f2fe6a40e12bcb2c0b256e3')
build() {
diff --git a/extra/php-apc/PKGBUILD b/extra/php-apc/PKGBUILD
index a67c313c2..ab10abae0 100644
--- a/extra/php-apc/PKGBUILD
+++ b/extra/php-apc/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 163778 2012-07-19 22:22:31Z pierre $
+# $Id: PKGBUILD 165375 2012-08-16 20:55:01Z pierre $
# Maintainer: Pierre Schmitz <pierre@archlinux.de>
pkgname=php-apc
-pkgver=3.1.11
+pkgver=3.1.12
pkgrel=1
arch=('i686' 'x86_64')
pkgdesc='A free, open, and robust framework for caching and optimizing PHP intermediate code'
@@ -11,7 +11,7 @@ depends=('php')
license=('PHP')
source=("http://pecl.php.net/get/APC-${pkgver}.tgz")
backup=('etc/php/conf.d/apc.ini')
-md5sums=('199b69ed1423aa869acafff485ef5f06')
+md5sums=('b0ab91726717f410dfa284d5d1723b60')
build() {
cd $srcdir/APC-$pkgver
diff --git a/extra/php/PKGBUILD b/extra/php/PKGBUILD
index 19e1b6663..8e4e6cd4e 100644
--- a/extra/php/PKGBUILD
+++ b/extra/php/PKGBUILD
@@ -1,4 +1,4 @@
-# $Id: PKGBUILD 163752 2012-07-19 05:20:23Z pierre $
+# $Id: PKGBUILD 165374 2012-08-16 20:54:57Z pierre $
# Maintainer: Pierre Schmitz <pierre@archlinux.de>
pkgbase=php
@@ -21,7 +21,7 @@ pkgname=('php'
'php-sqlite'
'php-tidy'
'php-xsl')
-pkgver=5.4.5
+pkgver=5.4.6
pkgrel=1
arch=('i686' 'x86_64')
license=('PHP')
@@ -33,11 +33,11 @@ makedepends=('apache' 'imap' 'postgresql-libs' 'libldap' 'postfix' 'libvpx'
source=("http://www.php.net/distributions/${pkgbase}-${pkgver}.tar.bz2"
'php.ini.patch' 'apache.conf' 'rc.d.php-fpm' 'php-fpm.conf.in.patch'
'logrotate.d.php-fpm' 'php-fpm.service' 'php-fpm.tmpfiles')
-md5sums=('ffcc7f4dcf2b79d667fe0c110e6cb724'
+md5sums=('c9aa0f4996d1b91ee9e45afcfaeb5d2e'
'0b0bc7a917fc592bdf11dcd3c5c255e9'
'dec2cbaad64e3abf4f0ec70e1de4e8e9'
'6d46667e00d65933ec0c958279c0a803'
- '825e580dd5708d959b50944afa1b12b6'
+ '5c1f4c967b66ce3eaf819b46951dcbf5'
'f56b5bb7e93c802ae8519182fbea3387'
'86c73d481f3099e740e602869bacf637'
'c60343df74f8e1afb13b084d5c0e47ed')
diff --git a/extra/php/php-fpm.conf.in.patch b/extra/php/php-fpm.conf.in.patch
index 0b17182fd..d618fca4e 100644
--- a/extra/php/php-fpm.conf.in.patch
+++ b/extra/php/php-fpm.conf.in.patch
@@ -1,5 +1,5 @@
---- sapi/fpm/php-fpm.conf.in 2011-10-08 23:04:10.000000000 +0200
-+++ sapi/fpm/php-fpm.conf.in 2012-03-01 19:50:48.549947258 +0100
+--- sapi/fpm/php-fpm.conf.in 2012-08-15 06:26:05.000000000 +0200
++++ sapi/fpm/php-fpm.conf.in 2012-08-16 14:17:41.809663595 +0200
@@ -12,7 +12,7 @@
; Relative path can also be used. They will be prefixed by:
; - the global prefix if it's been set (-p arguement)
@@ -18,7 +18,7 @@
; Error log file
; If it's set to "syslog", log is sent to syslogd instead of being written
-@@ -140,7 +140,8 @@
+@@ -148,7 +148,8 @@
; specific port;
; '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
@@ -28,7 +28,7 @@
; Set listen(2) backlog.
; Default Value: 128 (-1 on FreeBSD and OpenBSD)
-@@ -151,9 +152,9 @@
+@@ -159,9 +160,9 @@
; BSD-derived systems allow connections regardless of permissions.
; Default Values: user and group are set as the running user
; mode is set to 0666
@@ -41,7 +41,7 @@
; List of ipv4 addresses of FastCGI clients which are allowed to connect.
; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original
-@@ -442,7 +443,7 @@
+@@ -458,7 +459,7 @@
; Chdir to this directory at the start.
; Note: relative path can be used.
; Default Value: current directory or / when chroot
diff --git a/extra/telepathy-gabble/PKGBUILD b/extra/telepathy-gabble/PKGBUILD
index a9f1c8542..5d48fee52 100644
--- a/extra/telepathy-gabble/PKGBUILD
+++ b/extra/telepathy-gabble/PKGBUILD
@@ -1,9 +1,9 @@
-# $Id: PKGBUILD 162120 2012-06-21 01:49:02Z ibiru $
+# $Id: PKGBUILD 165360 2012-08-16 12:35:13Z ibiru $
# Maintainer : Ionut Biru <ibiru@archlinux.org>
# Contributor: Daniel Balieiro <daniel@balieiro.com>
# Contributor: Rodrigo L. M. Flores <mail@rodrigoflores.org>
pkgname=telepathy-gabble
-pkgver=0.16.1
+pkgver=0.16.2
pkgrel=1
pkgdesc="A Jabber/XMPP connection manager for Telepathy"
arch=('i686' 'x86_64')
@@ -15,7 +15,7 @@ makedepends=('libxslt' 'python2')
options=('!libtool' '!emptydirs')
source=(http://telepathy.freedesktop.org/releases/$pkgname/$pkgname-$pkgver.tar.gz)
install=telepathy-gabble.install
-md5sums=('f4e6ca551cc4603276f9acdc2b5d4db4')
+md5sums=('d79fc12524e9b68e9a1a833960f97d01')
build() {
cd $pkgname-$pkgver
diff --git a/extra/telepathy-glib/PKGBUILD b/extra/telepathy-glib/PKGBUILD
index 3839d4a34..a0ad65e36 100644
--- a/extra/telepathy-glib/PKGBUILD
+++ b/extra/telepathy-glib/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 156974 2012-04-23 09:10:23Z ibiru $
+# $Id: PKGBUILD 165356 2012-08-16 11:08:48Z ibiru $
# Maintainer: Ionut Biru <ibiru@archlinux.org>
# Contributor: Kessia 'even' Pinheiro <kessiapinheiro at gmail.com
# Contributor: Bjorn Lindeijer <bjorn lindeijer nl>
pkgname=telepathy-glib
-pkgver=0.18.1
+pkgver=0.18.2
pkgrel=1
pkgdesc="GLib bindings for the Telepathy D-Bus protocol"
arch=('i686' 'x86_64')
@@ -14,10 +14,10 @@ options=('!libtool' '!emptydirs')
depends=('dbus-glib')
makedepends=('libxslt' 'vala' 'gobject-introspection')
source=(http://telepathy.freedesktop.org/releases/$pkgname/$pkgname-$pkgver.tar.gz)
-md5sums=('461732739e3fbf8467991bbe661fb29a')
+md5sums=('034ec8e4c3a60d4ba1da67952ef3ee2f')
build() {
- cd "$pkgname-$pkgver"
+ cd $pkgname-$pkgver
PYTHON=/usr/bin/python2 ./configure --prefix=/usr \
--libexecdir=/usr/lib/telepathy \
--enable-vala-bindings \
@@ -26,6 +26,6 @@ build() {
}
package() {
- cd "$pkgname-$pkgver"
+ cd $pkgname-$pkgver
make DESTDIR="$pkgdir" install
}
diff --git a/extra/telepathy-idle/PKGBUILD b/extra/telepathy-idle/PKGBUILD
index 417b88208..1c8ebc5be 100644
--- a/extra/telepathy-idle/PKGBUILD
+++ b/extra/telepathy-idle/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 141602 2011-10-31 15:52:30Z ibiru $
+# $Id: PKGBUILD 165358 2012-08-16 11:39:38Z ibiru $
# Maintainer: Ionut Biru <ibiru@archlinux.org>
# Contributor: Bjorn Lindeijer <bjorn lindeijer nl>
# Contributor: Samuel Mendes <heka.lok@gmail.com>
pkgname=telepathy-idle
-pkgver=0.1.11
+pkgver=0.1.12
pkgrel=1
pkgdesc="An IRC connection manager for Telepathy"
arch=('i686' 'x86_64')
@@ -14,17 +14,18 @@ license=('LGPL')
depends=('telepathy-glib' 'openssl')
makedepends=('libxslt' 'python2')
install=telepathy-idle.install
-source=(http://telepathy.freedesktop.org/releases/${pkgname}/${pkgname}-${pkgver}.tar.gz)
-md5sums=('be277e8f0bd32ae56af799f0ff4ec72e')
+options=(!makeflags)
+source=(http://telepathy.freedesktop.org/releases/$pkgname/$pkgname-$pkgver.tar.gz)
+md5sums=('e77e5b84cc8f77cf12d15727c30df366')
build() {
- cd "${srcdir}/${pkgname}-${pkgver}"
+ cd $pkgname-$pkgver
./configure --prefix=/usr \
--libexecdir=/usr/lib/telepathy
make
}
package() {
- cd "${srcdir}/${pkgname}-${pkgver}"
- make DESTDIR="${pkgdir}" install
+ cd $pkgname-$pkgver
+ make DESTDIR="$pkgdir" install
}
diff --git a/kernels/linux-libre-rt/PKGBUILD b/kernels/linux-libre-rt/PKGBUILD
index fbed07cd9..6348f4093 100644
--- a/kernels/linux-libre-rt/PKGBUILD
+++ b/kernels/linux-libre-rt/PKGBUILD
@@ -15,7 +15,7 @@ _releasever=9
_rtpatchver=rt17
_pkgver=${_basekernel}.${_releasever}
pkgver=${_basekernel}.${_releasever}_${_rtpatchver}
-pkgrel=1
+pkgrel=1.1
_lxopkgver=${_basekernel}.9 # nearly always the same as pkgver
arch=('i686' 'x86_64' 'mips64el')
url="http://linux-libre.fsfla.org/"
@@ -42,8 +42,8 @@ _localversionname=-LIBRE-RT
md5sums=('a5e128ca059cceb8b69148b41ff4ac6f'
'6ef5ab23e1999605f0185a6fc4d224f2'
'8ddc7ee43b418e06121bd09fa0e97bf6'
- 'f083edc19ca3b7abbafa787dad005eae'
- '9e4b6e8d991d6873b2c37a10b32b8d9c'
+ 'd176ceb303ecfb2303d9659ea2dd91c7'
+ 'bcb219ab37ed19912126189cfca30538'
'82496e68851d1960543a07ba51cdb44a'
'2967cecc3af9f954ccc822fd63dca6ff'
'8267264d9a8966e57fdacd1fa1fc65c4'
diff --git a/kernels/linux-libre-rt/config.i686 b/kernels/linux-libre-rt/config.i686
index 4748037f0..31ce556cf 100644
--- a/kernels/linux-libre-rt/config.i686
+++ b/kernels/linux-libre-rt/config.i686
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/i386 3.4.9 Kernel Configuration
+# Linux/i386 3.4.0 Kernel Configuration
#
# CONFIG_64BIT is not set
CONFIG_X86_32=y
@@ -132,6 +132,7 @@ CONFIG_CGROUP_MEM_RES_CTLR_KMEM=y
CONFIG_CGROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
CONFIG_CFS_BANDWIDTH=y
+CONFIG_RT_GROUP_SCHED=y
CONFIG_BLK_CGROUP=y
# CONFIG_DEBUG_BLK_CGROUP is not set
# CONFIG_CHECKPOINT_RESTORE is not set
@@ -5434,6 +5435,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y
# CONFIG_ENABLE_MUST_CHECK is not set
CONFIG_FRAME_WARN=1024
CONFIG_MAGIC_SYSRQ=y
+# CONFIG_MAGIC_SYSRQ_FORCE_PRINTK is not set
CONFIG_STRIP_ASM_SYMS=y
CONFIG_UNUSED_SYMBOLS=y
CONFIG_DEBUG_FS=y
diff --git a/kernels/linux-libre-rt/config.x86_64 b/kernels/linux-libre-rt/config.x86_64
index 0990586b0..f8819f623 100644
--- a/kernels/linux-libre-rt/config.x86_64
+++ b/kernels/linux-libre-rt/config.x86_64
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86_64 3.4.9 Kernel Configuration
+# Linux/x86_64 3.4.0 Kernel Configuration
#
CONFIG_64BIT=y
# CONFIG_X86_32 is not set
@@ -132,6 +132,7 @@ CONFIG_CGROUP_MEM_RES_CTLR_KMEM=y
CONFIG_CGROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
CONFIG_CFS_BANDWIDTH=y
+CONFIG_RT_GROUP_SCHED=y
CONFIG_BLK_CGROUP=y
# CONFIG_DEBUG_BLK_CGROUP is not set
# CONFIG_CHECKPOINT_RESTORE is not set
@@ -5206,6 +5207,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y
# CONFIG_ENABLE_MUST_CHECK is not set
CONFIG_FRAME_WARN=2048
CONFIG_MAGIC_SYSRQ=y
+# CONFIG_MAGIC_SYSRQ_FORCE_PRINTK is not set
CONFIG_STRIP_ASM_SYMS=y
CONFIG_UNUSED_SYMBOLS=y
CONFIG_DEBUG_FS=y
diff --git a/kernels/linux-libre-rt/linux-libre-rt.install b/kernels/linux-libre-rt/linux-libre-rt.install
index 9d511d7bd..1f57ce546 100644
--- a/kernels/linux-libre-rt/linux-libre-rt.install
+++ b/kernels/linux-libre-rt/linux-libre-rt.install
@@ -2,7 +2,7 @@
# arg 2: the old package version
KERNEL_NAME=-rt
-KERNEL_VERSION=3.4.9-1-rt17-LIBRE-RT
+KERNEL_VERSION=3.4.9-1.1-rt17-LIBRE-RT
# set a sane PATH to ensure that critical utils like depmod will be found
export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
diff --git a/libre/linux-libre-lts/PKGBUILD b/libre/linux-libre-lts/PKGBUILD
index 028899f13..e7d044b92 100644
--- a/libre/linux-libre-lts/PKGBUILD
+++ b/libre/linux-libre-lts/PKGBUILD
@@ -7,10 +7,10 @@
pkgbase=linux-libre-lts # Build stock -LIBRE-LTS kernel
#pkgbase=linux-libre-custom # Build kernel with a different name
_basekernel=3.0
-_sublevel=40
+_sublevel=41
pkgver=${_basekernel}.${_sublevel}
-pkgrel=1.2
-_lxopkgver=${_basekernel}.39 # nearly always the same as pkgver
+pkgrel=1
+_lxopkgver=${_basekernel}.41 # nearly always the same as pkgver
arch=('i686' 'x86_64' 'mips64el')
url="http://linux-libre.fsfla.org/"
license=('GPL2')
@@ -33,9 +33,9 @@ source=("http://linux-libre.fsfla.org/pub/linux-libre/releases/${_basekernel}-gn
_kernelname=${pkgbase#linux-libre}
_localversionname=-LIBRE-LTS
md5sums=('5f64180fe7df4e574dac5911b78f5067'
- '4c42d5680df7921c20dda6f5fa44b275'
- '5e3362ef81c99563852f1b7a8c5b5837'
- '3d078c10d51f9c2f4d0ec6be531caf1d'
+ 'b4ebaa2ebf8418c75aba96fd4dd6daf3'
+ '8cd05778fc1c2d8145b3b9932b4e3164'
+ '87a54dc6251cf2adf35f72ddeddb6ea8'
'c072b17032e80debc6a8626299245d46'
'2967cecc3af9f954ccc822fd63dca6ff'
'8267264d9a8966e57fdacd1fa1fc65c4'
@@ -43,7 +43,7 @@ md5sums=('5f64180fe7df4e574dac5911b78f5067'
'9d3c56a4b999c8bfbd4018089a62f662'
'263725f20c0b9eb9c353040792d644e5'
'f36222e7ce20c8e4dc27376f9be60f6c'
- 'eea9aa0065f636fc924a23b3ffd24343')
+ '1f082cc9e5a18e227f7a044ff429914a')
if [ "$CARCH" != "mips64el" ]; then
# Don't use the Loongson-specific patches on non-mips64el arches.
unset source[${#source[@]}-1]
diff --git a/libre/linux-libre-lts/config.i686 b/libre/linux-libre-lts/config.i686
index 240eccfbf..f4e10c441 100644
--- a/libre/linux-libre-lts/config.i686
+++ b/libre/linux-libre-lts/config.i686
@@ -1,6 +1,6 @@
#
# Automatically generated make config: don't edit
-# Linux/i386 3.0.39-1 Kernel Configuration
+# Linux/i386 3.0.40-2 Kernel Configuration
#
# CONFIG_64BIT is not set
CONFIG_X86_32=y
@@ -62,7 +62,7 @@ CONFIG_EXPERIMENTAL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_CROSS_COMPILE=""
CONFIG_LOCALVERSION="-LIBRE-LTS"
-CONFIG_LOCALVERSION_AUTO=y
+# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_BZIP2=y
CONFIG_HAVE_KERNEL_LZMA=y
@@ -106,13 +106,14 @@ CONFIG_IRQ_FORCED_THREADING=y
#
# RCU Subsystem
#
-CONFIG_TREE_PREEMPT_RCU=y
-CONFIG_PREEMPT_RCU=y
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_PREEMPT_RCU is not set
# CONFIG_RCU_TRACE is not set
CONFIG_RCU_FANOUT=32
# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_RCU_FAST_NO_HZ is not set
# CONFIG_TREE_RCU_TRACE is not set
-# CONFIG_RCU_BOOST is not set
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=19
@@ -194,6 +195,7 @@ CONFIG_OPROFILE=m
CONFIG_HAVE_OPROFILE=y
CONFIG_KPROBES=y
CONFIG_JUMP_LABEL=y
+CONFIG_OPTPROBES=y
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
CONFIG_KRETPROBES=y
CONFIG_USER_RETURN_NOTIFIER=y
@@ -252,27 +254,27 @@ CONFIG_PADATA=y
# CONFIG_INLINE_SPIN_LOCK_BH is not set
# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_SPIN_UNLOCK is not set
+CONFIG_INLINE_SPIN_UNLOCK=y
# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
-# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
+CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
# CONFIG_INLINE_READ_TRYLOCK is not set
# CONFIG_INLINE_READ_LOCK is not set
# CONFIG_INLINE_READ_LOCK_BH is not set
# CONFIG_INLINE_READ_LOCK_IRQ is not set
# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_READ_UNLOCK is not set
+CONFIG_INLINE_READ_UNLOCK=y
# CONFIG_INLINE_READ_UNLOCK_BH is not set
-# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
+CONFIG_INLINE_READ_UNLOCK_IRQ=y
# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
# CONFIG_INLINE_WRITE_TRYLOCK is not set
# CONFIG_INLINE_WRITE_LOCK is not set
# CONFIG_INLINE_WRITE_LOCK_BH is not set
# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_WRITE_UNLOCK is not set
+CONFIG_INLINE_WRITE_UNLOCK=y
# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
-# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
+CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
# CONFIG_MUTEX_SPIN_ON_OWNER is not set
CONFIG_FREEZER=y
@@ -360,9 +362,9 @@ CONFIG_NR_CPUS=8
CONFIG_SCHED_SMT=y
CONFIG_SCHED_MC=y
# CONFIG_IRQ_TIME_ACCOUNTING is not set
-# CONFIG_PREEMPT_NONE is not set
+CONFIG_PREEMPT_NONE=y
# CONFIG_PREEMPT_VOLUNTARY is not set
-CONFIG_PREEMPT=y
+# CONFIG_PREEMPT is not set
CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
@@ -3809,6 +3811,7 @@ CONFIG_DRM_TDFX=m
CONFIG_DRM_R128=m
CONFIG_DRM_RADEON=m
CONFIG_DRM_RADEON_KMS=y
+# CONFIG_DRM_I810 is not set
CONFIG_DRM_I915=m
CONFIG_DRM_I915_KMS=y
CONFIG_DRM_MGA=m
@@ -5315,7 +5318,6 @@ CONFIG_TIMER_STATS=y
# CONFIG_SLUB_DEBUG_ON is not set
# CONFIG_SLUB_STATS is not set
# CONFIG_DEBUG_KMEMLEAK is not set
-# CONFIG_DEBUG_PREEMPT is not set
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
@@ -5346,7 +5348,6 @@ CONFIG_FRAME_POINTER=y
# CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_RCU_TORTURE_TEST is not set
CONFIG_RCU_CPU_STALL_TIMEOUT=60
-# CONFIG_RCU_CPU_STALL_VERBOSE is not set
# CONFIG_KPROBES_SANITY_TEST is not set
# CONFIG_BACKTRACE_SELF_TEST is not set
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
@@ -5383,7 +5384,6 @@ CONFIG_FTRACE=y
CONFIG_FUNCTION_TRACER=y
CONFIG_FUNCTION_GRAPH_TRACER=y
# CONFIG_IRQSOFF_TRACER is not set
-# CONFIG_PREEMPT_TRACER is not set
CONFIG_SCHED_TRACER=y
CONFIG_FTRACE_SYSCALLS=y
CONFIG_BRANCH_PROFILE_NONE=y
diff --git a/libre/linux-libre-lts/config.x86_64 b/libre/linux-libre-lts/config.x86_64
index 86b096eaf..80f5a7aca 100644
--- a/libre/linux-libre-lts/config.x86_64
+++ b/libre/linux-libre-lts/config.x86_64
@@ -1,6 +1,6 @@
#
# Automatically generated make config: don't edit
-# Linux/x86_64 3.0.39-1 Kernel Configuration
+# Linux/x86_64 3.0.40-2 Kernel Configuration
#
CONFIG_64BIT=y
# CONFIG_X86_32 is not set
@@ -63,7 +63,7 @@ CONFIG_EXPERIMENTAL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_CROSS_COMPILE=""
CONFIG_LOCALVERSION="-LIBRE-LTS"
-CONFIG_LOCALVERSION_AUTO=y
+# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_BZIP2=y
CONFIG_HAVE_KERNEL_LZMA=y
@@ -107,13 +107,14 @@ CONFIG_IRQ_FORCED_THREADING=y
#
# RCU Subsystem
#
-CONFIG_TREE_PREEMPT_RCU=y
-CONFIG_PREEMPT_RCU=y
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_PREEMPT_RCU is not set
# CONFIG_RCU_TRACE is not set
CONFIG_RCU_FANOUT=64
# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_RCU_FAST_NO_HZ is not set
# CONFIG_TREE_RCU_TRACE is not set
-# CONFIG_RCU_BOOST is not set
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=19
@@ -195,6 +196,7 @@ CONFIG_OPROFILE=m
CONFIG_HAVE_OPROFILE=y
CONFIG_KPROBES=y
CONFIG_JUMP_LABEL=y
+CONFIG_OPTPROBES=y
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
CONFIG_KRETPROBES=y
CONFIG_USER_RETURN_NOTIFIER=y
@@ -253,27 +255,27 @@ CONFIG_PADATA=y
# CONFIG_INLINE_SPIN_LOCK_BH is not set
# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_SPIN_UNLOCK is not set
+CONFIG_INLINE_SPIN_UNLOCK=y
# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
-# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
+CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
# CONFIG_INLINE_READ_TRYLOCK is not set
# CONFIG_INLINE_READ_LOCK is not set
# CONFIG_INLINE_READ_LOCK_BH is not set
# CONFIG_INLINE_READ_LOCK_IRQ is not set
# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_READ_UNLOCK is not set
+CONFIG_INLINE_READ_UNLOCK=y
# CONFIG_INLINE_READ_UNLOCK_BH is not set
-# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
+CONFIG_INLINE_READ_UNLOCK_IRQ=y
# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
# CONFIG_INLINE_WRITE_TRYLOCK is not set
# CONFIG_INLINE_WRITE_LOCK is not set
# CONFIG_INLINE_WRITE_LOCK_BH is not set
# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_WRITE_UNLOCK is not set
+CONFIG_INLINE_WRITE_UNLOCK=y
# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
-# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
+CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
# CONFIG_MUTEX_SPIN_ON_OWNER is not set
CONFIG_FREEZER=y
@@ -342,9 +344,9 @@ CONFIG_NR_CPUS=64
CONFIG_SCHED_SMT=y
CONFIG_SCHED_MC=y
# CONFIG_IRQ_TIME_ACCOUNTING is not set
-# CONFIG_PREEMPT_NONE is not set
+CONFIG_PREEMPT_NONE=y
# CONFIG_PREEMPT_VOLUNTARY is not set
-CONFIG_PREEMPT=y
+# CONFIG_PREEMPT is not set
CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y
CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
@@ -3625,6 +3627,7 @@ CONFIG_DRM_TDFX=m
CONFIG_DRM_R128=m
CONFIG_DRM_RADEON=m
CONFIG_DRM_RADEON_KMS=y
+# CONFIG_DRM_I810 is not set
CONFIG_DRM_I915=m
CONFIG_DRM_I915_KMS=y
CONFIG_DRM_MGA=m
@@ -5056,7 +5059,6 @@ CONFIG_TIMER_STATS=y
# CONFIG_DEBUG_OBJECTS is not set
# CONFIG_SLUB_DEBUG_ON is not set
# CONFIG_SLUB_STATS is not set
-# CONFIG_DEBUG_PREEMPT is not set
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
@@ -5086,7 +5088,6 @@ CONFIG_FRAME_POINTER=y
# CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_RCU_TORTURE_TEST is not set
CONFIG_RCU_CPU_STALL_TIMEOUT=60
-# CONFIG_RCU_CPU_STALL_VERBOSE is not set
# CONFIG_KPROBES_SANITY_TEST is not set
# CONFIG_BACKTRACE_SELF_TEST is not set
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
@@ -5123,7 +5124,6 @@ CONFIG_FTRACE=y
CONFIG_FUNCTION_TRACER=y
CONFIG_FUNCTION_GRAPH_TRACER=y
# CONFIG_IRQSOFF_TRACER is not set
-# CONFIG_PREEMPT_TRACER is not set
CONFIG_SCHED_TRACER=y
CONFIG_FTRACE_SYSCALLS=y
CONFIG_BRANCH_PROFILE_NONE=y
diff --git a/libre/linux-libre-lts/linux-libre-lts.install b/libre/linux-libre-lts/linux-libre-lts.install
index 58b0a302a..e92e5eb16 100644
--- a/libre/linux-libre-lts/linux-libre-lts.install
+++ b/libre/linux-libre-lts/linux-libre-lts.install
@@ -2,7 +2,7 @@
# arg 2: the old package version
KERNEL_NAME=-lts
-KERNEL_VERSION=3.0.40-1-LIBRE-LTS
+KERNEL_VERSION=3.0.41-1-LIBRE-LTS
# set a sane PATH to ensure that critical utils like depmod will be found
export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
diff --git a/libre/linux-libre/PKGBUILD b/libre/linux-libre/PKGBUILD
index 012492f94..661fec088 100644
--- a/libre/linux-libre/PKGBUILD
+++ b/libre/linux-libre/PKGBUILD
@@ -12,8 +12,8 @@ pkgbase=linux-libre # Build stock -LIBRE kernel
_basekernel=3.5
_sublevel=2
pkgver=${_basekernel}.${_sublevel}
-pkgrel=1
-_lxopkgver=${_basekernel}.1 # nearly always the same as pkgver
+pkgrel=1.1
+_lxopkgver=${_basekernel}.2 # nearly always the same as pkgver
arch=('i686' 'x86_64' 'mips64el')
url="http://linux-libre.fsfla.org/"
license=('GPL2')
@@ -35,14 +35,14 @@ _kernelname=${pkgbase#linux-libre}
_localversionname=-LIBRE
md5sums=('2407fc9563a74acaf38aa0c06516eb1c'
'b081f37b73c652cbb0d5193174092709'
- '7f0b7950bc9d2a20cdb6b850e6e4eb5a'
- 'a796ea383eb136cb38fab0a52b6d2f52'
+ '3ba164b409d8024fdd433f3cc4ae1fea'
+ 'fa1e2ab2f036974199374f015f5a2c46'
'e49ac236dfeef709f91a3d993ea7b62c'
'2967cecc3af9f954ccc822fd63dca6ff'
'8267264d9a8966e57fdacd1fa1fc65c4'
'04b21c79df0a952c22d681dd4f4562df'
'9d3c56a4b999c8bfbd4018089a62f662'
- 'eb25429666af638b01baa663eca74d08')
+ 'd822cc131b20090f39b0d448b0e1f8be')
if [ "$CARCH" != "mips64el" ]; then
# Don't use the Loongson-specific patches on non-mips64el arches.
unset source[${#source[@]}-1]
diff --git a/libre/linux-libre/config.i686 b/libre/linux-libre/config.i686
index a66ebeaa7..54db12ba1 100644
--- a/libre/linux-libre/config.i686
+++ b/libre/linux-libre/config.i686
@@ -334,7 +334,7 @@ CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y
CONFIG_X86_32_IRIS=m
CONFIG_SCHED_OMIT_FRAME_POINTER=y
CONFIG_PARAVIRT_GUEST=y
-# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set
+CONFIG_PARAVIRT_TIME_ACCOUNTING=y
# CONFIG_XEN_PRIVILEGED_GUEST is not set
CONFIG_KVM_CLOCK=y
CONFIG_KVM_GUEST=y
diff --git a/libre/linux-libre/config.x86_64 b/libre/linux-libre/config.x86_64
index 350a2b905..31da569ad 100644
--- a/libre/linux-libre/config.x86_64
+++ b/libre/linux-libre/config.x86_64
@@ -335,7 +335,7 @@ CONFIG_X86_MPPARSE=y
CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y
CONFIG_SCHED_OMIT_FRAME_POINTER=y
CONFIG_PARAVIRT_GUEST=y
-# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set
+CONFIG_PARAVIRT_TIME_ACCOUNTING=y
CONFIG_XEN=y
CONFIG_XEN_DOM0=y
CONFIG_XEN_PRIVILEGED_GUEST=y
diff --git a/libre/linux-libre/linux-libre.install b/libre/linux-libre/linux-libre.install
index dc313170a..59b77b82d 100644
--- a/libre/linux-libre/linux-libre.install
+++ b/libre/linux-libre/linux-libre.install
@@ -2,7 +2,7 @@
# arg 2: the old package version
KERNEL_NAME=
-KERNEL_VERSION=3.5.2-1-LIBRE
+KERNEL_VERSION=3.5.2-1.1-LIBRE
# set a sane PATH to ensure that critical utils like depmod will be found
export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
diff --git a/libre/mcomix-libre/PKGBUILD b/libre/mcomix-libre/PKGBUILD
new file mode 100644
index 000000000..d30bbb1a3
--- /dev/null
+++ b/libre/mcomix-libre/PKGBUILD
@@ -0,0 +1,47 @@
+# $Id$
+# Maintainer: schuay <jakob.gruber@gmail.com>
+# Contributor: Ray Powell <ray_al@xphoniexx.net>
+# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
+
+_pkgname=mcomix
+pkgname=mcomix-libre
+pkgver=0.99
+pkgrel=1
+pkgdesc="A user-friendly, customizable image viewer specifically designed to handle comic books"
+arch=('any')
+url="http://sourceforge.net/projects/mcomix/"
+license=('GPL')
+depends=('pygtk' 'python-imaging' 'xdg-utils' 'python2' \
+ 'desktop-file-utils' 'hicolor-icon-theme' 'python2-distribute')
+makedepends=('gettext' 'intltool')
+optdepends=('ununrar: for rar compressed comics')
+conflicts=('mcomix' 'comix')
+replaces=('mcomix' 'comix')
+provides=("mcomix=${pkgver}")
+install='mcomix.install'
+source=("http://downloads.sourceforge.net/project/mcomix/MComix-${pkgver}/mcomix-${pkgver}.tar.bz2")
+
+build() {
+ cd ${srcdir}/${_pkgname}-${pkgver}
+
+ # python2 fix
+ for file in $(grep -Rl "/usr/bin/env python" .);
+ do
+ sed -i 's_#!/usr/bin/env python_#!/usr/bin/env python2_' $file
+ done
+}
+
+package() {
+ cd ${srcdir}/${_pkgname}-${pkgver}
+
+ export PYTHONPATH=${pkgdir}/usr/lib/python2.7/site-packages/
+ mkdir -p $PYTHONPATH
+
+ python2 setup.py install --prefix=${pkgdir}/usr --optimize=1 \
+ --single-version-externally-managed --root=/
+
+ install -Dm644 mime/comicbook.schemas \
+ ${pkgdir}/usr/share/gconf/schemas/mcomix.schemas
+}
+
+md5sums=('a1ff7e1955042069d5005b4034e7a914')
diff --git a/libre/mcomix-libre/mcomix.install b/libre/mcomix-libre/mcomix.install
new file mode 100644
index 000000000..2d3c6c3e3
--- /dev/null
+++ b/libre/mcomix-libre/mcomix.install
@@ -0,0 +1,32 @@
+pkgname=mcomix
+
+post_install() {
+ if [ -f usr/bin/xdg-icon-resource ]; then
+ xdg-icon-resource forceupdate
+ fi
+ if [ -f usr/sbin/gconfpkg ]; then
+ usr/sbin/gconfpkg --install ${pkgname}
+ fi
+ update-desktop-database -q
+}
+
+pre_upgrade() {
+ pre_remove $1
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+pre_remove() {
+ if [ -f usr/sbin/gconfpkg ]; then
+ usr/sbin/gconfpkg --uninstall ${pkgname}
+ fi
+}
+
+post_remove() {
+ if [ -f usr/bin/xdg-icon-resource ]; then
+ xdg-icon-resource forceupdate
+ fi
+ update-desktop-database -q
+}
diff --git a/multilib/lib32-krb5/PKGBUILD b/multilib/lib32-krb5/PKGBUILD
index e186c35ba..fca3cecca 100644
--- a/multilib/lib32-krb5/PKGBUILD
+++ b/multilib/lib32-krb5/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 72528 2012-06-16 10:15:32Z bluewind $
+# $Id: PKGBUILD 75216 2012-08-16 11:05:27Z bluewind $
# Maintainer: Florian Pritz <flo@xinu.at>
# Contributor: Stéphane Gaudreault <stephane@archlinux.org>
_pkgbasename=krb5
pkgname=lib32-$_pkgbasename
-pkgver=1.10.2
+pkgver=1.10.3
pkgrel=1
pkgdesc="The Kerberos network authentication system (32-bit)"
arch=('x86_64')
@@ -14,7 +14,7 @@ depends=('lib32-e2fsprogs' 'lib32-libldap' 'lib32-keyutils' "$_pkgbasename")
makedepends=('perl' 'gcc-multilib')
source=("http://web.mit.edu/kerberos/dist/${_pkgbasename}/1.10/${_pkgbasename}-${pkgver}-signed.tar"
'krb5-1.10.1-gcc47.patch')
-sha1sums=('8b6e2c5bf0c65aacd368b3698add7888f2a7332d'
+sha1sums=('04ab9837e5d1958158bcb30bd6480201089a0cbb'
'78b759d566b1fdefd9bbcd06df14f07f12effe96')
options=('!emptydirs')
diff --git a/multilib/lib32-libxml2/PKGBUILD b/multilib/lib32-libxml2/PKGBUILD
index 48fe4649d..df40bd417 100644
--- a/multilib/lib32-libxml2/PKGBUILD
+++ b/multilib/lib32-libxml2/PKGBUILD
@@ -1,11 +1,11 @@
-# $Id: PKGBUILD 64012 2012-02-08 18:56:17Z pschmitz $
+# $Id: PKGBUILD 75224 2012-08-16 11:15:20Z bluewind $
# Maintainer: Jan de Groot <jgc@archlinux.org>
# Contributor: John Proctor <jproctor@prium.net>
_pkgbasename=libxml2
pkgname=lib32-$_pkgbasename
-pkgver=2.7.8
-pkgrel=2
+pkgver=2.8.0
+pkgrel=1
pkgdesc="XML parsing library, version 2 (32-bit)"
arch=(x86_64)
license=('custom')
@@ -13,10 +13,8 @@ depends=('lib32-zlib>=1.2.4' 'lib32-readline>=6.1' 'lib32-ncurses>=5.7' $_pkgbas
makedepends=(gcc-multilib)
options=('!libtool')
url="http://www.xmlsoft.org/"
-source=(ftp://ftp.xmlsoft.org/${_pkgbasename}/${_pkgbasename}-${pkgver}.tar.gz
- shared_library_versionning.patch)
-md5sums=('8127a65e8c3b08856093099b52599c86'
- '84aeb7c6db023eae044e95d9211dba53')
+source=(ftp://ftp.xmlsoft.org/${_pkgbasename}/${_pkgbasename}-${pkgver}.tar.gz)
+md5sums=('c62106f02ee00b6437f0fb9d370c1093')
build() {
export CC="gcc -m32"
@@ -24,9 +22,8 @@ build() {
export PKG_CONFIG_PATH="/usr/lib32/pkgconfig"
cd "${srcdir}/${_pkgbasename}-${pkgver}"
- patch -Np1 -i "${srcdir}/shared_library_versionning.patch"
autoreconf -fi
- ./configure --prefix=/usr --with-threads --with-history --libdir=/usr/lib32
+ ./configure --prefix=/usr --with-threads --with-history --libdir=/usr/lib32 --without-lzma
make
}
diff --git a/multilib/lib32-libxrandr/PKGBUILD b/multilib/lib32-libxrandr/PKGBUILD
index 25f00fe28..52775b592 100644
--- a/multilib/lib32-libxrandr/PKGBUILD
+++ b/multilib/lib32-libxrandr/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 68137 2012-03-18 14:42:28Z lcarlier $
+# $Id: PKGBUILD 75218 2012-08-16 11:10:49Z bluewind $
# Maintainer: Alexander Baldeck <alexander@archlinux.org>
# Contributor: Jan de Groot <jgc@archlinux.org>
_pkgbasename=libxrandr
pkgname=lib32-$_pkgbasename
-pkgver=1.3.2
-pkgrel=2
+pkgver=1.4.0
+pkgrel=1
pkgdesc="X11 RandR extension library (32-bit)"
arch=('x86_64')
license=('custom')
@@ -13,7 +13,7 @@ depends=('lib32-libxext' 'lib32-libxrender' $_pkgbasename)
makedepends=('xorg-util-macros' gcc-multilib)
options=('!libtool')
source=(${url}/releases/individual/lib/libXrandr-${pkgver}.tar.bz2)
-sha1sums=('0c844a4c5237f96794f0c18a5af16dc5ab7a36ec')
+sha256sums=('033ad0ac2f012afb05268660f6d78705c85f84689f92fa7b47ce12959b15f5c3')
build() {
export CC="gcc -m32"
diff --git a/multilib/lib32-p11-kit/PKGBUILD b/multilib/lib32-p11-kit/PKGBUILD
index b9f22c513..dbba642ba 100644
--- a/multilib/lib32-p11-kit/PKGBUILD
+++ b/multilib/lib32-p11-kit/PKGBUILD
@@ -1,10 +1,10 @@
-# $Id: PKGBUILD 68876 2012-04-04 16:53:34Z bluewind $
+# $Id: PKGBUILD 75220 2012-08-16 11:11:53Z bluewind $
# Maintainer: Florian Pritz <bluewind@xinu.at>
# Contributor: Christoph Vigano <mail@cvigano.de>
_pkgbasename=p11-kit
pkgname=lib32-$_pkgbasename
-pkgver=0.12
+pkgver=0.13
pkgrel=1
pkgdesc="Library to work with PKCS#11 modules (32-bit)"
arch=(i686 x86_64)
@@ -13,7 +13,7 @@ license=('BSD')
depends=(lib32-glibc $_pkgbasename)
options=(!libtool)
source=($url/releases/$_pkgbasename-$pkgver.tar.gz)
-md5sums=('66baf7ddde982d1b7294d3bd63be7446')
+md5sums=('3892bc07ff54b1b391aad4628911801d')
build() {
export CC="gcc -m32"
diff --git a/testing/git/ChangeLog b/testing/git/ChangeLog
new file mode 100644
index 000000000..f0c15233e
--- /dev/null
+++ b/testing/git/ChangeLog
@@ -0,0 +1,57 @@
+Simple version bumps are omitted from the following ChangeLog.
+
+2011-08-16 Dan McGee <dan@archlinux.org>
+ Version 1.7.6.1-1
+ * Enable USE_LIBPCRE for `git grep -P` usage
+
+2011-05-05 Dan McGee <dan@archlinux.org>
+ Version 1.7.5.1-1
+ * Byte compile emacs files (FS#20874)
+ * Respect CFLAGS/LDFLAGS (FS#23963)
+
+2011-04-27 Dan McGee <dan@archlinux.org>
+ Version 1.7.5-1
+ * Add missing optdepends for git send-email (FS#20923)
+
+2011-01-05 Dan McGee <dan@archlinux.org>
+ Version 1.7.3.5-1
+ * More flexible git-daemon RC scripts (FS#20575)
+
+2010-10-01 Allan McRae <allan@archlinux.org>
+ Version 1.7.3.1-2
+ * Python 2/3 rebuild
+
+2010-06-29 Dan McGee <dan@archlinux.org>
+ Version 1.7.1.1-1
+ * Add emacs completion files (FS#17968)
+ * Add git-daemon RC scripts (FS#19291)
+
+2009-06-05 Dan McGee <dan@archlinux.org>
+ Version 1.6.3.2-1
+ * Remove gitweb from /usr/share; it needs customization to be helpful
+ * Add NO_CROSS_DIRECTORY_HARDLINKS option to build (FS#13683)
+
+2008-09-14 Dan McGee <dan@archlinux.org>
+ Version 1.6.0.2-1
+ * Moved optional depends from install file to optdepends array
+
+2008-06-15 Dan McGee <dan@archlinux.org>
+ Version 1.5.6-1
+ * Removed 'cpio' dependency, clone is now a builtin and no longer needs it
+
+2008-02-02 Dan McGee <dan@archlinux.org>
+ Version 1.5.4-1
+ * Upstream version 1.5.4
+ * Enable pthreads support in pack-objects. To use, set the pack.threads
+ git config option. Read manpages of pack-objects and config for more
+ details.
+ * Changelog added (with entries going back a bit).
+
+2008-01-28 Kevin Piche <kevin@archlinux.org>
+ Version 1.5.3.7-2
+ * Updated for new perl policy (vendor dirs)
+ * Change license to GPL2
+
+2007-11-01 Eric Belanger <eric@archlinux.org>
+ Version 1.5.3.5-2
+ * Fix Perl module location
diff --git a/testing/git/PKGBUILD b/testing/git/PKGBUILD
new file mode 100644
index 000000000..bc0f8c8df
--- /dev/null
+++ b/testing/git/PKGBUILD
@@ -0,0 +1,115 @@
+# $Id: PKGBUILD 165368 2012-08-16 14:45:26Z dan $
+# Maintainer: Dan McGee <dan@archlinux.org>
+
+pkgname=git
+pkgver=1.7.11.5
+pkgrel=2
+pkgdesc="the fast distributed version control system"
+arch=(i686 x86_64)
+url="http://git-scm.com/"
+license=('GPL2')
+depends=('curl' 'expat>=2.0' 'perl-error' 'perl>=5.14.0' 'openssl' 'pcre')
+makedepends=('python2' 'emacs')
+optdepends=('tk: gitk and git gui'
+ 'perl-libwww: git svn'
+ 'perl-term-readkey: git svn'
+ 'perl-mime-tools: git send-email'
+ 'perl-net-smtp-ssl: git send-email TLS support'
+ 'perl-authen-sasl: git send-email TLS support'
+ 'python2: various helper scripts'
+ 'subversion: git svn'
+ 'cvsps: git cvsimport')
+replaces=('git-core')
+provides=('git-core')
+backup=('etc/conf.d/git-daemon.conf')
+install=git.install
+source=("http://git-core.googlecode.com/files/git-$pkgver.tar.gz"
+ "http://git-core.googlecode.com/files/git-manpages-$pkgver.tar.gz"
+ git-daemon
+ git-daemon.conf
+ git-daemon@.service
+ git-daemon.socket)
+changelog=ChangeLog
+
+build() {
+ export PYTHON_PATH='/usr/bin/python2'
+ cd "$srcdir/$pkgname-$pkgver"
+ make prefix=/usr gitexecdir=/usr/lib/git-core \
+ CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS" \
+ USE_LIBPCRE=1 \
+ NO_CROSS_DIRECTORY_HARDLINKS=1 \
+ all
+
+ cd contrib/emacs
+ make prefix=/usr
+}
+
+check() {
+ export PYTHON_PATH='/usr/bin/python2'
+ cd "$srcdir/$pkgname-$pkgver"
+ local jobs
+ jobs=$(expr "$MAKEFLAGS" : '.*\(-j[0-9]*\).*')
+ make prefix=/usr gitexecdir=/usr/lib/git-core \
+ CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS" \
+ USE_LIBPCRE=1 \
+ NO_CROSS_DIRECTORY_HARDLINKS=1 \
+ NO_SVN_TESTS=y \
+ DEFAULT_TEST_TARGET=prove \
+ GIT_PROVE_OPTS="$jobs -Q" \
+ GIT_TEST_OPTS="--root=/dev/shm/" \
+ test
+}
+
+package() {
+ export PYTHON_PATH='/usr/bin/python2'
+ cd "$srcdir/$pkgname-$pkgver"
+ make prefix=/usr gitexecdir=/usr/lib/git-core \
+ CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS" \
+ USE_LIBPCRE=1 \
+ NO_CROSS_DIRECTORY_HARDLINKS=1 \
+ INSTALLDIRS=vendor DESTDIR="$pkgdir" install
+
+ # bash completion
+ # until this is fixed, no point in loading it dynamically:
+ # http://git.661346.n2.nabble.com/bash-completion-now-loads-completions-dynamically-so-git-ps1-is-not-defined-when-you-open-a-shell-td7415323.html
+ #mkdir -p "$pkgdir"/usr/share/bash-completion/completions/
+ #install -m644 ./contrib/completion/git-completion.bash "$pkgdir"/usr/share/bash-completion/completions/git
+ mkdir -p "$pkgdir"/etc/bash_completion.d/
+ install -m644 ./contrib/completion/git-completion.bash "$pkgdir"/etc/bash_completion.d/git
+ # more contrib stuff
+ cp -a ./contrib $pkgdir/usr/share/git/
+ # scripts are for python 2.x
+ sed -i 's|#![ ]*/usr/bin/env python|#!/usr/bin/env python2|' \
+ $(find "$pkgdir" -name '*.py') \
+ "$pkgdir"/usr/lib/git-core/git-p4 \
+ "$pkgdir"/usr/share/git/gitview/gitview
+
+ # emacs interface
+ cd contrib/emacs
+ make prefix=/usr DESTDIR="$pkgdir" install
+
+ # how 'bout some manpages?
+ for mansect in man1 man5 man7; do
+ for manpage in "$srcdir"/$mansect/*; do
+ install -D -m644 $manpage "$pkgdir"/usr/share/man/$mansect/$(basename $manpage)
+ done
+ done
+
+ # remove perllocal.pod, .packlist, and empty directories.
+ rm -rf "$pkgdir"/usr/lib/perl5
+
+ # git daemon script
+ install -D -m755 "$srcdir"/git-daemon "$pkgdir"/etc/rc.d/git-daemon
+ install -D -m644 "$srcdir"/git-daemon.conf "$pkgdir"/etc/conf.d/git-daemon.conf
+
+ # systemd stuff
+ install -D -m 644 "$srcdir"/git-daemon@.service "$pkgdir"/usr/lib/systemd/system/git-daemon@.service
+ install -D -m 644 "$srcdir"/git-daemon.socket "$pkgdir"/usr/lib/systemd/system/git-daemon.socket
+}
+
+md5sums=('9985d35c11531d546426ebefb327c847'
+ 'f08a5a60e57f00399bbd384cfd7791f3'
+ '8e2648910fd5dd4f1c41d3c7fa9e9156'
+ '2e42bf97779a1c6411d89043334c9e78'
+ '198ef9d9e79bd8d5868f95ed9f79cc34'
+ '779c00deb490291c6b477b8cc0161123')
diff --git a/testing/git/git-daemon b/testing/git/git-daemon
new file mode 100644
index 000000000..21ba73ed5
--- /dev/null
+++ b/testing/git/git-daemon
@@ -0,0 +1,70 @@
+#!/bin/bash
+
+daemon_bin="/usr/lib/git-core/git-daemon"
+daemon_name=$(basename $daemon_bin)
+PIDF="/var/run/$daemon_name.pid"
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+. /etc/conf.d/$daemon_name.conf
+
+get_pid() {
+ pidof -o %PPID $daemon_name
+}
+
+case "$1" in
+ start)
+ stat_busy "Starting $daemon_name daemon"
+
+ PID=$(get_pid)
+ if [ -z "$PID" ]; then
+ [ -f $PIDF ] && rm -f $PIDF
+ # RUN
+ $daemon_bin --pid-file=$PIDF $GIT_DAEMON_ARGS
+ #
+ if [ $? -gt 0 ]; then
+ stat_fail
+ exit 1
+ else
+ echo $(get_pid) > $PIDF
+ add_daemon $daemon_name
+ stat_done
+ fi
+ else
+ stat_fail
+ exit 1
+ fi
+ ;;
+
+ stop)
+ stat_busy "Stopping $daemon_name daemon"
+ PID=$(get_pid)
+ # KILL
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ #
+ if [ $? -gt 0 ]; then
+ stat_fail
+ exit 1
+ else
+ rm -f $PIDF &> /dev/null
+ rm_daemon $daemon_name
+ stat_done
+ fi
+ ;;
+
+ restart)
+ $0 stop
+ sleep 3
+ $0 start
+ ;;
+
+ status)
+ stat_busy "Checking $daemon_name status";
+ ck_status $daemon_name
+ ;;
+
+ *)
+ echo "usage: $0 {start|stop|restart|status}"
+esac
+
+exit 0
diff --git a/testing/git/git-daemon.conf b/testing/git/git-daemon.conf
new file mode 100644
index 000000000..3f9a12060
--- /dev/null
+++ b/testing/git/git-daemon.conf
@@ -0,0 +1,5 @@
+# path to git repositories served
+GIT_REPO="/srv/git/"
+# see `man git-daemon` for all available options
+# $GIT_REPO will be present twice in most configs
+GIT_DAEMON_ARGS="--detach --syslog --verbose --base-path=$GIT_REPO $GIT_REPO"
diff --git a/testing/git/git-daemon.socket b/testing/git/git-daemon.socket
new file mode 100644
index 000000000..c84740588
--- /dev/null
+++ b/testing/git/git-daemon.socket
@@ -0,0 +1,10 @@
+[Unit]
+Description=Git Daemon Socket
+After=network.target
+
+[Socket]
+ListenStream=9418
+Accept=true
+
+[Install]
+WantedBy=sockets.target
diff --git a/testing/git/git-daemon@.service b/testing/git/git-daemon@.service
new file mode 100644
index 000000000..67d4cfa9c
--- /dev/null
+++ b/testing/git/git-daemon@.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Git Daemon Instance
+After=network.target
+
+[Service]
+User=git
+# The '-' is to ignore non-zero exit statuses
+ExecStart=-/usr/lib/git-core/git-daemon --inetd --export-all --base-path=/srv/git
+StandardInput=socket
+StandardOutput=inherit
+StandardError=journal
diff --git a/testing/git/git.install b/testing/git/git.install
new file mode 100644
index 000000000..9edc065ba
--- /dev/null
+++ b/testing/git/git.install
@@ -0,0 +1,22 @@
+post_install() {
+ if ! getent group git >/dev/null; then
+ groupadd --system git
+ fi
+ if ! getent passwd git >/dev/null; then
+ useradd --system -c 'git daemon user' -g git -d / -s /bin/bash git
+ passwd -l git >/dev/null
+ fi
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+post_remove() {
+ if getent passwd git >/dev/null; then
+ userdel git
+ fi
+ if getent group git >/dev/null; then
+ groupdel git
+ fi
+}
diff --git a/testing/irqbalance/PKGBUILD b/testing/irqbalance/PKGBUILD
new file mode 100644
index 000000000..52c5ae477
--- /dev/null
+++ b/testing/irqbalance/PKGBUILD
@@ -0,0 +1,40 @@
+# Maintainer: Dan McGee <dan@archlinux.org>
+# Contributor: Martin Striz <ms@poruba.net>
+
+pkgname=irqbalance
+_realver=1.0.3
+pkgver=1.0.3.20110809
+pkgrel=1
+pkgdesc="IRQ balancing daemon for SMP systems"
+arch=('i686' 'x86_64')
+url="http://code.google.com/p/irqbalance"
+license=('GPL')
+depends=(glib2 numactl libcap-ng)
+makedepends=(pkgconfig)
+backup=(etc/conf.d/irqbalance)
+source=(http://irqbalance.googlecode.com/files/irqbalance-$_realver.tar.gz
+ irqbalance-2011-08-09.patch
+ irqbalance.conf.d
+ irqbalance.rc.d
+ irqbalance.service)
+md5sums=('6f246481d6295bcb9a79751c03207c96'
+ '49a5669fc3eb452a5d24abec887f0a6a'
+ '336c1ee99818f9ecda1687e34c69fd6b'
+ 'fb82fc5d267d39110baf720d81282a7c'
+ '9e82dc471128117982a8dd0c4bd5f246')
+
+build() {
+ cd "$srcdir/$pkgname-$_realver"
+ patch -Np1 < ../irqbalance-2011-08-09.patch
+ autoreconf -fi
+ ./configure --prefix=/usr
+ make
+}
+
+package() {
+ cd "$srcdir/$pkgname-$_realver"
+ make install DESTDIR="$pkgdir"
+ install -D -m644 ../irqbalance.conf.d "$pkgdir"/etc/conf.d/irqbalance
+ install -D -m755 ../irqbalance.rc.d "$pkgdir"/etc/rc.d/irqbalance
+ install -D -m644 ../irqbalance.service "$pkgdir"/usr/lib/systemd/system/irqbalance.service
+}
diff --git a/testing/irqbalance/irqbalance-2011-08-09.patch b/testing/irqbalance/irqbalance-2011-08-09.patch
new file mode 100644
index 000000000..fcdb8bdbf
--- /dev/null
+++ b/testing/irqbalance/irqbalance-2011-08-09.patch
@@ -0,0 +1,1584 @@
+diff --git a/ChangeLog b/ChangeLog
+deleted file mode 100644
+index f5e9428..0000000
+--- a/ChangeLog
++++ /dev/null
+@@ -1,3 +0,0 @@
+-This is all tracked in the SVN repo. This file is just here to keep the
+-autotools from complaining
+-
+diff --git a/Makefile.am b/Makefile.am
+index 9847232..188e34f 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -22,17 +22,17 @@
+
+ AUTOMAKE_OPTIONS = no-dependencies
+ ACLOCAL_AMFLAGS = -I m4
+-EXTRA_DIST = README INSTALL COPYING autogen.sh m4/cap-ng.m4 misc/irqbalance.service
+-
++EXTRA_DIST = INSTALL COPYING autogen.sh misc/irqbalance.service
++
+ INCLUDES = -I${top_srcdir}
+-LIBS = $(CAPNG_LDADD) $(GLIB_LIBS) @LIBS@
+-AM_CFLAGS = $(GLIB_CFLAGS)
++AM_CFLAGS = $(LIBCAP_NG_CFLAGS) $(GLIB_CFLAGS)
+ AM_CPPFLAGS = -W -Wall -Wshadow -Wformat -Wundef -D_GNU_SOURCE
+ noinst_HEADERS = bitmap.h constants.h cpumask.h irqbalance.h non-atomic.h \
+ types.h
+ sbin_PROGRAMS = irqbalance
+ irqbalance_SOURCES = activate.c bitmap.c classify.c cputree.c irqbalance.c \
+- irqlist.c numa.c placement.c powermode.c procinterrupts.c
++ irqlist.c numa.c placement.c procinterrupts.c
++irqbalance_LDADD = $(LIBCAP_NG_LIBS) $(GLIB_LIBS)
+ dist_man_MANS = irqbalance.1
+
+ CONFIG_CLEAN_FILES = debug*.list config/*
+@@ -40,3 +40,6 @@ clean-generic:
+ rm -rf autom4te*.cache
+ rm -f *.rej *.orig *~
+
++if LOCAL_GLIB
++SUBDIRS = glib-local
++endif
+diff --git a/NEWS b/NEWS
+deleted file mode 100644
+index 7cc0277..0000000
+--- a/NEWS
++++ /dev/null
+@@ -1 +0,0 @@
+-No news currently
+diff --git a/README b/README
+deleted file mode 100644
+index e69de29..0000000
+diff --git a/activate.c b/activate.c
+index 292c44a..02fc8dc 100644
+--- a/activate.c
++++ b/activate.c
+@@ -1,5 +1,6 @@
+ /*
+ * Copyright (C) 2006, Intel Corporation
++ * Copyright (C) 2012, Neil Horman <nhorman@tuxdriver.com>
+ *
+ * This file is part of irqbalance
+ *
+@@ -31,34 +32,63 @@
+
+ #include "irqbalance.h"
+
++static int check_affinity(struct irq_info *info, cpumask_t applied_mask)
++{
++ cpumask_t current_mask;
++ char buf[PATH_MAX];
++ char *line = NULL;
++ size_t size = 0;
++ FILE *file;
++
++ sprintf(buf, "/proc/irq/%i/smp_affinity", info->irq);
++ file = fopen(buf, "r");
++ if (!file)
++ return 1;
++ if (getline(&line, &size, file)==0) {
++ free(line);
++ fclose(file);
++ return 1;
++ }
++ cpumask_parse_user(line, strlen(line), current_mask);
++ fclose(file);
++ free(line);
++
++ return cpus_equal(applied_mask, current_mask);
++}
+
+ static void activate_mapping(struct irq_info *info, void *data __attribute__((unused)))
+ {
+ char buf[PATH_MAX];
+ FILE *file;
+ cpumask_t applied_mask;
++ int valid_mask = 0;
++
++ if ((hint_policy == HINT_POLICY_EXACT) &&
++ (!cpus_empty(info->affinity_hint))) {
++ applied_mask = info->affinity_hint;
++ valid_mask = 1;
++ } else if (info->assigned_obj) {
++ applied_mask = info->assigned_obj->mask;
++ valid_mask = 1;
++ if ((hint_policy == HINT_POLICY_SUBSET) &&
++ (!cpus_empty(info->affinity_hint)))
++ cpus_and(applied_mask, applied_mask, info->affinity_hint);
++ }
+
+ /*
+ * only activate mappings for irqs that have moved
+ */
+- if (!info->moved)
++ if (!info->moved && (!valid_mask || check_affinity(info, applied_mask)))
+ return;
+
+ if (!info->assigned_obj)
+ return;
+
+-
+ sprintf(buf, "/proc/irq/%i/smp_affinity", info->irq);
+ file = fopen(buf, "w");
+ if (!file)
+ return;
+
+- if ((hint_policy == HINT_POLICY_EXACT) &&
+- (!cpus_empty(info->affinity_hint)))
+- applied_mask = info->affinity_hint;
+- else
+- applied_mask = info->assigned_obj->mask;
+-
+ cpumask_scnprintf(buf, PATH_MAX, applied_mask);
+ fprintf(file, "%s", buf);
+ fclose(file);
+diff --git a/autogen.sh b/autogen.sh
+index 5ad9f14..b792e8b 100755
+--- a/autogen.sh
++++ b/autogen.sh
+@@ -1,4 +1,5 @@
+ #! /bin/sh
+ set -x -e
++mkdir -p m4
+ # --no-recursive is available only in recent autoconf versions
+ autoreconf -fv --install
+diff --git a/classify.c b/classify.c
+index 124dab0..05b3bfb 100644
+--- a/classify.c
++++ b/classify.c
+@@ -52,6 +52,8 @@ static short class_codes[MAX_CLASS] = {
+ };
+
+ static GList *interrupts_db;
++static GList *new_irq_list;
++static GList *banned_irqs;
+
+ #define SYSDEV_DIR "/sys/bus/pci/devices"
+
+@@ -63,6 +65,30 @@ static gint compare_ints(gconstpointer a, gconstpointer b)
+ return ai->irq - bi->irq;
+ }
+
++void add_banned_irq(int irq)
++{
++ struct irq_info find, *new;
++ GList *entry;
++
++ find.irq = irq;
++ entry = g_list_find_custom(banned_irqs, &find, compare_ints);
++ if (entry)
++ return;
++
++ new = calloc(sizeof(struct irq_info), 1);
++ if (!new) {
++ if (debug_mode)
++ printf("No memory to ban irq %d\n", irq);
++ return;
++ }
++
++ new->irq = irq;
++
++ banned_irqs = g_list_append(banned_irqs, new);
++ return;
++}
++
++
+ /*
+ * Inserts an irq_info struct into the intterupts_db list
+ * devpath points to the device directory in sysfs for the
+@@ -90,6 +116,13 @@ static struct irq_info *add_one_irq_to_db(const char *devpath, int irq)
+ return NULL;
+ }
+
++ entry = g_list_find_custom(banned_irqs, &find, compare_ints);
++ if (entry) {
++ if (debug_mode)
++ printf("SKIPPING BANNED IRQ %d\n", irq);
++ return NULL;
++ }
++
+ new = calloc(sizeof(struct irq_info), 1);
+ if (!new)
+ return NULL;
+@@ -175,6 +208,43 @@ out:
+ return new;
+ }
+
++static int check_for_irq_ban(char *path, int irq)
++{
++ char *cmd;
++ int rc;
++
++ if (!banscript)
++ return 0;
++
++ cmd = alloca(strlen(path)+strlen(banscript)+32);
++ if (!cmd)
++ return 0;
++
++ sprintf(cmd, "%s %s %d",banscript, path, irq);
++ rc = system(cmd);
++
++ /*
++ * The system command itself failed
++ */
++ if (rc == -1) {
++ if (debug_mode)
++ printf("%s failed, please check the --banscript option\n", cmd);
++ else
++ syslog(LOG_INFO, "%s failed, please check the --banscript option\n", cmd);
++ return 0;
++ }
++
++ if (WEXITSTATUS(rc)) {
++ if (debug_mode)
++ printf("irq %d is baned by %s\n", irq, banscript);
++ else
++ syslog(LOG_INFO, "irq %d is baned by %s\n", irq, banscript);
++ return 1;
++ }
++ return 0;
++
++}
++
+ /*
+ * Figures out which interrupt(s) relate to the device we're looking at in dirname
+ */
+@@ -199,6 +269,10 @@ static void build_one_dev_entry(const char *dirname)
+ irqnum = strtol(entry->d_name, NULL, 10);
+ if (irqnum) {
+ sprintf(path, "%s/%s", SYSDEV_DIR, dirname);
++ if (check_for_irq_ban(path, irqnum)) {
++ add_banned_irq(irqnum);
++ continue;
++ }
+ new = add_one_irq_to_db(path, irqnum);
+ if (!new)
+ continue;
+@@ -221,6 +295,11 @@ static void build_one_dev_entry(const char *dirname)
+ */
+ if (irqnum) {
+ sprintf(path, "%s/%s", SYSDEV_DIR, dirname);
++ if (check_for_irq_ban(path, irqnum)) {
++ add_banned_irq(irqnum);
++ goto done;
++ }
++
+ new = add_one_irq_to_db(path, irqnum);
+ if (!new)
+ goto done;
+@@ -248,6 +327,8 @@ void rebuild_irq_db(void)
+ {
+ DIR *devdir = opendir(SYSDEV_DIR);
+ struct dirent *entry;
++ GList *gentry;
++ struct irq_info *ninfo, *iinfo;
+
+ free_irq_db();
+
+@@ -263,22 +344,46 @@ void rebuild_irq_db(void)
+ build_one_dev_entry(entry->d_name);
+
+ } while (entry != NULL);
++
+ closedir(devdir);
++
++ if (!new_irq_list)
++ return;
++ gentry = g_list_first(new_irq_list);
++ while(gentry) {
++ ninfo = gentry->data;
++ iinfo = get_irq_info(ninfo->irq);
++ new_irq_list = g_list_remove(gentry, ninfo);
++ if (!iinfo) {
++ if (debug_mode)
++ printf("Adding untracked IRQ %d to database\n", ninfo->irq);
++ interrupts_db = g_list_append(interrupts_db, ninfo);
++ } else
++ free(ninfo);
++
++ gentry = g_list_first(new_irq_list);
++ }
++ g_list_free(new_irq_list);
++ new_irq_list = NULL;
++
+ }
+
+-struct irq_info *add_misc_irq(int irq)
++struct irq_info *add_new_irq(int irq)
+ {
+- struct irq_info *new;
++ struct irq_info *new, *nnew;
+
+ new = calloc(sizeof(struct irq_info), 1);
+- if (!new)
++ nnew = calloc(sizeof(struct irq_info), 1);
++ if (!new || !nnew)
+ return NULL;
+
+ new->irq = irq;
+ new->type = IRQ_TYPE_LEGACY;
+ new->class = IRQ_OTHER;
+ new->numa_node = get_numa_node(-1);
++ memcpy(nnew, new, sizeof(struct irq_info));
+ interrupts_db = g_list_append(interrupts_db, new);
++ new_irq_list = g_list_append(new_irq_list, nnew);
+ return new;
+ }
+
+@@ -307,7 +412,7 @@ struct irq_info *get_irq_info(int irq)
+ void migrate_irq(GList **from, GList **to, struct irq_info *info)
+ {
+ GList *entry;
+- struct irq_info find, *tmp;;
++ struct irq_info find, *tmp;
+
+ find.irq = info->irq;
+ entry = g_list_find_custom(*from, &find, compare_ints);
+@@ -325,18 +430,9 @@ static gint sort_irqs(gconstpointer A, gconstpointer B)
+ a = (struct irq_info*)A;
+ b = (struct irq_info*)B;
+
+- if (a->class < b->class)
+- return 1;
+- if (a->class > b->class)
+- return -1;
+- if (a->load < b->load)
+- return 1;
+- if (a->load > b->load)
+- return -1;
+- if (a<b)
++ if (a->class < b->class || a->load < b->load || a < b)
+ return 1;
+ return -1;
+-
+ }
+
+ void sort_irq_list(GList **list)
+diff --git a/configure.ac b/configure.ac
+index eed55ba..1230d66 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -1,49 +1,12 @@
+-dnl
+-define([AC_INIT_NOTICE],
+-[### Generated automatically using autoconf version] AC_ACVERSION [
+-### Copyright 2009 Steve Grubb <sgrubb@redhat.com>
+-###
+-### Permission is hereby granted, free of charge, to any person obtaining a
+-### copy of this software and associated documentation files (the "Software"),
+-### to deal in the Software without restriction, including without limitation
+-### the rights to use, copy, modify, merge, publish, distribute, sublicense,
+-### and/or sell copies of the Software, and to permit persons to whom the
+-### Software is furnished to do so, subject to the following conditions:
+-###
+-### The above copyright notice and this permission notice shall be included
+-### in all copies or substantial portions of the Software.
+-###
+-### THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+-### IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+-### FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+-### THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+-### OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+-### ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+-### OTHER DEALINGS IN THE SOFTWARE.
+-###
+-### For usage, run `./configure --help'
+-### For more detailed information on installation, read the file `INSTALL'.
+-###
+-### If configuration succeeds, status is in the file `config.status'.
+-### A log of configuration tests is in `config.log'.
+-])
+-
+-AC_REVISION($Revision: 1.3 $)dnl
+ AC_INIT(irqbalance,1.0.3)
+ AC_PREREQ(2.12)dnl
+ AM_CONFIG_HEADER(config.h)
+
+-echo Configuring irqbalance $VERSION
+-
+ AC_CONFIG_MACRO_DIR([m4])
+-AC_CANONICAL_TARGET
+-AM_INIT_AUTOMAKE
++AM_INIT_AUTOMAKE([foreign])
+ AM_PROG_LIBTOOL
+ AC_SUBST(LIBTOOL_DEPS)
+
+-AC_MSG_NOTICE()
+-AC_MSG_NOTICE([Checking for programs])
+-
+ AC_PROG_CC
+ AC_PROG_INSTALL
+ AC_PROG_AWK
+@@ -55,9 +18,6 @@ AS_IF([test "$enable_numa" = "no"],[
+ ac_cv_lib_numa_numa_available=no
+ ])
+
+-AC_MSG_NOTICE
+-AC_MSG_NOTICE([echo Checking for header files])
+-
+ AC_HEADER_STDC
+ AC_CHECK_HEADERS([numa.h])
+
+@@ -70,10 +30,57 @@ AC_C_CONST
+ AC_C_INLINE
+ AM_PROG_CC_C_O
+
+-PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.28])
+-LIBCAP_NG_PATH
++AC_ARG_WITH([glib2],
++ [AS_HELP_STRING([--without-glib2],
++ [Don't use system glib2 library. Use local implementation instead.])],
++ [],
++ [with_glib2=check])
++
++local_glib2=
++AS_IF(
++ [test "x$with_glib2" = xyes],
++ [PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.28])],
++
++ [test "x$with_glib2" = xno],
++ [local_glib2="yes"],
++
++ [PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.28], [], [local_glib2="yes"])]
++)
++
++AS_IF(
++ [test "x$local_glib2" = xyes],
++ [
++ GLIB_CFLAGS=-I./glib-local
++ GLIB_LIBS=glib-local/libglib.a
++ AC_SUBST(GLIB_CFLAGS)
++ AC_SUBST(GLIB_LIBS)
++ AC_MSG_WARN(Using locale implementation of GList functions)
++ ]
++)
++
++AM_CONDITIONAL([LOCAL_GLIB], [test "x$local_glib2" = "xyes"])
++
++AC_ARG_WITH([libcap-ng],
++ AS_HELP_STRING([libcap-ng], [Add libcap-ng-support @<:@default=auto@:>@]))
++
++AS_IF(
++ [test "x$libcap_ng" != "xno"],
++ [
++ PKG_CHECK_MODULES([LIBCAP_NG], [libcap-ng],
++ [AC_DEFINE(HAVE_LIBCAP_NG,1,[libcap-ng support])],
++ [
++ AS_IF(
++ [test "x$libcap_ng" = "xyes"],
++ [
++ AC_MSG_ERROR([libcap-ng not found])
++ ]
++ )
++ ]
++ )
++ ]
++)
+
+-AC_OUTPUT(Makefile)
++AC_OUTPUT(Makefile glib-local/Makefile)
+
+ AC_MSG_NOTICE()
+ AC_MSG_NOTICE([irqbalance Version: $VERSION])
+diff --git a/cputree.c b/cputree.c
+index af4fd3a..9568967 100644
+--- a/cputree.c
++++ b/cputree.c
+@@ -1,5 +1,6 @@
+ /*
+ * Copyright (C) 2006, Intel Corporation
++ * Copyright (C) 2012, Neil Horman <nhorman@tuxdriver.com>
+ *
+ * This file is part of irqbalance
+ *
+diff --git a/glib-local/Makefile.am b/glib-local/Makefile.am
+new file mode 100644
+index 0000000..336b56e
+--- /dev/null
++++ b/glib-local/Makefile.am
+@@ -0,0 +1,8 @@
++## Process this file with automake to produce Makefile.in
++noinst_LIBRARIES = libglib.a
++
++libglib_a_SOURCES = glist.c
++
++libglib_a_CFLAGS = @GLIB_CFLAGS@
++
++noinst_HEADERS = glib.h glist.h
+diff --git a/glib-local/glib.h b/glib-local/glib.h
+new file mode 100644
+index 0000000..5874892
+--- /dev/null
++++ b/glib-local/glib.h
+@@ -0,0 +1 @@
++#include <glist.h>
+diff --git a/glib-local/glist.c b/glib-local/glist.c
+new file mode 100644
+index 0000000..6fa1761
+--- /dev/null
++++ b/glib-local/glist.c
+@@ -0,0 +1,381 @@
++#include <stdlib.h>
++
++#include "glist.h"
++
++/**
++ * g_list_free:
++ * @list: a #GList
++ *
++ * Frees all of the memory used by a #GList.
++ * The freed elements are returned to the slice allocator.
++ *
++ * <note><para>
++ * If list elements contain dynamically-allocated memory,
++ * you should either use g_list_free_full() or free them manually
++ * first.
++ * </para></note>
++ */
++void
++g_list_free (GList *list)
++{
++ GList *l = list;
++
++ while(l) {
++ GList *tmp = l->next;
++ free(l);
++ l = tmp;
++ }
++}
++
++/**
++ * g_list_last:
++ * @list: a #GList
++ *
++ * Gets the last element in a #GList.
++ *
++ * Returns: the last element in the #GList,
++ * or %NULL if the #GList has no elements
++ */
++GList*
++g_list_last (GList *list)
++{
++ if (list)
++ {
++ while (list->next)
++ list = list->next;
++ }
++
++ return list;
++}
++
++/**
++ * g_list_append:
++ * @list: a pointer to a #GList
++ * @data: the data for the new element
++ *
++ * Adds a new element on to the end of the list.
++ *
++ * <note><para>
++ * The return value is the new start of the list, which
++ * may have changed, so make sure you store the new value.
++ * </para></note>
++ *
++ * <note><para>
++ * Note that g_list_append() has to traverse the entire list
++ * to find the end, which is inefficient when adding multiple
++ * elements. A common idiom to avoid the inefficiency is to prepend
++ * the elements and reverse the list when all elements have been added.
++ * </para></note>
++ *
++ * |[
++ * /&ast; Notice that these are initialized to the empty list. &ast;/
++ * GList *list = NULL, *number_list = NULL;
++ *
++ * /&ast; This is a list of strings. &ast;/
++ * list = g_list_append (list, "first");
++ * list = g_list_append (list, "second");
++ *
++ * /&ast; This is a list of integers. &ast;/
++ * number_list = g_list_append (number_list, GINT_TO_POINTER (27));
++ * number_list = g_list_append (number_list, GINT_TO_POINTER (14));
++ * ]|
++ *
++ * Returns: the new start of the #GList
++ */
++GList*
++g_list_append (GList *list,
++ gpointer data)
++{
++ GList *new_list;
++ GList *last;
++
++ new_list = malloc(sizeof(*new_list));
++ new_list->data = data;
++ new_list->next = NULL;
++
++ if (list)
++ {
++ last = g_list_last (list);
++ /* g_assert (last != NULL); */
++ last->next = new_list;
++ new_list->prev = last;
++
++ return list;
++ }
++ else
++ {
++ new_list->prev = NULL;
++ return new_list;
++ }
++}
++
++static inline GList*
++_g_list_remove_link (GList *list,
++ GList *link)
++{
++ if (link)
++ {
++ if (link->prev)
++ link->prev->next = link->next;
++ if (link->next)
++ link->next->prev = link->prev;
++
++ if (link == list)
++ list = list->next;
++
++ link->next = NULL;
++ link->prev = NULL;
++ }
++
++ return list;
++}
++
++/**
++ * g_list_delete_link:
++ * @list: a #GList
++ * @link_: node to delete from @list
++ *
++ * Removes the node link_ from the list and frees it.
++ * Compare this to g_list_remove_link() which removes the node
++ * without freeing it.
++ *
++ * Returns: the new head of @list
++ */
++GList*
++g_list_delete_link (GList *list,
++ GList *link_)
++{
++ list = _g_list_remove_link (list, link_);
++ free (link_);
++
++ return list;
++}
++
++/**
++ * g_list_first:
++ * @list: a #GList
++ *
++ * Gets the first element in a #GList.
++ *
++ * Returns: the first element in the #GList,
++ * or %NULL if the #GList has no elements
++ */
++GList*
++g_list_first (GList *list)
++{
++ if (list)
++ {
++ while (list->prev)
++ list = list->prev;
++ }
++
++ return list;
++}
++
++static GList *
++g_list_sort_merge (GList *l1,
++ GList *l2,
++ GFunc compare_func,
++ gpointer user_data)
++{
++ GList list, *l, *lprev;
++ gint cmp;
++
++ l = &list;
++ lprev = NULL;
++
++ while (l1 && l2)
++ {
++ cmp = ((GCompareDataFunc) compare_func) (l1->data, l2->data, user_data);
++
++ if (cmp <= 0)
++ {
++ l->next = l1;
++ l1 = l1->next;
++ }
++ else
++ {
++ l->next = l2;
++ l2 = l2->next;
++ }
++ l = l->next;
++ l->prev = lprev;
++ lprev = l;
++ }
++ l->next = l1 ? l1 : l2;
++ l->next->prev = l;
++
++ return list.next;
++}
++
++static GList*
++g_list_sort_real (GList *list,
++ GFunc compare_func,
++ gpointer user_data)
++{
++ GList *l1, *l2;
++
++ if (!list)
++ return NULL;
++ if (!list->next)
++ return list;
++
++ l1 = list;
++ l2 = list->next;
++
++ while ((l2 = l2->next) != NULL)
++ {
++ if ((l2 = l2->next) == NULL)
++ break;
++ l1 = l1->next;
++ }
++ l2 = l1->next;
++ l1->next = NULL;
++
++ return g_list_sort_merge (g_list_sort_real (list, compare_func, user_data),
++ g_list_sort_real (l2, compare_func, user_data),
++ compare_func,
++ user_data);
++}
++
++/**
++ * g_list_sort:
++ * @list: a #GList
++ * @compare_func: the comparison function used to sort the #GList.
++ * This function is passed the data from 2 elements of the #GList
++ * and should return 0 if they are equal, a negative value if the
++ * first element comes before the second, or a positive value if
++ * the first element comes after the second.
++ *
++ * Sorts a #GList using the given comparison function.
++ *
++ * Returns: the start of the sorted #GList
++ */
++/**
++ * GCompareFunc:
++ * @a: a value.
++ * @b: a value to compare with.
++ * @Returns: negative value if @a &lt; @b; zero if @a = @b; positive
++ * value if @a > @b.
++ *
++ * Specifies the type of a comparison function used to compare two
++ * values. The function should return a negative integer if the first
++ * value comes before the second, 0 if they are equal, or a positive
++ * integer if the first value comes after the second.
++ **/
++GList *
++g_list_sort (GList *list,
++ GCompareFunc compare_func)
++{
++ return g_list_sort_real (list, (GFunc) compare_func, NULL);
++
++}
++
++/**
++ * g_list_length:
++ * @list: a #GList
++ *
++ * Gets the number of elements in a #GList.
++ *
++ * <note><para>
++ * This function iterates over the whole list to
++ * count its elements.
++ * </para></note>
++ *
++ * Returns: the number of elements in the #GList
++ */
++guint
++g_list_length (GList *list)
++{
++ guint length;
++
++ length = 0;
++ while (list)
++ {
++ length++;
++ list = list->next;
++ }
++
++ return length;
++}
++
++/**
++ * g_list_foreach:
++ * @list: a #GList
++ * @func: the function to call with each element's data
++ * @user_data: user data to pass to the function
++ *
++ * Calls a function for each element of a #GList.
++ */
++/**
++ * GFunc:
++ * @data: the element's data.
++ * @user_data: user data passed to g_list_foreach() or
++ * g_slist_foreach().
++ *
++ * Specifies the type of functions passed to g_list_foreach() and
++ * g_slist_foreach().
++ **/
++void
++g_list_foreach (GList *list,
++ GFunc func,
++ gpointer user_data)
++{
++ while (list)
++ {
++ GList *next = list->next;
++ (*func) (list->data, user_data);
++ list = next;
++ }
++}
++
++/**
++ * g_list_free_full:
++ * @list: a pointer to a #GList
++ * @free_func: the function to be called to free each element's data
++ *
++ * Convenience method, which frees all the memory used by a #GList, and
++ * calls the specified destroy function on every element's data.
++ *
++ * Since: 2.28
++ */
++void
++g_list_free_full (GList *list,
++ GDestroyNotify free_func)
++{
++ g_list_foreach (list, (GFunc) free_func, NULL);
++ g_list_free (list);
++}
++
++/**
++ * g_list_find_custom:
++ * @list: a #GList
++ * @data: user data passed to the function
++ * @func: the function to call for each element.
++ * It should return 0 when the desired element is found
++ *
++ * Finds an element in a #GList, using a supplied function to
++ * find the desired element. It iterates over the list, calling
++ * the given function which should return 0 when the desired
++ * element is found. The function takes two #gconstpointer arguments,
++ * the #GList element's data as the first argument and the
++ * given user data.
++ *
++ * Returns: the found #GList element, or %NULL if it is not found
++ */
++GList*
++g_list_find_custom (GList *list,
++ gconstpointer data,
++ GCompareFunc func)
++{
++ g_return_val_if_fail (func != NULL, list);
++
++ while (list)
++ {
++ if (! func (list->data, data))
++ return list;
++ list = list->next;
++ }
++
++ return NULL;
++}
+diff --git a/glib-local/glist.h b/glib-local/glist.h
+new file mode 100644
+index 0000000..47f2cfe
+--- /dev/null
++++ b/glib-local/glist.h
+@@ -0,0 +1,56 @@
++#ifndef __G_LIST_H__
++#define __G_LIST_H__
++
++typedef int gint;
++typedef unsigned int guint;
++typedef void* gpointer;
++typedef const void *gconstpointer;
++typedef gint (*GCompareFunc) (gconstpointer a,
++ gconstpointer b);
++typedef gint (*GCompareDataFunc) (gconstpointer a,
++ gconstpointer b,
++ gpointer user_data);
++typedef void (*GFunc) (gpointer data,
++ gpointer user_data);
++typedef void (*GDestroyNotify) (gpointer data);
++
++struct _GList;
++typedef struct _GList GList;
++
++struct _GList
++{
++ gpointer data;
++ GList *next;
++ GList *prev;
++};
++
++/* Doubly linked lists
++ */
++void g_list_free (GList *list);
++GList* g_list_append (GList *list,
++ gpointer data);
++GList* g_list_delete_link (GList *list,
++ GList *link_);
++GList* g_list_first (GList *list);
++GList* g_list_sort (GList *list,
++ GCompareFunc compare_func);
++guint g_list_length (GList *list);
++void g_list_foreach (GList *list,
++ GFunc func,
++ gpointer user_data);
++void g_list_free_full (GList *list,
++ GDestroyNotify free_func);
++GList* g_list_find_custom (GList *list,
++ gconstpointer data,
++ GCompareFunc func);
++
++#define g_list_previous(list) ((list) ? (((GList *)(list))->prev) : NULL)
++#define g_list_next(list) ((list) ? (((GList *)(list))->next) : NULL)
++
++#define g_return_val_if_fail(expr,val) do { \
++ if (expr) { } else \
++ { \
++ return (val); \
++ } } while(0);
++
++#endif /* __G_LIST_H__ */
+diff --git a/irqbalance.1 b/irqbalance.1
+index 55fc15f..20105bc 100644
+--- a/irqbalance.1
++++ b/irqbalance.1
+@@ -39,7 +39,11 @@ Causes irqbalance to be run once, after which the daemon exits
+ .TP
+
+ .B --debug
+-Causes irqbalance to run in the foreground and extra debug information to be printed
++Causes irqbalance to print extra debug information. Implies --foreground
++
++.TP
++.B --foreground
++Causes irqbalance to run in the foreground (without --debug)
+
+ .TP
+ .B --hintpolicy=[exact | subset | ignore]
+@@ -62,6 +66,30 @@ average cpu softirq workload, and no cpus are more than 1 standard deviation
+ above (and have more than 1 irq assigned to them), attempt to place 1 cpu in
+ powersave mode. In powersave mode, a cpu will not have any irqs balanced to it,
+ in an effort to prevent that cpu from waking up without need.
++
++.TP
++.B --banirq=<irqnum>
++Add the specified irq list to the set of banned irqs. irqbalance will not affect
++the affinity of any irqs on the banned list, allowing them to be specified
++manually. This option is addative and can be specified multiple times
++
++.TP
++.B --banscript=<script>
++Execute the specified script for each irq that is discovered, passing the sysfs
++path to the associated device as the first argument, and the irq vector as the
++second. An exit value of 0 tells irqbalance that this interrupt should balanced
++and managed as a normal irq, while a non-zero exit code indicates this irq
++should be ignored by irqbalance completely (see --banirq above). Use of this
++script provides users the ability to dynamically select which irqs get exluded
++from balancing, and provides an opportunity for manual affinity setting in one
++single code point.
++
++.TP
++.B --pid=<file>
++Have irqbalance write its process id to the specified file. By default no
++pidfile is written. The written pidfile is automatically unlinked when
++irqbalance exits.
++
+ .SH "ENVIRONMENT VARIABLES"
+ .TP
+ .B IRQBALANCE_ONESHOT
+@@ -75,9 +103,10 @@ Same as --debug
+ .B IRQBALANCE_BANNED_CPUS
+ Provides a mask of cpus which irqbalance should ignore and never assign interrupts to
+
++.SH "SIGNALS"
+ .TP
+-.B IRQBALANCE_BANNED_INTERRUPTS
+-A list of space delimited IRQ numbers that irqbalance should not touch
++.B SIGHUP
++Forces a rescan of the available irqs and system topology
+
+ .SH "Homepage"
+ http://code.google.com/p/irqbalance
+diff --git a/irqbalance.c b/irqbalance.c
+index 99c5db7..fbe6ac6 100644
+--- a/irqbalance.c
++++ b/irqbalance.c
+@@ -1,5 +1,6 @@
+ /*
+ * Copyright (C) 2006, Intel Corporation
++ * Copyright (C) 2012, Neil Horman <nhorman@tuxdriver.com>
+ *
+ * This file is part of irqbalance
+ *
+@@ -27,6 +28,10 @@
+ #include <syslog.h>
+ #include <unistd.h>
+ #include <signal.h>
++#include <time.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <fcntl.h>
+ #ifdef HAVE_GETOPT_LONG
+ #include <getopt.h>
+ #endif
+@@ -39,12 +44,15 @@
+ volatile int keep_going = 1;
+ int one_shot_mode;
+ int debug_mode;
++int foreground_mode;
+ int numa_avail;
+-int need_cpu_rescan;
++int need_rescan;
+ extern cpumask_t banned_cpus;
+ enum hp_e hint_policy = HINT_POLICY_SUBSET;
+ unsigned long power_thresh = ULONG_MAX;
+ unsigned long long cycle_count = 0;
++char *pidfile = NULL;
++char *banscript = NULL;
+
+ void sleep_approx(int seconds)
+ {
+@@ -64,32 +72,45 @@ void sleep_approx(int seconds)
+ struct option lopts[] = {
+ {"oneshot", 0, NULL, 'o'},
+ {"debug", 0, NULL, 'd'},
++ {"foreground", 0, NULL, 'f'},
+ {"hintpolicy", 1, NULL, 'h'},
+ {"powerthresh", 1, NULL, 'p'},
++ {"banirq", 1 , NULL, 'i'},
++ {"banscript", 1, NULL, 'b'},
++ {"pid", 1, NULL, 's'},
+ {0, 0, 0, 0}
+ };
+
+ static void usage(void)
+ {
+- printf("irqbalance [--oneshot | -o] [--debug | -d] [--hintpolicy= | -h [exact|subset|ignore]]\n");
+- printf(" [--powerthresh= | -p <off> | <n>]\n");
++ printf("irqbalance [--oneshot | -o] [--debug | -d] [--foreground | -f] [--hintpolicy= | -h [exact|subset|ignore]]\n");
++ printf(" [--powerthresh= | -p <off> | <n>] [--banirq= | -i <n>]\n");
+ }
+
+ static void parse_command_line(int argc, char **argv)
+ {
+ int opt;
+ int longind;
++ unsigned long val;
+
+ while ((opt = getopt_long(argc, argv,
+- "odh:p:",
++ "odfh:i:p:s:",
+ lopts, &longind)) != -1) {
+
+ switch(opt) {
+ case '?':
+ usage();
+ exit(1);
++ break;
++ case 'b':
++ banscript = strdup(optarg);
++ break;
+ case 'd':
+ debug_mode=1;
++ foreground_mode=1;
++ break;
++ case 'f':
++ foreground_mode=1;
+ break;
+ case 'h':
+ if (!strncmp(optarg, "exact", strlen(optarg)))
+@@ -103,6 +124,14 @@ static void parse_command_line(int argc, char **argv)
+ exit(1);
+ }
+ break;
++ case 'i':
++ val = strtoull(optarg, NULL, 10);
++ if (val == ULONG_MAX) {
++ usage();
++ exit(1);
++ }
++ add_banned_irq((int)val);
++ break;
+ case 'p':
+ if (!strncmp(optarg, "off", strlen(optarg)))
+ power_thresh = ULONG_MAX;
+@@ -117,6 +146,9 @@ static void parse_command_line(int argc, char **argv)
+ case 'o':
+ one_shot_mode=1;
+ break;
++ case 's':
++ pidfile = optarg;
++ break;
+ }
+ }
+ }
+@@ -172,18 +204,34 @@ static void handler(int signum)
+ keep_going = 0;
+ }
+
++static void force_rescan(int signum)
++{
++ if (cycle_count)
++ need_rescan = 1;
++}
++
+ int main(int argc, char** argv)
+ {
+- struct sigaction action;
++ struct sigaction action, hupaction;
+
+ #ifdef HAVE_GETOPT_LONG
+ parse_command_line(argc, argv);
+ #else
+- if (argc>1 && strstr(argv[1],"--debug"))
++ if (argc>1 && strstr(argv[1],"--debug")) {
+ debug_mode=1;
++ foreground_mode=1;
++ }
++ if (argc>1 && strstr(argv[1],"--foreground"))
++ foreground_mode=1;
+ if (argc>1 && strstr(argv[1],"--oneshot"))
+ one_shot_mode=1;
+ #endif
++
++ /*
++ * Open the syslog connection
++ */
++ openlog(argv[0], 0, LOG_DAEMON);
++
+ if (getenv("IRQBALANCE_BANNED_CPUS")) {
+ cpumask_parse_user(getenv("IRQBALANCE_BANNED_CPUS"), strlen(getenv("IRQBALANCE_BANNED_CPUS")), banned_cpus);
+ }
+@@ -212,17 +260,35 @@ int main(int argc, char** argv)
+
+
+ /* On single core UP systems irqbalance obviously has no work to do */
+- if (core_count<2)
++ if (core_count<2) {
++ char *msg = "Balaincing is ineffective on systems with a "
++ "single cache domain. Shutting down\n";
++
++ if (debug_mode)
++ printf("%s", msg);
++ else
++ syslog(LOG_INFO, "%s", msg);
+ exit(EXIT_SUCCESS);
++ }
+ /* On dual core/hyperthreading shared cache systems just do a one shot setup */
+ if (cache_domain_count==1)
+ one_shot_mode = 1;
+
+- if (!debug_mode)
++ if (!foreground_mode) {
++ int pidfd = -1;
+ if (daemon(0,0))
+ exit(EXIT_FAILURE);
++ /* Write pidfile */
++ if (pidfile && (pidfd = open(pidfile,
++ O_WRONLY | O_CREAT | O_EXCL | O_TRUNC,
++ S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)) >= 0) {
++ char str[16];
++ snprintf(str, sizeof(str), "%u\n", getpid());
++ write(pidfd, str, strlen(str));
++ close(pidfd);
++ }
++ }
+
+- openlog(argv[0], 0, LOG_DAEMON);
+
+ #ifdef HAVE_LIBCAP_NG
+ // Drop capabilities
+@@ -236,6 +302,11 @@ int main(int argc, char** argv)
+ parse_proc_interrupts();
+ parse_proc_stat();
+
++ hupaction.sa_handler = force_rescan;
++ sigemptyset(&hupaction.sa_mask);
++ hupaction.sa_flags = 0;
++ sigaction(SIGHUP, &hupaction, NULL);
++
+ while (keep_going) {
+ sleep_approx(SLEEP_INTERVAL);
+ if (debug_mode)
+@@ -247,8 +318,8 @@ int main(int argc, char** argv)
+ parse_proc_stat();
+
+ /* cope with cpu hotplug -- detected during /proc/interrupts parsing */
+- if (need_cpu_rescan) {
+- need_cpu_rescan = 0;
++ if (need_rescan) {
++ need_rescan = 0;
+ /* if there's a hotplug event we better turn off power mode for a bit until things settle */
+ power_mode = 0;
+ if (debug_mode)
+@@ -282,5 +353,10 @@ int main(int argc, char** argv)
+
+ }
+ free_object_tree();
++
++ /* Remove pidfile */
++ if (!foreground_mode && pidfile)
++ unlink(pidfile);
++
+ return EXIT_SUCCESS;
+ }
+diff --git a/irqbalance.h b/irqbalance.h
+index 4e85325..e46f31f 100644
+--- a/irqbalance.h
++++ b/irqbalance.h
+@@ -9,6 +9,7 @@
+ #include <stdint.h>
+ #include <glib.h>
+ #include <syslog.h>
++#include <limits.h>
+
+ #include "types.h"
+ #ifdef HAVE_NUMA_H
+@@ -40,7 +41,6 @@ void dump_tree(void);
+
+ void activate_mappings(void);
+ void account_for_nic_stats(void);
+-void check_power_mode(void);
+ void clear_cpu_tree(void);
+ void pci_numa_scan(void);
+
+@@ -64,10 +64,11 @@ enum hp_e {
+ extern int debug_mode;
+ extern int one_shot_mode;
+ extern int power_mode;
+-extern int need_cpu_rescan;
++extern int need_rescan;
+ extern enum hp_e hint_policy;
+ extern unsigned long long cycle_count;
+ extern unsigned long power_thresh;
++extern char *banscript;
+
+ /*
+ * Numa node access routines
+@@ -103,10 +104,11 @@ extern int get_cpu_count(void);
+ */
+ extern void rebuild_irq_db(void);
+ extern void free_irq_db(void);
++extern void add_banned_irq(int irq);
+ extern void for_each_irq(GList *list, void (*cb)(struct irq_info *info, void *data), void *data);
+ extern struct irq_info *get_irq_info(int irq);
+ extern void migrate_irq(GList **from, GList **to, struct irq_info *info);
+-extern struct irq_info *add_misc_irq(int irq);
++extern struct irq_info *add_new_irq(int irq);
+ #define irq_numa_node(irq) ((irq)->numa_node)
+
+
+diff --git a/irqlist.c b/irqlist.c
+index c29ee84..2523173 100644
+--- a/irqlist.c
++++ b/irqlist.c
+@@ -1,5 +1,6 @@
+ /*
+ * Copyright (C) 2006, Intel Corporation
++ * Copyright (C) 2012, Neil Horman <nhorman@tuxdriver.com>
+ *
+ * This file is part of irqbalance
+ *
+@@ -45,6 +46,7 @@ struct load_balance_info {
+ unsigned int num_within;
+ unsigned int num_over;
+ unsigned int num_under;
++ unsigned int num_powersave;
+ struct topo_obj *powersave;
+ };
+
+@@ -106,13 +108,16 @@ static void migrate_overloaded_irqs(struct topo_obj *obj, void *data)
+ struct load_balance_info *info = data;
+ int deviation;
+
++ if (obj->powersave_mode)
++ info->num_powersave++;
++
+ /*
+ * Don't rebalance irqs on objects whos load is below the average
+ */
+ if (obj->load <= info->avg_load) {
+ if ((obj->load + info->std_deviation) <= info->avg_load) {
+ info->num_under++;
+- if (!info->powersave)
++ if (power_thresh != ULONG_MAX && !info->powersave)
+ if (!obj->powersave_mode)
+ info->powersave = obj;
+ } else
+@@ -172,13 +177,13 @@ void update_migration_status(void)
+ {
+ struct load_balance_info info;
+ find_overloaded_objs(cpus, info);
+- if (cycle_count > 5) {
++ if (power_thresh != ULONG_MAX && cycle_count > 5) {
+ if (!info.num_over && (info.num_under >= power_thresh) && info.powersave) {
+ syslog(LOG_INFO, "cpu %d entering powersave mode\n", info.powersave->number);
+ info.powersave->powersave_mode = 1;
+ if (g_list_length(info.powersave->interrupts) > 0)
+ for_each_irq(info.powersave->interrupts, force_irq_migration, NULL);
+- } else if (info.num_over) {
++ } else if ((info.num_over) && (info.num_powersave)) {
+ syslog(LOG_INFO, "Load average increasing, re-enabling all cpus for irq balancing\n");
+ for_each_object(cpus, clear_powersave_mode, NULL);
+ }
+diff --git a/m4/cap-ng.m4 b/m4/cap-ng.m4
+deleted file mode 100644
+index 0024edc..0000000
+--- a/m4/cap-ng.m4
++++ /dev/null
+@@ -1,40 +0,0 @@
+-# libcap-ng.m4 - Checks for the libcap-ng support
+-# Copyright (c) 2009 Steve Grubb sgrubb@redhat.com
+-#
+-AC_DEFUN([LIBCAP_NG_PATH],
+-[
+- AC_ARG_WITH(libcap-ng,
+- [ --with-libcap-ng=[auto/yes/no] Add Libcap-ng support [default=auto]],,
+- with_libcap_ng=auto)
+-
+- # Check for Libcap-ng API
+- #
+- # libcap-ng detection
+-
+- if test x$with_libcap_ng = xno ; then
+- have_libcap_ng=no;
+- else
+- # Start by checking for header file
+- AC_CHECK_HEADER(cap-ng.h, capng_headers=yes, capng_headers=no)
+-
+- # See if we have libcap-ng library
+- AC_CHECK_LIB(cap-ng, capng_clear,
+- CAPNG_LDADD=-lcap-ng,)
+-
+- # Check results are usable
+- if test x$with_libcap_ng = xyes -a x$CAPNG_LDADD = x ; then
+- AC_MSG_ERROR(libcap-ng support was requested and the library was not found)
+- fi
+- if test x$CAPNG_LDADD != x -a $capng_headers = no ; then
+- AC_MSG_ERROR(libcap-ng libraries found but headers are missing)
+- fi
+- fi
+- AC_SUBST(CAPNG_LDADD)
+- AC_MSG_CHECKING(whether to use libcap-ng)
+- if test x$CAPNG_LDADD != x ; then
+- AC_DEFINE(HAVE_LIBCAP_NG,1,[libcap-ng support])
+- AC_MSG_RESULT(yes)
+- else
+- AC_MSG_RESULT(no)
+- fi
+-])
+diff --git a/misc/irqbalance.env b/misc/irqbalance.env
+new file mode 100644
+index 0000000..bd87e3d
+--- /dev/null
++++ b/misc/irqbalance.env
+@@ -0,0 +1,26 @@
++# irqbalance is a daemon process that distributes interrupts across
++# CPUS on SMP systems. The default is to rebalance once every 10
++# seconds. This is the environment file that is specified to systemd via the
++# EnvironmentFile key in the service unit file (or via whatever method the init
++# system you're using has.
++#
++# ONESHOT=yes
++# after starting, wait for a minute, then look at the interrupt
++# load and balance it once; after balancing exit and do not change
++# it again.
++#IRQBALANCE_ONESHOT=
++
++#
++# IRQBALANCE_BANNED_CPUS
++# 64 bit bitmask which allows you to indicate which cpu's should
++# be skipped when reblancing irqs. Cpu numbers which have their
++# corresponding bits set to one in this mask will not have any
++# irq's assigned to them on rebalance
++#
++#IRQBALANCE_BANNED_CPUS=
++
++#
++# IRQBALANCE_ARGS
++# append any args here to the irqbalance daemon as documented in the man page
++#
++#IRQBALANCE_ARGS=
+diff --git a/misc/irqbalance.service b/misc/irqbalance.service
+index f349616..3139a83 100644
+--- a/misc/irqbalance.service
++++ b/misc/irqbalance.service
+@@ -3,9 +3,8 @@ Description=irqbalance daemon
+ After=syslog.target
+
+ [Service]
+-EnvironmentFile=/etc/sysconfig/irqbalance
+-Type=forking
+-ExecStart=/usr/sbin/irqbalance $ONESHOT
++EnvironmentFile=/path/to/irqbalance.env
++ExecStart=/usr/sbin/irqbalance --foreground $IRQBALANCE_ARGS
+
+ [Install]
+ WantedBy=multi-user.target
+diff --git a/numa.c b/numa.c
+index 710ed67..96703bd 100644
+--- a/numa.c
++++ b/numa.c
+@@ -1,5 +1,6 @@
+ /*
+ * Copyright (C) 2006, Intel Corporation
++ * Copyright (C) 2012, Neil Horman <nhorman@tuxdriver.com>
+ *
+ * This file is part of irqbalance
+ *
+@@ -106,11 +107,11 @@ void build_numa_node_list(void)
+ static void free_numa_node(gpointer data)
+ {
+ struct topo_obj *obj = data;
+- if (data == &unspecified_node)
+- return;
+-
+ g_list_free(obj->children);
+- free(data);
++ g_list_free(obj->interrupts);
++
++ if (data != &unspecified_node)
++ free(data);
+ }
+
+ void free_numa_node_list(void)
+diff --git a/placement.c b/placement.c
+index 108ccc9..1172849 100644
+--- a/placement.c
++++ b/placement.c
+@@ -1,5 +1,6 @@
+ /*
+ * Copyright (C) 2006, Intel Corporation
++ * Copyright (C) 2012, Neil Horman <nhoramn@tuxdriver.com>
+ *
+ * This file is part of irqbalance
+ *
+@@ -48,7 +49,7 @@ static void find_best_object(struct topo_obj *d, void *data)
+ /*
+ * Don't consider the unspecified numa node here
+ */
+- if ((d->obj_type == OBJ_TYPE_NODE) && (d->number == -1))
++ if (numa_avail && (d->obj_type == OBJ_TYPE_NODE) && (d->number == -1))
+ return;
+
+ /*
+diff --git a/powermode.c b/powermode.c
+deleted file mode 100644
+index 82ba490..0000000
+--- a/powermode.c
++++ /dev/null
+@@ -1,34 +0,0 @@
+-/*
+- * Copyright (C) 2006, Intel Corporation
+- *
+- * This file is part of irqbalance
+- *
+- * This program file 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; version 2 of the License.
+- *
+- * This program is distributed in the hope that it will be useful, but WITHOUT
+- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+- * for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program in a file named COPYING; if not, write to the
+- * Free Software Foundation, Inc.,
+- * 51 Franklin Street, Fifth Floor,
+- * Boston, MA 02110-1301 USA
+- */
+-#include "config.h"
+-#include <stdio.h>
+-#include <stdlib.h>
+-#include <unistd.h>
+-#include <stdint.h>
+-#include <string.h>
+-
+-#include "irqbalance.h"
+-
+-
+-void check_power_mode(void)
+-{
+-}
+-
+diff --git a/procinterrupts.c b/procinterrupts.c
+index 4d3b07b..431fffa 100644
+--- a/procinterrupts.c
++++ b/procinterrupts.c
+@@ -1,5 +1,6 @@
+ /*
+ * Copyright (C) 2006, Intel Corporation
++ * Copyright (C) 2012, Neil Horman <nhorman@tuxdriver.com>
+ *
+ * This file is part of irqbalance
+ *
+@@ -32,6 +33,8 @@
+
+ #define LINESIZE 4096
+
++extern cpumask_t banned_cpus;
++
+ static int proc_int_has_msi = 0;
+ static int msi_found_in_sysfs = 0;
+
+@@ -80,8 +83,12 @@ void parse_proc_interrupts(void)
+ c++;
+ number = strtoul(line, NULL, 10);
+ info = get_irq_info(number);
+- if (!info)
+- info = add_misc_irq(number);
++ if (!info) {
++ if (!cycle_count)
++ continue;
++ need_rescan = 1;
++ info = add_new_irq(number);
++ }
+
+ count = 0;
+ cpunr = 0;
+@@ -97,7 +104,7 @@ void parse_proc_interrupts(void)
+ cpunr++;
+ }
+ if (cpunr != core_count)
+- need_cpu_rescan = 1;
++ need_rescan = 1;
+
+ info->last_irq_count = info->irq_count;
+ info->irq_count = count;
+@@ -217,6 +224,9 @@ void parse_proc_stat(void)
+
+ cpunr = strtoul(&line[3], NULL, 10);
+
++ if (cpu_isset(cpunr, banned_cpus))
++ continue;
++
+ rc = sscanf(line, "%*s %*d %*d %*d %*d %*d %d %d", &irq_load, &softirq_load);
+ if (rc < 2)
+ break;
diff --git a/testing/irqbalance/irqbalance.conf.d b/testing/irqbalance/irqbalance.conf.d
new file mode 100644
index 000000000..ef1bdfd75
--- /dev/null
+++ b/testing/irqbalance/irqbalance.conf.d
@@ -0,0 +1,6 @@
+#
+# Settings for irqbalance daemon
+#
+
+# one shot mode - set to 1 if you have Pentium 4 with HT
+ONESHOT=0
diff --git a/testing/irqbalance/irqbalance.rc.d b/testing/irqbalance/irqbalance.rc.d
new file mode 100644
index 000000000..987c26b51
--- /dev/null
+++ b/testing/irqbalance/irqbalance.rc.d
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+# source application-specific settings
+ONESHOT=0
+[ -f /etc/conf.d/irqbalance ] && . /etc/conf.d/irqbalance
+
+if [ "$ONESHOT" -ne 0 ]; then
+ ONESHOT_CMD="--oneshot"
+fi
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/irqbalance`
+case "$1" in
+ start)
+ stat_busy "Starting IRQ balancing"
+ [ -z "$PID" ] && /usr/sbin/irqbalance $ONESHOT_CMD
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ if [ "$ONESHOT" -eq 0 ]; then
+ add_daemon irqbalance
+ fi
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping IRQ balancing"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon irqbalance
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/testing/irqbalance/irqbalance.service b/testing/irqbalance/irqbalance.service
new file mode 100644
index 000000000..372ac0aa4
--- /dev/null
+++ b/testing/irqbalance/irqbalance.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=CPU Interrupt Request Balancer
+
+[Service]
+ExecStart=/usr/sbin/irqbalance --foreground
+
+[Install]
+WantedBy=multi-user.target
diff --git a/testing/memcached/PKGBUILD b/testing/memcached/PKGBUILD
new file mode 100644
index 000000000..540073226
--- /dev/null
+++ b/testing/memcached/PKGBUILD
@@ -0,0 +1,38 @@
+# $Id: PKGBUILD 165366 2012-08-16 14:41:50Z dan $
+# Maintainer: Dan McGee <dan@archlinux.org>
+# Contributor: Michael Irwin <6d6469@gmail.com>
+
+pkgname=memcached
+pkgver=1.4.14
+pkgrel=2
+pkgdesc="A distributed memory object caching system"
+arch=(i686 x86_64)
+url="http://memcached.org/"
+license=('GPL')
+depends=('libevent')
+optdepends=('perl: for memcached-tool usage')
+backup=('etc/conf.d/memcached')
+install=memcached.install
+source=(http://memcached.googlecode.com/files/$pkgname-$pkgver.tar.gz
+ memcached.conf
+ memcached.sh
+ memcached.service)
+sha256sums=('f2e2ad8ee8d256f2c3748d7f741dcddfd0ab6bdece6fa1c18484e83f311156ef'
+ '17f66873b77e96c6706dcf13ab0aa8ddff94b2851366c787fc23e614dfc11f47'
+ '72efa639c5a39c7c14f07cc51731ebbf82299870d9cf31cf3aaa981bc084b4eb'
+ '453cad82bddb25fac43fd5cedc5702b9b6c6abaf7498e21445facf20f25f53a6')
+
+build() {
+ cd "$srcdir/$pkgname-$pkgver"
+ ./configure --prefix=/usr
+ make
+}
+
+package() {
+ cd "$srcdir/$pkgname-$pkgver"
+ make DESTDIR="$pkgdir" install
+ install -D -m 755 scripts/memcached-tool "$pkgdir"/usr/bin/memcached-tool
+ install -D -m 644 ../memcached.conf "$pkgdir"/etc/conf.d/memcached
+ install -D -m 755 ../memcached.sh "$pkgdir"/etc/rc.d/memcached
+ install -D -m 644 ../memcached.service "$pkgdir"/usr/lib/systemd/system/memcached.service
+}
diff --git a/testing/memcached/memcached.conf b/testing/memcached/memcached.conf
new file mode 100644
index 000000000..4415e1a55
--- /dev/null
+++ b/testing/memcached/memcached.conf
@@ -0,0 +1,4 @@
+# user to run memcached as; also used for pid file ownership
+MEMCACHED_USER="memcached"
+# see 'memcached -h' for available options
+MEMCACHED_ARGS="-l 127.0.0.1 -t 1"
diff --git a/testing/memcached/memcached.install b/testing/memcached/memcached.install
new file mode 100644
index 000000000..6009b713f
--- /dev/null
+++ b/testing/memcached/memcached.install
@@ -0,0 +1,22 @@
+post_install() {
+ if ! getent group memcached >/dev/null; then
+ groupadd --system memcached
+ fi
+ if ! getent passwd memcached >/dev/null; then
+ useradd --system -c 'memcached user' -g memcached -d / -s /bin/bash memcached
+ passwd -l memcached >/dev/null
+ fi
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+post_remove() {
+ if getent passwd memcached >/dev/null; then
+ userdel memcached
+ fi
+ if getent group memcached >/dev/null; then
+ groupdel memcached
+ fi
+}
diff --git a/testing/memcached/memcached.service b/testing/memcached/memcached.service
new file mode 100644
index 000000000..c6e15fb7c
--- /dev/null
+++ b/testing/memcached/memcached.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Memcached Daemon
+After=network.target
+
+[Service]
+User=memcached
+# Remove '-l 127.0.0.1' to listen on all addresses
+ExecStart=/usr/bin/memcached -l 127.0.0.1
+
+[Install]
+WantedBy=multi-user.target
diff --git a/testing/memcached/memcached.sh b/testing/memcached/memcached.sh
new file mode 100644
index 000000000..9c9727507
--- /dev/null
+++ b/testing/memcached/memcached.sh
@@ -0,0 +1,63 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+. /etc/conf.d/memcached
+
+PIDFILE='/var/run/memcached.pid'
+
+getpid() {
+ local pid
+ pid=$(cat $PIDFILE 2>/dev/null)
+ # if the process is no longer valid, don't return it
+ if [ -n "$pid" ]; then
+ if ! ps -p $pid >/dev/null; then
+ rm -f $PIDFILE
+ pid=""
+ fi
+ fi
+ echo $pid
+}
+
+PID="$(getpid)"
+
+case "$1" in
+ start)
+ stat_busy "Starting memcached"
+ # memcached is retarded and doesn't write to the pidfile
+ # before it drops permissions
+ if [ -n "$PID" ]; then
+ stat_fail
+ elif [ -z "$MEMCACHED_USER" ]; then
+ echo "MEMCACHED_USER must be defined in /etc/conf.d/memcached"
+ stat_fail
+ else
+ touch $PIDFILE && chown $MEMCACHED_USER $PIDFILE
+ /usr/bin/memcached -d -P $PIDFILE -u $MEMCACHED_USER $MEMCACHED_ARGS
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon memcached
+ stat_done
+ fi
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping memcached"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm -f $PIDFILE
+ rm_daemon memcached
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
diff --git a/testing/spamassassin/PKGBUILD b/testing/spamassassin/PKGBUILD
new file mode 100644
index 000000000..a6b0dbb0b
--- /dev/null
+++ b/testing/spamassassin/PKGBUILD
@@ -0,0 +1,60 @@
+# $Id: PKGBUILD 165370 2012-08-16 16:16:07Z bluewind $
+# Maintainer: Dale Blount <dale@archlinux.org>
+# Contributor: Manolis Tzanidakis
+pkgname=spamassassin
+pkgver=3.3.2
+pkgrel=4
+pkgdesc="A mail filter to identify spam."
+arch=('i686' 'x86_64')
+license=('APACHE')
+url="http://spamassassin.apache.org"
+depends=('openssl' 'zlib' 're2c' 'perl-net-dns' 'perl-io-socket-ssl'
+ 'perl-libwww' 'perl-mail-spf' 'perl-http-message' 'perl-net-http'
+ 'perl-io-socket-inet6' 'perl-mail-dkim' 'perl-crypt-ssleay')
+makedepends=('razor' 'perl-dbi')
+optdepends=('razor: to identify collaborately-flagged spam')
+backup=('etc/conf.d/spamd'
+ 'etc/mail/spamassassin/local.cf'
+ 'etc/mail/spamassassin/init.pre'
+ 'etc/mail/spamassassin/v310.pre'
+ 'etc/mail/spamassassin/v312.pre'
+ 'etc/mail/spamassassin/v320.pre'
+ 'etc/mail/spamassassin/v330.pre')
+install="${pkgname}.install"
+options=('!emptydirs')
+source=("http://mirrors.devlib.org/apache/${pkgname}/source/Mail-SpamAssassin-${pkgver}.tar.gz"
+ 'spamd.conf.d' 'spamd' 'spamassassin.service')
+md5sums=('d1d62cc5c6eac57e88c4006d9633b81e'
+ 'af501c6b0bb937a2775b747cc4b6d150'
+ '57545e6877503d897db21e9a2e8bd2b9'
+ '1c39572b79bc20c822387814050ee5c1')
+
+build() {
+ cd "${srcdir}/Mail-SpamAssassin-${pkgver}"
+
+ # install module in vendor directories.
+ PERL_MM_USE_DEFAULT=1 perl Makefile.PL INSTALLDIRS=vendor \
+ CONTACT_ADDRESS=root@localhost ENABLE_SSL=yes PERL_TAINT=no
+ make
+}
+
+check() {
+ cd "${srcdir}/Mail-SpamAssassin-${pkgver}"
+
+ # SSLv2 is disabled by upstream so this test would fail
+ rm -rf t/spamd_ssl_v2.t
+
+ # parallel tests cause lots of failures; disable for now
+ #export HARNESS_OPTIONS="j$(echo $MAKEFLAGS | sed 's/.*-j\([0-9][0-9]*\).*/\1/')"
+
+ make test
+}
+
+package() {
+ cd "${srcdir}/Mail-SpamAssassin-${pkgver}"
+ make DESTDIR="${pkgdir}" install
+
+ install -D -m644 "${srcdir}/spamd.conf.d" "${pkgdir}/etc/conf.d/spamd"
+ install -D -m755 "${srcdir}/spamd" "${pkgdir}/etc/rc.d/spamd"
+ install -D -m644 "${srcdir}/spamassassin.service" "${pkgdir}/usr/lib/systemd/system/spamassassin.serivce"
+}
diff --git a/testing/spamassassin/spamassassin.install b/testing/spamassassin/spamassassin.install
new file mode 100644
index 000000000..fae0264b2
--- /dev/null
+++ b/testing/spamassassin/spamassassin.install
@@ -0,0 +1,11 @@
+post_install() {
+ echo "You must run 'sa-update' to install spam rules before use."
+}
+
+post_upgrade() {
+ # Compile rules, if rules have previously been compiled, and it's possible
+ if type re2c &>/dev/null && type sa-compile &>/dev/null && [[ -d /var/lib/spamassassin/compiled ]]
+ echo "Detected compiled rules, running sa-compile..."
+ sa-compile > /dev/null 2>&1
+fi
+}
diff --git a/testing/spamassassin/spamassassin.service b/testing/spamassassin/spamassassin.service
new file mode 100644
index 000000000..a74f6e644
--- /dev/null
+++ b/testing/spamassassin/spamassassin.service
@@ -0,0 +1,14 @@
+[Unit]
+Description=Spamassassin daemon
+After=syslog.target network.target
+
+[Service]
+Type=forking
+PIDFile=/var/run/spamd.pid
+ExecStart=/usr/bin/vendor_perl/spamd --pidfile /var/run/spamd.pid -c
+StandardOutput=syslog
+StandardError=syslog
+Restart=always
+
+[Install]
+WantedBy=multi-user.target
diff --git a/testing/spamassassin/spamd b/testing/spamassassin/spamd
new file mode 100644
index 000000000..3fb97566e
--- /dev/null
+++ b/testing/spamassassin/spamd
@@ -0,0 +1,55 @@
+#!/bin/bash
+
+# source application-specific settings
+[ -f /etc/conf.d/spamd ] && . /etc/conf.d/spamd
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PIDFILE=/var/run/spamd.pid
+if [ -f $PIDFILE ]; then
+ PID=$(cat $PIDFILE)
+else
+ PID=$(pidof -o %PPID /usr/bin/vendor_perl/spamd) #backward compat
+fi
+
+case "$1" in
+ start)
+ stat_busy "Starting spamd"
+ [ -z "$PID" ] && /usr/bin/vendor_perl/spamd -d -r "$PIDFILE" ${SPAMD_OPTS}
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon spamd
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping spamd"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ # Some users report that a second attempt at stopping the process
+ # works. So, take a little nap and give it another whirl...
+ sleep 2
+ kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon spamd
+ stat_done
+ fi
+ else
+ rm_daemon spamd
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 3
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
+# vim: ts=2 sw=2 et ft=sh
diff --git a/testing/spamassassin/spamd.conf.d b/testing/spamassassin/spamd.conf.d
new file mode 100644
index 000000000..4295e0073
--- /dev/null
+++ b/testing/spamassassin/spamd.conf.d
@@ -0,0 +1 @@
+SPAMD_OPTS="-c"
diff --git a/testing/transmission/PKGBUILD b/testing/transmission/PKGBUILD
new file mode 100644
index 000000000..ca972d116
--- /dev/null
+++ b/testing/transmission/PKGBUILD
@@ -0,0 +1,78 @@
+# $Id: PKGBUILD 165349 2012-08-16 08:25:26Z tomegun $
+# Maintainer : Ionut Biru <ibiru@archlinux.org>
+
+pkgbase=transmission
+pkgname=('transmission-cli' 'transmission-gtk' 'transmission-qt')
+pkgver=2.61
+pkgrel=2
+arch=('i686' 'x86_64')
+url="http://www.transmissionbt.com/"
+license=('MIT')
+makedepends=('gtk3' 'intltool' 'curl' 'qt' 'libevent')
+source=(http://mirrors.m0k.org/transmission/files/$pkgbase-$pkgver.tar.xz
+ transmissiond transmissiond.conf transmission.systemd
+ transmission.tmpfiles)
+
+build() {
+ cd "$pkgbase-$pkgver"
+
+ ./configure --prefix=/usr
+ make
+ pushd qt
+ qmake qtr.pro
+ make
+}
+package_transmission-cli() {
+ pkgdesc="Fast, easy, and free BitTorrent client (CLI tools, daemon and web client)"
+ depends=('curl' 'libevent')
+ backup=('etc/conf.d/transmissiond')
+ install=transmission-cli.install
+
+ cd "$pkgbase-$pkgver"
+
+ for dir in daemon cli web utils
+ do
+ make -C "$dir" DESTDIR="$pkgdir" install
+ done
+
+ install -D -m755 "$srcdir/transmissiond" "$pkgdir/etc/rc.d/transmissiond"
+ install -D -m644 "$srcdir/transmissiond.conf" "$pkgdir/etc/conf.d/transmissiond"
+ install -D -m644 "$srcdir/transmission.tmpfiles" "$pkgdir/usr/lib/tmpfiles.d/transmission.conf"
+ install -D -m644 "$srcdir/transmission.systemd" "$pkgdir/usr/lib/systemd/system/transmission.service"
+ ln -s transmission.service "$pkgdir/usr/lib/systemd/system/transmissiond.service"
+ install -D -m644 COPYING "$pkgdir/usr/share/licenses/transmission-cli/COPYING"
+}
+
+package_transmission-gtk() {
+ pkgdesc="Fast, easy, and free BitTorrent client (GTK+ GUI)"
+ depends=('curl' 'libevent' 'gtk3' 'desktop-file-utils' 'hicolor-icon-theme')
+ optdepends=('notification-daemon: Desktop notification support'
+ 'transmission-cli: daemon and web support')
+ install=transmission-gtk.install
+
+ cd "$pkgbase-$pkgver"
+
+ make -C gtk DESTDIR="$pkgdir" install
+ make -C po DESTDIR="$pkgdir" install
+ install -D -m644 COPYING "$pkgdir/usr/share/licenses/transmission-gtk/COPYING"
+}
+
+package_transmission-qt() {
+ pkgdesc="Fast, easy, and free BitTorrent client (Qt GUI)"
+ depends=('curl' 'qt' 'libevent')
+ optdepends=('transmission-cli: daemon and web support')
+ install=transmission-qt.install
+
+ cd "$pkgbase-$pkgver"
+
+ make -C qt INSTALL_ROOT="$pkgdir"/usr install
+
+ install -D -m644 COPYING "$pkgdir/usr/share/licenses/transmission-qt/COPYING"
+ install -D -m644 qt/icons/transmission.png "$pkgdir/usr/share/pixmaps/transmission-qt.png"
+ install -D -m644 qt/transmission-qt.desktop "$pkgdir/usr/share/applications/transmission-qt.desktop"
+}
+md5sums=('2ed5b7815ebda65223bac6bdb09dec42'
+ '7d6186ee2a852ae3d44980f05063e194'
+ 'db72b02fee139e8ab416324e6c044d76'
+ 'ecccabbc301d1024c9ef6a7f4aaa530a'
+ '23f2320361ad54373c3a4551ef634fe8')
diff --git a/testing/transmission/transmission-cli.install b/testing/transmission/transmission-cli.install
new file mode 100644
index 000000000..d99dcf8b7
--- /dev/null
+++ b/testing/transmission/transmission-cli.install
@@ -0,0 +1,16 @@
+post_install() {
+ cat << _EOF
+
+ If you want to run the Transmission daemon at boot,
+ add transmissiond to the DAEMONS array in /etc/rc.conf.
+
+_EOF
+}
+
+post_upgrade() {
+ # create user/group that the daemon will run as by default, do not delete this on uninstall, as it will own files
+ getent group transmission >/dev/null || groupadd -g 169 transmission
+ getent passwd transmission >/dev/null || useradd -c 'Transmission BitTorrent Client' -u 169 -g transmission -b '/var/lib' -s /bin/false transmission
+ passwd -l transmission &>/dev/null
+ systemd-tmpfiles --create transmission.conf
+}
diff --git a/testing/transmission/transmission-gtk.install b/testing/transmission/transmission-gtk.install
new file mode 100644
index 000000000..c317fbaca
--- /dev/null
+++ b/testing/transmission/transmission-gtk.install
@@ -0,0 +1,12 @@
+post_install() {
+ update-desktop-database -q
+ gtk-update-icon-cache -q -t -f usr/share/icons/hicolor
+}
+
+post_upgrade() {
+ post_install
+}
+
+post_remove() {
+ post_install
+}
diff --git a/testing/transmission/transmission-qt.install b/testing/transmission/transmission-qt.install
new file mode 100644
index 000000000..e111ef946
--- /dev/null
+++ b/testing/transmission/transmission-qt.install
@@ -0,0 +1,11 @@
+post_install() {
+ update-desktop-database -q
+}
+
+post_upgrade() {
+ post_install
+}
+
+post_remove() {
+ post_install
+}
diff --git a/testing/transmission/transmission.systemd b/testing/transmission/transmission.systemd
new file mode 100644
index 000000000..2ca0dedf7
--- /dev/null
+++ b/testing/transmission/transmission.systemd
@@ -0,0 +1,11 @@
+[Unit]
+Description=Transmission Bit Torrent Daemon
+
+[Service]
+User=transmission
+Type=forking
+PIDFile=/run/transmission/transmission.pid
+ExecStart=/usr/bin/transmission-daemon --pid-file /run/transmission/transmission.pid
+
+[Install]
+WantedBy=multi-user.target
diff --git a/testing/transmission/transmission.tmpfiles b/testing/transmission/transmission.tmpfiles
new file mode 100644
index 000000000..b603066c1
--- /dev/null
+++ b/testing/transmission/transmission.tmpfiles
@@ -0,0 +1 @@
+d /run/transmission - transmission transmission -
diff --git a/testing/transmission/transmissiond b/testing/transmission/transmissiond
new file mode 100644
index 000000000..ea3d770f9
--- /dev/null
+++ b/testing/transmission/transmissiond
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+. /etc/conf.d/transmissiond
+
+PID=`pidof -o %PPID /usr/bin/transmission-daemon`
+case "$1" in
+ start)
+ stat_busy "Starting Transmission Daemon"
+ [ -z "$PID" ] && su -l -s /bin/sh -c "/usr/bin/transmission-daemon $TRANS_ARGS" "${TRANS_USER:-transmission}"
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon transmissiond
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping Transmission Daemon"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon transmissiond
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ while [ ! -z "$PID" -a -d "/proc/$PID" ]; do sleep 1; done
+ $0 start
+ ;;
+ reload)
+ stat_busy "Reloading config"
+ [ ! -z "$PID" ] && kill -HUP $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ stat_done
+ fi
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart|reload}"
+esac
+exit 0
diff --git a/testing/transmission/transmissiond.conf b/testing/transmission/transmissiond.conf
new file mode 100644
index 000000000..45a9fd51d
--- /dev/null
+++ b/testing/transmission/transmissiond.conf
@@ -0,0 +1,4 @@
+# example configuration file
+
+# TRANS_USER="transmission"
+# TRANS_ARGS=""