From 99386916bbaf4d29bc546ae0a24fed284f655a46 Mon Sep 17 00:00:00 2001
From: Britney Fransen <brfransen@gmail.com>
Date: Tue, 13 Feb 2018 19:40:33 +0000
Subject: python2: update to 2.7.14

---
 abs/core/python2/PKGBUILD               | 50 ++++++++++++++++------------
 abs/core/python2/__changelog            |  1 -
 abs/core/python2/descr_ref.patch        | 58 +++++++++++++++++++++++++++++++++
 abs/core/python2/fix-profile-task.patch | 13 ++++++++
 4 files changed, 100 insertions(+), 22 deletions(-)
 delete mode 100644 abs/core/python2/__changelog
 create mode 100644 abs/core/python2/descr_ref.patch
 create mode 100644 abs/core/python2/fix-profile-task.patch

diff --git a/abs/core/python2/PKGBUILD b/abs/core/python2/PKGBUILD
index 8615d48..aabe74a 100644
--- a/abs/core/python2/PKGBUILD
+++ b/abs/core/python2/PKGBUILD
@@ -5,22 +5,27 @@
 # Contributor: Jason Chu <jason@archlinux.org>
 
 pkgname=python2
-pkgver=2.7.11
+pkgver=2.7.14
 pkgrel=2
 _pybasever=2.7
 pkgdesc="A high-level scripting language"
-arch=('i686' 'x86_64')
+arch=('x86_64')
 license=('PSF')
 url="http://www.python.org/"
 depends=('bzip2' 'gdbm' 'openssl' 'zlib' 'expat' 'sqlite' 'libffi')
-makedepends=('tk' 'bluez-libs' 'hardening-wrapper')
-checkdepends=('gdb' 'file')
+makedepends=('tk' 'bluez-libs')
+checkdepends=('gdb' 'file' 'xorg-server-xvfb')
 optdepends=('tk: for IDLE'
             'python2-setuptools'
             'python2-pip')
 conflicts=('python<3')
