python3: upgrade to 3.7.2

I took the same approach as the recent perl upgrade: write recipe from scratch,
taking the pieces from the old recipe only when they were proven to be necessary.

The pgo, manifest and ptest features are all preserved.

New features:

- native and target recipes are now unified into one recipe

- check_build_completeness.py runs right after do_compile() and verifies that
all optional modules have been built (a notorious source of regressions)

- a new approach to sysconfig.py and distutils/sysconfig.py returning values
appropriate for native or target builds: we copy the configuration file to a
separate folder, add that folder to sys.path (through environment variable
that differs between native and target builds), and point python to the file
through another environment variable.

There were a few other patches where it was difficult to decide if the patch
is still relevant, and how to test that it works correctly; please add those
as-needed by testing the new python.

(From OE-Core rev: 02714c105426b0d687620913c1a7401b386428b6)

Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Alexander Kanavin
2019-02-06 17:26:34 +01:00
committed by Richard Purdie
parent cd6c61a261
commit e2c3247c23
51 changed files with 700 additions and 3030 deletions

View File

@@ -0,0 +1,25 @@
From 23294c6ba6896115828293fdb7e67b47b38ba675 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Fri, 25 Jan 2019 19:04:13 +0100
Subject: [PATCH] Do not add /usr/lib/termcap to linker flags to avoid host
contamination
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
---
setup.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/setup.py b/setup.py
index b4357e3..fbec00d 100644
--- a/setup.py
+++ b/setup.py
@@ -856,7 +856,6 @@ class PyBuildExt(build_ext):
'termcap'):
readline_libs.append('termcap')
exts.append( Extension('readline', ['readline.c'],
- library_dirs=['/usr/lib/termcap'],
extra_link_args=readline_extra_link_args,
libraries=readline_libs) )
else:

View File

