From 714040985ee9b7c875bd84cc61ce4a1fbfb19000 Mon Sep 17 00:00:00 2001 From: Alexpux Date: Sun, 23 Feb 2014 22:38:04 +0400 Subject: [PATCH] Add python2-pygtk2 package. --- mingw-w64-python2-pygtk2/PKGBUILD | 61 +++++ mingw-w64-python2-pygtk2/no-undefined.patch | 48 ++++ mingw-w64-python2-pygtk2/python-m4.patch | 232 ++++++++++++++++++++ mingw-w64-python2-pygtk2/python27.patch | 50 +++++ 4 files changed, 391 insertions(+) create mode 100644 mingw-w64-python2-pygtk2/PKGBUILD create mode 100644 mingw-w64-python2-pygtk2/no-undefined.patch create mode 100644 mingw-w64-python2-pygtk2/python-m4.patch create mode 100644 mingw-w64-python2-pygtk2/python27.patch diff --git a/mingw-w64-python2-pygtk2/PKGBUILD b/mingw-w64-python2-pygtk2/PKGBUILD new file mode 100644 index 0000000000..aeab103db5 --- /dev/null +++ b/mingw-w64-python2-pygtk2/PKGBUILD @@ -0,0 +1,61 @@ +# Maintainer: Alexey Pavlov + +_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 +} diff --git a/mingw-w64-python2-pygtk2/no-undefined.patch b/mingw-w64-python2-pygtk2/no-undefined.patch new file mode 100644 index 0000000000..71d96cc37e --- /dev/null +++ b/mingw-w64-python2-pygtk2/no-undefined.patch @@ -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/$@ $@ diff --git a/mingw-w64-python2-pygtk2/python-m4.patch b/mingw-w64-python2-pygtk2/python-m4.patch new file mode 100644 index 0000000000..a3fc5cec94 --- /dev/null +++ b/mingw-w64-python2-pygtk2/python-m4.patch @@ -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 ], +- [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]),, diff --git a/mingw-w64-python2-pygtk2/python27.patch b/mingw-w64-python2-pygtk2/python27.patch new file mode 100644 index 0000000000..9bbe2b5ae2 --- /dev/null +++ b/mingw-w64-python2-pygtk2/python27.patch @@ -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 +