-source=(http://www.python.org/ftp/python/${pkgver%rc?}/Python-${pkgver}.tar.xz)
-sha1sums=('c3b8bbe3f084c4d4ea13ffb03d75a5e22f9756ff')
+source=("https://www.python.org/ftp/python/${pkgver%rc?}/Python-${pkgver}.tar.xz"{,.asc}
+        descr_ref.patch fix-profile-task.patch)
+sha512sums=('78310b0be6388ffa15f29a80afb9ab3c03a572cb094e9da00cfe391afadb51696e41f592eb658d6a31a2f422fdac8a55214a382cbb8cfb43d4a127d5b35ea7f9'
+            'SKIP'
+            '2e16eb23eb402dbe921c09bce99b400c10939114b4a1ded0e94a744d8cb66427947bc8d07c4fb054f9fe0906d10d1da509fc2273fd136225c0f019cc43dd045d'
+            '5d7b47bfa9f13cf5fb827546189d823033278f96866366fca5257aaf819c92ffb26e2116426c84ab78d9ae3178eebb591fa4b2f22cfc2725e3e3e795fdb5c2b6')
+validpgpkeys=('C01E1CAD5EA2C4F0B8E3571504C367C218ADD4FF')  # Benjamin Peterson
 
 prepare() {
   cd Python-${pkgver}
@@ -38,11 +43,6 @@ prepare() {
   sed -i "s/python2.3/python2/g" Lib/distutils/tests/test_build_scripts.py \
     Lib/distutils/tests/test_install_scripts.py
 
-  # TODO: Still not passed
-  # Silent test_gdb failures on 'no symbol table loaded'.
-  #sed -i '/ignore_patterns = (/a "No symbol table is loaded.  Use the \\"file\\" command.",' \
-  #  Lib/test/test_gdb.py
-
   # Ensure that we are using the system copy of various libraries (expat, zlib and libffi),
   # rather than copies shipped in the tarball
   rm -r Modules/expat
@@ -55,6 +55,13 @@ prepare() {
 
   # Workaround asdl_c.py/makeopcodetargets.py errors after we touched the shebangs
   touch Include/Python-ast.h Python/Python-ast.c Python/opcode_targets.h
+
+  # FS#48761
+  # http://bugs.python.org/issue25750
+  patch -Np1 -i ../descr_ref.patch
+
+  # Backport from Python 3.x
+  patch -Np2 -i ../fix-profile-task.patch
 }
 
 build() {
@@ -64,6 +71,8 @@ build() {
   ./configure --prefix=/usr \
               --enable-shared \
               --with-threads \
+              --enable-optimizations \
+              --with-lto \
               --enable-ipv6 \
               --enable-unicode=ucs4 \
               --with-system-expat \
@@ -75,23 +84,22 @@ build() {
 }
 
 check() {
-  # As of 2.7.11, 2 tests failed:
-  # test_doctest test_gdb
-  # Besides, test_thread disabled as it will stuck
-  
-  # $SHELL was set to avoid a test failure in test_gdb (it still fails due to other reasons, though)
+  # Since 2.7.13,
+  # test_replace_overflow (present in test_bytes, test_str, test_string, test_unicode, test_userstring) segfault on i686
+  # test_bigrepeat (present in test_tuple) segfault on i686
 
   cd Python-${pkgver}
-  SHELL=/bin/sh LD_LIBRARY_PATH="${srcdir}/Python-${pkgver}":${LD_LIBRARY_PATH} \
-    "${srcdir}/Python-${pkgver}/python" -m test.regrtest -v -uall -x test_thread || warning "Tests failed"
+  LD_LIBRARY_PATH="${srcdir}/Python-${pkgver}":${LD_LIBRARY_PATH} \
+    xvfb-run "${srcdir}/Python-${pkgver}/python" -m test.regrtest -v -uall -x test_bytes test_str test_string test_tuple test_unicode test_userstring
 }
 
 package() {
   cd Python-${pkgver}
-  make DESTDIR="${pkgdir}" altinstall maninstall
 
-  #LinHES
-  ln -sf python2               "${pkgdir}/usr/bin/python"
+  # Hack to avoid building again
+  sed -i 's/^all:.*$/all: build_all/' Makefile
+
+  make DESTDIR="${pkgdir}" altinstall maninstall
 
   rm "${pkgdir}"/usr/share/man/man1/python.1
 
diff --git a/abs/core/python2/__changelog b/abs/core/python2/__changelog
deleted file mode 100644
index d8cc127..0000000
--- a/abs/core/python2/__changelog
+++ /dev/null
@@ -1 +0,0 @@
-PKGBUILD: add symlink making python2->python
diff --git a/abs/core/python2/descr_ref.patch b/abs/core/python2/descr_ref.patch
new file mode 100644
index 0000000..b55cf58
--- /dev/null
+++ b/abs/core/python2/descr_ref.patch
@@ -0,0 +1,58 @@
+When calling tp_descr_get(self, obj, type), make sure that we own a reference to "self"
+
+diff -ru Python-2.7.9/Objects/typeobject.c Python-2.7.9-fixed//Objects/typeobject.c
+--- Python-2.7.9/Objects/typeobject.c	2014-12-10 16:59:57.000000000 +0100
++++ Python-2.7.9-fixed//Objects/typeobject.c	2015-11-27 20:39:58.276156800 +0100
+@@ -2542,6 +2542,7 @@
+     PyTypeObject *metatype = Py_TYPE(type);
+     PyObject *meta_attribute, *attribute;
+     descrgetfunc meta_get;
++    PyObject* res;
+ 
+     if (!PyString_Check(name)) {
+         PyErr_Format(PyExc_TypeError,
+@@ -2563,6 +2564,7 @@
+     meta_attribute = _PyType_Lookup(metatype, name);
+ 
+     if (meta_attribute != NULL) {
++        Py_INCREF(meta_attribute);
+         meta_get = Py_TYPE(meta_attribute)->tp_descr_get;
+ 
+         if (meta_get != NULL && PyDescr_IsData(meta_attribute)) {
+@@ -2570,10 +2572,11 @@
+              * writes. Assume the attribute is not overridden in
+              * type's tp_dict (and bases): call the descriptor now.
+              */
+-            return meta_get(meta_attribute, (PyObject *)type,
++            res = meta_get(meta_attribute, (PyObject *)type,
+                             (PyObject *)metatype);
++            Py_DECREF(meta_attribute);
++            return res;
+         }
+-        Py_INCREF(meta_attribute);
+     }
+ 
+     /* No data descriptor found on metatype. Look in tp_dict of this
+@@ -2581,6 +2584,7 @@
+     attribute = _PyType_Lookup(type, name);
+     if (attribute != NULL) {
+         /* Implement descriptor functionality, if any */
++        Py_INCREF(attribute);
+         descrgetfunc local_get = Py_TYPE(attribute)->tp_descr_get;
+ 
+         Py_XDECREF(meta_attribute);
+@@ -2588,11 +2592,12 @@
+         if (local_get != NULL) {
+             /* NULL 2nd argument indicates the descriptor was
+              * found on the target object itself (or a base)  */
+-            return local_get(attribute, (PyObject *)NULL,
++            res = local_get(attribute, (PyObject *)NULL,
+                              (PyObject *)type);
++            Py_DECREF(attribute);
++            return res;
+         }
+ 
+-        Py_INCREF(attribute);
+         return attribute;
+     }
+ 
diff --git a/abs/core/python2/fix-profile-task.patch b/abs/core/python2/fix-profile-task.patch
new file mode 100644
index 0000000..c6558ef
--- /dev/null
+++ b/abs/core/python2/fix-profile-task.patch
@@ -0,0 +1,13 @@
+diff --git a/Python-2.7.13/Makefile.pre.in b/Python-2.7.13/Makefile.pre.in
+index e288964..22edc27 100644
+--- a/Python-2.7.13/Makefile.pre.in
++++ b/Python-2.7.13/Makefile.pre.in
+@@ -456,7 +456,7 @@ build_all_generate_profile:
+ 
+ run_profile_task:
+ 	: # FIXME: can't run for a cross build
+-	$(LLVM_PROF_FILE) ./$(BUILDPYTHON) $(PROFILE_TASK) || true
++	$(LLVM_PROF_FILE) $(RUNSHARED) ./$(BUILDPYTHON) $(PROFILE_TASK) || true
+ 
+ build_all_merge_profile:
+ 	$(LLVM_PROF_MERGER)
-- 
cgit v0.12