@@ -0,0 +1,196 @@
From 0fbdad1eaf541a8e92be81f39514cd249b3b0801 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Tue, 5 Feb 2019 15:52:02 +0100
Subject: [PATCH] Do not hardcode "lib" as location for modules, site-packages
and lib-dynload
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
---
Include/pythonrun.h | 2 ++
Lib/site.py | 4 ++--
Makefile.pre.in | 5 +++--
Modules/getpath.c | 18 ++++++++++++------
Python/getplatform.c | 10 ++++++++++
Python/sysmodule.c | 2 ++
6 files changed, 31 insertions(+), 10 deletions(-)
diff --git a/Include/pythonrun.h b/Include/pythonrun.h
index 6f0c6fc..0a17edd 100644
--- a/Include/pythonrun.h
+++ b/Include/pythonrun.h
@@ -7,6 +7,8 @@
extern "C" {
#endif
+PyAPI_FUNC(const char *) Py_GetLib(void);
+
#ifndef Py_LIMITED_API
PyAPI_FUNC(int) PyRun_SimpleStringFlags(const char *, PyCompilerFlags *);
PyAPI_FUNC(int) PyRun_AnyFileFlags(FILE *, const char *, PyCompilerFlags *);
diff --git a/Lib/site.py b/Lib/site.py
index ffd132b..b55f6d8 100644
--- a/Lib/site.py
+++ b/Lib/site.py
@@ -334,12 +334,12 @@ def getsitepackages(prefixes=None):
seen.add(prefix)
if os.sep == '/':
- sitepackages.append(os.path.join(prefix, "lib",
+ sitepackages.append(os.path.join(prefix, sys.lib,
"python%d.%d" % sys.version_info[:2],
"site-packages"))
else:
sitepackages.append(prefix)
- sitepackages.append(os.path.join(prefix, "lib", "site-packages"))
+ sitepackages.append(os.path.join(prefix, sys.lib, "site-packages"))
return sitepackages
def addsitepackages(known_paths, prefixes=None):
diff --git a/Makefile.pre.in b/Makefile.pre.in
index 6e81b2f..671a20e 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -142,7 +142,7 @@ LIBDIR= @libdir@
MANDIR= @mandir@
INCLUDEDIR= @includedir@
CONFINCLUDEDIR= $(exec_prefix)/include
-SCRIPTDIR= $(prefix)/lib
+SCRIPTDIR= @libdir@
ABIFLAGS= @ABIFLAGS@
# Detailed destination directories
@@ -768,6 +768,7 @@ Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile
-DEXEC_PREFIX='"$(exec_prefix)"' \
-DVERSION='"$(VERSION)"' \
-DVPATH='"$(VPATH)"' \
+ -DLIB='"$(LIB)"' \
-o $@ $(srcdir)/Modules/getpath.c
Programs/python.o: $(srcdir)/Programs/python.c
@@ -856,7 +857,7 @@ regen-opcode:
Python/compile.o Python/symtable.o Python/ast_unparse.o Python/ast.o: $(srcdir)/Include/graminit.h $(srcdir)/Include/Python-ast.h
Python/getplatform.o: $(srcdir)/Python/getplatform.c
- $(CC) -c $(PY_CORE_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -o $@ $(srcdir)/Python/getplatform.c
+ $(CC) -c $(PY_CORE_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -DLIB='"$(LIB)"' -o $@ $(srcdir)/Python/getplatform.c
Python/importdl.o: $(srcdir)/Python/importdl.c
$(CC) -c $(PY_CORE_CFLAGS) -I$(DLINCLDIR) -o $@ $(srcdir)/Python/importdl.c
diff --git a/Modules/getpath.c b/Modules/getpath.c
index e6a3e8e..0c62af6 100644
--- a/Modules/getpath.c
+++ b/Modules/getpath.c
@@ -123,6 +123,7 @@ typedef struct {
wchar_t *exec_prefix; /* EXEC_PREFIX define */
wchar_t *lib_python; /* "lib/pythonX.Y" */
+ wchar_t *multilib_python; /* "lib[suffix]/pythonX.Y" */
wchar_t argv0_path[MAXPATHLEN+1];
wchar_t zip_path[MAXPATHLEN+1]; /* ".../lib/pythonXY.zip" */
@@ -314,7 +315,7 @@ search_for_prefix(const _PyCoreConfig *core_config,
if (delim) {
*delim = L'\0';
}
- joinpath(prefix, calculate->lib_python);
+ joinpath(prefix, calculate->multilib_python);
joinpath(prefix, LANDMARK);
return 1;
}
@@ -343,7 +344,7 @@ search_for_prefix(const _PyCoreConfig *core_config,
copy_absolute(prefix, calculate->argv0_path, MAXPATHLEN+1);
do {
n = wcslen(prefix);
- joinpath(prefix, calculate->lib_python);
+ joinpath(prefix, calculate->multilib_python);
joinpath(prefix, LANDMARK);
if (ismodule(prefix)) {
return 1;
@@ -355,7 +356,7 @@ search_for_prefix(const _PyCoreConfig *core_config,
/* Look at configure's PREFIX */
wcsncpy(prefix, calculate->prefix, MAXPATHLEN);
prefix[MAXPATHLEN] = L'\0';
- joinpath(prefix, calculate->lib_python);
+ joinpath(prefix, calculate->multilib_python);
joinpath(prefix, LANDMARK);
if (ismodule(prefix)) {
return 1;
@@ -427,7 +428,7 @@ search_for_exec_prefix(const _PyCoreConfig *core_config,
wcsncpy(exec_prefix, core_config->home, MAXPATHLEN);
}
exec_prefix[MAXPATHLEN] = L'\0';
- joinpath(exec_prefix, calculate->lib_python);
+ joinpath(exec_prefix, calculate->multilib_python);
joinpath(exec_prefix, L"lib-dynload");
return 1;
}
@@ -464,7 +465,7 @@ search_for_exec_prefix(const _PyCoreConfig *core_config,
copy_absolute(exec_prefix, calculate->argv0_path, MAXPATHLEN+1);
do {
n = wcslen(exec_prefix);
- joinpath(exec_prefix, calculate->lib_python);
+ joinpath(exec_prefix, calculate->multilib_python);
joinpath(exec_prefix, L"lib-dynload");
if (isdir(exec_prefix)) {
return 1;
@@ -476,7 +477,7 @@ search_for_exec_prefix(const _PyCoreConfig *core_config,
/* Look at configure's EXEC_PREFIX */
wcsncpy(exec_prefix, calculate->exec_prefix, MAXPATHLEN);
exec_prefix[MAXPATHLEN] = L'\0';
- joinpath(exec_prefix, calculate->lib_python);
+ joinpath(exec_prefix, calculate->multilib_python);
joinpath(exec_prefix, L"lib-dynload");
if (isdir(exec_prefix)) {
return 1;
@@ -871,6 +872,10 @@ calculate_init(PyCalculatePath *calculate,
if (!calculate->lib_python) {
return DECODE_LOCALE_ERR("EXEC_PREFIX define", len);
}
+ calculate->multilib_python = Py_DecodeLocale(LIB "/python" VERSION, &len);
+ if (!calculate->multilib_python) {
+ return DECODE_LOCALE_ERR("EXEC_PREFIX define", len);
+ }
return _Py_INIT_OK();
}
@@ -882,6 +887,7 @@ calculate_free(PyCalculatePath *calculate)
PyMem_RawFree(calculate->prefix);
PyMem_RawFree(calculate->exec_prefix);
PyMem_RawFree(calculate->lib_python);
+ PyMem_RawFree(calculate->multilib_python);
PyMem_RawFree(calculate->path_env);
}
diff --git a/Python/getplatform.c b/Python/getplatform.c
index 81a0f7a..d55396b 100644
--- a/Python/getplatform.c
+++ b/Python/getplatform.c
@@ -10,3 +10,13 @@ Py_GetPlatform(void)
{
return PLATFORM;
}
+
+#ifndef LIB
+#define LIB "lib"
+#endif
+
+const char *
+Py_GetLib(void)
+{
+ return LIB;
+}
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index efe5b29..de77b17 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -2319,6 +2319,8 @@ _PySys_BeginInit(PyObject **sysmod)
PyUnicode_FromString(Py_GetCopyright()));
SET_SYS_FROM_STRING("platform",
PyUnicode_FromString(Py_GetPlatform()));
+ SET_SYS_FROM_STRING("lib",
+ PyUnicode_FromString(Py_GetLib()));
SET_SYS_FROM_STRING("maxsize",
PyLong_FromSsize_t(PY_SSIZE_T_MAX));
SET_SYS_FROM_STRING("float_info",

View File

@@ -1,6 +1,6 @@
From 04df959365e2b54d7503edf0e5534ff094284f2d Mon Sep 17 00:00:00 2001
From 148861fa16f2aaacd518770f337ea54b5182f981 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Fri, 23 Oct 2015 12:25:09 +0300
Date: Tue, 29 Jan 2019 15:03:01 +0100
Subject: [PATCH] Do not use the shell version of python-config that was
introduced in 3.4
@@ -14,25 +14,22 @@ Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/Makefile.pre.in b/Makefile.pre.in
index 236f005..5c4337f 100644
index 2d2e11f..cc19942 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -1348,12 +1348,9 @@ python-config: $(srcdir)/Misc/python-config.in Misc/python-config.sh
@@ -1431,12 +1431,9 @@ python-config: $(srcdir)/Misc/python-config.in Misc/python-config.sh
sed -e "s,@EXENAME@,$(BINDIR)/python$(LDVERSION)$(EXE)," < $(srcdir)/Misc/python-config.in >python-config.py
# Replace makefile compat. variable references with shell script compat. ones; $(VAR) -> ${VAR}
@ # Replace makefile compat. variable references with shell script compat. ones; $(VAR) -> ${VAR}
LC_ALL=C sed -e 's,\$$(\([A-Za-z0-9_]*\)),\$$\{\1\},g' < Misc/python-config.sh >python-config
- # On Darwin, always use the python version of the script, the shell
- # version doesn't use the compiler customizations that are provided
- # in python (_osx_support.py).
- if test `uname -s` = Darwin; then \
- @ # On Darwin, always use the python version of the script, the shell
- @ # version doesn't use the compiler customizations that are provided
- @ # in python (_osx_support.py).
- @if test `uname -s` = Darwin; then \
- cp python-config.py python-config; \
- fi
+ # In OpenEmbedded, always use the python version of the script, the shell
+ # version is broken in multiple ways, and doesn't return correct directories
+ @ # In OpenEmbedded, always use the python version of the script, the shell
+ @ # version is broken in multiple ways, and doesn't return correct directories
+ cp python-config.py python-config
# Install the include files
--
2.11.0

View File

@@ -1,66 +0,0 @@
From bcddbf40c7f1b80336268cdddacc17369fb0ccea Mon Sep 17 00:00:00 2001
From: Libin Dang <libin.dang@windriver.com>
Date: Tue, 11 Apr 2017 14:12:15 +0800
Subject: [PATCH] Issue #21272: Use _sysconfigdata.py to initialize
distutils.sysconfig
Backport upstream commit
https://github.com/python/cpython/commit/409482251b06fe75c4ee56e85ffbb4b23d934159
Upstream-Status: Backport
Signed-off-by: Li Zhou <li.zhou@windriver.com>
---
Lib/distutils/sysconfig.py | 35 ++++-------------------------------
1 file changed, 4 insertions(+), 31 deletions(-)
diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
index 6d5cfd0..9925d24 100644
--- a/Lib/distutils/sysconfig.py
+++ b/Lib/distutils/sysconfig.py
@@ -424,38 +424,11 @@ _config_vars = None
def _init_posix():
"""Initialize the module as appropriate for POSIX systems."""
- g = {}
- # load the installed Makefile:
- try:
- filename = get_makefile_filename()
- parse_makefile(filename, g)
- except OSError as msg:
- my_msg = "invalid Python installation: unable to open %s" % filename
- if hasattr(msg, "strerror"):
- my_msg = my_msg + " (%s)" % msg.strerror
-
- raise DistutilsPlatformError(my_msg)
-
- # load the installed pyconfig.h:
- try:
- filename = get_config_h_filename()
- with open(filename) as file:
- parse_config_h(file, g)
- except OSError as msg:
- my_msg = "invalid Python installation: unable to open %s" % filename
- if hasattr(msg, "strerror"):
- my_msg = my_msg + " (%s)" % msg.strerror
-
- raise DistutilsPlatformError(my_msg)
-
- # On AIX, there are wrong paths to the linker scripts in the Makefile
- # -- these paths are relative to the Python source, but when installed
- # the scripts are in another directory.
- if python_build:
- g['LDSHARED'] = g['BLDSHARED']
-
+ # _sysconfigdata is generated at build time, see the sysconfig module
+ from _sysconfigdata import build_time_vars
global _config_vars
- _config_vars = g
+ _config_vars = {}
+ _config_vars.update(build_time_vars)
def _init_nt():
--
1.8.3.1

View File

@@ -1,272 +0,0 @@
From 758e7463c104f71b810c8588166747eeab6148d7 Mon Sep 17 00:00:00 2001
From: Christian Heimes <christian@python.org>
Date: Sat, 10 Sep 2016 22:43:48 +0200
Subject: [PATCH 1/4] Issue 28043: SSLContext has improved default settings
The options OP_NO_COMPRESSION, OP_CIPHER_SERVER_PREFERENCE, OP_SINGLE_DH_USE, OP_SINGLE_ECDH_USE, OP_NO_SSLv2 (except for PROTOCOL_SSLv2), and OP_NO_SSLv3 (except for PROTOCOL_SSLv3) are set by default. The initial cipher suite list contains only HIGH ciphers, no NULL ciphers and MD5 ciphers (except for PROTOCOL_SSLv2).
Upstream-Status: Backport
[https://github.com/python/cpython/commit/358cfd426ccc0fcd6a7940d306602138e76420ae]
Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
---
Doc/library/ssl.rst | 9 ++++++-
Lib/ssl.py | 30 +++++----------------
Lib/test/test_ssl.py | 62 +++++++++++++++++++++++---------------------
Modules/_ssl.c | 31 ++++++++++++++++++++++
4 files changed, 78 insertions(+), 54 deletions(-)
diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst
index a2f008346b..14f2d68217 100644
--- a/Doc/library/ssl.rst
+++ b/Doc/library/ssl.rst
@@ -1151,7 +1151,14 @@ to speed up repeated connections from the same clients.
.. versionchanged:: 3.5.3
- :data:`PROTOCOL_TLS` is the default value.
+ The context is created with secure default values. The options
+ :data:`OP_NO_COMPRESSION`, :data:`OP_CIPHER_SERVER_PREFERENCE`,
+ :data:`OP_SINGLE_DH_USE`, :data:`OP_SINGLE_ECDH_USE`,
+ :data:`OP_NO_SSLv2` (except for :data:`PROTOCOL_SSLv2`),
+ and :data:`OP_NO_SSLv3` (except for :data:`PROTOCOL_SSLv3`) are
+ set by default. The initial cipher suite list contains only ``HIGH``
+ ciphers, no ``NULL`` ciphers and no ``MD5`` ciphers (except for
+ :data:`PROTOCOL_SSLv2`).
:class:`SSLContext` objects have the following methods and attributes:
diff --git a/Lib/ssl.py b/Lib/ssl.py
index e1913904f3..4d302a78fa 100644
--- a/Lib/ssl.py
+++ b/Lib/ssl.py
@@ -446,32 +446,16 @@ def create_default_context(purpose=Purpose.SERVER_AUTH, *, cafile=None,
if not isinstance(purpose, _ASN1Object):
raise TypeError(purpose)
+ # SSLContext sets OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_COMPRESSION,
+ # OP_CIPHER_SERVER_PREFERENCE, OP_SINGLE_DH_USE and OP_SINGLE_ECDH_USE
+ # by default.
context = SSLContext(PROTOCOL_TLS)
- # SSLv2 considered harmful.
- context.options |= OP_NO_SSLv2
-
- # SSLv3 has problematic security and is only required for really old
- # clients such as IE6 on Windows XP
- context.options |= OP_NO_SSLv3
-
- # disable compression to prevent CRIME attacks (OpenSSL 1.0+)
- context.options |= getattr(_ssl, "OP_NO_COMPRESSION", 0)
-
if purpose == Purpose.SERVER_AUTH:
# verify certs and host name in client mode
context.verify_mode = CERT_REQUIRED
context.check_hostname = True
elif purpose == Purpose.CLIENT_AUTH:
- # Prefer the server's ciphers by default so that we get stronger
- # encryption
- context.options |= getattr(_ssl, "OP_CIPHER_SERVER_PREFERENCE", 0)
-
- # Use single use keys in order to improve forward secrecy
- context.options |= getattr(_ssl, "OP_SINGLE_DH_USE", 0)
- context.options |= getattr(_ssl, "OP_SINGLE_ECDH_USE", 0)
-
- # disallow ciphers with known vulnerabilities
context.set_ciphers(_RESTRICTED_SERVER_CIPHERS)
if cafile or capath or cadata:
@@ -497,12 +481,10 @@ def _create_unverified_context(protocol=PROTOCOL_TLS, *, cert_reqs=None,
if not isinstance(purpose, _ASN1Object):
raise TypeError(purpose)
+ # SSLContext sets OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_COMPRESSION,
+ # OP_CIPHER_SERVER_PREFERENCE, OP_SINGLE_DH_USE and OP_SINGLE_ECDH_USE
+ # by default.
context = SSLContext(protocol)
- # SSLv2 considered harmful.
- context.options |= OP_NO_SSLv2
- # SSLv3 has problematic security and is only required for really old
- # clients such as IE6 on Windows XP
- context.options |= OP_NO_SSLv3
if cert_reqs is not None:
context.verify_mode = cert_reqs
diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
index ffb7314f57..f91af7bd05 100644
--- a/Lib/test/test_ssl.py
+++ b/Lib/test/test_ssl.py
@@ -73,6 +73,12 @@ NULLBYTECERT = data_file("nullbytecert.pem")
DHFILE = data_file("dh1024.pem")
BYTES_DHFILE = os.fsencode(DHFILE)
+# Not defined in all versions of OpenSSL
+OP_NO_COMPRESSION = getattr(ssl, "OP_NO_COMPRESSION", 0)
+OP_SINGLE_DH_USE = getattr(ssl, "OP_SINGLE_DH_USE", 0)
+OP_SINGLE_ECDH_USE = getattr(ssl, "OP_SINGLE_ECDH_USE", 0)
+OP_CIPHER_SERVER_PREFERENCE = getattr(ssl, "OP_CIPHER_SERVER_PREFERENCE", 0)
+
def handle_error(prefix):
exc_format = ' '.join(traceback.format_exception(*sys.exc_info()))
@@ -839,8 +845,9 @@ class ContextTests(unittest.TestCase):
ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
# OP_ALL | OP_NO_SSLv2 | OP_NO_SSLv3 is the default value
default = (ssl.OP_ALL | ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3)
- if not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (1, 1, 0):
- default |= ssl.OP_NO_COMPRESSION
+ # SSLContext also enables these by default
+ default |= (OP_NO_COMPRESSION | OP_CIPHER_SERVER_PREFERENCE |
+ OP_SINGLE_DH_USE | OP_SINGLE_ECDH_USE)
self.assertEqual(default, ctx.options)
ctx.options |= ssl.OP_NO_TLSv1
self.assertEqual(default | ssl.OP_NO_TLSv1, ctx.options)
@@ -1205,16 +1212,29 @@ class ContextTests(unittest.TestCase):
stats["x509"] += 1
self.assertEqual(ctx.cert_store_stats(), stats)
+ def _assert_context_options(self, ctx):
+ self.assertEqual(ctx.options & ssl.OP_NO_SSLv2, ssl.OP_NO_SSLv2)
+ if OP_NO_COMPRESSION != 0:
+ self.assertEqual(ctx.options & OP_NO_COMPRESSION,
+ OP_NO_COMPRESSION)
+ if OP_SINGLE_DH_USE != 0:
+ self.assertEqual(ctx.options & OP_SINGLE_DH_USE,
+ OP_SINGLE_DH_USE)
+ if OP_SINGLE_ECDH_USE != 0:
+ self.assertEqual(ctx.options & OP_SINGLE_ECDH_USE,
+ OP_SINGLE_ECDH_USE)
+ if OP_CIPHER_SERVER_PREFERENCE != 0:
+ self.assertEqual(ctx.options & OP_CIPHER_SERVER_PREFERENCE,
+ OP_CIPHER_SERVER_PREFERENCE)
+
def test_create_default_context(self):
ctx = ssl.create_default_context()
+
self.assertEqual(ctx.protocol, ssl.PROTOCOL_SSLv23)
self.assertEqual(ctx.verify_mode, ssl.CERT_REQUIRED)
self.assertTrue(ctx.check_hostname)
- self.assertEqual(ctx.options & ssl.OP_NO_SSLv2, ssl.OP_NO_SSLv2)
- self.assertEqual(
- ctx.options & getattr(ssl, "OP_NO_COMPRESSION", 0),
- getattr(ssl, "OP_NO_COMPRESSION", 0),
- )
+ self._assert_context_options(ctx)
+
with open(SIGNING_CA) as f:
cadata = f.read()
@@ -1222,40 +1242,24 @@ class ContextTests(unittest.TestCase):
cadata=cadata)
self.assertEqual(ctx.protocol, ssl.PROTOCOL_SSLv23)
self.assertEqual(ctx.verify_mode, ssl.CERT_REQUIRED)
- self.assertEqual(ctx.options & ssl.OP_NO_SSLv2, ssl.OP_NO_SSLv2)
- self.assertEqual(
- ctx.options & getattr(ssl, "OP_NO_COMPRESSION", 0),
- getattr(ssl, "OP_NO_COMPRESSION", 0),
- )
+ self._assert_context_options(ctx)
ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
self.assertEqual(ctx.protocol, ssl.PROTOCOL_SSLv23)
self.assertEqual(ctx.verify_mode, ssl.CERT_NONE)
- self.assertEqual(ctx.options & ssl.OP_NO_SSLv2, ssl.OP_NO_SSLv2)
- self.assertEqual(
- ctx.options & getattr(ssl, "OP_NO_COMPRESSION", 0),
- getattr(ssl, "OP_NO_COMPRESSION", 0),
- )
- self.assertEqual(
- ctx.options & getattr(ssl, "OP_SINGLE_DH_USE", 0),
- getattr(ssl, "OP_SINGLE_DH_USE", 0),
- )
- self.assertEqual(
- ctx.options & getattr(ssl, "OP_SINGLE_ECDH_USE", 0),
- getattr(ssl, "OP_SINGLE_ECDH_USE", 0),
- )
+ self._assert_context_options(ctx)
def test__create_stdlib_context(self):
ctx = ssl._create_stdlib_context()
self.assertEqual(ctx.protocol, ssl.PROTOCOL_SSLv23)
self.assertEqual(ctx.verify_mode, ssl.CERT_NONE)
self.assertFalse(ctx.check_hostname)
- self.assertEqual(ctx.options & ssl.OP_NO_SSLv2, ssl.OP_NO_SSLv2)
+ self._assert_context_options(ctx)
ctx = ssl._create_stdlib_context(ssl.PROTOCOL_TLSv1)
self.assertEqual(ctx.protocol, ssl.PROTOCOL_TLSv1)
self.assertEqual(ctx.verify_mode, ssl.CERT_NONE)
- self.assertEqual(ctx.options & ssl.OP_NO_SSLv2, ssl.OP_NO_SSLv2)
+ self._assert_context_options(ctx)
ctx = ssl._create_stdlib_context(ssl.PROTOCOL_TLSv1,
cert_reqs=ssl.CERT_REQUIRED,
@@ -1263,12 +1267,12 @@ class ContextTests(unittest.TestCase):
self.assertEqual(ctx.protocol, ssl.PROTOCOL_TLSv1)
self.assertEqual(ctx.verify_mode, ssl.CERT_REQUIRED)
self.assertTrue(ctx.check_hostname)
- self.assertEqual(ctx.options & ssl.OP_NO_SSLv2, ssl.OP_NO_SSLv2)
+ self._assert_context_options(ctx)
ctx = ssl._create_stdlib_context(purpose=ssl.Purpose.CLIENT_AUTH)
self.assertEqual(ctx.protocol, ssl.PROTOCOL_SSLv23)
self.assertEqual(ctx.verify_mode, ssl.CERT_NONE)
- self.assertEqual(ctx.options & ssl.OP_NO_SSLv2, ssl.OP_NO_SSLv2)
+ self._assert_context_options(ctx)
def test_check_hostname(self):
ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
diff --git a/Modules/_ssl.c b/Modules/_ssl.c
index 86482677ae..0d5c121d2c 100644
--- a/Modules/_ssl.c
+++ b/Modules/_ssl.c
@@ -2330,6 +2330,7 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version)
PySSLContext *self;
long options;
SSL_CTX *ctx = NULL;
+ int result;
#if defined(SSL_MODE_RELEASE_BUFFERS)
unsigned long libver;
#endif
@@ -2393,8 +2394,38 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version)
options |= SSL_OP_NO_SSLv2;
if (proto_version != PY_SSL_VERSION_SSL3)
options |= SSL_OP_NO_SSLv3;
+ /* Minimal security flags for server and client side context.
+ * Client sockets ignore server-side parameters. */
+#ifdef SSL_OP_NO_COMPRESSION
+ options |= SSL_OP_NO_COMPRESSION;
+#endif
+#ifdef SSL_OP_CIPHER_SERVER_PREFERENCE
+ options |= SSL_OP_CIPHER_SERVER_PREFERENCE;
+#endif
+#ifdef SSL_OP_SINGLE_DH_USE
+ options |= SSL_OP_SINGLE_DH_USE;
+#endif
+#ifdef SSL_OP_SINGLE_ECDH_USE
+ options |= SSL_OP_SINGLE_ECDH_USE;
+#endif
SSL_CTX_set_options(self->ctx, options);
+ /* A bare minimum cipher list without completly broken cipher suites.
+ * It's far from perfect but gives users a better head start. */
+ if (proto_version != PY_SSL_VERSION_SSL2) {
+ result = SSL_CTX_set_cipher_list(ctx, "HIGH:!aNULL:!eNULL:!MD5");
+ } else {
+ /* SSLv2 needs MD5 */
+ result = SSL_CTX_set_cipher_list(ctx, "HIGH:!aNULL:!eNULL");
+ }
+ if (result == 0) {
+ Py_DECREF(self);
+ ERR_clear_error();
+ PyErr_SetString(PySSLErrorObject,
+ "No cipher can be selected.");
+ return NULL;
+ }
+
#if defined(SSL_MODE_RELEASE_BUFFERS)
/* Set SSL_MODE_RELEASE_BUFFERS. This potentially greatly reduces memory
usage for no cost at all. However, don't do this for OpenSSL versions
--
2.17.1

View File

@@ -0,0 +1,25 @@
From cf6a9100902484e4d028ee88742dd2487b014a98 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Wed, 30 Jan 2019 12:41:04 +0100
Subject: [PATCH] Makefile.pre: use qemu wrapper when gathering profile data
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
---
Makefile.pre.in | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/Makefile.pre.in b/Makefile.pre.in
index a3a02a7..d5503dd 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -507,8 +507,7 @@ build_all_generate_profile:
$(MAKE) @DEF_MAKE_RULE@ CFLAGS_NODIST="$(CFLAGS_NODIST) $(PGO_PROF_GEN_FLAG)" LDFLAGS_NODIST="$(LDFLAGS_NODIST) $(PGO_PROF_GEN_FLAG)" LIBS="$(LIBS)"
run_profile_task:
- @ # FIXME: can't run for a cross build
- $(LLVM_PROF_FILE) $(RUNSHARED) ./$(BUILDPYTHON) $(PROFILE_TASK) || true
+ ./pgo-wrapper ./python -m test.regrtest --pgo test_grammar test_opcodes test_dict test_builtin test_exceptions test_types test_support || true
build_all_merge_profile:
$(LLVM_PROF_MERGER)

View File

@@ -0,0 +1,42 @@
From 4865615a2bc2b78c739e4c33f536712c7f9af061 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <alex.kanavin@gmail.com>
Date: Thu, 31 Jan 2019 16:46:30 +0100
Subject: [PATCH] distutils/sysconfig: append
STAGING_LIBDIR/python-sysconfigdata to sys.path
So that target configuration can be used when running native python
Upstream-Status: Inappropriate [oe-core specific]
Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
---
Lib/distutils/sysconfig.py | 2 ++
Lib/sysconfig.py | 2 ++
2 files changed, 4 insertions(+)
diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
index e07a6c8..6b8c129 100644
--- a/Lib/distutils/sysconfig.py
+++ b/Lib/distutils/sysconfig.py
@@ -421,6 +421,8 @@ def _init_posix():
platform=sys.platform,
multiarch=getattr(sys.implementation, '_multiarch', ''),
))
+ if 'STAGING_LIBDIR' in os.environ:
+ sys.path.append(os.environ['STAGING_LIBDIR']+'/python-sysconfigdata')
_temp = __import__(name, globals(), locals(), ['build_time_vars'], 0)
build_time_vars = _temp.build_time_vars
global _config_vars
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
index 9ee4d31..e586abd 100644
--- a/Lib/sysconfig.py
+++ b/Lib/sysconfig.py
@@ -412,6 +412,8 @@ def _init_posix(vars):
"""Initialize the module as appropriate for POSIX systems."""
# _sysconfigdata is generated at build time, see _generate_posix_vars()
name = _get_sysconfigdata_name()
+ if 'STAGING_LIBDIR' in os.environ:
+ sys.path.append(os.environ['STAGING_LIBDIR']+'/python-sysconfigdata')
_temp = __import__(name, globals(), locals(), ['build_time_vars'], 0)
build_time_vars = _temp.build_time_vars
vars.update(build_time_vars)

View File

@@ -1,37 +0,0 @@
From 2f5a4c708d90fa8db21f446ae879cff79387448d Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Mon, 20 May 2013 21:03:16 -0700
Subject: [PATCH] h2py: Fix issue 13032 where it fails with UnicodeDecodeError
use utf-8 to open the files
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Upstream-Status: Pending
---
Tools/scripts/h2py.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Tools/scripts/h2py.py b/Tools/scripts/h2py.py
index 4f871d9..a53fbe0 100755
--- a/Tools/scripts/h2py.py
+++ b/Tools/scripts/h2py.py
@@ -69,13 +69,13 @@ def main():
sys.stdout.write('# Generated by h2py from stdin\n')
process(sys.stdin, sys.stdout)
else:
- fp = open(filename, 'r')
+ fp = open(filename, 'r', encoding='utf-8')
outfile = os.path.basename(filename)
i = outfile.rfind('.')
if i > 0: outfile = outfile[:i]
modname = outfile.upper()
outfile = modname + '.py'
- outfp = open(outfile, 'w')
+ outfp = open(outfile, 'w', encoding='utf-8')
outfp.write('# Generated by h2py from %s\n' % filename)
filedict = {}
for dir in searchdirs:
--
1.8.1.2

View File

@@ -1,4 +1,4 @@
From 564a5cc634028970dc2f9d8ecc0e464a4fb1dcb6 Mon Sep 17 00:00:00 2001
From 2645317fef09afe31b01bb2c1d4fe5b9afdbb11a Mon Sep 17 00:00:00 2001
From: Changqing Li <changqing.li@windriver.com>
Date: Mon, 22 Oct 2018 15:19:51 +0800
Subject: [PATCH] python3: use cc_basename to replace CC for checking compiler
@@ -22,11 +22,11 @@ patch originally from Li Zhou, I just rework it to new version
Signed-off-by: Changqing Li <changqing.li@windriver.com>
---
configure.ac | 23 ++++++++++++-----------
1 file changed, 12 insertions(+), 11 deletions(-)
configure.ac | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/configure.ac b/configure.ac
index 95c98d1..1b9589e 100644
index a7de901..4a3681f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -54,6 +54,7 @@ AC_CONFIG_HEADER(pyconfig.h)
@@ -37,7 +37,7 @@ index 95c98d1..1b9589e 100644
# pybuilddir.txt will be created by --generate-posix-vars in the Makefile
rm -f pybuilddir.txt
@@ -716,7 +717,7 @@ AC_MSG_RESULT($with_cxx_main)
@@ -695,7 +696,7 @@ AC_MSG_RESULT($with_cxx_main)
preset_cxx="$CXX"
if test -z "$CXX"
then
@@ -46,15 +46,7 @@ index 95c98d1..1b9589e 100644
gcc) AC_PATH_TOOL(CXX, [g++], [g++], [notfound]) ;;
cc) AC_PATH_TOOL(CXX, [c++], [c++], [notfound]) ;;
clang|*/clang) AC_PATH_TOOL(CXX, [clang++], [clang++], [notfound]) ;;
@@ -978,14 +979,14 @@ rmdir CaseSensitiveTestDir
case $MACHDEP in
bsdos*)
- case $CC in
+ case $cc_basename in
gcc) CC="$CC -D_HAVE_BSDI";;
esac;;
esac
@@ -979,7 +980,7 @@ rmdir CaseSensitiveTestDir
case $ac_sys_system in
hp*|HP*)
@@ -63,16 +55,16 @@ index 95c98d1..1b9589e 100644
cc|*/cc) CC="$CC -Ae";;
esac;;
esac
@@ -1310,7 +1311,7 @@ else
@@ -1336,7 +1337,7 @@ else
fi],
[AC_MSG_RESULT(no)])
if test "$Py_LTO" = 'true' ; then
- case $CC in
+ case $cc_basename in
*clang*)
# Any changes made here should be reflected in the GCC+Darwin case below
LTOFLAGS="-flto"
@@ -1374,7 +1375,7 @@ then
AC_SUBST(LLVM_AR)
AC_PATH_TARGET_TOOL(LLVM_AR, llvm-ar, '', ${llvm_path})
@@ -1426,7 +1427,7 @@ then
fi
fi
LLVM_PROF_ERR=no
@@ -81,7 +73,7 @@ index 95c98d1..1b9589e 100644
*clang*)
# Any changes made here should be reflected in the GCC+Darwin case below
PGO_PROF_GEN_FLAG="-fprofile-instr-generate"
@@ -1451,7 +1452,7 @@ then
@@ -1500,7 +1501,7 @@ then
WRAP="-fwrapv"
fi
@@ -90,7 +82,7 @@ index 95c98d1..1b9589e 100644
*clang*)
cc_is_clang=1
;;
@@ -1553,7 +1554,7 @@ yes)
@@ -1623,7 +1624,7 @@ yes)
# ICC doesn't recognize the option, but only emits a warning
## XXX does it emit an unused result warning and can it be disabled?
@@ -99,7 +91,7 @@ index 95c98d1..1b9589e 100644
*icc*)
ac_cv_disable_unused_result_warning=no
;;
@@ -1808,7 +1809,7 @@ yes)
@@ -1965,7 +1966,7 @@ yes)
esac
# ICC needs -fp-model strict or floats behave badly
@@ -108,16 +100,7 @@ index 95c98d1..1b9589e 100644
*icc*)
CFLAGS_NODIST="$CFLAGS_NODIST -fp-model strict"
;;
@@ -2574,7 +2575,7 @@ then
then CCSHARED="-fPIC"
else CCSHARED="-Kpic -belf"
fi;;
- IRIX*/6*) case $CC in
+ IRIX*/6*) case $cc_basename in
*gcc*) CCSHARED="-shared";;
*) CCSHARED="";;
esac;;
@@ -2615,7 +2616,7 @@ then
@@ -2727,7 +2728,7 @@ then
then
LINKFORSHARED="-Wl,--export-dynamic"
fi;;
@@ -126,7 +109,7 @@ index 95c98d1..1b9589e 100644
*gcc*)
if $CC -Xlinker --help 2>&1 | grep export-dynamic >/dev/null
then
@@ -5187,7 +5188,7 @@ if test "$have_gcc_asm_for_x87" = yes; then
@@ -5429,7 +5430,7 @@ if test "$have_gcc_asm_for_x87" = yes; then
# Some versions of gcc miscompile inline asm:
# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46491
# http://gcc.gnu.org/ml/gcc/2010-11/msg00366.html
@@ -135,6 +118,3 @@ index 95c98d1..1b9589e 100644
*gcc*)
AC_MSG_CHECKING(for gcc ipa-pure-const bug)
saved_cflags="$CFLAGS"
--
2.7.4

