summaryrefslogtreecommitdiffstats
path: root/abs/extra-testing
diff options
context:
space:
mode:
Diffstat (limited to 'abs/extra-testing')
-rw-r--r--abs/extra-testing/fam/PKGBUILD49
-rwxr-xr-xabs/extra-testing/fam/fam44
-rw-r--r--abs/extra-testing/fam/fam-2.7.0-dnotify.patch975
-rw-r--r--abs/extra-testing/fam/fam-2.7.0-gcc43.patch46
-rw-r--r--abs/extra-testing/fam/fam-2.7.0-largefiles.patch8
-rw-r--r--abs/extra-testing/fam/fam-2.7.0-noc++.patch83
-rw-r--r--abs/extra-testing/fam/include_fam_h.patch11
-rw-r--r--abs/extra-testing/gnome-keyring/PKGBUILD34
-rw-r--r--abs/extra-testing/gnome-keyring/gnome-keyring.install19
-rw-r--r--abs/extra-testing/gnome-keyring/gnome-keyring.service3
-rw-r--r--abs/extra-testing/gnome-mime-data/PKGBUILD25
-rw-r--r--abs/extra-testing/gtk-doc/PKGBUILD23
-rw-r--r--abs/extra-testing/gtk-doc/gtk-doc.install14
-rw-r--r--abs/extra-testing/hunspell/ChangeLog6
-rw-r--r--abs/extra-testing/hunspell/PKGBUILD23
-rw-r--r--abs/extra-testing/jade/PKGBUILD31
-rw-r--r--abs/extra-testing/libbonobo/PKGBUILD30
-rw-r--r--abs/extra-testing/libbonobo/bonobo-activation-config.xml14
-rw-r--r--abs/extra-testing/libbonobo/libbonobo.install23
-rw-r--r--abs/extra-testing/portmap/PKGBUILD24
-rw-r--r--abs/extra-testing/portmap/gcc3-errno_h.patch18
-rwxr-xr-xabs/extra-testing/portmap/portmap38
-rw-r--r--abs/extra-testing/portmap/portmap_5beta.patch.bz2bin0 -> 9958 bytes
-rw-r--r--abs/extra-testing/rarian/PKGBUILD29
-rw-r--r--abs/extra-testing/rarian/user-segfault.patch14
-rw-r--r--abs/extra-testing/shared-mime-info/PKGBUILD22
-rw-r--r--abs/extra-testing/shared-mime-info/shared-mime-info.install12
-rw-r--r--abs/extra-testing/startup-notification/PKGBUILD19
28 files changed, 1637 insertions, 0 deletions
diff --git a/abs/extra-testing/fam/PKGBUILD b/abs/extra-testing/fam/PKGBUILD
new file mode 100644
index 0000000..e7f5e41
--- /dev/null
+++ b/abs/extra-testing/fam/PKGBUILD
@@ -0,0 +1,49 @@
+# $Id: PKGBUILD 15741 2008-10-18 01:59:29Z allan $
+# Maintainer: Allan McRae <allan@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+pkgname=fam
+pkgver=2.7.0
+pkgrel=11
+pkgdesc="File Alteration Monitor - used by KDE, GNOME and others"
+arch=('i686' 'x86_64')
+license=('LGPL' 'GPL')
+depends=('portmap')
+url="http://oss.sgi.com/projects/fam/"
+backup=(etc/fam/fam.conf)
+options=('!makeflags') # Don't !libtool
+source=(ftp://oss.sgi.com/projects/fam/download/stable/${pkgname}-${pkgver}.tar.gz
+ fam-2.7.0-dnotify.patch
+ fam-2.7.0-largefiles.patch
+ fam-2.7.0-noc++.patch
+ fam-2.7.0-gcc43.patch
+ include_fam_h.patch
+ fam)
+md5sums=('1bf3ae6c0c58d3201afc97c6a4834e39'
+ '073d1763318344635ea316293390205c'
+ '47b41e0b0498793af004696a096d7da1'
+ '0274cd113d3dcb015653b5606c7714ac'
+ '13c14778038aa9601a27498448e855e0'
+ '2638b8ffacb9f03b6e438e08ea7b290a'
+ '45b648907ba1c7edec17fb544f1f4a13')
+
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ patch -Np1 -i ${srcdir}/fam-2.7.0-dnotify.patch || return 1
+ patch -Np1 -i ${srcdir}/fam-2.7.0-largefiles.patch || return 1
+ patch -Np0 -i ${srcdir}/include_fam_h.patch || return 1
+ patch -Np1 -i ${srcdir}/fam-2.7.0-noc++.patch || return 1
+ patch -Np1 -i ${srcdir}/fam-2.7.0-gcc43.patch || return 1
+
+ chmod 755 configure || return 1
+
+ autoheader || return 1
+ aclocal || return 1
+ automake -a -c || return 1
+ autoconf || return 1
+ libtoolize --copy --force || return 1
+
+ ./configure --prefix=/usr --sysconfdir=/etc/fam
+ make || return 1
+ make DESTDIR=${pkgdir} install
+ install -D -m755 ../fam ${pkgdir}/etc/rc.d/fam
+}
diff --git a/abs/extra-testing/fam/fam b/abs/extra-testing/fam/fam
new file mode 100755
index 0000000..3acceff
--- /dev/null
+++ b/abs/extra-testing/fam/fam
@@ -0,0 +1,44 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /usr/sbin/famd`
+case "$1" in
+ start)
+ #Check for running portmap, start when not running
+ ck_daemon portmap && /etc/rc.d/portmap start
+ stat_busy "Starting File Alteration Monitor"
+ if [ ! -f /var/run/daemons/portmap ]; then
+ stat_fail
+ echo "ERROR: PORTMAP is not running"
+ exit 1
+ fi
+ if [ -z "$PID" ]; then
+ /usr/sbin/famd -T 0 -c /etc/fam/fam.conf
+ fi
+ if [ ! -z "$PID" -o $? -gt 0 ]; then
+ stat_fail
+ else
+ add_daemon fam
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping File Alteration Monitor"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm_daemon fam
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
diff --git a/abs/extra-testing/fam/fam-2.7.0-dnotify.patch b/abs/extra-testing/fam/fam-2.7.0-dnotify.patch
new file mode 100644
index 0000000..1d8910e
--- /dev/null
+++ b/abs/extra-testing/fam/fam-2.7.0-dnotify.patch
@@ -0,0 +1,975 @@
+--- fam-2.7.0/src/DNotify.c++ 2004-01-30 00:00:00.000000000 +0100
++++ fam-2.7.0.dnotify/src/DNotify.c++ 2004-01-30 00:00:00.000000000 +0100
+@@ -0,0 +1,582 @@
++// Copyright (C) 2001 Red Hat, Inc. All Rights Reserved.
++// Copyright (C) 1999 Silicon Graphics, Inc. All Rights Reserved.
++//
++// This program is free software; you can redistribute it and/or modify it
++// under the terms of version 2 of the GNU General Public License as
++// published by the Free Software Foundation.
++//
++// This program is distributed in the hope that it would be useful, but
++// WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Further, any
++// license provided herein, whether implied or otherwise, is limited to
++// this program in accordance with the express provisions of the GNU
++// General Public License. Patent licenses, if any, provided herein do not
++// apply to combinations of this program with other product or programs, or
++// any other product whatsoever. This program is distributed without any
++// warranty that the program is delivered free of the rightful claim of any
++// third person by way of infringement or the like. See the GNU General
++// Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this program; if not, write the Free Software Foundation, Inc., 59
++// Temple Place - Suite 330, Boston MA 02111-1307, USA.
++
++#define _GNU_SOURCE
++#include <fcntl.h>
++
++#include <string.h>
++#include <signal.h>
++#include <stdio.h>
++#include <unistd.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <libgen.h>
++
++#include "DNotify.h"
++
++#include "Interest.h"
++#include "Log.h"
++#include "Scheduler.h"
++#include <memory>
++
++
++int DNotify::pipe_write_fd = -2;
++int DNotify::pipe_read_fd = -2;
++volatile sig_atomic_t DNotify::queue_overflowed = 0;
++volatile sig_atomic_t DNotify::queue_changed = 0;
++int DNotify::change_queue[QUEUESIZE];
++volatile int DNotify::queue_head = 0; // Only modified by read handler
++volatile int DNotify::queue_tail = 0; // Only modified by signal handler
++DNotify::EventHandler DNotify::ehandler;
++
++DNotify::DirWatch *DNotify::dir_hash[DIR_HASHSIZE];
++DNotify::FileWatch *DNotify::file_hash[FILE_HASHSIZE];
++
++struct DNotify::FileWatch
++{
++ DirWatch *dir_watch;
++ dev_t file_dev;
++ ino_t file_ino;
++ FileWatch *next; // The DirWatch.watches list
++ FileWatch *hash_link;
++};
++
++struct DNotify::DirWatch
++{
++ int fd;
++ dev_t dir_dev;
++ ino_t dir_ino;
++
++ DirWatch *hash_link;
++ FileWatch *watches;
++};
++
++struct DNotify::ChangeEventData
++{
++ dev_t file_dev;
++ ino_t file_ino;
++};
++
++DNotify::DNotify(EventHandler h)
++{
++ assert(ehandler == NULL);
++ ehandler = h;
++}
++
++DNotify::~DNotify()
++{
++ if (pipe_read_fd >= 0)
++ {
++ // Tell the scheduler.
++
++ (void) Scheduler::remove_read_handler(pipe_read_fd);
++
++ // Close the pipe.
++
++ if (close(pipe_read_fd) < 0)
++ Log::perror("can't pipe read end");
++ else
++ Log::debug("closed pipe read end");
++
++ if (close(pipe_write_fd) < 0)
++ Log::perror("can't pipe write end");
++ else
++ Log::debug("closed pipe write end");
++ pipe_read_fd = -1;
++ }
++ ehandler = NULL;
++}
++
++void
++DNotify::overflow_signal_handler(int sig, siginfo_t *si, void *data)
++{
++ char c = 'x';
++
++ {
++ char *str = "*************** overflow sigqueue ***********************\n";
++ write (STDERR_FILENO, str, strlen(str));
++ }
++
++ if (!queue_overflowed)
++ {
++ queue_overflowed = 1;
++ // Trigger the read handler
++ write(pipe_write_fd, &c, 1);
++ }
++}
++
++void
++DNotify::signal_handler(int sig, siginfo_t *si, void *data)
++{
++ int left;
++ char c = 'x';
++
++ if (queue_head <= queue_tail)
++ left = (QUEUESIZE + queue_head) - queue_tail;
++ else
++ left = queue_head - queue_tail;
++
++ // Must leave at least one item unused to see difference
++ // Betweeen empty and full
++ if (left <= 1)
++ {
++ queue_overflowed = 1;
++ {
++ char *str = "*************** overflow famqueue ****************\n";
++ write (STDERR_FILENO, str, strlen(str));
++ }
++ }
++ else
++ {
++ change_queue[queue_tail] = si->si_fd;
++ queue_tail = (queue_tail + 1) % QUEUESIZE;
++ }
++
++ if (!queue_changed)
++ {
++ queue_changed = 1;
++ // Trigger the read handler
++ write(pipe_write_fd, &c, 1);
++ }
++}
++
++bool
++DNotify::is_active()
++{
++ if (pipe_read_fd == -2)
++ {
++ int filedes[2];
++ int res;
++
++ res = pipe (filedes);
++ if (res >= 0)
++ { Log::debug("opened pipe");
++ pipe_read_fd = filedes[0];
++ pipe_write_fd = filedes[1];
++
++ // Setup signal handler:
++ struct sigaction act;
++
++ act.sa_sigaction = signal_handler;
++ sigemptyset(&act.sa_mask);
++ act.sa_flags = SA_SIGINFO;
++ sigaction(SIGRTMIN, &act, NULL);
++
++ // When the RT queue overflows we get a SIGIO
++ act.sa_sigaction = overflow_signal_handler;
++ sigemptyset(&act.sa_mask);
++ sigaction(SIGIO, &act, NULL);
++
++ (void) Scheduler::install_read_handler(pipe_read_fd, read_handler, NULL);
++ }
++ }
++ return pipe_read_fd >= 0;
++}
++
++DNotify::DirWatch *
++DNotify::lookup_dirwatch (int fd)
++{
++ DirWatch **p;
++ DirWatch *w;
++
++ p = dir_hashchain (fd);
++
++ while (*p)
++ {
++ w = *p;
++
++ if (w->fd == fd)
++ return w;
++
++ p = &w->hash_link;
++ }
++
++ return *p;
++}
++
++// This colud be made faster by using another hash table.
++// But it's not that bad, since it is only used by express/revoke
++DNotify::DirWatch *
++DNotify::lookup_dirwatch (dev_t dir_dev, ino_t dir_ino)
++{
++ DirWatch *p;
++ int i;
++
++ for (i=0;i<DIR_HASHSIZE;i++)
++ {
++ p = dir_hash[i];
++
++ while (p)
++ {
++ if (p->dir_dev == dir_dev && p->dir_ino == dir_ino)
++ return p;
++
++ p = p->hash_link;
++ }
++ }
++
++ return NULL;
++}
++
++DNotify::FileWatch *
++DNotify::lookup_filewatch (dev_t dev, ino_t ino)
++{
++ FileWatch **p;
++ FileWatch *w;
++
++ p = file_hashchain (dev, ino);
++
++ while (*p)
++ {
++ w = *p;
++
++ if (w->file_dev == dev && w->file_ino == ino)
++ return w;
++
++ p = &w->hash_link;
++ }
++
++ return *p;
++}
++
++// Make sure w is not already in the hash table before calling
++// this function.
++void
++DNotify::hash_dirwatch(DirWatch *w)
++{
++ DirWatch **p;
++ p = dir_hashchain (w->fd);
++ w->hash_link = *p;
++ *p = w;
++}
++
++// Make sure w is not already in the hash table before calling
++// this function.
++void
++DNotify::hash_filewatch(FileWatch *w)
++{
++ FileWatch **p;
++ p = file_hashchain (w->file_dev, w->file_ino);
++ w->hash_link = *p;
++ *p = w;
++}
++
++void
++DNotify::unhash_dirwatch(DirWatch *w)
++{
++ DirWatch **p;
++
++ p = dir_hashchain (w->fd);
++
++ while (*p)
++ {
++ if (*p == w)
++ {
++ *p = w->hash_link;
++ break;
++ }
++ p = &(*p)->hash_link;
++ }
++ w->hash_link = NULL;
++}
++
++void
++DNotify::unhash_filewatch(FileWatch *w)
++{
++ FileWatch **p;
++
++ p = file_hashchain (w->file_dev, w->file_ino);
++
++ while (*p)
++ {
++ if (*p == w)
++ {
++ *p = w->hash_link;
++ break;
++ }
++ p = &(*p)->hash_link;
++ }
++ w->hash_link = NULL;
++}
++
++DNotify::Status
++DNotify::watch_dir(const char *notify_dir, dev_t file_dev, ino_t file_ino)
++{
++ struct stat stat;
++ dev_t dir_dev;
++ ino_t dir_ino;
++ DirWatch *dwatch;
++ FileWatch *fw;
++
++ if (lstat (notify_dir, &stat) == -1)
++ return BAD;
++
++ dwatch = lookup_dirwatch(stat.st_dev, stat.st_ino);
++ if (!dwatch)
++ {
++ Log::debug ("New DirWatch for %s (%x %x)\n",
++ notify_dir, (int)stat.st_dev, (int)stat.st_ino);
++ dwatch = new DirWatch;
++ dwatch->watches = NULL;
++ dwatch->hash_link = NULL;
++ dwatch->dir_dev = stat.st_dev;
++ dwatch->dir_ino = stat.st_ino;
++
++ dwatch->fd = open(notify_dir, O_RDONLY);
++ fcntl (dwatch->fd, F_SETSIG, SIGRTMIN);
++ if (fcntl (dwatch->fd, F_NOTIFY,
++ (DN_MODIFY|DN_CREATE|DN_DELETE|DN_RENAME|DN_ATTRIB)
++ | DN_MULTISHOT) == -1) {
++ return BAD;
++ }
++ hash_dirwatch (dwatch);
++ }
++
++ fw = lookup_filewatch (file_dev, file_ino);
++ if (fw && fw->dir_watch == dwatch)
++ return OK;
++
++ // No old FileWatch, need to add one:
++ Log::debug("New FileWatch for %x %x\n", (int)file_dev, (int)file_ino);
++ fw = new FileWatch;
++ fw->next = dwatch->watches;
++ dwatch->watches = fw;
++ fw->file_dev = file_dev;
++ fw->file_ino = file_ino;
++ fw->dir_watch = dwatch;
++ hash_filewatch(fw);
++ return OK;
++}
++
++char *
++dirname_dup (const char *name)
++{
++ char *copy = strdup(name);
++ char *res = dirname(copy);
++ res = strdup(res);
++ free (copy);
++ return res;
++}
++
++DNotify::Status
++DNotify::express(const char *name, struct stat *status)
++{
++ struct stat stat;
++ char *notify_dir;
++ int res;
++ Status s;
++ dev_t dev;
++ ino_t ino;
++
++ Log::debug("express() name: %s\n", name);
++
++ if (!is_active())
++ return BAD;
++
++ if (::lstat (name, &stat) == -1)
++ return BAD;
++
++ dev = stat.st_dev;
++ ino = stat.st_ino;
++
++ if ((stat.st_mode & S_IFMT) != S_IFDIR)
++ notify_dir = dirname_dup (name);
++ else
++ notify_dir = (char *)name;
++
++ s = watch_dir (notify_dir, dev, ino);
++ if (notify_dir != name)
++ free (notify_dir);
++ if (s)
++ return s;
++
++ // Check for a race condition; if someone removed or changed the
++ // file at the same time that we are expressing interest in it,
++ // revoke the interest so we don't get notifications about changes
++ // to a recycled inode that we don't otherwise care about.
++ //
++ struct stat st;
++ if (status == NULL) {
++ status = &st;
++ }
++ if (::lstat(name, status) == -1) {
++ Log::perror("stat on \"%s\" failed", name);
++ revoke(name, stat.st_dev, stat.st_ino);
++ return BAD;
++ }
++ if (status->st_dev != stat.st_dev
++ || status->st_ino != stat.st_ino) {
++ Log::error("File \"%s\" changed between express and stat",
++ name);
++ revoke(name, stat.st_dev, stat.st_ino);
++ return BAD;
++ }
++
++ Log::debug("told dnotify to monitor \"%s\" = dev %d/%d, ino %d", name,
++ major(status->st_dev), minor(status->st_dev),
++ status->st_ino);
++ return OK;
++}
++
++DNotify::Status
++DNotify::revoke(const char *name, dev_t dev, ino_t ino)
++{
++ FileWatch *fwatch;
++ DirWatch *dwatch;
++
++ Log::debug("revoke() name: %s, dev: %x, ino: %x\n", name, dev, ino);
++
++ if (!is_active())
++ return BAD;
++
++ // Lookup FileWatch by dev:ino, and its DirWatch.
++ fwatch = lookup_filewatch (dev, ino);
++ if (fwatch == NULL)
++ return BAD;
++
++ dwatch = fwatch->dir_watch;
++
++ // delete FileWatch, if last FileWatch: close fd, delete DirWatch
++ Log::debug ("Destroying FileWatch for (%x %x)\n",
++ (int)fwatch->file_dev, (int)fwatch->file_ino);
++ FileWatch **p;
++ for (p=&dwatch->watches; *p; p=&(*p)->next)
++ {
++ if (*p == fwatch)
++ {
++ *p = (*p)->next;
++ break;
++ }
++ }
++ unhash_filewatch(fwatch);
++ delete fwatch;
++ if (dwatch->watches == NULL)
++ {
++ Log::debug ("Destroying DirWatch for (%x %x)\n",
++ (int)dwatch->dir_dev, (int)dwatch->dir_ino);
++ close(dwatch->fd);
++ unhash_dirwatch(dwatch);
++ delete dwatch;
++ }
++
++ return OK;
++}
++
++
++void
++DNotify::all_watches_changed(void)
++{
++ int i;
++ FileWatch *fw;
++
++ for (i=0; i<FILE_HASHSIZE; i++)
++ {
++ fw = file_hash[i];
++ while (fw)
++ {
++ (*ehandler)(fw->file_dev, fw->file_ino, CHANGE);
++
++ fw = fw->hash_link;
++ }
++ }
++}
++
++
++void
++DNotify::read_handler(int fd, void *)
++{
++ static char readbuf[5000];
++ DirWatch *dw;
++ FileWatch *fw;
++ int snap_queue_tail;
++ int last_fd;
++
++ int rc = read(fd, readbuf, sizeof readbuf);
++ queue_changed = 0;
++ if (rc < 0)
++ Log::perror("pipe read");
++ else if (queue_overflowed)
++ {
++ // There is a *slight* race condition here. Between reading
++ // the queue_overflow flag and resetting it. But it doesn't
++ // matter, since I'm gonna handle the overflow after reseting
++ // anyway.
++ queue_overflowed = false;
++
++ // We're soon gonna check all watches anyway, so
++ // get rid of the current queue
++ queue_head = queue_tail;
++
++ all_watches_changed ();
++ }
++ else
++ {
++ // Don't read events that happen later than
++ // the initial read. (Otherwise skipping fd's
++ // might miss some changes).
++ snap_queue_tail = queue_tail;
++ last_fd = -1;
++ while (queue_head != snap_queue_tail)
++ {
++ fd = change_queue[queue_head];
++ queue_head = (queue_head + 1) % QUEUESIZE;
++
++ // Skip multiple changes to the same fd
++ if (fd != last_fd)
++ {
++ dw = lookup_dirwatch (fd);
++ if (dw)
++ {
++ int n_watches, i;
++ ChangeEventData *data;
++
++ Log::debug("dnotify said dev %d/%d, ino %ld changed",
++ major(dw->dir_dev), minor(dw->dir_dev), dw->dir_ino);
++
++ n_watches = 0;
++ for (fw=dw->watches; fw; fw=fw->next)
++ n_watches++;
++
++ data = new ChangeEventData[n_watches];
++
++ i = 0;
++ for (fw=dw->watches; fw; fw=fw->next)
++ {
++ data[i].file_dev = fw->file_dev;
++ data[i].file_ino = fw->file_ino;
++ i++;
++ }
++
++ for (i = 0; i < n_watches; i++)
++ {
++ (*ehandler)(data[i].file_dev, data[i].file_ino, CHANGE);
++ }
++
++ delete[] data;
++ }
++ }
++ last_fd = fd;
++ }
++ }
++}
++
+--- fam-2.7.0/src/DNotify.h 2004-01-30 00:00:00.000000000 +0100
++++ fam-2.7.0.dnotify/src/DNotify.h 2004-01-30 00:00:00.000000000 +0100
+@@ -0,0 +1,98 @@
++// Copyright (C) 2001 Red Hat, Inc. All Rights Reserved.
++// Copyright (C) 1999 Silicon Graphics, Inc. All Rights Reserved.
++//
++// This program is free software; you can redistribute it and/or modify it
++// under the terms of version 2 of the GNU General Public License as
++// published by the Free Software Foundation.
++//
++// This program is distributed in the hope that it would be useful, but
++// WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Further, any
++// license provided herein, whether implied or otherwise, is limited to
++// this program in accordance with the express provisions of the GNU
++// General Public License. Patent licenses, if any, provided herein do not
++// apply to combinations of this program with other product or programs, or
++// any other product whatsoever. This program is distributed without any
++// warranty that the program is delivered free of the rightful claim of any
++// third person by way of infringement or the like. See the GNU General
++// Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this program; if not, write the Free Software Foundation, Inc., 59
++// Temple Place - Suite 330, Boston MA 02111-1307, USA.
++
++#ifndef DNotify_included
++#define DNotify_included
++
++#include "config.h"
++#include "Monitor.h"
++#include <signal.h>
++
++// DNotify is an object encapsulating the dnotify linux fcntl.
++// It "emulates" the IMon interface.
++// There can only be one instantiation of the DNotify object.
++//
++// The user of this object uses express() and revoke() to
++// express/revoke interest in a file. There is also
++// a callback, the EventHandler. When an dnotify event comes in,
++// the EventHandler is called.
++//
++// The user of the DNotify object is the Interest class.
++
++class DNotify : public Monitor {
++public:
++ DNotify(EventHandler h);
++ ~DNotify();
++
++ static bool is_active();
++
++ virtual Status express(const char *name, struct stat *stat_return);
++ virtual Status revoke(const char *name, dev_t dev, ino_t ino);
++
++private:
++ struct FileWatch;
++ struct DirWatch;
++ struct ChangeEventData;
++
++ // Class Variables
++ enum { QUEUESIZE = 1024 };
++ static int pipe_write_fd;
++ static int pipe_read_fd;
++ static int change_queue[QUEUESIZE];
++ static volatile sig_atomic_t queue_overflowed;
++ static volatile sig_atomic_t queue_changed;
++ static volatile int queue_head; // Only modified by read handler
++ static volatile int queue_tail; // Only modified by signal handler
++ static EventHandler ehandler;
++ static void overflow_signal_handler(int sig, siginfo_t *si, void *data);
++ static void signal_handler(int sig, siginfo_t *si, void *data);
++ static void read_handler(int fd, void *closure);
++
++ enum { DIR_HASHSIZE = 367 };
++ static DirWatch *dir_hash[DIR_HASHSIZE];
++ enum { FILE_HASHSIZE = 823 };
++ static FileWatch *file_hash[FILE_HASHSIZE];
++
++ static DirWatch **dir_hashchain(int fd)
++ { return &dir_hash[(unsigned) (fd) % DIR_HASHSIZE]; }
++ static FileWatch **file_hashchain(dev_t d, ino_t i)
++ { return &file_hash[(unsigned) (d+i) % FILE_HASHSIZE]; }
++
++ static DirWatch *lookup_dirwatch (int fd);
++ static DirWatch *lookup_dirwatch (dev_t dir_dev, ino_t dir_ino);
++ static FileWatch *lookup_filewatch (dev_t file_dev, ino_t file_ino);
++ static void hash_dirwatch(DirWatch *w);
++ static void hash_filewatch(FileWatch *w);
++ static void unhash_dirwatch(DirWatch *w);
++ static void unhash_filewatch(FileWatch *w);
++ static Status watch_dir(const char *notify_dir, dev_t file_dev, ino_t file_ino);
++
++ static void all_watches_changed(void);
++
++ DNotify(const DNotify&); // Do not copy
++ DNotify & operator = (const DNotify&); // or assign.
++};
++
++#endif /* !IMon_included */
++
++
+--- fam-2.7.0/src/Interest.c++ 2004-01-30 00:00:00.000000000 +0100
++++ fam-2.7.0.dnotify/src/Interest.c++ 2004-01-30 00:00:00.000000000 +0100
+@@ -42,12 +42,21 @@
+ #include "Event.h"
+ #include "FileSystem.h"
+ #include "IMon.h"
++#include "DNotify.h"
+ #include "Log.h"
+ #include "Pollster.h"
+ #include "timeval.h"
+
+ Interest *Interest::hashtable[];
+-IMon Interest::imon(imon_handler);
++
++#ifdef USE_DNOTIFY
++static DNotify dnotify(Interest::monitor_handler);
++Monitor * Interest::monitor = &dnotify;
++#else
++static IMon imon(Interest::monitor_handler);
++Monitor * Interest::monitor = &imon;
++#endif
++
+ bool Interest::xtab_verification = true;
+
+ Interest::Interest(const char *name, FileSystem *fs, in_addr host, ExportVerification ev)
+@@ -60,10 +69,10 @@
+ mypath_exported_to_host(ev == NO_VERIFY_EXPORTED)
+ {
+ memset(&old_stat, 0, sizeof(old_stat));
+- IMon::Status s = IMon::BAD;
+
+- s = imon.express(name, &old_stat);
+- if (s != IMon::OK)
++ Monitor::Status s = Monitor::BAD;
++ s = monitor->express(name, &old_stat);
++ if (s != Monitor::OK)
+ { int rc = lstat(name, &old_stat);
+ if (rc < 0)
+ { Log::info("can't lstat %s", name);
+@@ -100,7 +109,7 @@
+ }
+ #endif
+
+- if (exported_to_host()) fs->ll_monitor(this, s == IMon::OK);
++ if (exported_to_host()) fs->ll_monitor(this, s == Monitor::OK);
+ }
+
+ Interest::~Interest()
+@@ -128,7 +137,7 @@
+ pp = &p->hashlink; // move to next element
+ }
+ if (!found_same)
+- (void) imon.revoke(name(), dev, ino);
++ (void) monitor->revoke(name(), dev, ino);
+ }
+ }
+
+@@ -147,7 +156,7 @@
+
+ // Express interest.
+ IMon::Status s = IMon::BAD;
+- s = imon.express(name(), NULL);
++ s = monitor->express(name(), NULL);
+ if (s != IMon::OK) {
+ return true;
+ }
+@@ -248,23 +257,23 @@
+ }
+
+ void
+-Interest::imon_handler(dev_t device, ino_t inumber, int event)
++Interest::monitor_handler(dev_t device, ino_t inumber, int event)
+ {
+ assert(device || inumber);
+
+ for (Interest *p = *hashchain(device, inumber), *next = p; p; p = next)
+ { next = p->hashlink;
+ if (p->ino == inumber && p->dev == device)
+- { if (event == IMon::EXEC)
++ { if (event == Monitor::EXEC)
+ { p->cur_exec_state = EXECUTING;
+ (void) p->report_exec_state();
+ }
+- else if (event == IMon::EXIT)
++ else if (event == Monitor::EXIT)
+ { p->cur_exec_state = NOT_EXECUTING;
+ (void) p->report_exec_state();
+ }
+ else
+- { assert(event == IMon::CHANGE);
++ { assert(event == Monitor::CHANGE);
+ p->scan();
+ }
+ }
+--- fam-2.7.0/config.h.in 2003-01-20 01:40:15.000000000 +0100
++++ fam-2.7.0.dnotify/config.h.in 2004-01-30 13:50:33.000000000 +0100
+@@ -180,3 +180,6 @@
+
+ /* Define to `int' if <sys/types.h> doesn't define. */
+ #undef uid_t
++
++/* Define to 1 if you have F_NOTIFY fcntl */
++#undef USE_DNOTIFY
+--- fam-2.7.0/configure.ac 2003-11-26 20:47:59.000000000 +0100
++++ fam-2.7.0.dnotify/configure.ac 2004-01-30 13:50:33.000000000 +0100
+@@ -34,7 +34,26 @@
+ AC_HEADER_DIRENT
+ AC_CHECK_HEADERS([fcntl.h limits.h linux/imon.h netinet/in.h rpc/rpc.h rpcsvc/mount.h stddef.h stdlib.h string.h syslog.h sys/imon.h sys/param.h sys/select.h sys/statvfs.h sys/syssgi.h sys/time.h sys/types.h sys/un.h unistd.h])
+
+-if test "$have_sys_imon_h"; then
++# Test for the linux dnotify fcntl
++AC_MSG_CHECKING([for dnotify fcntl support])
++AC_TRY_COMPILE([
++#define _GNU_SOURCE
++#include <fcntl.h>
++#include <unistd.h>
++],
++[ int fd = 1;
++ fcntl (fd, F_NOTIFY, (DN_MODIFY|DN_CREATE|DN_DELETE|DN_RENAME|DN_ATTRIB)
++ |DN_MULTISHOT);
++], have_dnotify=yes, have_dnotify=no)
++
++use_dnotify=false
++AC_MSG_RESULT($have_dnotify)
++
++if test "$have_dnotify"; then
++ MONITOR_FUNCS=IMonNone
++ AC_DEFINE([USE_DNOTIFY], [], [Use dnotify])
++ use_dnotify=true
++elif test "$have_sys_imon_h"; then
+ MONITOR_FUNCS=IMonIRIX
+ elif test "$have_linux_imon_h"; then
+ MONITOR_FUNCS=IMonLinux
+@@ -42,6 +62,7 @@
+ MONITOR_FUNCS=IMonNone
+ fi
+ AC_SUBST(MONITOR_FUNCS)
++AM_CONDITIONAL(USE_DNOTIFY, $use_dnotify)
+
+ # Checks for typedefs, structures, and compiler characteristics.
+ AC_HEADER_STDBOOL
+--- fam-2.7.0/src/IMon.h 2004-01-30 00:00:00.000000000 +0200
++++ fam-2.7.0.dnotify/src/IMon.h 2004-01-30 00:00:00.000000000 +0200
+@@ -24,10 +24,7 @@
+ #define IMon_included
+
+ #include "config.h"
+-#include <sys/stat.h>
+-#include <sys/types.h>
+-
+-#include "Boolean.h"
++#include "Monitor.h"
+
+ struct stat;
+
+@@ -41,25 +38,18 @@
+ //
+ // The user of the IMon object is the Interest class.
+
+-class IMon {
++class IMon : public Monitor {
+
+ public:
+-
+- enum Status { OK = 0, BAD = -1 };
+- enum Event { EXEC, EXIT, CHANGE };
+-
+- typedef void (*EventHandler)(dev_t, ino_t, int event);
+-
+ IMon(EventHandler h);
+ ~IMon();
+
+ static bool is_active();
+
+- Status express(const char *name, struct stat *stat_return);
+- Status revoke(const char *name, dev_t dev, ino_t ino);
++ virtual Status express(const char *name, struct stat *stat_return);
++ virtual Status revoke(const char *name, dev_t dev, ino_t ino);
+
+ private:
+-
+ // Class Variables
+
+ static int imonfd;
+--- fam-2.7.0/src/Interest.h 2004-01-30 00:00:00.000000000 +0200
++++ fam-2.7.0.dnotify/src/Interest.h 2004-01-30 00:00:00.000000000 +0200
+@@ -32,7 +32,7 @@
+
+ class Event;
+ class FileSystem;
+-class IMon;
++class Monitor;
+ struct stat;
+
+ // Interest -- abstract base class for filesystem entities of interest.
+@@ -74,7 +74,7 @@
+
+ // Public Class Method
+
+- static void imon_handler(dev_t, ino_t, int event);
++ static void monitor_handler(dev_t, ino_t, int event);
+
+ static void enable_xtab_verification(bool enable);
+
+@@ -121,7 +121,7 @@
+
+ // Class Variables
+
+- static IMon imon;
++ static Monitor *monitor;
+ static Interest *hashtable[HASHSIZE];
+ static bool xtab_verification;
+
+--- fam-2.7.0/src/Makefile.am 2003-01-19 13:00:17.000000000 +0100
++++ fam-2.7.0.dnotify/src/Makefile.am 2004-01-30 13:50:38.000000000 +0100
+@@ -71,7 +71,11 @@
+ main.c++ \
+ timeval.c++ \
+ timeval.h \
+- @MONITOR_FUNCS@.c++
++ Monitor.h \
++ DNotify.h \
++ DNotify.c++ \
++ @MONITOR_FUNCS@.c++
+
+-EXTRA_famd_SOURCES = IMonIrix.c++ IMonLinux.c++ IMonNone.c++
++EXTRA_famd_SOURCES = IMonIrix.c++ IMonLinux.c++ IMonNone.c++ DNotify.c++ \
++ DNotify.h Monitor.h
+
+--- fam-2.7.0/src/Monitor.h 2004-01-30 00:00:00.000000000 +0200
++++ fam-2.7.0.dnotify/src/Monitor.h 2004-01-30 00:00:00.000000000 +0200
+@@ -0,0 +1,57 @@
++// Copyright (C) 2001 Red Hat, Inc. All Rights Reserved.
++// Copyright (C) 1999 Silicon Graphics, Inc. All Rights Reserved.
++//
++// This program is free software; you can redistribute it and/or modify it
++// under the terms of version 2 of the GNU General Public License as
++// published by the Free Software Foundation.
++//
++// This program is distributed in the hope that it would be useful, but
++// WITHOUT ANY WARRANTY; without even the implied warranty of
++// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Further, any
++// license provided herein, whether implied or otherwise, is limited to
++// this program in accordance with the express provisions of the GNU
++// General Public License. Patent licenses, if any, provided herein do not
++// apply to combinations of this program with other product or programs, or
++// any other product whatsoever. This program is distributed without any
++// warranty that the program is delivered free of the rightful claim of any
++// third person by way of infringement or the like. See the GNU General
++// Public License for more details.
++//
++// You should have received a copy of the GNU General Public License along
++// with this program; if not, write the Free Software Foundation, Inc., 59
++// Temple Place - Suite 330, Boston MA 02111-1307, USA.
++
++#ifndef Monitor_included
++#define Monitor_included
++
++#include "config.h"
++#include <sys/stat.h>
++#include <sys/types.h>
++
++struct stat;
++
++// Monitor is an abstract baseclass for differend file monitoring
++// systems. The original system used was IMon, and the Montor API
++// is heavily influenced by that.
++// There can only be one instantiation of the Monitor object.
++//
++// The user of this object uses express() and revoke() to
++// express/revoke interest in a file to imon. There is also
++// a callback, the EventHandler. When an event comes in,
++// the EventHandler is called.
++//
++// The main implementers of the Monitor class is IMon and DNotify
++
++class Monitor {
++public:
++
++ enum Status { OK = 0, BAD = -1 };
++ enum Event { EXEC, EXIT, CHANGE };
++
++ typedef void (*EventHandler)(dev_t, ino_t, int event);
++
++ virtual Status express(const char *name, struct stat *stat_return) = 0;
++ virtual Status revoke(const char *name, dev_t dev, ino_t ino) = 0;
++};
++
++#endif /* !Monitor_included */
diff --git a/abs/extra-testing/fam/fam-2.7.0-gcc43.patch b/abs/extra-testing/fam/fam-2.7.0-gcc43.patch
new file mode 100644
index 0000000..a5ba7f0
--- /dev/null
+++ b/abs/extra-testing/fam/fam-2.7.0-gcc43.patch
@@ -0,0 +1,46 @@
+diff -Naur fam-2.7.0-old/include/BTree.h fam-2.7.0/include/BTree.h
+--- fam-2.7.0-old/include/BTree.h 2003-01-20 14:22:30.000000000 +1000
++++ fam-2.7.0/include/BTree.h 2008-10-18 10:43:11.000000000 +1000
+@@ -23,6 +23,8 @@
+ #ifndef BTree_included
+ #define BTree_included
+
++#include <cstdlib>
++
+ #include "Boolean.h"
+
+ // This is an in-core B-Tree implementation.
+diff -Naur fam-2.7.0-old/src/DNotify.c++ fam-2.7.0/src/DNotify.c++
+--- fam-2.7.0-old/src/DNotify.c++ 2008-10-18 10:33:13.000000000 +1000
++++ fam-2.7.0/src/DNotify.c++ 2008-10-18 10:41:22.000000000 +1000
+@@ -31,6 +31,7 @@
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <libgen.h>
++#include <cstdlib>
+
+ #include "DNotify.h"
+
+diff -Naur fam-2.7.0-old/src/IMon.c++ fam-2.7.0/src/IMon.c++
+--- fam-2.7.0-old/src/IMon.c++ 2003-01-19 00:18:12.000000000 +1000
++++ fam-2.7.0/src/IMon.c++ 2008-10-18 10:40:21.000000000 +1000
+@@ -40,7 +40,7 @@
+ #include "Interest.h"
+ #include "Log.h"
+ #include "Scheduler.h"
+-#include "alloc.h"
++#include <memory>
+
+ int IMon::imonfd = -2;
+ IMon::EventHandler IMon::ehandler = NULL;
+diff -Naur fam-2.7.0-old/src/Interest.h fam-2.7.0/src/Interest.h
+--- fam-2.7.0-old/src/Interest.h 2008-10-18 10:33:13.000000000 +1000
++++ fam-2.7.0/src/Interest.h 2008-10-18 10:40:44.000000000 +1000
+@@ -23,6 +23,7 @@
+ #ifndef Interest_included
+ #define Interest_included
+
++#include <cstdlib>
+ #include <sys/stat.h>
+ #include <sys/types.h>
+ #include <sys/time.h>
diff --git a/abs/extra-testing/fam/fam-2.7.0-largefiles.patch b/abs/extra-testing/fam/fam-2.7.0-largefiles.patch
new file mode 100644
index 0000000..60de9a4
--- /dev/null
+++ b/abs/extra-testing/fam/fam-2.7.0-largefiles.patch
@@ -0,0 +1,8 @@
+--- fam-2.7.0/common.am 2003-01-19 06:09:08.000000000 -0600
++++ fam-2.7.0.largefile/common.am 2005-01-12 19:08:06.462113110 -0600
+@@ -1,2 +1,5 @@
+-INCLUDES = @FAM_INC@ -DFAM_CONF=\"@FAM_CONF@\"
++INCLUDES = @FAM_INC@ -DFAM_CONF=\"@FAM_CONF@\" \
++ -D_FILE_OFFSET_BITS=64 \
++ -D_LARGEFILE64_SOURCE
++
diff --git a/abs/extra-testing/fam/fam-2.7.0-noc++.patch b/abs/extra-testing/fam/fam-2.7.0-noc++.patch
new file mode 100644
index 0000000..9188af0
--- /dev/null
+++ b/abs/extra-testing/fam/fam-2.7.0-noc++.patch
@@ -0,0 +1,83 @@
+diff -ruN fam-2.7.0/lib/Client.c++ fam-2.7.0.noc++/lib/Client.c++
+--- fam-2.7.0/lib/Client.c++ 2003-01-18 14:18:12.000000000 +0000
++++ fam-2.7.0.noc++/lib/Client.c++ 2006-03-02 22:47:50.000000000 +0000
+@@ -34,8 +34,6 @@
+ #include <syslog.h>
+ #include <errno.h>
+
+-#include <iostream.h>
+-
+ #include "fam.h"
+ #include "Client.h"
+
+@@ -440,3 +438,29 @@
+ memcpy(l, p, sizeof(u_int32_t));
+ *l = ntohl(*l);
+ }
++
++/* Some C++ stuff needed when we not link to libstdc++ */
++void *operator new (size_t sz)
++{
++ void *ret = malloc (sz);
++ if (ret == NULL)
++ {
++ fputs ("libfam memory allocation failed\n", stderr);
++ }
++ return ret;
++}
++
++void *operator new[] (size_t sz)
++{
++ return ::operator new(sz);
++}
++
++void operator delete (void *ptr)
++{
++ free (ptr);
++}
++
++void operator delete[] (void *ptr)
++{
++ free (ptr);
++}
+diff -ruN fam-2.7.0/lib/Makefile.am fam-2.7.0.noc++/lib/Makefile.am
+--- fam-2.7.0/lib/Makefile.am 2003-01-19 01:55:10.000000000 +0000
++++ fam-2.7.0.noc++/lib/Makefile.am 2006-03-02 22:43:01.000000000 +0000
+@@ -7,8 +7,11 @@
+ Client.h \
+ fam.c++
+
+-libfam_la_LDFLAGS = -export-symbols fam.sym
+-libfam_la_LIBADD = -lstdc++
++libfam_la_LDFLAGS = -Wl,--version-script=fam.sym.version
++libfam_la_LIBADD =
++AM_CXXFLAGS = -fno-exceptions -fno-rtti
++
++CXXLD=--tag=CC $(CXX)
+
+ EXTRA_DIST = fam.sym
+
+diff -ruN fam-2.7.0/lib/fam.sym.version fam-2.7.0.noc++/lib/fam.sym.version
+--- fam-2.7.0/lib/fam.sym.version 1970-01-01 00:00:00.000000000 +0000
++++ fam-2.7.0.noc++/lib/fam.sym.version 2006-03-02 22:49:31.000000000 +0000
+@@ -0,0 +1,20 @@
++{
++ global:
++ FAMCancelMonitor;
++ FAMClose;
++ FAMDebugLevel;
++ FamErrlist;
++ FAMErrno;
++ FAMMonitorCollection;
++ FAMMonitorDirectory;
++ FAMMonitorDirectory2;
++ FAMMonitorFile;
++ FAMMonitorFile2;
++ FAMNextEvent;
++ FAMOpen;
++ FAMOpen2;
++ FAMPending;
++ FAMResumeMonitor;
++ FAMSuspendMonitor;
++ local: *;
++};
diff --git a/abs/extra-testing/fam/include_fam_h.patch b/abs/extra-testing/fam/include_fam_h.patch
new file mode 100644
index 0000000..4248957
--- /dev/null
+++ b/abs/extra-testing/fam/include_fam_h.patch
@@ -0,0 +1,11 @@
+--- include/fam.h.orig 2005-05-25 09:26:38.000000000 +0000
++++ include/fam.h 2005-05-25 09:27:04.000000000 +0000
+@@ -41,7 +41,7 @@
+ *****************************************************************************/
+
+ /* For NAME_MAX - maximum # of chars in a filename */
+-#include "limits.h"
++#include <limits.h>
+
+
+
diff --git a/abs/extra-testing/gnome-keyring/PKGBUILD b/abs/extra-testing/gnome-keyring/PKGBUILD
new file mode 100644
index 0000000..d0ea53d
--- /dev/null
+++ b/abs/extra-testing/gnome-keyring/PKGBUILD
@@ -0,0 +1,34 @@
+#$Id: PKGBUILD 15806 2008-10-19 09:55:58Z jgc $
+#Maintainer: Jan De Groot <jgc@archlinux.org>
+
+pkgname=gnome-keyring
+pkgver=2.24.1
+pkgrel=1
+pkgdesc="GNOME Password Management daemon"
+arch=(i686 x86_64)
+license=('GPL' 'LGPL')
+depends=('gconf>=2.24.0' 'hal>=0.5.11')
+makedepends=('perlxml' 'pkgconfig')
+options=('!libtool' '!emptydirs')
+url="http://www.gnome.org"
+install=gnome-keyring.install
+source=(http://ftp.gnome.org/pub/gnome/sources/${pkgname}/2.24/${pkgname}-${pkgver}.tar.bz2
+ gnome-keyring.service)
+md5sums=('aa5552dc129f3509ee39145b7f0bf977' '16062d82eb8062201fb24f3e0ceb49a6')
+
+build() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --localstatedir=/var --disable-static \
+ --libexecdir=/usr/lib/gnome-keyring \
+ --with-pam-dir=/lib/security || return 1
+ make || return 1
+ make -j1 GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL=1 DESTDIR="${pkgdir}" install || return 1
+
+ install -m755 -d "${pkgdir}/usr/share/dbus-1/services"
+ install -m644 "${srcdir}/gnome-keyring.service" "${pkgdir}/usr/share/dbus-1/services/" || return 1
+
+ install -m755 -d "${pkgdir}/usr/share/gconf/schemas"
+ gconf-merge-schema "${pkgdir}/usr/share/gconf/schemas/${pkgname}.schemas" ${pkgdir}/etc/gconf/schemas/*.schemas || return 1
+ rm -f ${pkgdir}/etc/gconf/schemas/*.schemas
+}
diff --git a/abs/extra-testing/gnome-keyring/gnome-keyring.install b/abs/extra-testing/gnome-keyring/gnome-keyring.install
new file mode 100644
index 0000000..8874c6e
--- /dev/null
+++ b/abs/extra-testing/gnome-keyring/gnome-keyring.install
@@ -0,0 +1,19 @@
+pkgname=gnome-keyring
+
+post_install() {
+ usr/sbin/gconfpkg --install ${pkgname}
+}
+
+pre_upgrade() {
+ pre_remove $1
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+pre_remove() {
+ if [ -f usr/share/gconf/${pkgname}.schemas ]; then
+ usr/sbin/gconfpkg --uninstall ${pkgname}
+ fi
+}
diff --git a/abs/extra-testing/gnome-keyring/gnome-keyring.service b/abs/extra-testing/gnome-keyring/gnome-keyring.service
new file mode 100644
index 0000000..96ea061
--- /dev/null
+++ b/abs/extra-testing/gnome-keyring/gnome-keyring.service
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=org.gnome.keyring
+Exec=/usr/bin/gnome-keyring-daemon
diff --git a/abs/extra-testing/gnome-mime-data/PKGBUILD b/abs/extra-testing/gnome-mime-data/PKGBUILD
new file mode 100644
index 0000000..2ce4092
--- /dev/null
+++ b/abs/extra-testing/gnome-mime-data/PKGBUILD
@@ -0,0 +1,25 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=gnome-mime-data
+pkgver=2.18.0
+pkgrel=3
+pkgdesc="The base MIME and Application database for GNOME"
+arch=(i686 x86_64)
+license=('GPL')
+depends=('shared-mime-info')
+makedepens=('perlxml')
+url="http://www.gnome.org"
+groups=('gnome')
+source=(ftp://ftp.gnome.org/pub/gnome/sources/${pkgname}/2.18/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('541858188f80090d12a33b5a7c34d42c')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+
+ mkdir -p ${startdir}/pkg/usr/lib
+ mv ${startdir}/pkg/usr/share/pkgconfig ${startdir}/pkg/usr/lib/
+}
diff --git a/abs/extra-testing/gtk-doc/PKGBUILD b/abs/extra-testing/gtk-doc/PKGBUILD
new file mode 100644
index 0000000..6bbbb94
--- /dev/null
+++ b/abs/extra-testing/gtk-doc/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+
+pkgname=gtk-doc
+pkgver=1.10
+pkgrel=1
+options=('docs')
+pkgdesc="Used to document the public API of libraries"
+arch=(i686 x86_64)
+license=('GPL' 'FDL')
+depends=('perl>=5.8.8' 'rarian' 'docbook-xsl')
+makedepends=('pkgconfig' 'jade')
+install=gtk-doc.install
+url="http://www.gtk.org/gtk-doc/"
+source=(http://ftp.gnome.org/pub/gnome/sources/${pkgname}/${pkgver}/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('cbd4be396b0cf8b8ce1fc9b927cdf451')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/extra-testing/gtk-doc/gtk-doc.install b/abs/extra-testing/gtk-doc/gtk-doc.install
new file mode 100644
index 0000000..5e39bbf
--- /dev/null
+++ b/abs/extra-testing/gtk-doc/gtk-doc.install
@@ -0,0 +1,14 @@
+post_install() {
+cat << _EOF
+==> SGML support in gtk-doc is no longer maintained, only very old projects
+==> still use SGML. Install (open)jade for SGML support.
+_EOF
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/extra-testing/hunspell/ChangeLog b/abs/extra-testing/hunspell/ChangeLog
new file mode 100644
index 0000000..dcb3a2a
--- /dev/null
+++ b/abs/extra-testing/hunspell/ChangeLog
@@ -0,0 +1,6 @@
+2008-12-02 Alexander Fehr <pizzapunk gmail com>
+
+ * hunspell-1.2.8-1:
+ New upstream release.
+ New maintainer.
+ Added ChangeLog.
diff --git a/abs/extra-testing/hunspell/PKGBUILD b/abs/extra-testing/hunspell/PKGBUILD
new file mode 100644
index 0000000..2db38c2
--- /dev/null
+++ b/abs/extra-testing/hunspell/PKGBUILD
@@ -0,0 +1,23 @@
+# $Id: PKGBUILD 20746 2008-12-06 14:17:50Z alexanderf $
+# Maintainer: Alexander Fehr <pizzapunk gmail com>
+# Contributor: Hussam Al-Tayeb <ht990332@gmail.com>
+
+pkgname=hunspell
+pkgver=1.2.8
+pkgrel=1
+pkgdesc="Spell checker and morphological analyzer library and program"
+arch=('i686' 'x86_64')
+url="http://hunspell.sourceforge.net/"
+license=('GPL' 'LGPL' 'MPL')
+depends=('gcc-libs')
+options=('!libtool')
+source=(http://downloads.sourceforge.net/hunspell/hunspell-$pkgver.tar.gz)
+md5sums=('1177af54a09e320d2c24015f29c3a93e')
+
+build() {
+ cd "$srcdir/hunspell-$pkgver"
+
+ ./configure --prefix=/usr --disable-static || return 1
+ make || return 1
+ make DESTDIR="$pkgdir" install || return 1
+}
diff --git a/abs/extra-testing/jade/PKGBUILD b/abs/extra-testing/jade/PKGBUILD
new file mode 100644
index 0000000..e6a7722
--- /dev/null
+++ b/abs/extra-testing/jade/PKGBUILD
@@ -0,0 +1,31 @@
+# $Id: PKGBUILD 3700 2008-06-29 13:36:31Z jgc $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Contributor: Tom Newsom <Jeepster@gmx.co.uk>
+pkgname=jade
+pkgver=1.2.1
+pkgrel=5
+_debpatch=47
+pkgdesc="James Clark's DSSSL Engine"
+url='http://www.jclark.com/jade/'
+arch=('i686' 'x86_64')
+license=('custom')
+depends=('gcc-libs')
+replaces='openjade'
+options=('!libtool')
+source=(ftp://ftp.jclark.com/pub/jade/jade-${pkgver}.tar.gz
+ http://ftp.debian.org/debian/pool/main/j/jade/jade_${pkgver}-${_debpatch}.diff.gz)
+md5sums=('4239670ca6b578bff68b8c2e7cd1225f'
+ 'feb3889e2a5fa86ac6bdb742a25d0001')
+
+build() {
+ cd ${srcdir}/${pkgname}-${pkgver}
+ patch -Np1 -i ${srcdir}/jade_${pkgver}-${_debpatch}.diff || return 1
+ chmod 755 configure || return 1
+ ./configure --prefix=/usr --enable-default-catalog=/usr/share/sgml/catalog || return 1
+ make || return 1
+ install -d -m755 ${pkgdir}/usr/lib
+ make prefix=${pkgdir}/usr install || return 1
+ mv ${pkgdir}/usr/bin/sx ${pkgdir}/usr/bin/sgml2xml || return 1
+ install -m755 -d ${pkgdir}/usr/share/licenses/${pkgname}
+ install -m644 COPYING ${pkgdir}/usr/share/licenses/${pkgname}/ || return 1
+}
diff --git a/abs/extra-testing/libbonobo/PKGBUILD b/abs/extra-testing/libbonobo/PKGBUILD
new file mode 100644
index 0000000..f913979
--- /dev/null
+++ b/abs/extra-testing/libbonobo/PKGBUILD
@@ -0,0 +1,30 @@
+# $Id: PKGBUILD 13024 2008-09-25 19:31:19Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=libbonobo
+pkgver=2.24.0
+pkgrel=1
+pkgdesc="A set of language and system independant CORBA interfaces for creating reusable components"
+arch=(i686 x86_64)
+license=('GPL' 'LGPL')
+depends=('orbit2>=2.14.16' 'libxml2>=2.6.32' 'dbus-glib>=0.76')
+makedepends=('perlxml' 'pkgconfig' 'flex')
+options=('!libtool')
+backup=('etc/bonobo-activation/bonobo-activation-config.xml')
+replaces=('bonobo-activation')
+url="http://www.gnome.org"
+source=(http://ftp.gnome.org/pub/gnome/sources/libbonobo/2.24/libbonobo-${pkgver}.tar.bz2
+ bonobo-activation-config.xml)
+install=libbonobo.install
+md5sums=('b9dd7fcd377945b227db393ac4fa3c37'
+ '6392efaca30a26f826eafc4b8ccbc01f')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --localstatedir=/var --disable-static \
+ --libexecdir=/usr/lib/bonobo || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+ install -m644 ${startdir}/src/bonobo-activation-config.xml ${startdir}/pkg/etc/bonobo-activation/ || return 1
+}
diff --git a/abs/extra-testing/libbonobo/bonobo-activation-config.xml b/abs/extra-testing/libbonobo/bonobo-activation-config.xml
new file mode 100644
index 0000000..65ee75f
--- /dev/null
+++ b/abs/extra-testing/libbonobo/bonobo-activation-config.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+
+<oafconfig>
+
+<searchpath>
+ <!-- Examples: -->
+ <item>/usr/lib/bonobo/servers</item>
+ <item>/opt/gnome/lib/bonobo/servers</item>
+ <!-- <item>/usr/local/gnome2/lib/bonobo/servers</item> -->
+ <!-- <item>/usr/local/lib/bonobo/servers</item> -->
+ <!-- <item>/opt/gnome2/bonobo-activation/lib/bonobo/servers</item> -->
+</searchpath>
+
+</oafconfig>
diff --git a/abs/extra-testing/libbonobo/libbonobo.install b/abs/extra-testing/libbonobo/libbonobo.install
new file mode 100644
index 0000000..1794e4a
--- /dev/null
+++ b/abs/extra-testing/libbonobo/libbonobo.install
@@ -0,0 +1,23 @@
+post_install() {
+ /bin/true
+}
+
+post_upgrade() {
+ ldconfig -r .
+ PID=`pidof bonobo-activation-server`
+ if [ ! -z "${PID}" ]; then
+ killall -HUP bonobo-activation-server 2>&1
+ fi
+}
+
+pre_remove() {
+ /bin/true
+}
+
+post_remove() {
+ /bin/true
+}
+
+op=$1
+shift
+$op $*
diff --git a/abs/extra-testing/portmap/PKGBUILD b/abs/extra-testing/portmap/PKGBUILD
new file mode 100644
index 0000000..dc51a0c
--- /dev/null
+++ b/abs/extra-testing/portmap/PKGBUILD
@@ -0,0 +1,24 @@
+# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
+# Maintainer: dorphell <dorphell@archlinux.org>
+# Committer: Judd Vinet <jvinet@zeroflux.org>
+pkgname=portmap
+pkgver=6.0
+pkgrel=2
+pkgdesc="RPC connection manager"
+arch=(i686 x86_64)
+depends=('glibc')
+url="http://neil.brown.name/portmap/"
+license=('GPL')
+source=(http://neil.brown.name/portmap/portmap-6.0.tgz portmap)
+md5sums=('ac108ab68bf0f34477f8317791aaf1ff'
+ 'ec37d014a47adc39e52e4bf31bf2a19a')
+
+build() {
+ cd $startdir/src/portmap_$pkgver
+ make || return 1
+ mkdir -p $startdir/pkg/sbin
+ mkdir -p $startdir/pkg/usr/share/man/man8
+ make BASEDIR=$startdir/pkg install
+ mkdir -p $startdir/pkg/etc/rc.d
+ cp ../portmap $startdir/pkg/etc/rc.d
+}
diff --git a/abs/extra-testing/portmap/gcc3-errno_h.patch b/abs/extra-testing/portmap/gcc3-errno_h.patch
new file mode 100644
index 0000000..a440e61
--- /dev/null
+++ b/abs/extra-testing/portmap/gcc3-errno_h.patch
@@ -0,0 +1,18 @@
+--- portmap_5beta/portmap.c.orig 2002-12-31 22:13:17.000000000 +0200
++++ portmap_5beta/portmap.c 2002-12-31 22:13:50.000000000 +0200
+@@ -97,6 +97,7 @@
+
+ extern char *strerror();
+ #include <stdlib.h>
++#include <errno.h>
+
+ #ifndef LOG_PERROR
+ #define LOG_PERROR 0
+@@ -124,7 +125,6 @@
+ static void callit();
+ struct pmaplist *pmaplist;
+ int debugging = 0;
+-extern int errno;
+
+ #include "pmap_check.h"
+
diff --git a/abs/extra-testing/portmap/portmap b/abs/extra-testing/portmap/portmap
new file mode 100755
index 0000000..fb83a0a
--- /dev/null
+++ b/abs/extra-testing/portmap/portmap
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+. /etc/rc.conf
+. /etc/rc.d/functions
+
+PID=`pidof -o %PPID /sbin/portmap`
+case "$1" in
+ start)
+ stat_busy "Starting Portmap"
+ [ -z "$PID" ] && /sbin/portmap
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ echo $PID > /var/run/portmap.pid
+ add_daemon portmap
+ stat_done
+ fi
+ ;;
+ stop)
+ stat_busy "Stopping Portmap"
+ [ ! -z "$PID" ] && kill $PID &> /dev/null
+ if [ $? -gt 0 ]; then
+ stat_fail
+ else
+ rm /var/run/portmap.pid
+ rm_daemon portmap
+ stat_done
+ fi
+ ;;
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+ *)
+ echo "usage: $0 {start|stop|restart}"
+esac
+exit 0
diff --git a/abs/extra-testing/portmap/portmap_5beta.patch.bz2 b/abs/extra-testing/portmap/portmap_5beta.patch.bz2
new file mode 100644
index 0000000..ecaf95e
--- /dev/null
+++ b/abs/extra-testing/portmap/portmap_5beta.patch.bz2
Binary files differ
diff --git a/abs/extra-testing/rarian/PKGBUILD b/abs/extra-testing/rarian/PKGBUILD
new file mode 100644
index 0000000..b83caff
--- /dev/null
+++ b/abs/extra-testing/rarian/PKGBUILD
@@ -0,0 +1,29 @@
+# $Id: PKGBUILD 11986 2008-09-06 21:33:59Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=rarian
+pkgver=0.8.1
+pkgrel=1
+pkgdesc="Documentation meta-data library, designed as a replacement for Scrollkeeper."
+arch=('i686' 'x86_64')
+url="http://rarian.freedesktop.org/"
+license=('GPL')
+depends=('gcc-libs')
+makedepends=('libxslt')
+conflicts=('scrollkeeper')
+provides=('scrollkeeper')
+replaces=('scrollkeeper')
+options=('!libtool')
+source=(http://ftp.gnome.org/pub/gnome/sources/${pkgname}/0.8/${pkgname}-${pkgver}.tar.bz2
+ user-segfault.patch)
+md5sums=('75091185e13da67a0ff4279de1757b94'
+ '457e9827197009cfa360911fe49a5ad7')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ patch -p0 -i ${srcdir}/user-segfault.patch || return 1
+ ./configure --prefix=/usr --sysconfdir=/etc \
+ --localstatedir=/var --disable-static || return 1
+ make || return 1
+ make DESTDIR=${startdir}/pkg install || return 1
+}
diff --git a/abs/extra-testing/rarian/user-segfault.patch b/abs/extra-testing/rarian/user-segfault.patch
new file mode 100644
index 0000000..3311cec
--- /dev/null
+++ b/abs/extra-testing/rarian/user-segfault.patch
@@ -0,0 +1,14 @@
+--- util/rarian-sk-get-cl.cpp~ 2008-07-28 19:23:28.000000000 +0200
++++ util/rarian-sk-get-cl.cpp 2008-07-28 19:23:28.000000000 +0200
+@@ -160,6 +160,11 @@
+ {
+ char *filename = NULL;
+ char *user = getenv ("USERNAME");
++
++ if (user == NULL) {
++ user = getenv ("USER");
++ }
++
+ char *basepath = NULL;
+ int i=0;
+ int last = 0;
diff --git a/abs/extra-testing/shared-mime-info/PKGBUILD b/abs/extra-testing/shared-mime-info/PKGBUILD
new file mode 100644
index 0000000..4850139
--- /dev/null
+++ b/abs/extra-testing/shared-mime-info/PKGBUILD
@@ -0,0 +1,22 @@
+# $Id: PKGBUILD 15025 2008-10-12 10:43:09Z jgc $
+# Maintainer: Jan de Groot <jgc@archlinux.org>
+
+pkgname=shared-mime-info
+pkgver=0.51
+pkgrel=1
+pkgdesc="Freedesktop.org Shared MIME Info"
+arch=(i686 x86_64)
+license=('GPL')
+depends=('libxml2>=2.6.32' 'glib2>=2.18.1')
+makedepends=('perlxml' 'pkgconfig')
+install=shared-mime-info.install
+url="http://freedesktop.org/Software/shared-mime-info"
+source=(http://freedesktop.org/~hadess/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('01d72161f7d88123fbccd378871f02f0')
+
+build() {
+ cd "${srcdir}/${pkgname}-${pkgver}"
+ ./configure --prefix=/usr --disable-update-mimedb || return 1
+ make || return 1
+ make DESTDIR="${pkgdir}" install || return 1
+}
diff --git a/abs/extra-testing/shared-mime-info/shared-mime-info.install b/abs/extra-testing/shared-mime-info/shared-mime-info.install
new file mode 100644
index 0000000..6b06094
--- /dev/null
+++ b/abs/extra-testing/shared-mime-info/shared-mime-info.install
@@ -0,0 +1,12 @@
+post_install() {
+ update-mime-database /usr/share/mime > /dev/null 2>&1
+}
+
+post_upgrade() {
+ post_install $1
+}
+
+op=$1
+shift
+
+$op $*
diff --git a/abs/extra-testing/startup-notification/PKGBUILD b/abs/extra-testing/startup-notification/PKGBUILD
new file mode 100644
index 0000000..0d65123
--- /dev/null
+++ b/abs/extra-testing/startup-notification/PKGBUILD
@@ -0,0 +1,19 @@
+# $Id: PKGBUILD 21429 2008-12-13 03:30:02Z eric $
+# Maintainer: dorphell <dorphell@archlinux.org>
+pkgname=startup-notification
+pkgver=0.9
+pkgrel=1
+pkgdesc="Monitor and display application startup"
+arch=(i686 x86_64)
+depends=('libx11' 'libsm')
+options=('!libtool')
+url="http://www.freedesktop.org"
+source=(http://ftp.gnome.org/pub/gnome/sources/${pkgname}/${pkgver}/${pkgname}-${pkgver}.tar.bz2)
+md5sums=('624b42f1fac5a12c543a079e2cd3b366')
+
+build() {
+ cd ${startdir}/src/${pkgname}-${pkgver}
+ ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc
+ make || return 1
+ make DESTDIR=${startdir}/pkg install
+}