[OE-core] [PATCH v8] python3{,-native}: update to 3.7.0

Jens Rehsack sno at netbsd.org
Fri Nov 2 16:05:31 UTC 2018



> Am 02.11.2018 um 16:57 schrieb Burton, Ross <ross.burton at intel.com>:
> 
> It appears that Python 3.6 or 3.7 removed os.errno as an alias for
> errno, as this is failing in wic:
> 
> |   File "/home/ross/Yocto/poky/scripts/lib/wic/filemap.py", line 397,
> in _invoke_fiemap
> |     if err.errno == os.errno.EOPNOTSUPP:
> | AttributeError: module 'os' has no attribute 'errno'
> 
> Easily fixed, but obviously this wasn't used to build a wic image
> with.  How much testing has this upgrade had?

v8 didn't had the same amount of testing as v5 had - I built a lot of images
using wic with v5 (and run some python3 scripts on target).
But I can't say which python was used by that test ...

However - I detected I made a mistake somewhere between v3 and v4
during rebase (which explains why Alejandro is still complaining ...), so
I decided instead of doing a v9 I go ahead to 3.7.1 update ...

Are there some reasonable tests I can run on legacy code to see what
needs updates after that?

Cheers,
Jens

> Ross
> On Wed, 31 Oct 2018 at 14:47, Jens Rehsack <sno at netbsd.org> wrote:
>> 
>> Update python3 to recent 3.7.0 release.
>> 
>> Details about new features and bug-fixes can be taken from
>> * https://docs.python.org/3/whatsnew/3.7.html
>> * https://docs.python.org/3/whatsnew/3.6.html
>> 
>> Remove patches when they were fixed upstream and rebase the
>> remaining ones. If necessary, the patches are adopted to
>> keep the idea when upstream code was changed. Also remove
>> backports from 3.6 and 3.7 into 3.5.6 codebase for TLS
>> and multiprocessing.
>> 
>> Open TODO: track patches in a -STABLE rebased git branch for
>> easier rebasing or upstream submitting.
>> 
>> Enhancement requests for Yocto project
>> * https://bugzilla.yoctoproject.org/show_bug.cgi?id=12375
>> * https://bugzilla.yoctoproject.org/show_bug.cgi?id=12901
>> are solved by this.
>> 
>> Rebased until e349b239c8833bcdad9b1ff1a0702ace2db71959
>> 
>> Signed-off-by: Jens Rehsack <sno at netbsd.org>
>> ---
>> meta/classes/python3-dir.bbclass              |   6 +-
>> .../python/python3-native_3.5.6.bb            | 100 ------
>> .../python/python3-native_3.7.0.bb            |  73 ++++
>> meta/recipes-devtools/python/python3.inc      |  65 +++-
>> ...hell-version-of-python-config-that-w.patch |  21 +-
>> ..._sysconfigdata.py-to-initialize-dist.patch |  66 ----
>> ...ontext-has-improved-default-settings.patch | 272 ---------------
>> ...d-target-to-split-profile-generation.patch |  40 ---
>> ...S-1.3-cipher-suites-and-OP_NO_TLSv1_.patch | 227 ------------
>> ...for-TLS-1.3-and-OpenSSL-1.1.1-GH-876.patch | 173 ---------
>> ....3-ciphers-for-OpenSSL-1.1.1-GH-6976.patch | 110 ------
>> ...ALPN-changes-for-OpenSSL-1.1.0f-2305.patch |  68 ----
>> .../python3/03-fix-tkinter-detection.patch    |  12 +-
>> .../python3/030-fixup-include-dirs.patch      |   9 -
>> .../080-distutils-dont_adjust_files.patch     |   4 +-
>> .../python/python3/150-fix-setupterm.patch    |  17 -
>> ...GS-for-extensions-when-cross-compili.patch |  53 ++-
>> .../python3/avoid-ncursesw-include-path.patch |  18 +-
>> .../python3/avoid_warning_about_tkinter.patch |  18 +-
>> .../python3/configure.ac-fix-LIBPL.patch      |  21 +-
>> .../python/python3/float-endian.patch         |   9 +-
>> ...ssing-libraries-to-Extension-for-mul.patch |  26 +-
>> .../python/python3/python-3.3-multilib.patch  | 241 +++++++------
>> .../python/python3/python3-manifest.json      |  35 +-
>> ...CROSSPYTHONPATH-for-PYTHON_FOR_BUILD.patch |  17 +-
>> .../python/python3/regen-all.patch            |  25 --
>> .../python/python3/signal.patch               |  56 ---
>> ...port_SOURCE_DATE_EPOCH_in_py_compile.patch |  36 +-
>> .../python3/sysroot-include-headers.patch     |  23 +-
>> .../python3/uuid_when_cross_compiling.patch   |  24 ++
>> meta/recipes-devtools/python/python3_3.5.6.bb | 329 ------------------
>> meta/recipes-devtools/python/python3_3.7.0.bb | 300 ++++++++++++++++
>> 32 files changed, 723 insertions(+), 1771 deletions(-)
>> delete mode 100644 meta/recipes-devtools/python/python3-native_3.5.6.bb
>> create mode 100644 meta/recipes-devtools/python/python3-native_3.7.0.bb
>> delete mode 100644 meta/recipes-devtools/python/python3/0001-Issue-21272-Use-_sysconfigdata.py-to-initialize-dist.patch
>> delete mode 100644 meta/recipes-devtools/python/python3/0001-Issue-28043-SSLContext-has-improved-default-settings.patch
>> delete mode 100644 meta/recipes-devtools/python/python3/0002-Makefile-add-target-to-split-profile-generation.patch
>> delete mode 100644 meta/recipes-devtools/python/python3/0002-bpo-29136-Add-TLS-1.3-cipher-suites-and-OP_NO_TLSv1_.patch
>> delete mode 100644 meta/recipes-devtools/python/python3/0003-bpo-32947-Fixes-for-TLS-1.3-and-OpenSSL-1.1.1-GH-876.patch
>> delete mode 100644 meta/recipes-devtools/python/python3/0004-bpo-33570-TLS-1.3-ciphers-for-OpenSSL-1.1.1-GH-6976.patch
>> delete mode 100644 meta/recipes-devtools/python/python3/0005-bpo-30714-ALPN-changes-for-OpenSSL-1.1.0f-2305.patch
>> delete mode 100644 meta/recipes-devtools/python/python3/150-fix-setupterm.patch
>> delete mode 100644 meta/recipes-devtools/python/python3/regen-all.patch
>> delete mode 100644 meta/recipes-devtools/python/python3/signal.patch
>> create mode 100644 meta/recipes-devtools/python/python3/uuid_when_cross_compiling.patch
>> delete mode 100644 meta/recipes-devtools/python/python3_3.5.6.bb
>> create mode 100644 meta/recipes-devtools/python/python3_3.7.0.bb
>> 
>> diff --git a/meta/classes/python3-dir.bbclass b/meta/classes/python3-dir.bbclass
>> index 06bb046d9c..ad7ea8dd9a 100644
>> --- a/meta/classes/python3-dir.bbclass
>> +++ b/meta/classes/python3-dir.bbclass
>> @@ -1,4 +1,8 @@
>> -PYTHON_BASEVERSION = "3.5"
>> +PYTHON_BASEVERSION = "3.7"
>> +# [d][m][u]
>> +# d: py_debug
>> +# m: my_malloc
>> +# u: wide-char unicode
>> PYTHON_ABI = "m"
>> PYTHON_DIR = "python${PYTHON_BASEVERSION}"
>> PYTHON_PN = "python3"
>> diff --git a/meta/recipes-devtools/python/python3-native_3.5.6.bb b/meta/recipes-devtools/python/python3-native_3.5.6.bb
>> deleted file mode 100644
>> index d5953cf4bb..0000000000
>> --- a/meta/recipes-devtools/python/python3-native_3.5.6.bb
>> +++ /dev/null
>> @@ -1,100 +0,0 @@
>> -require recipes-devtools/python/python3.inc
>> -
>> -DISTRO_SRC_URI ?= "file://sitecustomize.py"
>> -DISTRO_SRC_URI_linuxstdbase = ""
>> -SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.xz \
>> -file://12-distutils-prefix-is-inside-staging-area.patch \
>> -file://python-config.patch \
>> -file://030-fixup-include-dirs.patch \
>> -file://070-dont-clean-ipkg-install.patch \
>> -file://080-distutils-dont_adjust_files.patch \
>> -file://130-readline-setup.patch \
>> -file://150-fix-setupterm.patch \
>> -file://python-3.3-multilib.patch \
>> -file://03-fix-tkinter-detection.patch \
>> -file://avoid_warning_about_tkinter.patch \
>> -file://0001-h2py-Fix-issue-13032-where-it-fails-with-UnicodeDeco.patch \
>> -file://sysroot-include-headers.patch \
>> -file://unixccompiler.patch \
>> -${DISTRO_SRC_URI} \
>> -file://sysconfig.py-add-_PYTHON_PROJECT_SRC.patch \
>> -file://setup.py-check-cross_compiling-when-get-FLAGS.patch \
>> -file://0001-Do-not-use-the-shell-version-of-python-config-that-w.patch \
>> -file://support_SOURCE_DATE_EPOCH_in_py_compile.patch \
>> -file://regen-all.patch \
>> -file://0001-Issue-28043-SSLContext-has-improved-default-settings.patch \
>> -file://0002-bpo-29136-Add-TLS-1.3-cipher-suites-and-OP_NO_TLSv1_.patch \
>> -file://0003-bpo-32947-Fixes-for-TLS-1.3-and-OpenSSL-1.1.1-GH-876.patch \
>> -file://0004-bpo-33570-TLS-1.3-ciphers-for-OpenSSL-1.1.1-GH-6976.patch \
>> -file://0005-bpo-30714-ALPN-changes-for-OpenSSL-1.1.0f-2305.patch \
>> -"
>> -
>> -EXTRANATIVEPATH += "bzip2-native"
>> -DEPENDS = "openssl-native bzip2-replacement-native zlib-native readline-native sqlite3-native gdbm-native"
>> -
>> -inherit native
>> -
>> -EXTRA_OECONF_append = " --bindir=${bindir}/${PN} --without-ensurepip"
>> -
>> -EXTRA_OEMAKE = '\
>> -  LIBC="" \
>> -  STAGING_LIBDIR=${STAGING_LIBDIR_NATIVE} \
>> -  STAGING_INCDIR=${STAGING_INCDIR_NATIVE} \
>> -  LIB=${baselib} \
>> -  ARCH=${TARGET_ARCH} \
>> -'
>> -
>> -do_configure_append() {
>> -       autoreconf --verbose --install --force --exclude=autopoint ../Python-${PV}/Modules/_ctypes/libffi
>> -       sed -i -e 's,#define HAVE_GETRANDOM 1,/\* #undef HAVE_GETRANDOM \*/,' ${B}/pyconfig.h
>> -}
>> -
>> -# Regenerate all of the generated files
>> -# This ensures that pgen and friends get created during the compile phase
>> -#
>> -do_compile_prepend() {
>> -    # Assuming https://bugs.python.org/issue33080 has been addressed in Makefile.
>> -    oe_runmake regen-all
>> -}
>> -
>> -do_install() {
>> -       install -d ${D}${libdir}/pkgconfig
>> -       oe_runmake 'DESTDIR=${D}' install
>> -       if [ -e ${WORKDIR}/sitecustomize.py ]; then
>> -               install -m 0644 ${WORKDIR}/sitecustomize.py ${D}/${libdir}/python${PYTHON_MAJMIN}
>> -       fi
>> -       install -d ${D}${bindir}/${PN}
>> -       install -m 0755 Parser/pgen ${D}${bindir}/${PN}
>> -
>> -       # Make sure we use /usr/bin/env python
>> -       for PYTHSCRIPT in `grep -rIl ${bindir}/${PN}/python ${D}${bindir}/${PN}`; do
>> -               sed -i -e '1s|^#!.*|#!/usr/bin/env python3|' $PYTHSCRIPT
>> -       done
>> -
>> -        # Add a symlink to the native Python so that scripts can just invoke
>> -        # "nativepython" and get the right one without needing absolute paths
>> -        # (these often end up too long for the #! parser in the kernel as the
>> -        # buffer is 128 bytes long).
>> -        ln -s python3-native/python3 ${D}${bindir}/nativepython3
>> -}
>> -
>> -python(){
>> -
>> -    # Read JSON manifest
>> -    import json
>> -    pythondir = d.getVar('THISDIR',True)
>> -    with open(pythondir+'/python3/python3-manifest.json') as manifest_file:
>> -        python_manifest=json.load(manifest_file)
>> -
>> -    rprovides = d.getVar('RPROVIDES').split()
>> -
>> -    # Hardcoded since it cant be python3-native-foo, should be python3-foo-native
>> -    pn = 'python3'
>> -
>> -    for key in python_manifest:
>> -        pypackage = pn + '-' + key + '-native'
>> -        if pypackage not in rprovides:
>> -              rprovides.append(pypackage)
>> -
>> -    d.setVar('RPROVIDES', ' '.join(rprovides))
>> -}
>> diff --git a/meta/recipes-devtools/python/python3-native_3.7.0.bb b/meta/recipes-devtools/python/python3-native_3.7.0.bb
>> new file mode 100644
>> index 0000000000..3ef9f0a5e3
>> --- /dev/null
>> +++ b/meta/recipes-devtools/python/python3-native_3.7.0.bb
>> @@ -0,0 +1,73 @@
>> +require recipes-devtools/python/python3.inc
>> +
>> +SRC_URI += "\
>> +    file://12-distutils-prefix-is-inside-staging-area.patch \
>> +    file://0001-Do-not-use-the-shell-version-of-python-config-that-w.patch \
>> +"
>> +
>> +EXTRANATIVEPATH += "bzip2-native"
>> +DEPENDS = "openssl-native libffi-native bzip2-replacement-native zlib-native \
>> +           util-linux-native readline-native sqlite3-native gdbm-native \
>> +"
>> +
>> +inherit native
>> +
>> +EXTRA_OECONF_append = " --bindir=${bindir}/${PN} --without-ensurepip"
>> +
>> +EXTRA_OEMAKE = '\
>> +  LIBC="" \
>> +  STAGING_LIBDIR=${STAGING_LIBDIR_NATIVE} \
>> +  STAGING_INCDIR=${STAGING_INCDIR_NATIVE} \
>> +  LIB=${baselib} \
>> +  ARCH=${TARGET_ARCH} \
>> +'
>> +
>> +# Regenerate all of the generated files
>> +# This ensures that pgen and friends get created during the compile phase
>> +#
>> +do_compile_prepend() {
>> +    # Assuming https://bugs.python.org/issue33080 has been addressed in Makefile.
>> +    oe_runmake regen-all
>> +}
>> +
>> +do_install() {
>> +       install -d ${D}${libdir}/pkgconfig
>> +       oe_runmake 'DESTDIR=${D}' install
>> +       if [ -e ${WORKDIR}/sitecustomize.py ]; then
>> +               install -m 0644 ${WORKDIR}/sitecustomize.py ${D}/${libdir}/python${PYTHON_MAJMIN}
>> +       fi
>> +       install -d ${D}${bindir}/${PN}
>> +       install -m 0755 Parser/pgen ${D}${bindir}/${PN}
>> +
>> +       # Make sure we use /usr/bin/env python
>> +       for PYTHSCRIPT in `grep -rIl ${bindir}/${PN}/python ${D}${bindir}/${PN}`; do
>> +               sed -i -e '1s|^#!.*|#!/usr/bin/env python3|' $PYTHSCRIPT
>> +       done
>> +
>> +        # Add a symlink to the native Python so that scripts can just invoke
>> +        # "nativepython" and get the right one without needing absolute paths
>> +        # (these often end up too long for the #! parser in the kernel as the
>> +        # buffer is 128 bytes long).
>> +        ln -s python3-native/python3 ${D}${bindir}/nativepython3
>> +}
>> +
>> +python(){
>> +
>> +    # Read JSON manifest
>> +    import json
>> +    pythondir = d.getVar('THISDIR',True)
>> +    with open(pythondir+'/python3/python3-manifest.json') as manifest_file:
>> +        python_manifest=json.load(manifest_file)
>> +
>> +    rprovides = d.getVar('RPROVIDES').split()
>> +
>> +    # Hardcoded since it cant be python3-native-foo, should be python3-foo-native
>> +    pn = 'python3'
>> +
>> +    for key in python_manifest:
>> +        pypackage = pn + '-' + key + '-native'
>> +        if pypackage not in rprovides:
>> +              rprovides.append(pypackage)
>> +
>> +    d.setVar('RPROVIDES', ' '.join(rprovides))
>> +}
>> diff --git a/meta/recipes-devtools/python/python3.inc b/meta/recipes-devtools/python/python3.inc
>> index f565b3f171..b0fc0144a4 100644
>> --- a/meta/recipes-devtools/python/python3.inc
>> +++ b/meta/recipes-devtools/python/python3.inc
>> @@ -3,41 +3,74 @@ HOMEPAGE = "http://www.python.org"
>> LICENSE = "PSFv2"
>> SECTION = "devel/python"
>> 
>> -# TODO Remove this when we upgrade
>> -INC_PR = "r1"
>> -PR = "${INC_PR}.0"
>> +PYTHON_MAJMIN = "3.7"
>> +DISTRO_SRC_URI ?= "file://sitecustomize.py"
>> +DISTRO_SRC_URI_linuxstdbase = ""
>> +SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.xz \
>> +    file://python-config.patch \
>> +    file://python-3.3-multilib.patch \
>> +    file://03-fix-tkinter-detection.patch \
>> +    file://avoid_warning_about_tkinter.patch \
>> +    file://unixccompiler.patch \
>> +    file://sysroot-include-headers.patch \
>> +    file://sysconfig.py-add-_PYTHON_PROJECT_SRC.patch \
>> +    file://setup.py-check-cross_compiling-when-get-FLAGS.patch \
>> +    file://030-fixup-include-dirs.patch \
>> +    file://070-dont-clean-ipkg-install.patch \
>> +    file://080-distutils-dont_adjust_files.patch \
>> +    file://130-readline-setup.patch \
>> +    file://0001-h2py-Fix-issue-13032-where-it-fails-with-UnicodeDeco.patch \
>> +    ${DISTRO_SRC_URI} \
>> +    file://support_SOURCE_DATE_EPOCH_in_py_compile.patch \
>> +    file://Use-correct-CFLAGS-for-extensions-when-cross-compili.patch \
>> +"
>> 
>> -LIC_FILES_CHKSUM = "file://LICENSE;md5=b6ec515b22618f55fa07276b897bacea"
>> +SRC_URI[md5sum] = "eb8c2a6b1447d50813c02714af4681f3"
>> +SRC_URI[sha256sum] = "0382996d1ee6aafe59763426cf0139ffebe36984474d0ec4126dd1c40a8b3549"
>> 
>> -# TODO consolidate patch set
>> -SRC_URI[md5sum] = "f5a99f765e765336a3ebbb2a24ca2be3"
>> -SRC_URI[sha256sum] = "f55cde04f521f273c7cba08912921cc5642cfc15ca7b22d5829f0aff4371155f"
>> +LIC_FILES_CHKSUM = "file://LICENSE;md5=f257cc14f81685691652a3d3e1b5d754"
>> 
>> # exclude pre-releases for both python 2.x and 3.x
>> UPSTREAM_CHECK_REGEX = "[Pp]ython-(?P<pver>\d+(\.\d+)+).tar"
>> 
>> -CVE_PRODUCT = "python"
>> -
>> -PYTHON_MAJMIN = "3.5"
>> -PYTHON_BINABI = "${PYTHON_MAJMIN}m"
>> -
>> S = "${WORKDIR}/Python-${PV}"
>> 
>> -inherit autotools bluetooth pkgconfig
>> +CVE_PRODUCT = "python"
>> +
>> +inherit autotools bluetooth pkgconfig python3-dir
>> 
>> EXTRA_OECONF = "\
>> -  --with-threads \
>>   --with-pymalloc \
>>   --without-cxx-main \
>> -  --with-signal-module \
>>   --enable-shared \
>>   --enable-ipv6=${@bb.utils.contains('DISTRO_FEATURES', 'ipv6', 'yes', 'no', d)} \
>> "
>> 
>> PACKAGECONFIG[bluetooth] = ",ac_cv_header_bluetooth_bluetooth_h=no ac_cv_header_bluetooth_h=no,${BLUEZ}"
>> 
>> +do_configure_prepend() {
>> +       libdirleaf="$(echo ${libdir} | sed -e 's:${prefix}/::')"
>> +       sed -i -e "s:SEDMELIBLEAF:${libdirleaf}:g" \
>> +               ${S}/configure.ac
>> +}
>> +
>> +do_install_prepend() {
>> +       MAKESETTINGS="$(egrep '^(ABIFLAGS|MULTIARCH)=' ${B}/Makefile | sed -E -e 's/[[:space:]]//g' -e 's/=/="/' -e 's/$/"/')"
>> +       eval ${MAKESETTINGS}
>> +       if test "${ABIFLAGS}" != "${PYTHON_ABI}"; then
>> +           die "do_install: configure determined ABIFLAGS '${ABIFLAGS}' != '${PYTHON_ABI}' from python3-dir.bbclass"
>> +       fi
>> +       if test "x${BUILD_OS}" = "x${TARGET_OS}"; then
>> +               # no cross-compile at all
>> +               _PYTHON_SYSCONFIGDATA_NAME=${PYTHON_ABI}_${TARGET_OS}_${MULTIARCH}
>> +       else
>> +               # at the very moment, it's the only available target
>> +               _PYTHON_SYSCONFIGDATA_NAME=${PYTHON_ABI}_linux_${MULTIARCH}
>> +       fi
>> +}
>> +
>> do_install_append () {
>>        sed -i -e 's:${HOSTTOOLS_DIR}/install:install:g' \
>>                -e 's:${HOSTTOOLS_DIR}/mkdir:mkdir:g' \
>> -               ${D}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata.py
>> +               ${D}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata_${_PYTHON_SYSCONFIGDATA_NAME}.py
>> }
>> diff --git a/meta/recipes-devtools/python/python3/0001-Do-not-use-the-shell-version-of-python-config-that-w.patch b/meta/recipes-devtools/python/python3/0001-Do-not-use-the-shell-version-of-python-config-that-w.patch
>> index 8ea3f03fe0..aac34533ef 100644
>> --- a/meta/recipes-devtools/python/python3/0001-Do-not-use-the-shell-version-of-python-config-that-w.patch
>> +++ b/meta/recipes-devtools/python/python3/0001-Do-not-use-the-shell-version-of-python-config-that-w.patch
>> @@ -14,25 +14,22 @@ Signed-off-by: Alexander Kanavin <alex.kanavin at gmail.com>
>>  1 file changed, 3 insertions(+), 6 deletions(-)
>> 
>> diff --git a/Makefile.pre.in b/Makefile.pre.in
>> -index 236f005..5c4337f 100644
>> +index 31b4bcabb3..7da6d6941e 100644
>> --- a/Makefile.pre.in
>> +++ b/Makefile.pre.in
>> -@@ -1348,12 +1348,9 @@ python-config: $(srcdir)/Misc/python-config.in Misc/python-config.sh
>> +@@ -1415,12 +1415,9 @@ python-config: $(srcdir)/Misc/python-config.in Misc/python-config.sh
>>        sed -e "s, at 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
>> -
>> diff --git a/meta/recipes-devtools/python/python3/0001-Issue-21272-Use-_sysconfigdata.py-to-initialize-dist.patch b/meta/recipes-devtools/python/python3/0001-Issue-21272-Use-_sysconfigdata.py-to-initialize-dist.patch
>> deleted file mode 100644
>> index d1c92e9eed..0000000000
>> --- a/meta/recipes-devtools/python/python3/0001-Issue-21272-Use-_sysconfigdata.py-to-initialize-dist.patch
>> +++ /dev/null
>> @@ -1,66 +0,0 @@
>> -From bcddbf40c7f1b80336268cdddacc17369fb0ccea Mon Sep 17 00:00:00 2001
>> -From: Libin Dang <libin.dang at 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 at 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
>> -
>> diff --git a/meta/recipes-devtools/python/python3/0001-Issue-28043-SSLContext-has-improved-default-settings.patch b/meta/recipes-devtools/python/python3/0001-Issue-28043-SSLContext-has-improved-default-settings.patch
>> deleted file mode 100644
>> index 321b4afa12..0000000000
>> --- a/meta/recipes-devtools/python/python3/0001-Issue-28043-SSLContext-has-improved-default-settings.patch
>> +++ /dev/null
>> @@ -1,272 +0,0 @@
>> -From 758e7463c104f71b810c8588166747eeab6148d7 Mon Sep 17 00:00:00 2001
>> -From: Christian Heimes <christian at 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 at 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
>> -
>> diff --git a/meta/recipes-devtools/python/python3/0002-Makefile-add-target-to-split-profile-generation.patch b/meta/recipes-devtools/python/python3/0002-Makefile-add-target-to-split-profile-generation.patch
>> deleted file mode 100644
>> index 2b4ba316e4..0000000000
>> --- a/meta/recipes-devtools/python/python3/0002-Makefile-add-target-to-split-profile-generation.patch
>> +++ /dev/null
>> @@ -1,40 +0,0 @@
>> -From 98586d6dc598e40b8b821b0dde57599e188a7ca4 Mon Sep 17 00:00:00 2001
>> -From: Anuj Mittal <anuj.mittal at 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 at 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
>> -
>> diff --git a/meta/recipes-devtools/python/python3/0002-bpo-29136-Add-TLS-1.3-cipher-suites-and-OP_NO_TLSv1_.patch b/meta/recipes-devtools/python/python3/0002-bpo-29136-Add-TLS-1.3-cipher-suites-and-OP_NO_TLSv1_.patch
>> deleted file mode 100644
>> index d48cad7586..0000000000
>> --- a/meta/recipes-devtools/python/python3/0002-bpo-29136-Add-TLS-1.3-cipher-suites-and-OP_NO_TLSv1_.patch
>> +++ /dev/null
>> @@ -1,227 +0,0 @@
>> -From e950ea68dab006944af194c9910b8f2341d1437d Mon Sep 17 00:00:00 2001
>> -From: Christian Heimes <christian at 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 at python.org>.
>> -(cherry picked from commit cb5b68abdeb1b1d56c581d5b4d647018703d61e3)
>> -
>> -Upstream-Status: Backport
>> -[https://github.com/python/cpython/commit/cb5b68abdeb1b1d56c581d5b4d647018703d61e3]
>> -
>> -Signed-off-by: Anuj Mittal <anuj.mittal at 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
>> -
>> diff --git a/meta/recipes-devtools/python/python3/0003-bpo-32947-Fixes-for-TLS-1.3-and-OpenSSL-1.1.1-GH-876.patch b/meta/recipes-devtools/python/python3/0003-bpo-32947-Fixes-for-TLS-1.3-and-OpenSSL-1.1.1-GH-876.patch
>> deleted file mode 100644
>> index 56d591d1b5..0000000000
>> --- a/meta/recipes-devtools/python/python3/0003-bpo-32947-Fixes-for-TLS-1.3-and-OpenSSL-1.1.1-GH-876.patch
>> +++ /dev/null
>> @@ -1,173 +0,0 @@
>> -From 170a614904febd14ff6cfd7a75c9bccc114b3948 Mon Sep 17 00:00:00 2001
>> -From: Christian Heimes <christian at 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 at python.org>
>> -
>> -Upstream-Status: Backport
>> -[https://github.com/python/cpython/commit/2a4ee8aa01d61b6a9c8e9c65c211e61bdb471826]
>> -
>> -Signed-off-by: Anuj Mittal <anuj.mittal at 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
>> -
>> diff --git a/meta/recipes-devtools/python/python3/0004-bpo-33570-TLS-1.3-ciphers-for-OpenSSL-1.1.1-GH-6976.patch b/meta/recipes-devtools/python/python3/0004-bpo-33570-TLS-1.3-ciphers-for-OpenSSL-1.1.1-GH-6976.patch
>> deleted file mode 100644
>> index b97d5501e1..0000000000
>> --- a/meta/recipes-devtools/python/python3/0004-bpo-33570-TLS-1.3-ciphers-for-OpenSSL-1.1.1-GH-6976.patch
>> +++ /dev/null
>> @@ -1,110 +0,0 @@
>> -From 0c9354362bfa5f90fbea8ff8237a1f1f5dba686f Mon Sep 17 00:00:00 2001
>> -From: Christian Heimes <christian at 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 at python.org>
>> -(cherry picked from commit e8eb6cb7920ded66abc5d284319a8539bdc2bae3)
>> -
>> -Co-authored-by: Christian Heimes <christian at 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 at 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
>> -
>> diff --git a/meta/recipes-devtools/python/python3/0005-bpo-30714-ALPN-changes-for-OpenSSL-1.1.0f-2305.patch b/meta/recipes-devtools/python/python3/0005-bpo-30714-ALPN-changes-for-OpenSSL-1.1.0f-2305.patch
>> deleted file mode 100644
>> index d609847204..0000000000
>> --- a/meta/recipes-devtools/python/python3/0005-bpo-30714-ALPN-changes-for-OpenSSL-1.1.0f-2305.patch
>> +++ /dev/null
>> @@ -1,68 +0,0 @@
>> -From 7b40cb7293cb14e5c7c8ed123efaf9acb33edae2 Mon Sep 17 00:00:00 2001
>> -From: Christian Heimes <christian at 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 at python.org>
>> -
>> -Upstream-Status: Backport
>> -[https://github.com/python/cpython/commit/7b40cb7293cb14e5c7c8ed123efaf9acb33edae2]
>> -
>> -Signed-off-by: Anuj Mittal <anuj.mittal at 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
>> -
>> diff --git a/meta/recipes-devtools/python/python3/03-fix-tkinter-detection.patch b/meta/recipes-devtools/python/python3/03-fix-tkinter-detection.patch
>> index fddfd2b2f6..b916d04d05 100644
>> --- a/meta/recipes-devtools/python/python3/03-fix-tkinter-detection.patch
>> +++ b/meta/recipes-devtools/python/python3/03-fix-tkinter-detection.patch
>> @@ -4,11 +4,11 @@ Upstream-Status: Inappropriate [embedded specific]
>> # will not be found.
>> # Signed-Off: Michael 'Mickey' Lauer <mickey at 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 @@
>> +diff --git a/setup.py b/setup.py
>> +index 37c5dd58a6..7f0e4d1010 100644
>> +--- a/setup.py
>> ++++ b/setup.py
>> +@@ -1803,7 +1803,7 @@ class PyBuildExt(build_ext):
>>                  dotversion = dotversion[:-1] + '.' + dotversion[-1]
>>              tcl_include_sub = []
>>              tk_include_sub = []
>> @@ -17,7 +17,7 @@ Index: Python-3.3.0rc2/setup.py
>>                  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 @@
>> +@@ -1822,22 +1822,6 @@ class PyBuildExt(build_ext):
>>              if dir not in include_dirs:
>>                  include_dirs.append(dir)
>> 
>> diff --git a/meta/recipes-devtools/python/python3/030-fixup-include-dirs.patch b/meta/recipes-devtools/python/python3/030-fixup-include-dirs.patch
>> index 6beac7b805..c12f11c6e7 100644
>> --- a/meta/recipes-devtools/python/python3/030-fixup-include-dirs.patch
>> +++ b/meta/recipes-devtools/python/python3/030-fixup-include-dirs.patch
>> @@ -22,12 +22,3 @@ Index: Python-3.3.2/setup.py
>> 
>>          # 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
>> diff --git a/meta/recipes-devtools/python/python3/080-distutils-dont_adjust_files.patch b/meta/recipes-devtools/python/python3/080-distutils-dont_adjust_files.patch
>> index b96419a638..1bd6e56117 100644
>> --- a/meta/recipes-devtools/python/python3/080-distutils-dont_adjust_files.patch
>> +++ b/meta/recipes-devtools/python/python3/080-distutils-dont_adjust_files.patch
>> @@ -14,11 +14,11 @@ Upstream-Status: Inappropriate [Embedded-Specific]
>> 
>> 
>>      def copy_scripts(self):
>> --        """Copy each script listed in 'self.scripts'; if it's marked as a
>> +-        r"""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'
>> ++        r"""Copy each script listed in 'self.scripts'
>>          """
>>          self.mkpath(self.build_dir)
>>          outfiles = []
>> diff --git a/meta/recipes-devtools/python/python3/150-fix-setupterm.patch b/meta/recipes-devtools/python/python3/150-fix-setupterm.patch
>> deleted file mode 100644
>> index 78d7c78670..0000000000
>> --- a/meta/recipes-devtools/python/python3/150-fix-setupterm.patch
>> +++ /dev/null
>> @@ -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
>> diff --git a/meta/recipes-devtools/python/python3/Use-correct-CFLAGS-for-extensions-when-cross-compili.patch b/meta/recipes-devtools/python/python3/Use-correct-CFLAGS-for-extensions-when-cross-compili.patch
>> index ae74ef531d..35b849e399 100644
>> --- a/meta/recipes-devtools/python/python3/Use-correct-CFLAGS-for-extensions-when-cross-compili.patch
>> +++ b/meta/recipes-devtools/python/python3/Use-correct-CFLAGS-for-extensions-when-cross-compili.patch
>> @@ -9,6 +9,11 @@ profile-optimized build.
>> 
>> Upstream-Status: Pending
>> 
>> +2018-08:
>> +  * Rebased Makefile.pre.in for 3.7
>> +  * Remove patch for setup.py in favor of upstream fix
>> +  -- Jens
>> +
>> Signed-off-by: Markus Lehtonen <markus.lehtonen at linux.intel.com>
>> ---
>>  Makefile.pre.in | 4 ++--
>> @@ -16,41 +21,31 @@ Signed-off-by: Markus Lehtonen <markus.lehtonen at linux.intel.com>
>>  2 files changed, 4 insertions(+), 3 deletions(-)
>> 
>> diff --git a/Makefile.pre.in b/Makefile.pre.in
>> -index e2d5d3d..84bc3ff 100644
>> +index 4c23c0e411..0871c98f29 100644
>> --- a/Makefile.pre.in
>> +++ b/Makefile.pre.in
>> -@@ -478,7 +478,7 @@ profile-opt:
>> -       $(MAKE) profile-removal
>> +@@ -497,6 +497,7 @@ profile-run-stamp:
>> 
>>  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)"
>> +       $(MAKE) @DEF_MAKE_RULE@ CFLAGS_NODIST="$(CFLAGS) $(PGO_PROF_GEN_FLAG)" LDFLAGS="$(LDFLAGS) $(PGO_PROF_GEN_FLAG)" LIBS="$(LIBS)"
>> ++      $(MAKE) @DEF_MAKE_RULE@ CFLAGS_NODIST="$(CFLAGS) $(EXTRA_CFLAGS) $(PGO_PROF_GEN_FLAG)" LDFLAGS="$(LDFLAGS) $(PGO_PROF_GEN_FLAG)" 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@"
>> +       @ # FIXME: can't run for a cross build
>> +@@ -510,14 +511,14 @@ build_all_merge_profile:
>> + profile-opt: profile-run-stamp
>> +       @echo "Rebuilding with profile guided optimizations:"
>> +       -rm -f profile-clean-stamp
>> +-      $(MAKE) @DEF_MAKE_RULE@ CFLAGS_NODIST="$(CFLAGS) $(PGO_PROF_USE_FLAG)" LDFLAGS="$(LDFLAGS)"
>> ++      $(MAKE) @DEF_MAKE_RULE@ CFLAGS_NODIST="$(CFLAGS) $(EXTRA_CFLAGS) $(PGO_PROF_USE_FLAG)" LDFLAGS="$(LDFLAGS)"
>> 
>>  # 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
>> -
>> + coverage:
>> +       @echo "Building with support for coverage checking:"
>> +       $(MAKE) clean profile-removal
>> +-      $(MAKE) @DEF_MAKE_RULE@ CFLAGS="$(CFLAGS) -O0 -pg -fprofile-arcs -ftest-coverage" LIBS="$(LIBS) -lgcov"
>> ++      $(MAKE) @DEF_MAKE_RULE@ CFLAGS="$(CFLAGS) $(EXTRA_CFLAGS) -O0 -pg -fprofile-arcs -ftest-coverage" LIBS="$(LIBS) -lgcov"
>> +
>> + coverage-lcov:
>> +       @echo "Creating Coverage HTML report with LCOV:"
>> diff --git a/meta/recipes-devtools/python/python3/avoid-ncursesw-include-path.patch b/meta/recipes-devtools/python/python3/avoid-ncursesw-include-path.patch
>> index f29ae53371..7e1dc4ef5b 100644
>> --- a/meta/recipes-devtools/python/python3/avoid-ncursesw-include-path.patch
>> +++ b/meta/recipes-devtools/python/python3/avoid-ncursesw-include-path.patch
>> @@ -6,16 +6,16 @@ hardcoded locations for include paths
>> 
>> Signed-off-by: Khem Raj <raj.khem at 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
>> -
>> +diff --git a/configure.ac b/configure.ac
>> +index 2b8aa4d592..1f5bf4b4b0 100644
>> +--- a/configure.ac
>> ++++ b/configure.ac
>> +@@ -4976,7 +4976,7 @@ fi
>>  # first curses header check
>>  ac_save_cppflags="$CPPFLAGS"
>> --CPPFLAGS="$CPPFLAGS -I/usr/include/ncursesw"
>> -+CPPFLAGS="$CPPFLAGS -I=/usr/include/ncursesw"
>> + if test "$cross_compiling" = no; then
>> +-  CPPFLAGS="$CPPFLAGS -I/usr/include/ncursesw"
>> ++  CPPFLAGS="$CPPFLAGS -I=/usr/include/ncursesw"
>> + fi
>> 
>>  AC_CHECK_HEADERS(curses.h ncurses.h)
>> -
>> diff --git a/meta/recipes-devtools/python/python3/avoid_warning_about_tkinter.patch b/meta/recipes-devtools/python/python3/avoid_warning_about_tkinter.patch
>> index a3cc48c9a4..ebdd64b7b5 100644
>> --- a/meta/recipes-devtools/python/python3/avoid_warning_about_tkinter.patch
>> +++ b/meta/recipes-devtools/python/python3/avoid_warning_about_tkinter.patch
>> @@ -5,13 +5,17 @@ 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.
>> +
>> +2018-08: Rebased for 3.7.0
>> +  -- Jens
>> +
>> Signed-off-by: Andrei Gherzan <andrei at 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):
>> +diff --git a/setup.py b/setup.py
>> +index 37c5dd58a6..0321245761 100644
>> +--- a/setup.py
>> ++++ b/setup.py
>> +@@ -1608,10 +1608,12 @@ class PyBuildExt(build_ext):
>>          self.extensions.extend(exts)
>> 
>>          # Call the method for detecting whether _tkinter can be compiled
>> @@ -25,5 +29,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"])
>> diff --git a/meta/recipes-devtools/python/python3/configure.ac-fix-LIBPL.patch b/meta/recipes-devtools/python/python3/configure.ac-fix-LIBPL.patch
>> index 97214f9aa4..689baf00ad 100644
>> --- a/meta/recipes-devtools/python/python3/configure.ac-fix-LIBPL.patch
>> +++ b/meta/recipes-devtools/python/python3/configure.ac-fix-LIBPL.patch
>> @@ -7,24 +7,27 @@ Use LIBDIR rather than prefix/lib, so that it would work when lib64.
>> 
>> Upstream-Status: Pending
>> 
>> +2018-08: rebased and adopted for 3.7
>> +  -- Jens
>> +
>> Signed-off-by: Robert Yang <liezhi.yang at windriver.com>
>> ---
>>  configure.ac |    2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>> 
>> diff --git a/configure.ac b/configure.ac
>> -index 63aef8e..aefb27f 100644
>> +index 2b8aa4d592..0da15fbbdf 100644
>> --- a/configure.ac
>> +++ b/configure.ac
>> -@@ -4366,7 +4366,7 @@ AC_MSG_RESULT($LDVERSION)
>> -
>> +@@ -4674,9 +4674,9 @@ 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}"
>> + if test x$PLATFORM_TRIPLET = x; then
>> +-  LIBPL='$(prefix)'"/lib/python${VERSION}/config-${LDVERSION}"
>> ++  LIBPL='$(LIBDIR)'"/python${VERSION}/config-${LDVERSION}"
>> + else
>> +-  LIBPL='$(prefix)'"/lib/python${VERSION}/config-${LDVERSION}-${PLATFORM_TRIPLET}"
>> ++  LIBPL='$(LIBDIR)'"/python${VERSION}/config-${LDVERSION}-${PLATFORM_TRIPLET}"
>> + fi
>>  AC_SUBST(LIBPL)
>> 
>> - # Check whether right shifting a negative integer extends the sign bit
>> ---
>> -1.7.9.5
>> -
>> diff --git a/meta/recipes-devtools/python/python3/float-endian.patch b/meta/recipes-devtools/python/python3/float-endian.patch
>> index 6ba3f5c252..1511f00bc3 100644
>> --- a/meta/recipes-devtools/python/python3/float-endian.patch
>> +++ b/meta/recipes-devtools/python/python3/float-endian.patch
>> @@ -21,19 +21,19 @@ Subject: [PATCH] Don't do runtime test to get float byte order
>>  create mode 100644 m4/ax_c_float_words_bigendian.m4
>> 
>> diff --git a/configure.ac b/configure.ac
>> -index c9b755f0f4..1215969871 100644
>> +index 2b8aa4d592..80aa37125f 100644
>> --- a/configure.ac
>> +++ b/configure.ac
>> -@@ -9,6 +9,8 @@ AC_PREREQ(2.65)
>> +@@ -11,6 +11,8 @@ AC_INIT(python, PYTHON_VERSION, https://bugs.python.org/)
>> 
>> - AC_INIT(python, PYTHON_VERSION, https://bugs.python.org/)
>> + AC_CONFIG_MACRO_DIR(m4)
>> 
>> +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
>> +@@ -4264,77 +4266,19 @@ fi
>>  # * Check for various properties of floating point *
>>  # **************************************************
>> 
>> @@ -209,4 +209,3 @@ index 0000000000..216b90d803
>> +])# AX_C_FLOAT_WORDS_BIGENDIAN
>> --
>> 2.11.0
>> -
>> diff --git a/meta/recipes-devtools/python/python3/pass-missing-libraries-to-Extension-for-mul.patch b/meta/recipes-devtools/python/python3/pass-missing-libraries-to-Extension-for-mul.patch
>> index 5c3af6b626..1ce4defe95 100644
>> --- a/meta/recipes-devtools/python/python3/pass-missing-libraries-to-Extension-for-mul.patch
>> +++ b/meta/recipes-devtools/python/python3/pass-missing-libraries-to-Extension-for-mul.patch
>> @@ -47,16 +47,19 @@ And the semaphore issue also caused multiprocessing.Queue().put() hung.
>> 
>> Upstream-Status: Submitted [https://github.com/python/cpython/pull/2999]
>> 
>> +2018-08: rebased for 3.7
>> +  -- Jens
>> +
>> Signed-off-by: Hongxu Jia <hongxu.jia at windriver.com>
>> ---
>>  setup.py | 7 +++++--
>>  1 file changed, 5 insertions(+), 2 deletions(-)
>> 
>> diff --git a/setup.py b/setup.py
>> -index 4f0f522..d05707d 100644
>> +index a97a7559ca..633eba8f1e 100644
>> --- a/setup.py
>> +++ b/setup.py
>> -@@ -1606,8 +1606,10 @@ class PyBuildExt(build_ext):
>> +@@ -1580,8 +1580,10 @@ class PyBuildExt(build_ext):
>>          elif host_platform.startswith('netbsd'):
>>              macros = dict()
>>              libraries = []
>> @@ -69,14 +72,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
>> -
>> +@@ -1599,6 +1601,7 @@ class PyBuildExt(build_ext):
>> +
>> +         exts.append ( Extension('_multiprocessing', multiprocessing_srcs,
>> +                                 define_macros=list(macros.items()),
>> ++                                libraries=libraries,
>> +                                 include_dirs=["Modules/_multiprocessing"]))
>> +         # End multiprocessing
>> +
>> diff --git a/meta/recipes-devtools/python/python3/python-3.3-multilib.patch b/meta/recipes-devtools/python/python3/python-3.3-multilib.patch
>> index cc35dc1617..d5bafbfba1 100644
>> --- a/meta/recipes-devtools/python/python3/python-3.3-multilib.patch
>> +++ b/meta/recipes-devtools/python/python3/python-3.3-multilib.patch
>> @@ -4,7 +4,7 @@ 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
>> +08/2018 Rebased for 3.7.0
>> 
>> Upstream-Status: Pending
>> Signed-off-by: Khem Raj <raj.khem at gmail.com>
>> @@ -25,12 +25,12 @@ Signed-off-by: Alejandro Hernandez <alejandro.hernandez at linux.intel.com>
>>  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;
>> +diff --git a/Include/pythonrun.h b/Include/pythonrun.h
>> +index 6f0c6fc655..95a597b412 100644
>> +--- a/Include/pythonrun.h
>> ++++ b/Include/pythonrun.h
>> +@@ -7,6 +7,9 @@
>> + extern "C" {
>>  #endif
>> 
>> +PyAPI_FUNC(const char *) Py_GetArch(void);
>> @@ -39,10 +39,10 @@ Index: Python-3.5.4/Include/pythonrun.h
>>  #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
>> +diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py
>> +index 0258d3deae..352fd8f792 100644
>> +--- a/Lib/distutils/command/install.py
>> ++++ b/Lib/distutils/command/install.py
>> @@ -19,6 +19,8 @@ from site import USER_BASE
>>  from site import USER_SITE
>>  HAS_USER_SITE = True
>> @@ -63,11 +63,11 @@ Index: Python-3.5.4/Lib/distutils/command/install.py
>>          '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:
>> +diff --git a/Lib/pydoc.py b/Lib/pydoc.py
>> +index 8a6b27b16e..fc55893b18 100644
>> +--- a/Lib/pydoc.py
>> ++++ b/Lib/pydoc.py
>> +@@ -399,7 +399,7 @@ class Doc:
>>      docmodule = docclass = docroutine = docother = docproperty = docdata = fail
>> 
>>      def getdocloc(self, object,
>> @@ -76,29 +76,30 @@ Index: Python-3.5.4/Lib/pydoc.py
>>                                         "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):
>> +diff --git a/Lib/site.py b/Lib/site.py
>> +index ffd132b389..3ca8270d49 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",
>> +-                                        "python%d.%d" % sys.version_info[:2],
>> +            sitepackages.append(os.path.join(prefix, sys.lib,
>> -                                         "python" + sys.version[:3],
>> ++                                        "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"))
>> -         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
>> +     return sitepackages
>> +
>> + def addsitepackages(known_paths, prefixes=None):
>> +diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
>> +index e0f9c18531..9869363977 100644
>> +--- a/Lib/sysconfig.py
>> ++++ b/Lib/sysconfig.py
>> @@ -20,10 +20,10 @@ __all__ = [
>> 
>>  _INSTALL_SCHEMES = {
>> @@ -129,7 +130,7 @@ Index: Python-3.5.4/Lib/sysconfig.py
>>          'include': '{installed_base}/include/python',
>>          'platinclude': '{installed_base}/include/python',
>>          'scripts': '{base}/bin',
>> -@@ -61,10 +61,10 @@ _INSTALL_SCHEMES = {
>> +@@ -62,10 +62,10 @@ _INSTALL_SCHEMES = {
>>          'data': '{userbase}',
>>          },
>>      'posix_user': {
>> @@ -144,28 +145,24 @@ Index: Python-3.5.4/Lib/sysconfig.py
>>          '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)
>> +diff --git a/Lib/trace.py b/Lib/trace.py
>> +index 86b2101763..f3c32ec317 100755
>> +--- a/Lib/trace.py
>> ++++ b/Lib/trace.py
>> +@@ -659,7 +659,7 @@ def main():
>> +     opts = parser.parse_args()
>> +
>> +     if opts.ignore_dir:
>> +-        rel_path = 'lib', 'python{0.major}.{0.minor}'.format(sys.version_info)
>> ++        rel_path = sys.lib, 'python{0.major}.{0.minor}'.format(sys.version_info)
>> +         _prefix = os.path.join(sys.base_prefix, *rel_path)
>> +         _exec_prefix = os.path.join(sys.base_exec_prefix, *rel_path)
>> 
>> -                 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@
>> +diff --git a/Makefile.pre.in b/Makefile.pre.in
>> +index 31b4bcabb3..713215e57d 100644
>> +--- a/Makefile.pre.in
>> ++++ b/Makefile.pre.in
>> +@@ -114,6 +114,8 @@ CFLAGS_ALIASING=@CFLAGS_ALIASING@
>> 
>>  # Machine-dependent subdirectories
>>  MACHDEP=      @MACHDEP@
>> @@ -174,7 +171,7 @@ Index: Python-3.5.4/Makefile.pre.in
>> 
>>  # Multiarch directory (may be empty)
>>  MULTIARCH=    @MULTIARCH@
>> -@@ -128,7 +130,7 @@ LIBDIR=            @libdir@
>> +@@ -134,7 +136,7 @@ LIBDIR=            @libdir@
>>  MANDIR=               @mandir@
>>  INCLUDEDIR=   @includedir@
>>  CONFINCLUDEDIR=       $(exec_prefix)/include
>> @@ -183,7 +180,7 @@ Index: Python-3.5.4/Makefile.pre.in
>>  ABIFLAGS=     @ABIFLAGS@
>> 
>>  # Detailed destination directories
>> -@@ -731,6 +733,7 @@ Modules/getpath.o: $(srcdir)/Modules/get
>> +@@ -754,6 +756,7 @@ Modules/getpath.o: $(srcdir)/Modules/getpath.c Makefile
>>                -DEXEC_PREFIX='"$(exec_prefix)"' \
>>                -DVERSION='"$(VERSION)"' \
>>                -DVPATH='"$(VPATH)"' \
>> @@ -191,8 +188,8 @@ Index: Python-3.5.4/Makefile.pre.in
>>                -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
>> +@@ -842,7 +845,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
>> @@ -200,11 +197,11 @@ Index: Python-3.5.4/Makefile.pre.in
>> 
>>  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 @@
>> +diff --git a/Modules/getpath.c b/Modules/getpath.c
>> +index 041cb14b4b..d52d1e1cdb 100644
>> +--- a/Modules/getpath.c
>> ++++ b/Modules/getpath.c
>> +@@ -106,6 +106,13 @@ extern "C" {
>>  #error "PREFIX, EXEC_PREFIX, VERSION, and VPATH must be constant defined"
>>  #endif
>> 
>> @@ -218,30 +215,22 @@ Index: Python-3.5.4/Modules/getpath.c
>>  #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
>> +@@ -867,7 +874,7 @@ calculate_init(PyCalculatePath *calculate,
>> +     if (!calculate->prefix) {
>> +         return DECODE_LOCALE_ERR("EXEC_PREFIX define", len);
>> +     }
>> +-    calculate->lib_python = Py_DecodeLocale("lib/python" VERSION, &len);
>> ++    calculate->lib_python = Py_DecodeLocale(LIB_PYTHON, &len);
>> +     if (!calculate->lib_python) {
>> +         return DECODE_LOCALE_ERR("EXEC_PREFIX define", len);
>> +     }
>> +diff --git a/Python/getplatform.c b/Python/getplatform.c
>> +index 81a0f7ac53..bc7127ae3e 100644
>> +--- a/Python/getplatform.c
>> ++++ b/Python/getplatform.c
>> @@ -10,3 +10,23 @@ Py_GetPlatform(void)
>>  {
>> -       return PLATFORM;
>> +     return PLATFORM;
>>  }
>> +
>> +#ifndef ARCH
>> @@ -263,11 +252,11 @@ Index: Python-3.5.4/Python/getplatform.c
>> +{
>> +      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)
>> +diff --git a/Python/sysmodule.c b/Python/sysmodule.c
>> +index 177b830762..38112b831e 100644
>> +--- a/Python/sysmodule.c
>> ++++ b/Python/sysmodule.c
>> +@@ -2324,6 +2324,10 @@ _PySys_BeginInit(PyObject **sysmod)
>>                          PyUnicode_FromString(Py_GetCopyright()));
>>      SET_SYS_FROM_STRING("platform",
>>                          PyUnicode_FromString(Py_GetPlatform()));
>> @@ -275,16 +264,16 @@ Index: Python-3.5.4/Python/sysmodule.c
>> +                        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)
>> +     SET_SYS_FROM_STRING("maxsize",
>> +                         PyLong_FromSsize_t(PY_SSIZE_T_MAX));
>> +     SET_SYS_FROM_STRING("float_info",
>> +diff --git a/configure.ac b/configure.ac
>> +index 5b66624d78..1c88696532 100644
>> +--- a/configure.ac
>> ++++ b/configure.ac
>> +@@ -867,6 +867,41 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
>> + LDFLAGS="$save_LDFLAGS"
>> + AC_SUBST(NO_AS_NEEDED)
>> 
>> +AC_SUBST(ARCH)
>> +AC_MSG_CHECKING(ARCH)
>> @@ -322,13 +311,13 @@ Index: Python-3.5.4/configure.ac
>> +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):
>> + # checks for UNIX variants that set C preprocessor variables
>> + AC_USE_SYSTEM_EXTENSIONS
>> +diff --git a/setup.py b/setup.py
>> +index 37c5dd58a6..b82b7177bc 100644
>> +--- a/setup.py
>> ++++ b/setup.py
>> +@@ -541,7 +541,7 @@ class PyBuildExt(build_ext):
>>          # directories (i.e. '.' and 'Include') must be first.  See issue
>>          # 10520.
>>          if not cross_compiling:
>> @@ -337,17 +326,16 @@ Index: Python-3.5.4/setup.py
>>              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):
>> +@@ -579,7 +579,7 @@ class PyBuildExt(build_ext):
>> +             add_dir_to_list(self.compiler.include_dirs,
>> +                             sysconfig.get_config_var("INCLUDEDIR"))
>> +
>> +-        system_lib_dirs = ['/lib64', '/usr/lib64', '/lib', '/usr/lib']
>> ++        system_lib_dirs = ['/' + sys.lib, '/usr/' + sys.lib]
>> +         system_include_dirs = ['/usr/include']
>> +         # lib_dirs and inc_dirs are used to search for files;
>> +         # if a file is found in one of those directories, it can
>> +@@ -836,11 +836,11 @@ class PyBuildExt(build_ext):
>>              elif curses_library:
>>                  readline_libs.append(curses_library)
>>              elif self.compiler.find_library_file(lib_dirs +
>> @@ -361,3 +349,26 @@ Index: Python-3.5.4/setup.py
>>                                     extra_link_args=readline_extra_link_args,
>>                                     libraries=readline_libs) )
>>          else:
>> +@@ -1054,8 +1054,7 @@ class PyBuildExt(build_ext):
>> +
>> +                 # check lib directories parallel to the location of the header
>> +                 db_dirs_to_check = [
>> +-                    db_incdir.replace("include", 'lib64'),
>> +-                    db_incdir.replace("include", 'lib'),
>> ++                    db_incdir.replace("include", sys.lib),
>> +                 ]
>> +
>> +                 if host_platform != 'darwin':
>> +@@ -1166,10 +1165,8 @@ class PyBuildExt(build_ext):
>> +
>> +         if sqlite_incdir:
>> +             sqlite_dirs_to_check = [
>> +-                os.path.join(sqlite_incdir, '..', 'lib64'),
>> +-                os.path.join(sqlite_incdir, '..', 'lib'),
>> +-                os.path.join(sqlite_incdir, '..', '..', 'lib64'),
>> +-                os.path.join(sqlite_incdir, '..', '..', 'lib'),
>> ++                os.path.join(sqlite_incdir, '..', sys.lib),
>> ++                os.path.join(sqlite_incdir, '..', '..', sys.lib),
>> +             ]
>> +             sqlite_libfile = self.compiler.find_library_file(
>> +                                 sqlite_dirs_to_check + lib_dirs, 'sqlite3')
>> diff --git a/meta/recipes-devtools/python/python3/python3-manifest.json b/meta/recipes-devtools/python/python3/python3-manifest.json
>> index f922561368..e63fcb95e3 100644
>> --- a/meta/recipes-devtools/python/python3/python3-manifest.json
>> +++ b/meta/recipes-devtools/python/python3/python3-manifest.json
>> @@ -27,24 +27,17 @@
>>     "asyncio": {
>>         "summary": "Python Asynchronous I/",
>>         "rdepends": [
>> -            "compression",
>>             "core",
>> -            "crypt",
>>             "io",
>>             "logging",
>> -            "math",
>> -            "multiprocessing",
>>             "netclient",
>> -            "pickle",
>> -            "shell",
>> -            "stringold",
>> -            "threading",
>> -            "unixadmin"
>> +            "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": []
>>     },
>> @@ -149,7 +142,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",
>> @@ -162,6 +155,7 @@
>>             "${libdir}/python${PYTHON_MAJMIN}/collections/abc.py",
>>             "${libdir}/python${PYTHON_MAJMIN}/configparser.py",
>>             "${libdir}/python${PYTHON_MAJMIN}/contextlib.py",
>> +            "${libdir}/python${PYTHON_MAJMIN}/contextvars.py",
>>             "${libdir}/python${PYTHON_MAJMIN}/copy.py",
>>             "${libdir}/python${PYTHON_MAJMIN}/copyreg.py",
>>             "${libdir}/python${PYTHON_MAJMIN}/csv.py",
>> @@ -191,6 +185,7 @@
>>             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/__pycache__/time.*.so",
>>             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/__pycache__/xreadlines.*.so",
>>             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_bisect.*.so",
>> +            "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_contextvars.*.so",
>>             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_csv.*.so",
>>             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_heapq.*.so",
>>             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_opcode.*.so",
>> @@ -256,6 +251,7 @@
>>             "${libdir}/python${PYTHON_MAJMIN}/__pycache__/codeop.*.pyc",
>>             "${libdir}/python${PYTHON_MAJMIN}/__pycache__/configparser.*.pyc",
>>             "${libdir}/python${PYTHON_MAJMIN}/__pycache__/contextlib.*.pyc",
>> +            "${libdir}/python${PYTHON_MAJMIN}/__pycache__/contextvars.*.pyc",
>>             "${libdir}/python${PYTHON_MAJMIN}/__pycache__/copy.*.pyc",
>>             "${libdir}/python${PYTHON_MAJMIN}/__pycache__/copyreg.*.pyc",
>>             "${libdir}/python${PYTHON_MAJMIN}/__pycache__/csv.*.pyc",
>> @@ -323,9 +319,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/_md5.*.so",
>> +            "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha1.*.so",
>>             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha256.*.so",
>> +            "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha3.*.so",
>>             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_sha512.*.so"
>>         ],
>>         "cached": [
>> @@ -729,7 +729,9 @@
>>     "multiprocessing": {
>>         "summary": "Python multiprocessing support",
>>         "rdepends": [
>> -            "core"
>> +            "core",
>> +            "io",
>> +            "pickle"
>>         ],
>>         "files": [
>>             "${libdir}/python${PYTHON_MAJMIN}/lib-dynload/_multiprocessing.*.so",
>> @@ -740,18 +742,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",
>> @@ -1043,13 +1041,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"
>>         ]
>>     },
>> diff --git a/meta/recipes-devtools/python/python3/python3-use-CROSSPYTHONPATH-for-PYTHON_FOR_BUILD.patch b/meta/recipes-devtools/python/python3/python3-use-CROSSPYTHONPATH-for-PYTHON_FOR_BUILD.patch
>> index a4f8bd4710..c6aa581b4c 100644
>> --- a/meta/recipes-devtools/python/python3/python3-use-CROSSPYTHONPATH-for-PYTHON_FOR_BUILD.patch
>> +++ b/meta/recipes-devtools/python/python3/python3-use-CROSSPYTHONPATH-for-PYTHON_FOR_BUILD.patch
>> @@ -5,21 +5,24 @@ Subject: [PATCH] python3 use CROSSPYTHONPATH for PYTHON_FOR_BUILD
>> 
>> Upstream-Status: Inappropriate [Cross compile specific]
>> 
>> +2018-08: Rebased and adopted for 3.7
>> +  -- Jens
>> +
>> Signed-off-by: Jackie Huang <jackie.huang at 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
>> +diff --git a/configure.ac b/configure.ac
>> +index 2b8aa4d592..a361436f4f 100644
>> +--- a/configure.ac
>> ++++ b/configure.ac
>> +@@ -75,7 +75,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
>> +-      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 _PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata_$(ABIFLAGS)_$(MACHDEP)_$(MULTIARCH) '$interp
>> ++      PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(CROSSPYTHONPATH) _PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata_$(ABIFLAGS)_$(MACHDEP)_$(MULTIARCH) '$interp
>>      fi
>>  elif test "$cross_compiling" = maybe; then
>>      AC_MSG_ERROR([Cross compiling required --host=HOST-TUPLE and --build=ARCH])
>> diff --git a/meta/recipes-devtools/python/python3/regen-all.patch b/meta/recipes-devtools/python/python3/regen-all.patch
>> deleted file mode 100644
>> index 36b9d9d919..0000000000
>> --- a/meta/recipes-devtools/python/python3/regen-all.patch
>> +++ /dev/null
>> @@ -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 at 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
>> diff --git a/meta/recipes-devtools/python/python3/signal.patch b/meta/recipes-devtools/python/python3/signal.patch
>> deleted file mode 100644
>> index 534a097771..0000000000
>> --- a/meta/recipes-devtools/python/python3/signal.patch
>> +++ /dev/null
>> @@ -1,56 +0,0 @@
>> -Upstream-Status: Backport
>> -Signed-off-by: Ross Burton <ross.burton at intel.com>
>> -
>> -From 4315389df3c4e8c1f94a18ab11a4b234762132b1 Mon Sep 17 00:00:00 2001
>> -From: Antoine Pitrou <pitrou at 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
>> -
>> diff --git a/meta/recipes-devtools/python/python3/support_SOURCE_DATE_EPOCH_in_py_compile.patch b/meta/recipes-devtools/python/python3/support_SOURCE_DATE_EPOCH_in_py_compile.patch
>> index 32ecab9fec..058cfdbc2d 100644
>> --- a/meta/recipes-devtools/python/python3/support_SOURCE_DATE_EPOCH_in_py_compile.patch
>> +++ b/meta/recipes-devtools/python/python3/support_SOURCE_DATE_EPOCH_in_py_compile.patch
>> @@ -36,12 +36,12 @@ The software will still work, but it will not use the .pyc file as it should.
>>  3 files changed, 27 insertions(+)
>> 
>> diff --git a/Doc/library/py_compile.rst b/Doc/library/py_compile.rst
>> -index 0af8fb1..841f3e8 100644
>> +index d720e01050..c8cc738f3d 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.
>> +@@ -59,6 +59,10 @@ byte-code cache files in the directory containing the source code.
>> +    *invalidation_mode* will be forced to
>> +    :attr:`PycInvalidationMode.CHECKED_HASH`.
>> 
>> +   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.
>> @@ -51,27 +51,27 @@ index 0af8fb1..841f3e8 100644
>>        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
>> +index 16dc0a011f..b7c28e4fdd 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:
>> +@@ -149,6 +149,10 @@ def compile(file, cfile=None, dfile=None, doraise=False, optimize=-1,
>>          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(
>> +     if invalidation_mode == PycInvalidationMode.TIMESTAMP:
>> +         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_timestamp_pyc(
>>              code, source_stats['mtime'], source_stats['size'])
>> -     mode = importlib._bootstrap_external._calc_mode(file)
>> +     else:
>> diff --git a/Lib/test/test_py_compile.py b/Lib/test/test_py_compile.py
>> -index 4a6caa5..3d09963 100644
>> +index 8fc0b3308c..1445a14548 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)))
>> +@@ -110,6 +110,25 @@ class PyCompileTests(unittest.TestCase):
>> +                 fp.read(), 'test', {})
>> +         self.assertEqual(flags, 0b11)
>> 
>> +    def test_source_date_epoch(self):
>> +        testtime = 123456789
>> diff --git a/meta/recipes-devtools/python/python3/sysroot-include-headers.patch b/meta/recipes-devtools/python/python3/sysroot-include-headers.patch
>> index 785b5567f2..d5983544c4 100644
>> --- a/meta/recipes-devtools/python/python3/sysroot-include-headers.patch
>> +++ b/meta/recipes-devtools/python/python3/sysroot-include-headers.patch
>> @@ -6,26 +6,27 @@ 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]
>> 
>> +2018-08: Rebased to 3.7.0
>> +  -- Jens
>> 
>> 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'
>> +diff --git a/setup.py b/setup.py
>> +index 37c5dd58a6..41e88a152b 100644
>> +--- a/setup.py
>> ++++ b/setup.py
>> +@@ -1333,7 +1333,7 @@ class PyBuildExt(build_ext):
>>          if curses_library == 'ncursesw':
>>              curses_defines.append(('HAVE_NCURSESW', '1'))
>> --            curses_includes.append('/usr/include/ncursesw')
>> -+            curses_includes.append('=/usr/include/ncursesw')
>> +             if not cross_compiling:
>> +-                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':
>> +@@ -1968,7 +1968,7 @@ class PyBuildExt(build_ext):
>> +                 return
>>              # OS X 10.5 comes with libffi.dylib; the include files are
>>              # in /usr/include/ffi
>> -            inc_dirs.append('/usr/include/ffi')
>> diff --git a/meta/recipes-devtools/python/python3/uuid_when_cross_compiling.patch b/meta/recipes-devtools/python/python3/uuid_when_cross_compiling.patch
>> new file mode 100644
>> index 0000000000..464f873112
>> --- /dev/null
>> +++ b/meta/recipes-devtools/python/python3/uuid_when_cross_compiling.patch
>> @@ -0,0 +1,24 @@
>> +Subject: [PATCH] util-linux uuid support
>> +
>> +Scan for uuid.h in include/uuid/ as well as in include/ to catch
>> +the uuid/uuid.h well supported but accidently not detected.
>> +
>> +Upstream-Status: Pending
>> +
>> +Signed-off-by: Jens Rehsack <sno at NetBSD.org>
>> +diff --git a/setup.py b/setup.py
>> +index a97a7559ca..01d8f24fdd 100644
>> +--- a/setup.py
>> ++++ b/setup.py
>> +@@ -1596,8 +1596,9 @@ class PyBuildExt(build_ext):
>> +         #    missing.append('_tkinter')
>> +
>> +         # Build the _uuid module if possible
>> +-        uuid_incs = find_file("uuid.h", inc_dirs, ["/usr/include/uuid"])
>> +-        if uuid_incs is not None:
>> ++        uuid_incs = find_file("uuid.h", inc_dirs, [])
>> ++        uuid_uuid_incs = find_file("uuid/uuid.h", inc_dirs, [])
>> ++        if uuid_incs is not None or uuid_uuid_incs is not None:
>> +             if self.compiler.find_library_file(lib_dirs, 'uuid'):
>> +                 uuid_libs = ['uuid']
>> +             else:
>> diff --git a/meta/recipes-devtools/python/python3_3.5.6.bb b/meta/recipes-devtools/python/python3_3.5.6.bb
>> deleted file mode 100644
>> index 2a4547694a..0000000000
>> --- a/meta/recipes-devtools/python/python3_3.5.6.bb
>> +++ /dev/null
>> @@ -1,329 +0,0 @@
>> -require recipes-devtools/python/python3.inc
>> -
>> -DEPENDS = "python3-native libffi bzip2 gdbm openssl \
>> -           sqlite3 zlib virtual/libintl xz qemu-native \
>> -           qemu-helper-native virtual/crypt"
>> -
>> -DISTRO_SRC_URI ?= "file://sitecustomize.py"
>> -DISTRO_SRC_URI_linuxstdbase = ""
>> -SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.xz \
>> -file://python-config.patch \
>> -file://030-fixup-include-dirs.patch \
>> -file://070-dont-clean-ipkg-install.patch \
>> -file://080-distutils-dont_adjust_files.patch \
>> -file://130-readline-setup.patch \
>> -file://150-fix-setupterm.patch \
>> -file://0001-h2py-Fix-issue-13032-where-it-fails-with-UnicodeDeco.patch \
>> -file://tweak-MULTIARCH-for-powerpc-linux-gnuspe.patch \
>> -file://support_SOURCE_DATE_EPOCH_in_py_compile.patch \
>> -${DISTRO_SRC_URI} \
>> -"
>> -
>> -SRC_URI += "\
>> -            file://03-fix-tkinter-detection.patch \
>> -            file://avoid_warning_about_tkinter.patch \
>> -            file://cgi_py.patch \
>> -            file://host_include_contamination.patch \
>> -            file://python-3.3-multilib.patch \
>> -            file://sysroot-include-headers.patch \
>> -            file://unixccompiler.patch \
>> -            file://avoid-ncursesw-include-path.patch \
>> -            file://python3-use-CROSSPYTHONPATH-for-PYTHON_FOR_BUILD.patch \
>> -            file://sysconfig.py-add-_PYTHON_PROJECT_SRC.patch \
>> -            file://setup.py-check-cross_compiling-when-get-FLAGS.patch \
>> -            file://configure.ac-fix-LIBPL.patch \
>> -            file://0001-Issue-21272-Use-_sysconfigdata.py-to-initialize-dist.patch \
>> -            file://pass-missing-libraries-to-Extension-for-mul.patch \
>> -            file://Use-correct-CFLAGS-for-extensions-when-cross-compili.patch \
>> -            file://0002-Makefile-add-target-to-split-profile-generation.patch \
>> -            file://float-endian.patch \
>> -            file://ftplib.patch \
>> -            file://signal.patch \
>> -            file://0001-Issue-28043-SSLContext-has-improved-default-settings.patch \
>> -            file://0002-bpo-29136-Add-TLS-1.3-cipher-suites-and-OP_NO_TLSv1_.patch \
>> -            file://0003-bpo-32947-Fixes-for-TLS-1.3-and-OpenSSL-1.1.1-GH-876.patch \
>> -            file://0004-bpo-33570-TLS-1.3-ciphers-for-OpenSSL-1.1.1-GH-6976.patch \
>> -            file://0005-bpo-30714-ALPN-changes-for-OpenSSL-1.1.0f-2305.patch \
>> -            file://run-ptest \
>> -           "
>> -
>> -inherit multilib_header python3native update-alternatives qemu ptest
>> -
>> -MULTILIB_SUFFIX = "${@d.getVar('base_libdir',1).split('/')[-1]}"
>> -
>> -ALTERNATIVE_${PN}-dev = "python-config"
>> -ALTERNATIVE_LINK_NAME[python-config] = "${bindir}/python${PYTHON_BINABI}-config"
>> -ALTERNATIVE_TARGET[python-config] = "${bindir}/python${PYTHON_BINABI}-config-${MULTILIB_SUFFIX}"
>> -
>> -CONFIGUREOPTS += " --with-system-ffi "
>> -
>> -CACHED_CONFIGUREVARS = "ac_cv_have_chflags=no \
>> -                ac_cv_have_lchflags=no \
>> -                ac_cv_have_long_long_format=yes \
>> -                ac_cv_buggy_getaddrinfo=no \
>> -                ac_cv_file__dev_ptmx=yes \
>> -                ac_cv_file__dev_ptc=no \
>> -"
>> -
>> -TARGET_CC_ARCH += "-DNDEBUG -fno-inline"
>> -SDK_CC_ARCH += "-DNDEBUG -fno-inline"
>> -EXTRA_OEMAKE += "CROSS_COMPILE=yes"
>> -EXTRA_OECONF += "CROSSPYTHONPATH=${STAGING_LIBDIR_NATIVE}/python${PYTHON_MAJMIN}/lib-dynload/ --without-ensurepip"
>> -
>> -PYTHON3_PROFILE_TASK ?= "./python -m test.regrtest --pgo test_grammar test_opcodes test_dict test_builtin test_exceptions test_types test_support || true"
>> -
>> -export CROSS_COMPILE = "${TARGET_PREFIX}"
>> -export CCSHARED = "-fPIC"
>> -
>> -# Fix cross compilation of different modules
>> -export CROSSPYTHONPATH = "${STAGING_LIBDIR_NATIVE}/python${PYTHON_MAJMIN}/lib-dynload/:${B}/build/lib.linux-${TARGET_ARCH}-${PYTHON_MAJMIN}:${S}/Lib:${S}/Lib/plat-linux"
>> -
>> -PACKAGECONFIG ??= "readline ${@bb.utils.contains('MACHINE_FEATURES', 'qemu-usermode', 'pgo', '', d)}"
>> -PACKAGECONFIG[readline] = ",,readline"
>> -# Use profile guided optimisation by running PyBench inside qemu-user
>> -PACKAGECONFIG[pgo] = "--enable-optimizations"
>> -
>> -do_configure_append() {
>> -       rm -f ${S}/Makefile.orig
>> -}
>> -
>> -run_make() {
>> -       oe_runmake PGEN=${STAGING_BINDIR_NATIVE}/python3-native/pgen \
>> -               HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python3-native/python3 \
>> -               STAGING_LIBDIR=${STAGING_LIBDIR} \
>> -               STAGING_INCDIR=${STAGING_INCDIR} \
>> -               STAGING_BASELIBDIR=${STAGING_BASELIBDIR} \
>> -               LIB=${baselib} \
>> -               ARCH=${TARGET_ARCH} \
>> -               OPT="${CFLAGS}" \
>> -               "$@"
>> -}
>> -
>> -do_compile() {
>> -       # regenerate platform specific files, because they depend on system headers
>> -       cd ${S}/Lib/plat-linux*
>> -       include=${STAGING_INCDIR} ${STAGING_BINDIR_NATIVE}/python3-native/python3 \
>> -               ${S}/Tools/scripts/h2py.py -i '(u_long)' \
>> -               ${STAGING_INCDIR}/dlfcn.h \
>> -               ${STAGING_INCDIR}/linux/cdrom.h \
>> -               ${STAGING_INCDIR}/netinet/in.h \
>> -               ${STAGING_INCDIR}/sys/types.h
>> -       sed -e 's,${STAGING_DIR_HOST},,g' -i *.py
>> -       cd -
>> -
>> -       # remove any bogus LD_LIBRARY_PATH
>> -       sed -i -e s,RUNSHARED=.*,RUNSHARED=, Makefile
>> -
>> -       if [ ! -f Makefile.orig ]; then
>> -               install -m 0644 Makefile Makefile.orig
>> -       fi
>> -       sed -i -e 's,^CONFIGURE_LDFLAGS=.*,CONFIGURE_LDFLAGS=-L. -L${STAGING_LIBDIR},g' \
>> -               -e 's,libdir=${libdir},libdir=${STAGING_LIBDIR},g' \
>> -               -e 's,libexecdir=${libexecdir},libexecdir=${STAGING_DIR_HOST}${libexecdir},g' \
>> -               -e 's,^LIBDIR=.*,LIBDIR=${STAGING_LIBDIR},g' \
>> -               -e 's,includedir=${includedir},includedir=${STAGING_INCDIR},g' \
>> -               -e 's,^INCLUDEDIR=.*,INCLUDE=${STAGING_INCDIR},g' \
>> -               -e 's,^CONFINCLUDEDIR=.*,CONFINCLUDE=${STAGING_INCDIR},g' \
>> -               Makefile
>> -       # save copy of it now, because if we do it in do_install and
>> -       # then call do_install twice we get Makefile.orig == Makefile.sysroot
>> -       install -m 0644 Makefile Makefile.sysroot
>> -
>> -       if ${@bb.utils.contains('PACKAGECONFIG', 'pgo', 'true', 'false', d)}; then
>> -               run_make profile-opt
>> -               qemu_binary="${@qemu_wrapper_cmdline(d, '${STAGING_DIR_TARGET}', ['${B}', '${STAGING_DIR_TARGET}/${base_libdir}'])}"
>> -               cat >pgo-wrapper <<EOF
>> -#!/bin/sh
>> -cd ${B}
>> -$qemu_binary "\$@"
>> -EOF
>> -               chmod +x pgo-wrapper
>> -               bbnote Gathering profiling data
>> -               ./pgo-wrapper ${PYTHON3_PROFILE_TASK}
>> -               bbnote Profiling data gathered, rebuilding
>> -               run_make clean_and_use_profile
>> -       else
>> -               run_make libpython3.so
>> -               run_make
>> -       fi
>> -}
>> -
>> -do_install() {
>> -       # make install needs the original Makefile, or otherwise the inclues would
>> -       # go to ${D}${STAGING...}/...
>> -       install -m 0644 Makefile.orig Makefile
>> -
>> -       install -d ${D}${libdir}/pkgconfig
>> -       install -d ${D}${libdir}/python${PYTHON_MAJMIN}/config
>> -
>> -       # rerun the build once again with original makefile this time
>> -       # run install in a separate step to avoid compile/install race
>> -       if ${@bb.utils.contains('PACKAGECONFIG', 'pgo', 'true', 'false', d)}; then
>> -               run_make DESTDIR=${D} LIBDIR=${libdir} build_all_use_profile
>> -       else
>> -               run_make DESTDIR=${D} LIBDIR=${libdir}
>> -       fi
>> -
>> -       run_make DESTDIR=${D} LIBDIR=${libdir} install
>> -
>> -       # avoid conflict with 2to3 from Python 2
>> -       rm -f ${D}/${bindir}/2to3
>> -
>> -       install -m 0644 Makefile.sysroot ${D}/${libdir}/python${PYTHON_MAJMIN}/config/Makefile
>> -       install -m 0644 Makefile.sysroot ${D}/${libdir}/python${PYTHON_MAJMIN}/config-${PYTHON_MAJMIN}${PYTHON_ABI}/Makefile
>> -
>> -       if [ -e ${WORKDIR}/sitecustomize.py ]; then
>> -               install -m 0644 ${WORKDIR}/sitecustomize.py ${D}/${libdir}/python${PYTHON_MAJMIN}
>> -       fi
>> -
>> -       oe_multilib_header python${PYTHON_BINABI}/pyconfig.h
>> -}
>> -
>> -do_install_append_class-nativesdk () {
>> -       create_wrapper ${D}${bindir}/python${PYTHON_MAJMIN} PYTHONHOME='${prefix}' TERMINFO_DIRS='${sysconfdir}/terminfo:/etc/terminfo:/usr/share/terminfo:/usr/share/misc/terminfo:/lib/terminfo' PYTHONNOUSERSITE='1'
>> -}
>> -
>> -SSTATE_SCAN_FILES += "Makefile"
>> -PACKAGE_PREPROCESS_FUNCS += "py_package_preprocess"
>> -
>> -py_package_preprocess () {
>> -       # copy back the old Makefile to fix target package
>> -       install -m 0644 ${B}/Makefile.orig ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/config/Makefile
>> -       install -m 0644 ${B}/Makefile.orig ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/config-${PYTHON_MAJMIN}${PYTHON_ABI}/Makefile
>> -       # Remove references to buildmachine paths in target Makefile and _sysconfigdata
>> -       sed -i -e 's:--sysroot=${STAGING_DIR_TARGET}::g' -e s:'--with-libtool-sysroot=${STAGING_DIR_TARGET}'::g \
>> -               -e 's|${DEBUG_PREFIX_MAP}||g' \
>> -               -e 's:${HOSTTOOLS_DIR}/::g' \
>> -               -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
>> -               -e 's:${RECIPE_SYSROOT}::g' \
>> -               -e 's:${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}::g' \
>> -               ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/config/Makefile \
>> -               ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/config-${PYTHON_MAJMIN}${PYTHON_ABI}/Makefile \
>> -               ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata.py \
>> -               ${PKGD}/${bindir}/python${PYTHON_BINABI}-config
>> -
>> -       # Recompile _sysconfigdata after modifying it
>> -       cd ${PKGD}
>> -       ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN} \
>> -            -c "from py_compile import compile; compile('./${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata.py')"
>> -       ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN} \
>> -            -c "from py_compile import compile; compile('./${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata.py', optimize=1)"
>> -       ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN} \
>> -            -c "from py_compile import compile; compile('./${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata.py', optimize=2)"
>> -       cd -
>> -
>> -       mv ${PKGD}/${bindir}/python${PYTHON_BINABI}-config ${PKGD}/${bindir}/python${PYTHON_BINABI}-config-${MULTILIB_SUFFIX}
>> -}
>> -
>> -PACKAGES_remove = "${PN}"
>> -
>> -# manual dependency additions
>> -RPROVIDES_${PN}-modules = "${PN}"
>> -RRECOMMENDS_${PN}-core_append_class-nativesdk = " nativesdk-python3-modules"
>> -RRECOMMENDS_${PN}-crypt = "openssl ca-certificates"
>> -
>> -FILES_${PN}-2to3 += "${bindir}/2to3-${PYTHON_MAJMIN}"
>> -FILES_${PN}-pydoc += "${bindir}/pydoc${PYTHON_MAJMIN} ${bindir}/pydoc3"
>> -FILES_${PN}-idle += "${bindir}/idle3 ${bindir}/idle${PYTHON_MAJMIN}"
>> -
>> -PACKAGES =+ "${PN}-pyvenv"
>> -FILES_${PN}-pyvenv += "${bindir}/pyvenv-${PYTHON_MAJMIN} ${bindir}/pyvenv"
>> -
>> -# package libpython3
>> -PACKAGES =+ "libpython3 libpython3-staticdev"
>> -FILES_libpython3 = "${libdir}/libpython*.so.*"
>> -FILES_libpython3-staticdev += "${libdir}/python${PYTHON_MAJMIN}/config-${PYTHON_BINABI}/libpython${PYTHON_BINABI}.a"
>> -INSANE_SKIP_${PN}-dev += "dev-elf"
>> -
>> -# catch all the rest (unsorted)
>> -PACKAGES += "${PN}-misc"
>> -RDEPENDS_${PN}-misc += "${PN}-core ${PN}-email ${PN}-codecs"
>> -RDEPENDS_${PN}-modules += "${PN}-misc"
>> -FILES_${PN}-misc = "${libdir}/python${PYTHON_MAJMIN}"
>> -
>> -# catch manpage
>> -PACKAGES += "${PN}-man"
>> -FILES_${PN}-man = "${datadir}/man"
>> -
>> -RDEPENDS_${PN}-ptest = "${PN}-modules ${PN}-tests unzip bzip2"
>> -
>> -RDEPENDS_${PN}-dev = ""
>> -
>> -BBCLASSEXTEND = "nativesdk"
>> -
>> -# We want bytecode precompiled .py files (.pyc's) by default
>> -# but the user may set it on their own conf
>> -INCLUDE_PYCS ?= "1"
>> -
>> -python(){
>> -    import collections, json
>> -
>> -    filename = os.path.join(d.getVar('THISDIR'), 'python3', 'python3-manifest.json')
>> -    # This python changes the datastore based on the contents of a file, so mark
>> -    # that dependency.
>> -    bb.parse.mark_dependency(d, filename)
>> -
>> -    with open(filename) as manifest_file:
>> -        python_manifest=json.load(manifest_file, object_pairs_hook=collections.OrderedDict)
>> -
>> -    include_pycs = d.getVar('INCLUDE_PYCS')
>> -
>> -    packages = d.getVar('PACKAGES').split()
>> -    pn = d.getVar('PN')
>> -
>> -    newpackages=[]
>> -    for key in python_manifest:
>> -        pypackage= pn + '-' + key
>> -
>> -        if pypackage not in packages:
>> -            # We need to prepend, otherwise python-misc gets everything
>> -            # so we use a new variable
>> -            newpackages.append(pypackage)
>> -
>> -        # "Build" python's manifest FILES, RDEPENDS and SUMMARY
>> -        d.setVar('FILES_' + pypackage, '')
>> -        for value in python_manifest[key]['files']:
>> -            d.appendVar('FILES_' + pypackage, ' ' + value)
>> -
>> -       # Add cached files
>> -        if include_pycs == '1':
>> -            for value in python_manifest[key]['cached']:
>> -                    d.appendVar('FILES_' + pypackage, ' ' + value)
>> -
>> -        for value in python_manifest[key]['rdepends']:
>> -            # Make it work with or without $PN
>> -            if '${PN}' in value:
>> -                value=value.split('-')[1]
>> -            d.appendVar('RDEPENDS_' + pypackage, ' ' + pn + '-' + value)
>> -        d.setVar('SUMMARY_' + pypackage, python_manifest[key]['summary'])
>> -
>> -    # Prepending so to avoid python-misc getting everything
>> -    packages = newpackages + packages
>> -    d.setVar('PACKAGES', ' '.join(packages))
>> -    d.setVar('ALLOW_EMPTY_${PN}-modules', '1')
>> -}
>> -
>> -# Files needed to create a new manifest
>> -SRC_URI += "file://create_manifest3.py file://get_module_deps3.py file://python3-manifest.json"
>> -
>> -do_create_manifest() {
>> -    # This task should be run with every new release of Python.
>> -    # We must ensure that PACKAGECONFIG enables everything when creating
>> -    # a new manifest, this is to base our new manifest on a complete
>> -    # native python build, containing all dependencies, otherwise the task
>> -    # wont be able to find the required files.
>> -    # e.g. BerkeleyDB is an optional build dependency so it may or may not
>> -    # be present, we must ensure it is.
>> -
>> -    cd ${WORKDIR}
>> -    # This needs to be executed by python-native and NOT by HOST's python
>> -    nativepython3 create_manifest3.py ${PYTHON_MAJMIN}
>> -    cp python3-manifest.json.new ${THISDIR}/python3/python3-manifest.json
>> -}
>> -
>> -# bitbake python -c create_manifest
>> -addtask do_create_manifest
>> -
>> -# Make sure we have native python ready when we create a new manifest
>> -do_create_manifest[depends] += "python3:do_prepare_recipe_sysroot"
>> -do_create_manifest[depends] += "python3:do_patch"
>> diff --git a/meta/recipes-devtools/python/python3_3.7.0.bb b/meta/recipes-devtools/python/python3_3.7.0.bb
>> new file mode 100644
>> index 0000000000..453df546f0
>> --- /dev/null
>> +++ b/meta/recipes-devtools/python/python3_3.7.0.bb
>> @@ -0,0 +1,300 @@
>> +# Maintainers hint: with every new release of Python, the task
>> +# create_manifest - please see for detailed documentation
>> +# inside do_create_manifest
>> +require recipes-devtools/python/python3.inc
>> +
>> +DEPENDS = "libffi bzip2 gdbm openssl sqlite3 zlib xz \
>> +           util-linux libtirpc libnsl2 virtual/libintl virtual/crypt\
>> +"
>> +DEPENDS += "${@["qemu-native qemu-helper-native", ""][bb.utils.contains('PACKAGECONFIG', 'pgo', 0, 1, d)]}"
>> +
>> +PYTHON_BINABI = "${PYTHON_MAJMIN}${PYTHON_ABI}"
>> +
>> +SRC_URI += "\
>> +    file://tweak-MULTIARCH-for-powerpc-linux-gnuspe.patch \
>> +    file://cgi_py.patch \
>> +    file://host_include_contamination.patch \
>> +    file://uuid_when_cross_compiling.patch \
>> +    file://avoid-ncursesw-include-path.patch \
>> +    file://python3-use-CROSSPYTHONPATH-for-PYTHON_FOR_BUILD.patch \
>> +    file://configure.ac-fix-LIBPL.patch \
>> +    file://pass-missing-libraries-to-Extension-for-mul.patch \
>> +    file://float-endian.patch \
>> +    file://ftplib.patch \
>> +    file://run-ptest \
>> +"
>> +
>> +inherit multilib_header python3native update-alternatives qemu ptest
>> +
>> +MULTILIB_SUFFIX = "${@d.getVar('base_libdir',1).split('/')[-1]}"
>> +
>> +ALTERNATIVE_${PN}-dev = "python-config"
>> +ALTERNATIVE_LINK_NAME[python-config] = "${bindir}/python${PYTHON_BINABI}-config"
>> +ALTERNATIVE_TARGET[python-config] = "${bindir}/python${PYTHON_BINABI}-config-${MULTILIB_SUFFIX}"
>> +
>> +CACHED_CONFIGUREVARS = "ac_cv_have_chflags=no \
>> +                ac_cv_have_lchflags=no \
>> +                ac_cv_have_long_long_format=yes \
>> +                ac_cv_buggy_getaddrinfo=no \
>> +                ac_cv_file__dev_ptmx=yes \
>> +                ac_cv_file__dev_ptc=no \
>> +"
>> +
>> +TARGET_CC_ARCH += "-DNDEBUG -fno-inline"
>> +SDK_CC_ARCH += "-DNDEBUG -fno-inline"
>> +EXTRA_OEMAKE += "CROSS_COMPILE=yes"
>> +EXTRA_OECONF += "CROSSPYTHONPATH=${STAGING_LIBDIR_NATIVE}/python${PYTHON_MAJMIN}/lib-dynload/ --without-ensurepip"
>> +PYTHON3_PROFILE_TASK ?= "./python -m test.regrtest --pgo test_grammar test_opcodes test_dict test_builtin test_exceptions test_types test_support"
>> +
>> +export CROSS_COMPILE = "${TARGET_PREFIX}"
>> +export CCSHARED = "-fPIC"
>> +
>> +# Fix cross compilation of different modules
>> +export CROSSPYTHONPATH = "${STAGING_LIBDIR_NATIVE}/python${PYTHON_MAJMIN}/lib-dynload/:${B}/build/lib.linux-${TARGET_ARCH}-${PYTHON_MAJMIN}:${S}/Lib:${S}/Lib/plat-linux"
>> +
>> +PACKAGECONFIG ??= "pgo readline ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluetooth', '', d)}"
>> +PACKAGECONFIG[readline] = ",,readline"
>> +# Use profile guided optimisation by running PyBench inside qemu-user
>> +PACKAGECONFIG[pgo] = "--enable-optimizations"
>> +
>> +run_make() {
>> +       oe_runmake PGEN=${STAGING_BINDIR_NATIVE}/python3-native/pgen \
>> +               HOSTPYTHON=${STAGING_BINDIR_NATIVE}/python3-native/python3 \
>> +               STAGING_LIBDIR=${STAGING_LIBDIR} \
>> +               STAGING_INCDIR=${STAGING_INCDIR} \
>> +               STAGING_BASELIBDIR=${STAGING_BASELIBDIR} \
>> +               LIB=${baselib} \
>> +               ARCH=${TARGET_ARCH} \
>> +               OPT="${CFLAGS}" \
>> +               "$@"
>> +}
>> +
>> +do_compile() {
>> +       # remove any bogus LD_LIBRARY_PATH
>> +       sed -i -e s,RUNSHARED=.*,RUNSHARED=, Makefile
>> +
>> +       if [ ! -f Makefile.orig ]; then
>> +               install -m 0644 Makefile Makefile.orig
>> +       fi
>> +       sed -i -e 's,^CONFIGURE_LDFLAGS=.*,CONFIGURE_LDFLAGS=-L. -L${STAGING_LIBDIR},g' \
>> +               -e 's,libdir=${libdir},libdir=${STAGING_LIBDIR},g' \
>> +               -e 's,libexecdir=${libexecdir},libexecdir=${STAGING_DIR_HOST}${libexecdir},g' \
>> +               -e 's,^LIBDIR=.*,LIBDIR=${STAGING_LIBDIR},g' \
>> +               -e 's,includedir=${includedir},includedir=${STAGING_INCDIR},g' \
>> +               -e 's,^INCLUDEDIR=.*,INCLUDE=${STAGING_INCDIR},g' \
>> +               -e 's,^CONFINCLUDEDIR=.*,CONFINCLUDE=${STAGING_INCDIR},g' \
>> +               Makefile
>> +
>> +        if ${@bb.utils.contains('PACKAGECONFIG', 'pgo', 'true', 'false', d)}; then
>> +               qemu_binary="${@qemu_wrapper_cmdline(d, '${STAGING_DIR_TARGET}', ['${B}', '${STAGING_DIR_TARGET}/${base_libdir}'])}"
>> +               cat > ${B}/pgo-wrapper << EOF
>> +#!/bin/sh
>> +set -x
>> +cd ${B}
>> +$qemu_binary "\$@"
>> +EOF
>> +               chmod +x ${B}/pgo-wrapper
>> +               bbnote Updating Makefile to gather profiling data during build
>> +               sed -i  -e 's,$(LLVM_PROF_FILE) $(RUNSHARED) ./$(BUILDPYTHON) $(PROFILE_TASK),${B}/pgo-wrapper ./python $(PROFILE_TASK),' \
>> +                       -e 's,PROFILE_TASK=.*,PROFILE_TASK=${PYTHON3_PROFILE_TASK},' \
>> +                       Makefile
>> +       else
>> +               sed -i -e 's,$(LLVM_PROF_FILE) $(RUNSHARED) ./$(BUILDPYTHON) $(PROFILE_TASK),:,' \
>> +                       Makefile
>> +       fi
>> +
>> +       # save copy of it now, because if we do it in do_install and
>> +       # then call do_install twice we get Makefile.orig == Makefile.sysroot
>> +       install -m 0644 Makefile Makefile.sysroot
>> +
>> +        run_make profile-opt
>> +}
>> +
>> +do_install() {
>> +       # make install needs the original Makefile, or otherwise the inclues would
>> +       # go to ${D}${STAGING...}/...
>> +       install -m 0644 Makefile.orig Makefile
>> +
>> +       install -d ${D}${libdir}/pkgconfig
>> +       install -d ${D}${libdir}/python${PYTHON_MAJMIN}/config
>> +
>> +       # rerun the build once again with original makefile this time
>> +       # run install in a separate step to avoid compile/install race
>> +       run_make DESTDIR=${D} LIBDIR=${libdir} build_all
>> +       run_make DESTDIR=${D} LIBDIR=${libdir} install
>> +
>> +       # avoid conflict with 2to3 from Python 2
>> +       rm -f ${D}/${bindir}/2to3
>> +
>> +       set -x
>> +        install -m 0644 Makefile.sysroot ${D}/${libdir}/python${PYTHON_MAJMIN}/config/Makefile
>> +       install -m 0644 Makefile.sysroot ${D}/${libdir}/python${PYTHON_MAJMIN}/config-${PYTHON_BINABI}-${MULTIARCH}/Makefile
>> +
>> +       if [ -e ${WORKDIR}/sitecustomize.py ]; then
>> +               install -m 0644 ${WORKDIR}/sitecustomize.py ${D}/${libdir}/python${PYTHON_MAJMIN}
>> +       fi
>> +
>> +       oe_multilib_header python${PYTHON_BINABI}/pyconfig.h
>> +}
>> +
>> +do_install_append_class-nativesdk () {
>> +       create_wrapper ${D}${bindir}/python${PYTHON_MAJMIN} PYTHONHOME='${prefix}' TERMINFO_DIRS='${sysconfdir}/terminfo:/etc/terminfo:/usr/share/terminfo:/usr/share/misc/terminfo:/lib/terminfo' PYTHONNOUSERSITE='1'
>> +}
>> +
>> +SSTATE_SCAN_FILES += "Makefile"
>> +PACKAGE_PREPROCESS_FUNCS += "py_package_preprocess"
>> +
>> +py_package_preprocess () {
>> +       MAKESETTINGS="$(egrep '^(ABIFLAGS|MULTIARCH)=' ${B}/Makefile | sed -E -e 's/[[:space:]]//g' -e 's/=/="/' -e 's/$/"/')"
>> +       eval ${MAKESETTINGS}
>> +       if test "${ABIFLAGS}" != "${PYTHON_ABI}"; then
>> +           die "do_install: configure determined ABIFLAGS '${ABIFLAGS}' != '${PYTHON_ABI}' from python3-dir.bbclass"
>> +       fi
>> +       if test "x${BUILD_OS}" = "x${TARGET_OS}"; then
>> +               # no cross-compile at all
>> +               _PYTHON_SYSCONFIGDATA_NAME=${PYTHON_ABI}_${TARGET_OS}_${MULTIARCH}
>> +       else
>> +               # at the very moment, it's the only available target
>> +               _PYTHON_SYSCONFIGDATA_NAME=${PYTHON_ABI}_linux_${MULTIARCH}
>> +       fi
>> +
>> +       # copy back the old Makefile to fix target package
>> +       install -m 0644 ${B}/Makefile.orig ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/config/Makefile
>> +       install -m 0644 ${B}/Makefile.orig ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/config-${PYTHON_BINABI}-${MULTIARCH}/Makefile
>> +       # Remove references to buildmachine paths in target Makefile and _sysconfigdata
>> +       sed -i -e 's:--sysroot=${STAGING_DIR_TARGET}::g' -e s:'--with-libtool-sysroot=${STAGING_DIR_TARGET}'::g \
>> +               -e 's|${DEBUG_PREFIX_MAP}||g' \
>> +               -e 's:${HOSTTOOLS_DIR}/::g' \
>> +               -e 's:${RECIPE_SYSROOT_NATIVE}::g' \
>> +               -e 's:${RECIPE_SYSROOT}::g' \
>> +               -e 's:${BASE_WORKDIR}/${MULTIMACH_TARGET_SYS}::g' \
>> +               ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/config/Makefile \
>> +               ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/config-${PYTHON_BINABI}-${MULTIARCH}/Makefile \
>> +               ${PKGD}/${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata_${_PYTHON_SYSCONFIGDATA_NAME}.py \
>> +               ${PKGD}/${bindir}/python${PYTHON_BINABI}-config
>> +
>> +       # Recompile _sysconfigdata after modifying it
>> +       cd ${PKGD}
>> +       ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN} \
>> +            -c "from py_compile import compile; compile('./${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata_${_PYTHON_SYSCONFIGDATA_NAME}.py')"
>> +       ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN} \
>> +            -c "from py_compile import compile; compile('./${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata_${_PYTHON_SYSCONFIGDATA_NAME}.py', optimize=1)"
>> +       ${STAGING_BINDIR_NATIVE}/${PYTHON_PN}-native/${PYTHON_PN} \
>> +            -c "from py_compile import compile; compile('./${libdir}/python${PYTHON_MAJMIN}/_sysconfigdata_${_PYTHON_SYSCONFIGDATA_NAME}.py', optimize=2)"
>> +       cd -
>> +
>> +       mv ${PKGD}/${bindir}/python${PYTHON_BINABI}-config ${PKGD}/${bindir}/python${PYTHON_BINABI}-config-${MULTILIB_SUFFIX}
>> +}
>> +
>> +PACKAGES_remove = "${PN}"
>> +
>> +# manual dependency additions
>> +RPROVIDES_${PN}-modules = "${PN}"
>> +RRECOMMENDS_${PN}-core_append_class-nativesdk = " nativesdk-python3-modules"
>> +RRECOMMENDS_${PN}-crypt = "openssl ca-certificates"
>> +
>> +FILES_${PN}-2to3 += "${bindir}/2to3-${PYTHON_MAJMIN}"
>> +FILES_${PN}-pydoc += "${bindir}/pydoc${PYTHON_MAJMIN} ${bindir}/pydoc3"
>> +FILES_${PN}-idle += "${bindir}/idle3 ${bindir}/idle${PYTHON_MAJMIN}"
>> +
>> +PACKAGES =+ "${PN}-pyvenv"
>> +FILES_${PN}-pyvenv += "${bindir}/pyvenv-${PYTHON_MAJMIN} ${bindir}/pyvenv"
>> +
>> +# package libpython3
>> +PACKAGES =+ "libpython3 libpython3-staticdev"
>> +FILES_libpython3 = "${libdir}/libpython*.so.*"
>> +FILES_libpython3-staticdev += "${libdir}/python${PYTHON_MAJMIN}/config-${PYTHON_BINABI}*/libpython${PYTHON_BINABI}.a"
>> +INSANE_SKIP_${PN}-dev += "dev-elf"
>> +
>> +# catch all the rest (unsorted)
>> +PACKAGES += "${PN}-misc"
>> +RDEPENDS_${PN}-misc += "${PN}-core ${PN}-email ${PN}-codecs"
>> +RDEPENDS_${PN}-modules += "${PN}-misc"
>> +FILES_${PN}-misc = "${libdir}/python${PYTHON_MAJMIN}"
>> +
>> +# catch manpage
>> +PACKAGES += "${PN}-man"
>> +FILES_${PN}-man = "${datadir}/man"
>> +
>> +RDEPENDS_${PN}-ptest = "${PN}-modules ${PN}-tests unzip bzip2"
>> +
>> +RDEPENDS_${PN}-dev = ""
>> +
>> +BBCLASSEXTEND = "nativesdk"
>> +
>> +# We want bytecode precompiled .py files (.pyc's) by default
>> +# but the user may set it on their own conf
>> +INCLUDE_PYCS ?= "1"
>> +
>> +python(){
>> +    import collections, json
>> +
>> +    filename = os.path.join(d.getVar('THISDIR'), 'python3', 'python3-manifest.json')
>> +    # This python changes the datastore based on the contents of a file, so mark
>> +    # that dependency.
>> +    bb.parse.mark_dependency(d, filename)
>> +
>> +    with open(filename) as manifest_file:
>> +        python_manifest=json.load(manifest_file, object_pairs_hook=collections.OrderedDict)
>> +
>> +    include_pycs = d.getVar('INCLUDE_PYCS')
>> +
>> +    packages = d.getVar('PACKAGES').split()
>> +    pn = d.getVar('PN')
>> +
>> +    newpackages=[]
>> +    for key in python_manifest:
>> +        pypackage= pn + '-' + key
>> +
>> +        if pypackage not in packages:
>> +            # We need to prepend, otherwise python-misc gets everything
>> +            # so we use a new variable
>> +            newpackages.append(pypackage)
>> +
>> +        # "Build" python's manifest FILES, RDEPENDS and SUMMARY
>> +        d.setVar('FILES_' + pypackage, '')
>> +        for value in python_manifest[key]['files']:
>> +            d.appendVar('FILES_' + pypackage, ' ' + value)
>> +
>> +       # Add cached files
>> +        if include_pycs == '1':
>> +            for value in python_manifest[key]['cached']:
>> +                    d.appendVar('FILES_' + pypackage, ' ' + value)
>> +
>> +        for value in python_manifest[key]['rdepends']:
>> +            # Make it work with or without $PN
>> +            if '${PN}' in value:
>> +                value=value.split('-')[1]
>> +            d.appendVar('RDEPENDS_' + pypackage, ' ' + pn + '-' + value)
>> +        d.setVar('SUMMARY_' + pypackage, python_manifest[key]['summary'])
>> +
>> +    # Prepending so to avoid python-misc getting everything
>> +    packages = newpackages + packages
>> +    d.setVar('PACKAGES', ' '.join(packages))
>> +    d.setVar('ALLOW_EMPTY_${PN}-modules', '1')
>> +}
>> +
>> +# Files needed to create a new manifest
>> +SRC_URI += "file://create_manifest3.py file://get_module_deps3.py file://python3-manifest.json"
>> +
>> +do_create_manifest() {
>> +    # This task should be run with every new release of Python.
>> +    # We must ensure that PACKAGECONFIG enables everything when creating
>> +    # a new manifest, this is to base our new manifest on a complete
>> +    # native python build, containing all dependencies, otherwise the task
>> +    # wont be able to find the required files.
>> +    # e.g. BerkeleyDB is an optional build dependency so it may or may not
>> +    # be present, we must ensure it is.
>> +
>> +    cd ${WORKDIR}
>> +    # This needs to be executed by python-native and NOT by HOST's python
>> +    nativepython3 create_manifest3.py ${PYTHON_MAJMIN}
>> +    cp python3-manifest.json.new ${THISDIR}/python3/python3-manifest.json
>> +}
>> +
>> +# bitbake python -c create_manifest
>> +addtask do_create_manifest
>> +
>> +# Make sure we have native python ready when we create a new manifest
>> +do_create_manifest[depends] += "python3:do_prepare_recipe_sysroot"
>> +do_create_manifest[depends] += "python3:do_patch"
>> --
>> 2.17.1
>> 
>> --
>> _______________________________________________
>> Openembedded-core mailing list
>> Openembedded-core at lists.openembedded.org
>> http://lists.openembedded.org/mailman/listinfo/openembedded-core
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core

--
Jens Rehsack - rehsack at gmail.com

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20181102/716b2387/attachment-0002.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: Message signed with OpenPGP
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20181102/716b2387/attachment-0002.sig>


More information about the Openembedded-core mailing list