View File

@@ -1,3 +1,8 @@
From fa96a7fd19e17b9c6b4dd01c3c3774fb382dddc6 Mon Sep 17 00:00:00 2001
From: Ross Burton <ross.burton@intel.com>
Date: Wed, 5 Sep 2018 11:45:52 +0100
Subject: [PATCH] Don't do runtime test to get float byte order
Python uses AC_RUN_IFELSE to determine the byte order for floats and doubles,
and falls back onto "I don't know" if it can't run code. This results in
crippled floating point numbers in Python, and the regression tests fail.
@@ -8,32 +13,17 @@ binary to identify the format.
Upstream-Status: Submitted [https://bugs.python.org/issue34585]
Signed-off-by: Ross Burton <ross.burton@intel.com>
From 50df2a4c3a65ed06322be7c26d42b06ce81730c1 Mon Sep 17 00:00:00 2001
From: Ross Burton <ross.burton@intel.com>
Date: Wed, 5 Sep 2018 11:45:52 +0100
Subject: [PATCH] Don't do runtime test to get float byte order
---
configure.ac | 74 +++++------------------------------
m4/ax_c_float_words_bigendian.m4 | 83 ++++++++++++++++++++++++++++++++++++++++
2 files changed, 92 insertions(+), 65 deletions(-)
configure.ac | 72 +++------------------------
m4/ax_c_float_words_bigendian.m4 | 83 ++++++++++++++++++++++++++++++++
2 files changed, 90 insertions(+), 65 deletions(-)
create mode 100644 m4/ax_c_float_words_bigendian.m4
diff --git a/configure.ac b/configure.ac
index c9b755f0f4..1215969871 100644
index 4a3681f..4ab19a6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9,6 +9,8 @@ AC_PREREQ(2.65)
AC_INIT(python, PYTHON_VERSION, https://bugs.python.org/)
+AC_CONFIG_MACRO_DIR(m4)
+
AC_SUBST(BASECPPFLAGS)
if test "$srcdir" != . -a "$srcdir" != "$(pwd)"; then
# If we're building out-of-tree, we need to make sure the following
@@ -4128,77 +4130,19 @@ fi
@@ -4328,77 +4328,19 @@ fi
# * Check for various properties of floating point *
# **************************************************
@@ -120,7 +110,7 @@ index c9b755f0f4..1215969871 100644
# The short float repr introduced in Python 3.1 requires the
diff --git a/m4/ax_c_float_words_bigendian.m4 b/m4/ax_c_float_words_bigendian.m4
new file mode 100644
index 0000000000..216b90d803
index 0000000..216b90d
--- /dev/null
+++ b/m4/ax_c_float_words_bigendian.m4
@@ -0,0 +1,83 @@
@@ -207,6 +197,3 @@ index 0000000000..216b90d803
+esac
+
+])# AX_C_FLOAT_WORDS_BIGENDIAN
--
2.11.0

View File

@@ -1,40 +0,0 @@
From 98586d6dc598e40b8b821b0dde57599e188a7ca4 Mon Sep 17 00:00:00 2001
From: Anuj Mittal <anuj.mittal@intel.com>
Date: Tue, 7 Aug 2018 16:43:17 +0800
Subject: [PATCH 2/2] Makefile: add target to split profile generation
We don't want to have profile task invoked from here and want to use
qemu-user instead. Split the profile-opt task so qemu can be invoked
once binaries have been built with instrumentation and then we can go
ahead and build again using the profile data generated.
Upstream-Status: Inappropriate [OE-specific]
Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
---
Makefile.pre.in | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/Makefile.pre.in b/Makefile.pre.in
index 84bc3ff..017a2c4 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -469,13 +469,12 @@ profile-opt:
$(MAKE) profile-removal
$(MAKE) build_all_generate_profile
$(MAKE) profile-removal
- @echo "Running code to generate profile data (this can take a while):"
- $(MAKE) run_profile_task
- $(MAKE) build_all_merge_profile
+
+clean_and_use_profile:
@echo "Rebuilding with profile guided optimizations:"
$(MAKE) clean
$(MAKE) build_all_use_profile
$(MAKE) profile-removal
build_all_generate_profile:
$(MAKE) @DEF_MAKE_RULE@ CFLAGS_NODIST="$(CFLAGS) $(EXTRA_CFLAGS) $(PGO_PROF_GEN_FLAG) @LTOFLAGS@" LDFLAGS="$(LDFLAGS) $(PGO_PROF_GEN_FLAG) @LTOFLAGS@" LIBS="$(LIBS)"
--
2.17.1

View File

