Add python2-pygtk2 package.

This commit is contained in:
Alexpux
2014-02-23 22:38:04 +04:00
parent 7e2db6c463
commit 714040985e
4 changed files with 391 additions and 0 deletions

View File

@@ -0,0 +1,61 @@
# Maintainer: Alexey Pavlov <alexpux@gmail.com>
_realname=pygtk
_mingw_suff=mingw-w64-${CARCH}
pkgname="${_mingw_suff}-python2-pygtk2"
pkgver=2.24.0
pkgrel=1
pkgdesc="Python bindings for the GTK widget set (mingw-w64)"
arch=(any)
url="http://www.pygtk.org"
license=('LGPL')
groups=("${_mingw_suff}")
depends=("${_mingw_suff}-python2-cairo"
"${_mingw_suff}-python2-gobject"
"${_mingw_suff}-libglade")
makedepends=("${_mingw_suff}-python2-numpy"
"${_mingw_suff}-python2-gobject")
options=('staticlibs' 'strip')
source=(http://ftp.gnome.org/pub/gnome/sources/${_realname}/${pkgver%.*}/${_realname}-${pkgver}.tar.bz2
python27.patch
no-undefined.patch
python-m4.patch)
md5sums=('a1051d5794fd7696d3c1af6422d17a49'
'12acfacd26f19c504a0a2d0edeb66121'
'edd96a4d9f4b7a1b05094a78f9cc811b'
'2f1b6f04e36474e58abb259e22cc8309')
prepare() {
cd "${srcdir}/${_realname}-${pkgver}"
patch -p1 -i ${srcdir}/python27.patch
patch -p1 -i ${srcdir}/no-undefined.patch
patch -p1 -i ${srcdir}/python-m4.patch
autoreconf -fi -I m4
#WANT_AUTOMAKE=latest ./autogen.sh
}
build() {
cd "$srcdir"
rm -rf python2-build
mkdir python2-build
#cp -r ${_realname}-$pkgver $builddir
pushd python2-build
PYTHON=${MINGW_PREFIX}/bin/python2 \
../${_realname}-$pkgver/configure --prefix=${MINGW_PREFIX} \
--build=${MINGW_CHOST} \
--host=${MINGW_CHOST} \
--target=${MINGW_CHOST}
make VERBOSE=1
popd
}
package() {
pkgdesc="Python 2 bindings for GObject2 (mingw-w64)"
depends=("${_mingw_suff}-glib2" "${_mingw_suff}-python2-cairo" "${_mingw_suff}-libffi" "${_mingw_suff}-gobject-introspection" "${_mingw_suff}-pygobject-devel=$pkgver")
cd python2-build
make DESTDIR="$pkgdir" install
install -m644 ${srcdir}/${_realname}-$pkgver/gtk/gtk-extrafuncs.defs "${pkgdir}${MINGW_PREFIX}/share/pygtk/2.0/defs/"
sed -i -e 's#env python$#env python2#' "${pkgdir}${MINGW_PREFIX}"/lib/pygtk/2.0/{,demos/}*.py
}

View File

@@ -0,0 +1,48 @@
--- a/gtk/Makefile.am 2014-02-01 11:34:44.000000000 +0400
+++ b/gtk/Makefile.am 2014-02-22 23:24:13.645800000 +0400
@@ -35,7 +35,7 @@
pkginclude_HEADERS = pygtk.h
# linker flags
-common_ldflags = -module -avoid-version
+common_ldflags = -module -avoid-version $(PYTHON_LIBS) -shrext $(PYTHON_SO)
if PLATFORM_WIN32
common_ldflags += -no-undefined
endif
@@ -310,8 +310,8 @@
@:
-all: $(pygtkexec_LTLIBRARIES:.la=.so) $(pkgpyexec_LTLIBRARIES:.la=.so)
+all: $(pygtkexec_LTLIBRARIES:.la=$(PYTHON_SO)) $(pkgpyexec_LTLIBRARIES:.la=$(PYTHON_SO))
clean-local:
- rm -f $(pygtkexec_LTLIBRARIES:.la=.so) $(pkgpyexec_LTLIBRARIES:.la=.so)
-.la.so:
- $(LN_S) .libs/$@ $@ || true
+ rm -f $(pygtkexec_LTLIBRARIES:.la=$(PYTHON_SO)) $(pkgpyexec_LTLIBRARIES:.la=$(PYTHON_SO))
+%$(PYTHON_SO): %.la
+ $(LN_S) -f .libs/$@ $@
--- a/Makefile.am 2014-02-01 11:34:44.000000000 +0400
+++ b/Makefile.am 2014-02-22 23:24:13.645800000 +0400
@@ -56,7 +56,7 @@
pkgpyexec_LTLIBRARIES =
# linker flags
-common_ldflags = -module -avoid-version
+common_ldflags = -module -avoid-version $(PYTHON_LIBS) -shrext $(PYTHON_SO)
if PLATFORM_WIN32
common_ldflags += -no-undefined
endif
@@ -173,8 +173,8 @@
fi
-all: $(pkgpyexec_LTLIBRARIES:.la=.so)
+all: $(pkgpyexec_LTLIBRARIES:.la=$(PYTHON_SO))
clean-local:
- rm -f $(pkgpyexec_LTLIBRARIES:.la=.so)
-.la.so:
- $(LN_S) .libs/$@ $@ || true
+ rm -f $(pkgpyexec_LTLIBRARIES:.la=$(PYTHON_SO))
+%$(PYTHON_SO): %.la
+ $(LN_S) -f .libs/$@ $@

