diff options
author | Nicolás Reynolds <fauno@kiwwwi.com.ar> | 2012-10-17 10:20:19 -0300 |
---|---|---|
committer | Nicolás Reynolds <fauno@kiwwwi.com.ar> | 2012-10-17 10:20:19 -0300 |
commit | 66e4c91d4531eef5adcd9dbe4a71e63c9b72cd7e (patch) | |
tree | 19e3e26a15f15fc8405ba2016fe9d4cc19919833 /staging | |
parent | c646bdd97c63b2d81bc27060203fabfebabda716 (diff) | |
parent | c84b2cd310f86dc50c4f52a5907cb17652e8c87c (diff) |
Merged upstream, mesa needs revision
Merge branch 'master' of ssh://vparabola/home/parabola/abslibre-pre-mips64el
Conflicts:
community-staging/gigi/PKGBUILD
community-staging/lxdm/PKGBUILD
community-staging/lxdm/lxdm-pam
community-staging/lxdm/lxdm.install
community-staging/lxdm/service
community-testing/gigi/PKGBUILD
community/calf/PKGBUILD
community/freedroidrpg/PKGBUILD
community/gmic/PKGBUILD
community/gnash/PKGBUILD
community/prboom/PKGBUILD
community/scorched3d/PKGBUILD
community/tmux/PKGBUILD
community/torcs/PKGBUILD
core/curl/PKGBUILD
core/systemd/PKGBUILD
core/sysvinit/PKGBUILD
extra/akonadi/PKGBUILD
extra/bzflag/PKGBUILD
extra/dhcp/PKGBUILD
extra/ftgl/PKGBUILD
extra/gcin/PKGBUILD
extra/imagemagick/PKGBUILD
extra/mesa/PKGBUILD
extra/python-telepathy/PKGBUILD
extra/qtiplot/PKGBUILD
extra/ruby/PKGBUILD
extra/wireshark/PKGBUILD
extra/xfce4-xkb-plugin/PKGBUILD
extra/xine-lib/PKGBUILD
extra/xorg-server/PKGBUILD
gnome-unstable/at-spi2-atk/PKGBUILD
gnome-unstable/at-spi2-core/PKGBUILD
gnome-unstable/baobab/PKGBUILD
gnome-unstable/epiphany/PKGBUILD
gnome-unstable/gdm/PKGBUILD
gnome-unstable/glib2/PKGBUILD
gnome-unstable/gnome-games/PKGBUILD
gnome-unstable/gnome-screensaver/PKGBUILD
gnome-unstable/gnome-session/PKGBUILD
gnome-unstable/gtk3/PKGBUILD
gnome-unstable/libpeas/PKGBUILD
gnome-unstable/libsoup/PKGBUILD
gnome-unstable/mutter/PKGBUILD
gnome-unstable/networkmanager/PKGBUILD
multilib/lib32-glew/PKGBUILD
multilib/lib32-gnutls/PKGBUILD
multilib/lib32-mesa/PKGBUILD
multilib/lib32-sqlite/PKGBUILD
multilib/wine/PKGBUILD
multilib/wine_gecko/PKGBUILD
staging/calligra/PKGBUILD
staging/inkscape/PKGBUILD
staging/kdebase-workspace/PKGBUILD
staging/kdebase-workspace/kde-np.pam
staging/kdebase-workspace/kde.pam
staging/kdebase-workspace/kdm.service
staging/libreoffice/PKGBUILD
staging/libreoffice/libreoffice-common.csh
staging/libreoffice/libreoffice-common.sh
staging/poppler/PKGBUILD
testing/dbus-python/PKGBUILD
testing/e2fsprogs/PKGBUILD
testing/iproute2/PKGBUILD
testing/iptables/PKGBUILD
testing/kdebase-workspace/PKGBUILD
testing/kdebase-workspace/kde-np.pam
testing/kdebase-workspace/kde.pam
testing/kdebindings-python/PKGBUILD
testing/lvm2/PKGBUILD
testing/lvm2/lvm-on-crypt.service
testing/lvm2/lvm.service
testing/miro/PKGBUILD
testing/postgresql/PKGBUILD
testing/postgresql/postgresql.install
testing/postgresql/postgresql.service
testing/ppp/PKGBUILD
testing/ppp/ip-down
testing/pyqt/PKGBUILD
testing/qscintilla/PKGBUILD
testing/sip/PKGBUILD
testing/systemd/PKGBUILD
testing/systemd/systemd.install
testing/util-linux/PKGBUILD
testing/wpa_supplicant/PKGBUILD
testing/wpa_supplicant/config
testing/xf86-video-intel/PKGBUILD
Diffstat (limited to 'staging')
60 files changed, 4641 insertions, 11 deletions
diff --git a/staging/bzr/PKGBUILD b/staging/bzr/PKGBUILD new file mode 100644 index 000000000..22244baf0 --- /dev/null +++ b/staging/bzr/PKGBUILD @@ -0,0 +1,33 @@ +# $Id: PKGBUILD 168772 2012-10-15 21:04:59Z eric $ +# Maintainer : +# Contributor: Hugo Doria <hugo@archlinux.org> + +pkgname=bzr +pkgver=2.5.1 +pkgrel=2 +pkgdesc="A decentralized revision control system (bazaar)" +arch=('i686' 'x86_64') +url="http://bazaar.canonical.com/en/" +license=('GPL') +depends=('python2') +optdepends=('python2-paramiko: for sftp support') +source=("http://launchpad.net/${pkgname}/${pkgver%.*}/${pkgver}/+download/${pkgname}-${pkgver}.tar.gz"{,.sig}) +md5sums=('ac5079858364a046071000d5cdccb67b' + 'c83dd08dd2c3e27edbab873500d7d6eb') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + sed -i 's|man/man1|share/man/man1|' setup.py + sed -i 's|/usr/bin/env python|/usr/bin/env python2|' \ + bzrlib/{plugins/bash_completion/bashcomp.py,tests/ssl_certs/create_ssls.py,patiencediff.py,_patiencediff_py.py} + python2 setup.py build +} + +package() { + cd "${srcdir}/${pkgname}-${pkgver}" + python2 setup.py install --prefix=/usr --root="${pkgdir}" --optimize=1 + + # bash-completion + install -D -m644 contrib/bash/bzr \ + "${pkgdir}/usr/share/bash-completion/completions/bzr" +} diff --git a/staging/dbus-python/PKGBUILD b/staging/dbus-python/PKGBUILD new file mode 100644 index 000000000..b6b1bc24f --- /dev/null +++ b/staging/dbus-python/PKGBUILD @@ -0,0 +1,66 @@ +# $Id: PKGBUILD 168669 2012-10-13 22:15:37Z eric $ +# Maintainer: Jan de Groot <jgc@archlinux.org> + +pkgbase=dbus-python +pkgname=('python-dbus' 'python2-dbus' 'python-dbus-common') +pkgver=1.1.1 +pkgrel=2 +pkgdesc="Python bindings for DBUS" +arch=('i686' 'x86_64') +license=('GPL' 'LGPL') +url="http://www.freedesktop.org/wiki/Software/DBusBindings" +makedepends=('docutils' 'dbus-glib' 'python' 'python2') +options=('!libtool') +source=(http://dbus.freedesktop.org/releases/${pkgbase}/${pkgbase}-${pkgver}.tar.gz) +md5sums=('742c7432ad0f7c3f98291d58fa2e35dc') + +build() { + cd "${srcdir}" + mkdir build-python2 build-python3 + cd "${srcdir}/build-python2" + PYTHON=python2 ../${pkgbase}-${pkgver}/configure --prefix=/usr + make + + + cd "${srcdir}/build-python3" + ../${pkgbase}-${pkgver}/configure --prefix=/usr + make +} + +package_python-dbus-common() { + pkgdesc="Common dbus-python files shared between python-dbus and python2-dbus" + conflicts=('dbus-python<1.1.0') + + cd "${srcdir}/build-python3" + make DESTDIR="${pkgdir}" install-data + rm -rf "${pkgdir}"/usr/lib/python* +} + +package_python-dbus() { + depends=('python-dbus-common' 'python' 'dbus-core') + optdepends=('dbus-glib: glib mainloop support') + pkgdesc="Python 3.3 bindings for DBUS" + + cd "${srcdir}/build-python3" + make DESTDIR="${pkgdir}" install + + rm -rf "${pkgdir}/usr/share" + rm -rf "${pkgdir}/usr/include" + rm -rf "${pkgdir}/usr/lib/pkgconfig" +} + +package_python2-dbus() { + depends=('python-dbus-common' 'python2' 'dbus-core') + optdepends=('dbus-glib: glib mainloop support') + pkgdesc="Python 2.7 bindings for DBUS" + replaces=('dbus-python') + conflicts=('dbus-python') + provides=("dbus-python=$pkgver") + + cd "${srcdir}/build-python2" + make DESTDIR="${pkgdir}" install + + rm -rf "${pkgdir}/usr/share" + rm -rf "${pkgdir}/usr/include" + rm -rf "${pkgdir}/usr/lib/pkgconfig" +} diff --git a/staging/gnome-python-desktop/PKGBUILD b/staging/gnome-python-desktop/PKGBUILD new file mode 100644 index 000000000..4788632d1 --- /dev/null +++ b/staging/gnome-python-desktop/PKGBUILD @@ -0,0 +1,107 @@ +# $Id: PKGBUILD 168784 2012-10-16 00:01:27Z allan $ +# Maintainer: Jan de Groot <jgc@archlinux.org> +# Contributor: Arjan Timmerman <arjan@soulfly.nl> +# Contributor: Wael Nasreddine <gandalf@siemens-mobiles.org> + +pkgbase=gnome-python-desktop +pkgname=('gnome-python-desktop' 'python2-gnomedesktop' 'python2-gnomekeyring' 'python2-gtop' 'python2-metacity' 'python2-rsvg' 'python2-totem-plparser' 'python2-wnck') +pkgver=2.32.0 +pkgrel=11 +arch=(i686 x86_64) +license=('GPL' 'LGPL') +options=('!libtool') +makedepends=('intltool' 'pkg-config' 'gnome-python' 'libgtop' 'totem-plparser' 'gnome-desktop2' 'metacity' 'librsvg' 'libwnck') +url="http://www.gnome.org" +source=(http://ftp.gnome.org/pub/gnome/sources/${pkgbase}/2.32/${pkgbase}-${pkgver}.tar.bz2 + gnome-python-desktop-2.32.0-metacity-build.patch) +sha256sums=('09dbd580bf3b0ef60f91b090eafe6d08ddcc50a609e2b425a7f8eca46d4e0ee9' + 'f012f9bd2f9baa527f07ad2f6e312c875bb6f2d3204270a1b053278a3a0c86b3') + +build() { + cd "${srcdir}/${pkgbase}-${pkgver}" + patch -p1 -i ../gnome-python-desktop-2.32.0-metacity-build.patch + PYTHON=/usr/bin/python2 ./configure --prefix=/usr --enable-metacity + make +} + +package_gnome-python-desktop() { + depends=('python2-gnomedesktop' 'python2-gnomekeyring' 'python2-gtop' 'python2-metacity' 'python2-rsvg' 'python2-totem-plparser' 'python2-wnck' 'gnome2-python') + pkgdesc="Python bindings for the GNOME desktop environment" + + cd "${srcdir}/${pkgbase}-${pkgver}" + make install-pkgconfigDATA DESTDIR="${pkgdir}" +} + +package_python2-gnomedesktop() { + depends=('pygtk' 'gnome-desktop2' 'python2-gnomevfs') + pkgdesc="Python bindings for gnome-desktop 2.x" + conflicts=('python-gnomedesktop<=2.32.0-10') + replaces=('python-gnomedesktop<=2.32.0-10') + + cd "${srcdir}/${pkgbase}-${pkgver}" + make -C gnomedesktop install DESTDIR="${pkgdir}" +} + +package_python2-gnomekeyring() { + depends=('pygtk' 'libgnome-keyring') + pkgdesc="Python bindings for libgnome-keyring" + conflicts=('python-gnomekeyring<=2.32.0-10') + replaces=('python-gnomekeyring<=2.32.0-10') + + cd "${srcdir}/${pkgbase}-${pkgver}" + make -C gnomekeyring install DESTDIR="${pkgdir}" +} + +package_python2-gtop() { + depends=('pygtk' 'libgtop') + pkgdesc="Python bindings for libgtop" + conflicts=('python-gtop<=2.32.0-10') + replaces=('python-gtop<=2.32.0-10') + + cd "${srcdir}/${pkgbase}-${pkgver}" + make -C gtop install DESTDIR="${pkgdir}" +} + +package_python2-metacity() { + depends=('pygtk' 'metacity') + pkgdesc="Python bindings for metacity" + conflicts=('python-metacity<=2.32.0-10') + replaces=('python-metacity<=2.32.0-10') + + cd "${srcdir}/${pkgbase}-${pkgver}" + make -C metacity install DESTDIR="${pkgdir}" +} + +package_python2-rsvg() { + depends=('pygtk' 'librsvg') + pkgdesc="Python bindings for librsvg" + conflicts=('python-rsvg<=2.32.0-10') + replaces=('python-rsvg<=2.32.0-10') + + cd "${srcdir}/${pkgbase}-${pkgver}" + make -C rsvg install DESTDIR="${pkgdir}" + install -m755 -d "${pkgdir}/usr/share/pygtk/2.0/defs" + install -m644 rsvg/rsvg.defs "${pkgdir}/usr/share/pygtk/2.0/defs/" +} + +package_python2-totem-plparser() { + depends=('pygtk' 'totem-plparser' 'python2-gnomevfs') + pkgdesc="Python bindings for totem-plparser" + conflicts=('python-totem-plparser<=2.32.0-10') + replaces=('python-totem-plparser<=2.32.0-10') + + cd "${srcdir}/${pkgbase}-${pkgver}" + make -C totem install DESTDIR="${pkgdir}" + install -m755 -d "${pkgdir}/usr/share/pygtk/2.0/defs" + install -m644 totem/plparser.defs "${pkgdir}/usr/share/pygtk/2.0/defs/" +} + +package_python2-wnck() { + depends=('pygtk' 'libwnck') + pkgdesc="Python bindings for libwnck" + conflicts=('python-wnck<=2.32.0-10') + replaces=('python-wnck<=2.32.0-10') + + cd "${srcdir}/${pkgbase}-${pkgver}" + make -C wnck install DESTDIR="${pkgdir}" +} diff --git a/staging/gnome-python-desktop/gnome-python-desktop-2.32.0-metacity-build.patch b/staging/gnome-python-desktop/gnome-python-desktop-2.32.0-metacity-build.patch new file mode 100644 index 000000000..5054dd2bd --- /dev/null +++ b/staging/gnome-python-desktop/gnome-python-desktop-2.32.0-metacity-build.patch @@ -0,0 +1,42 @@ +From: Daniel Drake <dsd@laptop.org> + +Fix build against metacity-2.34.2. The port to GSettings +removed these constants from the codebase. + +Index: gnome-python-desktop-2.32.0/metacity/metacity.defs +=================================================================== +--- gnome-python-desktop-2.32.0.orig/metacity/metacity.defs ++++ gnome-python-desktop-2.32.0/metacity/metacity.defs +@@ -120,32 +120,6 @@ + ) + ) + +-(define-enum FocusMode +- (in-module "Meta") +- (c-name "MetaFocusMode") +-; (gtype-id "META_TYPE_FOCUS_MODE") +- (values +- '("click" "META_FOCUS_MODE_CLICK") +- '("sloppy" "META_FOCUS_MODE_SLOPPY") +- '("mouse" "META_FOCUS_MODE_MOUSE") +- ) +-) +- +-(define-enum ActionTitlebar +- (in-module "Meta") +- (c-name "MetaActionTitlebar") +-; (gtype-id "META_TYPE_ACTION_TITLEBAR") +- (values +- '("toggle-shade" "META_ACTION_TITLEBAR_TOGGLE_SHADE") +- '("toggle-maximize" "META_ACTION_TITLEBAR_TOGGLE_MAXIMIZE") +- '("minimize" "META_ACTION_TITLEBAR_MINIMIZE") +- '("none" "META_ACTION_TITLEBAR_NONE") +- '("lower" "META_ACTION_TITLEBAR_LOWER") +- '("menu" "META_ACTION_TITLEBAR_MENU") +- '("last" "META_ACTION_TITLEBAR_LAST") +- ) +-) +- + (define-enum FrameType + (in-module "Meta") + (c-name "MetaFrameType") diff --git a/staging/kdebase-workspace/kdm.logrotate b/staging/kdebase-workspace/kdm.logrotate new file mode 100644 index 000000000..34331feae --- /dev/null +++ b/staging/kdebase-workspace/kdm.logrotate @@ -0,0 +1,6 @@ +/var/log/kdm.log { + maxage 365 + size=+1024k + notifempty + missingok +} diff --git a/staging/kdebase-workspace/logind-support.patch b/staging/kdebase-workspace/logind-support.patch new file mode 100644 index 000000000..9de205400 --- /dev/null +++ b/staging/kdebase-workspace/logind-support.patch @@ -0,0 +1,66 @@ +From: Lukas Tinkl <lukas@kde.org> +Date: Fri, 05 Oct 2012 09:57:13 +0000 +Subject: store the filedescriptor in a member variable +X-Git-Url: http://quickgit.kde.org/?p=kde-workspace.git&a=commitdiff&h=a18b78d7da8cb8d627ad2e85f666bfcf1a2721e1 +--- +store the filedescriptor in a member variable + +make systemd-inhibit work as intended, PowerDevil now handles +power/sleep/lid buttons as intended + +BUG: 307412 +--- + + +--- a/powerdevil/daemon/powerdevilpolicyagent.cpp ++++ b/powerdevil/daemon/powerdevilpolicyagent.cpp +@@ -29,7 +29,6 @@ + #include <QtDBus/QDBusPendingReply> + #include <QtDBus/QDBusConnectionInterface> + #include <QtDBus/QDBusServiceWatcher> +-#include <QtDBus/QDBusUnixFileDescriptor> + + #include <KGlobal> + #include <KDebug> +@@ -225,6 +224,9 @@ + onActiveSessionChanged(m_activeSessionPath); + + // inhibit systemd handling of power/sleep/lid buttons ++ // http://www.freedesktop.org/wiki/Software/systemd/inhibit ++ kDebug() << "fd passing available:" << bool(managerIface.connection().connectionCapabilities() & QDBusConnection::UnixFileDescriptorPassing); ++ + QVariantList args; + args << "handle-power-key:handle-suspend-key:handle-hibernate-key:handle-lid-switch"; // what + args << "PowerDevil"; // who +@@ -232,8 +234,9 @@ + args << "block"; // mode + QDBusPendingReply<QDBusUnixFileDescriptor> desc = managerIface.asyncCallWithArgumentList("Inhibit", args); + desc.waitForFinished(); +- if (desc.isValid() && desc.value().isValid()) { +- kDebug() << "systemd powersave events handling inhibited"; ++ if (desc.isValid()) { ++ m_systemdInhibitFd = desc.value(); ++ kDebug() << "systemd powersave events handling inhibited, descriptor:" << m_systemdInhibitFd.fileDescriptor(); + } + else + kWarning() << "failed to inhibit systemd powersave handling"; + +--- a/powerdevil/daemon/powerdevilpolicyagent.h ++++ b/powerdevil/daemon/powerdevilpolicyagent.h +@@ -27,6 +27,7 @@ + #include <QtCore/QWeakPointer> + + #include <QtDBus/QDBusContext> ++#include <QtDBus/QDBusUnixFileDescriptor> + + #include <kdemacros.h> + +@@ -108,6 +109,7 @@ + QString m_activeSessionPath; + QWeakPointer< QDBusInterface > m_sdSessionInterface; + QWeakPointer< QDBusInterface > m_sdSeatInterface; ++ QDBusUnixFileDescriptor m_systemdInhibitFd; + + // ConsoleKit support + bool m_ckAvailable; + diff --git a/staging/konversation/PKGBUILD b/staging/konversation/PKGBUILD index e491f6801..ee8a55574 100644 --- a/staging/konversation/PKGBUILD +++ b/staging/konversation/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 167386 2012-10-01 19:44:28Z stephane $ +# $Id: PKGBUILD 168681 2012-10-14 00:39:34Z stephane $ # Maintainer: Stéphane Gaudreault <stephane@archlinux.org> # Contributor: Andrea Scarpino <andrea@archlinux.org> # Contributor: James Rayner <iphitus@gmail.com> @@ -6,12 +6,13 @@ pkgname=konversation pkgver=1.4 -pkgrel=2 +pkgrel=3 pkgdesc="A user friendly IRC client for KDE" arch=('i686' 'x86_64') url="http://konversation.kde.org" -depends=('kdebase-runtime' 'kdepimlibs' 'python') +depends=('kdebase-runtime' 'kdepimlibs') makedepends=('automoc4' 'cmake' 'pkgconfig' 'docbook-xml') +optdepends=('python: python scripting support') license=('GPL2' 'FDL') install=${pkgname}.install options=('!makeflags') @@ -34,7 +35,7 @@ package() { make DESTDIR="${pkgdir}" install # Remove a bunch of symlinks pointing to non-existant files - for lang in pt_BR uk sv et de en nl; do - rm "${pkgdir}"/usr/share/doc/kde/html/${lang}/konversation/common + for _lang in pt_BR uk sv et de en nl; do + rm "${pkgdir}"/usr/share/doc/kde/html/${_lang}/konversation/common done } diff --git a/staging/libreoffice/make-pyuno-work-with-system-wide-module-install.diff b/staging/libreoffice/make-pyuno-work-with-system-wide-module-install.diff new file mode 100644 index 000000000..e86548136 --- /dev/null +++ b/staging/libreoffice/make-pyuno-work-with-system-wide-module-install.diff @@ -0,0 +1,44 @@ +diff --git a/desktop/scripts/soffice.sh b/desktop/scripts/soffice.sh +index defd7b2..ea2a809 100755 +--- a/desktop/scripts/soffice.sh ++++ b/desktop/scripts/soffice.sh +@@ -128,6 +128,9 @@ if echo "$checks" | grep -q "cc" ; then + exit 1; + fi + ++PYTHONPATH=$sd_prog${PYTHONPATH+:$PYTHONPATH} ++export PYTHONPATH ++ + case "`uname -s`" in + NetBSD|OpenBSD|FreeBSD|DragonFly) + # this is a temporary hack until we can live with the default search paths +diff --git a/pyuno/source/module/uno.py b/pyuno/source/module/uno.py +index f93ac5e..92a2891 100644 +--- a/pyuno/source/module/uno.py ++++ b/pyuno/source/module/uno.py +@@ -26,8 +26,12 @@ + # for a copy of the LGPLv3 License. + # + #************************************************************************* ++import os + import sys + ++sys.path.append('/usr/lib/libreoffice/program') ++if getattr(os.environ, 'URE_BOOTSTRAP', None) is None: ++ os.environ['URE_BOOTSTRAP'] = "vnd.sun.star.pathname:/usr/lib/libreoffice/program/fundamentalrc" + import pyuno + + try: +diff --git a/scripting/source/pyprov/officehelper.py b/scripting/source/pyprov/officehelper.py +index 610ac5f..df243d0 100755 +--- a/scripting/source/pyprov/officehelper.py ++++ b/scripting/source/pyprov/officehelper.py +@@ -53,7 +53,7 @@ def bootstrap(): + if "UNO_PATH" in os.environ: + sOffice = os.environ["UNO_PATH"] + else: +- sOffice = "" # lets hope for the best ++ sOffice = "/usr/lib/libreoffice/program" + sOffice = os.path.join(sOffice, "soffice") + if platform.startswith("win"): + sOffice += ".exe" diff --git a/staging/miro/PKGBUILD b/staging/miro/PKGBUILD new file mode 100644 index 000000000..1b4c5711a --- /dev/null +++ b/staging/miro/PKGBUILD @@ -0,0 +1,49 @@ +# $Id: PKGBUILD 168800 2012-10-16 01:40:22Z eric $ +# Maintainer: Ronald van Haren <ronald.archlinux.org> + +pkgname=miro +pkgver=5.0.4 +pkgrel=2 +pkgdesc="The free and open source internet TV platform" +arch=('i686' 'x86_64') +url="http://www.getmiro.com" +license=('GPL2') +depends=('python2-dbus' 'pyrex' 'pygtk' 'gstreamer0.10' 'python2-gconf' + 'python2-pysqlite' 'pywebkitgtk' 'shared-mime-info' + 'desktop-file-utils' 'gstreamer0.10' 'hicolor-icon-theme' + 'gstreamer0.10-python' 'python2-notify' 'libtorrent-rasterbar' + 'gstreamer0.10-base-plugins' 'gstreamer0.10-good-plugins' 'python2-pycurl' + 'gstreamer0.10-ffmpeg' 'ffmpeg' 'mutagen' 'xdg-utils') +makedepends=('pkg-config' 'boost') +install=miro.install +source=("http://ftp.osuosl.org/pub/pculture.org/${pkgname}/src/${pkgname}-${pkgver}.tar.gz" + 'ffmpeg.patch') +sha1sums=('1144f98149ff07208b994a7cedb45a4beaaa451f' + 'ce0f42be2a0a3ac99f07b5abfabf0975928c841c') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + + cd linux + patch -p2 -i "${srcdir}"/ffmpeg.patch + + python2 setup.py install --root="${pkgdir}" + + # fix miro startup script so --debug works with python2 + sed -i "s|which python|which python2|" "${pkgdir}/usr/bin/miro" + sed -i "s|./miro.real|/usr/bin/miro.real|" "${pkgdir}/usr/bin/miro" + + # fix python scripts for python2 + sed -i "s|/usr/bin/env python|/usr/bin/env python2|" "${pkgdir}"/usr/share/miro/resources/searchengines/update-icons.py + for i in usr/share/miro/resources/testdata/echonest-replies/generate.py usr/share/miro/resources/searchengines/update-icons.py \ + usr/share/miro/resources/testdata/7digital-replies/generate.py; do + sed -i "s|/usr/bin/python|/usr/bin/python2|" "${pkgdir}"/${i} + done + + # Fakeroot segfaults on these; remove + if [ ${CARCH} == "i686" ]; then + rm -f "${pkgdir}"/usr/bin/codegen.Linux-x86_64 || true + else + rm -f "${pkgdir}"/usr/bin/codegen.Linux-i686 || true + fi +} diff --git a/staging/miro/ffmpeg.patch b/staging/miro/ffmpeg.patch new file mode 100644 index 000000000..99c14107d --- /dev/null +++ b/staging/miro/ffmpeg.patch @@ -0,0 +1,63 @@ +--- miro-5.0.1/linux/miro-segmenter.c~ 2012-07-06 14:33:24.618082171 +0000 ++++ miro-5.0.1/linux/miro-segmenter.c 2012-07-06 15:10:19.564146117 +0000 +@@ -156,7 +156,7 @@ + exit(1); + } + +- ret = av_open_input_file(&ic, input, ifmt, 0, NULL); ++ ret = avformat_open_input(&ic, input, ifmt, 0); + if (ret != 0) { + fprintf(stderr, "Could not open input file, make sure it is an mpegts file: %d\n", ret); + exit(1); +@@ -215,12 +215,7 @@ + } + } + +- if (av_set_parameters(oc, NULL) < 0) { +- fprintf(stderr, "Invalid output format parameters\n"); +- exit(1); +- } +- +- dump_format(oc, 0, input, 1); ++ av_dump_format(oc, 0, input, 1); + + if (video_st) { + codec = avcodec_find_decoder(video_st->codec->codec_id); +@@ -233,12 +228,12 @@ + } + } + +- if (url_fopen(&oc->pb, output_filename, URL_WRONLY) < 0) { ++ if (avio_open(&oc->pb, output_filename, AVIO_FLAG_WRITE) < 0) { + fprintf(stderr, "Could not open '%s'\n", output_filename); + exit(1); + } + +- if (av_write_header(oc)) { ++ if (avformat_write_header(oc, NULL)) { + fprintf(stderr, "Could not write mpegts header to first output file\n"); + + exit(1); +@@ -274,10 +269,10 @@ + } + + if (segment_time - prev_segment_time >= segment_duration) { +- put_flush_packet(oc->pb); +- url_fclose(oc->pb); ++ avio_flush(oc->pb); ++ avio_close(oc->pb); + +- if (url_fopen(&oc->pb, output_filename, URL_WRONLY) < 0) { ++ if (avio_open(&oc->pb, output_filename, AVIO_FLAG_WRITE) < 0) { + fprintf(stderr, "Could not open '%s'\n", output_filename); + break; + } +@@ -307,7 +302,7 @@ + av_freep(&oc->streams[i]); + } + +- url_fclose(oc->pb); ++ avio_close(oc->pb); + av_free(oc); + + /* End-of-transcode marker. */ diff --git a/staging/miro/miro.install b/staging/miro/miro.install new file mode 100644 index 000000000..a5ee228aa --- /dev/null +++ b/staging/miro/miro.install @@ -0,0 +1,17 @@ +post_install() { + update-desktop-database -q + xdg-icon-resource forceupdate --theme hicolor + update-mime-database usr/share/mime > /dev/null +} + +post_upgrade() { + post_install $1 +} + +post_remove() { + update-desktop-database -q + xdg-icon-resource forceupdate --theme hicolor + update-mime-database usr/share/mime > /dev/null +} + + diff --git a/staging/pycrypto/PKGBUILD b/staging/pycrypto/PKGBUILD new file mode 100644 index 000000000..d4987b4b3 --- /dev/null +++ b/staging/pycrypto/PKGBUILD @@ -0,0 +1,52 @@ +# $Id: PKGBUILD 168667 2012-10-13 21:58:25Z eric $ +# Maintainer: Jan de Groot <jgc@archlinux.org> +# Contributor: Kritoke <kritoke@gamebox.net> + +pkgbase=pycrypto +pkgname=('python2-crypto' 'python-crypto') +pkgver=2.6 +pkgrel=3 +arch=('i686' 'x86_64') +makedepends=('python2' 'python') +url="http://www.dlitz.net/software/pycrypto/" +license=('custom') +source=("http://ftp.dlitz.net/pub/dlitz/crypto/${pkgbase}/${pkgbase}-${pkgver}.tar.gz") +sha256sums=('7293c9d7e8af2e44a82f86eb9c3b058880f4bcc884bf3ad6c8a34b64986edde8') + +build() { + cd "${srcdir}" + find ${pkgbase}-${pkgver}/LEGAL -type f -exec chmod 644 {} \; + find ${pkgbase}-${pkgver}/LEGAL -type d -exec chmod 755 {} \; + + cp -r ${pkgbase}-${pkgver} ${pkgbase}-${pkgver}-py3 + cd "${srcdir}/${pkgbase}-${pkgver}" + python2 setup.py build + + cd "${srcdir}/${pkgbase}-${pkgver}-py3" + python setup.py build +} + +package_python2-crypto() { + pkgdesc="Collection of cryptographic algorithms and protocols, implemented for use from Python 2." + depends=('python2') + replaces=('pycrypto') + conflicts=('pycrypto') + provides=("pycrypto=${pkgver}") + + cd "${srcdir}/${pkgbase}-${pkgver}" + python2 setup.py install --root="${pkgdir}" --optimize=1 + install -m755 -d "${pkgdir}/usr/share/licenses/${pkgname}" + install -m644 COPYRIGHT "${pkgdir}/usr/share/licenses/${pkgname}/" + cp -r LEGAL "${pkgdir}/usr/share/licenses/${pkgname}/" +} + +package_python-crypto() { + pkgdesc="Collection of cryptographic algorithms and protocols, implemented for use from Python 3." + depends=('python') + + cd "${srcdir}/${pkgbase}-${pkgver}-py3" + python setup.py install --root="${pkgdir}" --optimize=1 + install -m755 -d "${pkgdir}/usr/share/licenses/${pkgname}" + install -m644 COPYRIGHT "${pkgdir}/usr/share/licenses/${pkgname}/" + cp -r LEGAL "${pkgdir}/usr/share/licenses/${pkgname}/" +} diff --git a/staging/pygobject/PKGBUILD b/staging/pygobject/PKGBUILD new file mode 100644 index 000000000..c5b861096 --- /dev/null +++ b/staging/pygobject/PKGBUILD @@ -0,0 +1,58 @@ +# $Id: PKGBUILD 168794 2012-10-16 00:45:16Z allan $ +# Maintainer: Ionut Biru <ibiru@archlinux.org> + +pkgbase=pygobject +pkgname=(python-gobject python2-gobject pygobject-devel) +pkgver=3.2.2 +pkgrel=2 +arch=('i686' 'x86_64') +url="https://live.gnome.org/PyGObject" +license=('LGPL') +makedepends=('python' 'python2' 'python-cairo' 'python2-cairo' 'gobject-introspection') +source=(http://ftp.gnome.org/pub/gnome/sources/$pkgbase/${pkgver%.*}/$pkgbase-$pkgver.tar.xz) +options=('!libtool') +sha256sums=('4653790baaff0176fd814b88cfb5378c45906a120b25d01be2554f423b726eb0') + +build() { + cp -a "$pkgbase-$pkgver" python2-build + mkdir devel + + ( + cd python2-build + export PYTHON=/usr/bin/python2 + ./configure --prefix=/usr + make + ) + + ( + cd "$pkgbase-$pkgver" + ./configure --prefix=/usr + make + ) +} + +package_python-gobject() { + pkgdesc="Python 3 bindings for GObject" + depends=('gobject-introspection' 'python-cairo' "pygobject-devel=$pkgver") + + cd "$pkgbase-$pkgver" + make DESTDIR="$pkgdir" install + rm -r "$pkgdir"/usr/{include,lib/pkgconfig} +} + +package_python2-gobject() { + pkgdesc="Python 2 bindings for GObject" + depends=('gobject-introspection' 'python2-cairo' "pygobject-devel=$pkgver") + + cd "python2-build" + make DESTDIR="$pkgdir" install + mv "$pkgdir"/usr/{include,lib/pkgconfig} "$srcdir/devel" +} + +package_pygobject-devel() { + pkgdesc="Development files for the pygobject bindings" + cd "devel" + mkdir -p "$pkgdir"/usr/{include,lib} + mv include "$pkgdir/usr/" + mv pkgconfig "$pkgdir/usr/lib/" +} diff --git a/staging/pygobject2/PKGBUILD b/staging/pygobject2/PKGBUILD new file mode 100644 index 000000000..4ba2bfa2a --- /dev/null +++ b/staging/pygobject2/PKGBUILD @@ -0,0 +1,86 @@ +# $Id: PKGBUILD 168792 2012-10-16 00:40:21Z allan $ +# Maintainer: Jan de Groot <jgc@archlinux.org> + +pkgbase=pygobject2 +pkgname=(python-gobject2 python2-gobject2 pygobject2-devel) +pkgver=2.28.6 +pkgrel=7 +arch=('i686' 'x86_64') +url="http://www.pygtk.org/" +license=('LGPL') +makedepends=('python' 'python2') +source=(http://ftp.gnome.org/pub/gnome/sources/pygobject/${pkgver%.*}/pygobject-${pkgver}.tar.xz + python2-fix-type.patch + python3-fix-build.patch + python3-fix-maketrans.patch) +options=('!libtool') +sha256sums=('fb8a1d4f665130a125011659bd347c7339c944232163dbb9a34fd0686577adb8' + 'b7b415499ffc0817cf551edf76a3fe47938db2c9f6240046eae681e6ef9b37ea' + 'feafd4664f8455edf0bf8407ac45e219bb550df806ce0d601baae951e8c188ca' + '4bff9adcea13a824c45d14ec501c927df47d23c22507a2456d8b5ec885924c0a') + +build() { + cd "${srcdir}" + cp -a "pygobject-${pkgver}" python2-build + mkdir devel + + ( + cd python2-build + export PYTHON=/usr/bin/python2 + ./configure --prefix=/usr --disable-introspection + make + ) + + ( + cd "pygobject-${pkgver}" + #patches available in 2.28 branch but unreleased. + patch -Np1 -i "${srcdir}/python2-fix-type.patch" + patch -Np1 -i "${srcdir}/python3-fix-build.patch" + patch -Np1 -i "${srcdir}/python3-fix-maketrans.patch" + + ./configure --prefix=/usr --disable-introspection + make + ) +} + +package_python-gobject2() { + pkgdesc="Python 3 bindings for GObject2" + depends=('glib2' 'pygobject2-devel' 'python') + replaces=('py3gobject') + provides=("py3gobject=$pkgver") + + cd "${srcdir}/pygobject-${pkgver}" + make DESTDIR="${pkgdir}" install + + # Delete devel stuff + rm -r "$pkgdir"/usr/{bin,include,lib/pkgconfig,share/{gtk-doc,pygobject/{2.0/codegen,xsl}}} +} + +package_python2-gobject2() { + pkgdesc="Python 2 bindings for GObject2" + depends=('glib2' 'pygobject2-devel' 'python2') + replaces=('pygobject') + provides=("pygobject=$pkgver") + + cd "${srcdir}/python2-build" + make DESTDIR="${pkgdir}" install + + find "$pkgdir"/usr/share/pygobject -name '*.py' | \ + xargs sed -i "s|#![ ]*/usr/bin/env python$|#!/usr/bin/env python2|" + + # Split devel stuff + mv "$pkgdir"/usr/{include,lib/pkgconfig,share/{gtk-doc,pygobject/xsl}} \ + "$srcdir/devel/" +} + +package_pygobject2-devel() { + pkgdesc="Development files for the pygobject bindings" + + cd "${srcdir}/devel" + mkdir -p "$pkgdir"/usr/{include,lib,share/pygobject} + + mv include "$pkgdir/usr/" + mv pkgconfig "$pkgdir/usr/lib/" + mv gtk-doc "$pkgdir/usr/share/" + mv xsl "$pkgdir/usr/share/pygobject/" +} diff --git a/staging/pygobject2/python2-fix-type.patch b/staging/pygobject2/python2-fix-type.patch new file mode 100644 index 000000000..78e7ddfd5 --- /dev/null +++ b/staging/pygobject2/python2-fix-type.patch @@ -0,0 +1,50 @@ +From 42d01f060c5d764baa881d13c103d68897163a49 Mon Sep 17 00:00:00 2001 +From: Ryan Lortie <desrt@desrt.ca> +Date: Mon, 12 Mar 2012 16:44:14 -0400 +Subject: gio-types.defs: change some enums to flags + +These flags types were originally incorrectly handled in glib as being +enums. That bug was fixed, but they're still enums here, leading to +warnings about the mismatch. + +Change them to flags. + +https://bugzilla.gnome.org/show_bug.cgi?id=668522 +--- + gio/gio-types.defs | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/gio/gio-types.defs b/gio/gio-types.defs +index 331e0bc..7eee5c8 100644 +--- a/gio/gio-types.defs ++++ b/gio/gio-types.defs +@@ -526,7 +526,7 @@ + ) + ) + +-(define-enum MountMountFlags ++(define-flags MountMountFlags + (in-module "gio") + (c-name "GMountMountFlags") + (gtype-id "G_TYPE_MOUNT_MOUNT_FLAGS") +@@ -545,7 +545,7 @@ + ) + ) + +-(define-enum DriveStartFlags ++(define-flags DriveStartFlags + (in-module "gio") + (c-name "GDriveStartFlags") + (gtype-id "G_TYPE_DRIVE_START_FLAGS") +@@ -770,7 +770,7 @@ + ) + ) + +-(define-enum SocketMsgFlags ++(define-flags SocketMsgFlags + (in-module "gio") + (c-name "GSocketMsgFlags") + (gtype-id "G_TYPE_SOCKET_MSG_FLAGS") +-- +1.7.9.1 + diff --git a/staging/pygobject2/python3-fix-build.patch b/staging/pygobject2/python3-fix-build.patch new file mode 100644 index 000000000..4cb8cfe57 --- /dev/null +++ b/staging/pygobject2/python3-fix-build.patch @@ -0,0 +1,34 @@ +From e2dc4ac346a16b6976b92e84819c7203629beb4a Mon Sep 17 00:00:00 2001 +From: Ignacio Casal Quinteiro <icq@gnome.org> +Date: Thu, 21 Apr 2011 14:52:20 +0000 +Subject: [python3] fix build. PYcairo_IMPORT doesn't exists anymore + +--- +diff --git a/gi/pygi-foreign-cairo.c b/gi/pygi-foreign-cairo.c +index 81b9865..edf52d7 100644 +--- a/gi/pygi-foreign-cairo.c ++++ b/gi/pygi-foreign-cairo.c +@@ -30,7 +30,7 @@ + #include <pycairo/py3cairo.h> + #endif + +-Pycairo_CAPI_t *Pycairo_CAPI; ++static Pycairo_CAPI_t *Pycairo_CAPI; + + #include "pygi-foreign.h" + +@@ -117,7 +117,12 @@ cairo_surface_release (GIBaseInfo *base_info, + static PyMethodDef _gi_cairo_functions[] = {0,}; + PYGLIB_MODULE_START(_gi_cairo, "_gi_cairo") + { ++#if PY_VERSION_HEX < 0x03000000 + Pycairo_IMPORT; ++#else ++ Pycairo_CAPI = (Pycairo_CAPI_t*) PyCObject_Import("cairo", "CAPI"); ++#endif ++ + if (Pycairo_CAPI == NULL) + return PYGLIB_MODULE_ERROR_RETURN; + +-- +cgit v0.9 diff --git a/staging/pygobject2/python3-fix-maketrans.patch b/staging/pygobject2/python3-fix-maketrans.patch new file mode 100644 index 000000000..f5bc0e77c --- /dev/null +++ b/staging/pygobject2/python3-fix-maketrans.patch @@ -0,0 +1,36 @@ +From 667bec76ccbc85cc1d54a0e68977dbda241c028c Mon Sep 17 00:00:00 2001 +From: Martin Pitt <martin.pitt@ubuntu.com> +Date: Wed, 13 Jul 2011 06:42:22 +0000 +Subject: [python3] Fix maketrans import + +Python3 moved the maketrans() function from the string module to a str method. +This unbreaks gi/module.py for Python 3 again. +--- +diff --git a/gi/module.py b/gi/module.py +index 70df76c..d56bdaf 100644 +--- a/gi/module.py ++++ b/gi/module.py +@@ -24,7 +24,11 @@ from __future__ import absolute_import + + import os + import gobject +-import string ++try: ++ maketrans = ''.maketrans ++except AttributeError: ++ # fallback for Python 2 ++ from string import maketrans + + import gi + from .overrides import registry +@@ -124,7 +128,7 @@ class IntrospectionModule(object): + # Don't use upper() here to avoid locale specific + # identifier conversion (e. g. in Turkish 'i'.upper() == 'i') + # see https://bugzilla.gnome.org/show_bug.cgi?id=649165 +- ascii_upper_trans = string.maketrans( ++ ascii_upper_trans = maketrans( + 'abcdefgjhijklmnopqrstuvwxyz', + 'ABCDEFGJHIJKLMNOPQRSTUVWXYZ') + for value_info in info.get_values(): +-- +cgit v0.9 diff --git a/staging/pyopenssl/PKGBUILD b/staging/pyopenssl/PKGBUILD new file mode 100644 index 000000000..12bf75be8 --- /dev/null +++ b/staging/pyopenssl/PKGBUILD @@ -0,0 +1,46 @@ +# $Id: PKGBUILD 168651 2012-10-13 20:29:33Z eric $ +# Maintainer : Ionut Biru<ibiru@archlinux.org> +# Contributor: Sergej Pupykin <pupykin.s+arch@gmail.com> + +pkgbase=pyopenssl +pkgname=('python-pyopenssl' 'python2-pyopenssl') +pkgver=0.13 +pkgrel=2 +arch=('i686' 'x86_64') +url="http://pypi.python.org/pypi/pyOpenSSL" +license=('LGPL2.1') +makedepends=('python' 'python2' 'openssl') +source=(http://pypi.python.org/packages/source/p/pyOpenSSL/pyOpenSSL-${pkgver}.tar.gz) +md5sums=('767bca18a71178ca353dff9e10941929') + +build() { + cd "${srcdir}" + cp -a "pyOpenSSL-${pkgver}"{,-python2} + + #build python 3 module + cd "pyOpenSSL-${pkgver}" + python setup.py build + + #build python 2 module + cd ../"pyOpenSSL-${pkgver}-python2" + python2 setup.py build +} + +package_python-pyopenssl(){ + pkgdesc="Python3 wrapper module around the OpenSSL library" + depends=('python>=3.3' 'openssl') + replaces=('pyopenssl') + provides=('pyopenssl') + conflicts=('pyopenssl') + + cd "${srcdir}/pyOpenSSL-${pkgver}" + python setup.py install --root "${pkgdir}" --optimize=1 +} + +package_python2-pyopenssl(){ + pkgdesc="Python2 wrapper module around the OpenSSL library" + depends=('python2>=2.7' 'openssl') + + cd "${srcdir}/pyOpenSSL-${pkgver}-python2" + python2 setup.py install --root "${pkgdir}" --optimize=1 +} diff --git a/staging/pyqt/PKGBUILD b/staging/pyqt/PKGBUILD index 8fba65343..6f3b1a230 100644 --- a/staging/pyqt/PKGBUILD +++ b/staging/pyqt/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 167324 2012-10-01 06:53:33Z andrea $ +# $Id: PKGBUILD 168744 2012-10-15 09:20:47Z andrea $ # Maintainer: Andrea Scarpino <andrea@archlinux.org> # Contributor: Douglas Soares de Andrade <douglas@archlinux.org> # Contributor: riai <riai@bigfoot.com> Ben <ben@benmazer.net> @@ -6,13 +6,13 @@ pkgbase=pyqt pkgname=('pyqt-common' 'pyqt' 'python2-pyqt') pkgver=4.9.5 -pkgrel=1 +pkgrel=2 arch=('i686' 'x86_64') url="http://riverbankcomputing.co.uk/software/pyqt/intro" license=('GPL') makedepends=('qt' 'python-sip' 'python-dbus' 'python2-sip' 'phonon' 'python2-opengl' 'qt-assistant-compat' 'qtwebkit' 'python2-dbus') - source=("http://downloads.sourceforge.net/${pkgbase}/PyQt-x11-gpl-${pkgver}.tar.gz") +source=("http://downloads.sourceforge.net/${pkgbase}/PyQt-x11-gpl-${pkgver}.tar.gz") md5sums=('e4cdd6619c63655f7510efb4df8462fb') build() { @@ -47,7 +47,6 @@ package_pyqt-common(){ cd PyQt-x11-gpl-${pkgver} make -C pyrcc DESTDIR="${pkgdir}" install make -C pylupdate DESTDIR="${pkgdir}" install - make -C designer INSTALL_ROOT="${pkgdir}" install install -Dm644 PyQt4.api "${pkgdir}"/usr/share/qt/qsci/api/python/PyQt4.api } @@ -65,7 +64,6 @@ package_pyqt(){ # Provided by pyqt-common rm "${pkgdir}"/usr/bin/{pylupdate4,pyrcc4} - rm "${pkgdir}"/usr/lib/qt/plugins/designer/libpythonplugin.so rm "${pkgdir}"/usr/share/qt/qsci/api/python/PyQt4.api } @@ -85,7 +83,7 @@ package_python2-pyqt(){ # Fix conflicts with pyqt mv "${pkgdir}"/usr/bin/{,python2-}pyuic4 - # Provided by pyqt-common + # Provided by pyqt rm "${pkgdir}"/usr/bin/{pylupdate4,pyrcc4} rm "${pkgdir}"/usr/lib/qt/plugins/designer/libpythonplugin.so rm "${pkgdir}"/usr/share/qt/qsci/api/python/PyQt4.api diff --git a/staging/python-egenix-mx-base/PKGBUILD b/staging/python-egenix-mx-base/PKGBUILD new file mode 100644 index 000000000..f48fd8fb8 --- /dev/null +++ b/staging/python-egenix-mx-base/PKGBUILD @@ -0,0 +1,31 @@ +# $Id: PKGBUILD 168671 2012-10-13 23:05:54Z stephane $ +# Maintainer: Stéphane Gaudreault <stephane@archlinux.org> +# Contributor: Douglas Soares de Andrade <douglas@archlinux.org> + +pkgbase=python-egenix-mx-base +pkgname=('python2-egenix-mx-base') +_origname=egenix-mx-base +pkgver=3.2.4 +pkgrel=2 +pkgdesc="A collection of Python tools" +arch=('i686' 'x86_64') +license=('custom') +url="http://www.egenix.com/products/python/mxBase/" +makedepends=('python2') +source=("http://downloads.egenix.com/python/${_origname}-${pkgver}.tar.gz") +sha1sums=('22d7fcbd582177f9a43245eadc3644f3b48cc9a7') + +build() { + cd "${srcdir}/${_origname}-${pkgver}" + + find . -name \*.py -exec sed -i -e "s|^#!.*python|#!/usr/bin/python2|" {} \; + + python2 setup.py build +} + +package_python2-egenix-mx-base() { + depends=('python2>=2.7') + cd "${srcdir}/${_origname}-${pkgver}" + python2 setup.py install --root="${pkgdir}" --skip-build --optimize=1 + install -D -m644 COPYRIGHT "${pkgdir}"/usr/share/licenses/${pkgname}/LICENSE +} diff --git a/staging/python-iwscan/PKGBUILD b/staging/python-iwscan/PKGBUILD new file mode 100644 index 000000000..3abb6747e --- /dev/null +++ b/staging/python-iwscan/PKGBUILD @@ -0,0 +1,26 @@ +# $Id: PKGBUILD 168715 2012-10-14 20:19:42Z eric $ +# Maintainer: Daniel Isenmann <daniel@archlinux.org> + +pkgbase=python-iwscan +pkgname=python2-iwscan +pkgver=20090609 +pkgrel=4 +pkgdesc="A Python interface to iwlist, using the iwlib library" +arch=('i686' 'x86_64') +url="http://projects.otaku42.de/browser/python-iwscan" +license=('LGPL') +depends=('python2' 'wireless_tools') +conflicts=('python-iwscan<=20090609-3') +replaces=('python-iwscan<=20090609-3') +source=(ftp://ftp.archlinux.org/other/${pkgbase}/${pkgbase}-20090609.tar.gz) +md5sums=('30fbe8ad3b07e67c1c35db2de16077d8') + +build() { + cd "${srcdir}/${pkgbase}" + python2 setup.py build +} + +package_python2-iwscan() { + cd "${srcdir}/${pkgbase}" + python2 setup.py install --root="${pkgdir}" +} diff --git a/staging/python-markupsafe/PKGBUILD b/staging/python-markupsafe/PKGBUILD new file mode 100644 index 000000000..0ead0adad --- /dev/null +++ b/staging/python-markupsafe/PKGBUILD @@ -0,0 +1,41 @@ +# $Id: PKGBUILD 168655 2012-10-13 20:45:16Z eric $ +# Maintainer : Ionut Biru <ibiru@archlinux.org> +# Contributor: Alex Anthony <alex.anthony28991@gmail.com> + +pkgname=('python-markupsafe' 'python2-markupsafe') +pkgver=0.15 +pkgrel=2 +pkgdesc="Implements a XML/HTML/XHTML Markup safe string for Python" +arch=('i686' 'x86_64') +url="http://pypi.python.org/pypi/MarkupSafe" +license=('custom') +makedepends=('python-distribute' 'python2-distribute') +source=("http://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-${pkgver}.tar.gz") +md5sums=('4e7c4d965fe5e033fa2d7bb7746bb186') + +build() { + cp -r MarkupSafe-${pkgver} python2-MarkupSafe-${pkgver} + cd "${srcdir}/MarkupSafe-${pkgver}" + python setup.py build + + cd "${srcdir}/python2-MarkupSafe-${pkgver}" + python2 setup.py build +} + +package_python-markupsafe() { + depends=('python') + + cd "${srcdir}/MarkupSafe-${pkgver}" + python setup.py install --root="${pkgdir}" --optimize=1 + + install -D -m644 LICENSE "${pkgdir}/usr/share/licenses/python-markupsafe/LICENSE" +} + +package_python2-markupsafe() { + depends=('python2') + + cd "${srcdir}/python2-MarkupSafe-${pkgver}" + python2 setup.py install --root="${pkgdir}" --optimize=1 + + install -D -m644 LICENSE "${pkgdir}/usr/share/licenses/python2-markupsafe/LICENSE" +} diff --git a/staging/python-notify/PKGBUILD b/staging/python-notify/PKGBUILD new file mode 100644 index 000000000..6cf46c8dc --- /dev/null +++ b/staging/python-notify/PKGBUILD @@ -0,0 +1,43 @@ +# $Id: PKGBUILD 168721 2012-10-14 20:45:08Z eric $ +# Maintainer: Angel Velasquez <angvp@archlinux.org> + +pkgbase=python-notify +pkgname=python2-notify +pkgver=0.1.1 +pkgrel=12 +pkgdesc="Python bindings for libnotify" +arch=('i686' 'x86_64') +url="http://www.galago-project.org/" +license=('GPL') +depends=('pygtk>=2.22.0' 'libnotify>=0.7.1') +makedepends=('python2') +conflicts=('python-notify<=0.1.1-11') +replaces=('python-notify<=0.1.1-11') +options=(!libtool) +source=(http://www.galago-project.org/files/releases/source/notify-python/notify-python-${pkgver}.tar.gz + libnotify07.patch + notify-python-0.1.1-fix-GTK-symbols.patch) +md5sums=('8f0ef0939cc8edd2efd896ce5ba80cf4' + 'b40c4542575d5aef559908fe60a21634' + 'c6922028da5951e69a6a0167bdb4461c') + +build() { + cd "${srcdir}/notify-python-${pkgver}" + + patch -Np1 -i "${srcdir}/libnotify07.patch" + patch -Np1 -i "${srcdir}/notify-python-0.1.1-fix-GTK-symbols.patch" + + ./configure --prefix=/usr + + # WARNING - we touch src/pynotify.override in build because upstream did not rebuild pynotify.c + # from the input definitions, this forces pynotify.c to be regenerated, at some point this can be removed + touch src/pynotify.override + + make clean + make +} + +package_python2-notify() { + cd "${srcdir}/notify-python-${pkgver}" + make DESTDIR="${pkgdir}" install +} diff --git a/staging/python-notify/libnotify07.patch b/staging/python-notify/libnotify07.patch new file mode 100644 index 000000000..289573d50 --- /dev/null +++ b/staging/python-notify/libnotify07.patch @@ -0,0 +1,36 @@ +diff -up notify-python-0.1.1/src/pynotify.defs.notify070 notify-python-0.1.1/src/pynotify.defs +--- notify-python-0.1.1/src/pynotify.defs.notify070 2010-11-02 17:11:14.928179237 -0400 ++++ notify-python-0.1.1/src/pynotify.defs 2010-11-02 17:11:51.153180231 -0400 +@@ -38,7 +38,6 @@ + '("const-gchar*" "summary") + '("const-gchar*" "message" (null-ok) (default "NULL")) + '("const-gchar*" "icon" (null-ok) (default "NULL")) +- '("GtkWidget*" "attach" (null-ok) (default "NULL")) + ) + ) + +@@ -53,24 +52,6 @@ + ) + ) + +-(define-method attach_to_widget +- (of-object "NotifyNotification") +- (c-name "notify_notification_attach_to_widget") +- (return-type "none") +- (parameters +- '("GtkWidget*" "attach") +- ) +-) +- +-(define-method attach_to_status_icon +- (of-object "NotifyNotification") +- (c-name "notify_notification_attach_to_status_icon") +- (return-type "none") +- (parameters +- '("GtkStatusIcon*" "attach") +- ) +-) +- + (define-method show + (of-object "NotifyNotification") + (c-name "notify_notification_show") diff --git a/staging/python-notify/notify-python-0.1.1-fix-GTK-symbols.patch b/staging/python-notify/notify-python-0.1.1-fix-GTK-symbols.patch new file mode 100644 index 000000000..f985c0136 --- /dev/null +++ b/staging/python-notify/notify-python-0.1.1-fix-GTK-symbols.patch @@ -0,0 +1,25 @@ +diff -up notify-python-0.1.1/src/__init__.py.BAD notify-python-0.1.1/src/__init__.py +--- notify-python-0.1.1/src/__init__.py.BAD 2010-08-31 09:04:45.353844005 -0400 ++++ notify-python-0.1.1/src/__init__.py 2010-08-31 09:04:49.281844300 -0400 +@@ -1 +1,21 @@ ++""" ++Fedora's libnotify.so is not linked against GTK2 or GTK3. The idea ++was to support being linked against different parallel-installable ++GTK stacks. ++ ++Unfortunately, python needs to jump through some special hoops in order ++to share symbols with extension modules, specifically, pygtk, which does ++link against GTK2. ++ ++Without using sys.setdlopenflags(sys.getdlopenflags() | ctypes.RTLD_GLOBAL), ++the result is: ++libnotify-WARNING **: Missing symbol 'gdk_screen_make_display_name' ++ ++Thanks to David Malcolm for figuring out the workaround. ++""" ++import ctypes ++import sys ++sys.setdlopenflags(sys.getdlopenflags() | ctypes.RTLD_GLOBAL) ++import gtk ++ + from _pynotify import * diff --git a/staging/python-pyspi/PKGBUILD b/staging/python-pyspi/PKGBUILD new file mode 100644 index 000000000..e230fd562 --- /dev/null +++ b/staging/python-pyspi/PKGBUILD @@ -0,0 +1,32 @@ +# $Id: PKGBUILD 168788 2012-10-16 00:26:49Z allan $ +# Maintainer: Jan de Groot <jgc@archlinux.org> +# Contributor: William Rea <sillywilly@gmail.com> + +pkgbase=python-pyspi +pkgname=python2-pyspi +pkgver=0.6.1 +pkgrel=1 +pkgdesc="Python AT-SPI bindings" +arch=('i686' 'x86_64') +url="http://people.redhat.com/zcerza/dogtail" +license=('LGPL') +depends=('python2' 'at-spi') +makedepends=('pyrex') +conflicts=('python-pyspi<=0.6.1-5') +conflicts=('python-pyspi<=0.6.1-5') +source=("http://dlc.sun.com/osol/jds/downloads/sources/pyspi-${pkgver}.tar.gz" + 'pyspi-build.patch') +md5sums=('def336bd566ea688a06ec03db7ccf1f4' + '721f74cbae653a258c00b83acf7dd1da') + +build() { + cd ${srcdir}/pyspi-${pkgver} + patch -Np1 -i ${srcdir}/pyspi-build.patch + # Pyrex tells us to use __cinit__ instead of __new__ + sed -i 's/__new__/__cinit__/' pyspi.pyx +} + +package_python2-pyspi() { + cd ${srcdir}/pyspi-${pkgver} + python2 setup.py install --root=${pkgdir} +} diff --git a/staging/python-pyspi/pyspi-build.patch b/staging/python-pyspi/pyspi-build.patch new file mode 100644 index 000000000..3d12c5ed5 --- /dev/null +++ b/staging/python-pyspi/pyspi-build.patch @@ -0,0 +1,1693 @@ +diff -Naur pyspi-0.6.1-old/cspi.pxd pyspi-0.6.1/cspi.pxd +--- pyspi-0.6.1-old/cspi.pxd 2006-08-04 06:27:10.000000000 +1000 ++++ pyspi-0.6.1/cspi.pxd 2009-05-09 15:24:31.000000000 +1000 +@@ -14,9 +14,7 @@ + + ctypedef struct AccessibleTextRange + ctypedef struct AccessibleKeySet +- ctypedef enum SPIBoolean: +- FALSE = 0, +- TRUE ++ ctypedef unsigned int SPIBoolean + + ctypedef struct AccessibleEvent: + char *type +diff -Naur pyspi-0.6.1-old/pyspi.pyx pyspi-0.6.1/pyspi.pyx +--- pyspi-0.6.1-old/pyspi.pyx 2006-10-03 02:46:41.000000000 +1000 ++++ pyspi-0.6.1/pyspi.pyx 2009-05-09 15:24:31.000000000 +1000 +@@ -25,9 +25,15 @@ + cdef class Event (EventBase) + cdef class DeviceEvent + +-ctypedef enum bool: ++ctypedef unsigned int bool ++ ++import __builtin__ ++try: ++ False = __builtin__.False ++ True = __builtin__.True ++except AttributeError: + False = 0 +- True ++ True = 1 + + # SPIExceptionCode values: + (SPI_EXCEPTION_UNSPECIFIED, SPI_EXCEPTION_DISCONNECT, SPI_EXCEPTION_NO_IMPL, SPI_EXCEPTION_IO, SPI_EXCEPTION_BAD_DATA)=range(5) +@@ -731,7 +737,7 @@ + Wrapper around the low-level cspi.AccessibleComponent_ functions, + giving an OO-style API. + """ +- def getExtents (self, type=0): ++ def getExtents (self, key_type=0): + """ + Wraps cspi.AccessibleComponent_getExtents, returning an + (x,y,w,h) tuple. +@@ -741,7 +747,7 @@ + cspi.AccessibleComponent_getExtents (self.__item, &x, &y, &w, &h, type) + return (x, y, w, h) + +- def getPosition (self, type = 0): ++ def getPosition (self, key_type = 0): + """ + Wraps cspi.AccessibleComponent_getPosition, returning an + (x,y) tuple. +@@ -991,11 +997,11 @@ + Wraps cspi.AccessibleHyperlink_getObject + """ + self.__checkSelf () +- cdef Accessible object +- object = Accessible () +- object.__setItem (cspi.AccessibleHyperlink_getObject (self.__item, i)) +- object.__checkSelf () +- return object ++ cdef Accessible obj ++ obj = Accessible () ++ obj.__setItem (cspi.AccessibleHyperlink_getObject (self.__item, i)) ++ obj.__checkSelf () ++ return obj + + def getURI (self, i): + """ +@@ -1032,7 +1038,7 @@ + cspi.AccessibleImage_getImageSize(self.__item, &w, &h); + return [w, h] + +- def getImagePosition (self, type=0): ++ def getImagePosition (self, key_type=0): + """ + Wraps cspi.AccessibleImage_getImagePosition, returning a (x,y) + pair +@@ -1042,7 +1048,7 @@ + cspi.AccessibleImage_getImagePosition(self.__item, &x, &y, type) + return [x, y] + +- def getImageExtents (self, type=0): ++ def getImageExtents (self, key_type=0): + """ + Wraps cspi.AccessibleImage_getImageExtents, returning a + (x,y,w,h) tuple +@@ -1551,7 +1557,7 @@ + cdef cspi.AccessibleDeviceListener *__item + cdef public object modMasks + +- def __init__ (self, callback, eventMask = cspi.SPI_KEY_PRESSED | cspi.SPI_KEY_RELEASED): ++ def __init__ (self, callback, eventMask = <int> cspi.SPI_KEY_PRESSED | <int> cspi.SPI_KEY_RELEASED): + """ + Registers a python callback function to be called. + +diff -Naur pyspi-0.6.1-old/pyspi.pyx.orig pyspi-0.6.1/pyspi.pyx.orig +--- pyspi-0.6.1-old/pyspi.pyx.orig 1970-01-01 10:00:00.000000000 +1000 ++++ pyspi-0.6.1/pyspi.pyx.orig 2006-10-03 02:46:41.000000000 +1000 +@@ -0,0 +1,1592 @@ ++# Authors: ++# Zack Cerza <zcerza@redhat.com> ++# Chris Lee <clee@redhat.com> ++# Lawrence Lim <llim@redhat.com> ++# David Malcolm <dmalcolm@redhat.com> ++ ++cdef class Registry ++ ++cdef class Base ++cdef class EventBase ++cdef class StateSet ++cdef class Accessible (Base) ++cdef class Desktop (Accessible) ++cdef class Application (Accessible) ++cdef class Component (Accessible) ++cdef class Action (Base) ++cdef class Text (Base) ++cdef class EditableText (Text) ++cdef class Hypertext (Text) ++cdef class Hyperlink (Base) ++cdef class Image (Base) ++cdef class Value (Base) ++cdef class Selection (Base) ++cdef class Table (Base) ++cdef class Event (EventBase) ++cdef class DeviceEvent ++ ++ctypedef enum bool: ++ False = 0 ++ True ++ ++# SPIExceptionCode values: ++(SPI_EXCEPTION_UNSPECIFIED, SPI_EXCEPTION_DISCONNECT, SPI_EXCEPTION_NO_IMPL, SPI_EXCEPTION_IO, SPI_EXCEPTION_BAD_DATA)=range(5) ++ ++# SPIExceptionType values: ++(SPI_EXCEPTION_SOURCE_UNSPECIFIED, SPI_EXCEPTION_SOURCE_ACCESSIBLE, SPI_EXCEPTION_SOURCE_REGISTRY, SPI_EXCEPTION_SOURCE_DEVICE)=range(4) ++ ++# Accessible roles ++(SPI_ROLE_INVALID, SPI_ROLE_ACCEL_LABEL, SPI_ROLE_ALERT, SPI_ROLE_ANIMATION, SPI_ROLE_ARROW, SPI_ROLE_CALENDAR, SPI_ROLE_CANVAS, SPI_ROLE_CHECK_BOX, SPI_ROLE_CHECK_MENU_ITEM, SPI_ROLE_COLOR_CHOOSER, SPI_ROLE_COLUMN_HEADER, SPI_ROLE_COMBO_BOX, SPI_ROLE_DATE_EDITOR, SPI_ROLE_DESKTOP_ICON, SPI_ROLE_DESKTOP_FRAME, SPI_ROLE_DIAL, SPI_ROLE_DIALOG, SPI_ROLE_DIRECTORY_PANE, SPI_ROLE_DRAWING_AREA, SPI_ROLE_FILE_CHOOSER, SPI_ROLE_FILLER, SPI_ROLE_FONT_CHOOSER, SPI_ROLE_FRAME, SPI_ROLE_GLASS_PANE, SPI_ROLE_HTML_CONTAINER, SPI_ROLE_ICON, SPI_ROLE_IMAGE, SPI_ROLE_INTERNAL_FRAME, SPI_ROLE_LABEL, SPI_ROLE_LAYERED_PANE, SPI_ROLE_LIST, SPI_ROLE_LIST_ITEM, SPI_ROLE_MENU, SPI_ROLE_MENU_BAR, SPI_ROLE_MENU_ITEM, SPI_ROLE_OPTION_PANE, SPI_ROLE_PAGE_TAB, SPI_ROLE_PAGE_TAB_LIST, SPI_ROLE_PANEL, SPI_ROLE_PASSWORD_TEXT, SPI_ROLE_POPUP_MENU, SPI_ROLE_PROGRESS_BAR, SPI_ROLE_PUSH_BUTTON, SPI_ROLE_RADIO_BUTTON, SPI_ROLE_RADIO_MENU_ITEM, SPI_ROLE_ROOT_PANE, SPI_ROLE_ROW_HEADER, SPI_ROLE_SCROLL_BAR, SPI_ROLE_SCROLL_PANE, SPI_ROLE_SEPARATOR, SPI_ROLE_SLIDER, SPI_ROLE_SPIN_BUTTON, SPI_ROLE_SPLIT_PANE, SPI_ROLE_STATUS_BAR, SPI_ROLE_TABLE, SPI_ROLE_TABLE_CELL, SPI_ROLE_TABLE_COLUMN_HEADER, SPI_ROLE_TABLE_ROW_HEADER, SPI_ROLE_TEAROFF_MENU_ITEM, SPI_ROLE_TERMINAL, SPI_ROLE_TEXT, SPI_ROLE_TOGGLE_BUTTON, SPI_ROLE_TOOL_BAR, SPI_ROLE_TOOL_TIP, SPI_ROLE_TREE, SPI_ROLE_TREE_TABLE, SPI_ROLE_UNKNOWN, SPI_ROLE_VIEWPORT, SPI_ROLE_WINDOW, SPI_ROLE_EXTENDED, SPI_ROLE_HEADER, SPI_ROLE_FOOTER, SPI_ROLE_PARAGRAPH, SPI_ROLE_RULER, SPI_ROLE_APPLICATION, SPI_ROLE_AUTOCOMPLETE, SPI_ROLE_EDITBAR, SPI_ROLE_EMBEDDED, SPI_ROLE_LAST_DEFINED)=range(79) ++ ++# Accessible states ++(SPI_STATE_INVALID, SPI_STATE_ACTIVE, SPI_STATE_ARMED, SPI_STATE_BUSY, SPI_STATE_CHECKED, SPI_STATE_COLLAPSED, SPI_STATE_DEFUNCT, SPI_STATE_EDITABLE, SPI_STATE_ENABLED, SPI_STATE_EXPANDABLE, SPI_STATE_EXPANDED, SPI_STATE_FOCUSABLE, SPI_STATE_FOCUSED, SPI_STATE_HORIZONTAL, SPI_STATE_ICONIFIED, SPI_STATE_MODAL, SPI_STATE_MULTI_LINE, SPI_STATE_MULTISELECTABLE, SPI_STATE_OPAQUE, SPI_STATE_PRESSED, SPI_STATE_RESIZABLE, SPI_STATE_SELECTABLE, SPI_STATE_SELECTED, SPI_STATE_SENSITIVE, SPI_STATE_SHOWING, SPI_STATE_SINGLE_LINE, SPI_STATE_STALE, SPI_STATE_TRANSIENT, SPI_STATE_VERTICAL, SPI_STATE_VISIBLE, SPI_STATE_MANAGES_DESCENDANTS, SPI_STATE_INDETERMINATE) = range(32); ++ ++# Accessible relation types ++(SPI_RELATION_NULL, SPI_RELATION_LABEL_FOR, SPI_RELATION_LABELED_BY, SPI_RELATION_CONTROLLER_FOR, SPI_RELATION_CONTROLLED_BY, SPI_RELATION_MEMBER_OF, SPI_RELATION_NODE_CHILD_OF, SPI_RELATION_EXTENDED, SPI_RELATION_FLOWS_TO, SPI_RELATION_FLOWS_FROM, SPI_RELATION_SUBWINDOW_OF, SPI_RELATION_EMBEDS, SPI_RELATION_EMBEDDED_BY, SPI_RELATION_POPUP_FOR, SPI_RELATION_LAST_DEFINED) = range (15); ++ ++# AccessibleComponent layers ++(SPI_LAYER_INVALID, SPI_LAYER_BACKGROUND, SPI_LAYER_CANVAS, SPI_LAYER_WIDGET, SPI_LAYER_MDI, SPI_LAYER_POPUP, SPI_LAYER_OVERLAY, SPI_LAYER_WINDOW, SPI_LAYER_LAST_DEFINED) = range(9) ++ ++#AccessibleKeySynthType ++(SPI_KEY_PRESS, SPI_KEY_RELEASE, SPI_KEY_PRESSRELEASE, SPI_KEY_SYM, SPI_KEY_STRING) = range(5) ++ ++# AccessibleKeyListenerSyncType ++(SPI_KEYLISTENER_NOSYNC, SPI_KEYLISTENER_SYNCHRONOUS, SPI_KEYLISTENER_CANCONSUME, SPI_KEYLISTENER_ALL_WINDOWS) = range(4) ++ ++# AccessibleDeviceEventType ++SPI_KEY_PRESSED = 1<<0 ++SPI_KEY_RELEASED = 1<<1 ++SPI_BUTTON_PRESSED = 1<<2 ++SPI_BUTTON_RELEASED = 1<<3 ++ ++cdef cspi.AccessibleKeySet *SPI_KEYSET_ALL_KEYS ++SPI_KEYSET_ALL_KEYS = NULL ++ ++Accessibility_MODIFIER_SHIFT = 1 << 0 ++Accessibility_MODIFIER_SHIFTLOCK = 1 << 1 ++Accessibility_MODIFIER_CONTROL = 1 << 2 ++Accessibility_MODIFIER_ALT = 1 << 3 ++Accessibility_MODIFIER_META = 1 << 4 ++Accessibility_MODIFIER_META2 = 1 << 5 ++Accessibility_MODIFIER_META3 = 1 << 6 ++Accessibility_MODIFIER_NUMLOCK = 1 << 7 ++ ++ ++cdef object string(char * string): ++ cdef object pyString ++ pyString = string ++ cspi.SPI_freeString(string) ++ return pyString ++ ++import os ++class X11Exception(Exception): ++ def __init__(self, display = os.environ.get('DISPLAY', None)): ++ self.display = display ++ def __str__(self): ++ msg = "Cannot open display" ++ if self.display: return msg + ': ' + self.display ++ else: return msg ++ ++class AtspiException(Exception): ++ """ ++ Exceptions raised when calls to the AT-SPI C bindings return FALSE to ++ indicate failure. ++ """ ++ def __init__(self, message): ++ self.message = message ++ ++ def __str__(self): ++ return "AtspiException: %s"%self.message ++ ++class SpiException(Exception): ++ """ ++ Exceptions to be raised in response to an installed ++ SPIExceptionHandler, corresponding to a SPIException. These appear to ++ be short-lived structs, so we gather all applicable data immediately ++ """ ++ def __init__(self, is_fatal, sourceType, exceptionCode, description): ++ # print "got to __init__" ++ self.fatal = is_fatal ++ self.sourceType = sourceType ++ self.exceptionCode = exceptionCode ++ self.description = description ++ ++ # print "leaving __init__" ++ # print self.fatal ++ # print self.sourceType ++ # print self.exceptionCode ++ # print self.description ++ ++ def __str__(self): ++ if self.fatal: ++ fatalStr = "Fatal" ++ else: ++ fatalStr = "Non-fatal" ++ result = '%s SPIException: type:%s source:%s "%s"'%(fatalStr, self.sourceType, self.exceptionCode, self.description) ++ return result ++ ++cdef make_exception(cspi.SPIException *err, cspi.SPIBoolean is_fatal): ++ # Don't attempt to use SPIAccessibleException_getSource; this is error ++ # handling code, we don't want to introduce further complications ++ return SpiException(is_fatal, ++ cspi.SPIException_getSourceType (err), ++ cspi.SPIException_getExceptionCode (err), ++ cspi.SPIException_getDescription (err)) ++ ++ ++def event_main(): ++ cspi.SPI_event_main() ++ ++def event_quit(): ++ cspi.SPI_event_quit() ++ ++cdef cspi.SPIBoolean exception_handler (cspi.SPIException *err, cspi.SPIBoolean is_fatal) except *: ++ # print "got exception!!!" ++ e = make_exception(err, is_fatal) ++ raise e ++ ++# at-spi-<version>/cpsi.h contains: ++# typedef SPIBoolean (*SPIExceptionHandler) (SPIException *err, SPIBoolean is_fatal); ++# and ++# SPIBoolean SPI_exceptionHandlerPush (SPIExceptionHandler *handler); ++# There's thus an extra unnecessary level of indirection. ++# We have to jump through the following hoops to get pyrex to deal with this: ++cdef cspi.SPIExceptionHandler exception_handler_as_type ++cdef cspi.SPIExceptionHandler* exception_handler_ptr ++exception_handler_as_type = exception_handler ++exception_handler_ptr = &exception_handler_as_type ++ ++global_exception = None ++ ++cdef class Registry: ++ def __init__ (self): ++ cdef Xlib.Display *display ++ display = Xlib.XOpenDisplay(NULL) ++ if display == NULL: ++ raise X11Exception ++ else: ++ Xlib.XCloseDisplay(display) ++ ++ result = cspi.SPI_init () ++ #if result!=0: ++ # raise AtspiException("SPI_init: exit code %s" % str(result)) ++ ++ result = cspi.SPI_exceptionHandlerPush (exception_handler_ptr) ++ if not result: ++ raise AtspiException("Unable to install SPI exception handler") ++ ++ def __dealloc (self): ++ result = cspi.SPI_exit () ++ if result!=0: ++ raise AtspiException("SPI_init: exit code %s" % str(result)) ++ ++ def getDesktopCount (self): ++ return cspi.SPI_getDesktopCount() ++ ++ def getDesktop (self, index = 0): ++ cdef Desktop desktop ++ desktop = Desktop () ++ if not desktop.__setItem (cspi.SPI_getDesktop (index)): ++ return False ++ return desktop ++ ++ def getDesktopList (self): ++ # Using the bonobo.activation bindings, getDesktopList() returns a ++ # Python list of Desktop objects. The C bindings seem to do it differently, ++ # and Pyrex doesn't like that method. So we're re-implementing the function ++ # using getDesktopCount() and getDesktop() to work around that. ++ # Yay for Zack! ++ # ++ # -Zack ++ cdef Desktop desktop ++ desktops = [] ++ desktop = Desktop () ++ for i in xrange (cspi.SPI_getDesktopCount ()): ++ desktop.__setItem (cspi.SPI_getDesktop (i)) ++ desktops = desktops + [desktop] ++ return desktops ++ ++registry = Registry() ++ ++cdef class Base: ++ """ ++ Wrapper around a cspi.Accessible ++ """ ++ ++ cdef cspi.Accessible *__item ++ ++ def __new__ (self): ++ self.__item = NULL ++ ++ def __dealloc__ (self): ++ if self.__item != NULL: ++ cspi.Accessible_unref (self.__item) ++ ++ cdef bool __setItem (self, cspi.Accessible *obj): ++ if self.__item != NULL: ++ cspi.Accessible_unref (self.__item) ++ if obj != NULL: ++ self.__item = obj ++ cspi.Accessible_ref (self.__item) ++ return True ++ else: ++ return False ++ ++ def __checkSelf (self): ++ assert self.__item != NULL ++ ++# WHY OH WHY won't this work? :( ++# I need to be able to find out of two Accessible classes contain ++# the same cspi.Accessible objects. ++# ++# def isSameAs (self, base): ++# cdef bool foo ++# foo = self.__item == base.__item ++# return foo ++ ++cdef class EventBase: ++ """ ++ Wrapper around a cspi.AccessibleEvent ++ """ ++ cdef cspi.AccessibleEvent *__item ++ ++ def __new__ (self): ++ self.__item = NULL ++ ++ def __dealloc__ (self): ++ if self.__item != NULL: ++ cspi.AccessibleEvent_unref (self.__item) ++ ++ cdef bool __setItem (self, cspi.AccessibleEvent *obj): ++ if self.__item != NULL: ++ cspi.AccessibleEvent_unref (self.__item) ++ if obj != NULL: ++ self.__item = obj ++ cspi.AccessibleEvent_ref (self.__item) ++ return True ++ else: ++ return False ++ ++ def __checkSelf (self): ++ if self.__item == NULL: ++ raise AttributeError, "__item must not be NULL" ++ ++ def __getattr__ (self, attrName): ++ cdef cspi.Accessible* acc ++ cdef Accessible result ++ if attrName == "source": ++ acc = self.__item.source ++ if acc!=NULL: ++ result = Accessible () ++ result.__setItem (acc) ++ return result ++ elif attrName == "detail1": ++ detail1 = self.__item.detail1 ++ return detail1 ++ elif attrName == "detail2": ++ detail1 = self.__item.detail2 ++ return detail1 ++ elif attrName == "type": ++ return self.__item.type ++ ++cdef class StateSet: ++ """ ++ Wrapper around a cspi.AccessibleStateSet ++ """ ++ cdef cspi.AccessibleStateSet *__item ++ ++ def __new__ (self): ++ self.__item = NULL ++ ++ def __dealloc__ (self): ++ if self.__item != NULL: ++ cspi.AccessibleStateSet_unref (self.__item) ++ ++ def __checkSelf (self): ++ if self.__item == NULL: ++ raise AttributeError, "__item must not be NULL" ++ ++ cdef bool __setItem (self, cspi.AccessibleStateSet *obj): ++ if self.__item != NULL: ++ cspi.AccessibleStateSet_unref (self.__item) ++ if obj != NULL: ++ self.__item = obj ++ cspi.AccessibleStateSet_ref (self.__item) ++ return True ++ else: ++ return False ++ ++ cdef bool __contains (self, cspi.AccessibleState s): ++ self.__checkSelf () ++ return cspi.AccessibleStateSet_contains (self.__item, s) ++ ++ def contains (self, state): ++ self.__checkSelf () ++ return self.__contains(state) ++ ++ cdef void __add (self, cspi.AccessibleState s): ++ self.__checkSelf () ++ cspi.AccessibleStateSet_add(self.__item, s) ++ ++ def add (self, state): ++ self.__checkSelf () ++ self.__add (state) ++ ++ cdef void __remove (self, cspi.AccessibleState s): ++ self.__checkSelf () ++ cspi.AccessibleStateSet_remove (self.__item, s) ++ ++ def remove (self, state): ++ self.__checkSelf () ++ self.__remove (state) ++ ++ def __str__ (self): ++ self.__checkSelf () ++ return str(self.states) ++ ++ def __getattr__(self, name): ++ if name == "states": ++ result = [] ++ for state in range(SPI_STATE_INVALID, SPI_STATE_INDETERMINATE): ++ if self.contains(state): ++ result.append(state) ++ return result ++ else: ++ raise AttributeError, name ++ ++cdef class Relation: ++ """ ++ Wrapper around a cspi.AccessibleRelation ++ """ ++ cdef cspi.AccessibleRelation *__item ++ ++ def __new__ (self): ++ self.__item = NULL ++ ++ def __dealloc__ (self): ++ if self.__item != NULL: ++ cspi.AccessibleRelation_unref (self.__item) ++ ++ def __checkSelf (self): ++ if self.__item == NULL: ++ raise AttributeError, "__item must not be NULL" ++ ++ def __str__ (self): ++ self.__checkSelf () ++ return "relation %s -> %s"%(self.getRelationType (), self.getTargets()) ++ ++ def __repr__ (self): ++ self.__checkSelf () ++ return "relation %s -> %s"%(self.getRelationType (), self.getTargets()) ++ ++ cdef bool __setItem (self, cspi.AccessibleRelation *obj): ++ if self.__item != NULL: ++ cspi.AccessibleRelation_unref (self.__item) ++ if obj != NULL: ++ self.__item = obj ++ cspi.AccessibleRelation_ref (self.__item) ++ return True ++ else: ++ return False ++ ++ def getNTargets (self): ++ """ ++ Wrapper around cspi.AccessibleRelation_getNTargets ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleRelation_getNTargets (self.__item) ++ ++ def getTarget (self, i): ++ """ ++ Wrapper around cspi.AccessibleRelation_getTarget ++ """ ++ self.__checkSelf () ++ cdef Accessible target ++ target = Accessible () ++ target.__setItem (cspi.AccessibleRelation_getTarget (self.__item, i)) ++ target.__checkSelf () ++ return target ++ ++ def getTargets (self): ++ """ ++ Gets the targets of this AccessibleRelation as a list of atspi.Accessible ++ """ ++ self.__checkSelf () ++ result = [] ++ count = self.getNTargets() ++ for i in range(count): ++ result.append(self.getTarget(i)) ++ return result ++ ++ def getRelationType (self): ++ """ ++ Wrapper around cspi.AccessibleRelation_getRelationType ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleRelation_getRelationType (self.__item) ++ ++cdef class Accessible (Base): ++ """ ++ Wrapper around cspi.Accessible ++ """ ++ def __getattr__ (self, name): ++ if name == "name": ++ return self.getName () ++ elif name == "role": ++ return self.getRole () ++ elif name == "roleName": ++ return self.getRoleName () ++ elif name == "description": ++ return self.getDescription () ++ elif name == "parent": ++ return self.getParent () ++ elif name == "childCount": ++ return self.getChildCount () ++ elif name == "indexInParent": ++ return self.getIndexInParent () ++ elif name == "stateSet": ++ return self.getStateSet () ++ else: ++ raise AttributeError, name ++ ++ def getName (self): ++ """ ++ Wrapper around cspi.Accessible_getName ++ """ ++ self.__checkSelf() ++ return string(cspi.Accessible_getName(self.__item)) ++ ++ def getDescription (self): ++ """ ++ Wrapper around cspi.Accessible_getDescription ++ """ ++ self.__checkSelf() ++ return string(cspi.Accessible_getDescription(self.__item)) ++ ++ def getParent (self): ++ """ ++ Wrapper around cspi.Accessible_getParent, returning an ++ atspi.Accessible or None ++ """ ++ self.__checkSelf() ++ cdef Accessible parent ++ cdef cspi.Accessible* spiParent ++ ++ spiParent = cspi.Accessible_getParent (self.__item) ++ if spiParent!=NULL: ++ parent = Accessible () ++ parent.__setItem (spiParent) ++ parent.__checkSelf () ++ return parent ++ else: ++ return None ++ ++ def getChildAtIndex (self, index): ++ """ ++ Wrapper around cspi.Accessible_getChildAtIndex, returning an ++ atspi.Accessible, atspi.Application, or None ++ """ ++ self.__checkSelf() ++ cdef int i ++ i = index ++ ++ # This hairiness is due to the fact that Pyrex doesn't allow cdefs ++ # inside if blocks. ++ ++ cdef cspi.Accessible* spiChild ++ spiChild = cspi.Accessible_getChildAtIndex (self.__item, i) ++ # Workaround for GNOME bug #321273 ++ # http://bugzilla.gnome.org/show_bug.cgi?id=321273 ++ if spiChild == NULL: return None ++ ++ cdef object child ++ cdef Application app ++ cdef Accessible acc ++ cdef Text text ++ ++ if cspi.Accessible_isApplication (spiChild): ++ app = Application () ++ app.__setItem (spiChild) ++ child = app ++ else: ++ acc = Accessible () ++ acc.__setItem (spiChild) ++ child = acc ++ ++ return child ++ ++ def getIndexInParent (self): ++ """ ++ Wrapper around cspi.Accessible_getIndexInParent ++ """ ++ self.__checkSelf() ++ return cspi.Accessible_getIndexInParent (self.__item) ++ ++ def getRole (self): ++ """ ++ Wrapper around cspi.Accessible_getRole ++ """ ++ self.__checkSelf() ++ return cspi.Accessible_getRole (self.__item) ++ ++ def getRoleName (self): ++ """ ++ Wrapper around cspi.Accessible_getRoleName ++ """ ++ self.__checkSelf() ++ return string(cspi.Accessible_getRoleName (self.__item)) ++ ++ def getChildCount (self): ++ """ ++ Wrapper around cspi.Accessible_getChildCount ++ """ ++ self.__checkSelf() ++ return cspi.Accessible_getChildCount (self.__item) ++ ++ def getStateSet (self): ++ """ ++ Wrapper around cspi.Accessible_getStateSet, returning an ++ atspi.StateSet ++ """ ++ self.__checkSelf() ++ cdef StateSet set ++ set = StateSet() ++ set.__setItem (cspi.Accessible_getStateSet (self.__item)) ++ return set ++ ++ def getInterface (self, interface): ++ """ ++ This is NOT part of cspi, it is just for compatibility with ++ the bonobo bindings and will probably go away soon. ++ """ ++ self.__checkSelf() ++ return getattr(self, "get%s" % interface) () ++ ++ def getAction (self): ++ """ ++ Wrapper around cspi.Accessible_getAction, returning ++ an atspi.Action or None ++ """ ++ self.__checkSelf() ++ cdef Action action ++ action = Action () ++ action.__setItem (cspi.Accessible_getAction (self.__item)) ++ if action.__item != NULL: ++ return action ++ ++ def getText (self): ++ """ ++ Wrapper around cspi.Accessible_getText, returning an atspi.Text ++ or None ++ """ ++ self.__checkSelf () ++ cdef Text text ++ text = Text () ++ text.__setItem (cspi.Accessible_getText (self.__item)) ++ if text.__item != NULL: ++ return text ++ ++ def getEditableText (self): ++ """ ++ Wrapper around cspi.Accessible_getText, returning an ++ atspi.EditableText or None ++ """ ++ self.__checkSelf () ++ cdef EditableText etext ++ etext = EditableText () ++ etext.__setItem (cspi.Accessible_getEditableText (self.__item)) ++ if etext.__item != NULL: ++ return etext ++ ++ def getHypertext (self): ++ """ ++ Wrapper around cspi.Accessible_getHypertext, returning an ++ atspi.Hypertext or None ++ """ ++ self.__checkSelf () ++ cdef Hypertext hypertext ++ hypertext = Hypertext () ++ hypertext.__setItem (cspi.Accessible_getHypertext (self.__item)) ++ if hypertext.__item != NULL: ++ return hypertext ++ ++ def getImage (self): ++ """ ++ Wrapper around cspi.Accessible_getImage, returning an ++ atspi.Image or None ++ """ ++ self.__checkSelf () ++ cdef Image image ++ image = Image () ++ image.__setItem (cspi.Accessible_getImage (self.__item)) ++ if image.__item != NULL: ++ return image ++ ++ def getValue (self): ++ """ ++ Wrapper around cspi.Accessible_getValue, returning an ++ atspi.Value or None ++ """ ++ self.__checkSelf () ++ cdef Value value ++ value = Value () ++ value.__setItem (cspi.Accessible_getValue (self.__item)) ++ if value.__item != NULL: ++ return value ++ ++ def getSelection (self): ++ """ ++ Wrapper around cspi.Accessible_getSelection, returning an ++ atspi.Selection or None ++ """ ++ self.__checkSelf () ++ cdef Selection selection ++ selection = Selection () ++ selection.__setItem (cspi.Accessible_getSelection (self.__item)) ++ if selection.__item != NULL: ++ return selection ++ ++ def getComponent (self): ++ """ ++ Wrapper around cspi.Accessible_getComponent, returning an ++ atspi.Component or None ++ """ ++ self.__checkSelf () ++ cdef Component component ++ component = Component () ++ component.__setItem (cspi.Accessible_getComponent (self.__item)) ++ if component.__item != NULL: ++ return component ++ ++ def getRelationSet (self): ++ """ ++ Wraps Accessible_getRelationSet, returning a list ++ of atspi.Relation ++ """ ++ # looking at at-poke, result from C API appears to be a NULL-terminated list of pointers, and that we should free the buffer ++ self.__checkSelf () ++ cdef Relation relation ++ ++ relations = [] ++ cdef cspi.AccessibleRelation **relationSet ++ relationSet = cspi.Accessible_getRelationSet (self.__item) ++ ++ i=0 ++ while relationSet[i]: ++ relation = Relation () ++ relation.__setItem (relationSet[i]) ++ relations.append(relation) ++ i=i+1 ++ cspi.free (relationSet) ++ ++ return relations ++ ++ ++cdef class Desktop (Accessible): ++ pass ++ ++ ++cdef class Application (Accessible): ++ """ ++ Wrapper around the low-level cspi.AccessibleApplication_ functions, ++ giving an OO-style API. ++ """ ++ def getToolkit (self): ++ """ ++ Wraps AccessibleApplication_getToolkitName, returning a string ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleApplication_getToolkitName (self.__item) ++ ++ def getVersion (self): ++ """ ++ Wraps AccessibleApplication_getVersion, returning a string ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleApplication_getVersion(self.__item) ++ ++ def getID (self): ++ """ ++ Wraps AccessibleApplication_getID, returning a string ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleApplication_getID (self.__item) ++ ++ def pause (self): ++ """ ++ Wraps AccessibleApplication_pause ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleApplication_pause (self.__item) ++ ++ def resume (self): ++ """ ++ Wraps AccessibleApplication_resume ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleApplication_resume (self.__item) ++ ++cdef class Component (Accessible): ++ """ ++ Wrapper around the low-level cspi.AccessibleComponent_ functions, ++ giving an OO-style API. ++ """ ++ def getExtents (self, type=0): ++ """ ++ Wraps cspi.AccessibleComponent_getExtents, returning an ++ (x,y,w,h) tuple. ++ """ ++ self.__checkSelf () ++ cdef long x, y, w, h ++ cspi.AccessibleComponent_getExtents (self.__item, &x, &y, &w, &h, type) ++ return (x, y, w, h) ++ ++ def getPosition (self, type = 0): ++ """ ++ Wraps cspi.AccessibleComponent_getPosition, returning an ++ (x,y) tuple. ++ """ ++ self.__checkSelf () ++ cdef long x, y ++ cspi.AccessibleComponent_getPosition (self.__item, &x, &y, type) ++ return (x, y) ++ ++ def getSize (self): ++ """ ++ Wraps cspi.AccessibleComponent_getSize, returning a ++ (w,h) tuple. ++ """ ++ self.__checkSelf () ++ cdef long w, h ++ cspi.AccessibleComponent_getSize (self.__item, &w, &h) ++ return (w, h) ++ ++ def getLayer (self): ++ """ ++ Wraps cspi.AccessibleComponent_getLayer, returning an ++ AccessibleComponentLayer. ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleComponent_getLayer (self.__item) ++ ++ def grabFocus (self): ++ """ ++ Wraps cspi.AccessibleComponent_grabFocus, raising AtspiException ++ if it fails ++ """ ++ self.__checkSelf () ++ if not cspi.AccessibleComponent_grabFocus (self.__item): ++ raise AtspiException("AccessibleComponent_grabFocus") ++ ++ def getMDIZOrder (self): ++ """ ++ Wraps cspi.AccessibleComponent_getMDIZOrder, returning an integer. ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleComponent_getMDIZOrder(self.__item) ++ ++cdef class Action (Base): ++ """ ++ Wrapper around the low-level cspi.AccessibleAction_ functions, ++ giving an OO-style API. ++ """ ++ def __getattr__ (self, name): ++ if name == "nActions": ++ return self.getNActions () ++ else: ++ raise AttributeError, name ++ ++ def getNActions (self): ++ """ ++ Wraps cspi.AccessibleAction_getNActions ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleAction_getNActions (self.__item) ++ ++ def doAction (self, index): ++ """ ++ Wraps cspi.AccessibleAction_doAction ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleAction_doAction (self.__item, index) ++ ++ def getKeyBinding (self, index): ++ """ ++ Wraps cspi.AccessibleAction_getKeyBinding ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleAction_getKeyBinding (self.__item, index) ++ ++ def getName (self, index): ++ """ ++ Wraps cspi.AccessibleAction_getName ++ """ ++ self.__checkSelf () ++ return string(cspi.AccessibleAction_getName (self.__item, index)) ++ ++ def getDescription (self, index): ++ """ ++ Wraps cspi.AccessibleAction_getDescription ++ """ ++ self.__checkSelf () ++ return string(cspi.AccessibleAction_getDescription (self.__item, index)) ++ ++ ++cdef class Text (Base): ++ """ ++ Wrapper around the low-level cspi.AccessibleText_ functions, ++ giving an OO-style API. ++ """ ++ def addSelection (self, startOffset, endOffset): ++ """ ++ Wraps cspi.AccessibleText_addSelection ++ """ ++ self.__checkSelf () ++ if not cspi.AccessibleText_addSelection (self.__item, startOffset, endOffset): ++ raise AtspiException("AccessibleText_addSelection") ++ ++ ++ #def getAttributes (self, offset, startOffset, endOffset): ++ # self.__checkSelf () ++ # return cspi.AccessibleText_getAttributes (self.__item, offset, startOffset, endOffset) ++ def getCaretOffset (self): ++ """ ++ Wraps cspi.AccessibleText_getCaretOffset ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleText_getCaretOffset (self.__item) ++ ++ def getCharacterCount (self): ++ """ ++ Wraps cspi.AccessibleText_getCharacterCount ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleText_getCharacterCount (self.__item) ++ ++ def getNSelections (self): ++ """ ++ Wraps cspi.AccessibleText_getNSelections ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleText_getNSelections (self.__item) ++ ++ #def getSelection (self, selectionNum, startOffset, endOffset): ++ # self.__checkSelf () ++ # return cspi.AccessibleText_getSelection (self.__item, selectionNum, startOffset, endOffset) ++ ++ def getText (self, startOffset, endOffset): ++ """ ++ Wraps cspi.AccessibleText_getText ++ """ ++ self.__checkSelf () ++ return string(cspi.AccessibleText_getText (self.__item, startOffset, endOffset)) ++ ++ def removeSelection (self, selectionNum): ++ """ ++ Wraps cspi.AccessibleText_removeSelection, raising AtspiException if it fails ++ """ ++ self.__checkSelf () ++ if not cspi.AccessibleText_removeSelection (self.__item, selectionNum): ++ raise AtspiException("AccessibleText_removeSelection") ++ ++ def setSelection (self, selectionNum, startOffset, endOffset): ++ """ ++ Wraps cspi.AccessibleText_setSelection, raising AtspiException if it fails ++ """ ++ self.__checkSelf () ++ if not cspi.AccessibleText_setSelection (self.__item, selectionNum, startOffset, endOffset): ++ raise AtspiException("AccessibleText_setSelection") ++ ++ def setCaretOffset (self, position): ++ """ ++ Wraps cspi.AccessibleText_setCaretOffset, raising AtspiException if it fails ++ """ ++ self.__checkSelf () ++ if not cspi.AccessibleText_setCaretOffset (self.__item, position): ++ raise AtspiException("AccessibleText_setCaretOffset") ++ ++cdef class EditableText (Text): ++ """ ++ Wrapper around the low-level cspi.AccessibleEditableText_ functions, ++ giving an OO-style API. ++ """ ++ def setTextContents (self, newContents): ++ """ ++ Wraps cspi.AccessibleEditableText_setTextContents, raising AtspiException if it fails ++ """ ++ self.__checkSelf () ++ if not cspi.AccessibleEditableText_setTextContents (self.__item, newContents): ++ raise AtspiException("AccessibleEditableText_setTextContents") ++ ++ def setAttributes (self, attributes, startOffset, endOffset): ++ """ ++ Wraps cspi.AccessibleEditableText_setAttributes, raising AtspiException if it fails ++ """ ++ self.__checkSelf () ++ if not cspi.AccessibleEditableText_setAttributes (self.__item, attributes, startOffset, endOffset): ++ raise AtspiException("AccessibleEditableText_setAttributes") ++ ++ def insertText (self, position, text): ++ """ ++ Wraps cspi.AccessibleEditableText_insertText, raising AtspiException if it fails ++ """ ++ self.__checkSelf () ++ if not cspi.AccessibleEditableText_insertText (self.__item, position, text, cspi.strlen(text)): ++ raise AtspiException("AccessibleEditableText_insertText") ++ ++cdef class Hypertext (Text): ++ """ ++ Wrapper around the low-level cspi.AccessibleHypertext_ functions, ++ giving an OO-style API. ++ """ ++ def getNLinks (self): ++ """ ++ Wraps cspi.AccessibleHypertext_getNLinks, raising AtspiException if it fails ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleHypertext_getNLinks (self.__item) ++ ++ def getLink (self, linkIndex): ++ """ ++ Wraps cspi.AccessibleHypertext_getLink, raising AtspiException if it fails ++ """ ++ self.__checkSelf () ++ cdef Hyperlink hyperlink ++ hyperlink = Hyperlink () ++ hyperlink.__setItem (cspi.AccessibleHypertext_getLink (self.__item, linkIndex)) ++ if hyperlink.__item != NULL: ++ return hyperlink ++ ++ def getLinkIndex (self, characterOffset): ++ """ ++ Wraps cspi.AccessibleHypertext_getLinkIndex, raising AtspiException if it fails ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleHypertext_getLinkIndex (self.__item, characterOffset) ++ ++cdef class Hyperlink (Base): ++ """ ++ Wrapper around the low-level cspi.AccessibleHyperlink_ functions, ++ giving an OO-style API. ++ """ ++ def getNAnchors (self): ++ """ ++ Wraps cspi.AccessibleHyperlink_getNAnchors, raising AtspiException if it fails ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleHyperlink_getNAnchors (self.__item) ++ ++ def getIndexRange (self): ++ """ ++ Wraps cspi.AccessibleHyperlink_getIndexRange, returning [startIndex, endIndex] pair ++ """ ++ self.__checkSelf () ++ cdef long startIndex, endIndex ++ cspi.AccessibleHyperlink_getIndexRange(self.__item, &startIndex, &endIndex) ++ return [startIndex, endIndex] ++ ++ ++ def getObject (self, i): ++ """ ++ Wraps cspi.AccessibleHyperlink_getObject ++ """ ++ self.__checkSelf () ++ cdef Accessible object ++ object = Accessible () ++ object.__setItem (cspi.AccessibleHyperlink_getObject (self.__item, i)) ++ object.__checkSelf () ++ return object ++ ++ def getURI (self, i): ++ """ ++ Wraps cspi.AccessibleHyperlink_getURI, raising AtspiException if it fails ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleHyperlink_getURI (self.__item, i) ++ ++ def isValid (self): ++ """ ++ Wraps cspi.AccessibleHyperlink_isValid, raising AtspiException if it fails ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleHyperlink_isValid (self.__item) ++ ++cdef class Image (Base): ++ """ ++ Wrapper around the low-level cspi.AccessibleImage_ functions, ++ giving an OO-style API. ++ """ ++ def getImageDescription (self): ++ """ ++ Wraps cspi.AccessibleImage_getImageDescription ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleImage_getImageDescription (self.__item) ++ ++ def getImageSize (self): ++ """ ++ Wraps cspi.AccessibleImage_getImageSize, returning a (w,h) pair ++ """ ++ self.__checkSelf () ++ cdef long w, h ++ cspi.AccessibleImage_getImageSize(self.__item, &w, &h); ++ return [w, h] ++ ++ def getImagePosition (self, type=0): ++ """ ++ Wraps cspi.AccessibleImage_getImagePosition, returning a (x,y) ++ pair ++ """ ++ self.__checkSelf () ++ cdef long x, y ++ cspi.AccessibleImage_getImagePosition(self.__item, &x, &y, type) ++ return [x, y] ++ ++ def getImageExtents (self, type=0): ++ """ ++ Wraps cspi.AccessibleImage_getImageExtents, returning a ++ (x,y,w,h) tuple ++ """ ++ self.__checkSelf () ++ cdef long x, y, w, h ++ cspi.AccessibleImage_getImageExtents(self.__item, &x, &y, &w, &h, type) ++ return [x, y, w, h] ++ ++cdef class Value (Base): ++ """ ++ Wrapper around the low-level cspi.AccessibleValue_ functions, ++ giving an OO-style API. ++ """ ++ def getMinimumValue (self): ++ """ ++ Wraps cspi.AccessibleValue_getMinimumValue ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleValue_getMinimumValue(self.__item) ++ ++ def getCurrentValue (self): ++ """ ++ Wraps cspi.AccessibleValue_getMinimumValue ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleValue_getCurrentValue(self.__item) ++ ++ def getMaximumValue (self): ++ """ ++ Wraps cspi.AccessibleValue_getMinimumValue ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleValue_getMaximumValue(self.__item) ++ ++ def setCurrentValue (self, newValue): ++ """ ++ Wraps cspi.AccessibleValue_setCurrentValue ++ """ ++ self.__checkSelf () ++ if not cspi.AccessibleValue_setCurrentValue (self.__item, newValue): ++ raise AtspiException("AccessibleValue_setCurrentValue") ++ ++cdef class Selection (Base): ++ """ ++ Wrapper around the low-level cspi.AccessibleSelection_ functions, ++ giving an OO-style API. ++ """ ++ ++ def getNSelectedChildren (self): ++ """ ++ Wraps cspi.AccessibleSelection_getNSelectedChildren ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleSelection_getNSelectedChildren (self.__item) ++ ++ def getSelectedChild (self, index): ++ """ ++ Wraps cspi.AccessibleSelection_getSelectedChild ++ """ ++ self.__checkSelf () ++ ++ cdef cspi.Accessible* spiChild ++ spiChild = cspi.AccessibleSelection_getSelectedChild (self.__item, index) ++ ++ assert spiChild != NULL ++ ++ cdef object child ++ cdef Application app ++ cdef Accessible acc ++ cdef Text text ++ ++ if cspi.Accessible_isApplication (spiChild): ++ app = Application () ++ app.__setItem (spiChild) ++ child = app ++ else: ++ acc = Accessible () ++ acc.__setItem (spiChild) ++ child = acc ++ ++ return child ++ ++ def selectChild (self, index): ++ """ ++ Wraps cspi.AccessibleSelection_selectChild ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleSelection_selectChild (self.__item, index) ++ ++ def deselectSelectedChild (self, index): ++ """ ++ Wraps cspi.AccessibleSelection_deselectSelectedChild ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleSelection_deselectSelectedChild (self.__item, index) ++ ++ def isChildSelected (self, index): ++ """ ++ Wraps cspi.AccessibleSelection_isChildSelected ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleSelection_isChildSelected (self.__item, index) ++ ++ def selectAll (self): ++ """ ++ Wraps cspi.AccessibleSelection_selectAll ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleSelection_selectAll( self.__item) ++ ++ def clearSelection (self): ++ """ ++ Wraps cspi.AccessibleSelection_clearSelection ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleSelection_clearSelection (self.__item) ++ ++cdef class Table (Base): ++ """ ++ Wrapper around the low-level cspi.AccessibleTable_ functions, ++ giving an OO-style API. ++ """ ++ ++ # def getTableAccessibleAt (self, row, column): ++ # def getTableCaption (self): ++ ++ def getTableColumnAtIndex (self, index): ++ """ ++ Wraps cspi.AccessibleTable_getColumnAtIndex ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleTable_getColumnAtIndex(self.__item, index) ++ ++ def getTableColumnDescription (self, column): ++ """ ++ Wraps cspi.AccessibleTable_getColumnDescription ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleTable_getColumnDescription(self.__item, column) ++ ++ def getTableColumnExtentAt (self, row, column): ++ """ ++ Wraps cspi.AccessibleTable_getColumnExtentAt ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleTable_getColumnExtentAt(self.__item, row, column) ++ ++ # def getTableColumnHeader (self, column): ++ ++ def getTableIndexAt (self, row, column): ++ """ ++ Wraps cspi.AccessibleTable_getIndexAt ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleTable_getIndexAt(self.__item, row, column) ++ ++ def getTableNColumns (self): ++ """ ++ Wraps cspi.AccessibleTable_getNColumns ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleTable_getNColumns(self.__item) ++ ++ def getTableNRows (self): ++ """ ++ Wraps cspi.AccessibleTable_getNRows ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleTable_getNRows(self.__item) ++ ++ def getTableNSelectedColumns (self): ++ """ ++ Wraps cspi.AccessibleTable_getNSelectedColumns ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleTable_getNSelectedColumns(self.__item) ++ ++ def getTableNSelectedRows (self): ++ """ ++x Wraps cspi.AccessibleTable_getNSelectedRows ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleTable_getNSelectedRows(self.__item) ++ ++ def getTableRowAtIndex (self, index): ++ """ ++ Wraps cspi.AccessibleTable_getRowAtIndex ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleTable_getRowAtIndex(self.__item, index) ++ ++ def getTableRowDescription (self, row): ++ """ ++ Wraps cspi.AccessibleTable_getRowDescription ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleTable_getRowDescription(self.__item, row) ++ ++ def getTableRowExtentAt (self, row, column): ++ """ ++ Wraps cspi.AccessibleTable_getRowExtentAt ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleTable_getRowExtentAt(self.__item, row, column) ++ ++ # def getTableRowHeader (self, row): ++ # def getTableSelectedRows (self, **selectedRows): - Not sure if the variable which is a pointer to a pointer is acceptable ++ # def getTableSelectedColumns (self, **selectedColumns): - Same issue as above ++ # def getTableSummary (self): ++ ++ def isTableColumnSelected (self, column): ++ """ ++ Wraps cspi.AccessibleTable_isColumnSelected ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleTable_isColumnSelected(self.__item, column) ++ ++ def isTableRowSelected (self, row): ++ """ ++ Wraps cspi.AccessibleTable_isRowSelected ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleTable_isRowSelected(self.__item, row) ++ ++ def isTableSelected (self, row, column): ++ """ ++ Wraps cspi.AccessibleTable_isSelected ++ """ ++ self.__checkSelf () ++ return cspi.AccessibleTable_isSelected(self.__item, row, column) ++ ++ ++cdef class Event (EventBase): ++ #def AccessibleEventListener* SPI_createAccessibleEventListener (AccessibleEventListenerCB callback, void *user_data) ++ #void AccessibleEventListener_unref (AccessibleEventListener *listener) ++ #SPIBoolean AccessibleEventListener_addCallback (AccessibleEventListener *listener, AccessibleEventListenerCB callback, void *user_data) ++ #SPIBoolean AccessibleEventListener_removeCallback (AccessibleEventListener *listener, AccessibleEventListenerCB callback) ++ ++ #Accessible* AccessibleActiveDescendantChangedEvent_getActiveDescendant (AccessibleEvent *event) ++ #Accessible* AccessibleChildChangedEvent_getChildAccessible (AccessibleEvent *event) ++ ++ def getDescriptionChangedEventDescriptionString (self): ++ self.__checkSelf() ++ return string(cspi.AccessibleDescriptionChangedEvent_getDescriptionString(self.__item)) ++ ++ def getNameChangedEventNameString (self): ++ self.__checkSelf() ++ return string(cspi.AccessibleNameChangedEvent_getNameString(self.__item)) ++ ++ # Accessible* AccessibleParentChangedEvent_getParentAccessible (AccessibleEvent *event) ++ ++ def getTableCaptionChangedEventCaptionString(self): ++ self.__checkSelf() ++ return string(cspi.AccessibleTableCaptionChangedEvent_getCaptionString(self.__item)) ++ ++ def getTableColumnDescriptionChangedEventDescriptionString(self): ++ self.__checkSelf () ++ return string(cspi.AccessibleTableColumnDescriptionChangedEvent_getDescriptionString(self.__item)) ++ ++ # Accessible* AccessibleTableHeaderChangedEvent_getHeaderAccessible (AccessibleEvent *event) ++ ++ def getTableRowDescriptionChangedEventDescriptionString(self): ++ self.__checkSelf () ++ return string(cspi.AccessibleTableRowDescriptionChangedEvent_getDescriptionString(self.__item)) ++ ++ #Accessible* AccessibleTableSummaryChangedEvent_getSummaryAccessible (AccessibleEvent *event) ++ ++ def getTextChangedEventChangeString (self): ++ self.__checkSelf () ++ return string(cspi.AccessibleTextChangedEvent_getChangeString(self.__item)) ++ ++ def getTextSelectionChangedEventSelectionString (self): ++ self.__checkSelf () ++ return string(cspi.AccessibleTextSelectionChangedEvent_getSelectionString(self.__item)) ++ ++ def getWindowEventTitleString (self): ++ self.__checkSelf () ++ return string(cspi.AccessibleWindowEvent_getTitleString(self.__item)) ++ ++class EventGenerator: ++ """ ++ Wrapper layer around SPI_generateKeyboardEvent and ++ SPI_generateMouseEvent, used for generating input events. ++ ++ Use AccessibleAction in preference to this. ++ """ ++ def injectKeyboardString (self, string): ++ """ ++ Inject a string as if it had been typed using an input method. ++ """ ++ # Seems to only work if you do it one character at a time... ++ for char in string: ++ self.__generateKeystringEvent (str(char), cspi.SPI_KEY_STRING) ++ ++ def __keyStringToKeyCode(self, keyString): ++ cdef Xlib.Display *display ++ display = Xlib.XOpenDisplay(NULL) ++ ++ cdef Xlib.KeySym sym ++ sym = Xlib.XStringToKeysym(keyString) ++ cdef Xlib.KeyCode code ++ code = Xlib.XKeysymToKeycode(display, sym) ++ ++ #print str(keyString), str(int(sym)), code ++ ++ Xlib.XCloseDisplay(display) ++ return int(code) ++ ++ def generateKeyCombo (self, keyStrings): ++ modifiers = keyStrings[:-1] ++ finalKey = keyStrings[-1] ++ ++ for modifier in modifiers: ++ code = self.__keyStringToKeyCode(modifier) ++ self.generateKeyboardEvent(code, '', cspi.SPI_KEY_PRESS) ++ ++ code = self.__keyStringToKeyCode(finalKey) ++ self.generateKeyboardEvent(code, '', cspi.SPI_KEY_PRESSRELEASE) ++ ++ for modifier in modifiers: ++ code = self.__keyStringToKeyCode(modifier) ++ self.generateKeyboardEvent(code, '', cspi.SPI_KEY_RELEASE) ++ ++ ++ def __generateKeyvalEvent (self, keyval, synthType): ++ self.generateKeyboardEvent (keyval, None, synthType) ++ ++ def __generateKeystringEvent (self, keystring, synthType): ++ self.generateKeyboardEvent (0, keystring, synthType) ++ ++ def generateKeyboardEvent (self, keyval, keystring, synthType): ++ if not cspi.SPI_generateKeyboardEvent (keyval, keystring, synthType): ++ raise AtspiException("SPI_generateKeyboardEvent") ++ ++ def click (self, x, y, button): ++ """ ++ Synthesize a mouse button click at (x,y) ++ """ ++ self.__generateButtonEvent (x, y, button, "c") ++ ++ def doubleClick (self, x, y, button): ++ """ ++ Synthesize a mouse button double-click at (x,y) ++ """ ++ self.__generateButtonEvent (x, y, button, "d") ++ ++ def press (self, x, y, button): ++ """ ++ Synthesize a mouse button press at (x,y) ++ """ ++ self.__generateButtonEvent (x, y, button, "p") ++ ++ def release (self, x, y, button): ++ """ ++ Synthesize a mouse button release at (x,y) ++ """ ++ self.__generateButtonEvent (x, y, button, "r") ++ ++ def absoluteMotion (self, x, y): ++ """ ++ Synthesize mouse absolute motion to (x,y) ++ """ ++ self.__generateEvent (x, y, "abs") ++ ++ def relativeMotion (self, x, y): ++ """ ++ Synthesize mouse relative motion of (x,y) ++ """ ++ self.__generateEvent (x, y, "rel") ++ ++ def drag (self, fromXY, toXY, button): ++ """ ++ Synthesize a drag (press, move and release) from (x,y) to (x,y). ++ ++ These are absolute screen coordinates ++ """ ++ (x,y) = fromXY ++ self.press (x, y, button) ++ ++ (x,y) = toXY ++ self.absoluteMotion(x,y) ++ ++ self.release (x, y, button) ++ ++ def __generateEvent (self, x, y, name): ++ """ ++ Thin wrapper around SPI_generateMouseEvent. ++ ++ Event names: b1p = button 1 press; b2r = button 2 release; ++ b3c = button 3 click; b2d = button 2 double-click; ++ abs = absolute motion; rel = relative motion. ++ """ ++ if not cspi.SPI_generateMouseEvent (x, y, name): ++ raise AtspiException("Error generating mouse event") ++ ++ def __generateButtonEvent (self, x, y, button, suffix): ++ self.__generateEvent (x, y, self.__generateButtonName(button)+suffix) ++ ++ def __generateButtonName(self, button): ++ if button==1: ++ return "b1" ++ elif button==2: ++ return "b2" ++ elif button==3: ++ return "b3" ++ else: raise ValueError, "Unknown button" ++ ++# We use this C function to marshal a call to a python function. The Python callback ++# function is installed as the userdata of this C callback function. See the ++# "cheesefinder" demo in the Pyrex sources. ++# We ignore the "const"ness of the AccessibleEvent ++cdef void marshalAccessibleEventCallback (cspi.AccessibleEvent *event, void *python_fn) except *: ++ e = Event() ++ EventBase.__setItem(e, event) ++ (<object>python_fn) (e) ++ ++cdef class EventListener: ++ """ ++ Wrapper around the low-level cspi.AccessibleEventListener_ functions, ++ giving an OO-style API. ++ """ ++ cdef cspi.AccessibleEventListener *__item ++ cdef public object eventTypes ++ ++ def __init__ (self, callback, eventTypes): ++ """ ++ Registers a python callback function to be called. ++ The callback is expected to have one input, of type atspi.Event, and no return value. ++ See documentation of SPI_registerGlobalEventListener for the event names ++ """ ++ self.eventTypes = eventTypes ++ self.__item = cspi.SPI_createAccessibleEventListener (marshalAccessibleEventCallback, <void*>callback) ++ for eventType in self.eventTypes: ++ #char *e ++ e = eventType ++ if not cspi.SPI_registerGlobalEventListener (self.__item, e): ++ raise AtspiException("Unable to register event listener") ++ ++ def deregister(self): ++ for eventType in self.eventTypes: ++ cspi.SPI_deregisterGlobalEventListener(self.__item, eventType) ++ ++ def __dealloc__ (self): ++ if self.__item != NULL: ++ self.deregister() ++ cspi.AccessibleEventListener_unref (self.__item) ++ ++ def __checkSelf (self): ++ if self.__item == NULL: ++ raise AttributeError, "__item must not be NULL" ++ ++cdef class DeviceEvent: ++ """ ++ Wrapper around a cspi.AccessibleDeviceEvent ++ """ ++ cdef cspi.AccessibleDeviceEvent *__item ++ cdef public object keyID ++ cdef public object keyCode ++ cdef public object keyString ++ cdef public object timeStamp ++ cdef public object type ++ cdef public object modifiers ++ cdef public object isText ++ ++ def __new__ (self): ++ self.__item = NULL ++ ++ cdef bool __setItem (self, cspi.AccessibleDeviceEvent *obj): ++ if obj != NULL: ++ self.__item = obj ++ self.keyID = self.__item.keyID ++ self.keyCode = self.__item.keycode ++ self.keyString = self.__item.keystring ++ self.timeStamp = self.__item.timestamp ++ self.type = self.__item.type ++ self.modifiers = self.__item.modifiers ++ if self.__item.is_text: self.isText = True ++ else: self.isText = False ++ return True ++ else: ++ return False ++ ++ def __checkSelf (self): ++ if self.__item == NULL: ++ raise AttributeError, "__item must not be NULL" ++ ++# def __dealloc__ (self): ++# if self.__item != NULL: ++# cspi.AccessibleDeviceEvent_unref (self.__item) ++ ++ ++cdef cspi.SPIBoolean marshalAccessibleDeviceEventCallback (cspi.AccessibleDeviceEvent *event, void *python_fn) except 1: ++ k = DeviceEvent() ++ #k.__setItem(event) ++ DeviceEvent.__setItem(k, event) ++ k.__checkSelf() ++ (<object>python_fn) (k) ++ return False ++ ++cdef class DeviceListener: ++ """ ++ Wrapper around the low-level cspi.AccessibleDeviceListener_ functions, ++ giving an OO-style API. ++ """ ++ cdef cspi.AccessibleDeviceListener *__item ++ cdef public object modMasks ++ ++ def __init__ (self, callback, eventMask = cspi.SPI_KEY_PRESSED | cspi.SPI_KEY_RELEASED): ++ """ ++ Registers a python callback function to be called. ++ ++ eventMask may be one of the following: ++ key pressed: 1 ++ key released: 2 ++ key pressed or released (default): 3 ++ """ ++ self.__item = cspi.SPI_createAccessibleDeviceListener (marshalAccessibleDeviceEventCallback, <void*>callback) ++ cdef cspi.AccessibleKeySet *keySet ++ keySet = SPI_KEYSET_ALL_KEYS ++ self.modMasks = [] ++ cdef short int modMask ++ syncType = SPI_KEYLISTENER_SYNCHRONOUS | SPI_KEYLISTENER_CANCONSUME ++ #syncType = SPI_KEYLISTENER_NOSYNC ++ for modMask from 0 <= modMask < (1 << 8): ++ self.modMasks.append(modMask) ++ desc = "keySet "+str(<int> keySet)+" modMask "+str(modMask)+" eventMask "+str(eventMask)+" syncType "+str(syncType) ++ desc = str(desc) ++ if not cspi.SPI_registerAccessibleKeystrokeListener (self.__item, keySet, modMask, eventMask, syncType): ++ raise AtspiException("Unable to register keystroke listener", desc) ++ ++ def deregister(self): ++ if self.__item != NULL: ++ for modMask in self.modMasks: ++ cspi.SPI_deregisterAccessibleKeystrokeListener(self.__item, modMask) ++ ++ def __dealloc__ (self): ++ if self.__item != NULL: ++ self.deregister() ++ cspi.AccessibleDeviceListener_unref (self.__item) ++ ++ def __checkSelf (self): ++ if self.__item == NULL: ++ raise AttributeError, "__item must not be NULL" ++ ++ ++# vim: sw=4 ts=4 sts=4 noet ai diff --git a/staging/python-pysqlite/PKGBUILD b/staging/python-pysqlite/PKGBUILD new file mode 100644 index 000000000..f5985ebca --- /dev/null +++ b/staging/python-pysqlite/PKGBUILD @@ -0,0 +1,38 @@ +# $Id: PKGBUILD 168723 2012-10-14 21:14:34Z eric $ +# Maintainer: Angel Velasquez <angvp@archlinux.org> +# Contributor: Aaron Griffin <aaron@archlinux.org> +# Contributor: Daniel J Griffiths <ghost1227@archlinux.us> + +pkgbase=python-pysqlite +pkgname=python2-pysqlite +pkgver=2.6.3 +pkgrel=3 +pkgdesc="A Python DB-API 2.0 interface for the SQLite embedded relational database engine" +license=('custom') +arch=('i686' 'x86_64') +url="http://code.google.com/p/pysqlite/" +depends=('python2' 'sqlite') +conflicts=('python-pysqlite<=2.6.3-2') +replaces=('python-pysqlite<=2.6.3-2') +source=(http://pysqlite.googlecode.com/files/pysqlite-${pkgver}.tar.gz \ + setup.cfg) +md5sums=('711afa1062a1d2c4a67acdf02a33d86e' + '86dd356c65afd14a22f2f8f64a26441e') + +check() { + cd "${srcdir}"/pysqlite-${pkgver}/build/lib.*/ + python2 -c "from pysqlite2 import test; test.test()" +} + +build() { + cd "${srcdir}/pysqlite-${pkgver}" + cp "${srcdir}/setup.cfg" . + python2 setup.py build +} + +package_python2-pysqlite() { + cd "${srcdir}/pysqlite-${pkgver}" + python2 setup.py install --root="${pkgdir}" + install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" + rm -r "${pkgdir}/usr/pysqlite2-doc" +} diff --git a/staging/python-pysqlite/setup.cfg b/staging/python-pysqlite/setup.cfg new file mode 100644 index 000000000..ba6c77075 --- /dev/null +++ b/staging/python-pysqlite/setup.cfg @@ -0,0 +1,5 @@ +[build_ext] +define= +include_dirs=/usr/include +library_dirs=/usr/lib +libraries=sqlite3 diff --git a/staging/python-wpactrl/PKGBUILD b/staging/python-wpactrl/PKGBUILD new file mode 100644 index 000000000..692b3e8c3 --- /dev/null +++ b/staging/python-wpactrl/PKGBUILD @@ -0,0 +1,26 @@ +# $Id: PKGBUILD 168717 2012-10-14 20:27:32Z eric $ +# Maintainer: Daniel Isenmann <daniel@archlinux.org> + +pkgbase=python-wpactrl +pkgname=python2-wpactrl +pkgver=20090609 +pkgrel=4 +pkgdesc="A Python extension for wpa_supplicant/hostapd control interface access" +arch=('i686' 'x86_64') +url="http://projects.otaku42.de/wiki/PythonWpaCtrl" +license=('GPL2') +depends=('python2') +conflicts=('python-wpactrl<=20090609-3') +replaces=('python-wpactrl<=20090609-3') +source=(ftp://ftp.archlinux.org/other/${pkgbase}/python-wpactrl-20090609.tar.gz) +md5sums=('8d45739aa9bfa1110a4570bb5ceda768') + +build() { + cd "${srcdir}/${pkgbase}-${pkgver}" + python2 setup.py build +} + +package_python2-wpactrl() { + cd "${srcdir}/${pkgbase}-${pkgver}" + python2 setup.py install --root="${pkgdir}" +} diff --git a/staging/slim/PKGBUILD b/staging/slim/PKGBUILD new file mode 100644 index 000000000..a4580b756 --- /dev/null +++ b/staging/slim/PKGBUILD @@ -0,0 +1,63 @@ +# $Id: PKGBUILD 168702 2012-10-14 15:17:29Z tomegun $ +# Maintainer: Gaetan Bisson <bisson@archlinux.org> +# Contributor: Thayer Williams <thayer@archlinux.org> +# Contributor: Alexander Fehr <pizzapunk gmail com> +# Contributor: Hugo Ideler <hugoideler@dse.nl> + +pkgname=slim +pkgver=1.3.4 +pkgrel=4 +pkgdesc='Desktop-independent graphical login manager for X11' +arch=('i686' 'x86_64') +url='http://slim.berlios.de/' +license=('GPL2') +depends=('pam' 'libxmu' 'libpng' 'libjpeg' 'libxft') +makedepends=('cmake' 'freeglut') +backup=('etc/slim.conf' 'etc/logrotate.d/slim' 'etc/pam.d/slim') +source=("http://download.berlios.de/${pkgname}/${pkgname}-${pkgver}.tar.gz" + 'rc.d' + 'pam.d' + 'logrotate' + 'slim.service' + 'session-name.patch' + 'libpng-1.4+-support.patch' + 'fix-glibc-segfault-1.3.4.patch') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + patch -p1 -i ../session-name.patch # FS#26693: fix default session name + patch -Np1 -i ../libpng-1.4+-support.patch # taken from gentoo to build + patch -Np0 -i ../fix-glibc-segfault-1.3.4.patch # FS#30864 + cd ${srcdir} + mkdir build + cd build + cmake ../${pkgbase}-${pkgver} \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_SKIP_RPATH=ON \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DUSE_PAM=yes -DUSE_CONSOLEKIT=no + make +} + +package() { + cd ${srcdir}/build/ + make DESTDIR="${pkgdir}" install + + install -D -m755 ../rc.d "${pkgdir}"/etc/rc.d/slim + install -D -m644 ../pam.d "${pkgdir}"/etc/pam.d/slim + install -D -m644 ../logrotate "${pkgdir}"/etc/logrotate.d/slim + + # Provide sane defaults + sed -i 's|#xserver_arguments.*|xserver_arguments -nolisten tcp vt07|' "${pkgdir}"/etc/slim.conf + sed -i 's|/var/run/slim.lock|/var/lock/slim.lock|' "${pkgdir}"/etc/slim.conf + # install systemd files + install -D -m644 ${srcdir}/slim.service ${pkgdir}/usr/lib/systemd/system/slim.service +} +md5sums=('51543533e492b41007811f7d880720fa' + 'd8ea9c4dee2811524b67f4f666311a1f' + '37ef35079139544d04b8316c7f66f754' + '43da096480bf72c3ccec8ad8400f34f0' + 'a5d6bde9e63899df7d2081e1585bbe54' + 'ebcb6829028615686de7b64ceeaaf8ed' + '6d19bd7a91592ed2bb902b22b9594565' + '9efc4e0d82d354f0c578be7723870769') diff --git a/staging/slim/fix-glibc-segfault-1.3.4.patch b/staging/slim/fix-glibc-segfault-1.3.4.patch new file mode 100644 index 000000000..b035f8a78 --- /dev/null +++ b/staging/slim/fix-glibc-segfault-1.3.4.patch @@ -0,0 +1,13 @@ +Index: app.cpp +=================================================================== +--- app.cpp (revision 223) ++++ app.cpp (working copy) +@@ -593,7 +593,7 @@ + + n++; + +- child_env = static_cast<char**>(malloc(sizeof(char*)*n)); ++ child_env = static_cast<char**>(malloc(sizeof(char*)*(n+1))); + memcpy(child_env, old_env, sizeof(char*)*n); + child_env[n - 1] = StrConcat("XDG_SESSION_COOKIE=", ck.get_xdg_session_cookie()); + child_env[n] = NULL; diff --git a/staging/slim/libpng-1.4+-support.patch b/staging/slim/libpng-1.4+-support.patch new file mode 100644 index 000000000..57b39272b --- /dev/null +++ b/staging/slim/libpng-1.4+-support.patch @@ -0,0 +1,14 @@ +--- a/image.cpp 2012-06-26 04:20:14.000000000 -0400 ++++ b/image.cpp 2012-06-27 11:41:34.000000000 -0400 +@@ -781,7 +781,11 @@ + (png_infopp) NULL); + } + ++#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4 ++ if (setjmp(png_jmpbuf((png_ptr)))) { ++#else + if (setjmp(png_ptr->jmpbuf)) { ++#endif + goto png_destroy; + } + diff --git a/staging/slim/logrotate b/staging/slim/logrotate new file mode 100644 index 000000000..26ec3b0f4 --- /dev/null +++ b/staging/slim/logrotate @@ -0,0 +1,9 @@ +/var/log/slim.log { + compress + rotate 1 + size 1024k + notifempty + missingok + copytruncate + noolddir +} diff --git a/staging/slim/pam.d b/staging/slim/pam.d new file mode 100644 index 000000000..59db5a8c5 --- /dev/null +++ b/staging/slim/pam.d @@ -0,0 +1,10 @@ +#%PAM-1.0 +auth requisite pam_nologin.so +auth required pam_env.so +auth required pam_unix.so +account required pam_unix.so +password required pam_unix.so +session required pam_limits.so +session required pam_unix.so +session optional pam_loginuid.so +-session optional pam_systemd.so diff --git a/staging/slim/rc.d b/staging/slim/rc.d new file mode 100755 index 000000000..b0be7ffc5 --- /dev/null +++ b/staging/slim/rc.d @@ -0,0 +1,36 @@ +#!/bin/bash + +. /etc/rc.conf +. /etc/rc.d/functions + +PID=`pidof -o %PPID /usr/bin/slim` +case "$1" in + start) + stat_busy "Starting Simple Login Manager" + [ -z "$PID" ] && /usr/bin/slim -d &> /dev/null + if [ $? -gt 0 ]; then + stat_fail + else + add_daemon slim + stat_done + fi + ;; + stop) + stat_busy "Stopping Simple Login Manager" + [ ! -z "$PID" ] && kill $PID &> /dev/null + if [ $? -gt 0 ]; then + stat_fail + else + rm_daemon slim + stat_done + fi + ;; + restart) + $0 stop + sleep 3 + $0 start + ;; + *) + echo "usage: $0 {start|stop|restart}" +esac +exit 0 diff --git a/staging/slim/session-name.patch b/staging/slim/session-name.patch new file mode 100644 index 000000000..8211c4f72 --- /dev/null +++ b/staging/slim/session-name.patch @@ -0,0 +1,21 @@ +diff -Naur slim-1.3.2.old/panel.cpp slim-1.3.2.new/panel.cpp +--- slim-1.3.2.old/panel.cpp 2010-10-24 06:01:15.117000019 +0000 ++++ slim-1.3.2.new/panel.cpp 2010-10-24 17:26:30.987999967 +0000 +@@ -23,7 +23,7 @@ + Root = root; + cfg = config; + +- session = ""; ++ session = cfg->nextSession(session); + + // Init GC + XGCValues gcv; +@@ -188,7 +188,7 @@ + } + + void Panel::ClearPanel() { +- session = ""; ++ session = cfg->nextSession(session); + Reset(); + XClearWindow(Dpy, Root); + XClearWindow(Dpy, Win); diff --git a/staging/slim/slim.service b/staging/slim/slim.service new file mode 100644 index 000000000..b894085a0 --- /dev/null +++ b/staging/slim/slim.service @@ -0,0 +1,9 @@ +[Unit] +Description=SLiM Simple Login Manager +After=systemd-user-sessions.service + +[Service] +ExecStart=/usr/bin/slim -nodaemon + +[Install] +Alias=display-manager.service diff --git a/staging/slim/tty-slowness.patch b/staging/slim/tty-slowness.patch new file mode 100644 index 000000000..c590fbed8 --- /dev/null +++ b/staging/slim/tty-slowness.patch @@ -0,0 +1,30 @@ +diff -aur slim-1.3.2.a/app.cpp slim-1.3.2.b/app.cpp +--- slim-1.3.2.a/app.cpp 2010-08-21 15:10:13.702755711 +0200 ++++ slim-1.3.2.b/app.cpp 2010-08-21 15:10:48.579631179 +0200 +@@ -280,21 +280,22 @@ + signal(SIGALRM, AlarmSignal); + + #ifndef XNEST_DEBUG +- OpenLog(); +- + if (!force_nodaemon && cfg->getOption("daemon") == "yes") { + daemonmode = true; + } + + // Daemonize + if (daemonmode) { +- if (daemon(0, 1) == -1) { ++ if (daemon(0, 0) == -1) { + cerr << APPNAME << ": " << strerror(errno) << endl; + exit(ERR_EXIT); + } +- UpdatePid(); + } + ++ OpenLog(); ++ ++ if (daemonmode) UpdatePid(); ++ + CreateServerAuth(); + StartServer(); + alarm(2); diff --git a/staging/sonata/PKGBUILD b/staging/sonata/PKGBUILD new file mode 100644 index 000000000..d2a3d8d71 --- /dev/null +++ b/staging/sonata/PKGBUILD @@ -0,0 +1,30 @@ +# $Id: PKGBUILD 168713 2012-10-14 19:47:10Z eric $ +# Maintainer: Angel Velasquez <angvp@archlinux.org> +# Contributor: William Rea <sillywilly@gmail.com> + +pkgname=sonata +pkgver=1.6.2.1 +pkgrel=8 +pkgdesc="Elegant GTK+ music client for MPD" +arch=('i686' 'x86_64') +url="http://sonata.berlios.de/" +license=('GPL3') +depends=('pygtk' 'python2-mpd') +optdepends=('gnome-python-extras: Enhanced system tray support' + 'tagpy: Metadata editing support' + 'python2-dbus: Various extra functionality (e.g. multimedia keys support)') +source=(http://download.berlios.de/${pkgname}/${pkgname}-$pkgver.tar.gz + info.py.patch) +md5sums=('0b912325e7175abad3bf6c0edc071e05' + '595fcf7615035829b264afecb5a1beeb') + +build() { + cd "$srcdir/${pkgname}-$pkgver" + patch -Np0 -i "$srcdir/info.py.patch" + sed -i 's|/usr/bin/env python|/usr/bin/env python2|' sonata/breadcrumbs.py +} + +package() { + cd "$srcdir/${pkgname}-$pkgver" + python2 setup.py install --prefix=/usr --optimize 1 --root="$pkgdir" +} diff --git a/staging/sonata/info.py.patch b/staging/sonata/info.py.patch new file mode 100644 index 000000000..e95cc3a08 --- /dev/null +++ b/staging/sonata/info.py.patch @@ -0,0 +1,15 @@ +--- sonata/info.py 2011-07-05 22:32:08.452556016 -0500 ++++ sonata/info.py 2011-07-05 22:45:50.849311466 -0500 +@@ -393,9 +393,9 @@ + if content.startswith("#REDIRECT [["): + addr = "http://lyricwiki.org/index.php?title=%s&action=edit" % urllib.quote(content.split("[[")[1].split("]]")[0]) + content = urllib.urlopen(addr).read() +- lyrics = content.split("<lyrics>")[1].split("</lyrics>")[0] +- if lyrics.strip() != "<!-- PUT LYRICS HERE (and delete this entire line) -->": +- lyrics = misc.unescape_html(lyrics) ++ content = misc.unescape_html(content) ++ lyrics = content.split("<lyrics>")[1].split("</lyrics>")[0].strip() ++ if lyrics.strip() != "<!-- PUT LYRICS HERE (and delete this entire line) -->": + lyrics = misc.wiki_to_html(lyrics) + lyrics = lyrics.decode("utf-8") + # Save lyrics to file: diff --git a/staging/twisted/PKGBUILD b/staging/twisted/PKGBUILD new file mode 100644 index 000000000..35bf73958 --- /dev/null +++ b/staging/twisted/PKGBUILD @@ -0,0 +1,37 @@ +# $Id: PKGBUILD 168774 2012-10-15 21:19:51Z eric $ +# Maintainer : Ionut Biru <ibiru@archlinux.org> +# Contributor: Juergen Hoetzel <juergen@archlinux.org> +# Contributor: Douglas Soares de Andrade <douglas@archlinux.org> + +pkgname=twisted +pkgver=12.2.0 +pkgrel=2 +pkgdesc="Asynchronous networking framework written in Python." +arch=('i686' 'x86_64') +url="http://twistedmatrix.com/" +license=('MIT') +depends=('python2-crypto' 'python2-zope-interface') +optdepends=('python2-pyopenssl' + 'python2-soappy: for twisted.web.soap' + 'python2-pyasn1: for using conch' + 'pygtk: for using manhole' + 'tk: for using tkconch') +install=twisted.install +source=(http://twistedmatrix.com/Releases/Twisted/${pkgver%.*}/Twisted-$pkgver.tar.bz2) +sha1sums=('c51834c1270e7a4bb0de9190056e4317413920f9') + +build() { + cd "$srcdir/Twisted-$pkgver" + python2 setup.py build +} + +package() { + cd "$srcdir/Twisted-$pkgver" + python2 setup.py install --prefix=/usr --root="$pkgdir" --optimize=1 + install -D -m644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" + + sed -i 's:^#!.*bin.*python:#!/usr/bin/python2:' \ + "$pkgdir"/usr/lib/python2.7/site-packages/twisted/trial/test/scripttest.py \ + "$pkgdir"/usr/lib/python2.7/site-packages/twisted/mail/test/pop3testserver.py \ + "$pkgdir"/usr/lib/python2.7/site-packages/twisted/python/test/pullpipe.py +} diff --git a/staging/twisted/twisted.install b/staging/twisted/twisted.install new file mode 100644 index 000000000..8e93ffd3c --- /dev/null +++ b/staging/twisted/twisted.install @@ -0,0 +1,11 @@ +post_install() { + python2 -c 'from twisted.plugin import IPlugin, getPlugins; list(getPlugins(IPlugin))' >/dev/null 2>&1 || return 1 +} + +post_upgrade() { + post_install +} + +post_remove() { + find /usr/lib/python2.7/site-packages/twisted/plugins -name dropin.cache | xargs -r rm -f +} diff --git a/staging/vde2/PKGBUILD b/staging/vde2/PKGBUILD new file mode 100644 index 000000000..b4646d06e --- /dev/null +++ b/staging/vde2/PKGBUILD @@ -0,0 +1,50 @@ +# $Id: PKGBUILD 168790 2012-10-16 00:34:59Z allan $ +# Contributor: Sergej Pupykin +# Maintainer: Tobias Powalowski <tpowa@archlinux.org> +pkgname=vde2 +pkgver=2.3.2 +pkgrel=2 +pkgdesc="Virtual Distributed Ethernet for emulators like qemu" +url="http://sourceforge.net/projects/vde/" +license=("GPL" "LGPL" "CUSTOM") +arch=('i686' 'x86_64') +depends=('bash' 'libpcap' 'openssl') +makedepends=('python') +backup=(etc/conf.d/vde) +source=(http://downloads.sourceforge.net/vde/$pkgname-$pkgver.tar.bz2 + dhcpd.conf.sample + iptables.rules.sample + vde-config.sample + vde-connection.sample + vde.conf + vde.rc) +install=vde2.install +options=(!libtool !makeflags) + +build() { + cd $srcdir/$pkgname-$pkgver + ./configure --prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib/vde2 \ + --enable-experimental + make +} + +package() { + cd $srcdir/$pkgname-$pkgver + make prefix=$pkgdir/usr sysconfdir=$pkgdir/etc libexecdir=$pkgdir/usr/lib/vde2 install + install -D -m 755 ../vde.rc $pkgdir/etc/rc.d/vde + install -D -m 644 ../vde.conf $pkgdir/etc/conf.d/vde + install -D -m 644 ../vde-config.sample $pkgdir/etc/vde/vde-config.sample + install -D -m 644 ../vde-connection.sample $pkgdir/etc/vde/vde-connection.sample + install -D -m 644 ../dhcpd.conf.sample $pkgdir/usr/share/vde2/dhcpd.conf.sample + install -D -m 644 ../iptables.rules.sample $pkgdir/usr/share/vde2/iptables.rules.sample + # install slirp license + install -D -m 644 COPYING.slirpvde $pkgdir/usr/share/licenses/vde2/COPYING.slirpvde +} + +md5sums=('46fbc5f97f03dc517aa3b2c9d9ea6628' + '7d9bc56d2e561d849e915000d1c0f269' + 'a920123fc620bcedbccb703a8d1bdc55' + 'cb8ace28e8efd4dad128be4be71b3b07' + '63033c33565e2030541c5e05e9d9b063' + 'a22730f051f4840da4a3162a88ff8156' + '6c7dc01bc2f039f0ff1682ee70d3d1da') diff --git a/staging/vde2/dhcpd.conf.sample b/staging/vde2/dhcpd.conf.sample new file mode 100644 index 000000000..565a78b27 --- /dev/null +++ b/staging/vde2/dhcpd.conf.sample @@ -0,0 +1,12 @@ +ddns-update-style none; + +subnet 192.168.254.0 netmask 255.255.255.0 { + range 192.168.254.1 192.168.254.253; + option routers 192.168.254.254; + option domain-name "virtual.example.com"; + # find your DNS servers from /etc/resolv.conf + # otherwise only pure IP addresses will work + option domain-name-servers 192.168.254.254; + option broadcast-address 192.168.254.255; + default-lease-time 86400; +} diff --git a/staging/vde2/iptables.rules.sample b/staging/vde2/iptables.rules.sample new file mode 100644 index 000000000..ac712ee21 --- /dev/null +++ b/staging/vde2/iptables.rules.sample @@ -0,0 +1,5 @@ +*filter +-A INPUT -i tun -j ACCEPT +-A FORWARD -s 192.168.254.0/255.255.255.0 -j ACCEPT +*nat +-A POSTROUTING -s 192.168.254.0/24 -j MASQUERADE diff --git a/staging/vde2/vde-config.sample b/staging/vde2/vde-config.sample new file mode 100644 index 000000000..c5a5b7d88 --- /dev/null +++ b/staging/vde2/vde-config.sample @@ -0,0 +1,35 @@ +# Set options vde_switch program +# To activate this vde profile add it to /etc/conf.d/vde + +# Global options +VDE_NUMPORTS="32" # Number of ports (default 32) +VDE_HUB="no" # [yes|no] Make the switch act as a hub +VDE_FSTP="no" # [yes|no] Activate the fast spanning tree protocol +VDE_MAC="" # Set the Switch MAC address +VDE_PRIOTIRY="" # Set the priority for FST (MAC extension) +VDE_HASHSIZE="" # Hash table size + +# Options from datasock module +VDE_SOCK="/var/run/vde/sample.sock" # control directory pathname +VDE_SOCK_MODE="660" # Standard access mode for comm sockets (octal) +VDE_SOCK_GROUP="root" # Group owner for comm sockets + +# Options from consmgmt module +VDE_MANAGEMENT_SOCK="/var/run/vde/sample.mgmt" # path of the management UNIX socket +VDE_MANAGEMENT_SOCK_MODE="660" # management UNIX socket access mode (octal) + +# Other options to parse to vde_switch +VDE_OPTIONS="" + +# VDE with internet support +# You can use either tuntap method or slirpvde method. + +# Options from tuntap module +VDE_TAP="" # Enable routing through TAP tap interface (comma separated array eg.:"tap0,tap1"). + +# slirpvde daemon support +SLIRP="no" # [yes|no] enable/disable SLIRP daemon support +SLIRP_DHCP="no" # [yes|no] turn on the DHCP server for the network autoconfiguration of all the units connected to the VDE +SLIRP_NETWORK="" # specify the network address (default 10.0.2.0) +# other options to parse to slirpvde +SLIRP_OPTIONS=""
\ No newline at end of file diff --git a/staging/vde2/vde-connection.sample b/staging/vde2/vde-connection.sample new file mode 100644 index 000000000..4a75e1f52 --- /dev/null +++ b/staging/vde2/vde-connection.sample @@ -0,0 +1,6 @@ +# You can add vde switch connections below +# just without the # at the beginning: +# vde_plug /var/run/vde/sample.sock = vde_plug /var/run/vde/sample2.sock +# or if hosts are different use this syntax: +# vde_plug /var/run/vde/sample.sock = ssh host2 vde_plug /var/run/vde/sample.sock + diff --git a/staging/vde2/vde.conf b/staging/vde2/vde.conf new file mode 100644 index 000000000..bc61dceda --- /dev/null +++ b/staging/vde2/vde.conf @@ -0,0 +1,11 @@ +# Set options for a vde daemon script +# +# Array for your vde config files, eg.: "internal-net external-net" +# You need a config file in /etc/vde/ with the same name. +# Sample config file provided: /etc/vde/vde-config.sample +VDE_CONFIG="" + +# Array for your dpipe connections, eg.: "connect-switches" +# You need a config file in /etc/vde/ with the same name. +# Sample config file provided: /etc/vde/vde-connection.sample +VDE_CONNECTION=""
\ No newline at end of file diff --git a/staging/vde2/vde.rc b/staging/vde2/vde.rc new file mode 100755 index 000000000..b368f9955 --- /dev/null +++ b/staging/vde2/vde.rc @@ -0,0 +1,113 @@ +#!/bin/bash + +. /etc/rc.conf +. /etc/rc.d/functions +. /etc/conf.d/vde + +case "$1" in + start) + # bring up all defined profiles + for i in $VDE_CONFIG; do + [ -e /etc/vde/$i ] && . /etc/vde/$i + stat_busy "Starting vde_switch $i" + # get options from profile + [ -n "$VDE_NUMPORTS" ] && OPTIONS="-n $VDE_NUMPORTS" + [ "$VDE_HUB" = "yes" ] && OPTIONS="$OPTIONS -x" + [ "$VDE_FSTP" = "yes" ] && OPTIONS="$OPTIONS -F" + [ -n "$VDE_MAC" ] && OPTIONS="$OPTIONS --macaddr $VDE_MAC" + [ -n "$VDE_PRIORITY" ] && OPTIONS="$OPTIONS --priority $VDE_PRIORITY" + [ -n "$VDE_HASH" ] && OPTIONS="$OPTIONS --hashsize $VDE_HASH" + [ -n "$VDE_SOCK" ] && OPTIONS="$OPTIONS -s $VDE_SOCK" + [ -n "$VDE_SOCK_MODE" ] && OPTIONS="$OPTIONS -m $VDE_SOCK_MODE" + [ -n "$VDE_SOCK_GROUP" ] && OPTIONS="$OPTIONS -g $VDE_SOCK_GROUP" + [ -n "$VDE_MANAGEMENT_SOCK" ] && OPTIONS="$OPTIONS -M $VDE_MANAGEMENT_SOCK" + [ -n "$VDE_MANAGEMENT_SOCK_MODE" ] && OPTIONS="$OPTIONS --mgmtmode $VDE_MANAGEMENT_SOCK_MODE" + [ -n "$VDE_TAP" ] && OPTIONS="$OPTIONS -t $VDE_TAP" + [ -n "$VDE_OPTIONS" ] && OPTIONS="$OPTIONS $VDE_OPTIONS" + vde_switch $OPTIONS -p /var/run/vde-$i.pid -daemon &>/dev/null + [ -n "$VDE_SOCK" -a -n "$VDE_SOCK_GROUP" ] && chgrp "$VDE_SOCK_GROUP" "$VDE_SOCK" + if [ $? -gt 0 ]; then + stat_fail + else + stat_done + fi + if [ "$SLIRP" = "yes" ]; then + stat_busy "Starting slirpvde for $i" + [ "$SLIRP_DHCP" = "yes" ] && SP_OPTIONS="-D" + [ -n "$SLIRP_NETWORK" ] && SP_OPTIONS="$SP_OPTIONS -n $SLIRP_NETWORK" + [ -n "$SLIRP_OPTIONS" ] && SP_OPTIONS="$SP_OPTIONS $SLIRP_OPTIONS" + [ -n "$VDE_SOCK" ] && SP_OPTIONS="$SP_OPTIONS -s $VDE_SOCK" + [ -n "$VDE_SOCK_MODE" ] && SP_OPTIONS="$SP_OPTIONS -m $VDE_SOCK_MODE" + [ -n "$VDE_SOCK_GROUP" ] && SP_OPTIONS="$SP_OPTIONS -g $VDE_SOCK_GROUP" + slirpvde $SP_OPTIONS -p /var/run/slirpvde-$i.pid -daemon &>/dev/null + if [ $? -gt 0 ]; then + stat_fail + else + stat_done + fi + unset OPTIONS + unset SP_OPTIONS + fi + done + for i in $VDE_CONNECTION; do + # connect specified vde_switches + if [ "$(grep ^vde_plug /etc/vde/$i)" ]; then + stat_busy "Connecting VDE switches $i together..." + while read j; do + switch="$(echo $j | grep ^vde_plug)" + [ -n "$switch" ] && (dpipe $switch &) + done </etc/vde/$i + if [ $? -gt 0 ]; then + stat_fail + else + stat_done + fi + fi + done + add_daemon vde + ;; + stop) + # kill vde_plug if switches are connected + [ -n "$VDE_CONNECTION" ] && killall vde_plug >/dev/null 2>&1 + for i in $VDE_CONFIG; do + [ -e /etc/vde/$i ] && . /etc/vde/$i + if [ "$SLIRP" = "yes" ]; then + stat_busy "Stopping slirpvde for $i" + kill $(cat /var/run/slirpvde-$i.pid) &> /dev/null + if [ $? -gt 0 ]; then + stat_fail + else + stat_done + fi + rm /var/run/slirpvde-$i.pid &> /dev/null + fi + stat_busy "Stopping vde_switch $i" + kill $(cat /var/run/vde-$i.pid) &> /dev/null + if [ $? -gt 0 ]; then + stat_fail + else + stat_done + fi + rm /var/run/vde-$i.pid &> /dev/null + stat_busy "Removing $i vde sockets" + rm -rf $VDE_SOCK $VDE_MANAGEMENT_SOCK + if [ $? -gt 0 ]; then + stat_fail + else + stat_done + fi + done + unset OPTIONS + unset SP_OPTIONS + [ -e /var/run/vde/gmon.out ] && rm /var/run/vde/gmon.out + rm_daemon vde + ;; + restart) + $0 stop + sleep 3 + $0 start + ;; + *) + echo "usage: $0 {start|stop|restart}" +esac +exit 0 diff --git a/staging/vde2/vde2.install b/staging/vde2/vde2.install new file mode 100644 index 000000000..74e1710ff --- /dev/null +++ b/staging/vde2/vde2.install @@ -0,0 +1,10 @@ +post_install() { + echo "Change /etc/conf.d/vde to your needs." + echo "vde config files should be placed in /etc/vde, sample files are provided." + echo "iptables and dhcpd sample files have been installed to '/usr/share/vde2'." + echo "Merge those examples, if needed to the according config files." +} + +post_upgrade() { + post_install $1 +} diff --git a/staging/xfce4-session/PKGBUILD b/staging/xfce4-session/PKGBUILD new file mode 100644 index 000000000..1a320ff4a --- /dev/null +++ b/staging/xfce4-session/PKGBUILD @@ -0,0 +1,51 @@ +# $Id: PKGBUILD 168748 2012-10-15 13:21:21Z foutrelis $ +# Maintainer: Evangelos Foutras <evangelos@foutrelis.com> +# Contributor: tobias <tobias funnychar archlinux.org> + +pkgname=xfce4-session +pkgver=4.10.0 +pkgrel=6 +pkgdesc="A session manager for Xfce" +arch=('i686' 'x86_64') +url="http://www.xfce.org/" +license=('GPL2') +groups=('xfce4') +depends=('libxfce4ui' 'libwnck' 'libsm' 'xorg-iceauth' 'upower' 'xorg-xinit' + 'hicolor-icon-theme') +makedepends=('intltool' 'xfce4-dev-tools') +optdepends=('gnome-keyring: for keyring support when GNOME compatibility is enabled' + 'xscreensaver: for locking screen with xflock4' + 'gnome-screensaver: for locking screen with xflock4' + 'xlockmore: for locking screen with xflock4') +replaces=('xfce-utils') +options=('!libtool') +install=$pkgname.install +source=(http://archive.xfce.org/src/xfce/$pkgname/4.10/$pkgname-$pkgver.tar.bz2 + xfce4-session-4.10.0-add-systemd-support.patch) +sha256sums=('bb8aa9a74c3d382840596fb4875144d66c7f3f47c8e9ee81d31e3428a72c46ce' + 'ffae61c48a4bd0cb51d422cb93f2de9567abaf29085370c455ef349b6a10234b') + +build() { + cd "$srcdir/$pkgname-$pkgver" + + # https://bugzilla.xfce.org/show_bug.cgi?id=8729 + patch -Np1 -i "$srcdir/xfce4-session-4.10.0-add-systemd-support.patch" + + xdt-autogen + + ./configure \ + --prefix=/usr \ + --sysconfdir=/etc \ + --libexecdir=/usr/lib/xfce4 \ + --localstatedir=/var \ + --disable-static \ + --disable-debug + make +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make DESTDIR="$pkgdir" install +} + +# vim:set ts=2 sw=2 et: diff --git a/staging/xfce4-session/xfce4-session-4.10.0-add-systemd-support.patch b/staging/xfce4-session/xfce4-session-4.10.0-add-systemd-support.patch new file mode 100644 index 000000000..7ab637b26 --- /dev/null +++ b/staging/xfce4-session/xfce4-session-4.10.0-add-systemd-support.patch @@ -0,0 +1,388 @@ +diff --git a/xfce4-session/xfsm-systemd.c b/xfce4-session/xfsm-systemd.c +index 4076586..90e7873 100644 +--- /dev/null ++++ b/xfce4-session/xfsm-systemd.c +@@ -0,0 +1,123 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- ++ * ++ * Copyright (C) 2012 Christian Hesse ++ * ++ * Licensed under the GNU General Public License Version 2 ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++ */ ++ ++#include <config.h> ++ ++#include <gio/gio.h> ++#include <polkit/polkit.h> ++ ++#include "xfsm-systemd.h" ++ ++#define SYSTEMD_DBUS_NAME "org.freedesktop.login1" ++#define SYSTEMD_DBUS_PATH "/org/freedesktop/login1" ++#define SYSTEMD_DBUS_INTERFACE "org.freedesktop.login1.Manager" ++#define SYSTEMD_REBOOT_ACTION "org.freedesktop.login1.reboot" ++#define SYSTEMD_SHUTDOWN_ACTION "org.freedesktop.login1.power-off" ++ ++struct _SystemdProxy { ++ PolkitAuthority *authority; ++ PolkitSubject *subject; ++}; ++ ++SystemdProxy * ++systemd_proxy_new (void) ++{ ++ SystemdProxy *proxy; ++ ++ proxy = g_new0 (SystemdProxy, 1); ++ ++ proxy->authority = polkit_authority_get_sync (NULL, NULL); ++ proxy->subject = polkit_unix_process_new (getpid()); ++ ++ return proxy; ++} ++ ++void ++systemd_proxy_free (SystemdProxy *proxy) ++{ ++ g_object_unref (proxy->authority); ++ g_object_unref (proxy->subject); ++ ++ g_free (proxy); ++} ++ ++gboolean systemd_proxy_can_method (SystemdProxy *proxy, gboolean *can_method, const gchar *method, GError **error) ++{ ++ PolkitAuthorizationResult *res; ++ GError *local_error = NULL; ++ ++ *can_method = FALSE; ++ res = polkit_authority_check_authorization_sync (proxy->authority, ++ proxy->subject, ++ method, ++ NULL, ++ POLKIT_CHECK_AUTHORIZATION_FLAGS_NONE, ++ NULL, ++ &local_error); ++ if (res == NULL) { ++ g_propagate_error (error, local_error); ++ return FALSE; ++ } ++ ++ *can_method = polkit_authorization_result_get_is_authorized (res) || ++ polkit_authorization_result_get_is_challenge (res); ++ ++ g_object_unref (res); ++ ++ return TRUE; ++} ++ ++gboolean systemd_proxy_can_restart (SystemdProxy *proxy, gboolean *can_restart, GError **error) ++{ ++ return systemd_proxy_can_method(proxy, can_restart, SYSTEMD_REBOOT_ACTION, error); ++} ++ ++gboolean systemd_proxy_can_shutdown (SystemdProxy *proxy, gboolean *can_shutdown, GError **error) ++{ ++ return systemd_proxy_can_method(proxy, can_shutdown, SYSTEMD_SHUTDOWN_ACTION, error); ++} ++ ++gboolean systemd_proxy_method (SystemdProxy *proxy, const gchar *method, GError **error) ++{ ++ GDBusConnection *bus; ++ ++ bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL); ++ g_dbus_connection_call_sync (bus, ++ SYSTEMD_DBUS_NAME, ++ SYSTEMD_DBUS_PATH, ++ SYSTEMD_DBUS_INTERFACE, ++ method, ++ g_variant_new ("(b)", TRUE), ++ NULL, 0, G_MAXINT, NULL, NULL); ++ g_object_unref (bus); ++ ++ return TRUE; ++} ++ ++gboolean systemd_proxy_restart (SystemdProxy *proxy, GError **error) ++{ ++ return systemd_proxy_method(proxy, "Reboot", error); ++} ++ ++gboolean systemd_proxy_shutdown (SystemdProxy *proxy, GError **error) ++{ ++ return systemd_proxy_method(proxy, "PowerOff", error); ++} +diff --git a/xfce4-session/xfsm-systemd.h b/xfce4-session/xfsm-systemd.h +index 3fa8317..2c4d868 100644 +--- /dev/null ++++ b/xfce4-session/xfsm-systemd.h +@@ -0,0 +1,42 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- ++ * ++ * Copyright (C) 2012 Christian Hesse ++ * ++ * Licensed under the GNU General Public License Version 2 ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++ */ ++ ++#ifndef __SYSTEMD_PROXY_H__ ++#define __SYSTEMD_PROXY_H__ ++ ++#include <glib.h> ++ ++G_BEGIN_DECLS ++ ++typedef struct _SystemdProxy SystemdProxy; ++ ++SystemdProxy *systemd_proxy_new (void); ++void systemd_proxy_free (SystemdProxy *proxy); ++gboolean systemd_proxy_can_method (SystemdProxy *proxy, gboolean *can_method, const char *method, GError **error); ++gboolean systemd_proxy_can_restart (SystemdProxy *proxy, gboolean *can_restart, GError **error); ++gboolean systemd_proxy_can_shutdown (SystemdProxy *proxy, gboolean *can_shutdown, GError **error); ++gboolean systemd_proxy_method (SystemdProxy *proxy, const char *method, GError **error); ++gboolean systemd_proxy_restart (SystemdProxy *proxy, GError **error); ++gboolean systemd_proxy_shutdown (SystemdProxy *proxy, GError **error); ++ ++G_END_DECLS ++ ++#endif /* __SYSTEMD_PROXY_H__ */ + +commit 518a28c23f110617aad36e64c02cdab6a36adf37 +Author: Christian Hesse <eworm@leda.eworm.de> +Date: Fri Jul 27 14:21:14 2012 +0200 + + ... + +diff --git a/configure.in.in b/configure.in.in +index 9aa4f8f..aa0b8bb 100644 +--- a/configure.in ++++ b/configure.in +@@ -96,6 +96,33 @@ XDT_CHECK_PACKAGE([DBUS], [dbus-1], [1.1.0]) + XDT_CHECK_PACKAGE([DBUS_GLIB], [dbus-glib-1], [0.84]) + XDT_CHECK_PACKAGE([XFCONF], [libxfconf-0], [4.9.0]) + ++dnl systemd integration ++AC_ARG_ENABLE([systemd], ++ AS_HELP_STRING([--enable-systemd], [Use systemd]), ++ [with_systemd=$enableval], ++ [with_systemd=auto]) ++PKG_CHECK_MODULES(SYSTEMD, ++ [libsystemd-login polkit-gobject-1], ++ [have_systemd=yes], [have_systemd=no]) ++AC_MSG_CHECKING([whether to use systemd]) ++if test x$with_systemd = xauto ; then ++ if test x$have_systemd = xno ; then ++ with_systemd=no ++ else ++ with_systemd=yes ++ fi ++fi ++AC_MSG_RESULT($with_systemd) ++if test x$with_systemd = xyes; then ++ if test x$have_systemd = xno; then ++ AC_MSG_ERROR([Systemd support explicitly required, but systemd not found]) ++ fi ++ AC_DEFINE(HAVE_SYSTEMD, 1, [Define if systemd is used for session tracking]) ++fi ++AC_SUBST(SYSTEMD_CFLAGS) ++AC_SUBST(SYSTEMD_LIBS) ++AM_CONDITIONAL(WITH_SYSTEMD, [test "$with_systemd" = "yes"], [Using systemd]) ++ + dnl Check for debugging support + XDT_FEATURE_DEBUG([xfsm_debug_default]) + + +commit f1279eba9452f027a2037be77388767437161d51 +Author: Christian Hesse <eworm@leda.eworm.de> +Date: Fri Jul 27 14:18:16 2012 +0200 + + ... + +diff --git a/xfce4-session/xfsm-shutdown.c b/xfce4-session/xfsm-shutdown.c +index 1429abd..077cdf3 100644 +--- a/xfce4-session/xfsm-shutdown.c ++++ b/xfce4-session/xfsm-shutdown.c +@@ -96,7 +96,11 @@ struct _XfsmShutdown + { + GObject __parent__; + ++#ifdef HAVE_SYSTEMD ++ SystemdProxy *systemd_proxy; ++#else + XfsmConsolekit *consolekit; ++#endif + XfsmUPower *upower; + + /* kiosk settings */ +@@ -134,7 +138,11 @@ xfsm_shutdown_init (XfsmShutdown *shutdown) + { + XfceKiosk *kiosk; + ++#ifdef HAVE_SYSTEMD ++ shutdown->systemd_proxy = systemd_proxy_new (); ++#else + shutdown->consolekit = xfsm_consolekit_get (); ++#endif + shutdown->upower = xfsm_upower_get (); + shutdown->helper_state = SUDO_NOT_INITIAZED; + shutdown->helper_require_password = FALSE; +@@ -153,7 +161,11 @@ xfsm_shutdown_finalize (GObject *object) + { + XfsmShutdown *shutdown = XFSM_SHUTDOWN (object); + ++#ifdef HAVE_SYSTEMD ++ systemd_proxy_free (shutdown->systemd_proxy); ++#else + g_object_unref (G_OBJECT (shutdown->consolekit)); ++#endif + g_object_unref (G_OBJECT (shutdown->upower)); + + /* close down helper */ +@@ -644,7 +656,11 @@ xfsm_shutdown_try_restart (XfsmShutdown *shutdown, + if (shutdown->helper_state == SUDO_AVAILABLE) + return xfsm_shutdown_sudo_try_action (shutdown, XFSM_SHUTDOWN_RESTART, error); + else ++#ifdef HAVE_SYSTEMD ++ return systemd_proxy_restart (shutdown->systemd_proxy, error); ++#else + return xfsm_consolekit_try_restart (shutdown->consolekit, error); ++#endif + } + + +@@ -661,7 +677,11 @@ xfsm_shutdown_try_shutdown (XfsmShutdown *shutdown, + if (shutdown->helper_state == SUDO_AVAILABLE) + return xfsm_shutdown_sudo_try_action (shutdown, XFSM_SHUTDOWN_SHUTDOWN, error); + else ++#ifdef HAVE_SYSTEMD ++ return systemd_proxy_shutdown (shutdown->systemd_proxy, error); ++#else + return xfsm_consolekit_try_shutdown (shutdown->consolekit, error); ++#endif + } + + +@@ -701,7 +721,11 @@ xfsm_shutdown_can_restart (XfsmShutdown *shutdown, + return TRUE; + } + ++#ifdef HAVE_SYSTEMD ++ if (systemd_proxy_can_restart (shutdown->systemd_proxy, can_restart, error)) ++#else + if (xfsm_consolekit_can_restart (shutdown->consolekit, can_restart, error)) ++#endif + return TRUE; + + if (xfsm_shutdown_sudo_init (shutdown, error)) +@@ -728,7 +752,11 @@ xfsm_shutdown_can_shutdown (XfsmShutdown *shutdown, + return TRUE; + } + ++#ifdef HAVE_SYSTEMD ++ if (systemd_proxy_can_shutdown (shutdown->systemd_proxy, can_shutdown, error)) ++#else + if (xfsm_consolekit_can_shutdown (shutdown->consolekit, can_shutdown, error)) ++#endif + return TRUE; + + if (xfsm_shutdown_sudo_init (shutdown, error)) + +commit 5aea3fb853683246a537a67423cf5b32076b8dfb +Author: Christian Hesse <eworm@leda.eworm.de> +Date: Fri Jul 27 14:03:27 2012 +0200 + + ... + +diff --git a/xfce4-session/Makefile.am b/xfce4-session/Makefile.am +index c015154..7e3b311 100644 +--- a/xfce4-session/Makefile.am ++++ b/xfce4-session/Makefile.am +@@ -38,8 +38,6 @@ xfce4_session_SOURCES = \ + xfsm-compat-gnome.h \ + xfsm-compat-kde.c \ + xfsm-compat-kde.h \ +- xfsm-consolekit.c \ +- xfsm-consolekit.h \ + xfsm-dns.c \ + xfsm-dns.h \ + xfsm-error.c \ +@@ -65,6 +63,16 @@ xfce4_session_SOURCES = \ + xfsm-upower.c \ + xfsm-upower.h + ++if WITH_SYSTEMD ++xfce4_session_SOURCES += \ ++ xfsm-systemd.c \ ++ xfsm-systemd.h ++else ++xfce4_session_SOURCES += \ ++ xfsm-consolekit.c \ ++ xfsm-consolekit.h ++endif ++ + xfce4_session_CFLAGS = \ + $(LIBSM_CFLAGS) \ + $(LIBX11_CFLAGS) \ +@@ -72,6 +80,7 @@ xfce4_session_CFLAGS = \ + $(DBUS_CFLAGS) \ + $(DBUS_GLIB_CFLAGS) \ + $(LIBWNCK_CFLAGS) \ ++ $(SYSTEMD_CFLAGS) \ + $(XFCONF_CFLAGS) \ + $(GMODULE_CFLAGS) \ + $(PLATFORM_CFLAGS) +@@ -91,6 +100,7 @@ xfce4_session_LDADD = \ + $(DBUS_LIBS) \ + $(DBUS_GLIB_LIBS) \ + $(LIBWNCK_LIBS) \ ++ $(SYSTEMD_LIBS) \ + $(XFCONF_LIBS) \ + -lm + +diff --git a/xfce4-session/xfsm-shutdown.c b/xfce4-session/xfsm-shutdown.c +index d8757a8..1429abd 100644 +--- a/xfce4-session/xfsm-shutdown.c ++++ b/xfce4-session/xfsm-shutdown.c +@@ -66,10 +66,13 @@ + #include <xfce4-session/xfsm-fadeout.h> + #include <xfce4-session/xfsm-global.h> + #include <xfce4-session/xfsm-legacy.h> +-#include <xfce4-session/xfsm-consolekit.h> + #include <xfce4-session/xfsm-upower.h> + +- ++#ifdef HAVE_SYSTEMD ++#include <xfce4-session/xfsm-systemd.h> ++#else ++#include <xfce4-session/xfsm-consolekit.h> ++#endif + + static void xfsm_shutdown_finalize (GObject *object); + static void xfsm_shutdown_sudo_free (XfsmShutdown *shutdown); diff --git a/staging/xfce4-session/xfce4-session.install b/staging/xfce4-session/xfce4-session.install new file mode 100644 index 000000000..e4f8fd06c --- /dev/null +++ b/staging/xfce4-session/xfce4-session.install @@ -0,0 +1,13 @@ +post_install() { + gtk-update-icon-cache -q -t -f usr/share/icons/hicolor +} + +post_upgrade() { + post_install +} + +post_remove() { + post_install +} + +# vim:set ts=2 sw=2 et: diff --git a/staging/xorg-xdm/PKGBUILD b/staging/xorg-xdm/PKGBUILD new file mode 100644 index 000000000..6da8b604c --- /dev/null +++ b/staging/xorg-xdm/PKGBUILD @@ -0,0 +1,60 @@ +# $Id: PKGBUILD 168625 2012-10-13 15:55:26Z andyrtr $ +# Maintainer: Alexander Baldeck <alexander@archlinux.org> +# Contributor: Jan de Groot <jgc@archlinux.org> +pkgname=xorg-xdm +pkgver=1.1.11 +pkgrel=4 +pkgdesc="X Display Manager" +arch=(i686 x86_64) +url="http://xorg.freedesktop.org/" +license=('custom') +depends=('pam' 'libxaw' 'libxinerama' 'xorg-xrdb' 'xorg-sessreg' 'libxft' 'systemd') +makedepends=('pkgconfig' 'xorg-util-macros' 'xtrans') +backup=(etc/X11/xdm/Xaccess etc/X11/xdm/Xresources etc/X11/xdm/Xservers etc/X11/xdm/xdm-config etc/pam.d/xdm etc/X11/xdm/Xsetup_0 etc/X11/xdm/Xsession) +options=('!libtool') +source=(${url}/releases/individual/app/xdm-${pkgver}.tar.bz2 + Xsession-loginshell.patch + Xsession-xsm.patch + xdm-1.0.5-sessreg-utmp-fix-bug177890.patch + xdm.pam + git_fixes.diff) +sha256sums=('d4da426ddea0124279a3f2e00a26db61944690628ee818a64df9d27352081c47' + 'fd3e7c20837b42a8ab111369fd6dc9612f9edb91c1f6904cca1d6a1fa3cfa0ff' + '77a1ce9bdf363591b72798db08b4df3589bd4e64737fd32cf9028f9245450edb' + '5f380a2d6f77feb910d77f7f6843fce9b00ff7610c159fc029ee44cc6c23a48a' + '7d6818a1c1a44e9bd38774c035e03b0b831f6646681bc2bf556761aec7baf418' + '781b5577bb070220d018a11832d0d4a65fd16e130730ba26fb055c3aa68156b2') + +build() { + cd "${srcdir}/xdm-${pkgver}" + # upstream commits - Add some missing malloc failure checks 2012-01-07 + patch -Np1 -i "${srcdir}/git_fixes.diff" + + patch -Np0 -i "${srcdir}/Xsession-loginshell.patch" + patch -Np1 -i "${srcdir}/Xsession-xsm.patch" + patch -Np0 -i "${srcdir}/xdm-1.0.5-sessreg-utmp-fix-bug177890.patch" + + autoreconf -fi + ./configure --prefix=/usr \ + --disable-xdm-auth \ + --disable-static \ + --with-xdmconfigdir=/etc/X11/xdm \ + --with-xdmscriptdir=/etc/X11/xdm \ + --with-pixmapdir=/usr/share/xdm/pixmaps + make +} + +package() { + cd "${srcdir}/xdm-${pkgver}" + make DESTDIR="${pkgdir}" install + install -m755 -d "${pkgdir}/var/lib/xdm" + install -m755 -d "${pkgdir}/etc/pam.d" + install -m644 "${srcdir}/xdm.pam" "${pkgdir}/etc/pam.d/xdm" + install -m755 -d "${pkgdir}/usr/share/licenses/${pkgname}" + install -m644 COPYING "${pkgdir}/usr/share/licenses/${pkgname}/" + + sed -i -e 's/\/X11R6//g' "${pkgdir}"/etc/X11/xdm/* + + sed -i 's|^Alias=.*|Alias=display-manager.service|' \ + "$pkgdir/usr/lib/systemd/system/xdm.service" +} diff --git a/staging/xorg-xdm/Xsession-loginshell.patch b/staging/xorg-xdm/Xsession-loginshell.patch new file mode 100644 index 000000000..3710752ef --- /dev/null +++ b/staging/xorg-xdm/Xsession-loginshell.patch @@ -0,0 +1,15 @@ +--- config/Xsession.cpp.orig 2008-06-21 13:57:36.000000000 +0000 ++++ config/Xsession.cpp 2008-06-21 14:01:25.000000000 +0000 +@@ -56,11 +56,7 @@ + resources=$HOME/.Xresources + + if [ -s "$startup" ]; then +- if [ -x "$startup" ]; then +- exec "$startup" +- else +- exec /bin/sh "$startup" +- fi ++ exec /bin/sh -ls -c "$startup" + else + if [ -r "$resources" ]; then + BINDIR/xrdb -load "$resources" diff --git a/staging/xorg-xdm/Xsession-xsm.patch b/staging/xorg-xdm/Xsession-xsm.patch new file mode 100644 index 000000000..a2d4d6cc6 --- /dev/null +++ b/staging/xorg-xdm/Xsession-xsm.patch @@ -0,0 +1,22 @@ +diff -Naur xdm-1.1.8-orig/config/Xsession.cpp xdm-1.1.8/config/Xsession.cpp +--- xdm-1.1.8-orig/config/Xsession.cpp 2008-05-21 14:08:45.000000000 -0400 ++++ xdm-1.1.8/config/Xsession.cpp 2009-04-28 02:56:11.000000000 -0400 +@@ -54,6 +54,7 @@ + + startup=$HOME/.xsession + resources=$HOME/.Xresources ++xinitrc=$HOME/.xinitrc + + if [ -s "$startup" ]; then + if [ -x "$startup" ]; then +@@ -83,5 +84,9 @@ + exec `eval $XDESKTOP` + } + #endif +- exec BINDIR/xsm ++ if [ -r "$xinitrc" ]; then ++ exec /bin/sh -ls -c "$xinitrc" ++ else ++ exec /bin/sh -l /etc/X11/xinit/xinitrc ++ fi + fi diff --git a/staging/xorg-xdm/git_fixes.diff b/staging/xorg-xdm/git_fixes.diff new file mode 100644 index 000000000..69836d488 --- /dev/null +++ b/staging/xorg-xdm/git_fixes.diff @@ -0,0 +1,673 @@ +From 011a2710a69cd345a8ee3a6b2f15407b4c3b355a Mon Sep 17 00:00:00 2001 +From: Jeremy Huddleston <jeremyhu@apple.com> +Date: Sun, 25 Sep 2011 07:56:15 +0000 +Subject: Require xt >= 1.0 for appdefaultdir + +https://bugs.freedesktop.org/show_bug.cgi?id=7237 + +Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com> +--- +diff --git a/configure.ac b/configure.ac +index b488f0c..a4222f1 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -383,7 +383,7 @@ PKG_CHECK_MODULES(AUTH, xau) + # Greeter + # + +-PKG_CHECK_MODULES(XDMGREET, xt x11 xext) ++PKG_CHECK_MODULES(XDMGREET, xt >= 1.0 x11 xext) + + GREETERLIB="${XDMLIBDIR}/libXdmGreet.so" + AX_DEFINE_DIR(DEF_GREETER_LIB, GREETERLIB, [Location of Xdm Greeter library]) +-- +cgit v0.9.0.2-2-gbebe +From 618039261b0c7f14eb3b32c8f636464369724407 Mon Sep 17 00:00:00 2001 +From: Alan Coopersmith <alan.coopersmith@oracle.com> +Date: Wed, 21 Sep 2011 02:11:20 +0000 +Subject: Mark some chars as const to fix gcc -Wwrite-strings warnings + +Can't fix all the warnings, due to the Xt API, but can fix a bunch. + +Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> +--- +diff --git a/greeter/greet.c b/greeter/greet.c +index 539ce17..82e2c21 100644 +--- a/greeter/greet.c ++++ b/greeter/greet.c +@@ -110,9 +110,9 @@ void (*__xdm_SessionExit)(struct display *d, int status, int removeAuth) = NU + void (*__xdm_DeleteXloginResources)(struct display *d, Display *dpy) = NULL; + int (*__xdm_source)(char **environ, char *file) = NULL; + char **(*__xdm_defaultEnv)(void) = NULL; +-char **(*__xdm_setEnv)(char **e, char *name, char *value) = NULL; ++char **(*__xdm_setEnv)(char **e, const char *name, const char *value) = NULL; + char **(*__xdm_putEnv)(const char *string, char **env) = NULL; +-char **(*__xdm_parseArgs)(char **argv, char *string) = NULL; ++char **(*__xdm_parseArgs)(char **argv, const char *string) = NULL; + void (*__xdm_printEnv)(char **e) = NULL; + char **(*__xdm_systemEnv)(struct display *d, char *user, char *home) = NULL; + void (*__xdm_LogOutOfMem)(const char * fmt, ...) = NULL; +diff --git a/greeter/verify.c b/greeter/verify.c +index ea62cd2..5d2ad17 100644 +--- a/greeter/verify.c ++++ b/greeter/verify.c +@@ -61,7 +61,7 @@ from The Open Group. + extern char *crypt(const char *, const char *); + #endif + +-static char *envvars[] = { ++static const char *envvars[] = { + "TZ", /* SYSV and SVR4, but never hurts */ + #if defined(sony) && !defined(SYSTYPE_SYSV) && !defined(_SYSTYPE_SYSV) + "bootdev", +@@ -94,8 +94,8 @@ static char ** + userEnv (struct display *d, int useSystemPath, char *user, char *home, char *shell) + { + char **env; +- char **envvar; +- char *str; ++ const char **envvar; ++ const char *str; + + env = defaultEnv (); + env = setEnv (env, "DISPLAY", d->name); +diff --git a/include/dm.h b/include/dm.h +index 316dd46..4085cae 100644 +--- a/include/dm.h ++++ b/include/dm.h +@@ -443,7 +443,7 @@ extern void UnsecureDisplay (struct display *d, Display *dpy); + extern void execute(char **argv, char **environ); + + /* server.c */ +-extern char *_SysErrorMsg (int n); ++extern const char *_SysErrorMsg (int n); + extern int StartServer (struct display *d); + extern int WaitForServer (struct display *d); + extern void ResetServer (struct display *d); +@@ -462,10 +462,10 @@ extern int Asprintf(char ** ret, const char *restrict format, ...) + _X_ATTRIBUTE_PRINTF(2,3); + # endif + extern char *localHostname (void); +-extern char **parseArgs (char **argv, char *string); +-extern char **setEnv (char **e, char *name, char *value); ++extern char **parseArgs (char **argv, const char *string); ++extern char **setEnv (char **e, const char *name, const char *value); + extern char **putEnv(const char *string, char **env); +-extern char *getEnv (char **e, char *name); ++extern char *getEnv (char **e, const char *name); + extern void CleanUpChild (void); + extern void freeArgs (char **argv); + extern void freeEnv (char **env); +@@ -478,7 +478,7 @@ extern int Verify (struct display *d, struct greet_info *greet, struct verify_in + extern char *NetworkAddressToHostname (CARD16 connectionType, ARRAY8Ptr connectionAddress); + extern int AnyWellKnownSockets (void); + extern void DestroyWellKnownSockets (void); +-extern void SendFailed (struct display *d, char *reason); ++extern void SendFailed (struct display *d, const char *reason); + extern void StopDisplay (struct display *d); + extern void WaitForChild (void); + extern void WaitForSomething (void); +diff --git a/include/greet.h b/include/greet.h +index 6b6689e..0d607ba 100644 +--- a/include/greet.h ++++ b/include/greet.h +@@ -65,9 +65,9 @@ struct dlfuncs { + void (*_DeleteXloginResources)(struct display *d, Display *dpy); + int (*_source)(char **environ, char *file); + char **(*_defaultEnv)(void); +- char **(*_setEnv)(char **e, char *name, char *value); ++ char **(*_setEnv)(char **e, const char *name, const char *value); + char **(*_putEnv)(const char *string, char **env); +- char **(*_parseArgs)(char **argv, char *string); ++ char **(*_parseArgs)(char **argv, const char *string); + void (*_printEnv)(char **e); + char **(*_systemEnv)(struct display *d, char *user, char *home); + void (*_LogOutOfMem)(const char * fmt, ...); +@@ -149,9 +149,9 @@ extern void (*__xdm_SessionExit)(struct display *d, int status, int removeAut + extern void (*__xdm_DeleteXloginResources)(struct display *d, Display *dpy); + extern int (*__xdm_source)(char **environ, char *file); + extern char **(*__xdm_defaultEnv)(void); +-extern char **(*__xdm_setEnv)(char **e, char *name, char *value); ++extern char **(*__xdm_setEnv)(char **e, const char *name, const char *value); + extern char **(*__xdm_putEnv)(const char *string, char **env); +-extern char **(*__xdm_parseArgs)(char **argv, char *string); ++extern char **(*__xdm_parseArgs)(char **argv, const char *string); + extern void (*__xdm_printEnv)(char **e); + extern char **(*__xdm_systemEnv)(struct display *d, char *user, char *home); + extern void (*__xdm_LogOutOfMem)(const char * fmt, ...); +diff --git a/xdm/access.c b/xdm/access.c +index d0850ad..7035375 100644 +--- a/xdm/access.c ++++ b/xdm/access.c +@@ -667,7 +667,7 @@ scanHostlist ( + /* Returns non-0 iff string is matched by pattern. Does case folding. + */ + static int +-patternMatch (char *string, char *pattern) ++patternMatch (const char *string, char *pattern) + { + int p, s; + +diff --git a/xdm/auth.c b/xdm/auth.c +index bbca167..9e5cba2 100644 +--- a/xdm/auth.c ++++ b/xdm/auth.c +@@ -116,7 +116,7 @@ int chown(int a,int b,int c) {} + + struct AuthProtocol { + unsigned short name_length; +- char *name; ++ const char *name; + void (*InitAuth)(unsigned short len, char *name); + Xauth *(*GetAuth)(unsigned short len, char *name); + void (*GetXdmcpAuth)( +diff --git a/xdm/file.c b/xdm/file.c +index 6e929b8..7b7f3d3 100644 +--- a/xdm/file.c ++++ b/xdm/file.c +@@ -225,7 +225,7 @@ ParseDisplay (char *source, DisplayType *acceptableTypes, int numAcceptable) + } + + static struct displayMatch { +- char *name; ++ const char *name; + DisplayType type; + } displayTypes[] = { + { "local", { Local, Permanent, FromFile } }, +diff --git a/xdm/resource.c b/xdm/resource.c +index ece4de3..83901a2 100644 +--- a/xdm/resource.c ++++ b/xdm/resource.c +@@ -145,10 +145,10 @@ int choiceTimeout; /* chooser choice timeout */ + #define DEF_UDP_PORT "177" /* registered XDMCP port, dont change */ + + struct dmResources { +- char *name, *class; +- int type; +- char **dm_value; +- char *default_value; ++ const char *name, *class; ++ int type; ++ char **dm_value; ++ const char *default_value; + } DmResources[] = { + { "servers", "Servers", DM_STRING, &servers, + DEF_SERVER_LINE} , +@@ -203,10 +203,10 @@ struct dmResources { + #define boffset(f) XtOffsetOf(struct display, f) + + struct displayResource { +- char *name, *class; +- int type; +- int offset; +- char *default_value; ++ const char *name, *class; ++ int type; ++ int offset; ++ const char *default_value; + }; + + /* resources for managing the server */ +@@ -289,15 +289,16 @@ XrmDatabase DmResourceDB; + + static void + GetResource ( +- char *name, +- char *class, +- int valueType, +- char **valuep, +- char *default_value) ++ const char *name, ++ const char *class, ++ int valueType, ++ char **valuep, ++ const char *default_value) + { + char *type; + XrmValue value; +- char *string, *new_string; ++ const char *string; ++ char *new_string; + char str_buf[50]; + int len; + +diff --git a/xdm/server.c b/xdm/server.c +index 7fe55e6..1bb8873 100644 +--- a/xdm/server.c ++++ b/xdm/server.c +@@ -62,9 +62,9 @@ CatchUsr1 (int n) + errno = olderrno; + } + +-char *_SysErrorMsg (int n) ++const char *_SysErrorMsg (int n) + { +- char *s = strerror(n); ++ const char *s = strerror(n); + return (s ? s : "unknown error"); + } + +diff --git a/xdm/util.c b/xdm/util.c +index 033633a..60aab21 100644 +--- a/xdm/util.c ++++ b/xdm/util.c +@@ -97,7 +97,7 @@ printEnv (char **e) + } + + static char * +-makeEnv (char *name, char *value) ++makeEnv (const char *name, const char *value) + { + char *result; + +@@ -111,7 +111,7 @@ makeEnv (char *name, char *value) + } + + char * +-getEnv (char **e, char *name) ++getEnv (char **e, const char *name) + { + int l = strlen (name); + +@@ -127,7 +127,7 @@ getEnv (char **e, char *name) + } + + char ** +-setEnv (char **e, char *name, char *value) ++setEnv (char **e, const char *name, const char *value) + { + char **new, **old; + char *newe; +@@ -207,9 +207,9 @@ freeEnv (char **env) + #define isblank(c) ((c) == ' ' || c == '\t') + + char ** +-parseArgs (char **argv, char *string) ++parseArgs (char **argv, const char *string) + { +- char *word; ++ const char *word; + char *save; + char **newargv; + int i; +diff --git a/xdm/xdmauth.c b/xdm/xdmauth.c +index 4b945cf..66804a4 100644 +--- a/xdm/xdmauth.c ++++ b/xdm/xdmauth.c +@@ -44,7 +44,7 @@ static char auth_name[256]; + static int auth_name_len; + + static void +-XdmPrintDataHex (char *s, char *a, int l) ++XdmPrintDataHex (const char *s, const char *a, int l) + { + int i; + +@@ -56,7 +56,7 @@ XdmPrintDataHex (char *s, char *a, int l) + + # ifdef XDMCP + static void +-XdmPrintArray8Hex (char *s, ARRAY8Ptr a) ++XdmPrintArray8Hex (const char *s, ARRAY8Ptr a) + { + XdmPrintDataHex (s, (char *) a->data, a->length); + } +diff --git a/xdm/xdmcp.c b/xdm/xdmcp.c +index 5bc4716..1c34e7c 100644 +--- a/xdm/xdmcp.c ++++ b/xdm/xdmcp.c +@@ -74,7 +74,7 @@ static void request_respond (struct sockaddr *from, int fromlen, int length, int + static void send_accept (struct sockaddr *to, int tolen, CARD32 sessionID, ARRAY8Ptr authenticationName, ARRAY8Ptr authenticationData, ARRAY8Ptr authorizationName, ARRAY8Ptr authorizationData, int fd); + static void send_alive (struct sockaddr *from, int fromlen, int length, int fd); + static void send_decline (struct sockaddr *to, int tolen, ARRAY8Ptr authenticationName, ARRAY8Ptr authenticationData, ARRAY8Ptr status, int fd); +-static void send_failed (struct sockaddr *from, int fromlen, char *name, CARD32 sessionID, char *reason, int fd); ++static void send_failed (struct sockaddr *from, int fromlen, const char *name, CARD32 sessionID, const char *reason, int fd); + static void send_refuse (struct sockaddr *from, int fromlen, CARD32 sessionID, int fd); + static void send_unwilling (struct sockaddr *from, int fromlen, ARRAY8Ptr authenticationName, ARRAY8Ptr status, int fd); + static void send_willing (struct sockaddr *from, int fromlen, ARRAY8Ptr authenticationName, ARRAY8Ptr status, int fd); +@@ -1300,7 +1300,7 @@ abort: + void + SendFailed ( + struct display *d, +- char *reason) ++ const char *reason) + { + Debug ("Display start failed, sending Failed\n"); + send_failed ((struct sockaddr *)(d->from), d->fromlen, d->name, +@@ -1311,9 +1311,9 @@ static void + send_failed ( + struct sockaddr *from, + int fromlen, +- char *name, ++ const char *name, + CARD32 sessionID, +- char *reason, ++ const char *reason, + int fd) + { + static char buf[256]; +@@ -1416,7 +1416,7 @@ NetworkAddressToHostname ( + # else + char dotted[20]; + # endif +- char *local_name = ""; ++ const char *local_name = ""; + int af_type; + + # if defined(IPv6) && defined(AF_INET6) +-- +cgit v0.9.0.2-2-gbebe +From c43eb799774743bc50233eff6643c51a5fbe6899 Mon Sep 17 00:00:00 2001 +From: Alan Coopersmith <alan.coopersmith@oracle.com> +Date: Wed, 21 Sep 2011 02:22:48 +0000 +Subject: Fix warnings about printing longs with int type format strings + +Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> +--- +diff --git a/xdm/dm.c b/xdm/dm.c +index cd0ee25..7bc2605 100644 +--- a/xdm/dm.c ++++ b/xdm/dm.c +@@ -536,7 +536,7 @@ WaitForChild (void) + time(&now); + crash = d->lastReserv && + ((now - d->lastReserv) < XDM_BROKEN_INTERVAL); +- Debug("time %i %i try %i of %i%s\n", now, d->lastReserv, ++ Debug("time %li %li try %i of %i%s\n", now, d->lastReserv, + d->reservTries, d->reservAttempts, + crash ? " crash" : ""); + +diff --git a/xdm/xdmauth.c b/xdm/xdmauth.c +index 66804a4..b3c1c16 100644 +--- a/xdm/xdmauth.c ++++ b/xdm/xdmauth.c +@@ -234,7 +234,7 @@ XdmGetKey(struct protoDisplay *pdpy, ARRAY8Ptr displayID) + if (line[0] == '#' || sscanf (line, "%s %s", id, key) != 2) + continue; + bzero(line, sizeof(line)); +- Debug ("Key entry for \"%s\" %d bytes\n", id, strlen(key)); ++ Debug ("Key entry for \"%s\" %ld bytes\n", id, strlen(key)); + if (strlen (id) == displayID->length && + !strncmp (id, (char *)displayID->data, displayID->length)) + { +-- +cgit v0.9.0.2-2-gbebe +From 8eee942be0db913511b4c53f94829e1201dfdf00 Mon Sep 17 00:00:00 2001 +From: Michał Górny <mgorny@gentoo.org> +Date: Wed, 28 Sep 2011 19:25:17 +0000 +Subject: Support systemd startup notification. + +If libsystemd-daemon support is enabled, xdm uses it to announce its +startup as soon as the session is established. This gives the user +opportunity to delay I/O-intensive operations until the X server is +started so that they would not interfere with its loading while keeping +the machine busy when user types in his/her login. + +Reviewed-by: Jamey Sharp <jamey@minilop.net> +Reviewed-by: Gaetan Nadon <memsize@videotron.ca> +Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> +--- +diff --git a/Makefile.am b/Makefile.am +index e5f9f5c..bb6b51c 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -43,8 +43,13 @@ endif LINT + if HAVE_SYSTEMD + systemdsystemunit_DATA = xdm.service + +-xdm.service: xdm.service.in +- $(AM_V_GEN)$(SED) -e 's|BINDIR|$(bindir)|g' < $< > $@ ++xdm.service: xdm.service.in Makefile ++if USE_SYSTEMD_DAEMON ++ $(AM_V_GEN)$(SED) -e 's|BINDIR|$(bindir)|g' < xdm.service.in > $@ ++else !USE_SYSTEMD_DAEMON ++ $(AM_V_GEN)$(SED) -e 's|BINDIR|$(bindir)|g' -e '/[Nn]otify/d' < xdm.service.in > $@ ++endif !USE_SYSTEMD_DAEMON ++ + endif HAVE_SYSTEMD + CLEANFILES = xdm.service + EXTRA_DIST = xdm.service.in +diff --git a/configure.ac b/configure.ac +index a4222f1..fcb37f8 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -146,6 +146,7 @@ if test "x$USE_SELINUX" != "xno" ; then + fi + + # Check whether to install systemd unit files, as suggested in daemon(7). ++# When a full path is specified, this does not require systemd installed. + AC_ARG_WITH([systemdsystemunitdir], AS_HELP_STRING([--with-systemdsystemunitdir=DIR], + [Directory for systemd service files (default from the System and Service Manager)]),, + [with_systemdsystemunitdir=auto]) +@@ -166,6 +167,21 @@ AS_IF([test "x$with_systemdsystemunitdir" != "xno"], [ + ]) + AM_CONDITIONAL(HAVE_SYSTEMD, [test "x$with_systemdsystemunitdir" != "xno"]) + ++# Check whether to enable systemd startup notification. ++# This requires libsystemd-daemon. ++AC_ARG_WITH([systemd-daemon], AS_HELP_STRING([--with-systemd-daemon], ++ [Add support for systemd startup notification (default is autodetected)]), ++ [USE_SYSTEMD_DAEMON=$withval], [USE_SYSTEMD_DAEMON=auto]) ++AS_IF([test "x$USE_SYSTEMD_DAEMON" != "xno"], [ ++ PKG_CHECK_MODULES([SYSTEMD_DAEMON], [libsystemd-daemon], ++ [AC_DEFINE(USE_SYSTEMD_DAEMON,1,[Use systemd startup notification])], ++ [AS_IF([test "x$USE_SYSTEMD_DAEMON" = "xyes"], ++ [AC_MSG_ERROR([systemd startup notification support requested, but libsystemd-daemon not found.])] ++ )] ++ ) ++]) ++AM_CONDITIONAL(USE_SYSTEMD_DAEMON, [test "x$USE_SYSTEMD_DAEMON" != "xno"]) ++ + # FIXME: Find better test for which OS'es use su -m - for now, just try to + # mirror the Imakefile setting of: + # if defined(OpenBSDArchitecture) || defined(NetBSDArchitecture) || defined(FreeBSDArchitecture) || defined(DarwinArchitecture) +diff --git a/xdm.service.in b/xdm.service.in +index d15e072..e782dd9 100644 +--- a/xdm.service.in ++++ b/xdm.service.in +@@ -4,6 +4,8 @@ After=systemd-user-sessions.service + + [Service] + ExecStart=BINDIR/xdm -nodaemon ++Type=notify ++NotifyAccess=all + + [Install] + Alias=graphical.target.wants/xdm.service +diff --git a/xdm/Makefile.am b/xdm/Makefile.am +index aa9765c..797b5c5 100644 +--- a/xdm/Makefile.am ++++ b/xdm/Makefile.am +@@ -22,11 +22,11 @@ + bin_PROGRAMS = xdm + + AM_CPPFLAGS = -I$(top_srcdir)/include +-AM_CFLAGS = $(CWARNFLAGS) $(XDM_CFLAGS) ++AM_CFLAGS = $(CWARNFLAGS) $(XDM_CFLAGS) $(SYSTEMD_DAEMON_CFLAGS) + + # The xdm binary needs to export symbols so that they can be used from + # libXdmGreet.so loaded through a dlopen call from session.c +-AM_LDFLAGS = $(XDM_LIBS) -export-dynamic ++AM_LDFLAGS = $(XDM_LIBS) $(SYSTEMD_DAEMON_LIBS) -export-dynamic + + xdm_SOURCES = \ + access.c \ +diff --git a/xdm/session.c b/xdm/session.c +index 5fd47f0..573747d 100644 +--- a/xdm/session.c ++++ b/xdm/session.c +@@ -81,6 +81,10 @@ extern int key_setnet(struct key_netstarg *arg); + # define RTLD_NOW 1 + # endif + ++#ifdef USE_SYSTEMD_DAEMON ++#include <systemd/sd-daemon.h> ++#endif ++ + #ifdef USE_SELINUX + /* This should be run just before we exec the user session. */ + static int +@@ -349,6 +353,12 @@ ManageSession (struct display *d) + exit(UNMANAGE_DISPLAY); + } + ++#ifdef USE_SYSTEMD_DAEMON ++ /* Subsequent notifications will be ignored by systemd ++ * and calling this function will clean up the env */ ++ sd_notify(1, "READY=1"); ++#endif ++ + /* tell the possibly dynamically loaded greeter function + * what data structure formats to expect. + * These version numbers are registered with The Open Group. */ +-- +cgit v0.9.0.2-2-gbebe +From 284532c0884893728b75ca37f5d2a9a33f7bc8db Mon Sep 17 00:00:00 2001 +From: Julien Cristau <jcristau@debian.org> +Date: Sat, 22 Oct 2011 15:14:46 +0000 +Subject: greeter: link against -lXrender if xft is enabled + +XmuCvtStringToXftColor uses XRenderParseColor, so require xrender for +the xft option, and link against it. + +Signed-off-by: Julien Cristau <jcristau@debian.org> +Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> +--- +diff --git a/configure.ac b/configure.ac +index fcb37f8..d20ae28 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -345,10 +345,10 @@ AC_ARG_WITH(xft, + AS_HELP_STRING([--with-xft], + [Use Xft to draw text (default is YES if installed)]), + [USE_XFT="$withval"], +- PKG_CHECK_EXISTS(xft, [USE_XFT="yes"], [USE_XFT="no"])) ++ PKG_CHECK_EXISTS(xft xrender, [USE_XFT="yes"], [USE_XFT="no"])) + + if test "x$USE_XFT" = "xyes" ; then +- PKG_CHECK_MODULES(XFT, xft) ++ PKG_CHECK_MODULES(XFT, xft xrender) + GREETER_CFLAGS="$GREETER_CFLAGS $XFT_CFLAGS" + GREETER_LIBS="$GREETER_LIBS $XFT_LIBS" + AC_DEFINE([USE_XFT], 1, +diff --git a/greeter/Login.c b/greeter/Login.c +index 99a3932..d899376 100644 +--- a/greeter/Login.c ++++ b/greeter/Login.c +@@ -86,6 +86,10 @@ from The Open Group. + # include <X11/extensions/Xinerama.h> + #endif + ++#ifdef USE_XFT ++# include <X11/extensions/Xrender.h> ++#endif ++ + #ifndef DEBUG + # define XDM_ASSERT(a) /* do nothing */ + #else +-- +cgit v0.9.0.2-2-gbebe +From a02edebf21aae37f8564d7b9fad01d5d2942ad8d Mon Sep 17 00:00:00 2001 +From: Matthieu Herrb <matthieu.herrb@laas.fr> +Date: Mon, 07 Nov 2011 16:01:44 +0000 +Subject: Fix build outside of source dir. Fixes distcheck too. + +Signed-off-by: Matthieu Herrb <matthieu.herrb@laas.fr> +Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> +--- +diff --git a/Makefile.am b/Makefile.am +index bb6b51c..e9da40f 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -45,9 +45,9 @@ systemdsystemunit_DATA = xdm.service + + xdm.service: xdm.service.in Makefile + if USE_SYSTEMD_DAEMON +- $(AM_V_GEN)$(SED) -e 's|BINDIR|$(bindir)|g' < xdm.service.in > $@ ++ $(AM_V_GEN)$(SED) -e 's|BINDIR|$(bindir)|g' < ${srcdir}/xdm.service.in > $@ + else !USE_SYSTEMD_DAEMON +- $(AM_V_GEN)$(SED) -e 's|BINDIR|$(bindir)|g' -e '/[Nn]otify/d' < xdm.service.in > $@ ++ $(AM_V_GEN)$(SED) -e 's|BINDIR|$(bindir)|g' -e '/[Nn]otify/d' < ${srcdir}/xdm.service.in > $@ + endif !USE_SYSTEMD_DAEMON + + endif HAVE_SYSTEMD +-- +cgit v0.9.0.2-2-gbebe +From ad7a54288f62c0266540279dac775ebee68f092e Mon Sep 17 00:00:00 2001 +From: Matthieu Herrb <matthieu.herrb@laas.fr> +Date: Thu, 15 Dec 2011 21:14:23 +0000 +Subject: replace <varargs.h> by <stdarg.h>. Spotted my Marco Peereboom with clang. + +Reviewed-by: Mark Kettenis <kettenis@openbsd.org> +Signed-off-by: Matthieu Herrb <matthieu.herrb@laas.fr> +--- +diff --git a/greeter/verify.c b/greeter/verify.c +index 5d2ad17..1221874 100644 +--- a/greeter/verify.c ++++ b/greeter/verify.c +@@ -48,7 +48,7 @@ from The Open Group. + # include <errno.h> + #elif defined(USE_BSDAUTH) + # include <login_cap.h> +-# include <varargs.h> ++# include <stdarg.h> + # include <bsd_auth.h> + #elif defined(USESECUREWARE) + # include <sys/types.h> +-- +cgit v0.9.0.2-2-gbebe +From 78403f6a7420798bf24798811c8c6b936c9ccb34 Mon Sep 17 00:00:00 2001 +From: Alan Coopersmith <alan.coopersmith@oracle.com> +Date: Sat, 07 Jan 2012 03:34:30 +0000 +Subject: Add some missing malloc failure checks + +Flagged by Solaris Studio 12.3 code analyzer + +Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> +--- +diff --git a/xdm/access.c b/xdm/access.c +index 7035375..b16a066 100644 +--- a/xdm/access.c ++++ b/xdm/access.c +@@ -304,6 +304,11 @@ tryagain: + if (!hostOrAlias) + return NULL; + h = malloc (sizeof (DisplayEntry)); ++ if (!h) ++ { ++ LogOutOfMem ("ReadHostEntry: DisplayEntry\n"); ++ return NULL; ++ } + h->hopCount = 1; + if (*hostOrAlias == ALIAS_CHARACTER) + { +@@ -423,6 +428,11 @@ tryagain: + if (!displayOrAlias) + return NULL; + d = malloc (sizeof (DisplayEntry)); ++ if (!d) ++ { ++ LogOutOfMem ("ReadDisplayEntry: DisplayEntry\n"); ++ return NULL; ++ } + d->notAllowed = 0; + d->notBroadcast = 0; + d->chooser = 0; +diff --git a/xdm/choose.c b/xdm/choose.c +index 6f077eb..e5e003d 100644 +--- a/xdm/choose.c ++++ b/xdm/choose.c +@@ -128,6 +128,11 @@ RememberIndirectClient ( + connectionType == i->connectionType) + return 1; + i = malloc (sizeof (IndirectUsersRec)); ++ if (!i) ++ { ++ LogOutOfMem ("RememberIndirectClient\n"); ++ return 0; ++ } + if (!XdmcpCopyARRAY8 (clientAddress, &i->client)) + { + free (i); +-- +cgit v0.9.0.2-2-gbebe diff --git a/staging/xorg-xdm/xdm-1.0.5-sessreg-utmp-fix-bug177890.patch b/staging/xorg-xdm/xdm-1.0.5-sessreg-utmp-fix-bug177890.patch new file mode 100644 index 000000000..195858883 --- /dev/null +++ b/staging/xorg-xdm/xdm-1.0.5-sessreg-utmp-fix-bug177890.patch @@ -0,0 +1,8 @@ +--- config/GiveConsole.sessreg-utmp-fix-bug177890 2006-07-24 04:20:10.000000000 -0400 ++++ config/GiveConsole 2006-07-24 04:21:16.000000000 -0400 +@@ -8,3 +8,5 @@ + # causing serious grief. + # + chown $USER /dev/console ++exec /usr/bin/sessreg -a -w "/var/log/wtmp" -u "/run/utmp" \ ++ -x "/etc/X11/xdm/Xservers" -l $DISPLAY -h "" $USER diff --git a/staging/xorg-xdm/xdm.pam b/staging/xorg-xdm/xdm.pam new file mode 100644 index 000000000..a0b601db6 --- /dev/null +++ b/staging/xorg-xdm/xdm.pam @@ -0,0 +1,10 @@ +#%PAM-1.0 +auth required pam_unix.so +auth required pam_nologin.so +auth required pam_env.so +account required pam_unix.so +password required pam_unix.so +session required pam_unix.so +session required pam_limits.so +session required pam_loginuid.so +-session optional pam_systemd.so |