@@ -1,227 +0,0 @@
From e950ea68dab006944af194c9910b8f2341d1437d Mon Sep 17 00:00:00 2001
From: Christian Heimes <christian@python.org>
Date: Thu, 7 Sep 2017 20:23:52 -0700
Subject: [PATCH] bpo-29136: Add TLS 1.3 cipher suites and OP_NO_TLSv1_3
(GH-1363) (#3444)
* bpo-29136: Add TLS 1.3 support
TLS 1.3 introduces a new, distinct set of cipher suites. The TLS 1.3
cipher suites don't overlap with cipher suites from TLS 1.2 and earlier.
Since Python sets its own set of permitted ciphers, TLS 1.3 handshake
will fail as soon as OpenSSL 1.1.1 is released. Let's enable the common
AES-GCM and ChaCha20 suites.
Additionally the flag OP_NO_TLSv1_3 is added. It defaults to 0 (no op) with
OpenSSL prior to 1.1.1. This allows applications to opt-out from TLS 1.3
now.
Signed-off-by: Christian Heimes <christian@python.org>.
(cherry picked from commit cb5b68abdeb1b1d56c581d5b4d647018703d61e3)
Upstream-Status: Backport
[https://github.com/python/cpython/commit/cb5b68abdeb1b1d56c581d5b4d647018703d61e3]
Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
---
Doc/library/ssl.rst | 21 ++++++++++++++
Lib/ssl.py | 7 +++++
Lib/test/test_ssl.py | 29 ++++++++++++++++++-
.../2017-09-04-16-39-49.bpo-29136.vSn1oR.rst | 1 +
Modules/_ssl.c | 13 +++++++++
5 files changed, 70 insertions(+), 1 deletion(-)
create mode 100644 Misc/NEWS.d/next/Library/2017-09-04-16-39-49.bpo-29136.vSn1oR.rst
diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst
index 14f2d68217..29c5e94cf6 100644
--- a/Doc/library/ssl.rst
+++ b/Doc/library/ssl.rst
@@ -285,6 +285,11 @@ purposes.
3DES was dropped from the default cipher string.
+ .. versionchanged:: 3.7
+
+ TLS 1.3 cipher suites TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384,
+ and TLS_CHACHA20_POLY1305_SHA256 were added to the default cipher string.
+
Random generation
^^^^^^^^^^^^^^^^^
@@ -719,6 +724,16 @@ Constants
.. versionadded:: 3.4
+.. data:: OP_NO_TLSv1_3
+
+ Prevents a TLSv1.3 connection. This option is only applicable in conjunction
+ with :const:`PROTOCOL_TLS`. It prevents the peers from choosing TLSv1.3 as
+ the protocol version. TLS 1.3 is available with OpenSSL 1.1.1 or later.
+ When Python has been compiled against an older version of OpenSSL, the
+ flag defaults to *0*.
+
+ .. versionadded:: 3.7
+
.. data:: OP_CIPHER_SERVER_PREFERENCE
Use the server's cipher ordering preference, rather than the client's.
@@ -783,6 +798,12 @@ Constants
.. versionadded:: 3.3
+.. data:: HAS_TLSv1_3
+
+ Whether the OpenSSL library has built-in support for the TLS 1.3 protocol.
+
+ .. versionadded:: 3.7
+
.. data:: CHANNEL_BINDING_TYPES
List of supported TLS channel binding types. Strings in this list
diff --git a/Lib/ssl.py b/Lib/ssl.py
index 4d302a78fa..f233e72e1f 100644
--- a/Lib/ssl.py
+++ b/Lib/ssl.py
@@ -122,6 +122,7 @@ _import_symbols('OP_')
_import_symbols('ALERT_DESCRIPTION_')
_import_symbols('SSL_ERROR_')
_import_symbols('VERIFY_')
+from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN, HAS_ALPN, HAS_TLSv1_3
from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN, HAS_ALPN
@@ -162,6 +163,7 @@ else:
# (OpenSSL's default setting is 'DEFAULT:!aNULL:!eNULL')
# Enable a better set of ciphers by default
# This list has been explicitly chosen to:
+# * TLS 1.3 ChaCha20 and AES-GCM cipher suites
# * Prefer cipher suites that offer perfect forward secrecy (DHE/ECDHE)
# * Prefer ECDHE over DHE for better performance
# * Prefer AEAD over CBC for better performance and security
@@ -173,6 +175,8 @@ else:
# * Disable NULL authentication, NULL encryption, 3DES and MD5 MACs
# for security reasons
_DEFAULT_CIPHERS = (
+ 'TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:'
+ 'TLS13-AES-128-GCM-SHA256:'
'ECDH+AESGCM:ECDH+CHACHA20:DH+AESGCM:DH+CHACHA20:ECDH+AES256:DH+AES256:'
'ECDH+AES128:DH+AES:ECDH+HIGH:DH+HIGH:RSA+AESGCM:RSA+AES:RSA+HIGH:'
'!aNULL:!eNULL:!MD5:!3DES'
@@ -180,6 +184,7 @@ _DEFAULT_CIPHERS = (
# Restricted and more secure ciphers for the server side
# This list has been explicitly chosen to:
+# * TLS 1.3 ChaCha20 and AES-GCM cipher suites
# * Prefer cipher suites that offer perfect forward secrecy (DHE/ECDHE)
# * Prefer ECDHE over DHE for better performance
# * Prefer AEAD over CBC for better performance and security
@@ -190,6 +195,8 @@ _DEFAULT_CIPHERS = (
# * Disable NULL authentication, NULL encryption, MD5 MACs, DSS, RC4, and
# 3DES for security reasons
_RESTRICTED_SERVER_CIPHERS = (
+ 'TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:'
+ 'TLS13-AES-128-GCM-SHA256:'
'ECDH+AESGCM:ECDH+CHACHA20:DH+AESGCM:DH+CHACHA20:ECDH+AES256:DH+AES256:'
'ECDH+AES128:DH+AES:ECDH+HIGH:DH+HIGH:RSA+AESGCM:RSA+AES:RSA+HIGH:'
'!aNULL:!eNULL:!MD5:!DSS:!RC4:!3DES'
diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
index f91af7bd05..1acc12ec2d 100644
--- a/Lib/test/test_ssl.py
+++ b/Lib/test/test_ssl.py
@@ -150,6 +150,13 @@ class BasicSocketTests(unittest.TestCase):
ssl.OP_NO_COMPRESSION
self.assertIn(ssl.HAS_SNI, {True, False})
self.assertIn(ssl.HAS_ECDH, {True, False})
+ ssl.OP_NO_SSLv2
+ ssl.OP_NO_SSLv3
+ ssl.OP_NO_TLSv1
+ ssl.OP_NO_TLSv1_3
+ if ssl.OPENSSL_VERSION_INFO >= (1, 0, 1):
+ ssl.OP_NO_TLSv1_1
+ ssl.OP_NO_TLSv1_2
def test_str_for_enums(self):
# Make sure that the PROTOCOL_* constants have enum-like string
@@ -3028,12 +3035,33 @@ else:
self.assertEqual(s.version(), 'TLSv1')
self.assertIs(s.version(), None)
+ @unittest.skipUnless(ssl.HAS_TLSv1_3,
+ "test requires TLSv1.3 enabled OpenSSL")
+ def test_tls1_3(self):
+ context = ssl.SSLContext(ssl.PROTOCOL_TLS)
+ context.load_cert_chain(CERTFILE)
+ # disable all but TLS 1.3
+ context.options |= (
+ ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1 | ssl.OP_NO_TLSv1_2
+ )
+ with ThreadedEchoServer(context=context) as server:
+ with context.wrap_socket(socket.socket()) as s:
+ s.connect((HOST, server.port))
+ self.assertIn(s.cipher()[0], [
+ 'TLS13-AES-256-GCM-SHA384',
+ 'TLS13-CHACHA20-POLY1305-SHA256',
+ 'TLS13-AES-128-GCM-SHA256',
+ ])
+
@unittest.skipUnless(ssl.HAS_ECDH, "test requires ECDH-enabled OpenSSL")
def test_default_ecdh_curve(self):
# Issue #21015: elliptic curve-based Diffie Hellman key exchange
# should be enabled by default on SSL contexts.
context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
context.load_cert_chain(CERTFILE)
+ # TLSv1.3 defaults to PFS key agreement and no longer has KEA in
+ # cipher name.
+ context.options |= ssl.OP_NO_TLSv1_3
# Prior to OpenSSL 1.0.0, ECDH ciphers have to be enabled
# explicitly using the 'ECCdraft' cipher alias. Otherwise,
# our default cipher list should prefer ECDH-based ciphers
@@ -3394,7 +3422,6 @@ else:
s.sendfile(file)
self.assertEqual(s.recv(1024), TEST_DATA)
-
def test_main(verbose=False):
if support.verbose:
import warnings
diff --git a/Misc/NEWS.d/next/Library/2017-09-04-16-39-49.bpo-29136.vSn1oR.rst b/Misc/NEWS.d/next/Library/2017-09-04-16-39-49.bpo-29136.vSn1oR.rst
new file mode 100644
index 0000000000..e76997ef83
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2017-09-04-16-39-49.bpo-29136.vSn1oR.rst
@@ -0,0 +1 @@
+Add TLS 1.3 cipher suites and OP_NO_TLSv1_3.
diff --git a/Modules/_ssl.c b/Modules/_ssl.c
index 0d5c121d2c..c71d89607c 100644
--- a/Modules/_ssl.c
+++ b/Modules/_ssl.c
@@ -4842,6 +4842,11 @@ PyInit__ssl(void)
#if HAVE_TLSv1_2
PyModule_AddIntConstant(m, "OP_NO_TLSv1_1", SSL_OP_NO_TLSv1_1);
PyModule_AddIntConstant(m, "OP_NO_TLSv1_2", SSL_OP_NO_TLSv1_2);
+#endif
+#ifdef SSL_OP_NO_TLSv1_3
+ PyModule_AddIntConstant(m, "OP_NO_TLSv1_3", SSL_OP_NO_TLSv1_3);
+#else
+ PyModule_AddIntConstant(m, "OP_NO_TLSv1_3", 0);
#endif
PyModule_AddIntConstant(m, "OP_CIPHER_SERVER_PREFERENCE",
SSL_OP_CIPHER_SERVER_PREFERENCE);
@@ -4890,6 +4895,14 @@ PyInit__ssl(void)
Py_INCREF(r);
PyModule_AddObject(m, "HAS_ALPN", r);
+#if defined(TLS1_3_VERSION) && !defined(OPENSSL_NO_TLS1_3)
+ r = Py_True;
+#else
+ r = Py_False;
+#endif
+ Py_INCREF(r);
+ PyModule_AddObject(m, "HAS_TLSv1_3", r);
+
/* Mappings for error codes */
err_codes_to_names = PyDict_New();
err_names_to_codes = PyDict_New();
--
2.17.1

View File

@@ -1,173 +0,0 @@
From 170a614904febd14ff6cfd7a75c9bccc114b3948 Mon Sep 17 00:00:00 2001
From: Christian Heimes <christian@python.org>
Date: Tue, 14 Aug 2018 16:56:32 +0200
Subject: [PATCH] bpo-32947: Fixes for TLS 1.3 and OpenSSL 1.1.1 (GH-8761)
Backport of TLS 1.3 related fixes from 3.7.
Misc fixes and workarounds for compatibility with OpenSSL 1.1.1 from git
master and TLS 1.3 support. With OpenSSL 1.1.1, Python negotiates TLS 1.3 by
default. Some test cases only apply to TLS 1.2.
OpenSSL 1.1.1 has added a new option OP_ENABLE_MIDDLEBOX_COMPAT for TLS
1.3. The feature is enabled by default for maximum compatibility with
broken middle boxes. Users should be able to disable the hack and CPython's test suite needs
it to verify default options
Signed-off-by: Christian Heimes <christian@python.org>
Upstream-Status: Backport
[https://github.com/python/cpython/commit/2a4ee8aa01d61b6a9c8e9c65c211e61bdb471826]
Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
---
Doc/library/ssl.rst | 9 ++++++
Lib/test/test_asyncio/test_events.py | 6 +++-
Lib/test/test_ssl.py | 29 +++++++++++++++----
.../2018-08-14-08-57-01.bpo-32947.mqStVW.rst | 2 ++
Modules/_ssl.c | 4 +++
5 files changed, 44 insertions(+), 6 deletions(-)
create mode 100644 Misc/NEWS.d/next/Library/2018-08-14-08-57-01.bpo-32947.mqStVW.rst
diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst
index 29c5e94cf6..f63a3deec5 100644
--- a/Doc/library/ssl.rst
+++ b/Doc/library/ssl.rst
@@ -757,6 +757,15 @@ Constants
.. versionadded:: 3.3
+.. data:: OP_ENABLE_MIDDLEBOX_COMPAT
+
+ Send dummy Change Cipher Spec (CCS) messages in TLS 1.3 handshake to make
+ a TLS 1.3 connection look more like a TLS 1.2 connection.
+
+ This option is only available with OpenSSL 1.1.1 and later.
+
+ .. versionadded:: 3.6.7
+
.. data:: OP_NO_COMPRESSION
Disable compression on the SSL channel. This is useful if the application
diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py
index 492a84a231..6f208474b9 100644
--- a/Lib/test/test_asyncio/test_events.py
+++ b/Lib/test/test_asyncio/test_events.py
@@ -1169,7 +1169,11 @@ class EventLoopTestsMixin:
self.loop.run_until_complete(f_c)
# close connection
- proto.transport.close()
+ # transport may be None with TLS 1.3, because connection is
+ # interrupted, server is unable to send session tickets, and
+ # transport is closed.
+ if proto.transport is not None:
+ proto.transport.close()
server.close()
def test_legacy_create_server_ssl_match_failed(self):
diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
index 1acc12ec2d..a2e1d32a62 100644
--- a/Lib/test/test_ssl.py
+++ b/Lib/test/test_ssl.py
@@ -78,6 +78,7 @@ OP_NO_COMPRESSION = getattr(ssl, "OP_NO_COMPRESSION", 0)
OP_SINGLE_DH_USE = getattr(ssl, "OP_SINGLE_DH_USE", 0)
OP_SINGLE_ECDH_USE = getattr(ssl, "OP_SINGLE_ECDH_USE", 0)
OP_CIPHER_SERVER_PREFERENCE = getattr(ssl, "OP_CIPHER_SERVER_PREFERENCE", 0)
+OP_ENABLE_MIDDLEBOX_COMPAT = getattr(ssl, "OP_ENABLE_MIDDLEBOX_COMPAT", 0)
def handle_error(prefix):
@@ -155,8 +156,8 @@ class BasicSocketTests(unittest.TestCase):
ssl.OP_NO_TLSv1
ssl.OP_NO_TLSv1_3
if ssl.OPENSSL_VERSION_INFO >= (1, 0, 1):
- ssl.OP_NO_TLSv1_1
- ssl.OP_NO_TLSv1_2
+ ssl.OP_NO_TLSv1_1
+ ssl.OP_NO_TLSv1_2
def test_str_for_enums(self):
# Make sure that the PROTOCOL_* constants have enum-like string
@@ -854,7 +855,8 @@ class ContextTests(unittest.TestCase):
default = (ssl.OP_ALL | ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3)
# SSLContext also enables these by default
default |= (OP_NO_COMPRESSION | OP_CIPHER_SERVER_PREFERENCE |
- OP_SINGLE_DH_USE | OP_SINGLE_ECDH_USE)
+ OP_SINGLE_DH_USE | OP_SINGLE_ECDH_USE |
+ OP_ENABLE_MIDDLEBOX_COMPAT)
self.assertEqual(default, ctx.options)
ctx.options |= ssl.OP_NO_TLSv1
self.assertEqual(default | ssl.OP_NO_TLSv1, ctx.options)
@@ -1860,11 +1862,26 @@ else:
self.sock, server_side=True)
self.server.selected_npn_protocols.append(self.sslconn.selected_npn_protocol())
self.server.selected_alpn_protocols.append(self.sslconn.selected_alpn_protocol())
- except (ssl.SSLError, ConnectionResetError) as e:
+ except (ConnectionResetError, BrokenPipeError) as e:
# We treat ConnectionResetError as though it were an
# SSLError - OpenSSL on Ubuntu abruptly closes the
# connection when asked to use an unsupported protocol.
#
+ # BrokenPipeError is raised in TLS 1.3 mode, when OpenSSL
+ # tries to send session tickets after handshake.
+ # https://github.com/openssl/openssl/issues/6342
+ self.server.conn_errors.append(str(e))
+ if self.server.chatty:
+ handle_error(
+ "\n server: bad connection attempt from " + repr(
+ self.addr) + ":\n")
+ self.running = False
+ self.close()
+ return False
+ except (ssl.SSLError, OSError) as e:
+ # OSError may occur with wrong protocols, e.g. both
+ # sides use PROTOCOL_TLS_SERVER.
+ #
# XXX Various errors can have happened here, for example
# a mismatching protocol version, an invalid certificate,
# or a low-level bug. This should be made more discriminating.
@@ -2974,7 +2991,7 @@ else:
# Block on the accept and wait on the connection to close.
evt.set()
remote, peer = server.accept()
- remote.recv(1)
+ remote.send(remote.recv(4))
t = threading.Thread(target=serve)
t.start()
@@ -2982,6 +2999,8 @@ else:
evt.wait()
client = context.wrap_socket(socket.socket())
client.connect((host, port))
+ client.send(b'data')
+ client.recv()
client_addr = client.getsockname()
client.close()
t.join()
diff --git a/Misc/NEWS.d/next/Library/2018-08-14-08-57-01.bpo-32947.mqStVW.rst b/Misc/NEWS.d/next/Library/2018-08-14-08-57-01.bpo-32947.mqStVW.rst
new file mode 100644
index 0000000000..28de360c36
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-08-14-08-57-01.bpo-32947.mqStVW.rst
@@ -0,0 +1,2 @@
+Add OP_ENABLE_MIDDLEBOX_COMPAT and test workaround for TLSv1.3 for future
+compatibility with OpenSSL 1.1.1.
diff --git a/Modules/_ssl.c b/Modules/_ssl.c
index c71d89607c..eb123a87ba 100644
--- a/Modules/_ssl.c
+++ b/Modules/_ssl.c
@@ -4858,6 +4858,10 @@ PyInit__ssl(void)
PyModule_AddIntConstant(m, "OP_NO_COMPRESSION",
SSL_OP_NO_COMPRESSION);
#endif
+#ifdef SSL_OP_ENABLE_MIDDLEBOX_COMPAT
+ PyModule_AddIntConstant(m, "OP_ENABLE_MIDDLEBOX_COMPAT",
+ SSL_OP_ENABLE_MIDDLEBOX_COMPAT);
+#endif
#if HAVE_SNI
r = Py_True;
--
2.17.1

View File

@@ -1,7 +1,8 @@
From a784b70d47ba2104afbcfd805e2a66cdc2109ec5 Mon Sep 17 00:00:00 2001
From b881a79adcd4ae5ac8fe4f49d0fc77c47f777919 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Fri, 4 Aug 2017 11:16:14 +0800
Subject: [PATCH] setup.py: pass missing libraries to Extension for multiprocessing module
Subject: [PATCH] setup.py: pass missing libraries to Extension for
multiprocessing module
In the following commit:
...
@@ -53,10 +54,10 @@ Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index 4f0f522..d05707d 100644
index b7a36a6..658ead3 100644
--- a/setup.py
+++ b/setup.py
@@ -1606,8 +1606,10 @@ class PyBuildExt(build_ext):
@@ -1584,8 +1584,10 @@ class PyBuildExt(build_ext):
elif host_platform.startswith('netbsd'):
macros = dict()
libraries = []
@@ -69,14 +70,11 @@ index 4f0f522..d05707d 100644
macros = dict()
libraries = ['rt']
@@ -1626,6 +1628,7 @@ class PyBuildExt(build_ext):
if sysconfig.get_config_var('WITH_THREAD'):
exts.append ( Extension('_multiprocessing', multiprocessing_srcs,
define_macros=list(macros.items()),
+ libraries=libraries,
include_dirs=["Modules/_multiprocessing"]))
else:
missing.append('_multiprocessing')
--
2.7.4
@@ -1603,6 +1605,7 @@ class PyBuildExt(build_ext):
exts.append ( Extension('_multiprocessing', multiprocessing_srcs,
define_macros=list(macros.items()),
+ libraries=libraries,
include_dirs=["Modules/_multiprocessing"]))
# End multiprocessing

View File

@@ -1,110 +0,0 @@
From 0c9354362bfa5f90fbea8ff8237a1f1f5dba686f Mon Sep 17 00:00:00 2001
From: Christian Heimes <christian@python.org>
Date: Wed, 12 Sep 2018 15:20:31 +0800
Subject: [PATCH] bpo-33570: TLS 1.3 ciphers for OpenSSL 1.1.1 (GH-6976)
Change TLS 1.3 cipher suite settings for compatibility with OpenSSL
1.1.1-pre6 and newer. OpenSSL 1.1.1 will have TLS 1.3 cipers enabled by
default.
Also update multissltests and Travis config to test with latest OpenSSL.
Signed-off-by: Christian Heimes <christian@python.org>
(cherry picked from commit e8eb6cb7920ded66abc5d284319a8539bdc2bae3)
Co-authored-by: Christian Heimes <christian@python.org
Upstream-Status: Backport
[https://github.com/python/cpython/commit/3e630c541b35c96bfe5619165255e559f577ee71]
Tweaked patch to not take changes for multissltests and Travis config.
Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
---
Lib/test/test_ssl.py | 51 ++++++++++++++++++++++----------------------
1 file changed, 26 insertions(+), 25 deletions(-)
diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
index a2e1d32a62..c484ead5ff 100644
--- a/Lib/test/test_ssl.py
+++ b/Lib/test/test_ssl.py
@@ -3024,17 +3024,21 @@ else:
sock.do_handshake()
self.assertEqual(cm.exception.errno, errno.ENOTCONN)
- def test_default_ciphers(self):
- context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
- try:
- # Force a set of weak ciphers on our client context
- context.set_ciphers("DES")
- except ssl.SSLError:
- self.skipTest("no DES cipher available")
- with ThreadedEchoServer(CERTFILE,
- ssl_version=ssl.PROTOCOL_SSLv23,
- chatty=False) as server:
- with context.wrap_socket(socket.socket()) as s:
+ def test_no_shared_ciphers(self):
+ server_context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
+ server_context.load_cert_chain(SIGNED_CERTFILE)
+ client_context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
+ client_context.verify_mode = ssl.CERT_REQUIRED
+ client_context.check_hostname = True
+
+ client_context.set_ciphers("AES128")
+ server_context.set_ciphers("AES256")
+ # OpenSSL enables all TLS 1.3 ciphers, enforce TLS 1.2 for test
+ client_context.options |= ssl.OP_NO_TLSv1_3
+ with ThreadedEchoServer(context=server_context) as server:
+ with client_context.wrap_socket(
+ socket.socket(),
+ server_hostname="localhost") as s:
with self.assertRaises(OSError):
s.connect((HOST, server.port))
self.assertIn("no shared cipher", str(server.conn_errors[0]))
@@ -3067,9 +3071,9 @@ else:
with context.wrap_socket(socket.socket()) as s:
s.connect((HOST, server.port))
self.assertIn(s.cipher()[0], [
- 'TLS13-AES-256-GCM-SHA384',
- 'TLS13-CHACHA20-POLY1305-SHA256',
- 'TLS13-AES-128-GCM-SHA256',
+ 'TLS_AES_256_GCM_SHA384',
+ 'TLS_CHACHA20_POLY1305_SHA256',
+ 'TLS_AES_128_GCM_SHA256',
])
@unittest.skipUnless(ssl.HAS_ECDH, "test requires ECDH-enabled OpenSSL")
@@ -3391,22 +3395,19 @@ else:
client_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
client_context.verify_mode = ssl.CERT_REQUIRED
client_context.load_verify_locations(SIGNING_CA)
- if ssl.OPENSSL_VERSION_INFO >= (1, 0, 2):
- client_context.set_ciphers("AES128:AES256")
- server_context.set_ciphers("AES256")
- alg1 = "AES256"
- alg2 = "AES-256"
- else:
- client_context.set_ciphers("AES:3DES")
- server_context.set_ciphers("3DES")
- alg1 = "3DES"
- alg2 = "DES-CBC3"
+ client_context.set_ciphers("AES128:AES256")
+ server_context.set_ciphers("AES256")
+ expected_algs = [
+ "AES256", "AES-256",
+ # TLS 1.3 ciphers are always enabled
+ "TLS_CHACHA20", "TLS_AES",
+ ]
stats = server_params_test(client_context, server_context)
ciphers = stats['server_shared_ciphers'][0]
self.assertGreater(len(ciphers), 0)
for name, tls_version, bits in ciphers:
- if not alg1 in name.split("-") and alg2 not in name:
+ if not any (alg in name for alg in expected_algs):
self.fail(name)
def test_read_write_after_close_raises_valuerror(self):
--
2.17.1

View File

@@ -1,68 +0,0 @@
From 7b40cb7293cb14e5c7c8ed123efaf9acb33edae2 Mon Sep 17 00:00:00 2001
From: Christian Heimes <christian@python.org>
Date: Tue, 15 Aug 2017 10:33:43 +0200
Subject: [PATCH] bpo-30714: ALPN changes for OpenSSL 1.1.0f (#2305)
OpenSSL 1.1.0 to 1.1.0e aborted the handshake when server and client
could not agree on a protocol using ALPN. OpenSSL 1.1.0f changed that.
The most recent version now behaves like OpenSSL 1.0.2 again. The ALPN
callback can pretend to not been set.
See https://github.com/openssl/openssl/pull/3158 for more details
Signed-off-by: Christian Heimes <christian@python.org>
Upstream-Status: Backport
[https://github.com/python/cpython/commit/7b40cb7293cb14e5c7c8ed123efaf9acb33edae2]
Signed-off-by: Anuj Mittal <anuj.mittal@intel.com>
---
Doc/library/ssl.rst | 5 +++--
Lib/test/test_ssl.py | 5 +++--
.../next/Tests/2017-07-25-15-27-44.bpo-30715.Sp7bTF.rst | 2 ++
3 files changed, 8 insertions(+), 4 deletions(-)
create mode 100644 Misc/NEWS.d/next/Tests/2017-07-25-15-27-44.bpo-30715.Sp7bTF.rst
diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst
index 729a239a1b..0a09e7e9d4 100644
--- a/Doc/library/ssl.rst
+++ b/Doc/library/ssl.rst
@@ -1447,8 +1447,9 @@ to speed up repeated connections from the same clients.
This method will raise :exc:`NotImplementedError` if :data:`HAS_ALPN` is
False.
- OpenSSL 1.1.0+ will abort the handshake and raise :exc:`SSLError` when
- both sides support ALPN but cannot agree on a protocol.
+ OpenSSL 1.1.0 to 1.1.0e will abort the handshake and raise :exc:`SSLError`
+ when both sides support ALPN but cannot agree on a protocol. 1.1.0f+
+ behaves like 1.0.2, :meth:`SSLSocket.selected_alpn_protocol` returns None.
.. versionadded:: 3.5
diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
index d960d82065..104b7f377a 100644
--- a/Lib/test/test_ssl.py
+++ b/Lib/test/test_ssl.py
@@ -3268,8 +3268,9 @@ if _have_threads:
except ssl.SSLError as e:
stats = e
- if expected is None and IS_OPENSSL_1_1:
- # OpenSSL 1.1.0 raises handshake error
+ if (expected is None and IS_OPENSSL_1_1
+ and ssl.OPENSSL_VERSION_INFO < (1, 1, 0, 6)):
+ # OpenSSL 1.1.0 to 1.1.0e raises handshake error
self.assertIsInstance(stats, ssl.SSLError)
else:
msg = "failed trying %s (s) and %s (c).\n" \
diff --git a/Misc/NEWS.d/next/Tests/2017-07-25-15-27-44.bpo-30715.Sp7bTF.rst b/Misc/NEWS.d/next/Tests/2017-07-25-15-27-44.bpo-30715.Sp7bTF.rst
new file mode 100644
index 0000000000..88394e585c
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2017-07-25-15-27-44.bpo-30715.Sp7bTF.rst
@@ -0,0 +1,2 @@
+Address ALPN callback changes for OpenSSL 1.1.0f. The latest version behaves
+like OpenSSL 1.0.2 and no longer aborts handshake.
--
2.17.1

View File

@@ -1,42 +0,0 @@
Upstream-Status: Inappropriate [embedded specific]
# We need to supply STAGING_INCDIR here, otherwise the Tk headers
# will not be found.
# Signed-Off: Michael 'Mickey' Lauer <mickey@vanille.de>
Index: Python-3.3.0rc2/setup.py
===================================================================
--- Python-3.3.0rc2.orig/setup.py 2012-09-20 15:24:14.009124003 -0700
+++ Python-3.3.0rc2/setup.py 2012-09-20 15:25:08.449124963 -0700
@@ -1620,7 +1620,7 @@
dotversion = dotversion[:-1] + '.' + dotversion[-1]
tcl_include_sub = []
tk_include_sub = []
- for dir in inc_dirs:
+ for dir in [os.getenv("STAGING_INCDIR")]:
tcl_include_sub += [dir + os.sep + "tcl" + dotversion]
tk_include_sub += [dir + os.sep + "tk" + dotversion]
tk_include_sub += tcl_include_sub
@@ -1639,22 +1639,6 @@
if dir not in include_dirs:
include_dirs.append(dir)
- # Check for various platform-specific directories
- if host_platform == 'sunos5':
- include_dirs.append('/usr/openwin/include')
- added_lib_dirs.append('/usr/openwin/lib')
- elif os.path.exists('/usr/X11R6/include'):
- include_dirs.append('/usr/X11R6/include')
- added_lib_dirs.append('/usr/X11R6/lib64')
- added_lib_dirs.append('/usr/X11R6/lib')
- elif os.path.exists('/usr/X11R5/include'):
- include_dirs.append('/usr/X11R5/include')
- added_lib_dirs.append('/usr/X11R5/lib')
- else:
- # Assume default location for X11
- include_dirs.append('/usr/X11/include')
- added_lib_dirs.append('/usr/X11/lib')
-
# If Cygwin, then verify that X is installed before proceeding
if host_platform == 'cygwin':
x11_inc = find_file('X11/Xlib.h', [], include_dirs)

View File

@@ -1,33 +0,0 @@
Do not hardcode /usr into include paths when cross compiling
-Khem
Upstream-Status: Pending
---
setup.py | 15 ++-------------
1 file changed, 2 insertions(+), 13 deletions(-)
Index: Python-3.3.2/setup.py
===================================================================
--- Python-3.3.2.orig/setup.py
+++ Python-3.3.2/setup.py
@@ -444,7 +444,8 @@ class PyBuildExt(build_ext):
# only change this for cross builds for 3.3, issues on Mageia
if cross_compiling:
self.add_gcc_paths()
- self.add_multiarch_paths()
+ if not cross_compiling:
+ self.add_multiarch_paths()
# Add paths specified in the environment variables LDFLAGS and
# CPPFLAGS for header and library files.
@@ -480,7 +481,7 @@ class PyBuildExt(build_ext):
for directory in reversed(options.dirs):
add_dir_to_list(dir_list, directory)
- if os.path.normpath(sys.base_prefix) != '/usr' \
+ if not cross_compiling and os.path.normpath(sys.base_prefix) != '/usr' \
and not sysconfig.get_config_var('PYTHONFRAMEWORK'):
# OSX note: Don't add LIBDIR and INCLUDEDIR to building a framework
# (PYTHONFRAMEWORK is set) to avoid # linking problems when

View File

@@ -1,92 +0,0 @@
do not "adjust" python files before copying
-Khem
Upstream-Status: Inappropriate [Embedded-Specific]
---
Lib/distutils/command/build_scripts.py | 43 +++------------------------------
1 file changed, 4 insertions(+), 39 deletions(-)
--- a/Lib/distutils/command/build_scripts.py
+++ b/Lib/distutils/command/build_scripts.py
@@ -51,10 +51,7 @@ class build_scripts(Command):
def copy_scripts(self):
- """Copy each script listed in 'self.scripts'; if it's marked as a
- Python script in the Unix way (first line matches 'first_line_re',
- ie. starts with "\#!" and contains "python"), then adjust the first
- line to refer to the current Python interpreter as we copy.
+ """Copy each script listed in 'self.scripts'
"""
self.mkpath(self.build_dir)
outfiles = []
@@ -78,64 +75,10 @@ class build_scripts(Command):
if not self.dry_run:
raise
f = None
- else:
- encoding, lines = tokenize.detect_encoding(f.readline)
- f.seek(0)
- first_line = f.readline()
- if not first_line:
- self.warn("%s is an empty file (skipping)" % script)
- continue
-
- match = first_line_re.match(first_line)
- if match:
- adjust = True
- post_interp = match.group(1) or b''
-
- if adjust:
- log.info("copying and adjusting %s -> %s", script,
- self.build_dir)
- updated_files.append(outfile)
- if not self.dry_run:
- if not sysconfig.python_build:
- executable = self.executable
- else:
- executable = os.path.join(
- sysconfig.get_config_var("BINDIR"),
- "python%s%s" % (sysconfig.get_config_var("VERSION"),
- sysconfig.get_config_var("EXE")))
- executable = os.fsencode(executable)
- shebang = b"#!" + executable + post_interp + b"\n"
- # Python parser starts to read a script using UTF-8 until
- # it gets a #coding:xxx cookie. The shebang has to be the
- # first line of a file, the #coding:xxx cookie cannot be
- # written before. So the shebang has to be decodable from
- # UTF-8.
- try:
- shebang.decode('utf-8')
- except UnicodeDecodeError:
- raise ValueError(
- "The shebang ({!r}) is not decodable "
- "from utf-8".format(shebang))
- # If the script is encoded to a custom encoding (use a
- # #coding:xxx cookie), the shebang has to be decodable from
- # the script encoding too.
- try:
- shebang.decode(encoding)
- except UnicodeDecodeError:
- raise ValueError(
- "The shebang ({!r}) is not decodable "
- "from the script encoding ({})"
- .format(shebang, encoding))
- with open(outfile, "wb") as outf:
- outf.write(shebang)
- outf.writelines(f.readlines())
- if f:
- f.close()
- else:
- if f:
+ if f:
f.close()
- updated_files.append(outfile)
- self.copy_file(script, outfile)
+ updated_files.append(outfile)
+ self.copy_file(script, outfile)
if os.name == 'posix':
for file in outfiles:

View File

@@ -1,7 +1,7 @@
From 7630ab22578746d3d790d0598c0d279cf7afed97 Mon Sep 17 00:00:00 2001
From 1397979ee445ff6826aa5469511e003539f77bb2 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Tue, 14 May 2013 15:00:26 -0700
Subject: [PATCH 01/20] python3: Add target and native recipes
Subject: [PATCH] python3: Add target and native recipes
Upstream-Status: Inappropriate [embedded specific]
@@ -18,7 +18,7 @@ Upstream-Status: Inappropriate [embedded specific]
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
index 573724d..390c485 100644
index 6b8c129..3ca7f79 100644
--- a/Lib/distutils/sysconfig.py
+++ b/Lib/distutils/sysconfig.py
@@ -84,7 +84,9 @@ def get_python_inc(plat_specific=0, prefix=None):
@@ -32,7 +32,7 @@ index 573724d..390c485 100644
prefix = plat_specific and BASE_EXEC_PREFIX or BASE_PREFIX
if os.name == "posix":
if python_build:
@@ -125,6 +127,10 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
@@ -122,6 +124,10 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
If 'prefix' is supplied, use it instead of sys.base_prefix or
sys.base_exec_prefix -- i.e., ignore 'plat_specific'.
"""
@@ -43,7 +43,7 @@ index 573724d..390c485 100644
if prefix is None:
if standard_lib:
prefix = plat_specific and BASE_EXEC_PREFIX or BASE_PREFIX
@@ -133,7 +139,7 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
@@ -130,7 +136,7 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
if os.name == "posix":
libpython = os.path.join(prefix,
@@ -52,6 +52,3 @@ index 573724d..390c485 100644
if standard_lib:
return libpython
else:
--
2.8.0.rc3

View File

@@ -1,55 +0,0 @@
package python-readline
-Khem
Upstream-Status: Inappropriate [Embedded Specific]
--- a/setup.py
+++ b/setup.py
@@ -666,45 +666,7 @@ class PyBuildExt(build_ext):
# readline
do_readline = self.compiler.find_library_file(lib_dirs, 'readline')
readline_termcap_library = ""
- curses_library = ""
- # Cannot use os.popen here in py3k.
- tmpfile = os.path.join(self.build_temp, 'readline_termcap_lib')
- if not os.path.exists(self.build_temp):
- os.makedirs(self.build_temp)
- # Determine if readline is already linked against curses or tinfo.
- if do_readline:
- if cross_compiling:
- ret = os.system("%s -d %s | grep '(NEEDED)' > %s" \
- % (sysconfig.get_config_var('READELF'),
- do_readline, tmpfile))
- elif find_executable('ldd'):
- ret = os.system("ldd %s > %s" % (do_readline, tmpfile))
- else:
- ret = 256
- if ret >> 8 == 0:
- with open(tmpfile) as fp:
- for ln in fp:
- if 'curses' in ln:
- readline_termcap_library = re.sub(
- r'.*lib(n?cursesw?)\.so.*', r'\1', ln
- ).rstrip()
- break
- # termcap interface split out from ncurses
- if 'tinfo' in ln:
- readline_termcap_library = 'tinfo'
- break
- if os.path.exists(tmpfile):
- os.unlink(tmpfile)
- # Issue 7384: If readline is already linked against curses,
- # use the same library for the readline and curses modules.
- if 'curses' in readline_termcap_library:
- curses_library = readline_termcap_library
- elif self.compiler.find_library_file(lib_dirs, 'ncursesw'):
- curses_library = 'ncursesw'
- elif self.compiler.find_library_file(lib_dirs, 'ncurses'):
- curses_library = 'ncurses'
- elif self.compiler.find_library_file(lib_dirs, 'curses'):
- curses_library = 'curses'
+ curses_library = "ncursesw"
if host_platform == 'darwin':
os_release = int(os.uname()[2].split('.')[0])

View File

@@ -1,17 +0,0 @@
Fix warning with newer compiler
-Khem
Upstream-Status: Pending
--- a/Modules/_cursesmodule.c
+++ b/Modules/_cursesmodule.c
@@ -116,7 +116,7 @@ char *PyCursesVersion = "2.2";
#defines many common symbols (such as "lines") which breaks the
curses module in other ways. So the code will just specify
explicit prototypes here. */
-extern int setupterm(char *,int,int *);
+//extern int setupterm(char *,int,int *);
#ifdef __sgi
#include <term.h>
#endif

View File

@@ -1,56 +0,0 @@
From 7fd121bb7d6c25c2e0a1c31cf76fb9bd4a9794de Mon Sep 17 00:00:00 2001
From: Markus Lehtonen <markus.lehtonen@linux.intel.com>
Date: Tue, 14 Aug 2018 14:11:35 +0800
Subject: [PATCH 1/2] Use correct CFLAGS for extensions when cross-compiling
Take PY_CFLAGS_NODIST into account, like in native build. This is needed
in order to to profile-optimized build. Also, pass EXTRA_CFLAGS to
profile-optimized build.
Upstream-Status: Pending
Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
---
Makefile.pre.in | 4 ++--
setup.py | 3 ++-
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/Makefile.pre.in b/Makefile.pre.in
index e2d5d3d..84bc3ff 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -478,7 +478,7 @@ profile-opt:
$(MAKE) profile-removal
build_all_generate_profile:
- $(MAKE) @DEF_MAKE_RULE@ CFLAGS_NODIST="$(CFLAGS) $(PGO_PROF_GEN_FLAG) @LTOFLAGS@" LDFLAGS="$(LDFLAGS) $(PGO_PROF_GEN_FLAG) @LTOFLAGS@" LIBS="$(LIBS)"
+ $(MAKE) @DEF_MAKE_RULE@ CFLAGS_NODIST="$(CFLAGS) $(EXTRA_CFLAGS) $(PGO_PROF_GEN_FLAG) @LTOFLAGS@" LDFLAGS="$(LDFLAGS) $(PGO_PROF_GEN_FLAG) @LTOFLAGS@" LIBS="$(LIBS)"
run_profile_task:
: # FIXME: can't run for a cross build
@@ -488,7 +488,7 @@ build_all_merge_profile:
$(LLVM_PROF_MERGER)
build_all_use_profile:
- $(MAKE) @DEF_MAKE_RULE@ CFLAGS_NODIST="$(CFLAGS) $(PGO_PROF_USE_FLAG) @LTOFLAGS@" LDFLAGS="$(LDFLAGS) @LTOFLAGS@"
+ $(MAKE) @DEF_MAKE_RULE@ CFLAGS_NODIST="$(CFLAGS) $(EXTRA_CFLAGS) $(PGO_PROF_USE_FLAG) @LTOFLAGS@" LDFLAGS="$(LDFLAGS) @LTOFLAGS@"
# Compile and run with gcov
.PHONY=coverage coverage-lcov coverage-report
diff --git a/setup.py b/setup.py
index add3346..65e83b1 100644
--- a/setup.py
+++ b/setup.py
@@ -263,7 +263,8 @@ class PyBuildExt(build_ext):
# compilers
if compiler is not None:
if cross_compiling:
- (ccshared,cflags) = (os.environ.get('CCSHARED') or '', os.environ.get('CFLAGS') or '')
+ (ccshared,cflags) = (os.environ.get('CCSHARED') or '',
+ (os.environ.get('CFLAGS') or '') + ' ' + sysconfig.get_config_var('PY_CFLAGS_NODIST'))
else:
(ccshared,cflags) = sysconfig.get_config_vars('CCSHARED','CFLAGS')
args['compiler_so'] = compiler + ' ' + ccshared + ' ' + cflags
--
2.17.1

View File

@@ -1,21 +0,0 @@
Upstream-Status: Pending
We should make sure that sysroot is used by gcc instead of assuming
hardcoded locations for include paths
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Index: Python-3.4.2/configure.ac
===================================================================
--- Python-3.4.2.orig/configure.ac
+++ Python-3.4.2/configure.ac
@@ -4434,7 +4434,7 @@ fi
# first curses header check
ac_save_cppflags="$CPPFLAGS"
-CPPFLAGS="$CPPFLAGS -I/usr/include/ncursesw"
+CPPFLAGS="$CPPFLAGS -I=/usr/include/ncursesw"
AC_CHECK_HEADERS(curses.h ncurses.h)

View File

@@ -1,17 +1,24 @@
_tkinter module needs tk module along with tcl. tk is not yet integrated
in yocto so we skip the check for this module.
Avoid a warning by not adding this module to missing variable.
From fead48c8b501a8d7c3db21df2e599f90f38f11d3 Mon Sep 17 00:00:00 2001
From: Andrei Gherzan <andrei@gherzan.ro>
Date: Mon, 28 Jan 2019 15:57:54 +0000
Subject: [PATCH] _tkinter module needs tk module along with tcl. tk is not yet
integrated in yocto so we skip the check for this module. Avoid a warning by
not adding this module to missing variable.
Upstream-Status: Inappropriate [distribution]
Also simply disable the tk module since its not in DEPENDS.
Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
Index: Python-3.5.3/setup.py
===================================================================
--- Python-3.5.3.orig/setup.py
+++ Python-3.5.3/setup.py
@@ -1558,10 +1558,12 @@ class PyBuildExt(build_ext):
---
setup.py | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/setup.py b/setup.py
index fbec00d..b7a36a6 100644
--- a/setup.py
+++ b/setup.py
@@ -1623,10 +1623,12 @@ class PyBuildExt(build_ext):
self.extensions.extend(exts)
# Call the method for detecting whether _tkinter can be compiled
@@ -25,5 +32,5 @@ Index: Python-3.5.3/setup.py
+ #if '_tkinter' not in [e.name for e in self.extensions]:
+ # missing.append('_tkinter')
## # Uncomment these lines if you want to play with xxmodule.c
## ext = Extension('xx', ['xxmodule.c'])
# Build the _uuid module if possible
uuid_incs = find_file("uuid.h", inc_dirs, ["/usr/include/uuid"])

View File

@@ -1,11 +1,20 @@
Lib/cgi.py: Update the script as mentioned in the comment
From 62336285cba38017b35cb761c03f0c7e80a671a3 Mon Sep 17 00:00:00 2001
From: Mark Hatle <mark.hatle@windriver.com>
Date: Wed, 21 Sep 2011 20:55:33 -0500
Subject: [PATCH] Lib/cgi.py: Update the script as mentioned in the comment
Upstream-Status: Inappropriate [distribution]
Signed-off-by: Mark Hatle <mark.hatle@windriver.com>
--- Python-2.6.6/Lib/cgi.py.orig 2010-08-01 22:14:27.000000000 -0500
+++ Python-2.6.6/Lib/cgi.py 2011-09-21 15:28:40.478208631 -0500
---
Lib/cgi.py | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/Lib/cgi.py b/Lib/cgi.py
index 8cf6687..094c7b4 100755
--- a/Lib/cgi.py
+++ b/Lib/cgi.py
@@ -1,13 +1,4 @@
-#! /usr/local/bin/python
-

View File

@@ -0,0 +1,17 @@
#!/usr/bin/env python3
import sys
logfile = open(sys.argv[1]).read()
necessary_bits = logfile.find("The necessary bits to build these optional modules were not found")
to_find_bits = logfile.find("To find the necessary bits, look in setup.py in detect_modules() for the module's name.")
if necessary_bits != -1:
print("%s" %(logfile[necessary_bits:to_find_bits]))
failed_to_build = logfile.find("Failed to build these modules:")
if failed_to_build != -1:
failed_to_build_end = logfile.find("\n\n", failed_to_build)
print("%s" %(logfile[failed_to_build:failed_to_build_end]))
if necessary_bits != -1 or failed_to_build != -1:
sys.exit(1)

View File

@@ -1,30 +0,0 @@
From 7c4f8d87473d6238c120ec6031b58f83a17a39a5 Mon Sep 17 00:00:00 2001
From: Robert Yang <liezhi.yang@windriver.com>
Date: Mon, 28 Dec 2015 22:52:06 -0800
Subject: [PATCH] configure.ac: fix LIBPL
Use LIBDIR rather than prefix/lib, so that it would work when lib64.
Upstream-Status: Pending
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
---
configure.ac | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index 63aef8e..aefb27f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4366,7 +4366,7 @@ AC_MSG_RESULT($LDVERSION)
dnl define LIBPL after ABIFLAGS and LDVERSION is defined.
AC_SUBST(PY_ENABLE_SHARED)
-LIBPL='$(prefix)'"/lib/python${VERSION}/config-${LDVERSION}"
+LIBPL='$(LIBDIR)'"/python${VERSION}/config-${LDVERSION}"
AC_SUBST(LIBPL)
# Check whether right shifting a negative integer extends the sign bit
--
1.7.9.5

View File

@@ -1,54 +0,0 @@
Upstream-Status: Inappropriate [Embedded specific]
This patch fixes issuing with different libdir like lib64.
This patch makes the native python binary modules findable
in the install process of the host python.
Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
Date: 2012/03/14
Updated for python 2.7.3
Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
Date: 2012/05/01
Index: Python-3.3.0rc2/Lib/sysconfig.py
===================================================================
--- Python-3.3.0rc2.orig/Lib/sysconfig.py 2012-09-20 22:50:11.000000000 -0700
+++ Python-3.3.0rc2/Lib/sysconfig.py 2012-09-20 22:53:01.561123396 -0700
@@ -21,9 +21,9 @@
_INSTALL_SCHEMES = {
'posix_prefix': {
- 'stdlib': '{installed_base}/'+sys.lib+'/python{py_version_short}',
+ 'stdlib': '{base}/'+sys.lib+'/python{py_version_short}',
'platstdlib': '{platbase}/'+sys.lib+'/python{py_version_short}',
- 'purelib': '{base}/lib/python{py_version_short}/site-packages',
+ 'purelib': '{base}/'+sys.lib+'/python{py_version_short}/site-packages',
'platlib': '{platbase}/'+sys.lib+'/python{py_version_short}/site-packages',
'include':
'{installed_base}/include/python{py_version_short}{abiflags}',
@@ -83,7 +83,7 @@
'posix_user': {
'stdlib': '{userbase}/'+sys.lib+'/python{py_version_short}',
'platstdlib': '{userbase}/'+sys.lib+'/python{py_version_short}',
- 'purelib': '{userbase}/lib/python{py_version_short}/site-packages',
+ 'purelib': '{userbase}/'+sys.lib+'/python{py_version_short}/site-packages',
'platlib': '{userbase}/'+sys.lib+'/python{py_version_short}/site-packages',
'include': '{userbase}/include/python{py_version_short}',
'scripts': '{userbase}/bin',
Index: Python-3.3.0rc2/Makefile.pre.in
===================================================================
--- Python-3.3.0rc2.orig/Makefile.pre.in 2012-09-20 22:50:11.000000000 -0700
+++ Python-3.3.0rc2/Makefile.pre.in 2012-09-20 22:50:54.245123997 -0700
@@ -1080,9 +1080,9 @@
$(INSTALL_DATA) $(srcdir)/Modules/xxmodule.c \
$(DESTDIR)$(LIBDEST)/distutils/tests ; \
fi
- -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+ -PYTHONPATH=$(DESTDIR)$(LIBDEST):${CROSSPYTHONPATH} $(RUNSHARED) \
$(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/Grammar.txt
- -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
+ -PYTHONPATH=$(DESTDIR)$(LIBDEST):${CROSSPYTHONPATH} $(RUNSHARED) \
$(PYTHON_FOR_BUILD) -m lib2to3.pgen2.driver $(DESTDIR)$(LIBDEST)/lib2to3/PatternGrammar.txt
# Create the PLATDIR source directory, if one wasn't distributed..

View File

@@ -1,60 +0,0 @@
Upstream-Status: Backport
Signed-off-by: Ross Burton <ross.burton@intel.com>
From cabe916dc694997d4892b58986e73a713d5a2f8d Mon Sep 17 00:00:00 2001
From: "Miss Islington (bot)"
<31488909+miss-islington@users.noreply.github.com>
Date: Thu, 16 Aug 2018 15:38:03 -0400
Subject: [PATCH] [3.6] bpo-34391: Fix ftplib test for TLS 1.3 (GH-8787)
(#8790)
Read from data socket to avoid "[SSL] shutdown while in init" exception
during shutdown of the dummy server.
Signed-off-by: Christian Heimes <christian@python.org>
<!-- issue-number: [bpo-34391](https://www.bugs.python.org/issue34391) -->
https://bugs.python.org/issue34391
<!-- /issue-number -->
(cherry picked from commit 1590c393360df059160145e7475754427bfc6680)
Co-authored-by: Christian Heimes <christian@python.org>
---
Lib/test/test_ftplib.py | 5 +++++
Misc/NEWS.d/next/Tests/2018-08-16-18-48-47.bpo-34391.ouNfxC.rst | 1 +
2 files changed, 6 insertions(+)
create mode 100644 Misc/NEWS.d/next/Tests/2018-08-16-18-48-47.bpo-34391.ouNfxC.rst
diff --git a/Lib/test/test_ftplib.py b/Lib/test/test_ftplib.py
index 44dd73aeca..4ff2f71afb 100644
--- a/Lib/test/test_ftplib.py
+++ b/Lib/test/test_ftplib.py
@@ -876,18 +876,23 @@ class TestTLS_FTPClass(TestCase):
# clear text
with self.client.transfercmd('list') as sock:
self.assertNotIsInstance(sock, ssl.SSLSocket)
+ self.assertEqual(sock.recv(1024), LIST_DATA.encode('ascii'))
self.assertEqual(self.client.voidresp(), "226 transfer complete")
# secured, after PROT P
self.client.prot_p()
with self.client.transfercmd('list') as sock:
self.assertIsInstance(sock, ssl.SSLSocket)
+ # consume from SSL socket to finalize handshake and avoid
+ # "SSLError [SSL] shutdown while in init"
+ self.assertEqual(sock.recv(1024), LIST_DATA.encode('ascii'))
self.assertEqual(self.client.voidresp(), "226 transfer complete")
# PROT C is issued, the connection must be in cleartext again
self.client.prot_c()
with self.client.transfercmd('list') as sock:
self.assertNotIsInstance(sock, ssl.SSLSocket)
+ self.assertEqual(sock.recv(1024), LIST_DATA.encode('ascii'))
self.assertEqual(self.client.voidresp(), "226 transfer complete")
def test_login(self):
--
2.11.0

View File

@@ -1,28 +0,0 @@
when building python for qemux86-64 on ubuntu 11.10/64bit
it gropes into host includes and then mixes them with cross
includes and as a result some modules fail to compile and link
one of the modules is python-elementtree which is then not
found during image creation
Proble is that setup.py tries to add native includes that newer
ubuntu has introduced for multiarch support. But that should
only happen for native builds and not cross building python
so we add a check here.
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Upstream-Status: Pending
Index: Python-3.3.0rc2/setup.py
===================================================================
--- Python-3.3.0rc2.orig/setup.py 2012-09-20 21:54:50.000000000 -0700
+++ Python-3.3.0rc2/setup.py 2012-09-20 21:57:35.029123858 -0700
@@ -402,6 +402,9 @@
if not find_executable('dpkg-architecture'):
return
+ if cross_compiling:
+ return
+
opt = ''
if cross_compiling:
opt = '-t' + sysconfig.get_config_var('HOST_GNU_TYPE')

View File

@@ -1,363 +0,0 @@
From 51fe6f22d0ba113674fb358bd11d75fe659bd26e Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Tue, 14 May 2013 15:00:26 -0700
Subject: [PATCH 01/13] get the sys.lib from python itself and do not use
hardcoded value of 'lib'
02/2015 Rebased for 3.4.2
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Alejandro Hernandez <alejandro.hernandez@linux.intel.com>
---
Include/pythonrun.h | 3 +++
Lib/distutils/command/install.py | 4 +++-
Lib/pydoc.py | 2 +-
Lib/site.py | 4 ++--
Lib/sysconfig.py | 18 +++++++++---------
Lib/trace.py | 4 ++--
Makefile.pre.in | 7 +++++--
Modules/getpath.c | 10 +++++++++-
Python/getplatform.c | 20 ++++++++++++++++++++
Python/sysmodule.c | 4 ++++
configure.ac | 35 +++++++++++++++++++++++++++++++++++
setup.py | 9 ++++-----
12 files changed, 97 insertions(+), 23 deletions(-)
Index: Python-3.5.4/Include/pythonrun.h
===================================================================
--- Python-3.5.4.orig/Include/pythonrun.h
+++ Python-3.5.4/Include/pythonrun.h
@@ -23,6 +23,9 @@ typedef struct {
} PyCompilerFlags;
#endif
+PyAPI_FUNC(const char *) Py_GetArch(void);
+PyAPI_FUNC(const char *) Py_GetLib(void);
+
#ifndef Py_LIMITED_API
PyAPI_FUNC(int) PyRun_SimpleStringFlags(const char *, PyCompilerFlags *);
PyAPI_FUNC(int) PyRun_AnyFileFlags(FILE *, const char *, PyCompilerFlags *);
Index: Python-3.5.4/Lib/distutils/command/install.py
===================================================================
--- Python-3.5.4.orig/Lib/distutils/command/install.py
+++ Python-3.5.4/Lib/distutils/command/install.py
@@ -19,6 +19,8 @@ from site import USER_BASE
from site import USER_SITE
HAS_USER_SITE = True
+libname = sys.lib
+
WINDOWS_SCHEME = {
'purelib': '$base/Lib/site-packages',
'platlib': '$base/Lib/site-packages',
@@ -29,8 +31,8 @@ WINDOWS_SCHEME = {
INSTALL_SCHEMES = {
'unix_prefix': {
- 'purelib': '$base/lib/python$py_version_short/site-packages',
- 'platlib': '$platbase/lib/python$py_version_short/site-packages',
+ 'purelib': '$platbase/'+libname+'/python$py_version_short/site-packages',
+ 'platlib': '$platbase/'+libname+'/python$py_version_short/site-packages',
'headers': '$base/include/python$py_version_short$abiflags/$dist_name',
'scripts': '$base/bin',
'data' : '$base',
Index: Python-3.5.4/Lib/pydoc.py
===================================================================
--- Python-3.5.4.orig/Lib/pydoc.py
+++ Python-3.5.4/Lib/pydoc.py
@@ -389,7 +389,7 @@ class Doc:
docmodule = docclass = docroutine = docother = docproperty = docdata = fail
def getdocloc(self, object,
- basedir=os.path.join(sys.base_exec_prefix, "lib",
+ basedir=os.path.join(sys.base_exec_prefix, sys.lib,
"python%d.%d" % sys.version_info[:2])):
"""Return the location of module docs or None"""
Index: Python-3.5.4/Lib/site.py
===================================================================
--- Python-3.5.4.orig/Lib/site.py
+++ Python-3.5.4/Lib/site.py
@@ -303,12 +303,12 @@ def getsitepackages(prefixes=None):
seen.add(prefix)
if os.sep == '/':
- sitepackages.append(os.path.join(prefix, "lib",
+ sitepackages.append(os.path.join(prefix, sys.lib,
"python" + sys.version[:3],
"site-packages"))
else:
sitepackages.append(prefix)
- sitepackages.append(os.path.join(prefix, "lib", "site-packages"))
+ sitepackages.append(os.path.join(prefix, sys.lib, "site-packages"))
if sys.platform == "darwin":
# for framework builds *only* we add the standard Apple
# locations.
Index: Python-3.5.4/Lib/sysconfig.py
===================================================================
--- Python-3.5.4.orig/Lib/sysconfig.py
+++ Python-3.5.4/Lib/sysconfig.py
@@ -20,10 +20,10 @@ __all__ = [
_INSTALL_SCHEMES = {
'posix_prefix': {
- 'stdlib': '{installed_base}/lib/python{py_version_short}',
- 'platstdlib': '{platbase}/lib/python{py_version_short}',
- 'purelib': '{base}/lib/python{py_version_short}/site-packages',
- 'platlib': '{platbase}/lib/python{py_version_short}/site-packages',
+ 'stdlib': '{installed_base}/'+sys.lib+'/python{py_version_short}',
+ 'platstdlib': '{platbase}/'+sys.lib+'/python{py_version_short}',
+ 'purelib': '{platbase}/'+sys.lib+'/python{py_version_short}/site-packages',
+ 'platlib': '{platbase}/'+sys.lib+'/python{py_version_short}/site-packages',
'include':
'{installed_base}/include/python{py_version_short}{abiflags}',
'platinclude':
@@ -32,10 +32,10 @@ _INSTALL_SCHEMES = {
'data': '{base}',
},
'posix_home': {
- 'stdlib': '{installed_base}/lib/python',
- 'platstdlib': '{base}/lib/python',
- 'purelib': '{base}/lib/python',
- 'platlib': '{base}/lib/python',
+ 'stdlib': '{installed_base}/'+sys.lib+'/python',
+ 'platstdlib': '{base}/'+sys.lib+'/python',
+ 'purelib': '{base}/'+sys.lib+'/python',
+ 'platlib': '{base}/'+sys.lib+'/python',
'include': '{installed_base}/include/python',
'platinclude': '{installed_base}/include/python',
'scripts': '{base}/bin',
@@ -61,10 +61,10 @@ _INSTALL_SCHEMES = {
'data': '{userbase}',
},
'posix_user': {
- 'stdlib': '{userbase}/lib/python{py_version_short}',
- 'platstdlib': '{userbase}/lib/python{py_version_short}',
- 'purelib': '{userbase}/lib/python{py_version_short}/site-packages',
- 'platlib': '{userbase}/lib/python{py_version_short}/site-packages',
+ 'stdlib': '{userbase}/'+sys.lib+'/python{py_version_short}',
+ 'platstdlib': '{userbase}/'+sys.lib+'/python{py_version_short}',
+ 'purelib': '{userbase}/'+sys.lib+'/python{py_version_short}/site-packages',
+ 'platlib': '{userbase}/'+sys.lib+'/python{py_version_short}/site-packages',
'include': '{userbase}/include/python{py_version_short}',
'scripts': '{userbase}/bin',
'data': '{userbase}',
Index: Python-3.5.4/Lib/trace.py
===================================================================
--- Python-3.5.4.orig/Lib/trace.py
+++ Python-3.5.4/Lib/trace.py
@@ -749,10 +749,10 @@ def main(argv=None):
# should I also call expanduser? (after all, could use $HOME)
s = s.replace("$prefix",
- os.path.join(sys.base_prefix, "lib",
+ os.path.join(sys.base_prefix, sys.lib,
"python" + sys.version[:3]))
s = s.replace("$exec_prefix",
- os.path.join(sys.base_exec_prefix, "lib",
+ os.path.join(sys.base_exec_prefix, sys.lib,
"python" + sys.version[:3]))
s = os.path.normpath(s)
ignore_dirs.append(s)
Index: Python-3.5.4/Makefile.pre.in
===================================================================
--- Python-3.5.4.orig/Makefile.pre.in
+++ Python-3.5.4/Makefile.pre.in
@@ -109,6 +109,8 @@ CFLAGS_ALIASING=@CFLAGS_ALIASING@
# Machine-dependent subdirectories
MACHDEP= @MACHDEP@
+LIB= @LIB@
+ARCH= @ARCH@
# Multiarch directory (may be empty)
MULTIARCH= @MULTIARCH@
@@ -128,7 +130,7 @@ LIBDIR= @libdir@
MANDIR= @mandir@
INCLUDEDIR= @includedir@
CONFINCLUDEDIR= $(exec_prefix)/include
-SCRIPTDIR= $(prefix)/lib
+SCRIPTDIR= @libdir@
ABIFLAGS= @ABIFLAGS@
# Detailed destination directories
@@ -731,6 +733,7 @@ Modules/getpath.o: $(srcdir)/Modules/get
-DEXEC_PREFIX='"$(exec_prefix)"' \
-DVERSION='"$(VERSION)"' \
-DVPATH='"$(VPATH)"' \
+ -DARCH='"$(ARCH)"' -DLIB='"$(LIB)"' \
-o $@ $(srcdir)/Modules/getpath.c
Programs/python.o: $(srcdir)/Programs/python.c
@@ -813,7 +816,7 @@ regen-opcode:
Python/compile.o Python/symtable.o Python/ast.o: $(srcdir)/Include/graminit.h $(srcdir)/Include/Python-ast.h
Python/getplatform.o: $(srcdir)/Python/getplatform.c
- $(CC) -c $(PY_CORE_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -o $@ $(srcdir)/Python/getplatform.c
+ $(CC) -c $(PY_CORE_CFLAGS) -DPLATFORM='"$(MACHDEP)"' -DARCH='"$(ARCH)"' -DLIB='"$(LIB)"' -o $@ $(srcdir)/Python/getplatform.c
Python/importdl.o: $(srcdir)/Python/importdl.c
$(CC) -c $(PY_CORE_CFLAGS) -I$(DLINCLDIR) -o $@ $(srcdir)/Python/importdl.c
Index: Python-3.5.4/Modules/getpath.c
===================================================================
--- Python-3.5.4.orig/Modules/getpath.c
+++ Python-3.5.4/Modules/getpath.c
@@ -105,6 +105,13 @@
#error "PREFIX, EXEC_PREFIX, VERSION, and VPATH must be constant defined"
#endif
+#define LIB_PYTHON LIB "/python" VERSION
+
+#ifndef PYTHONPATH
+#define PYTHONPATH PREFIX "/" LIB_PYTHON ":" \
+ EXEC_PREFIX "/" LIB_PYTHON "/lib-dynload"
+#endif
+
#ifndef LANDMARK
#define LANDMARK L"os.py"
#endif
@@ -113,6 +120,7 @@ static wchar_t prefix[MAXPATHLEN+1];
static wchar_t exec_prefix[MAXPATHLEN+1];
static wchar_t progpath[MAXPATHLEN+1];
static wchar_t *module_search_path = NULL;
+static wchar_t *lib_python = L"" LIB_PYTHON;
/* Get file status. Encode the path to the locale encoding. */
@@ -494,7 +502,7 @@ calculate_path(void)
_pythonpath = Py_DecodeLocale(PYTHONPATH, NULL);
_prefix = Py_DecodeLocale(PREFIX, NULL);
_exec_prefix = Py_DecodeLocale(EXEC_PREFIX, NULL);
- lib_python = Py_DecodeLocale("lib/python" VERSION, NULL);
+ lib_python = Py_DecodeLocale(LIB_PYTHON, NULL);
if (!_pythonpath || !_prefix || !_exec_prefix || !lib_python) {
Py_FatalError(
Index: Python-3.5.4/Python/getplatform.c
===================================================================
--- Python-3.5.4.orig/Python/getplatform.c
+++ Python-3.5.4/Python/getplatform.c
@@ -10,3 +10,23 @@ Py_GetPlatform(void)
{
return PLATFORM;
}
+
+#ifndef ARCH
+#define ARCH "unknown"
+#endif
+
+const char *
+Py_GetArch(void)
+{
+ return ARCH;
+}
+
+#ifndef LIB
+#define LIB "lib"
+#endif
+
+const char *
+Py_GetLib(void)
+{
+ return LIB;
+}
Index: Python-3.5.4/Python/sysmodule.c
===================================================================
--- Python-3.5.4.orig/Python/sysmodule.c
+++ Python-3.5.4/Python/sysmodule.c
@@ -1827,6 +1827,10 @@ _PySys_Init(void)
PyUnicode_FromString(Py_GetCopyright()));
SET_SYS_FROM_STRING("platform",
PyUnicode_FromString(Py_GetPlatform()));
+ SET_SYS_FROM_STRING("arch",
+ PyUnicode_FromString(Py_GetArch()));
+ SET_SYS_FROM_STRING("lib",
+ PyUnicode_FromString(Py_GetLib()));
SET_SYS_FROM_STRING("executable",
PyUnicode_FromWideChar(
Py_GetProgramFullPath(), -1));
Index: Python-3.5.4/configure.ac
===================================================================
--- Python-3.5.4.orig/configure.ac
+++ Python-3.5.4/configure.ac
@@ -885,6 +885,41 @@ PLATDIR=plat-$MACHDEP
AC_SUBST(PLATDIR)
AC_SUBST(PLATFORM_TRIPLET)
+AC_SUBST(ARCH)
+AC_MSG_CHECKING(ARCH)
+ARCH=`uname -m`
+case $ARCH in
+i?86) ARCH=i386;;
+esac
+AC_MSG_RESULT($ARCH)
+
+AC_SUBST(LIB)
+AC_MSG_CHECKING(LIB)
+case $ac_sys_system in
+Linux*)
+ # Test if the compiler is 64bit
+ echo 'int i;' > conftest.$ac_ext
+ python_cv_cc_64bit_output=no
+ if AC_TRY_EVAL(ac_compile); then
+ case `/usr/bin/file conftest.$ac_objext` in
+ *"ELF 64"*)
+ python_cv_cc_64bit_output=yes
+ ;;
+ esac
+ fi
+ rm -rf conftest*
+ ;;
+esac
+
+case $ARCH:$python_cv_cc_64bit_output in
+ppc64:yes | powerpc64:yes | s390x:yes | sparc64:yes | x86_64:yes)
+ LIB="lib64"
+ ;;
+*:*)
+ LIB="lib"
+ ;;
+esac
+AC_MSG_RESULT($LIB)
AC_MSG_CHECKING([for -Wl,--no-as-needed])
save_LDFLAGS="$LDFLAGS"
Index: Python-3.5.4/setup.py
===================================================================
--- Python-3.5.4.orig/setup.py
+++ Python-3.5.4/setup.py
@@ -494,7 +494,7 @@ class PyBuildExt(build_ext):
# directories (i.e. '.' and 'Include') must be first. See issue
# 10520.
if not cross_compiling:
- add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
+ add_dir_to_list(self.compiler.library_dirs, os.path.join('/usr/local', sys.lib))
add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
# only change this for cross builds for 3.3, issues on Mageia
if cross_compiling:
@@ -552,8 +552,7 @@ class PyBuildExt(build_ext):
# be assumed that no additional -I,-L directives are needed.
if not cross_compiling:
lib_dirs = self.compiler.library_dirs + [
- '/lib64', '/usr/lib64',
- '/lib', '/usr/lib',
+ '/' + sys.lib, '/usr/' + sys.lib,
]
inc_dirs = self.compiler.include_dirs + ['/usr/include']
else:
@@ -745,11 +744,11 @@ class PyBuildExt(build_ext):
elif curses_library:
readline_libs.append(curses_library)
elif self.compiler.find_library_file(lib_dirs +
- ['/usr/lib/termcap'],
+ ['/usr/'+sys.lib+'/termcap'],
'termcap'):
readline_libs.append('termcap')
exts.append( Extension('readline', ['readline.c'],
- library_dirs=['/usr/lib/termcap'],
+ library_dirs=['/usr/'+sys.lib+'/termcap'],
extra_link_args=readline_extra_link_args,
libraries=readline_libs) )
else:

View File

@@ -109,7 +109,7 @@
"core"
],
"files": [
"${bindir}/2to3-*",
"${bindir}/2to3*",
"${libdir}/python${PYTHON_MAJMIN}/lib2to3"
],
"cached": []
@@ -117,24 +117,18 @@
"asyncio": {
"summary": "Python Asynchronous I/",
"rdepends": [
"compression",
"core",
"crypt",
"io",
"logging",
"math",
"multiprocessing",
"netclient",
"pickle",
"shell",
"stringold",
"threading",
"unixadmin"
"numbers",
"stringold"
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/asyncio",
"${libdir}/python${PYTHON_MAJMIN}/concurrent",
"${libdir}/python${PYTHON_MAJMIN}/concurrent/futures"
"${libdir}/python${PYTHON_MAJMIN}/concurrent/futures",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_asyncio.*.so"
],
"cached": []
},
@@ -174,19 +168,7 @@
"compile": {
"summary": "Python bytecode compilation support",
"rdepends": [
"asyncio",
"compression",
"core",
"crypt",
"io",
"logging",
"math",
"multiprocessing",
"pickle",
"shell",
"stringold",
"threading",
"unixadmin"
"core"
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/compileall.py",
@@ -239,7 +221,7 @@
"${libdir}/python${PYTHON_MAJMIN}/_collections_abc.py",
"${libdir}/python${PYTHON_MAJMIN}/_markupbase.py",
"${libdir}/python${PYTHON_MAJMIN}/_sitebuiltins.py",
"${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata.py",
"${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata*.py",
"${libdir}/python${PYTHON_MAJMIN}/_weakrefset.py",
"${libdir}/python${PYTHON_MAJMIN}/abc.py",
"${libdir}/python${PYTHON_MAJMIN}/argparse.py",
@@ -413,9 +395,13 @@
"files": [
"${libdir}/python${PYTHON_MAJMIN}/crypt.py",
"${libdir}/python${PYTHON_MAJMIN}/hashlib.py",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_blake2.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_crypt.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_hashlib.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha256.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha3.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha1.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_md5.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha512.*.so"
],
"cached": [
@@ -506,8 +492,7 @@
"${libdir}/*.o",
"${libdir}/lib*${SOLIBSDEV}",
"${libdir}/pkgconfig",
"${libdir}/python${PYTHON_MAJMIN}/config*/Makefile",
"${libdir}/python${PYTHON_MAJMIN}/config*/Makefile/__pycache__"
"${prefix}/lib/python${PYTHON_MAJMIN}/config*/"
],
"rdepends": [
"core"
@@ -820,7 +805,9 @@
"multiprocessing": {
"summary": "Python multiprocessing support",
"rdepends": [
"core"
"core",
"io",
"pickle"
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_multiprocessing.*.so",
@@ -831,18 +818,14 @@
"netclient": {
"summary": "Python Internet Protocol clients",
"rdepends": [
"compression",
"core",
"crypt",
"ctypes",
"datetime",
"email",
"io",
"math",
"mime",
"shell",
"stringold",
"unixadmin"
"stringold"
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/base64.py",
@@ -850,6 +833,7 @@
"${libdir}/python${PYTHON_MAJMIN}/hmac.py",
"${libdir}/python${PYTHON_MAJMIN}/http",
"${libdir}/python${PYTHON_MAJMIN}/http/__pycache__",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_uuid.*.so",
"${libdir}/python${PYTHON_MAJMIN}/mimetypes.py",
"${libdir}/python${PYTHON_MAJMIN}/nntplib.py",
"${libdir}/python${PYTHON_MAJMIN}/poplib.py",
@@ -904,13 +888,16 @@
],
"files": [
"${libdir}/python${PYTHON_MAJMIN}/_pydecimal.py",
"${libdir}/python${PYTHON_MAJMIN}/contextvars.py",
"${libdir}/python${PYTHON_MAJMIN}/decimal.py",
"${libdir}/python${PYTHON_MAJMIN}/fractions.py",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_contextvars.*.so",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_decimal.*.so",
"${libdir}/python${PYTHON_MAJMIN}/numbers.py"
],
"cached": [
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/_pydecimal.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/contextvars.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/decimal.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/fractions.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/numbers.*.pyc"
@@ -1134,13 +1121,12 @@
"files": [
"${libdir}/python${PYTHON_MAJMIN}/_dummy_thread.py",
"${libdir}/python${PYTHON_MAJMIN}/_threading_local.py",
"${libdir}/python${PYTHON_MAJMIN}/dummy_threading.py",
"${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_queue.*.so",
"${libdir}/python${PYTHON_MAJMIN}/queue.py"
],
"cached": [
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/_dummy_thread.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/_threading_local.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/dummy_threading.*.pyc",
"${libdir}/python${PYTHON_MAJMIN}/__pycache__/queue.*.pyc"
]
},

View File

@@ -1,25 +0,0 @@
From 53ed216d7bf70dd2a925432b6805a701e5fc3e0e Mon Sep 17 00:00:00 2001
From: Jackie Huang <jackie.huang@windriver.com>
Date: Mon, 17 Nov 2014 06:44:47 +0000
Subject: [PATCH] python3 use CROSSPYTHONPATH for PYTHON_FOR_BUILD
Upstream-Status: Inappropriate [Cross compile specific]
Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
---
configure.ac | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Index: Python-3.5.4/configure.ac
===================================================================
--- Python-3.5.4.orig/configure.ac
+++ Python-3.5.4/configure.ac
@@ -73,7 +73,7 @@ if test "$cross_compiling" = yes; then
AC_MSG_ERROR([python$PACKAGE_VERSION interpreter not found])
fi
AC_MSG_RESULT($interp)
- PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib:$(srcdir)/Lib/$(PLATDIR) '$interp
+ PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(CROSSPYTHONPATH) '$interp
fi
elif test "$cross_compiling" = maybe; then
AC_MSG_ERROR([Cross compiling required --host=HOST-TUPLE and --build=ARCH])

View File

@@ -1,25 +0,0 @@
python3-native: run regen-importlib target correctly
regen-importlib depends on other regen- targets, so we must be sure to
run it after (most of) the others. In reality, we do not need to run it
at all since "make" will invoke it, if necessary. We do not want to
rely on that, though.
Upstream-Status: Pending
Signed-off-by: Joe Slater <joe.slater@windriver.com>
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -709,7 +709,8 @@ regen-importlib: Programs/_freeze_import
############################################################################
# Regenerate all generated files
-regen-all: regen-opcode regen-opcode-targets regen-typeslots regen-grammar regen-ast regen-importlib
+regen-all: regen-opcode regen-opcode-targets regen-typeslots regen-grammar regen-ast
+ $(MAKE) regen-importlib
############################################################################
# Special rules for object files

View File

@@ -1,50 +0,0 @@
From 8dad810f3a3d073f09ad72e1a3ee0a895eab2ca1 Mon Sep 17 00:00:00 2001
From: Robert Yang <liezhi.yang@windriver.com>
Date: Sun, 18 Jan 2015 19:05:36 -0800
Subject: [PATCH] setup.py:check cross_compiling when get FLAGS
Fixed when compile target pythnon3:
gcc -isystem/path/to/sysroots/x86_64-linux/usr/include \
-L=/path/to/sysroots/x86_64-linux/usr/lib
This is incorrect, the native sysroot should not be used by target
python3.
Upstream-Status: Pending
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
---
setup.py | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/setup.py b/setup.py
index e8339cd..83fd31f 100644
--- a/setup.py
+++ b/setup.py
@@ -238,7 +238,10 @@ class PyBuildExt(build_ext):
# unfortunately, distutils doesn't let us provide separate C and C++
# compilers
if compiler is not None:
- (ccshared,cflags) = sysconfig.get_config_vars('CCSHARED','CFLAGS')
+ if cross_compiling:
+ (ccshared,cflags) = (os.environ.get('CCSHARED') or '', os.environ.get('CFLAGS') or '')
+ else:
+ (ccshared,cflags) = sysconfig.get_config_vars('CCSHARED','CFLAGS')
args['compiler_so'] = compiler + ' ' + ccshared + ' ' + cflags
self.compiler.set_executables(**args)
@@ -457,7 +460,10 @@ class PyBuildExt(build_ext):
('LDFLAGS', '-R', self.compiler.runtime_library_dirs),
('LDFLAGS', '-L', self.compiler.library_dirs),
('CPPFLAGS', '-I', self.compiler.include_dirs)):
- env_val = sysconfig.get_config_var(env_var)
+ if cross_compiling:
+ env_val = os.environ.get(env_var)
+ else:
+ env_val = sysconfig.get_config_var(env_var)
if env_val:
# To prevent optparse from raising an exception about any
# options in env_val that it doesn't know about we strip out
--
1.7.9.5

View File

@@ -1,57 +0,0 @@
This patch removes various ways native system options can pass into the python
compilation and somehow break C modules.
Upstream-Status: Inappropriate [OE Specific]
RP 2012/04/23
Index: Python-2.7.2/setup.py
===================================================================
--- Python-2.7.2.orig/setup.py 2012-04-23 20:03:47.295582553 +0000
+++ Python-2.7.2/setup.py 2012-04-23 20:03:15.000000000 +0000
@@ -231,7 +231,13 @@
# compilers
if compiler is not None:
(ccshared,cflags) = sysconfig.get_config_vars('CCSHARED','CFLAGS')
- args['compiler_so'] = compiler + ' ' + ccshared + ' ' + cflags
+ # Need to filter out -isysroot from the flags. Ideally should
+ # figure out target flags here.
+ flags = []
+ for f in cflags.split():
+ if not f.startswith("-isystem"):
+ flags.append(f)
+ args['compiler_so'] = compiler + ' ' + ccshared + ' ' + ' '.join(flags)
self.compiler.set_executables(**args)
build_ext.build_extensions(self)
@@ -393,7 +399,6 @@
# into configure and stored in the Makefile (issue found on OS X 10.3).
for env_var, arg_name, dir_list in (
('LDFLAGS', '-R', self.compiler.runtime_library_dirs),
- ('LDFLAGS', '-L', self.compiler.library_dirs),
('CPPFLAGS', '-I', self.compiler.include_dirs)):
env_val = sysconfig.get_config_var(env_var)
if env_val:
@@ -419,16 +424,16 @@
for directory in reversed(options.dirs):
add_dir_to_list(dir_list, directory)
- if os.path.normpath(sys.prefix) != '/usr' \
- and not sysconfig.get_config_var('PYTHONFRAMEWORK'):
+# if os.path.normpath(sys.prefix) != '/usr' \
+# and not sysconfig.get_config_var('PYTHONFRAMEWORK'):
# OSX note: Don't add LIBDIR and INCLUDEDIR to building a framework
# (PYTHONFRAMEWORK is set) to avoid # linking problems when
# building a framework with different architectures than
# the one that is currently installed (issue #7473)
- add_dir_to_list(self.compiler.library_dirs,
- sysconfig.get_config_var("LIBDIR"))
- add_dir_to_list(self.compiler.include_dirs,
- sysconfig.get_config_var("INCLUDEDIR"))
+# add_dir_to_list(self.compiler.library_dirs,
+# sysconfig.get_config_var("LIBDIR"))
+# add_dir_to_list(self.compiler.include_dirs,
+# sysconfig.get_config_var("INCLUDEDIR"))
try:
have_unicode = unicode

View File

@@ -1,56 +0,0 @@
Upstream-Status: Backport
Signed-off-by: Ross Burton <ross.burton@intel.com>
From 4315389df3c4e8c1f94a18ab11a4b234762132b1 Mon Sep 17 00:00:00 2001
From: Antoine Pitrou <pitrou@free.fr>
Date: Mon, 23 Apr 2018 22:22:49 +0200
Subject: [PATCH] [3.6] bpo-33329: Fix multiprocessing regression on newer
glibcs (GH-6575) (GH-6582)
Starting with glibc 2.27.9000-xxx, sigaddset() can return EINVAL for some
reserved signal numbers between 1 and NSIG. The `range(1, NSIG)` idiom
is commonly used to select all signals for blocking with `pthread_sigmask`.
So we ignore the sigaddset() return value until we expose sigfillset()
to provide a better idiom.
(cherry picked from commit 25038ecfb665bef641abf8cb61afff7505b0e008)
---
.../next/Library/2018-04-23-13-21-39.bpo-33329.lQ-Eod.rst | 1 +
Modules/signalmodule.c | 14 ++++++++------
2 files changed, 9 insertions(+), 6 deletions(-)
create mode 100644 Misc/NEWS.d/next/Library/2018-04-23-13-21-39.bpo-33329.lQ-Eod.rst
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
index e0d06b434d..138e74e8a9 100644
--- a/Modules/signalmodule.c
+++ b/Modules/signalmodule.c
@@ -744,7 +744,6 @@ iterable_to_sigset(PyObject *iterable, sigset_t *mask)
int result = -1;
PyObject *iterator, *item;
long signum;
- int err;
sigemptyset(mask);
@@ -766,11 +765,14 @@ iterable_to_sigset(PyObject *iterable, sigset_t *mask)
Py_DECREF(item);
if (signum == -1 && PyErr_Occurred())
goto error;
- if (0 < signum && signum < NSIG)
- err = sigaddset(mask, (int)signum);
- else
- err = 1;
- if (err) {
+ if (0 < signum && signum < NSIG) {
+ /* bpo-33329: ignore sigaddset() return value as it can fail
+ * for some reserved signals, but we want the `range(1, NSIG)`
+ * idiom to allow selecting all valid signals.
+ */
+ (void) sigaddset(mask, (int)signum);
+ }
+ else {
PyErr_Format(PyExc_ValueError,
"signal number %ld out of range", signum);
goto error;
--
2.11.0

View File

@@ -1,37 +0,0 @@
# OpenEmbedded sitecustomize.py (C) 2002-2008 Michael 'Mickey' Lauer <mlauer@vanille-media.de>
# GPLv2 or later
# Version: 20081123
# Features:
# * set proper default encoding
# * enable readline completion in the interactive interpreter
# * load command line history on startup
# * save command line history on exit
import os
def __exithandler():
try:
readline.write_history_file( "%s/.python-history" % os.getenv( "HOME", "/tmp" ) )
except IOError:
pass
def __registerExitHandler():
import atexit
atexit.register( __exithandler )
def __enableReadlineSupport():
readline.set_history_length( 1000 )
readline.parse_and_bind( "tab: complete" )
try:
readline.read_history_file( "%s/.python-history" % os.getenv( "HOME", "/tmp" ) )
except IOError:
pass
import sys
try:
import rlcompleter, readline
except ImportError:
pass
else:
__registerExitHandler()
__enableReadlineSupport()

View File

@@ -1,97 +0,0 @@
The compiled .pyc files contain time stamp corresponding to the compile time.
This prevents binary reproducibility. This patch allows to achieve binary
reproducibility by overriding the build time stamp by the value
exported via SOURCE_DATE_EPOCH.
Upstream-Status: Backport
Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
From aeab488630fdb1b56a8d0b0c13fa88706b2afe9b Mon Sep 17 00:00:00 2001
From: "Bernhard M. Wiedemann" <bwiedemann@suse.de>
Date: Sat, 25 Feb 2017 06:42:28 +0100
Subject: [PATCH] bpo-29708: support SOURCE_DATE_EPOCH env var in py_compile
to allow for reproducible builds of python packages
See https://reproducible-builds.org/ for why this is good
and https://reproducible-builds.org/specs/source-date-epoch/
for the definition of this variable.
Background:
In some distributions like openSUSE, binary rpms contain precompiled .pyc files.
And packages like amqp or twisted dynamically generate .py files at build time
so those have the current time and that timestamp gets embedded
into the .pyc file header.
When we then adapt file timestamps in rpms to be constant,
the timestamp in the .pyc header will no more match
the .py timestamp in the filesystem.
The software will still work, but it will not use the .pyc file as it should.
---
Doc/library/py_compile.rst | 4 ++++
Lib/py_compile.py | 4 ++++
Lib/test/test_py_compile.py | 19 +++++++++++++++++++
3 files changed, 27 insertions(+)
diff --git a/Doc/library/py_compile.rst b/Doc/library/py_compile.rst
index 0af8fb1..841f3e8 100644
--- a/Doc/library/py_compile.rst
+++ b/Doc/library/py_compile.rst
@@ -53,6 +53,10 @@ byte-code cache files in the directory containing the source code.
:func:`compile` function. The default of ``-1`` selects the optimization
level of the current interpreter.
+ If the SOURCE_DATE_EPOCH environment variable is set, the .py file mtime
+ and timestamp entry in .pyc file header, will be limited to this value.
+ See https://reproducible-builds.org/specs/source-date-epoch/ for more info.
+
.. versionchanged:: 3.2
Changed default value of *cfile* to be :PEP:`3147`-compliant. Previous
default was *file* + ``'c'`` (``'o'`` if optimization was enabled).
diff --git a/Lib/py_compile.py b/Lib/py_compile.py
index 11c5b50..62dcdc7 100644
--- a/Lib/py_compile.py
+++ b/Lib/py_compile.py
@@ -137,6 +137,10 @@ def compile(file, cfile=None, dfile=None, doraise=False, optimize=-1):
except FileExistsError:
pass
source_stats = loader.path_stats(file)
+ sde = os.environ.get('SOURCE_DATE_EPOCH')
+ if sde and source_stats['mtime'] > int(sde):
+ source_stats['mtime'] = int(sde)
+ os.utime(file, (source_stats['mtime'], source_stats['mtime']))
bytecode = importlib._bootstrap_external._code_to_bytecode(
code, source_stats['mtime'], source_stats['size'])
mode = importlib._bootstrap_external._calc_mode(file)
diff --git a/Lib/test/test_py_compile.py b/Lib/test/test_py_compile.py
index 4a6caa5..3d09963 100644
--- a/Lib/test/test_py_compile.py
+++ b/Lib/test/test_py_compile.py
@@ -98,6 +98,25 @@ def test_bad_coding(self):
self.assertFalse(os.path.exists(
importlib.util.cache_from_source(bad_coding)))
+ def test_source_date_epoch(self):
+ testtime = 123456789
+ orig_sde = os.getenv("SOURCE_DATE_EPOCH")
+ os.environ["SOURCE_DATE_EPOCH"] = str(testtime)
+ py_compile.compile(self.source_path, self.pyc_path)
+ if orig_sde:
+ os.environ["SOURCE_DATE_EPOCH"] = orig_sde
+ else:
+ del os.environ["SOURCE_DATE_EPOCH"]
+ self.assertTrue(os.path.exists(self.pyc_path))
+ self.assertFalse(os.path.exists(self.cache_path))
+ statinfo = os.stat(self.source_path)
+ self.assertEqual(statinfo.st_mtime, testtime)
+ f = open(self.pyc_path, "rb")
+ f.read(4)
+ timebytes = f.read(4) # read timestamp from pyc header
+ f.close()
+ self.assertEqual(timebytes, (testtime).to_bytes(4, 'little'))
+
@unittest.skipIf(sys.flags.optimize > 0, 'test does not work with -O')
def test_double_dot_no_clobber(self):
# http://bugs.python.org/issue22966

View File

@@ -1,51 +0,0 @@
From fc93b3cc23b4f9698ae92a42986dbb02b6f19588 Mon Sep 17 00:00:00 2001
From: Robert Yang <liezhi.yang@windriver.com>
Date: Sun, 18 Jan 2015 06:29:50 -0800
Subject: [PATCH] sysconfig.py: add _PYTHON_PROJECT_SRC
python3 has introduced _PYTHON_PROJECT_BASE which is used for separate B
and S, but it doesn't work when compile Modules, the target python3 runs
python3-native's sysconfig to get srcdir which is the native's, there
would be errors when native's srcdir has been removed, add
_PYTHON_PROJECT_SRC to fix the problem.
Upstream-Status: Pending
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
---
Lib/distutils/sysconfig.py | 5 ++++-
Lib/sysconfig.py | 5 ++++-
2 files changed, 8 insertions(+), 2 deletions(-)
Index: Python-3.5.3/Lib/distutils/sysconfig.py
===================================================================
--- Python-3.5.3.orig/Lib/distutils/sysconfig.py
+++ Python-3.5.3/Lib/distutils/sysconfig.py
@@ -498,7 +498,10 @@ def get_config_vars(*args):
_config_vars['SO'] = SO
# Always convert srcdir to an absolute path
- srcdir = _config_vars.get('srcdir', project_base)
+ if "_PYTHON_PROJECT_SRC" in os.environ:
+ srcdir = os.path.abspath(os.environ["_PYTHON_PROJECT_SRC"])
+ else:
+ srcdir = _config_vars.get('srcdir', project_base)
if os.name == 'posix':
if python_build:
# If srcdir is a relative path (typically '.' or '..')
Index: Python-3.5.3/Lib/sysconfig.py
===================================================================
--- Python-3.5.3.orig/Lib/sysconfig.py
+++ Python-3.5.3/Lib/sysconfig.py
@@ -544,7 +544,10 @@ def get_config_vars(*args):
_CONFIG_VARS['userbase'] = _getuserbase()
# Always convert srcdir to an absolute path
- srcdir = _CONFIG_VARS.get('srcdir', _PROJECT_BASE)
+ if "_PYTHON_PROJECT_SRC" in os.environ:
+ srcdir = os.path.abspath(os.environ["_PYTHON_PROJECT_SRC"])
+ else:
+ srcdir = _CONFIG_VARS.get('srcdir', _PROJECT_BASE)
if os.name == 'posix':
if _PYTHON_BUILD:
# If srcdir is a relative path (typically '.' or '..')

View File

@@ -1,35 +0,0 @@
Dont search hardcoded paths, we might be doing a cross-build
Use '=' in-front to let compiler append sysroot, if it can
Should fix things like
configure:6972: arm-angstrom-linux-gnueabi-gcc -march=armv7-a -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a8 -DNDEBUG -fno-inline -D__SOFTFP__ --sysroot=/build/v2013.06/build/tmp-angstrom_v2013_06-eglibc/sysroots/beaglebone -c -O2 -pipe -g -feliminate-unused-debug-types -I/usr/include/ncursesw conftest.c >&5
cc1: warning: include location "/usr/include/ncursesw" is unsafe for cross-compilation [-Wpoison-system-directories]
Signed-off-by: Khem Raj
Upstream-Status: Pending
Index: Python-3.3.2/setup.py
===================================================================
--- Python-3.3.2.orig/setup.py 2013-07-30 01:30:48.000000000 -0700
+++ Python-3.3.2/setup.py 2013-07-30 01:41:11.697862723 -0700
@@ -1210,7 +1210,7 @@
panel_library = 'panel'
if curses_library == 'ncursesw':
curses_defines.append(('HAVE_NCURSESW', '1'))
- curses_includes.append('/usr/include/ncursesw')
+ curses_includes.append('=/usr/include/ncursesw')
# Bug 1464056: If _curses.so links with ncursesw,
# _curses_panel.so must link with panelw.
panel_library = 'panelw'
@@ -1819,7 +1819,7 @@
if host_platform == 'darwin':
# OS X 10.5 comes with libffi.dylib; the include files are
# in /usr/include/ffi
- inc_dirs.append('/usr/include/ffi')
+ inc_dirs.append('=/usr/include/ffi')
ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")]
if not ffi_inc or ffi_inc[0] == '':

View File

@@ -1,52 +0,0 @@
From 5d6509313198ec9b686cad50b002212e4344004b Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Fri, 11 Mar 2016 01:15:45 -0500
Subject: [PATCH] configure.ac: tweak MULTIARCH for powerpc-linux-gnuspe
For p1022ds bsp, the MULTIARCH is powerpc-linux-gnuspev1 and
python3 did not recognize the extra 'v1' which caused python3
configure error for the platform triplet.
Q:Why Python3 check platform triplet?
A:Under Linux, GNU/KFreeBSD and the Hurd, C extensions now include
the architecture triplet in the extension name, to make it easy to
test builds for different ABIs in the same working tree.
Here is the generated C extensions which take platform triplet into account.
...
|image/usr/lib/python3.5/lib-dynload/_datetime.cpython-35m-powerpc-linux-gnuspe.so
...
https://bugs.python.org/issue22980
https://www.python.org/dev/peps/pep-3149/
https://bugs.python.org/review/22980/patch/14593/54808
Upstream-Status: Pending
Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>
---
configure.ac | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/configure.ac b/configure.ac
index 9eb3d22..c34a9a0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -724,6 +724,13 @@ fi
MULTIARCH=$($CC --print-multiarch 2>/dev/null)
+
+# Tweak MULTIARCH
+if test x$MULTIARCH = xpowerpc-linux-gnuspev1
+then
+ MULTIARCH="powerpc-linux-gnuspe"
+fi
+
AC_SUBST(MULTIARCH)
AC_MSG_CHECKING([for the platform triplet based on compiler characteristics])
--
1.9.1

View File

@@ -1,40 +0,0 @@
From 7362464383bbd54f8e6be4389f2c74c0717bc6e1 Mon Sep 17 00:00:00 2001
From: Serhey Popovych <serhe.popovych@gmail.com>
Date: Sat, 8 Dec 2018 11:24:06 -0500
Subject: [PATCH] configure.ac: tweak MULTIARCH for powerpc-linux-musl
For musl builds, the MULTIARCH is powerpc-linux-musl and configure.ac
does not have lines to recognize it causing configure error for the
platform triplet when building for powerpc 32bit.
This is feature described in PEP-3149 and to prevent possible runtime
compatibility issues we map powerpc-linux-musl to powerpc-linux-gnu.
Look at similar change by Hongxu Jia <hongxu.jia@> presended in
tweak-MULTIARCH-for-powerpc-linux-gnuspe.patch to handle p1022ds BSP
builds.
Upstream-Status: Pending
Signed-off-by: Serhey Popovych <serhe.popovych@gmail.com>
---
configure.ac | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/configure.ac b/configure.ac
index 95c98d1..1a4d8aa 100644
--- a/configure.ac
+++ b/configure.ac
@@ -752,6 +752,10 @@ if test x$MULTIARCH = xpowerpc-linux-gnuspev1
then
MULTIARCH="powerpc-linux-gnuspe"
fi
+if test x$MULTIARCH = xpowerpc-linux-musl
+then
+ MULTIARCH="powerpc-linux-gnu"
+fi
AC_SUBST(MULTIARCH)
--
2.7.4

View File

@@ -1,35 +0,0 @@
Upstream-Status: Pending
The CC variable,sometimes like:"x86_64-poky-linux-gcc -m64 --sysroot=/${TMPDIR}/sysroots/qemux86-64", contains option information.
This will lead to wrong compiler name "qemux86-64" rather than "x86_64-poky-linux-gcc" when python finding the compiler name.
Secondly add -L=<path> this way linker will be able to resolve /usr/lib w.r.t sysroot and not
use hardcoded /usr/lib to look for libs which is wrong in cross compile environment and this will work
ok on native systems too since sysroot for native compilers is /
Signed-off-by: Mei Lei <lei.mei@intel.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Index: Python-3.3.2/Lib/distutils/unixccompiler.py
===================================================================
--- Python-3.3.2.orig/Lib/distutils/unixccompiler.py 2013-05-15 09:32:54.000000000 -0700
+++ Python-3.3.2/Lib/distutils/unixccompiler.py 2013-08-01 00:58:18.629056286 -0700
@@ -202,7 +202,9 @@
# ccompiler.py.
def library_dir_option(self, dir):
- return "-L" + dir
+ if dir.startswith("/"):
+ return "-L=" + dir
+ return "-L" + dir
def _is_gcc(self, compiler_name):
return "gcc" in compiler_name or "g++" in compiler_name
@@ -221,7 +221,7 @@
# this time, there's no way to determine this information from
# the configuration data stored in the Python installation, so
# we use this hack.
- compiler = os.path.basename(sysconfig.get_config_var("CC"))
+ compiler = sysconfig.get_config_var("CC")
if sys.platform[:6] == "darwin":
# MacOSX's linker doesn't understand the -R flag at all
return "-L" + dir