View File

@@ -0,0 +1,232 @@
--- pygtk-2.24.0/m4/python.m4.orig 2011-04-01 14:37:25.000000000 +0400
+++ pygtk-2.24.0/m4/python.m4 2014-02-01 11:34:44.000000000 +0400
@@ -43,15 +43,14 @@
[AC_REQUIRE([AM_PATH_PYTHON])
AC_MSG_CHECKING(for headers required to compile python extensions)
dnl deduce PYTHON_INCLUDES
-py_prefix=`$PYTHON -c "import sys; print sys.prefix"`
-py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"`
-if test -x "$PYTHON-config"; then
-PYTHON_INCLUDES=`$PYTHON-config --includes 2>/dev/null`
-else
-PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}"
-if test "$py_prefix" != "$py_exec_prefix"; then
- PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}"
-fi
+if test "x$PYTHON_INCLUDES" = x; then
+ PYTHON_CONFIG=`which $PYTHON`-config
+ if test -x "$PYTHON_CONFIG"; then
+ PYTHON_INCLUDES=`$PYTHON_CONFIG --includes 2>/dev/null`
+ else
+ PYTHON_INCLUDES=`$PYTHON -c "import distutils.sysconfig, sys; sys.stdout.write(distutils.sysconfig.get_python_inc(True))"`
+ PYTHON_INCLUDES="-I$PYTHON_INCLUDES"
+ fi
fi
AC_SUBST(PYTHON_INCLUDES)
dnl check if the headers exist:
@@ -64,3 +63,170 @@
$2])
CPPFLAGS="$save_CPPFLAGS"
])
+
+dnl a macro to check for ability to embed python
+dnl AM_CHECK_PYTHON_LIBS([ACTION-IF-POSSIBLE], [ACTION-IF-NOT-POSSIBLE])
+dnl function also defines PYTHON_LIBS
+AC_DEFUN([AM_CHECK_PYTHON_LIBS],
+[AC_REQUIRE([AM_PATH_PYTHON])
+AC_MSG_CHECKING(for libraries required to embed python)
+dnl deduce PYTHON_LIBS
+py_prefix=`$PYTHON -c "import sys; sys.stdout.write(sys.prefix)"`
+if test "x$PYTHON_LIBS" = x; then
+ PYTHON_LIBS="-L${py_prefix}/lib -lpython${PYTHON_VERSION}"
+fi
+if test "x$PYTHON_LIB_LOC" = x; then
+ PYTHON_LIB_LOC="${py_prefix}/lib"
+fi
+AC_SUBST(PYTHON_LIBS)
+AC_SUBST(PYTHON_LIB_LOC)
+dnl check if the headers exist:
+save_LIBS="$LIBS"
+LIBS="$LIBS $PYTHON_LIBS"
+AC_TRY_LINK_FUNC(Py_Initialize, dnl
+ [LIBS="$save_LIBS"; AC_MSG_RESULT(yes); $1], dnl
+ [LIBS="$save_LIBS"; AC_MSG_RESULT(no); $2])
+
+])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# JD_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+# ---------------------------------------------------------------------------
+# Adds support for distributing Python modules and packages. To
+# install modules, copy them to $(pythondir), using the python_PYTHON
+# automake variable. To install a package with the same name as the
+# automake package, install to $(pkgpythondir), or use the
+# pkgpython_PYTHON automake variable.
+#
+# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as
+# locations to install python extension modules (shared libraries).
+# Another macro is required to find the appropriate flags to compile
+# extension modules.
+#
+# If your package is configured with a different prefix to python,
+# users will have to add the install directory to the PYTHONPATH
+# environment variable, or create a .pth file (see the python
+# documentation for details).
+#
+# If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will
+# cause an error if the version of python installed on the system
+# doesn't meet the requirement. MINIMUM-VERSION should consist of
+# numbers and dots only.
+AC_DEFUN([JD_PATH_PYTHON],
+ [
+ dnl Find a Python interpreter. Python versions prior to 2.0 are not
+ dnl supported
+ m4_define_default([_AM_PYTHON_INTERPRETER_LIST],
+ [python3 python3.3 python3.2 python3.1 python2 python2.7 python])
+
+ m4_if([$1],[],[
+ dnl No version check is needed.
+ # Find any Python interpreter.
+ if test -z "$PYTHON"; then
+ AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :)
+ fi
+ am_display_PYTHON=python
+ ], [
+ dnl A version check is needed.
+ if test -n "$PYTHON"; then
+ # If the user set $PYTHON, use it and don't search something else.
+ AC_MSG_CHECKING([whether $PYTHON version >= $1])
+ AM_PYTHON_CHECK_VERSION([$PYTHON], [$1],
+ [AC_MSG_RESULT(yes)],
+ [AC_MSG_ERROR(too old)])
+ am_display_PYTHON=$PYTHON
+ else
+ # Otherwise, try each interpreter until we find one that satisfies
+ # VERSION.
+ AC_CACHE_CHECK([for a Python interpreter with version >= $1],
+ [am_cv_pathless_PYTHON],[
+ for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do
+ test "$am_cv_pathless_PYTHON" = none && break
+ AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break])
+ done])
+ # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON.
+ if test "$am_cv_pathless_PYTHON" = none; then
+ PYTHON=:
+ else
+ AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON])
+ fi
+ am_display_PYTHON=$am_cv_pathless_PYTHON
+ fi
+ ])
+
+ if test "$PYTHON" = :; then
+ dnl Run any user-specified action, or abort.
+ m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])])
+ else
+
+ dnl Query Python for its version number. Getting [:3] seems to be
+ dnl the best way to do this; it's what "site.py" does in the standard
+ dnl library.
+
+ AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version],
+ [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`])
+ AC_SUBST([PYTHON_VERSION], [$am_cv_python_version])
+
+ dnl Use the values of $prefix and $exec_prefix for the corresponding
+ dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made
+ dnl distinct variables so they can be overridden if need be. However,
+ dnl general consensus is that you shouldn't need this ability.
+
+ AC_SUBST([PYTHON_PREFIX], ['${prefix}'])
+ AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}'])
+
+ dnl At times (like when building shared libraries) you may want
+ dnl to know which OS platform Python thinks this is.
+
+ AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform],
+ [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`])
+ AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform])
+
+
+ dnl Set up 4 directories:
+
+ dnl pythondir -- where to install python scripts. This is the
+ dnl site-packages directory, not the python standard library
+ dnl directory like in previous automake betas. This behavior
+ dnl is more consistent with lispdir.m4 for example.
+ dnl Query distutils for this directory. distutils does not exist in
+ dnl Python 1.5, so we fall back to the hardcoded directory if it
+ dnl doesn't work.
+ AC_CACHE_CHECK([for $am_display_PYTHON script directory],
+ [am_cv_python_pythondir],
+ [am_cv_python_pythondir=`$PYTHON -c "from distutils import sysconfig; print(sysconfig.get_python_lib(0,0,prefix='$PYTHON_PREFIX'))" 2>/dev/null ||
+ echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"`])
+ AC_SUBST([pythondir], [$am_cv_python_pythondir])
+
+ dnl pkgpythondir -- $PACKAGE directory under pythondir. Was
+ dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is
+ dnl more consistent with the rest of automake.
+
+ AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE])
+
+ dnl pyexecdir -- directory for installing python extension modules
+ dnl (shared libraries)
+ dnl Query distutils for this directory. distutils does not exist in
+ dnl Python 1.5, so we fall back to the hardcoded directory if it
+ dnl doesn't work.
+ AC_CACHE_CHECK([for $am_display_PYTHON extension module directory],
+ [am_cv_python_pyexecdir],
+ [am_cv_python_pyexecdir=`$PYTHON -c "from distutils import sysconfig; print(sysconfig.get_python_lib(1,0,prefix='$PYTHON_EXEC_PREFIX'))" 2>/dev/null ||
+ echo "${PYTHON_EXEC_PREFIX}/lib/python${PYTHON_VERSION}/site-packages"`])
+ AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir])
+
+ dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE)
+
+ AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE])
+
+ dnl Run any user-specified action.
+ $2
+ fi
+
+])
--- pygtk-2.24.0/configure.ac.orig 2014-02-23 18:57:43.401800000 +0400
+++ pygtk-2.24.0/configure.ac 2014-02-23 18:57:54.789800000 +0400
@@ -77,22 +77,16 @@
AM_PATH_PYTHON(2.3.5)
-AM_CHECK_PYTHON_HEADERS(,[AC_MSG_ERROR(could not find Python headers)])
-
-AC_MSG_CHECKING([for PySignal_SetWakeupFd in Python.h])
-py_prefix=`$PYTHON -c "import sys; print sys.prefix"`
-old_CPPFLAGS=$CPPFLAGS
-CPPFLAGS="-Wall -Werror $PYTHON_INCLUDES"
-AC_TRY_COMPILE([#include <Python.h>],
- [PySignal_SetWakeupFd(0);],
- setwakeupfd_ok=yes,
- setwakeupfd_ok=no)
-AC_MSG_RESULT($setwakeupfd_ok)
-if test "x$setwakeupfd_ok" != xno; then
- AC_DEFINE(HAVE_PYSIGNAL_SETWAKEUPFD, 1,
- [Define to 1 if PySignal_SetWakeupFd is available])
-fi
-CPPFLAGS=$old_CPPFLAGS
+# - 'SO' for PyPy, CPython 2.7-3.2
+# - 'EXT_SUFFIX' for CPython3.3+ (http://bugs.python.org/issue16754)
+# - fallback to '.so'
+PYTHON_SO=`$PYTHON -c "import distutils.sysconfig, sys; get = distutils.sysconfig.get_config_var; sys.stdout.write(get('EXT_SUFFIX') or get('SO') or '.so');"`
+AC_SUBST(PYTHON_SO)
+
+AM_CHECK_PYTHON_HEADERS(, AC_MSG_ERROR([Python headers not found]))
+if test "x$os_win32" = "xyes"; then
+ AM_CHECK_PYTHON_LIBS(, AC_MSG_ERROR([Python libs not found. Windows requires Python modules to be explicitly linked to libpython.]))
+fi
AC_ARG_ENABLE(thread,
AC_HELP_STRING([--disable-thread], [Disable pygtk threading support]),,

View File

@@ -0,0 +1,50 @@
diff --git a/gtk/gtkmodule.c b/gtk/gtkmodule.c
index c0e1493..aa8cf10 100644
--- a/gtk/gtkmodule.c
+++ b/gtk/gtkmodule.c
@@ -227,8 +227,12 @@ init_gtk(void)
pygtk_add_stock_items(d);
/* extension API */
- PyDict_SetItemString(d, "_PyGtk_API",
- o=PyCObject_FromVoidPtr(&functions, NULL));
+#if PY_VERSION_HEX >= 0x02070000
+ o = PyCapsule_New(&functions, "gtk._gtk._PyGtk_API", NULL);
+#else
+ o = PyCObject_FromVoidPtr(&functions, NULL);
+#endif
+ PyDict_SetItemString(d, "_PyGtk_API", o);
Py_DECREF(o);
PyGtkDeprecationWarning = PyErr_NewException("gtk.GtkDeprecationWarning",
diff --git a/gtk/pygtk.h b/gtk/pygtk.h
index 573c3b9..e4c680f 100644
--- a/gtk/pygtk.h
+++ b/gtk/pygtk.h
@@ -60,6 +60,18 @@ struct _PyGtk_FunctionStruct *_PyGtk_API;
/* a function to initialise the pygtk functions */
+
+/* Python 2.7 introduced the PyCapsule API and deprecated the CObject API */
+#if PY_VERSION_HEX >= 0x02070000
+#define init_pygtk() G_STMT_START { \
+ void *capsule = PyCapsule_Import("gtk._gtk._PyGtk_API", 0); \
+ if (!capsule) { \
+ return; \
+ } \
+ _PyGtk_API = (struct _PyGtk_FunctionStruct*)capsule; \
+} G_STMT_END
+#else /* PY_VERSION_HEX */
+/* Python 2.6 and earlier use the CObject API */
#define init_pygtk() G_STMT_START { \
PyObject *pygtk = PyImport_ImportModule("gtk"); \
if (pygtk != NULL) { \
@@ -79,6 +91,7 @@ struct _PyGtk_FunctionStruct *_PyGtk_API;
return; \
} \
} G_STMT_END
+#endif /* PY_VERSION_HEX */
#endif