From 28efd0f33a1699e343aa0e0de5ac2a59da67ec3a Mon Sep 17 00:00:00 2001 From: Krzesimir Nowak Date: Mon, 23 Aug 2021 18:17:43 +0200 Subject: [PATCH] dev-lang/python-oem: Copy ebuild of python 3.6.5 from portage-stable It's the build file we are using now. --- .../dev-lang/python-oem/Manifest | 2 + .../python-oem/files/3.6.5-disable-nis.patch | 11 + .../files/python-3.5-distutils-OO-build.patch | 80 ++++ .../files/python-3.6.5-hash-unaligned.patch | 42 +++ .../python-3.6.5-libressl-compatibility.patch | 114 ++++++ .../python-oem/python-oem-3.6.5.ebuild | 346 ++++++++++++++++++ 6 files changed, 595 insertions(+) create mode 100644 sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/Manifest create mode 100644 sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/files/3.6.5-disable-nis.patch create mode 100644 sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/files/python-3.5-distutils-OO-build.patch create mode 100644 sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/files/python-3.6.5-hash-unaligned.patch create mode 100644 sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/files/python-3.6.5-libressl-compatibility.patch create mode 100644 sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/python-oem-3.6.5.ebuild diff --git a/sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/Manifest b/sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/Manifest new file mode 100644 index 0000000000..3bc5a5ee34 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/Manifest @@ -0,0 +1,2 @@ +DIST Python-3.6.5.tar.xz 17049912 BLAKE2B f393e9563a18a46c457afcd2e174d9eacda20fe2b0ae5461e11c582fa4d27b85c01bbe7b602f45511b6b44f635c6330205b12fb3e8325ffd07e87b78a8258889 SHA512 6b26fcd296b9bd8e67861eff10d14db7507711ddba947288d16d6def53135c39326b7f969c04bb2b2993f924d9e7ad3f5c5282a3915760bc0885cf0a8ea5eb51 +DIST python-gentoo-patches-3.6.4.tar.xz 12888 BLAKE2B 7cf49ae22df53e855f2e99df51686b5d4bd0da82ef4c22836e24726ea9ed561808352c0305a5659b052d38b843f1ff61b6466a7bc3673b7e5cfb4d81d22fa4bc SHA512 90a1b685f2539872ffd67f96581f70145b7afaf18af19f4a7f4a61214103d2a10bf0069c1769dac229ae011fceaf8538f041082b33c1671905246d018d184dd7 diff --git a/sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/files/3.6.5-disable-nis.patch b/sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/files/3.6.5-disable-nis.patch new file mode 100644 index 0000000000..3937c6fe79 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/files/3.6.5-disable-nis.patch @@ -0,0 +1,11 @@ +--- a/setup.py ++++ b/setup.py +@@ -1364,7 +1364,7 @@ class PyBuildExt(build_ext): + else: + missing.extend(['resource', 'termios']) + +- nis = self._detect_nis(inc_dirs, lib_dirs) ++ nis = None + if nis is not None: + exts.append(nis) + else: diff --git a/sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/files/python-3.5-distutils-OO-build.patch b/sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/files/python-3.5-distutils-OO-build.patch new file mode 100644 index 0000000000..8af8c30c76 --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/files/python-3.5-distutils-OO-build.patch @@ -0,0 +1,80 @@ +From 90507018442f9adabb586fd3d0a0206b9c2f2f50 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= +Date: Sun, 5 Jun 2016 08:18:01 +0200 +Subject: [PATCH] distutils: make -OO enable both opt-1 and opt-2 optimization + +Bug: http://bugs.python.org/issue27226 +Bug: https://bugs.gentoo.org/585060 +--- + Lib/distutils/command/build_py.py | 8 ++++---- + Lib/distutils/command/install_lib.py | 12 ++++++------ + 2 files changed, 10 insertions(+), 10 deletions(-) + +diff --git a/Lib/distutils/command/build_py.py b/Lib/distutils/command/build_py.py +index cf0ca57..838d4e4 100644 +--- a/Lib/distutils/command/build_py.py ++++ b/Lib/distutils/command/build_py.py +@@ -315,9 +315,9 @@ class build_py (Command): + if self.compile: + outputs.append(importlib.util.cache_from_source( + filename, optimization='')) +- if self.optimize > 0: ++ for opt in range(1, self.optimize + 1): + outputs.append(importlib.util.cache_from_source( +- filename, optimization=self.optimize)) ++ filename, optimization=opt)) + + outputs += [ + os.path.join(build_dir, filename) +@@ -387,8 +387,8 @@ class build_py (Command): + if self.compile: + byte_compile(files, optimize=0, + force=self.force, prefix=prefix, dry_run=self.dry_run) +- if self.optimize > 0: +- byte_compile(files, optimize=self.optimize, ++ for opt in range(1, self.optimize + 1): ++ byte_compile(files, optimize=opt, + force=self.force, prefix=prefix, dry_run=self.dry_run) + + class build_py_2to3(build_py, Mixin2to3): +diff --git a/Lib/distutils/command/install_lib.py b/Lib/distutils/command/install_lib.py +index 6154cf0..049b662 100644 +--- a/Lib/distutils/command/install_lib.py ++++ b/Lib/distutils/command/install_lib.py +@@ -24,8 +24,8 @@ class install_lib(Command): + # 2) compile .pyc only (--compile --no-optimize; default) + # 3) compile .pyc and "opt-1" .pyc (--compile --optimize) + # 4) compile "opt-1" .pyc only (--no-compile --optimize) +- # 5) compile .pyc and "opt-2" .pyc (--compile --optimize-more) +- # 6) compile "opt-2" .pyc only (--no-compile --optimize-more) ++ # 5) compile .pyc, "opt-1" and "opt-2" .pyc (--compile --optimize-more) ++ # 6) compile "opt-1" and "opt-2" .pyc (--no-compile --optimize-more) + # + # The UI for this is two options, 'compile' and 'optimize'. + # 'compile' is strictly boolean, and only decides whether to +@@ -132,8 +132,8 @@ class install_lib(Command): + byte_compile(files, optimize=0, + force=self.force, prefix=install_root, + dry_run=self.dry_run) +- if self.optimize > 0: +- byte_compile(files, optimize=self.optimize, ++ for opt in range(1, self.optimize + 1): ++ byte_compile(files, optimize=opt, + force=self.force, prefix=install_root, + verbose=self.verbose, dry_run=self.dry_run) + +@@ -167,9 +167,9 @@ class install_lib(Command): + if self.compile: + bytecode_files.append(importlib.util.cache_from_source( + py_file, optimization='')) +- if self.optimize > 0: ++ for opt in range(1, self.optimize + 1): + bytecode_files.append(importlib.util.cache_from_source( +- py_file, optimization=self.optimize)) ++ py_file, optimization=opt)) + + return bytecode_files + +-- +2.8.3 + diff --git a/sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/files/python-3.6.5-hash-unaligned.patch b/sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/files/python-3.6.5-hash-unaligned.patch new file mode 100644 index 0000000000..d096887cbf --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/files/python-3.6.5-hash-unaligned.patch @@ -0,0 +1,42 @@ +The hash implementation casts the input pointer to uint64_t* and directly reads +from this, which may cause unaligned accesses. Use memcpy() instead so this code +will not crash with SIGBUS on sparc. + +--- a/Python/pyhash.c 2017-11-29 10:21:20.283094068 +0100 ++++ b/Python/pyhash.c 2017-11-29 10:24:26.733087813 +0100 +@@ -369,7 +369,7 @@ + uint64_t k0 = _le64toh(_Py_HashSecret.siphash.k0); + uint64_t k1 = _le64toh(_Py_HashSecret.siphash.k1); + uint64_t b = (uint64_t)src_sz << 56; +- const uint64_t *in = (uint64_t*)src; ++ const uint8_t *in = (uint8_t*)src; + + uint64_t v0 = k0 ^ 0x736f6d6570736575ULL; + uint64_t v1 = k1 ^ 0x646f72616e646f6dULL; +@@ -378,11 +378,13 @@ + + uint64_t t; + uint8_t *pt; +- uint8_t *m; ++ const uint8_t *m; + + while (src_sz >= 8) { +- uint64_t mi = _le64toh(*in); +- in += 1; +- src_sz -= 8; ++ uint64_t mi; ++ memcpy(&mi, in, sizeof(mi)); ++ mi = _le64toh(mi); ++ in += sizeof(mi); ++ src_sz -= sizeof(mi); + v3 ^= mi; + DOUBLE_ROUND(v0,v1,v2,v3); +@@ -391,7 +393,7 @@ + + t = 0; + pt = (uint8_t *)&t; +- m = (uint8_t *)in; ++ m = in; + switch (src_sz) { + case 7: pt[6] = m[6]; /* fall through */ + case 6: pt[5] = m[5]; /* fall through */ diff --git a/sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/files/python-3.6.5-libressl-compatibility.patch b/sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/files/python-3.6.5-libressl-compatibility.patch new file mode 100644 index 0000000000..2f9e6a2bef --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/files/python-3.6.5-libressl-compatibility.patch @@ -0,0 +1,114 @@ +From 8d89a385b71a2e4cce0fba0cfc8d91b63485edc5 Mon Sep 17 00:00:00 2001 +From: Christian Heimes +Date: Sat, 24 Mar 2018 18:38:14 +0100 +Subject: [PATCH] [3.6] bpo-33127: Compatibility patch for LibreSSL 2.7.0 + (GH-6210) (GH-6214) + +LibreSSL 2.7 introduced OpenSSL 1.1.0 API. The ssl module now detects +LibreSSL 2.7 and only provides API shims for OpenSSL < 1.1.0 and +LibreSSL < 2.7. + +Documentation updates and fixes for failing tests will be provided in +another patch set. + +Signed-off-by: Christian Heimes . +(cherry picked from commit 4ca0739c9d97ac7cd45499e0d31be68dc659d0e1) + +Co-authored-by: Christian Heimes +--- + Lib/test/test_ssl.py | 1 + + .../2018-03-24-15-08-24.bpo-33127.olJmHv.rst | 1 + + Modules/_ssl.c | 24 ++++++++++++------- + Tools/ssl/multissltests.py | 3 ++- + 4 files changed, 20 insertions(+), 9 deletions(-) + create mode 100644 Misc/NEWS.d/next/Library/2018-03-24-15-08-24.bpo-33127.olJmHv.rst + +diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py +index 8dd3b41450..9785a59a7e 100644 +--- a/Lib/test/test_ssl.py ++++ b/Lib/test/test_ssl.py +@@ -1687,6 +1687,7 @@ class SimpleBackgroundTests(unittest.TestCase): + self.assertEqual(len(ctx.get_ca_certs()), 1) + + @needs_sni ++ @unittest.skipUnless(hasattr(ssl, "PROTOCOL_TLSv1_2"), "needs TLS 1.2") + def test_context_setget(self): + # Check that the context of a connected socket can be replaced. + ctx1 = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) +diff --git a/Misc/NEWS.d/next/Library/2018-03-24-15-08-24.bpo-33127.olJmHv.rst b/Misc/NEWS.d/next/Library/2018-03-24-15-08-24.bpo-33127.olJmHv.rst +new file mode 100644 +index 0000000000..635aabbde0 +--- /dev/null ++++ b/Misc/NEWS.d/next/Library/2018-03-24-15-08-24.bpo-33127.olJmHv.rst +@@ -0,0 +1 @@ ++The ssl module now compiles with LibreSSL 2.7.1. +diff --git a/Modules/_ssl.c b/Modules/_ssl.c +index c54e43c2b4..5e007da858 100644 +--- a/Modules/_ssl.c ++++ b/Modules/_ssl.c +@@ -106,6 +106,12 @@ struct py_ssl_library_code { + + #if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER) + # define OPENSSL_VERSION_1_1 1 ++# define PY_OPENSSL_1_1_API 1 ++#endif ++ ++/* LibreSSL 2.7.0 provides necessary OpenSSL 1.1.0 APIs */ ++#if defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER >= 0x2070000fL ++# define PY_OPENSSL_1_1_API 1 + #endif + + /* Openssl comes with TLSv1.1 and TLSv1.2 between 1.0.0h and 1.0.1 +@@ -152,16 +158,18 @@ struct py_ssl_library_code { + #define INVALID_SOCKET (-1) + #endif + +-#ifdef OPENSSL_VERSION_1_1 +-/* OpenSSL 1.1.0+ */ +-#ifndef OPENSSL_NO_SSL2 +-#define OPENSSL_NO_SSL2 +-#endif +-#else /* OpenSSL < 1.1.0 */ +-#if defined(WITH_THREAD) ++/* OpenSSL 1.0.2 and LibreSSL needs extra code for locking */ ++#if !defined(OPENSSL_VERSION_1_1) && defined(WITH_THREAD) + #define HAVE_OPENSSL_CRYPTO_LOCK + #endif + ++#if defined(OPENSSL_VERSION_1_1) && !defined(OPENSSL_NO_SSL2) ++#define OPENSSL_NO_SSL2 ++#endif ++ ++#ifndef PY_OPENSSL_1_1_API ++/* OpenSSL 1.1 API shims for OpenSSL < 1.1.0 and LibreSSL < 2.7.0 */ ++ + #define TLS_method SSLv23_method + #define TLS_client_method SSLv23_client_method + #define TLS_server_method SSLv23_server_method +@@ -227,7 +235,7 @@ SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *s) + return s->tlsext_tick_lifetime_hint; + } + +-#endif /* OpenSSL < 1.1.0 or LibreSSL */ ++#endif /* OpenSSL < 1.1.0 or LibreSSL < 2.7.0 */ + + + enum py_ssl_error { +diff --git a/Tools/ssl/multissltests.py b/Tools/ssl/multissltests.py +index ce5bbd8530..ba4529ae06 100755 +--- a/Tools/ssl/multissltests.py ++++ b/Tools/ssl/multissltests.py +@@ -57,8 +57,9 @@ LIBRESSL_OLD_VERSIONS = [ + ] + + LIBRESSL_RECENT_VERSIONS = [ +- "2.5.3", + "2.5.5", ++ "2.6.4", ++ "2.7.1", + ] + + # store files in ../multissl +-- +2.17.0 + diff --git a/sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/python-oem-3.6.5.ebuild b/sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/python-oem-3.6.5.ebuild new file mode 100644 index 0000000000..07d92a8c3a --- /dev/null +++ b/sdk_container/src/third_party/coreos-overlay/dev-lang/python-oem/python-oem-3.6.5.ebuild @@ -0,0 +1,346 @@ +# Copyright 1999-2018 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI="6" +WANT_LIBTOOL="none" + +inherit autotools flag-o-matic pax-utils python-utils-r1 toolchain-funcs + +MY_P="Python-${PV}" +PATCHSET_VERSION="3.6.4" + +DESCRIPTION="An interpreted, interactive, object-oriented programming language" +HOMEPAGE="https://www.python.org/" +SRC_URI="https://www.python.org/ftp/python/${PV}/${MY_P}.tar.xz + https://dev.gentoo.org/~floppym/python/python-gentoo-patches-${PATCHSET_VERSION}.tar.xz" + +LICENSE="PSF-2" +SLOT="3.6/3.6m" +KEYWORDS="alpha amd64 arm arm64 hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86 ~amd64-fbsd ~x86-fbsd" +IUSE="build examples gdbm hardened ipv6 libressl +ncurses +readline sqlite +ssl test +threads tk wininst +xml" +RESTRICT="!test? ( test )" + +# Do not add a dependency on dev-lang/python to this ebuild. +# If you need to apply a patch which requires python for bootstrapping, please +# run the bootstrap code on your dev box and include the results in the +# patchset. See bug 447752. + +RDEPEND="app-arch/bzip2:0= + app-arch/xz-utils:0= + >=sys-libs/zlib-1.1.3:0= + virtual/libffi:= + virtual/libintl + gdbm? ( sys-libs/gdbm:0=[berkdb] ) + ncurses? ( >=sys-libs/ncurses-5.2:0= ) + readline? ( >=sys-libs/readline-4.1:0= ) + sqlite? ( >=dev-db/sqlite-3.3.8:3= ) + ssl? ( + !libressl? ( dev-libs/openssl:0= ) + libressl? ( dev-libs/libressl:0= ) + ) + tk? ( + >=dev-lang/tcl-8.0:0= + >=dev-lang/tk-8.0:0= + dev-tcltk/blt:0= + dev-tcltk/tix + ) + xml? ( >=dev-libs/expat-2.1:0= ) + !!/dev/null) + newins "${S}"/Tools/gdb/libpython.py "${libname}"-gdb.py + + newconfd "${FILESDIR}/pydoc.conf" pydoc-${PYVER} + newinitd "${FILESDIR}/pydoc.init" pydoc-${PYVER} + sed \ + -e "s:@PYDOC_PORT_VARIABLE@:PYDOC${PYVER/./_}_PORT:" \ + -e "s:@PYDOC@:pydoc${PYVER}:" \ + -i "${ED}etc/conf.d/pydoc-${PYVER}" "${ED}etc/init.d/pydoc-${PYVER}" || die "sed failed" + + # for python-exec + local vars=( EPYTHON PYTHON_SITEDIR PYTHON_SCRIPTDIR ) + + # if not using a cross-compiler, use the fresh binary + if ! tc-is-cross-compiler; then + local -x PYTHON=./python + local -x LD_LIBRARY_PATH=${LD_LIBRARY_PATH+${LD_LIBRARY_PATH}:}${PWD} + else + vars=( PYTHON "${vars[@]}" ) + fi + + python_export "python${PYVER}" "${vars[@]}" + echo "EPYTHON='${EPYTHON}'" > epython.py || die + python_domodule epython.py + + # python-exec wrapping support + local pymajor=${PYVER%.*} + mkdir -p "${D}${PYTHON_SCRIPTDIR}" || die + # python and pythonX + ln -s "../../../bin/${abiver}" \ + "${D}${PYTHON_SCRIPTDIR}/python${pymajor}" || die + ln -s "python${pymajor}" \ + "${D}${PYTHON_SCRIPTDIR}/python" || die + # python-config and pythonX-config + # note: we need to create a wrapper rather than symlinking it due + # to some random dirname(argv[0]) magic performed by python-config + cat > "${D}${PYTHON_SCRIPTDIR}/python${pymajor}-config" <<-EOF || die + #!/bin/sh + exec "${abiver}-config" "\${@}" + EOF + chmod +x "${D}${PYTHON_SCRIPTDIR}/python${pymajor}-config" || die + ln -s "python${pymajor}-config" \ + "${D}${PYTHON_SCRIPTDIR}/python-config" || die + # 2to3, pydoc, pyvenv + ln -s "../../../bin/2to3-${PYVER}" \ + "${D}${PYTHON_SCRIPTDIR}/2to3" || die + ln -s "../../../bin/pydoc${PYVER}" \ + "${D}${PYTHON_SCRIPTDIR}/pydoc" || die + ln -s "../../../bin/pyvenv-${PYVER}" \ + "${D}${PYTHON_SCRIPTDIR}/pyvenv" || die + # idle + if use tk; then + ln -s "../../../bin/idle${PYVER}" \ + "${D}${PYTHON_SCRIPTDIR}/idle" || die + fi +} + +pkg_preinst() { + if has_version "<${CATEGORY}/${PN}-${PYVER}" && ! has_version ">=${CATEGORY}/${PN}-${PYVER}_alpha"; then + python_updater_warning="1" + fi +} + +eselect_python_update() { + if [[ -z "$(eselect python show)" || ! -f "${EROOT}usr/bin/$(eselect python show)" ]]; then + eselect python update + fi + + if [[ -z "$(eselect python show --python${PV%%.*})" || ! -f "${EROOT}usr/bin/$(eselect python show --python${PV%%.*})" ]]; then + eselect python update --python${PV%%.*} + fi +} + +pkg_postinst() { + eselect_python_update + + if [[ "${python_updater_warning}" == "1" ]]; then + ewarn "You have just upgraded from an older version of Python." + ewarn + ewarn "Please adjust PYTHON_TARGETS (if so desired), and run emerge with the --newuse or --changed-use option to rebuild packages installing python modules." + fi +} + +pkg_postrm() { + eselect_python_update +}