diff options
-rw-r--r-- | .SRCINFO | 43 | ||||
-rw-r--r-- | PKGBUILD | 161 | ||||
-rw-r--r-- | dont-make-libpython-readonly.patch | 13 | ||||
-rw-r--r-- | issue25150.patch | 78 | ||||
-rw-r--r-- | libx32-python.install | 21 | ||||
-rw-r--r-- | pyconfig-stub.h | 13 | ||||
-rw-r--r-- | test_gdb-version-fix.patch | 11 | ||||
-rw-r--r-- | venv-x32.patch | 16 |
8 files changed, 356 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO new file mode 100644 index 000000000000..94daffb3c61c --- /dev/null +++ b/.SRCINFO @@ -0,0 +1,43 @@ +pkgbase = libx32-python + pkgdesc = Next generation of the python high-level scripting language (x32 ABI) + pkgver = 3.5.0 + pkgrel = 2.1 + url = http://www.python.org/ + arch = x86_64 + license = custom + checkdepends = gdb + checkdepends = xorg-server-xvfb + makedepends = libx32-tk + makedepends = libx32-sqlite + makedepends = bluez-libs + makedepends = libx32-mpdecimal + makedepends = libx32-readline + makedepends = libx32-xz + depends = libx32-expat + depends = libx32-bzip2 + depends = libx32-gdbm + depends = libx32-openssl + depends = libx32-libffi + depends = libx32-zlib + depends = python + optdepends = libx32-sqlite + optdepends = libx32-mpdecimal: for decimal + optdepends = libx32-xz: for lzma + optdepends = libx32-tk: for tkinter + options = !makeflags + source = http://www.python.org/ftp/python/3.5.0/Python-3.5.0.tar.xz + source = pyconfig-stub.h + source = venv-x32.patch + source = test_gdb-version-fix.patch + source = dont-make-libpython-readonly.patch + source = issue25150.patch + sha1sums = 871a06df9ab70984b7398ac53047fe125c757a70 + sha1sums = 74e5b55b394b1dfe5c430734e2ce049d595fb50f + sha1sums = af6b854349f4992892471b9cb363e8a6ce19ea6b + sha1sums = ab86515aff465385675e2e6e593f09596e0a8db0 + sha1sums = c22b24324b8e53326702de439c401d97927ee3f2 + sha1sums = bd068695d22931320069200f240c425096bb5011 + +pkgname = libx32-python + install = libx32-python.install + diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 000000000000..a3c47fe56bd8 --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,161 @@ +# $Id: PKGBUILD 248014 2015-10-01 16:04:08Z fyan $ +# Maintainer: Angel Velasquez <angvp@archlinux.org> +# Maintainer: Felix Yan <felixonmars@archlinux.org> +# Contributor: Stéphane Gaudreault <stephane@archlinux.org> +# Contributor: Allan McRae <allan@archlinux.org> +# Contributor: Jason Chu <jason@archlinux.org> +# x23 Maintainer: Fantix King <fantix.king@gmail.com> + +_pkgbasename=python +pkgname=libx32-python +pkgver=3.5.0 +pkgrel=2.1 +_pybasever=3.5 +pkgdesc="Next generation of the python high-level scripting language (x32 ABI)" +arch=('x86_64') +license=('custom') +url="http://www.python.org/" +depends=('libx32-expat' 'libx32-bzip2' 'libx32-gdbm' 'libx32-openssl' 'libx32-libffi' 'libx32-zlib' $_pkgbasename) +makedepends=('libx32-tk' 'libx32-sqlite' 'bluez-libs' 'libx32-mpdecimal' 'libx32-readline' 'libx32-xz') +checkdepends=('gdb' 'xorg-server-xvfb') +optdepends=('libx32-sqlite' + 'libx32-mpdecimal: for decimal' + 'libx32-xz: for lzma' + 'libx32-tk: for tkinter') +options=('!makeflags') +source=("http://www.python.org/ftp/python/${pkgver%rc*}/Python-${pkgver}.tar.xz" + pyconfig-stub.h + venv-x32.patch + test_gdb-version-fix.patch + dont-make-libpython-readonly.patch + issue25150.patch) +sha1sums=('871a06df9ab70984b7398ac53047fe125c757a70' + '74e5b55b394b1dfe5c430734e2ce049d595fb50f' + 'af6b854349f4992892471b9cb363e8a6ce19ea6b' + 'ab86515aff465385675e2e6e593f09596e0a8db0' + 'c22b24324b8e53326702de439c401d97927ee3f2' + 'bd068695d22931320069200f240c425096bb5011') + +prepare() { + cd Python-${pkgver} + + # https://bugs.python.org/issue25096 + patch -p1 -i ../test_gdb-version-fix.patch + + # FS#45809 + patch -p1 -i ../dont-make-libpython-readonly.patch + + # https://bugs.python.org/issue25150 + patch -p1 -i ../issue25150.patch + + # x32 venv + patch -p1 -i ../venv-x32.patch + + # FS#23997 + sed -i -e "s|^#.* /usr/local/bin/python|#!/usr/bin/python-x32|" Lib/cgi.py + + # Ensure that we are using the system copy of various libraries (expat, zlib, libffi, and libmpdec), + # rather than copies shipped in the tarball + rm -r Modules/expat + rm -r Modules/zlib + rm -r Modules/_ctypes/{darwin,libffi}* + rm -r Modules/_decimal/libmpdec + + # x32 fixes + sed -i "s|base}/lib|base}/libx32|g" "${srcdir}/Python-${pkgver}/Lib/sysconfig.py" + sed -i "s|/include|/libx32/python{py_version_short}/include|g" "${srcdir}/Python-${pkgver}/Lib/sysconfig.py" + sed -i "s|lib/|libx32/|g" "${srcdir}/Python-${pkgver}/Modules/getpath.c" + sed -i "s|base/lib|base/libx32|g" "${srcdir}/Python-${pkgver}/Lib/distutils/command/install.py" + sed -i "s|/include|/libx32/python$py_version_short/include|g" "${srcdir}/Python-${pkgver}/Lib/distutils/command/install.py" + sed -i "s|prefix)/lib|prefix)/libx32|g" "${srcdir}/Python-${pkgver}/Makefile.pre.in" + sed -i "s|lib/python|libx32/python|g" "${srcdir}/Python-${pkgver}/configure" + sed -i "s|\"lib\"|\"libx32\"|g" "${srcdir}/Python-${pkgver}/Lib/distutils/sysconfig.py" +} + +build() { + cd Python-${pkgver} + + export CC="gcc -mx32" + export CXX="g++ -mx32" + export LDFLAGS='-mx32' + export PKG_CONFIG_PATH="/usr/libx32/pkgconfig" + export OPT="${CFLAGS}" + + # Disable bundled pip & setuptools + ./configure --prefix=/usr \ + --libdir=/usr/libx32 \ + --with-suffix='-x32' \ + --enable-shared \ + --with-threads \ + --with-computed-gotos \ + --enable-ipv6 \ + --with-system-expat \ + --with-dbmliborder=gdbm:ndbm \ + --with-system-ffi \ + --with-system-libmpdec \ + --enable-loadable-sqlite-extensions \ + --without-ensurepip + + make EXTRA_CFLAGS="$CFLAGS" +} + +check() { + # Failures: + # test_pathlib & test_posixpath: https://bugs.python.org/issue24950 + + # Hacks: + # test_tk: xvfb-run + # test_unicode_file: LC_CTYPE=en_US.utf-8 + + cd Python-${pkgver} + LD_LIBRARY_PATH="${srcdir}/Python-${pkgver}":${LD_LIBRARY_PATH} \ + LC_CTYPE=en_US.utf-8 xvfb-run \ + "${srcdir}/Python-${pkgver}/python-x32" -m test.regrtest -uall || warning "Expected failure" +} + +package() { + install="${pkgname}.install" + + cd Python-${pkgver} + make DESTDIR="${pkgdir}" EXTRA_CFLAGS="$CFLAGS" install maninstall + + # Why are these not done by default... + ln -s python3-x32 "${pkgdir}"/usr/bin/python-x32 + ln -s python3-x32-config "${pkgdir}"/usr/bin/python-x32-config + ln -s idle3-x32 "${pkgdir}"/usr/bin/idle-x32 + + # Fix FS#22552 + ln -sf ../../libpython${_pybasever}m.so \ + "${pkgdir}/usr/libx32/python${_pybasever}/config-${_pybasever}m/libpython${_pybasever}m.so" + + # some useful "stuff" FS#46146 + install -dm755 "${pkgdir}"/usr/libx32/python${_pybasever}/Tools/{i18n,scripts} + install -m755 Tools/i18n/{msgfmt,pygettext}.py "${pkgdir}"/usr/libx32/python${_pybasever}/Tools/i18n/ + install -m755 Tools/scripts/{README,*py} "${pkgdir}"/usr/libx32/python${_pybasever}/Tools/scripts/ + + # Clean-up reference to build directory + sed -i "s|$srcdir/Python-${pkgver}:||" "$pkgdir/usr/libx32/python${_pybasever}/config-${_pybasever}m/Makefile" + + mv "${pkgdir}/usr/include/python3.5m/pyconfig.h" "${srcdir}/pyconfig-x32.h" + rm -rf "${pkgdir}"/usr/{include,share} + mkdir -p "$pkgdir/usr/include/python3.5m" + install -Dm644 "${srcdir}/pyconfig-x32.h" "${pkgdir}/usr/include/python3.5m/pyconfig-x32.h" + install -Dm644 "${srcdir}/pyconfig-stub.h" "${pkgdir}/usr/include/python3.5m/pyconfig-stub.h" + + rm "${pkgdir}"/usr/bin/2to3{,-3.5} + rm "${pkgdir}"/usr/bin/idle3 + mv "${pkgdir}"/usr/bin/idle3.5{,-x32} + ln -s idle3.5-x32 "${pkgdir}"/usr/bin/idle3-x32 + rm "${pkgdir}"/usr/bin/pydoc3{,.5} + rm "${pkgdir}"/usr/bin/python3{,.5}-config + mv "${pkgdir}"/usr/bin/python3.5m{,-x32}-config + ln -s python3.5m-x32-config "${pkgdir}"/usr/bin/python3.5-x32-config + ln -s python3.5-x32-config "${pkgdir}"/usr/bin/python3-x32-config + rm "${pkgdir}"/usr/bin/pyvenv + mv "${pkgdir}"/usr/bin/pyvenv-3.5{,-x32} + ln -s pyvenv-3.5-x32 "${pkgdir}"/usr/bin/pyvenv-x32 + + # License + mkdir -p "$pkgdir/usr/share/licenses" + ln -s $_pkgbasename "$pkgdir/usr/share/licenses/$pkgname" +} diff --git a/dont-make-libpython-readonly.patch b/dont-make-libpython-readonly.patch new file mode 100644 index 000000000000..92308bfe97bf --- /dev/null +++ b/dont-make-libpython-readonly.patch @@ -0,0 +1,13 @@ +diff --git a/Makefile.pre.in b/Makefile.pre.in +index ce2c0aa..7d6dcf7 100644 +--- a/Makefile.pre.in ++++ b/Makefile.pre.in +@@ -60,7 +60,7 @@ INSTALL_DATA= @INSTALL_DATA@ + # Shared libraries must be installed with executable mode on some systems; + # rather than figuring out exactly which, we always give them executable mode. + # Also, making them read-only seems to be a good idea... +-INSTALL_SHARED= ${INSTALL} -m 555 ++INSTALL_SHARED= ${INSTALL} -m 755 + + MKDIR_P= @MKDIR_P@ + diff --git a/issue25150.patch b/issue25150.patch new file mode 100644 index 000000000000..be77c2a4913a --- /dev/null +++ b/issue25150.patch @@ -0,0 +1,78 @@ + +# HG changeset patch +# User Victor Stinner <victor.stinner@gmail.com> +# Date 1442581594 -7200 +# Node ID d4fcb362f7c66b25b22ddc0d27db0cc96acc727b +# Parent d04a0954e142f873adee88ec5bc1c1d81cd46bc4 +Issue #25150: Hide the private _Py_atomic_xxx symbols from the public +Python.h header to fix a compilation error with OpenMP. PyThreadState_GET() +becomes an alias to PyThreadState_Get() to avoid ABI incompatibilies. + +It is important that the _PyThreadState_Current variable is always accessed +with the same implementation of pyatomic.h. Use the PyThreadState_Get() +function so extension modules will all reuse the same implementation. + +diff --git a/Include/pyatomic.h b/Include/pyatomic.h +--- a/Include/pyatomic.h ++++ b/Include/pyatomic.h +@@ -1,8 +1,6 @@ +-/* Issue #23644: <stdatomic.h> is incompatible with C++, see: +- https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60932 */ +-#if !defined(Py_LIMITED_API) && !defined(__cplusplus) + #ifndef Py_ATOMIC_H + #define Py_ATOMIC_H ++#ifdef Py_BUILD_CORE + + #include "dynamic_annotations.h" + +@@ -248,5 +246,5 @@ static __inline__ void + #define _Py_atomic_load_relaxed(ATOMIC_VAL) \ + _Py_atomic_load_explicit(ATOMIC_VAL, _Py_memory_order_relaxed) + ++#endif /* Py_BUILD_CORE */ + #endif /* Py_ATOMIC_H */ +-#endif /* Py_LIMITED_API */ +diff --git a/Include/pystate.h b/Include/pystate.h +--- a/Include/pystate.h ++++ b/Include/pystate.h +@@ -177,20 +177,13 @@ PyAPI_FUNC(int) PyThreadState_SetAsyncEx + /* Variable and macro for in-line access to current thread state */ + + /* Assuming the current thread holds the GIL, this is the +- PyThreadState for the current thread. +- +- Issue #23644: pyatomic.h is incompatible with C++ (yet). Disable +- PyThreadState_GET() optimization: declare it as an alias to +- PyThreadState_Get(), as done for limited API. */ +-#if !defined(Py_LIMITED_API) && !defined(__cplusplus) ++ PyThreadState for the current thread. */ ++#ifdef Py_BUILD_CORE + PyAPI_DATA(_Py_atomic_address) _PyThreadState_Current; +-#endif +- +-#if defined(Py_DEBUG) || defined(Py_LIMITED_API) || defined(__cplusplus) +-#define PyThreadState_GET() PyThreadState_Get() ++# define PyThreadState_GET() \ ++ ((PyThreadState*)_Py_atomic_load_relaxed(&_PyThreadState_Current)) + #else +-#define PyThreadState_GET() \ +- ((PyThreadState*)_Py_atomic_load_relaxed(&_PyThreadState_Current)) ++# define PyThreadState_GET() PyThreadState_Get() + #endif + + typedef +diff --git a/Misc/NEWS b/Misc/NEWS +--- a/Misc/NEWS ++++ b/Misc/NEWS +@@ -11,6 +11,10 @@ Release date: TBA + Core and Builtins + ----------------- + ++- Issue #25150: Hide the private _Py_atomic_xxx symbols from the public ++ Python.h header to fix a compilation error with OpenMP. PyThreadState_GET() ++ becomes an alias to PyThreadState_Get() to avoid ABI incompatibilies. ++ + Library + ------- + + diff --git a/libx32-python.install b/libx32-python.install new file mode 100644 index 000000000000..2cdfcfd29b32 --- /dev/null +++ b/libx32-python.install @@ -0,0 +1,21 @@ +post_install() { + mv /usr/include/python3.5m/pyconfig.h /usr/include/python3.5m/pyconfig-64.h + ln -s pyconfig-stub.h /usr/include/python3.5m/pyconfig.h +} + +post_upgrade() { + if [ ! -L /usr/include/python3.5m/pyconfig.h ]; then + post_install + elif [ ${1::-2} != ${2::-2} ]; then + echo WARNING: libx32-python is upgraded before python, + echo WARNING: you probably need to reinstall libx32-python. + fi +} + +post_remove() { + if [ -L /usr/include/python3.5m/pyconfig.h ]; then + rm /usr/include/python3.5m/pyconfig.h + mv /usr/include/python3.5m/pyconfig-64.h /usr/include/python3.5m/pyconfig.h + fi +} + diff --git a/pyconfig-stub.h b/pyconfig-stub.h new file mode 100644 index 000000000000..de7680bcf0fc --- /dev/null +++ b/pyconfig-stub.h @@ -0,0 +1,13 @@ +// This is replaced by libx32-python. +// Old file is renamed to pyconfig-64.h. + +#if !defined __x86_64__ +# include "pyconfig-64.h" // no lib32-python yet +#endif +#if defined __x86_64__ && defined __LP64__ +# include "pyconfig-64.h" +#endif +#if defined __x86_64__ && defined __ILP32__ +# include "pyconfig-x32.h" +#endif + diff --git a/test_gdb-version-fix.patch b/test_gdb-version-fix.patch new file mode 100644 index 000000000000..ed1ddbea5923 --- /dev/null +++ b/test_gdb-version-fix.patch @@ -0,0 +1,11 @@ +--- a/Lib/test/test_gdb.py 2015-09-14 11:58:09.218811556 +0800 ++++ b/Lib/test/test_gdb.py 2015-09-14 11:58:24.845647558 +0800 +@@ -28,7 +28,7 @@ + # This is what "no gdb" looks like. There may, however, be other + # errors that manifest this way too. + raise unittest.SkipTest("Couldn't find gdb on the path") +-gdb_version_number = re.search(b"^GNU gdb [^\d]*(\d+)\.(\d)", gdb_version) ++gdb_version_number = re.search(b"^GNU gdb [^\d]*(\d+)\.(\d+)", gdb_version) + gdb_major_version = int(gdb_version_number.group(1)) + gdb_minor_version = int(gdb_version_number.group(2)) + if gdb_major_version < 7: diff --git a/venv-x32.patch b/venv-x32.patch new file mode 100644 index 000000000000..eb830cbced89 --- /dev/null +++ b/venv-x32.patch @@ -0,0 +1,16 @@ +diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py +index 3d606ef..72511e1 100644 +--- a/Lib/venv/__init__.py ++++ b/Lib/venv/__init__.py +@@ -139,6 +139,11 @@ class EnvBuilder: + create_if_needed(path) + create_if_needed(libpath) + # Issue 21197: create lib64 as a symlink to lib on 64-bit non-OS X POSIX ++ if ((sys.maxsize <= 2**32) and (os.name == 'posix') and ++ (sys.platform != 'darwin')): ++ link_path = os.path.join(env_dir, 'libx32') ++ if not os.path.exists(link_path): # Issue #21643 ++ os.symlink('lib', link_path) + if ((sys.maxsize > 2**32) and (os.name == 'posix') and + (sys.platform != 'darwin')): + link_path = os.path.join(env_dir, 'lib64') |