summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorFantix King2015-11-18 14:37:49 +0800
committerFantix King2015-11-19 18:05:57 +0800
commitbfa70b2a4583a336ffcaa6bc9b10965446490651 (patch)
tree34735a64b7ef0db9181ea1ee8b1f4c4623382896
downloadaur-bfa70b2a4583a336ffcaa6bc9b10965446490651.tar.gz
3.5.0-2.1
-rw-r--r--.SRCINFO43
-rw-r--r--PKGBUILD161
-rw-r--r--dont-make-libpython-readonly.patch13
-rw-r--r--issue25150.patch78
-rw-r--r--libx32-python.install21
-rw-r--r--pyconfig-stub.h13
-rw-r--r--test_gdb-version-fix.patch11
-rw-r--r--venv-x32.patch16
8 files changed, 356 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 00000000000..94daffb3c61
--- /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 00000000000..a3c47fe56bd
--- /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 00000000000..92308bfe97b
--- /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 00000000000..be77c2a4913
--- /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 00000000000..2cdfcfd29b3
--- /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 00000000000..de7680bcf0f
--- /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 00000000000..ed1ddbea592
--- /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 00000000000..eb830cbced8
--- /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')