diff options
Diffstat (limited to 'staging')
25 files changed, 2596 insertions, 9 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/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/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/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/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-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/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 index c3fccce41..1a320ff4a 100644 --- a/staging/xfce4-session/PKGBUILD +++ b/staging/xfce4-session/PKGBUILD @@ -1,10 +1,10 @@ -# $Id: PKGBUILD 168729 2012-10-14 23:01:20Z foutrelis $ +# $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=5 +pkgrel=6 pkgdesc="A session manager for Xfce" arch=('i686' 'x86_64') url="http://www.xfce.org/" @@ -39,7 +39,6 @@ build() { --libexecdir=/usr/lib/xfce4 \ --localstatedir=/var \ --disable-static \ - --disable-legacy-sm \ --disable-debug make } |