mirror of
https://git.yoctoproject.org/poky
synced 2026-02-05 16:28:43 +01:00
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:
committed by
Richard Purdie
parent
cd6c61a261
commit
e2c3247c23
@@ -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:
|
||||
@@ -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",
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
@@ -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
|
||||
@@ -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:
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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])
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"])
|
||||
|
||||
@@ -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
|
||||
-
|
||||
|
||||
17
meta/recipes-devtools/python/python3/check_build_completeness.py
Executable file
17
meta/recipes-devtools/python/python3/check_build_completeness.py
Executable 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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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..
|
||||
@@ -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
|
||||
|
||||
@@ -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')
|
||||
@@ -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:
|
||||
@@ -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"
|
||||
]
|
||||
},
|
||||
|
||||
@@ -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])
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
@@ -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
|
||||
@@ -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 '..')
|
||||
@@ -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] == '':
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user