The package rpms/python37.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/python37.git/commit/?id=a64e7f7e9...
https://src.fedoraproject.org/cgit/rpms/python37.git/commit/?id=ec5f432a6...
https://src.fedoraproject.org/cgit/rpms/python37.git/commit/?id=9a2e4be58...
https://src.fedoraproject.org/cgit/rpms/python37.git/commit/?id=cb1167a87...
https://src.fedoraproject.org/cgit/rpms/python37.git/commit/?id=0577b92f7...
https://src.fedoraproject.org/cgit/rpms/python37.git/commit/?id=fb9702fb7....
Change:
+%ifarch %{valgrind_arches}
-%ifarch %{power64}
-%ifarch aarch64
+%ifnarch s390 %{mips} riscv64
+%ifarch %{valgrind_arches}
-%ifarch aarch64
Thanks.
Full change:
============
commit b2919af668911674e845e6509d09e9cda4471068
Merge: 490fd61 0577b92
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Wed Aug 28 12:07:33 2019 +0200
Merge
https://src.fedoraproject.org/rpms/python3/pull-request/131
commit 0577b92f75f4ca268e6b80a73e133cd34721cbb1
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Wed Aug 21 15:52:19 2019 +0200
Make flat
diff --git a/python3.rpmlintrc b/python3.rpmlintrc
deleted file mode 100644
index e1e2cbe..0000000
--- a/python3.rpmlintrc
+++ /dev/null
@@ -1,78 +0,0 @@
-# KNOWN BUGS:
-#
https://bugzilla.redhat.com/show_bug.cgi?id=1489816
-addFilter(r'crypto-policy-non-compliance-openssl')
-
-
-# TESTS:
-addFilter(r'(zero-length|pem-certificate|uncompressed-zip)
/usr/lib(64)?/python3.\d/test')
-
-
-# OTHER DELIBERATES:
-# chroot function
-addFilter(r'missing-call-to-chdir-with-chroot')
-
-# intentionally unversioned and selfobsoleted
-addFilter(r'unversioned-explicit-obsoletes python')
-addFilter(r'self-obsoletion python3\d obsoletes python3\d')
-
-# intentionally hardcoded
-addFilter(r'hardcoded-library-path in
%{_prefix}/lib/(debug/%{_libdir}|python%{pybasever})')
-
-# intentional for our pythonXY package
-addFilter(r'python3\d\.[^:]+: (E|W): devel-file-in-non-devel-package')
-
-# we have non binary stuff, python files
-addFilter(r'only-non-binary-in-usr-lib')
-
-# some devel files that are deliberately needed
-addFilter(r'devel-file-in-non-devel-package
/usr/include/python3\.\dm/pyconfig-(32|64)\.h')
-addFilter(r'devel-file-in-non-devel-package
/usr/lib(64)?/python3\.\d/distutils/tests/xxmodule\.c')
-
-
-# SORRY, NOT SORRY:
-# manual pages
-addFilter(r'no-manual-page-for-binary
(idle|pydoc|pyvenv|2to3|python3-debug|pathfix|msgfmt|pygettext)')
-addFilter(r'no-manual-page-for-binary python3.*-config$')
-addFilter(r'no-manual-page-for-binary python3.\dd?m$')
-
-# missing documentation from subpackages
-addFilter(r'^python3\d?-(debug|tkinter|test|idle)\.[^:]+: (E|W):
no-documentation')
-
-# platform python is obsoleted, but not provided
-addFilter(r'obsolete-not-provided platform-python')
-
-
-# RPMLINT IMPERFECTIONS
-#
https://github.com/rpm-software-management/rpmlint/issues/123
-addFilter(r'python-bytecode-wrong-magic-value .* expected 33\d\d \(3\.7\), found
3393')
-#
https://github.com/rpm-software-management/rpmlint/pull/133
-addFilter(r'python-bytecode-wrong-magic-value .* expected 33\d\d \(3\.7\), found
3394')
-
-#
https://bugzilla.redhat.com/show_bug.cgi?id=1550562
-#
https://github.com/rpm-software-management/rpmlint/issues/128
-addFilter(r'python-bytecode-inconsistent-mtime .* 1970')
-
-# debugsource
-addFilter(r'^python3\d?-debugsource\.[^:]+: (E|W): no-documentation')
-
-# debuginfo
-addFilter(r'^python3\d?-debuginfo\.[^:]+: (E|W): useless-provides
debuginfo\(build-id\)')
-
-# this is OK for F28+
-addFilter(r'library-without-ldconfig-post')
-
-# debug package contains devel and non-devel files
-addFilter(r'python3\d?-debug.[^:]+: (E|W):
(non-)?devel-file-in-(non-)?devel-package')
-
-# this goes to other subpackage, hence not actually dangling, the read error is bogus
-addFilter(r'dangling-relative-symlink /usr/lib(64)?/pkgconfig/python-3\.\ddm\.pc
python-3\.\d\.pc')
-addFilter(r'read-error /usr/lib(64)?/pkgconfig/python-3\.\ddm\.pc \[Errno 2\]')
-
-# we need this macro to evaluate, even if the line starts with #
-addFilter(r'macro-in-comment %\{_pyconfig(32|64)_h\}')
-
-# Python modules don't need to be linked against libc
-addFilter(r'E: library-not-linked-against-libc
/usr/lib(64)?/python3.\d/lib-dynload/')
-
-# SPELLING ERRORS
-addFilter(r'spelling-error .* en_US (bytecode|pyc|filename|tkinter|namespaces|pytest)
')
diff --git a/python3.spec b/python3.spec
deleted file mode 100644
index 7910dd3..0000000
--- a/python3.spec
+++ /dev/null
@@ -1,2780 +0,0 @@
-# ==================
-# Top-level metadata
-# ==================
-
-%global pybasever 3.7
-
-# pybasever without the dot:
-%global pyshortver 37
-
-Name: python3
-Summary: Interpreter of the Python programming language
-URL:
https://www.python.org/
-
-# WARNING When rebasing to a new Python version,
-# remember to update the python3-docs package as well
-%global general_version %{pybasever}.4
-#global prerel ...
-%global upstream_version %{general_version}%{?prerel}
-Version: %{general_version}%{?prerel:~%{prerel}}
-Release: 5%{?dist}
-License: Python
-
-
-# ==================================
-# Conditionals controlling the build
-# ==================================
-
-# Note that the bcond macros are named for the CLI option they create.
-# "%%bcond_without" means "ENABLE by default and create a --without
option"
-
-
-# Flat package, i.e. python36, python37, python38 for tox etc.
-# warning: changes some other defaults
-# in Fedora, never turn this on for the python3 package
-# and always keep it on for python37 etc.
-# WARNING: This does not change the package name and summary above
-%bcond_with flatpackage
-
-# Whether to use RPM build wheels from the python-{pip,setuptools}-wheel package
-# Uses upstream bundled prebuilt wheels otherwise
-%bcond_without rpmwheels
-
-# Expensive optimizations (mainly, profile-guided optimizations)
-%ifarch %{ix86} x86_64
-%bcond_without optimizations
-%else
-# On some architectures, the optimized build takes tens of hours, possibly
-# longer than Koji's 24-hour timeout. Disable optimizations here.
-%bcond_with optimizations
-%endif
-
-# Run the test suite in %%check
-%bcond_without tests
-
-# Extra build for debugging the interpreter or C-API extensions
-# (the -debug subpackages)
-%if %{with flatpackage}
-%bcond_with debug_build
-%else
-%bcond_without debug_build
-%endif
-
-# Support for the GDB debugger
-%bcond_without gdb_hooks
-
-# The dbm.gnu module (key-value database)
-%bcond_without gdbm
-
-# Main interpreter loop optimization
-%bcond_without computed_gotos
-
-# Support for the Valgrind debugger/profiler
-%ifarch %{valgrind_arches}
-%bcond_without valgrind
-%else
-%bcond_with valgrind
-%endif
-
-
-# Notes from bootstraping Python 3.7:
-#
https://fedoraproject.org/wiki/SIGs/Python/UpgradingPython
-
-
-# =====================
-# General global macros
-# =====================
-
-%global pylibdir %{_libdir}/python%{pybasever}
-%global dynload_dir %{pylibdir}/lib-dynload
-
-# ABIFLAGS, LDVERSION and SOABI are in the upstream configure.ac
-# See PEP 3149 for some background:
http://www.python.org/dev/peps/pep-3149/
-%global ABIFLAGS_optimized m
-%global ABIFLAGS_debug dm
-
-%global LDVERSION_optimized %{pybasever}%{ABIFLAGS_optimized}
-%global LDVERSION_debug %{pybasever}%{ABIFLAGS_debug}
-
-%global SOABI_optimized cpython-%{pyshortver}%{ABIFLAGS_optimized}-%{_arch}-linux%{_gnu}
-%global SOABI_debug cpython-%{pyshortver}%{ABIFLAGS_debug}-%{_arch}-linux%{_gnu}
-
-# All bytecode files are in a __pycache__ subdirectory, with a name
-# reflecting the version of the bytecode.
-# See PEP 3147:
http://www.python.org/dev/peps/pep-3147/
-# For example,
-# foo/bar.py
-# has bytecode at:
-# foo/__pycache__/bar.cpython-%%{pyshortver}.pyc
-# foo/__pycache__/bar.cpython-%%{pyshortver}.opt-1.pyc
-# foo/__pycache__/bar.cpython-%%{pyshortver}.opt-2.pyc
-%global bytecode_suffixes .cpython-%{pyshortver}*.pyc
-
-# Python's configure script defines SOVERSION, and this is used in the Makefile
-# to determine INSTSONAME, the name of the libpython DSO:
-# LDLIBRARY='libpython$(VERSION).so'
-# INSTSONAME="$LDLIBRARY".$SOVERSION
-# We mirror this here in order to make it easier to add the -gdb.py hooks.
-# (if these get out of sync, the payload of the libs subpackage will fail
-# and halt the build)
-%global py_SOVERSION 1.0
-%global py_INSTSONAME_optimized libpython%{LDVERSION_optimized}.so.%{py_SOVERSION}
-%global py_INSTSONAME_debug libpython%{LDVERSION_debug}.so.%{py_SOVERSION}
-
-# Disable automatic bytecompilation. The python3 binary is not yet be
-# available in /usr/bin when Python is built. Also, the bytecompilation fails
-# on files that test invalid syntax.
-%undefine py_auto_byte_compile
-
-# Don't let RPM set SOURCE_DATE_EPOCH based on the latest %%changelog date
-# It breaks tests with: can't find '__main__' module in .../test_zip.zip
-# Reported at
https://bugs.python.org/issue34022
-# Tracked at
https://bugzilla.redhat.com/show_bug.cgi?id=1724753
-%global source_date_epoch_from_changelog 0
-
-# For multilib support, files that are different between 32- and 64-bit arches
-# need different filenames. Use "64" or "32" according to the word
size.
-# Currently, the best way to determine an architecture's word size happens to
-# be checking %%{_lib}.
-%if "%{_lib}" == "lib64"
-%global wordsize 64
-%else
-%global wordsize 32
-%endif
-
-
-# =======================
-# Build-time requirements
-# =======================
-
-# (keep this list alphabetized)
-
-BuildRequires: autoconf
-BuildRequires: bluez-libs-devel
-BuildRequires: bzip2
-BuildRequires: bzip2-devel
-BuildRequires: desktop-file-utils
-BuildRequires: expat-devel
-
-BuildRequires: findutils
-BuildRequires: gcc-c++
-%if %{with gdbm}
-BuildRequires: gdbm-devel
-%endif
-BuildRequires: glibc-all-langpacks
-BuildRequires: glibc-devel
-BuildRequires: gmp-devel
-BuildRequires: libappstream-glib
-BuildRequires: libffi-devel
-BuildRequires: libnsl2-devel
-BuildRequires: libtirpc-devel
-BuildRequires: libGL-devel
-BuildRequires: libuuid-devel
-BuildRequires: libX11-devel
-BuildRequires: ncurses-devel
-
-BuildRequires: openssl-devel
-BuildRequires: pkgconfig
-BuildRequires: readline-devel
-BuildRequires: redhat-rpm-config >= 127
-BuildRequires: sqlite-devel
-BuildRequires: gdb
-
-BuildRequires: tar
-BuildRequires: tcl-devel
-BuildRequires: tix-devel
-BuildRequires: tk-devel
-
-%if %{with valgrind}
-BuildRequires: valgrind-devel
-%endif
-
-BuildRequires: xz-devel
-BuildRequires: zlib-devel
-
-BuildRequires: /usr/bin/dtrace
-
-# workaround
http://bugs.python.org/issue19804 (test_uuid requires ifconfig)
-BuildRequires: /usr/sbin/ifconfig
-
-# For %%python_provide
-BuildRequires: python-rpm-macros
-
-%if %{with rpmwheels}
-BuildRequires: python-setuptools-wheel
-BuildRequires: python-pip-wheel
-%endif
-
-
-# =======================
-# Source code and patches
-# =======================
-
-Source:
https://www.python.org/ftp/python/%{general_version}/Python-%{upstream_ve...
-
-# A simple script to check timestamps of bytecode files
-# Run in check section with Python that is currently being built
-# Originally written by bkabrda
-Source8: check-pyc-timestamps.py
-
-# Desktop menu entry for idle3
-Source10: idle3.desktop
-
-# AppData file for idle3
-Source11: idle3.appdata.xml
-
-# 00001 #
-# Fixup distutils/unixccompiler.py to remove standard library path from rpath:
-# Was Patch0 in ivazquez' python3000 specfile:
-Patch1: 00001-rpath.patch
-
-# 00102 #
-# Change the various install paths to use /usr/lib64/ instead or /usr/lib
-# Only used when "%%{_lib}" == "lib64"
-# Not yet sent upstream.
-Patch102: 00102-lib64.patch
-
-# 00111 #
-# Patch the Makefile.pre.in so that the generated Makefile doesn't try to build
-# a libpythonMAJOR.MINOR.a
-# See
https://bugzilla.redhat.com/show_bug.cgi?id=556092
-# Downstream only: not appropriate for upstream
-Patch111: 00111-no-static-lib.patch
-
-# 00155 #
-# Avoid allocating thunks in ctypes unless absolutely necessary, to avoid
-# generating SELinux denials on "import ctypes" and "import uuid"
when
-# embedding Python within httpd
-# See
https://bugzilla.redhat.com/show_bug.cgi?id=814391
-Patch155: 00155-avoid-ctypes-thunks.patch
-
-
-# 00170 #
-# In debug builds, try to print repr() when a C-level assert fails in the
-# garbage collector (typically indicating a reference-counting error
-# somewhere else e.g in an extension module)
-# The new macros/functions within gcmodule.c are hidden to avoid exposing
-# them within the extension API.
-# Sent upstream:
http://bugs.python.org/issue9263
-# See
https://bugzilla.redhat.com/show_bug.cgi?id=614680
-Patch170: 00170-gc-assertions.patch
-
-# 00178 #
-# Don't duplicate various FLAGS in sysconfig values
-#
http://bugs.python.org/issue17679
-# Does not affect python2 AFAICS (different sysconfig values initialization)
-Patch178: 00178-dont-duplicate-flags-in-sysconfig.patch
-
-# 00189 #
-# Instead of bundled wheels, use our RPM packaged wheels from
-# /usr/share/python-wheels
-Patch189: 00189-use-rpm-wheels.patch
-
-# 00205 #
-# LIBPL variable in makefile takes LIBPL from configure.ac
-# but the LIBPL variable defined there doesn't respect libdir macro
-Patch205: 00205-make-libpl-respect-lib64.patch
-
-# 00251
-# Set values of prefix and exec_prefix in distutils install command
-# to /usr/local if executable is /usr/bin/python* and RPM build
-# is not detected to make pip and distutils install into separate location
-# Fedora Change:
https://fedoraproject.org/wiki/Changes/Making_sudo_pip_safe
-Patch251: 00251-change-user-install-location.patch
-
-# 00274 #
-# Upstream uses Debian-style architecture naming. Change to match Fedora.
-Patch274: 00274-fix-arch-names.patch
-
-# 00316 #
-# We remove the exe files from distutil's bdist_wininst
-# So we mark the command as unsupported - and the tests are skipped
-Patch316: 00316-mark-bdist_wininst-unsupported.patch
-
-# 00328 #
-# Restore pyc to TIMESTAMP invalidation mode as default in rpmbubild
-# See
https://src.fedoraproject.org/rpms/redhat-rpm-config/pull-request/57#comm...
-Patch328: 00328-pyc-timestamp-invalidation-mode.patch
-
-# (New patches go here ^^^)
-#
-# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
-# please try to keep the patch numbers in-sync between all specfiles.
-#
-# More information, and a patch number catalog, is at:
-#
-#
https://fedoraproject.org/wiki/SIGs/Python/PythonPatches
-
-
-# ==========================================
-# Descriptions, and metadata for subpackages
-# ==========================================
-
-# People might want to dnf install pythonX.Y instead of pythonXY;
-# we enable this in both flat and nonflat package.
-Provides: python%{pybasever} = %{version}-%{release}
-
-%if %{without flatpackage}
-
-# Packages with Python modules in standard locations automatically
-# depend on python(abi). Provide that here.
-Provides: python(abi) = %{pybasever}
-
-Requires: %{name}-libs%{?_isa} = %{version}-%{release}
-
-# In order to support multiple Python interpreters for development purposes,
-# packages with the naming scheme flatpackage (e.g. python35) exist for
-# non-default versions of Python 3.
-# For consistency, and to keep the upgrade path clean, we Provide/Obsolete
-# these names here.
-Provides: python%{pyshortver} = %{version}-%{release}
-# Note that using Obsoletes without package version is not standard practice.
-# Here we assert that *any* version of the system's default interpreter is
-# preferable to an "extra" interpreter. For example, python3-3.6.1 will
-# replace python36-3.6.2.
-Obsoletes: python%{pyshortver}
-
-#
https://fedoraproject.org/wiki/Changes/Move_usr_bin_python_into_separate_...
-#
https://fedoraproject.org/wiki/Changes/Python_means_Python3
-# We recommend /usr/bin/python so users get it by default
-# Versioned recommends are problematic, and we know that the package requires
-# python3 back with fixed version, so we just use the path here:
-Recommends: %{_bindir}/python
-
-# In Fedora 31, /usr/bin/pydoc was moved here from Python 2.
-# Ideally we'd have an explicit conflict with "/usr/bin/pydoc < 3",
-# but file provides aren't versioned and the file moved across packages.
-# Instead, we rely on the conflict in python3-libs.
-
-# Previously, this was required for our rewheel patch to work.
-# This is technically no longer needed, but we keep it recommended
-# for the developer experience.
-Recommends: python3-setuptools
-Recommends: python3-pip
-
-# This prevents ALL subpackages built from this spec to require
-# /usr/bin/python3*. Granularity per subpackage is impossible.
-# It's intended for the libs package not to drag in the interpreter, see
-#
https://bugzilla.redhat.com/show_bug.cgi?id=1547131
-# All others require %%{name} anyway.
-%global __requires_exclude ^/usr/bin/python3
-
-
-# The description used both for the SRPM and the main `python3` subpackage:
-%description
-Python is an accessible, high-level, dynamically typed, interpreted programming
-language, designed with an emphasis on code readability.
-It includes an extensive standard library, and has a vast ecosystem of
-third-party libraries.
-
-The %{name} package provides the "python3" executable: the reference
-interpreter for the Python language, version 3.
-The majority of its standard library is provided in the %{name}-libs package,
-which should be installed automatically along with %{name}.
-The remaining parts of the Python standard library are broken out into the
-%{name}-tkinter and %{name}-test packages, which may need to be installed
-separately.
-
-Documentation for Python is provided in the %{name}-docs package.
-
-Packages containing additional libraries for Python are generally named with
-the "%{name}-" prefix.
-
-
-#
https://fedoraproject.org/wiki/Changes/Move_usr_bin_python_into_separate_...
-#
https://fedoraproject.org/wiki/Changes/Python_means_Python3
-%package -n python-unversioned-command
-Summary: The "python" command that runs Python 3
-BuildArch: noarch
-
-# In theory this could require any python3 version
-Requires: python3 == %{version}-%{release}
-# But since we want to provide versioned python, we require exact version
-Provides: python = %{version}-%{release}
-# This also save us an explicit conflict for older python3 builds
-
-%description -n python-unversioned-command
-This package contains /usr/bin/python - the "python" command that runs Python
3.
-
-
-%package libs
-Summary: Python runtime libraries
-
-%if %{with rpmwheels}
-Requires: python-setuptools-wheel
-Requires: python-pip-wheel
-%else
-Provides: bundled(python3-pip) = 19.0.3
-Provides: bundled(python3-setuptools) = 40.8.0
-%endif
-
-%{?python_provide:%python_provide python3-libs}
-
-# There are files in the standard library that have python shebang.
-# We've filtered the automatic requirement out so libs are installable without
-# the main package. This however makes it pulled in by default.
-# See
https://bugzilla.redhat.com/show_bug.cgi?id=1547131
-Recommends: %{name}%{?_isa} = %{version}-%{release}
-
-#
https://fedoraproject.org/wiki/Changes/Move_usr_bin_python_into_separate_...
-# In Fedora 31, several "unversioned" files like /usr/bin/pydoc and all the
-# "unversioned" provides were moved from python2 to python3.
-# So, newer python3 packages need to conflict with old Python 2 builds that
-# still provided unversioned Python.
-# Since all python packages, new and old, have versioned requires on
-# python?-libs, we do it here:
-Conflicts: python-libs < 3
-# (We explicitly conflict with python-libs and not python2-libs, so only the
-# old Python 2 builds that still provided unversioned Python are handled.)
-
-
-%description libs
-This package contains runtime libraries for use by Python:
-- the majority of the Python standard library
-- a dynamically linked library for use by applications that embed Python as
- a scripting language, and by the main "python3" executable
-
-
-%package devel
-Summary: Libraries and header files needed for Python development
-Requires: %{name} = %{version}-%{release}
-Requires: %{name}-libs%{?_isa} = %{version}-%{release}
-BuildRequires: python-rpm-macros
-
-# The RPM related dependencies bring nothing to a non-RPM Python developer
-# But we want them when packages BuildRequire python3-devel
-Requires: (python-rpm-macros if rpm-build)
-Requires: (python3-rpm-macros if rpm-build)
-Requires: (python3-rpm-generators if rpm-build)
-
-# This is not "API" (packages that need setuptools should still BuildRequire
it)
-# However some packages apparently can build both with and without setuptools
-# producing egg-info as file or directory (depending on setuptools presence).
-# Directory-to-file updates are problematic in RPM, so we ensure setuptools is
-# installed when -devel is required.
-# See
https://bugzilla.redhat.com/show_bug.cgi?id=1623914
-# See
https://fedoraproject.org/wiki/Packaging:Directory_Replacement
-Requires: (python3-setuptools if rpm-build)
-
-%{?python_provide:%python_provide python3-devel}
-
-Provides: %{name}-2to3 = %{version}-%{release}
-Provides: 2to3 = %{version}-%{release}
-
-Conflicts: %{name} < %{version}-%{release}
-
-# In Fedora 31, several "unversioned" files were moved here from Python 2:
-# pygettext.py, msgfmt.py, python-config, python.pc
-Conflicts: python-devel < 3
-
-%description devel
-This package contains the header files and configuration needed to compile
-Python extension modules (typically written in C or C++), to embed Python
-into other programs, and to make binary distributions for Python libraries.
-
-It also contains the necessary macros to build RPM packages with Python modules
-and 2to3 tool, an automatic source converter from Python 2.X.
-
-
-%package idle
-Summary: A basic graphical development environment for Python
-Requires: %{name} = %{version}-%{release}
-Requires: %{name}-tkinter = %{version}-%{release}
-
-Provides: idle3 = %{version}-%{release}
-Provides: idle = %{version}-%{release}
-
-Provides: %{name}-tools = %{version}-%{release}
-Provides: %{name}-tools%{?_isa} = %{version}-%{release}
-Obsoletes: %{name}-tools < %{version}-%{release}
-
-# In Fedora 31, /usr/bin/idle was moved here from Python 2.
-Conflicts: python-tools < 3
-
-%{?python_provide:%python_provide python3-idle}
-
-%description idle
-IDLE is Pythons Integrated Development and Learning Environment.
-
-IDLE has the following features: Python shell window (interactive
-interpreter) with colorizing of code input, output, and error messages;
-multi-window text editor with multiple undo, Python colorizing,
-smart indent, call tips, auto completion, and other features;
-search within any window, replace within editor windows, and
-search through multiple files (grep); debugger with persistent
-breakpoints, stepping, and viewing of global and local namespaces;
-configuration, browsers, and other dialogs.
-
-
-%package tkinter
-Summary: A GUI toolkit for Python
-Requires: %{name} = %{version}-%{release}
-
-%{?python_provide:%python_provide python3-tkinter}
-
-%description tkinter
-The Tkinter (Tk interface) library is a graphical user interface toolkit for
-the Python programming language.
-
-
-%package test
-Summary: The self-test suite for the main python3 package
-Requires: %{name} = %{version}-%{release}
-Requires: %{name}-libs%{?_isa} = %{version}-%{release}
-
-%{?python_provide:%python_provide python3-test}
-
-%description test
-The self-test suite for the Python interpreter.
-
-This is only useful to test Python itself. For testing general Python code,
-you should use the unittest module from %{name}-libs, or a library such as
-%{name}-pytest or %{name}-nose.
-
-
-%if %{with debug_build}
-%package debug
-Summary: Debug version of the Python runtime
-
-# The debug build is an all-in-one package version of the regular build, and
-# shares the same .py/.pyc files and directories as the regular build. Hence
-# we depend on all of the subpackages of the regular build:
-Requires: %{name}%{?_isa} = %{version}-%{release}
-Requires: %{name}-libs%{?_isa} = %{version}-%{release}
-Requires: %{name}-devel%{?_isa} = %{version}-%{release}
-Requires: %{name}-test%{?_isa} = %{version}-%{release}
-Requires: %{name}-tkinter%{?_isa} = %{version}-%{release}
-Requires: %{name}-idle%{?_isa} = %{version}-%{release}
-
-# In Fedora 31, /usr/bin/python-debug was moved here from Python 2.
-Conflicts: python-debug < 3
-
-%{?python_provide:%python_provide python3-debug}
-
-%description debug
-python3-debug provides a version of the Python runtime with numerous debugging
-features enabled, aimed at advanced Python users such as developers of Python
-extension modules.
-
-This version uses more memory and will be slower than the regular Python build,
-but is useful for tracking down reference-counting issues and other bugs.
-
-The bytecode format is unchanged, so that .pyc files are compatible between
-this and the standard version of Python, but the debugging features mean that
-C/C++ extension modules are ABI-incompatible and must be built for each version
-separately.
-
-The debug build shares installation directories with the standard Python
-runtime, so that .py and .pyc files can be shared.
-Compiled extension modules use a special ABI flag ("d") in the filename,
-so extensions for both versions can co-exist in the same directory.
-%endif # with debug_build
-
-%else # with flatpackage
-
-# We'll not provide this, on purpose
-# No package in Fedora shall ever depend on flatpackage via this
-%global __requires_exclude ^python\\(abi\\) = 3\\..$
-%global __provides_exclude ^python\\(abi\\) = 3\\..$
-
-%if %{with rpmwheels}
-Requires: python-setuptools-wheel
-Requires: python-pip-wheel
-%else
-Provides: bundled(python3-pip) = 19.0.3
-Provides: bundled(python3-setuptools) = 40.8.0
-%endif
-
-# The description for the flat package
-%description
-Python %{pybasever} package for developers.
-
-This package exists to allow developers to test their code against a newer
-version of Python. This is not a full Python stack and if you wish to run
-your applications with Python %{pybasever}, update your Fedora to a newer
-version once Python %{pybasever} is stable.
-
-%endif # with flatpackage
-
-# ======================================================
-# The prep phase of the build:
-# ======================================================
-
-%prep
-%setup -q -n Python-%{upstream_version}
-# Remove all exe files to ensure we are not shipping prebuilt binaries
-# note that those are only used to create Microsoft Windows installers
-# and that functionality is broken on Linux anyway
-find -name '*.exe' -print -delete
-
-# Remove bundled libraries to ensure that we're using the system copy.
-rm -r Modules/expat
-
-#
-# Apply patches:
-#
-%patch1 -p1
-
-%if "%{_lib}" == "lib64"
-%patch102 -p1
-%endif
-%patch111 -p1
-%patch155 -p1
-%patch170 -p1
-%patch178 -p1
-
-%if %{with rpmwheels}
-%patch189 -p1
-rm Lib/ensurepip/_bundled/*.whl
-%endif
-
-%patch205 -p1
-%patch251 -p1
-%patch274 -p1
-%patch316 -p1
-%patch328 -p1
-
-
-# Remove files that should be generated by the build
-# (This is after patching, so that we can use patches directly from upstream)
-rm configure pyconfig.h.in
-
-
-# ======================================================
-# Configuring and building the code:
-# ======================================================
-
-%build
-
-# Regenerate the configure script and pyconfig.h.in
-autoconf
-autoheader
-
-# Remember the current directory (which has sources and the configure script),
-# so we can refer to it after we "cd" elsewhere.
-topdir=$(pwd)
-
-# Get proper option names from bconds
-%if %{with computed_gotos}
-%global computed_gotos_flag yes
-%else
-%global computed_gotos_flag no
-%endif
-
-%if %{with optimizations}
-%global optimizations_flag "--enable-optimizations"
-%else
-%global optimizations_flag "--disable-optimizations"
-%endif
-
-# Set common compiler/linker flags
-# We utilize the %%extension_...flags macros here so users building C/C++
-# extensions with our python won't get all the compiler/linker flags used
-# in Fedora RPMs.
-# Standard library built here will still use the %%build_...flags,
-# Fedora packages utilizing %%py3_build will use them as well
-#
https://fedoraproject.org/wiki/Changes/Python_Extension_Flags
-export CFLAGS="%{extension_cflags} -D_GNU_SOURCE -fPIC -fwrapv"
-export CFLAGS_NODIST="%{build_cflags} -D_GNU_SOURCE -fPIC -fwrapv"
-export CXXFLAGS="%{extension_cxxflags} -D_GNU_SOURCE -fPIC -fwrapv"
-export CPPFLAGS="$(pkg-config --cflags-only-I libffi)"
-export OPT="%{extension_cflags} -D_GNU_SOURCE -fPIC -fwrapv"
-export LINKCC="gcc"
-export CFLAGS="$CFLAGS $(pkg-config --cflags openssl)"
-export LDFLAGS="%{extension_ldflags} -g $(pkg-config --libs-only-L openssl)"
-export LDFLAGS_NODIST="%{build_ldflags} -g $(pkg-config --libs-only-L
openssl)"
-
-# We can build several different configurations of Python: regular and debug.
-# Define a common function that does one build:
-BuildPython() {
- ConfName=$1
- ExtraConfigArgs=$2
- MoreCFlags=$3
-
- # Each build is done in its own directory
- ConfDir=build/$ConfName
- echo STARTING: BUILD OF PYTHON FOR CONFIGURATION: $ConfName
- mkdir -p $ConfDir
- pushd $ConfDir
-
- # Normally, %%configure looks for the "configure" script in the current
- # directory.
- # Since we changed directories, we need to tell %%configure where to look.
- %global _configure $topdir/configure
-
-%configure \
- --enable-ipv6 \
- --enable-shared \
- --with-computed-gotos=%{computed_gotos_flag} \
- --with-dbmliborder=gdbm:ndbm:bdb \
- --with-system-expat \
- --with-system-ffi \
- --enable-loadable-sqlite-extensions \
- --with-dtrace \
- --with-lto \
- --with-ssl-default-suites=openssl \
-%if %{with valgrind}
- --with-valgrind \
-%endif
- $ExtraConfigArgs \
- %{nil}
-
- # Invoke the build
- make EXTRA_CFLAGS="$CFLAGS $MoreCFlags" %{?_smp_mflags}
-
- popd
- echo FINISHED: BUILD OF PYTHON FOR CONFIGURATION: $ConfName
-}
-
-# Call the above to build each configuration.
-
-%if %{with debug_build}
-BuildPython debug \
- "--without-ensurepip --with-pydebug" \
- "-Og"
-%endif # with debug_build
-
-BuildPython optimized \
- "--without-ensurepip %{optimizations_flag}" \
- ""
-
-# ======================================================
-# Installing the built code:
-# ======================================================
-
-%install
-
-# As in %%build, remember the current directory
-topdir=$(pwd)
-
-# We install a collection of hooks for gdb that make it easier to debug
-# executables linked against libpython3* (such as /usr/bin/python3 itself)
-#
-# These hooks are implemented in Python itself (though they are for the version
-# of python that gdb is linked with)
-#
-# gdb-archer looks for them in the same path as the ELF file or its .debug
-# file, with a -gdb.py suffix.
-# We put them next to the debug file, because ldconfig would complain if
-# it found non-library files directly in /usr/lib/
-# (see
https://bugzilla.redhat.com/show_bug.cgi?id=562980)
-#
-# We'll put these files in the debuginfo package by installing them to e.g.:
-# /usr/lib/debug/usr/lib/libpython3.2.so.1.0.debug-gdb.py
-# (note that the debug path is /usr/lib/debug for both 32/64 bit)
-#
-# See
https://fedoraproject.org/wiki/Features/EasierPythonDebugging for more
-# information
-
-%if %{with gdb_hooks}
-DirHoldingGdbPy=%{_prefix}/lib/debug/%{_libdir}
-mkdir -p %{buildroot}$DirHoldingGdbPy
-%endif # with gdb_hooks
-
-# Multilib support for pyconfig.h
-# 32- and 64-bit versions of pyconfig.h are different. For multilib support
-# (making it possible to install 32- and 64-bit versions simultaneously),
-# we need to install them under different filenames, and to make the common
-# "pyconfig.h" include the right file based on architecture.
-# See
https://bugzilla.redhat.com/show_bug.cgi?id=192747
-# Filanames are defined here:
-%global _pyconfig32_h pyconfig-32.h
-%global _pyconfig64_h pyconfig-64.h
-%global _pyconfig_h pyconfig-%{wordsize}.h
-
-# Use a common function to do an install for all our configurations:
-InstallPython() {
-
- ConfName=$1
- PyInstSoName=$2
- MoreCFlags=$3
- LDVersion=$4
-
- # Switch to the directory with this configuration's built files
- ConfDir=build/$ConfName
- echo STARTING: INSTALL OF PYTHON FOR CONFIGURATION: $ConfName
- mkdir -p $ConfDir
- pushd $ConfDir
-
- make \
- DESTDIR=%{buildroot} \
- INSTALL="install -p" \
- EXTRA_CFLAGS="$MoreCFlags" \
- install
-
- popd
-
-%if %{with gdb_hooks}
- # See comment on $DirHoldingGdbPy above
- PathOfGdbPy=$DirHoldingGdbPy/$PyInstSoName-%{version}-%{release}.%{_arch}.debug-gdb.py
- cp Tools/gdb/libpython.py %{buildroot}$PathOfGdbPy
-%endif # with gdb_hooks
-
- # Rename the -devel script that differs on different arches to arch specific name
- mv %{buildroot}%{_bindir}/python${LDVersion}-{,`uname -m`-}config
- echo -e '#!/bin/sh\nexec `dirname $0`/python'${LDVersion}'-`uname
-m`-config "$@"' > \
- %{buildroot}%{_bindir}/python${LDVersion}-config
- echo '[ $? -eq 127 ] && echo "Could not find
python'${LDVersion}'-`uname -m`-config. Look around to see available arches."
>&2' >> \
- %{buildroot}%{_bindir}/python${LDVersion}-config
- chmod +x %{buildroot}%{_bindir}/python${LDVersion}-config
-
- # Make python3-devel multilib-ready
- mv %{buildroot}%{_includedir}/python${LDVersion}/pyconfig.h \
- %{buildroot}%{_includedir}/python${LDVersion}/%{_pyconfig_h}
- cat > %{buildroot}%{_includedir}/python${LDVersion}/pyconfig.h << EOF
-#include <bits/wordsize.h>
-
-#if __WORDSIZE == 32
-#include "%{_pyconfig32_h}"
-#elif __WORDSIZE == 64
-#include "%{_pyconfig64_h}"
-#else
-#error "Unknown word size"
-#endif
-EOF
-
- echo FINISHED: INSTALL OF PYTHON FOR CONFIGURATION: $ConfName
-}
-
-# Install the "debug" build first; any common files will be overridden with
-# later builds
-%if %{with debug_build}
-InstallPython debug \
- %{py_INSTSONAME_debug} \
- -O0 \
- %{LDVERSION_debug}
-%endif # with debug_build
-
-# Now the optimized build:
-InstallPython optimized \
- %{py_INSTSONAME_optimized} \
- "" \
- %{LDVERSION_optimized}
-
-# Install directories for additional packages
-install -d -m 0755 %{buildroot}%{pylibdir}/site-packages/__pycache__
-%if "%{_lib}" == "lib64"
-# The 64-bit version needs to create "site-packages" in /usr/lib/ (for
-# pure-Python modules) as well as in /usr/lib64/ (for packages with extension
-# modules).
-# Note that rpmlint will complain about hardcoded library path;
-# this is intentional.
-install -d -m 0755
%{buildroot}%{_prefix}/lib/python%{pybasever}/site-packages/__pycache__
-%endif
-
-%if %{without flatpackage}
-# add idle3 to menu
-install -D -m 0644 Lib/idlelib/Icons/idle_16.png
%{buildroot}%{_datadir}/icons/hicolor/16x16/apps/idle3.png
-install -D -m 0644 Lib/idlelib/Icons/idle_32.png
%{buildroot}%{_datadir}/icons/hicolor/32x32/apps/idle3.png
-install -D -m 0644 Lib/idlelib/Icons/idle_48.png
%{buildroot}%{_datadir}/icons/hicolor/48x48/apps/idle3.png
-desktop-file-install --dir=%{buildroot}%{_datadir}/applications %{SOURCE10}
-
-# Install and validate appdata file
-mkdir -p %{buildroot}%{_metainfodir}
-cp -a %{SOURCE11} %{buildroot}%{_metainfodir}
-appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/idle3.appdata.xml
-%endif
-
-# Make sure distutils looks at the right pyconfig.h file
-# See
https://bugzilla.redhat.com/show_bug.cgi?id=201434
-# Similar for sysconfig: sysconfig.get_config_h_filename tries to locate
-# pyconfig.h so it can be parsed, and needs to do this at runtime in site.py
-# when python starts up (see
https://bugzilla.redhat.com/show_bug.cgi?id=653058)
-#
-# Split this out so it goes directly to the pyconfig-32.h/pyconfig-64.h
-# variants:
-sed -i -e "s/'pyconfig.h'/'%{_pyconfig_h}'/" \
- %{buildroot}%{pylibdir}/distutils/sysconfig.py \
- %{buildroot}%{pylibdir}/sysconfig.py
-
-# Install pathfix.py to bindir
-# See
https://github.com/fedora-python/python-rpm-porting/issues/24
-cp -p Tools/scripts/pathfix.py %{buildroot}%{_bindir}/
-
-# Install i18n tools to bindir
-# They are also in python2, so we version them
-#
https://bugzilla.redhat.com/show_bug.cgi?id=1571474
-for tool in pygettext msgfmt; do
- cp -p Tools/i18n/${tool}.py %{buildroot}%{_bindir}/${tool}%{pybasever}.py
- ln -s ${tool}%{pybasever}.py %{buildroot}%{_bindir}/${tool}3.py
-done
-
-# Switch all shebangs to refer to the specific Python version.
-# This currently only covers files matching ^[a-zA-Z0-9_]+\.py$,
-# so handle files named using other naming scheme separately.
-LD_LIBRARY_PATH=./build/optimized ./build/optimized/python \
- Tools/scripts/pathfix.py \
- -i "%{_bindir}/python%{pybasever}" -pn \
- %{buildroot} \
- %{buildroot}%{_bindir}/*%{pybasever}.py \
- %{?with_gdb_hooks:%{buildroot}$DirHoldingGdbPy/*.py}
-
-# Remove tests for python3-tools which was removed in
-#
https://bugzilla.redhat.com/show_bug.cgi?id=1312030
-rm -rf %{buildroot}%{pylibdir}/test/test_tools
-
-# Remove shebang lines from .py files that aren't executable, and
-# remove executability from .py files that don't have a shebang line:
-find %{buildroot} -name \*.py \
- \( \( \! -perm /u+x,g+x,o+x -exec sed -e '/^#!/Q 0' -e 'Q 1' {} \; \
- -print -exec sed -i '1d' {} \; \) -o \( \
- -perm /u+x,g+x,o+x ! -exec grep -m 1 -q '^#!' {} \; \
- -exec chmod a-x {} \; \) \)
-
-# Get rid of DOS batch files:
-find %{buildroot} -name \*.bat -exec rm {} \;
-
-# Get rid of backup files:
-find %{buildroot}/ -name "*~" -exec rm -f {} \;
-find . -name "*~" -exec rm -f {} \;
-
-# Do bytecompilation with the newly installed interpreter.
-# This is similar to the script in macros.pybytecompile
-# compile *.pyc
-find %{buildroot} -type f -a -name "*.py" -print0 | \
- LD_LIBRARY_PATH="%{buildroot}%{dynload_dir}/:%{buildroot}%{_libdir}" \
- PYTHONPATH="%{buildroot}%{_libdir}/python%{pybasever}
%{buildroot}%{_libdir}/python%{pybasever}/site-packages" \
- xargs -0 %{buildroot}%{_bindir}/python%{pybasever} -O -c 'import py_compile, sys;
[py_compile.compile(f, dfile=f.partition("%{buildroot}")[2], optimize=opt) for
opt in range(3) for f in sys.argv[1:]]' || :
-
-# Since we have pathfix.py in bindir, this is created, but we don't want it
-rm -rf %{buildroot}%{_bindir}/__pycache__
-
-# Fixup permissions for shared libraries from non-standard 555 to standard 755:
-find %{buildroot} -perm 555 -exec chmod 755 {} \;
-
-# Create "/usr/bin/python3-debug", a symlink to the python3 debug binary, to
-# avoid the user having to know the precise version and ABI flags.
-# See e.g.
https://bugzilla.redhat.com/show_bug.cgi?id=676748
-%if %{with debug_build} && %{without flatpackage}
-ln -s \
- %{_bindir}/python%{LDVERSION_debug} \
- %{buildroot}%{_bindir}/python3-debug
-%endif
-
-# There's 2to3-X.X executable and 2to3 soft link to it.
-# No reason to have both, so keep only 2to3 as an executable.
-# See
https://bugzilla.redhat.com/show_bug.cgi?id=1111275
-mv %{buildroot}%{_bindir}/2to3-%{pybasever} %{buildroot}%{_bindir}/2to3
-
-# make man python3.Xm work
https://bugzilla.redhat.com/show_bug.cgi?id=1612241
-ln -s ./python%{pybasever}.1 %{buildroot}%{_mandir}/man1/python%{pybasever}m.1
-
-%if %{with flatpackage}
-# Remove stuff that would conflict with python3 package
-rm %{buildroot}%{_bindir}/python3
-rm %{buildroot}%{_bindir}/pydoc3
-rm %{buildroot}%{_bindir}/pathfix.py
-rm %{buildroot}%{_bindir}/pygettext3.py
-rm %{buildroot}%{_bindir}/msgfmt3.py
-rm %{buildroot}%{_bindir}/idle3
-rm %{buildroot}%{_bindir}/python3-*
-rm %{buildroot}%{_bindir}/pyvenv
-rm %{buildroot}%{_bindir}/2to3
-rm %{buildroot}%{_libdir}/libpython3.so
-rm %{buildroot}%{_mandir}/man1/python3.1*
-rm %{buildroot}%{_libdir}/pkgconfig/python3.pc
-%else
-# Link the unversioned stuff
-#
https://fedoraproject.org/wiki/Changes/Python_means_Python3
-ln -s ./python3 %{buildroot}%{_bindir}/python
-ln -s ./pydoc3 %{buildroot}%{_bindir}/pydoc
-ln -s ./pygettext3.py %{buildroot}%{_bindir}/pygettext.py
-ln -s ./msgfmt3.py %{buildroot}%{_bindir}/msgfmt.py
-ln -s ./idle3 %{buildroot}%{_bindir}/idle
-ln -s ./python3-config %{buildroot}%{_bindir}/python-config
-ln -s ./python3.1 %{buildroot}%{_mandir}/man1/python.1
-ln -s ./python3.pc %{buildroot}%{_libdir}/pkgconfig/python.pc
-%if %{with debug_build}
-ln -s ./python3-debug %{buildroot}%{_bindir}/python-debug
-%endif
-%endif
-
-
-# ======================================================
-# Checks for packaging issues
-# ======================================================
-
-%check
-
-# first of all, check timestamps of bytecode files
-find %{buildroot} -type f -a -name "*.py" -print0 | \
- LD_LIBRARY_PATH="%{buildroot}%{dynload_dir}/:%{buildroot}%{_libdir}" \
- PYTHONPATH="%{buildroot}%{_libdir}/python%{pybasever}
%{buildroot}%{_libdir}/python%{pybasever}/site-packages" \
- xargs -0 %{buildroot}%{_bindir}/python%{pybasever} %{SOURCE8}
-
-# Ensure that the curses module was linked against libncursesw.so, rather than
-# libncurses.so
-# See
https://bugzilla.redhat.com/show_bug.cgi?id=539917
-ldd %{buildroot}/%{dynload_dir}/_curses*.so \
- | grep curses \
- | grep libncurses.so && (echo "_curses.so linked against
libncurses.so" ; exit 1)
-
-# Ensure that the debug modules are linked against the debug libpython, and
-# likewise for the optimized modules and libpython:
-for Module in %{buildroot}/%{dynload_dir}/*.so ; do
- case $Module in
- *.%{SOABI_debug})
- ldd $Module | grep %{py_INSTSONAME_optimized} &&
- (echo Debug module $Module linked against optimized
%{py_INSTSONAME_optimized} ; exit 1)
-
- ;;
- *.%{SOABI_optimized})
- ldd $Module | grep %{py_INSTSONAME_debug} &&
- (echo Optimized module $Module linked against debug %{py_INSTSONAME_debug} ;
exit 1)
- ;;
- esac
-done
-
-
-# ======================================================
-# Running the upstream test suite
-# ======================================================
-
-topdir=$(pwd)
-CheckPython() {
- ConfName=$1
- ConfDir=$(pwd)/build/$ConfName
-
- echo STARTING: CHECKING OF PYTHON FOR CONFIGURATION: $ConfName
-
- # Note that we're running the tests using the version of the code in the
- # builddir, not in the buildroot.
-
- # Show some info, helpful for debugging test failures
- LD_LIBRARY_PATH=$ConfDir $ConfDir/python -m test.pythoninfo
-
- # Run the upstream test suite
- # test_gdb skipped on armv7hl:
- #
https://bugzilla.redhat.com/show_bug.cgi?id=1196181
- # test_gdb skipped on s390x:
- #
https://bugzilla.redhat.com/show_bug.cgi?id=1678277
- LD_LIBRARY_PATH=$ConfDir $ConfDir/python -m test.regrtest \
- -wW --slowest -j0 \
- -x test_distutils \
- -x test_bdist_rpm \
- %ifarch %{arm} s390x
- -x test_gdb \
- %endif
- %ifarch %{mips64}
- -x test_ctypes \
- %endif
-
- echo FINISHED: CHECKING OF PYTHON FOR CONFIGURATION: $ConfName
-
-}
-
-%if %{with tests}
-
-# Check each of the configurations:
-%if %{with debug_build}
-CheckPython debug
-%endif # with debug_build
-CheckPython optimized
-
-%endif # with tests
-
-
-%files
-%doc README.rst
-
-%if %{without flatpackage}
-%{_bindir}/pydoc*
-%{_bindir}/python3
-%{_bindir}/pyvenv
-%else
-%{_bindir}/pydoc%{pybasever}
-%endif
-
-%{_bindir}/python%{pybasever}
-%{_bindir}/python%{pybasever}m
-%{_bindir}/pyvenv-%{pybasever}
-%{_mandir}/*/*3*
-
-
-%if %{without flatpackage}
-%files -n python-unversioned-command
-%{_bindir}/python
-%{_mandir}/*/python.1*
-
-%files libs
-%doc README.rst
-%endif
-
-%dir %{pylibdir}
-%dir %{dynload_dir}
-
-%license %{pylibdir}/LICENSE.txt
-
-%{pylibdir}/lib2to3
-%if %{without flatpackage}
-%exclude %{pylibdir}/lib2to3/tests
-%endif
-
-%dir %{pylibdir}/unittest/
-%dir %{pylibdir}/unittest/__pycache__/
-%{pylibdir}/unittest/*.py
-%{pylibdir}/unittest/__pycache__/*%{bytecode_suffixes}
-
-%dir %{pylibdir}/asyncio/
-%dir %{pylibdir}/asyncio/__pycache__/
-%{pylibdir}/asyncio/*.py
-%{pylibdir}/asyncio/__pycache__/*%{bytecode_suffixes}
-
-%dir %{pylibdir}/venv/
-%dir %{pylibdir}/venv/__pycache__/
-%{pylibdir}/venv/*.py
-%{pylibdir}/venv/__pycache__/*%{bytecode_suffixes}
-%{pylibdir}/venv/scripts
-
-%{pylibdir}/wsgiref
-%{pylibdir}/xmlrpc
-
-%dir %{pylibdir}/ensurepip/
-%dir %{pylibdir}/ensurepip/__pycache__/
-%{pylibdir}/ensurepip/*.py
-%{pylibdir}/ensurepip/__pycache__/*%{bytecode_suffixes}
-
-%if %{with rpmwheels}
-%exclude %{pylibdir}/ensurepip/_bundled
-%else
-%dir %{pylibdir}/ensurepip/_bundled
-%{pylibdir}/ensurepip/_bundled/*.whl
-%endif
-
-%dir %{pylibdir}/concurrent/
-%dir %{pylibdir}/concurrent/__pycache__/
-%{pylibdir}/concurrent/*.py
-%{pylibdir}/concurrent/__pycache__/*%{bytecode_suffixes}
-
-%dir %{pylibdir}/concurrent/futures/
-%dir %{pylibdir}/concurrent/futures/__pycache__/
-%{pylibdir}/concurrent/futures/*.py
-%{pylibdir}/concurrent/futures/__pycache__/*%{bytecode_suffixes}
-
-%{pylibdir}/pydoc_data
-
-%{dynload_dir}/_blake2.%{SOABI_optimized}.so
-%{dynload_dir}/_md5.%{SOABI_optimized}.so
-%{dynload_dir}/_sha1.%{SOABI_optimized}.so
-%{dynload_dir}/_sha256.%{SOABI_optimized}.so
-%{dynload_dir}/_sha3.%{SOABI_optimized}.so
-%{dynload_dir}/_sha512.%{SOABI_optimized}.so
-
-%{dynload_dir}/_asyncio.%{SOABI_optimized}.so
-%{dynload_dir}/_bisect.%{SOABI_optimized}.so
-%{dynload_dir}/_bz2.%{SOABI_optimized}.so
-%{dynload_dir}/_codecs_cn.%{SOABI_optimized}.so
-%{dynload_dir}/_codecs_hk.%{SOABI_optimized}.so
-%{dynload_dir}/_codecs_iso2022.%{SOABI_optimized}.so
-%{dynload_dir}/_codecs_jp.%{SOABI_optimized}.so
-%{dynload_dir}/_codecs_kr.%{SOABI_optimized}.so
-%{dynload_dir}/_codecs_tw.%{SOABI_optimized}.so
-%{dynload_dir}/_contextvars.%{SOABI_optimized}.so
-%{dynload_dir}/_crypt.%{SOABI_optimized}.so
-%{dynload_dir}/_csv.%{SOABI_optimized}.so
-%{dynload_dir}/_ctypes.%{SOABI_optimized}.so
-%{dynload_dir}/_curses.%{SOABI_optimized}.so
-%{dynload_dir}/_curses_panel.%{SOABI_optimized}.so
-%{dynload_dir}/_dbm.%{SOABI_optimized}.so
-%{dynload_dir}/_decimal.%{SOABI_optimized}.so
-%{dynload_dir}/_elementtree.%{SOABI_optimized}.so
-%if %{with gdbm}
-%{dynload_dir}/_gdbm.%{SOABI_optimized}.so
-%endif
-%{dynload_dir}/_hashlib.%{SOABI_optimized}.so
-%{dynload_dir}/_heapq.%{SOABI_optimized}.so
-%{dynload_dir}/_json.%{SOABI_optimized}.so
-%{dynload_dir}/_lsprof.%{SOABI_optimized}.so
-%{dynload_dir}/_lzma.%{SOABI_optimized}.so
-%{dynload_dir}/_multibytecodec.%{SOABI_optimized}.so
-%{dynload_dir}/_multiprocessing.%{SOABI_optimized}.so
-%{dynload_dir}/_opcode.%{SOABI_optimized}.so
-%{dynload_dir}/_pickle.%{SOABI_optimized}.so
-%{dynload_dir}/_posixsubprocess.%{SOABI_optimized}.so
-%{dynload_dir}/_queue.%{SOABI_optimized}.so
-%{dynload_dir}/_random.%{SOABI_optimized}.so
-%{dynload_dir}/_socket.%{SOABI_optimized}.so
-%{dynload_dir}/_sqlite3.%{SOABI_optimized}.so
-%{dynload_dir}/_ssl.%{SOABI_optimized}.so
-%{dynload_dir}/_struct.%{SOABI_optimized}.so
-%{dynload_dir}/array.%{SOABI_optimized}.so
-%{dynload_dir}/audioop.%{SOABI_optimized}.so
-%{dynload_dir}/binascii.%{SOABI_optimized}.so
-%{dynload_dir}/cmath.%{SOABI_optimized}.so
-%{dynload_dir}/_datetime.%{SOABI_optimized}.so
-%{dynload_dir}/fcntl.%{SOABI_optimized}.so
-%{dynload_dir}/grp.%{SOABI_optimized}.so
-%{dynload_dir}/math.%{SOABI_optimized}.so
-%{dynload_dir}/mmap.%{SOABI_optimized}.so
-%{dynload_dir}/nis.%{SOABI_optimized}.so
-%{dynload_dir}/ossaudiodev.%{SOABI_optimized}.so
-%{dynload_dir}/parser.%{SOABI_optimized}.so
-%{dynload_dir}/pyexpat.%{SOABI_optimized}.so
-%{dynload_dir}/readline.%{SOABI_optimized}.so
-%{dynload_dir}/resource.%{SOABI_optimized}.so
-%{dynload_dir}/select.%{SOABI_optimized}.so
-%{dynload_dir}/spwd.%{SOABI_optimized}.so
-%{dynload_dir}/syslog.%{SOABI_optimized}.so
-%{dynload_dir}/termios.%{SOABI_optimized}.so
-%{dynload_dir}/_testmultiphase.%{SOABI_optimized}.so
-%{dynload_dir}/unicodedata.%{SOABI_optimized}.so
-%{dynload_dir}/_uuid.%{SOABI_optimized}.so
-%{dynload_dir}/xxlimited.%{SOABI_optimized}.so
-%{dynload_dir}/zlib.%{SOABI_optimized}.so
-
-%dir %{pylibdir}/site-packages/
-%dir %{pylibdir}/site-packages/__pycache__/
-%{pylibdir}/site-packages/README.txt
-%{pylibdir}/*.py
-%dir %{pylibdir}/__pycache__/
-%{pylibdir}/__pycache__/*%{bytecode_suffixes}
-
-%dir %{pylibdir}/collections/
-%dir %{pylibdir}/collections/__pycache__/
-%{pylibdir}/collections/*.py
-%{pylibdir}/collections/__pycache__/*%{bytecode_suffixes}
-
-%dir %{pylibdir}/ctypes/
-%dir %{pylibdir}/ctypes/__pycache__/
-%{pylibdir}/ctypes/*.py
-%{pylibdir}/ctypes/__pycache__/*%{bytecode_suffixes}
-%{pylibdir}/ctypes/macholib
-
-%{pylibdir}/curses
-
-%dir %{pylibdir}/dbm/
-%dir %{pylibdir}/dbm/__pycache__/
-%{pylibdir}/dbm/*.py
-%{pylibdir}/dbm/__pycache__/*%{bytecode_suffixes}
-
-%dir %{pylibdir}/distutils/
-%dir %{pylibdir}/distutils/__pycache__/
-%{pylibdir}/distutils/*.py
-%{pylibdir}/distutils/__pycache__/*%{bytecode_suffixes}
-%{pylibdir}/distutils/README
-%{pylibdir}/distutils/command
-
-%dir %{pylibdir}/email/
-%dir %{pylibdir}/email/__pycache__/
-%{pylibdir}/email/*.py
-%{pylibdir}/email/__pycache__/*%{bytecode_suffixes}
-%{pylibdir}/email/mime
-%doc %{pylibdir}/email/architecture.rst
-
-%{pylibdir}/encodings
-
-%{pylibdir}/html
-%{pylibdir}/http
-
-%dir %{pylibdir}/importlib/
-%dir %{pylibdir}/importlib/__pycache__/
-%{pylibdir}/importlib/*.py
-%{pylibdir}/importlib/__pycache__/*%{bytecode_suffixes}
-
-%dir %{pylibdir}/json/
-%dir %{pylibdir}/json/__pycache__/
-%{pylibdir}/json/*.py
-%{pylibdir}/json/__pycache__/*%{bytecode_suffixes}
-
-%{pylibdir}/logging
-%{pylibdir}/multiprocessing
-
-%dir %{pylibdir}/sqlite3/
-%dir %{pylibdir}/sqlite3/__pycache__/
-%{pylibdir}/sqlite3/*.py
-%{pylibdir}/sqlite3/__pycache__/*%{bytecode_suffixes}
-
-%if %{without flatpackage}
-%exclude %{pylibdir}/turtle.py
-%exclude %{pylibdir}/__pycache__/turtle*%{bytecode_suffixes}
-%endif
-
-%{pylibdir}/urllib
-%{pylibdir}/xml
-
-%if "%{_lib}" == "lib64"
-%attr(0755,root,root) %dir %{_prefix}/lib/python%{pybasever}
-%attr(0755,root,root) %dir %{_prefix}/lib/python%{pybasever}/site-packages
-%attr(0755,root,root) %dir %{_prefix}/lib/python%{pybasever}/site-packages/__pycache__/
-%endif
-
-# "Makefile" and the config-32/64.h file are needed by
-# distutils/sysconfig.py:_init_posix(), so we include them in the core
-# package, along with their parent directories (bug 531901):
-%dir %{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/
-%{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/Makefile
-%dir %{_includedir}/python%{LDVERSION_optimized}/
-%{_includedir}/python%{LDVERSION_optimized}/%{_pyconfig_h}
-
-%{_libdir}/%{py_INSTSONAME_optimized}
-%if %{without flatpackage}
-%{_libdir}/libpython3.so
-%endif
-
-
-%if %{without flatpackage}
-%files devel
-%{_bindir}/2to3
-%endif
-
-%{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/*
-%if %{without flatpackage}
-%exclude %{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/Makefile
-%exclude %{_includedir}/python%{LDVERSION_optimized}/%{_pyconfig_h}
-%endif
-%{_includedir}/python%{LDVERSION_optimized}/*.h
-%{_includedir}/python%{LDVERSION_optimized}/internal/
-%doc Misc/README.valgrind Misc/valgrind-python.supp Misc/gdbinit
-
-%if %{without flatpackage}
-%{_bindir}/python3-config
-%{_bindir}/python-config
-%{_libdir}/pkgconfig/python3.pc
-%{_libdir}/pkgconfig/python.pc
-%{_bindir}/pathfix.py
-%{_bindir}/pygettext3.py
-%{_bindir}/pygettext.py
-%{_bindir}/msgfmt3.py
-%{_bindir}/msgfmt.py
-%endif
-
-%{_bindir}/pygettext%{pybasever}.py
-%{_bindir}/msgfmt%{pybasever}.py
-
-%{_bindir}/python%{pybasever}-config
-%{_bindir}/python%{LDVERSION_optimized}-config
-%{_bindir}/python%{LDVERSION_optimized}-*-config
-%{_libdir}/libpython%{LDVERSION_optimized}.so
-%{_libdir}/pkgconfig/python-%{LDVERSION_optimized}.pc
-%{_libdir}/pkgconfig/python-%{pybasever}.pc
-
-
-%if %{without flatpackage}
-%files idle
-
-%{_bindir}/idle*
-%else
-%{_bindir}/idle%{pybasever}
-%endif
-
-%{pylibdir}/idlelib
-
-%if %{without flatpackage}
-%{_metainfodir}/idle3.appdata.xml
-%{_datadir}/applications/idle3.desktop
-%{_datadir}/icons/hicolor/*/apps/idle3.*
-%endif
-
-%if %{without flatpackage}
-%files tkinter
-%endif
-
-%{pylibdir}/tkinter
-%if %{without flatpackage}
-%exclude %{pylibdir}/tkinter/test
-%endif
-%{dynload_dir}/_tkinter.%{SOABI_optimized}.so
-%{pylibdir}/turtle.py
-%{pylibdir}/__pycache__/turtle*%{bytecode_suffixes}
-%dir %{pylibdir}/turtledemo
-%{pylibdir}/turtledemo/*.py
-%{pylibdir}/turtledemo/*.cfg
-%dir %{pylibdir}/turtledemo/__pycache__/
-%{pylibdir}/turtledemo/__pycache__/*%{bytecode_suffixes}
-
-
-%if %{without flatpackage}
-%files test
-%endif
-
-%{pylibdir}/ctypes/test
-%{pylibdir}/distutils/tests
-%{pylibdir}/sqlite3/test
-%{pylibdir}/test
-%{dynload_dir}/_ctypes_test.%{SOABI_optimized}.so
-%{dynload_dir}/_testbuffer.%{SOABI_optimized}.so
-%{dynload_dir}/_testcapi.%{SOABI_optimized}.so
-%{dynload_dir}/_testimportmultiple.%{SOABI_optimized}.so
-%{dynload_dir}/_xxtestfuzz.%{SOABI_optimized}.so
-%{pylibdir}/lib2to3/tests
-%{pylibdir}/tkinter/test
-%{pylibdir}/unittest/test
-
-# We don't bother splitting the debug build out into further subpackages:
-# if you need it, you're probably a developer.
-
-# Hence the manifest is the combination of analogous files in the manifests of
-# all of the other subpackages
-
-%if %{with debug_build}
-%if %{without flatpackage}
-%files debug
-%{_bindir}/python3-debug
-%{_bindir}/python-debug
-%endif
-
-# Analog of the core subpackage's files:
-%{_bindir}/python%{LDVERSION_debug}
-
-# Analog of the -libs subpackage's files:
-# ...with debug builds of the built-in "extension" modules:
-
-%{dynload_dir}/_blake2.%{SOABI_debug}.so
-%{dynload_dir}/_md5.%{SOABI_debug}.so
-%{dynload_dir}/_sha1.%{SOABI_debug}.so
-%{dynload_dir}/_sha256.%{SOABI_debug}.so
-%{dynload_dir}/_sha3.%{SOABI_debug}.so
-%{dynload_dir}/_sha512.%{SOABI_debug}.so
-
-%{dynload_dir}/_asyncio.%{SOABI_debug}.so
-%{dynload_dir}/_bisect.%{SOABI_debug}.so
-%{dynload_dir}/_bz2.%{SOABI_debug}.so
-%{dynload_dir}/_codecs_cn.%{SOABI_debug}.so
-%{dynload_dir}/_codecs_hk.%{SOABI_debug}.so
-%{dynload_dir}/_codecs_iso2022.%{SOABI_debug}.so
-%{dynload_dir}/_codecs_jp.%{SOABI_debug}.so
-%{dynload_dir}/_codecs_kr.%{SOABI_debug}.so
-%{dynload_dir}/_codecs_tw.%{SOABI_debug}.so
-%{dynload_dir}/_contextvars.%{SOABI_debug}.so
-%{dynload_dir}/_crypt.%{SOABI_debug}.so
-%{dynload_dir}/_csv.%{SOABI_debug}.so
-%{dynload_dir}/_ctypes.%{SOABI_debug}.so
-%{dynload_dir}/_curses.%{SOABI_debug}.so
-%{dynload_dir}/_curses_panel.%{SOABI_debug}.so
-%{dynload_dir}/_dbm.%{SOABI_debug}.so
-%{dynload_dir}/_decimal.%{SOABI_debug}.so
-%{dynload_dir}/_elementtree.%{SOABI_debug}.so
-%if %{with gdbm}
-%{dynload_dir}/_gdbm.%{SOABI_debug}.so
-%endif
-%{dynload_dir}/_hashlib.%{SOABI_debug}.so
-%{dynload_dir}/_heapq.%{SOABI_debug}.so
-%{dynload_dir}/_json.%{SOABI_debug}.so
-%{dynload_dir}/_lsprof.%{SOABI_debug}.so
-%{dynload_dir}/_lzma.%{SOABI_debug}.so
-%{dynload_dir}/_multibytecodec.%{SOABI_debug}.so
-%{dynload_dir}/_multiprocessing.%{SOABI_debug}.so
-%{dynload_dir}/_opcode.%{SOABI_debug}.so
-%{dynload_dir}/_pickle.%{SOABI_debug}.so
-%{dynload_dir}/_posixsubprocess.%{SOABI_debug}.so
-%{dynload_dir}/_queue.%{SOABI_debug}.so
-%{dynload_dir}/_random.%{SOABI_debug}.so
-%{dynload_dir}/_socket.%{SOABI_debug}.so
-%{dynload_dir}/_sqlite3.%{SOABI_debug}.so
-%{dynload_dir}/_ssl.%{SOABI_debug}.so
-%{dynload_dir}/_struct.%{SOABI_debug}.so
-%{dynload_dir}/array.%{SOABI_debug}.so
-%{dynload_dir}/audioop.%{SOABI_debug}.so
-%{dynload_dir}/binascii.%{SOABI_debug}.so
-%{dynload_dir}/cmath.%{SOABI_debug}.so
-%{dynload_dir}/_datetime.%{SOABI_debug}.so
-%{dynload_dir}/fcntl.%{SOABI_debug}.so
-%{dynload_dir}/grp.%{SOABI_debug}.so
-%{dynload_dir}/math.%{SOABI_debug}.so
-%{dynload_dir}/mmap.%{SOABI_debug}.so
-%{dynload_dir}/nis.%{SOABI_debug}.so
-%{dynload_dir}/ossaudiodev.%{SOABI_debug}.so
-%{dynload_dir}/parser.%{SOABI_debug}.so
-%{dynload_dir}/pyexpat.%{SOABI_debug}.so
-%{dynload_dir}/readline.%{SOABI_debug}.so
-%{dynload_dir}/resource.%{SOABI_debug}.so
-%{dynload_dir}/select.%{SOABI_debug}.so
-%{dynload_dir}/spwd.%{SOABI_debug}.so
-%{dynload_dir}/syslog.%{SOABI_debug}.so
-%{dynload_dir}/termios.%{SOABI_debug}.so
-%{dynload_dir}/_testmultiphase.%{SOABI_debug}.so
-%{dynload_dir}/unicodedata.%{SOABI_debug}.so
-%{dynload_dir}/_uuid.%{SOABI_debug}.so
-%{dynload_dir}/_xxtestfuzz.%{SOABI_debug}.so
-%{dynload_dir}/zlib.%{SOABI_debug}.so
-
-# No need to split things out the "Makefile" and the config-32/64.h file as we
-# do for the regular build above (bug 531901), since they're all in one package
-# now; they're listed below, under "-devel":
-
-%{_libdir}/%{py_INSTSONAME_debug}
-
-# Analog of the -devel subpackage's files:
-%{pylibdir}/config-%{LDVERSION_debug}-%{_arch}-linux%{_gnu}
-%{_includedir}/python%{LDVERSION_debug}
-%{_bindir}/python%{LDVERSION_debug}-config
-%{_bindir}/python%{LDVERSION_debug}-*-config
-%{_libdir}/libpython%{LDVERSION_debug}.so
-%{_libdir}/libpython%{LDVERSION_debug}.so.1.0
-%{_libdir}/pkgconfig/python-%{LDVERSION_debug}.pc
-
-# Analog of the -tools subpackage's files:
-# None for now; we could build precanned versions that have the appropriate
-# shebang if needed
-
-# Analog of the tkinter subpackage's files:
-%{dynload_dir}/_tkinter.%{SOABI_debug}.so
-
-# Analog of the -test subpackage's files:
-%{dynload_dir}/_ctypes_test.%{SOABI_debug}.so
-%{dynload_dir}/_testbuffer.%{SOABI_debug}.so
-%{dynload_dir}/_testcapi.%{SOABI_debug}.so
-%{dynload_dir}/_testimportmultiple.%{SOABI_debug}.so
-
-%endif # with debug_build
-
-# We put the debug-gdb.py file inside /usr/lib/debug to avoid noise from ldconfig
-# See
https://bugzilla.redhat.com/show_bug.cgi?id=562980
-#
-# The /usr/lib/rpm/redhat/macros defines %%__debug_package to use
-# debugfiles.list, and it appears that everything below /usr/lib/debug and
-# (/usr/src/debug) gets added to this file (via LISTFILES) in
-# /usr/lib/rpm/find-debuginfo.sh
-#
-# Hence by installing it below /usr/lib/debug we ensure it is added to the
-# -debuginfo subpackage
-# (if it doesn't, then the rpmbuild ought to fail since the debug-gdb.py
-# payload file would be unpackaged)
-
-# Workaround for
https://bugzilla.redhat.com/show_bug.cgi?id=1476593
-%undefine _debuginfo_subpackages
-
-# ======================================================
-# Finally, the changelog:
-# ======================================================
-
-%changelog
-* Sun Aug 11 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.4-5
-- Conditionalize python3-devel runtime dependencies on RPM packages and setuptools
-
-* Fri Jul 26 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.7.4-4
-- Rebuilt for
https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
-
-* Mon Jul 15 2019 Lumr Balhar <lbalhar(a)redhat.com> - 3.7.4-3
-- Move test.support module to python3-test subpackage
-
https://fedoraproject.org/wiki/Changes/Move_test.support_module_to_python...
-- Restore pyc to TIMESTAMP invalidation mode as default in rpmbubild
-
-* Fri Jul 12 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.4-2
--
https://fedoraproject.org/wiki/Changes/Python_means_Python3
-- The python-unversioned-command package is no longer Python 2, but 3
-- The python, pydoc, python-config, python-debug, idle, pygettext.py and
- msgfmt.py commands are now in python3
-
-* Tue Jul 09 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.4-1
-- Update to 3.7.4
-
-* Tue Jul 02 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.4~rc2-1
-- Update to 3.7.4rc2
-
-* Tue Jun 25 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.4~rc1-1
-- Update to 3.7.4rc1
-
-* Tue May 07 2019 Charalampos Stratakis <cstratak(a)redhat.com> - 3.7.3-3
-- Fix handling of pre-normalization characters in urlsplit
-- Disallow control chars in http URLs (#1695572, #1700684, #1688169, #1706851)
-
-* Wed Apr 17 2019 Patrik Kopkan <pkopkan(a)redhat.com> - 3.7.3-2
-- Makes man python3.7m show python3.7 man pages (#1612241)
-
-* Wed Mar 27 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.3-1
-- Update to 3.7.3
-
-* Thu Mar 21 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.3~rc1-1
-- Update to 3.7.3rc1
-
-* Thu Mar 14 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.2-8
-- Security fix for CVE-2019-9636 (#1688543, #1688546)
-
-* Sun Feb 17 2019 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 3.7.2-7
-- Rebuild for readline 8.0
-
-* Tue Feb 12 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.2-6
-- Reduced default build flags used to build extension modules
-
https://fedoraproject.org/wiki/Changes/Python_Extension_Flags
-
-* Sat Feb 02 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.7.2-5
-- Rebuilt for
https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
-
-* Wed Jan 16 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.2-4
-- Security fix for CVE-2019-5010 (#1666519, #1666522)
-
-* Mon Jan 14 2019 Bjrn Esser <besser82(a)fedoraproject.org> - 3.7.2-3
-- Rebuilt for libcrypt.so.2 (#1666033)
-
-* Fri Jan 04 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.2-2
-- No longer revert upstream commit 3b699932e5ac3e7
-- This was a dirty workaround for (#1644936)
-
-* Tue Dec 25 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.2-1
-- Update to 3.7.2
-
-* Fri Dec 07 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.1-5
-- Make sure we don't ship any exe files (not needed an prebuilt)
-
-* Wed Nov 21 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.1-4
-- Make sure the entire test.support module is in python3-libs (#1651245)
-
-* Tue Nov 06 2018 Victor Stinner <vstinner(a)redhat.com> - 3.7.1-3
-- Verify the value of '-s' when execute the CLI of cProfile (rhbz#1160640)
-
-* Sun Nov 04 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.1-2
-- Temporarily revert upstream commit 3b699932e5ac3e7
-- This is dirty workaround for (#1644936)
-
-* Mon Oct 22 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.1-1
-- Update to 3.7.1
-
-* Thu Sep 27 2018 Petr Viktorin <pviktori(a)redhat.com> - 3.7.0-10
-- Compile the debug build with -Og rather than -O0
-
-* Thu Aug 30 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-9
-- Require python3-setuptools from python3-devel to prevent packaging errors (#1623914)
-
-* Fri Aug 17 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-8
-- Add /usr/bin/pygettext3.py and msgfmt3.py to python3-devel
-Resolves: rhbz#1571474
-
-* Fri Aug 17 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-7
-- Backport TLS 1.3 related fixes to fix FTBFS
-Resolves: rhbz#1609291
-
-* Wed Aug 15 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-6
-- Use RPM built wheels of pip and setuptools in ensurepip instead of our rewheel patch
-
-* Fri Aug 10 2018 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 3.7.0-5
-- Fix wrong requirement on gdbm
-
-* Fri Jul 20 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-4
-- Allow to call Py_Main() after Py_Initialize()
-Resolves: rhbz#1595421
-
-* Sat Jul 14 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.7.0-3
-- Rebuilt for
https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
-
-* Thu Jul 12 2018 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 3.7.0-2
-- Rebuild for new gdbm
-
-* Wed Jun 27 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-1
-- Update to 3.7.0 final
-
-* Wed Jun 13 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-0.21.rc1
-- Finish bootstrapping, enable rewheel, tests, optimizations
-
-* Tue Jun 12 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-0.20.rc1
-- Update to 3.7.0rc1
-- Bootstrap, disable rewheel, tests, optimizations
-
-* Mon Apr 23 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.5-4
-- Fix multiprocessing regression on newer glibcs
-- Enable test_multiprocessing_fork(server) and _spawn again
-Resolves: rhbz#1569933
-
-* Thu Apr 19 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.5-3
-- Skip test_multiprocessing_fork(server) and _spawn for now
-
-* Wed Apr 18 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.5-2
-- Add flatpackage conditionals
-
-* Thu Mar 29 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.5-1
-- Update to 3.6.5
-
-* Sat Mar 24 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-20
-- Fix broken macro invocation and broken building of C Python extensions
-Resolves: rhbz#1560103
-
-* Fri Mar 16 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-19
-- Add -n option for pathfix.py
-Resolves: rhbz#1546990
-
-* Thu Mar 15 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-18
-- Fix the py_byte_compile macro to work on Python 2
-- Remove the pybytecompile macro file from the flat package
-Resolves: rhbz#1484993
-
-* Tue Mar 13 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-17
-- Do not send IP addresses in SNI TLS extension
-
-* Sat Feb 24 2018 Florian Weimer <fweimer(a)redhat.com> - 3.6.4-16
-- Rebuild with new LDFLAGS from redhat-rpm-config
-
-* Wed Feb 21 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-15
-- Filter out automatic /usr/bin/python3.X requirement,
- recommend the main package from libs instead
-Resolves: rhbz#1547131
-
-* Thu Feb 15 2018 Iryna Shcherbina <ishcherb(a)redhat.com> - 3.6.4-14
-- Remove the python3-tools package (#rhbz 1312030)
-- Move /usr/bin/2to3 to python3-devel
-- Move /usr/bin/idle and idlelib to python3-idle
-- Provide python3-tools from python3-idle
-
-* Fri Feb 09 2018 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 3.6.4-13
-- Escape macros in %%changelog
-
-* Fri Feb 02 2018 Michal Cyprian <mcyprian(a)redhat.com> - 3.6.4-12
-- Remove sys.executable check from change-user-install-location patch
-Resolves: rhbz#1532287
-
-* Thu Feb 01 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-11
-- Define TLS cipher suite on build time.
-
-* Wed Jan 31 2018 Tomas Orsava <torsava(a)redhat.com> - 3.6.4-10
-- Disable test_gdb for all arches and test_buffer for ppc64le in anticipation
- of the F28 mass rebuild
-- Re-enable these tests after the mass rebuild when they can be properly
- addressed
-
-* Tue Jan 23 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-9
-- Restore the PyExc_RecursionErrorInst public symbol
-
-* Tue Jan 23 2018 Bjrn Esser <besser82(a)fedoraproject.org> - 3.6.4-8
-- Add patch to explicitly link _ctypes module with -ldl (#1537489)
-- Refactored patch for libxcrypt
-- Re-enable strict symbol checks in the link editor
-
-* Mon Jan 22 2018 Bjrn Esser <besser82(a)fedoraproject.org> - 3.6.4-7
-- Add patch for libxcrypt
-- Disable strict symbol checks in the link editor
-
-* Sat Jan 20 2018 Bjrn Esser <besser82(a)fedoraproject.org> - 3.6.4-6
-- Rebuilt for switch to libxcrypt
-
-* Fri Jan 19 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-5
-- Fix localeconv() encoding for LC_NUMERIC
-
-* Thu Jan 18 2018 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 3.6.4-4
-- R: gdbm-devel R: gdbm for python3-libs
-
-* Wed Jan 17 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-3
-- Require large enough gdbm (fixup for previous bump)
-
-* Tue Jan 16 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-2
-- Rebuild for reverted gdbm 1.13 on Fedora 27
-
-* Mon Jan 15 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-1
-- Update to version 3.6.4
-
-* Fri Jan 12 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.3-5
-- Fix the compilation of the nis module.
-
-* Tue Nov 21 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.3-4
-- Raise the release of platform-python obsoletes for better maintainability
-
-* Wed Nov 15 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.3-3
-- Obsolete platform-python and it's subpackages
-
-* Mon Oct 09 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.3-2
-- Fix memory corruption due to allocator mix
-Resolves: rhbz#1498207
-
-* Fri Oct 06 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.3-1
-- Update to Python 3.6.3
-
-* Fri Sep 29 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.2-19
-- Move pathfix.py to bindir,
https://github.com/fedora-python/python-rpm-porting/issues/24
-- Make the -devel package require redhat-rpm-config
-Resolves: rhbz#1496757
-
-* Wed Sep 13 2017 Iryna Shcherbina <ishcherb(a)redhat.com> - 3.6.2-18
-- Fix /usr/bin/env dependency from python3-tools
-Resolves: rhbz#1482118
-
-* Wed Sep 06 2017 Iryna Shcherbina <ishcherb(a)redhat.com> - 3.6.2-17
-- Include `-g` in the flags sent to the linker (LDFLAGS)
-Resolves: rhbz#1483222
-
-* Tue Sep 05 2017 Petr Viktorin <pviktori(a)redhat.com> - 3.6.2-16
-- Specfile cleanup
-- Make the main description also applicable to the SRPM
-- Add audiotest.au to the test package
-
-* Fri Sep 01 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.2-15
-- Remove %%{pylibdir}/Tools/scripts/2to3
-
-* Fri Sep 01 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.2-14
-- Expat >= 2.1.0 is everywhere, remove explicit requires
-- Conditionalize systemtap-devel BuildRequires
-- For consistency, require /usr/sbin/ifconfig instead of net-tools
-
-* Mon Aug 28 2017 Petr Viktorin <pviktori(a)redhat.com> - 3.6.2-13
-- Rename patch files to be consistent
-- Run autotools to generate the configure script before building
-- Merge lib64 patches (104 into 102)
-- Skip test_bdist_rpm using test config rather than a patch (removes patch 137)
-- Remove patches 157 and 186, which had test changes left over after upstreaming
-- Remove patch 188, a temporary workaround for hashlib tests
-- Merge patches 180, 206, 243, 5001 (architecture naming) into new patch 274
-- Move python2-tools conflicts to tools subpackage (it was wrongly in tkinter)
-
-* Mon Aug 28 2017 Michal Cyprian <mcyprian(a)redhat.com> - 3.6.2-12
-- Use python3 style of calling super() without arguments in rpath
- patch to prevent recursion in UnixCCompiler subclasses
-Resolves: rhbz#1458122
-
-* Mon Aug 21 2017 Petr Viktorin <pviktori(a)redhat.com> - 3.6.2-11
-- Add bcond for --without optimizations
-- Reword package descriptions
-- Remove Group declarations
-- Skip failing test_float_with_comma
-
-* Mon Aug 21 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.2-10
-- Remove system-python, see
https://fedoraproject.org/wiki/Changes/Platform_Python_Stack
-
-* Wed Aug 16 2017 Petr Viktorin <pviktori(a)redhat.com> - 3.6.2-9
-- Use bconds for configuring the build
-- Reorganize the initial sections
-
-* Wed Aug 16 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.2-8
-- Have /usr/bin/2to3 (rhbz#1111275)
-- Provide 2to3 and idle3, list them in summary and description (rhbz#1076401)
-
-* Fri Aug 11 2017 Michal Cyprian <mcyprian(a)redhat.com> - 3.6.2-7
-- Revert "Add --executable option to install.py command"
- This enhancement is currently not needed and it can possibly
- collide with `pip --editable`option
-
-* Mon Aug 07 2017 Iryna Shcherbina <ishcherb(a)redhat.com> - 3.6.2-6
-- Fix the "urllib FTP protocol stream injection" vulnerability
-Resolves: rhbz#1478916
-
-* Tue Aug 01 2017 Tomas Orsava <torsava(a)redhat.com> - 3.6.2-5
-- Dropped BuildRequires on db4-devel which was useful for Python 2 (module
- bsddb), however, no longer needod for Python 3
-- Tested building Python 3 with and without the dependency, all tests pass and
- filelists of resulting RPMs are identical
-
-* Sun Jul 30 2017 Florian Weimer <fweimer(a)redhat.com> - 3.6.2-4
-- Do not generate debuginfo subpackages (#1476593)
-- Rebuild with binutils fix for ppc64le (#1475636)
-
-* Thu Jul 27 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.6.2-3
-- Rebuilt for
https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
-
-* Tue Jul 25 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.2-2
-- Make test_asyncio to not depend on the current SIGHUP signal handler.
-
-* Tue Jul 18 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.2-1
-- Update to Python 3.6.2
-
-* Tue Jun 27 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.1-10
-- Update to the latest upstream implementation of PEP 538
-
-* Mon Jun 26 2017 Michal Cyprian <mcyprian(a)redhat.com> - 3.6.1-9
-- Make pip and distutils in user environment install into separate location
-
-* Fri Jun 23 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.1-8
-- Fix test_alpn_protocols from test_ssl
-- Do not require rebundled setuptools dependencies
-
-* Tue May 16 2017 Tomas Orsava <torsava(a)redhat.com> - 3.6.1-7
-- Added a dependency to the devel subpackage on python3-rpm-generators which
- have been excised out of rpm-build
-- Updated notes on bootstrapping Python on top of this specfile accordingly
-- Involves: rhbz#1410631, rhbz#1444925
-
-* Tue May 09 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.1-6
-- Enable profile guided optimizations for x86_64 and i686 architectures
-- Update to a newer implementation of PEP 538
-- Update description to reflect that Python 3 is now the default Python
-
-* Fri May 05 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.1-5
-- Update PEP 538 to the latest upstream implementation
-
-* Tue Apr 18 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.1-4
-- Enable link time optimizations
-- Move windows executables to the devel subpackage (rhbz#1426257)
-
-* Thu Apr 13 2017 Tomas Orsava <torsava(a)redhat.com> - 3.6.1-3
-- Rename python3.Xdm-config script from -debug to be arch specific
-Resolves: rhbz#1179073
-
-* Wed Apr 05 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.1-2
-- Install the Makefile in its proper location (rhbz#1438219)
-
-* Wed Mar 22 2017 Iryna Shcherbina <ishcherb(a)redhat.com> - 3.6.1-1
-- Update to version 3.6.1 final
-
-* Tue Mar 21 2017 Tomas Orsava <torsava(a)redhat.com> - 3.6.1-0.2.rc1
-- Fix syntax error in %%py_byte_compile macro (rhbz#1433569)
-
-* Thu Mar 16 2017 Iryna Shcherbina <ishcherb(a)redaht.com> - 3.6.1-0.1.rc1
-- Update to Python 3.6.1 release candidate 1
-- Add patch 264 to skip a known test failure on aarch64
-
-* Fri Mar 10 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-21
-- Use proper command line parsing in _testembed
-- Backport of PEP 538: Coercing the legacy C locale to a UTF-8 based locale
-
https://fedoraproject.org/wiki/Changes/python3_c.utf-8_locale
-
-* Mon Feb 27 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-20
-- Add desktop entry and appdata.xml file for IDLE 3 (rhbz#1392049)
-
-* Fri Feb 24 2017 Michal Cyprian <mcyprian(a)redhat.com> - 3.6.0-19
-- Revert "Set values of prefix and exec_prefix to /usr/local for
- /usr/bin/python* executables..." to prevent build failures
- of packages using alternate build tools
-
-* Tue Feb 21 2017 Michal Cyprian <mcyprian(a)redhat.com> - 3.6.0-18
-- Set values of prefix and exec_prefix to /usr/local for
- /usr/bin/python* executables
-- Use new %%_module_build macro
-
-* Fri Feb 17 2017 Michal Cyprian <mcyprian(a)redhat.com> - 3.6.0-13
-- Add --executable option to install.py command
-
-* Wed Feb 15 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-12
-- BuildRequire the new dependencies of setuptools when rewheel mode is enabled
-in order for the virtualenvs to work properly
-
-* Sat Feb 11 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.6.0-11
-- Rebuilt for
https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
-
-* Wed Feb 01 2017 Stephen Gallagher <sgallagh(a)redhat.com> - 3.6.0-10
-- Add missing %%license macro
-
-* Thu Jan 26 2017 Tomas Orsava <torsava(a)redhat.com> - 3.6.0-9
-- Modify the runtime dependency of python3-libs on system-python-libs again,
- because previous attempt didn't work properly with dnf resolving mechanism
-
-* Wed Jan 25 2017 Tomas Orsava <torsava(a)redhat.com> - 3.6.0-8
-- Modify the runtime dependency of python3-libs on system-python-libs to use
- just the version and release number, but not the dist tag due to Modularity
-
-* Mon Jan 16 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-7
-- Fix error check, so that Random.seed actually uses OS randomness (rhbz#1412275)
-- Skip test_aead_aes_gcm during rpmbuild
-
-* Thu Jan 12 2017 Igor Gnatenko <ignatenko(a)redhat.com> - 3.6.0-6
-- Rebuild for readline 7.x
-
-* Tue Jan 10 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-5
-- Require glibc >= 2.24.90-26 for system-python-libs (rhbz#1410644)
-
-* Mon Jan 09 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-4
-- Define HAVE_LONG_LONG as 1 for backwards compatibility
-
-* Thu Jan 05 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.0-3
-- Don't blow up on EL7 kernel (random generator) (rhbz#1410175)
-
-* Tue Dec 27 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-1
-- Update to Python 3.6.0 final
-
-* Fri Dec 09 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-0.6.rc1
-- Enable rewheel
-
-* Wed Dec 07 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-0.5.rc1
-- Update to Python 3.6.0 release candidate 1
-
-* Mon Dec 05 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-0.4.b4
-- Update to Python 3.6.0 beta 4
-
-* Mon Dec 05 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.2-7
-- Set to work with pip version 9.0.1
-
-* Wed Oct 12 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.2-6
-- Use proper patch numbering and base upstream branch for
-porting ssl and hashlib modules to OpenSSL 1.1.0
-- Drop hashlib patch for now
-- Add riscv64 arch to 64bit and no-valgrind arches
-
-* Tue Oct 11 2016 Tom Mrz <tmraz(a)redhat.com> - 3.5.2-5
-- Make it build with OpenSSL-1.1.0 based on upstream patch
-
-* Wed Sep 14 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.2-4
-- Obsolete and Provide python35 package
-
-* Mon Sep 12 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.2-3
-- Update %%py_byte_compile macro
-- Remove unused configure flags (rhbz#1374357)
-
-* Fri Sep 09 2016 Tomas Orsava <torsava(a)redhat.com> - 3.5.2-2
-- Updated .pyc 'bytecompilation with the newly installed interpreter' to also
- recompile optimized .pyc files
-- Removed .pyo 'bytecompilation with the newly installed interpreter', as .pyo
- files are no more
-- Resolves rhbz#1373635
-
-* Mon Aug 15 2016 Tomas Orsava <torsava(a)redhat.com> - 3.5.2-1
-- Rebased to version 3.5.2
-- Set to work with pip version 8.1.2
-- Removed patches 207, 237, 241 as fixes are already contained in Python 3.5.2
-- Removed arch or environment specific patches 194, 196, 203, and 208
- as test builds indicate they are no longer needed
-- Updated patches 102, 146, and 242 to work with the new Python codebase
-- Removed patches 200, 201, 5000 which weren't even being applied
-
-* Tue Aug 09 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.1-15
-- Fix for CVE-2016-1000110 HTTPoxy attack
-- SPEC file cleanup
-
-* Mon Aug 01 2016 Michal Toman <mtoman(a)fedoraproject.org> - 3.5.1-14
-- Build properly on MIPS
-
-* Tue Jul 19 2016 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> -
3.5.1-13
--
https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_...
-
-* Fri Jul 08 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.1-12
-- Refactor patch for properly fixing CVE-2016-5636
-
-* Fri Jul 08 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.1-11
-- Fix test_pyexpat failure with Expat version of 2.2.0
-
-* Fri Jul 08 2016 Miro Hronok <mhroncok(a)redhat.com> - 3.5.1-10
-- Move xml module to system-python-libs
-
-* Thu Jun 16 2016 Tomas Orsava <torsava(a)redhat.com> - 3.5.1-9
-- Fix for: CVE-2016-0772 python: smtplib StartTLS stripping attack
-- Raise an error when STARTTLS fails
-- rhbz#1303647:
https://bugzilla.redhat.com/show_bug.cgi?id=1303647
-- rhbz#1346345:
https://bugzilla.redhat.com/show_bug.cgi?id=1346345
-- Fixed upstream:
https://hg.python.org/cpython/rev/d590114c2394
-
-* Mon Jun 13 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.1-8
-- Added patch for fixing possible integer overflow and heap corruption in
zipimporter.get_data()
-
-* Fri Mar 04 2016 Miro Hronok <mhroncok(a)redhat.com> - 3.5.1-7
-- Move distutils to system-python-libs
-
-* Wed Feb 24 2016 Robert Kuska <rkuska(a)redhat.com> - 3.5.1-6
-- Provide python3-enum34
-
-* Fri Feb 19 2016 Miro Hronok <mhroncok(a)redhat.com> - 3.5.1-5
-- Provide System Python packages and macros
-
-* Thu Feb 04 2016 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.5.1-4
-- Rebuilt for
https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
-
-* Wed Jan 13 2016 Orion Poplwski <orion(a)cora.nwra.com> - 3.5.1-2
-- Drop python3 macros, require python/python3-rpm-macros
-
-* Mon Dec 14 2015 Robert Kuska <rkuska(a)redhat.com> - 3.5.1-1
-- Update to 3.5.1
-- Removed patch 199 and 207 (upstream)
-
-* Sun Nov 15 2015 Robert Kuska <rkuska(a)redhat.com> - 3.5.0-5
-- Remove versioned libpython from devel package
-
-* Fri Nov 13 2015 Than Ngo <than(a)redhat.com> 3.5.0-4
-- add correct arch for ppc64/ppc64le to fix build failure
-
-* Wed Nov 11 2015 Robert Kuska <rkuska(a)redhat.com> - 3.5.0-3
-- Hide the private _Py_atomic_xxx symbols from public header
-
-* Wed Oct 14 2015 Robert Kuska <rkuska(a)redhat.com> - 3.5.0-2
-- Rebuild with wheel set to 1
-
-* Tue Sep 15 2015 Matej Stuchlik <mstuchli(a)redhat.com> - 3.5.0-1
-- Update to 3.5.0
-
-* Mon Jun 29 2015 Thomas Spura <tomspur(a)fedoraproject.org> - 3.4.3-4
-- python3-devel: Require python-macros for version independant macros such as
- python_provide. See fpc#281 and fpc#534.
-
-* Thu Jun 18 2015 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> -
3.4.3-3
-- Rebuilt for
https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
-
-* Wed Jun 17 2015 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.3-4
-- Use 1024bit DH key in test_ssl
-- Use -O0 when compiling -debug build
-- Update pip version variable to the version we actually ship
-
-* Wed Jun 17 2015 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.3-3
-- Make relocating Python by changing _prefix actually work
-Resolves: rhbz#1231801
-
-* Mon May 4 2015 Peter Robinson <pbrobinson(a)fedoraproject.org> 3.4.3-2
-- Disable test_gdb on aarch64 (rhbz#1196181), it joins all other non x86 arches
-
-* Thu Mar 12 2015 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.3-1
-- Updated to 3.4.3
-- BuildPython now accepts additional build options
-- Temporarily disabled test_gdb on arm (rhbz#1196181)
-
-* Wed Feb 25 2015 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.2-7
-- Fixed undefined behaviour in faulthandler which caused test to hang on x86_64
- (
http://bugs.python.org/issue23433)
-
-* Sat Feb 21 2015 Till Maas <opensource(a)till.name> - 3.4.2-6
-- Rebuilt for Fedora 23 Change
-
https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-...
-
-* Tue Feb 17 2015 Ville Skytt <ville.skytta(a)iki.fi> - 3.4.2-5
-- Own systemtap dirs (#710733)
-
-* Mon Jan 12 2015 Dan Hork <dan[at]danny.cz> - 3.4.2-4
-- build with valgrind on ppc64le
-- disable test_gdb on s390(x) until rhbz#1181034 is resolved
-
-* Tue Dec 16 2014 Robert Kuska <rkuska(a)redhat.com> - 3.4.2-3
-- New patches: 170 (gc asserts), 200 (gettext headers),
- 201 (gdbm memory leak)
-
-* Thu Dec 11 2014 Robert Kuska <rkuska(a)redhat.com> - 3.4.2-2
-- OpenSSL disabled SSLv3 in SSLv23 method
-
-* Thu Nov 13 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.2-1
-- Update to 3.4.2
-- Refreshed patches: 156 (gdb autoload)
-- Removed: 195 (Werror declaration), 197 (CVE-2014-4650)
-
-* Mon Nov 03 2014 Slavek Kabrda <bkabrda(a)redhat.com> - 3.4.1-16
-- Fix CVE-2014-4650 - CGIHTTPServer URL handling
-Resolves: rhbz#1113529
-
-* Sun Sep 07 2014 Karsten Hopp <karsten(a)redhat.com> 3.4.1-15
-- exclude test_gdb on ppc* (rhbz#1132488)
-
-* Thu Aug 21 2014 Slavek Kabrda <bkabrda(a)redhat.com> - 3.4.1-14
-- Update rewheel patch with fix from
https://github.com/bkabrda/rewheel/pull/1
-
-* Sun Aug 17 2014 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> -
3.4.1-13
-- Rebuilt for
https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
-
-* Sun Jun 8 2014 Peter Robinson <pbrobinson(a)fedoraproject.org> 3.4.1-12
-- aarch64 has valgrind, just list those that don't support it
-
-* Sun Jun 08 2014 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> -
3.4.1-11
-- Rebuilt for
https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
-
-* Wed Jun 04 2014 Karsten Hopp <karsten(a)redhat.com> 3.4.1-10
-- bump release and rebuild to link with the correct tcl/tk libs on ppcle
-
-* Tue Jun 03 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.1-9
-- Change paths to bundled projects in rewheel patch
-
-* Fri May 30 2014 Miro Hronok <mhroncok(a)redhat.com> - 3.4.1-8
-- In config script, use uname -m to write the arch
-
-* Thu May 29 2014 Dan Hork <dan[at]danny.cz> - 3.4.1-7
-- update the arch list where valgrind exists - %%power64 includes also
- ppc64le which is not supported yet
-
-* Thu May 29 2014 Miro Hronok <mhroncok(a)redhat.com> - 3.4.1-6
-- Forward arguments to the arch specific config script
-Resolves: rhbz#1102683
-
-* Wed May 28 2014 Miro Hronok <mhroncok(a)redhat.com> - 3.4.1-5
-- Rename python3.Xm-config script to arch specific.
-Resolves: rhbz#1091815
-
-* Tue May 27 2014 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.4.1-4
-- Use python3-*, not python-* runtime requires on setuptools and pip
-- rebuild for tcl-8.6
-
-* Tue May 27 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.1-3
-- Update the rewheel module
-
-* Mon May 26 2014 Miro Hronok <mhroncok(a)redhat.com> - 3.4.1-2
-- Fix multilib dependencies.
-Resolves: rhbz#1091815
-
-* Sun May 25 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.1-1
-- Update to Python 3.4.1
-
-* Sun May 25 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.0-8
-- Fix test_gdb failure on ppc64le
-Resolves: rhbz#1095355
-
-* Thu May 22 2014 Miro Hronok <mhroncok(a)redhat.com> - 3.4.0-7
-- Add macro %%python3_version_nodots
-
-* Sun May 18 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.0-6
-- Disable test_faulthandler, test_gdb on aarch64
-Resolves: rhbz#1045193
-
-* Fri May 16 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.0-5
-- Don't add Werror=declaration-after-statement for extension
- modules through setup.py (PyBT#21121)
-
-* Mon May 12 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.0-4
-- Add setuptools and pip to Requires
-
-* Tue Apr 29 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.0-3
-- Point __os_install_post to correct brp-* files
-
-* Tue Apr 15 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.0-2
-- Temporarily disable tests requiring SIGHUP (rhbz#1088233)
-
-* Tue Apr 15 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.0-1
-- Update to Python 3.4 final
-- Add patch adding the rewheel module
-- Merge patches from master
-
-* Wed Jan 08 2014 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.4.0-0.1.b2
-- Update to Python 3.4 beta 2.
-- Refreshed patches: 55 (systemtap), 146 (hashlib-fips), 154 (test_gdb noise)
-- Dropped patches: 114 (statvfs constants), 177 (platform unicode)
-
-* Mon Nov 25 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.4.0-0.1.b1
-- Update to Python 3.4 beta 1.
-- Refreshed patches: 102 (lib64), 111 (no static lib), 125 (less verbose COUNT
-ALLOCS), 141 (fix COUNT_ALLOCS in test_module), 146 (hashlib fips),
-157 (UID+GID overflows), 173 (ENOPROTOOPT in bind_port)
-- Removed patch 00187 (remove pthread atfork; upstreamed)
-
-* Mon Nov 04 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.4.0-0.1.a4
-- Update to Python 3.4 alpha 4.
-- Refreshed patches: 55 (systemtap), 102 (lib64), 111 (no static lib),
-114 (statvfs flags), 132 (unittest rpmbuild hooks), 134 (fix COUNT_ALLOCS in
-test_sys), 143 (tsc on ppc64), 146 (hashlib fips), 153 (test gdb noise),
-157 (UID+GID overflows), 173 (ENOPROTOOPT in bind_port), 186 (dont raise
-from py_compile)
-- Removed patches: 129 (test_subprocess nonreadable dir - no longer fails in
-Koji), 142 (the mock issue that caused this is fixed)
-- Added patch 187 (remove thread atfork) - will be in next version
-- Refreshed script for checking pyc and pyo timestamps with new ignored files.
-- The fips patch is disabled for now until upstream makes a final decision
-what to do with sha3 implementation for 3.4.0.
-
-* Wed Oct 30 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.3.2-7
-- Bytecompile all *.py files properly during build (rhbz#1023607)
-
-* Fri Aug 23 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 3.3.2-6
-- Added fix for CVE-2013-4238 (rhbz#996399)
-
-* Fri Jul 26 2013 Dennis Gilmore <dennis(a)ausil.us> - 3.3.2-5
-- fix up indentation in arm patch
-
-* Fri Jul 26 2013 Dennis Gilmore <dennis(a)ausil.us> - 3.3.2-4
-- disable a test that fails on arm
-- enable valgrind support on arm arches
-
-* Tue Jul 02 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.3.2-3
-- Fix build with libffi containing multilib wrapper for ffi.h (rhbz#979696).
-
-* Mon May 20 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.3.2-2
-- Add patch for CVE-2013-2099 (rhbz#963261).
-
-* Thu May 16 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.3.2-1
-- Updated to Python 3.3.2.
-- Refreshed patches: 153 (gdb test noise)
-- Dropped patches: 175 (configure -Wformat, fixed upstream), 182 (gdb
-test threads)
-- Synced patch numbers with python.spec.
-
-* Thu May 9 2013 David Malcolm <dmalcolm(a)redhat.com> - 3.3.1-4
-- fix test.test_gdb.PyBtTests.test_threads on ppc64 (patch 181; rhbz#960010)
-
-* Thu May 02 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.3.1-3
-- Add patch that enables building on ppc64p7 (replace the sed, so that
-we get consistent with python2 spec and it's more obvious that we're doing it.
-
-* Wed Apr 24 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.3.1-2
-- Add fix for gdb tests failing on arm, rhbz#951802.
-
-* Tue Apr 09 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.3.1-1
-- Updated to Python 3.3.1.
-- Refreshed patches: 55 (systemtap), 111 (no static lib), 146 (hashlib fips),
-153 (fix test_gdb noise), 157 (uid, gid overflow - fixed upstream, just
-keeping few more downstream tests)
-- Removed patches: 3 (audiotest.au made it to upstream tarball)
-- Removed workaround for
http://bugs.python.org/issue14774, discussed in
-http://bugs.python.org/issue15298 and fixed in revision 24d52d3060e8.
-
-* Mon Mar 25 2013 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-10
-- fix gcc 4.8 incompatibility (rhbz#927358); regenerate autotool intermediates
-
-* Mon Mar 25 2013 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-9
-- renumber patches to keep them in sync with python.spec
-
-* Fri Mar 15 2013 Toshio Kuratomi <toshio(a)fedoraproject.org> - 3.3.0-8
-- Fix error in platform.platform() when non-ascii byte strings are decoded to
- unicode (rhbz#922149)
-
-* Thu Mar 14 2013 Toshio Kuratomi <toshio(a)fedoraproject.org> - 3.3.0-7
-- Fix up shared library extension (rhbz#889784)
-
-* Thu Mar 07 2013 Karsten Hopp <karsten(a)redhat.com> 3.3.0-6
-- add ppc64p7 build target, optimized for Power7
-
-* Mon Mar 4 2013 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-5
-- add workaround for ENOPROTOOPT seen running selftests in Koji
-(rhbz#913732)
-
-* Mon Mar 4 2013 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-4
-- remove config flag from /etc/rpm/macros.{python3|pybytecompile}
-
-* Mon Feb 11 2013 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-3
-- add aarch64 (rhbz#909783)
-
-* Thu Nov 29 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-2
-- add BR on bluez-libs-devel (rhbz#879720)
-
-* Sat Sep 29 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-1
-- 3.3.0rc3 -> 3.3.0; drop alphatag
-
-* Mon Sep 24 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-0.6.rc3
-- 3.3.0rc2 -> 3.3.0rc3
-
-* Mon Sep 10 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-0.5.rc2
-- 3.3.0rc1 -> 3.3.0rc2; refresh patch 55
-
-* Mon Aug 27 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-0.4.rc1
-- 3.3.0b2 -> 3.3.0rc1; refresh patches 3, 55
-
-* Mon Aug 13 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-0.3.b2
-- 3.3b1 -> 3.3b2; drop upstreamed patch 152; refresh patches 3, 102, 111,
-134, 153, 160; regenenerate autotools patch; rework systemtap patch to work
-correctly when LANG=C (patch 55); importlib.test was moved to
-test.test_importlib upstream
-
-* Mon Aug 13 2012 Karsten Hopp <karsten(a)redhat.com> 3.3.0-0.2.b1
-- disable some failing checks on PPC* (rhbz#846849)
-
-* Fri Aug 3 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-0.1.b1
-- 3.2 -> 3.3:
https://fedoraproject.org/wiki/Features/Python_3.3
-- 3.3.0b1: refresh patches 3, 55, 102, 111, 113, 114, 134, 157; drop upstream
-patch 147; regenenerate autotools patch; drop "--with-wide-unicode" from
-configure (PEP 393); "plat-linux2" -> "plat-linux" (upstream issue
12326);
-"bz2" -> "_bz2" and "crypt" -> "_crypt";
egg-info files are no longer shipped
-for stdlib (upstream issues 10645 and 12218); email/test moved to
-test/test_email; add /usr/bin/pyvenv[-3.3] and venv module (PEP 405); add
-_decimal and _lzma modules; make collections modules explicit in payload again
-(upstream issue 11085); add _testbuffer module to tests subpackage (added in
-upstream commit 3f9b3b6f7ff0); fix test failures (patches 160 and 161);
-workaround erroneously shared _sysconfigdata.py upstream issue #14774; fix
-distutils.sysconfig traceback (patch 162); add BuildRequires: xz-devel (for
-_lzma module); skip some tests within test_socket (patch 163)
-
-* Sat Jul 21 2012 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> -
3.2.3-11
-- Rebuilt for
https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
-
-* Fri Jul 20 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-0.1.b1
-
-* Fri Jun 22 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-10
-- use macro for power64 (rhbz#834653)
-
-* Mon Jun 18 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-9
-- fix missing include in uid/gid handling patch (patch 157; rhbz#830405)
-
-* Wed May 30 2012 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.2.3-8
-- fix tapset for debug build
-
-* Tue May 15 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-7
-- update uid/gid handling to avoid int overflows seen with uid/gid
-values >= 2^31 on 32-bit architectures (patch 157; rhbz#697470)
-
-* Fri May 4 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-6
-- renumber autotools patch from 300 to 5000
-- specfile cleanups
-
-* Mon Apr 30 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-5
-- fix test_gdb.py (patch 156; rhbz#817072)
-
-* Fri Apr 20 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-4
-- avoid allocating thunks in ctypes unless absolutely necessary, to avoid
-generating SELinux denials on "import ctypes" and "import uuid" when
embedding
-Python within httpd (patch 155; rhbz#814391)
-
-* Fri Apr 20 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-3
-- add explicit version requirements on expat to avoid linkage problems with
-XML_SetHashSalt
-
-* Thu Apr 12 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-2
-- fix test_gdb (patch 153)
-
-* Wed Apr 11 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-1
-- 3.2.3; refresh patch 102 (lib64); drop upstream patches 148 (gdbm magic
-values), 149 (__pycache__ fix); add patch 152 (test_gdb regex)
-
-* Thu Feb 9 2012 Thomas Spura <tomspur(a)fedoraproject.org> - 3.2.2-13
-- use newly installed python for byte compiling (now for real)
-
-* Sun Feb 5 2012 Thomas Spura <tomspur(a)fedoraproject.org> - 3.2.2-12
-- use newly installed python for byte compiling (#787498)
-
-* Wed Jan 4 2012 Ville Skytt <ville.skytta(a)iki.fi> - 3.2.2-11
-- Build with $RPM_LD_FLAGS (#756863).
-- Use xz-compressed source tarball.
-
-* Wed Dec 07 2011 Karsten Hopp <karsten(a)redhat.com> 3.2.2-10
-- disable rAssertAlmostEqual in test_cmath on PPC (#750811)
-
-* Mon Oct 17 2011 Rex Dieter <rdieter(a)fedoraproject.org> - 3.2.2-9
-- python3-devel missing autogenerated pkgconfig() provides (#746751)
-
-* Mon Oct 10 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-8
-- cherrypick fix for distutils not using __pycache__ when byte-compiling
-files (rhbz#722578)
-
-* Fri Sep 30 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-7
-- re-enable gdbm (patch 148; rhbz#742242)
-
-* Fri Sep 16 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-6
-- add a sys._debugmallocstats() function (patch 147)
-
-* Wed Sep 14 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-5
-- support OpenSSL FIPS mode in _hashlib and hashlib; don't build the _md5 and
-_sha* modules, relying on _hashlib in hashlib (rhbz#563986; patch 146)
-
-* Tue Sep 13 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-4
-- disable gdbm module to prepare for gdbm soname bump
-
-* Mon Sep 12 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-3
-- renumber and rename patches for consistency with python.spec (8 to 55, 106
-to 104, 6 to 111, 104 to 113, 105 to 114, 125, 131, 130 to 143)
-
-* Sat Sep 10 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-2
-- rewrite of "check", introducing downstream-only hooks for skipping specific
-cases in an rpmbuild (patch 132), and fixing/skipping failing tests in a more
-fine-grained manner than before; (patches 106, 133-142 sparsely, moving
-patches for consistency with python.spec: 128 to 134, 126 to 135, 127 to 141)
-
-* Tue Sep 6 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-1
-- 3.2.2
-
-* Thu Sep 1 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.1-7
-- run selftests with "--verbose"
-- disable parts of test_io on ppc (rhbz#732998)
-
-* Wed Aug 31 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.1-6
-- use "--findleaks --verbose3" when running test suite
-
-* Tue Aug 23 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.1-5
-- re-enable and fix the --with-tsc option on ppc64, and rework it on 32-bit
-ppc to avoid aliasing violations (patch 130; rhbz#698726)
-
-* Tue Aug 23 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.1-4
-- don't use --with-tsc on ppc64 debug builds (rhbz#698726)
-
-* Thu Aug 18 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.1-3
-- add %%python3_version to the rpm macros (rhbz#719082)
-
-* Mon Jul 11 2011 Dennis Gilmore <dennis(a)ausil.us> - 3.2.1-2
-- disable some tests on sparc arches
-
-* Mon Jul 11 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.1-1
-- 3.2.1; refresh lib64 patch (102), subprocess unit test patch (129), disabling
-of static library build (due to Modules/_testembed; patch 6), autotool
-intermediates (patch 300)
-
-* Fri Jul 8 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-5
-- use the gdb hooks from the upstream tarball, rather than keeping our own copy
-
-* Fri Jul 8 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-4
-- don't run test_openpty and test_pty in %%check
-
-* Fri Jul 8 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-3
-- cleanup of BuildRequires; add comment headings to specfile sections
-
-* Tue Apr 19 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-2
-- fix the libpython.stp systemtap tapset (rhbz#697730)
-
-* Mon Feb 21 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-1
-- 3.2
-- drop alphatag
-- regenerate autotool patch
-
-* Mon Feb 14 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.13.rc3
-- add a /usr/bin/python3-debug symlink within the debug subpackage
-
-* Mon Feb 14 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.12.rc3
-- 3.2rc3
-- regenerate autotool patch
-
-* Wed Feb 09 2011 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> -
3.2-0.11.rc2
-- Rebuilt for
https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
-
-* Mon Jan 31 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.10.rc2
-- 3.2rc2
-
-* Mon Jan 17 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.9.rc1
-- 3.2rc1
-- rework patch 6 (static lib removal)
-- remove upstreamed patch 130 (ppc debug build)
-- regenerate patch 300 (autotool intermediates)
-- updated packaging to reflect upstream rewrite of "Demo" (issue 7962)
-- added libpython3.so and 2to3-3.2
-
-* Wed Jan 5 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.8.b2
-- set EXTRA_CFLAGS to our CFLAGS, rather than overriding OPT, fixing a linker
-error with dynamic annotations (when configured using --with-valgrind)
-- fix the ppc build of the debug configuration (patch 130; rhbz#661510)
-
-* Tue Jan 4 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.7.b2
-- add --with-valgrind to configuration (on architectures that support this)
-
-* Wed Dec 29 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.6.b2
-- work around test_subprocess failure seen in koji (patch 129)
-
-* Tue Dec 28 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.5.b2
-- 3.2b2
-- rework patch 3 (removal of mimeaudio tests), patch 6 (no static libs),
-patch 8 (systemtap), patch 102 (lib64)
-- remove patch 4 (rendered redundant by upstream r85537), patch 103 (PEP 3149),
-patch 110 (upstreamed expat fix), patch 111 (parallel build fix for grammar
-fixed upstream)
-- regenerate patch 300 (autotool intermediates)
-- workaround COUNT_ALLOCS weakref issues in test suite (patch 126, patch 127,
-patch 128)
-- stop using runtest.sh in %%check (dropped by upstream), replacing with
-regrtest; fixup list of failing tests
-- introduce "pyshortver", "SOABI_optimized" and
"SOABI_debug" macros
-- rework manifests of shared libraries to use "SOABI_" macros, reflecting
-PEP 3149
-- drop itertools, operator and _collections modules from the manifests as py3k
-commit r84058 moved these inside libpython; json/tests moved to test/json_tests
-- move turtle code into the tkinter subpackage
-
-* Wed Nov 17 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.5.a1
-- fix sysconfig to not rely on the -devel subpackage (rhbz#653058)
-
-* Thu Sep 9 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.4.a1
-- move most of the content of the core package to the libs subpackage, given
-that the libs aren't meaningfully usable without the standard libraries
-
-* Wed Sep 8 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.3.a1
-- Move test.support to core package (rhbz#596258)
-- Add various missing __pycache__ directories to payload
-
-* Sun Aug 22 2010 Toshio Kuratomi <toshio(a)fedoraproject.org> - 3.2-0.2.a1
-- Add __pycache__ directory for site-packages
-
-* Sun Aug 22 2010 Thomas Spura <tomspur(a)fedoraproject.org> - 3.2-0.1.a1
-- on 64bit "stdlib" was still "/usr/lib/python*" (modify
*lib64.patch)
-- make find-provides-without-python-sonames.sh 64bit aware
-
-* Sat Aug 21 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.0.a1
-- 3.2a1; add alphatag
-- rework %%files in the light of PEP 3147 (__pycache__)
-- drop our configuration patch to Setup.dist (patch 0): setup.py should do a
-better job of things, and the %%files explicitly lists our modules (r82746
-appears to break the old way of doing things). This leads to various modules
-changing from "foomodule.so" to "foo.so". It also leads to the
optimized build
-dropping the _sha1, _sha256 and _sha512 modules, but these are provided by
-_hashlib; _weakref becomes a builtin module; xxsubtype goes away (it's only for
-testing/devel purposes)
-- fixup patches 3, 4, 6, 8, 102, 103, 105, 111 for the rebase
-- remove upstream patches: 7 (system expat), 106, 107, 108 (audioop reformat
-plus CVE-2010-1634 and CVE-2010-2089), 109 (CVE-2008-5983)
-- add machinery for rebuilding "configure" and friends, using the correct
-version of autoconf (patch 300)
-- patch the debug build's usage of COUNT_ALLOCS to be less verbose (patch 125)
-- "modulator" was removed upstream
-- drop "-b" from patch applications affecting .py files to avoid littering the
-installation tree
-
-* Thu Aug 19 2010 Toshio Kuratomi <toshio(a)fedoraproject.org> - 3.1.2-13
-- Turn on computed-gotos.
-- Fix for parallel make and graminit.c
-
-* Fri Jul 2 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-12
-- rebuild
-
-* Fri Jul 2 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-11
-- Fix an incompatibility between pyexpat and the system expat-2.0.1 that led to
-a segfault running test_pyexpat.py (patch 110; upstream issue 9054; rhbz#610312)
-
-* Fri Jun 4 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-10
-- ensure that the compiler is invoked with "-fwrapv" (rhbz#594819)
-- reformat whitespace in audioop.c (patch 106)
-- CVE-2010-1634: fix various integer overflow checks in the audioop
-module (patch 107)
-- CVE-2010-2089: further checks within the audioop module (patch 108)
-- CVE-2008-5983: the new PySys_SetArgvEx entry point from r81399 (patch 109)
-
-* Thu May 27 2010 Dan Hork <dan[at]danny.cz> - 3.1.2-9
-- reading the timestamp counter is available only on some arches (see Python/ceval.c)
-
-* Wed May 26 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-8
-- add flags for statvfs.f_flag to the constant list in posixmodule (i.e. "os")
-(patch 105)
-
-* Tue May 25 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-7
-- add configure-time support for COUNT_ALLOCS and CALL_PROFILE debug options
-(patch 104); enable them and the WITH_TSC option within the debug build
-
-* Mon May 24 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-6
-- build and install two different configurations of Python 3: debug and
-standard, packaging the debug build in a new "python3-debug" subpackage
-(patch 103)
-
-* Tue Apr 13 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-5
-- exclude test_http_cookies when running selftests, due to hang seen on
-http://koji.fedoraproject.org/koji/taskinfo?taskID=2088463 (cancelled after
-11 hours)
-- update python-gdb.py from v5 to py3k version submitted upstream
-
-* Wed Mar 31 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-4
-- update python-gdb.py from v4 to v5 (improving performance and stability,
-adding commands)
-
-* Thu Mar 25 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-3
-- update python-gdb.py from v3 to v4 (fixing infinite recursion on reference
-cycles and tracebacks on bytes 0x80-0xff in strings, adding handlers for sets
-and exceptions)
-
-* Wed Mar 24 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-2
-- refresh gdb hooks to v3 (reworking how they are packaged)
-
-* Sun Mar 21 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-1
-- update to 3.1.2:
http://www.python.org/download/releases/3.1.2/
-- drop upstreamed patch 2 (.pyc permissions handling)
-- drop upstream patch 5 (fix for the test_tk and test_ttk_* selftests)
-- drop upstreamed patch 200 (path-fixing script)
-
-* Sat Mar 20 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-28
-- fix typo in libpython.stp (rhbz:575336)
-
-* Fri Mar 12 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-27
-- add pyfuntop.stp example (source 7)
-- convert usage of $$RPM_BUILD_ROOT to %%{buildroot} throughout, for
-consistency with python.spec
-
-* Mon Feb 15 2010 Thomas Spura <tomspur(a)fedoraproject.org> - 3.1.1-26
-- rebuild for new package of redhat-rpm-config (rhbz:564527)
-- use 'install -p' when running 'make install'
-
-* Fri Feb 12 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-25
-- split configure options into multiple lines for easy of editing
-- add systemtap static markers (wcohen, mjw, dmalcolm; patch 8), a systemtap
-tapset defining "python.function.entry" and "python.function.return"
to make
-the markers easy to use (dmalcolm; source 5), and an example of using the
-tapset to the docs (dmalcolm; source 6) (rhbz:545179)
-
-* Mon Feb 8 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-24
-- move the -gdb.py file from %%{_libdir}/INSTSONAME-gdb.py to
-%%{_prefix}/lib/debug/%%{_libdir}/INSTSONAME.debug-gdb.py to avoid noise from
-ldconfig (bug 562980), and which should also ensure it becomes part of the
-debuginfo subpackage, rather than the libs subpackage
-- introduce %%{py_SOVERSION} and %%{py_INSTSONAME} to reflect the upstream
-configure script, and to avoid fragile scripts that try to figure this out
-dynamically (e.g. for the -gdb.py change)
-
-* Mon Feb 8 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-23
-- add gdb hooks for easier debugging (Source 4)
-
-* Thu Jan 28 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-22
-- update python-3.1.1-config.patch to remove downstream customization of build
-of pyexpat and elementtree modules
-- add patch adapted from upstream (patch 7) to add support for building against
-system expat; add --with-system-expat to "configure" invocation
-- remove embedded copies of expat and zlib from source tree during "prep"
-
-* Mon Jan 25 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-21
-- introduce %%{dynload_dir} macro
-- explicitly list all lib-dynload files, rather than dynamically gathering the
-payload into a temporary text file, so that we can be sure what we are
-shipping
-- introduce a macros.pybytecompile source file, to help with packaging python3
-modules (Source3; written by Toshio)
-- rename "2to3-3" to "python3-2to3" to better reflect python 3 module
packaging
-plans
-
-* Mon Jan 25 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-20
-- change python-3.1.1-config.patch to remove our downstream change to curses
-configuration in Modules/Setup.dist, so that the curses modules are built using
-setup.py with the downstream default (linking against libncursesw.so, rather
-than libncurses.so), rather than within the Makefile; add a test to %%install
-to verify the dso files that the curses module is linked against the correct
-DSO (bug 539917; changes _cursesmodule.so -> _curses.so)
-
-* Fri Jan 22 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-19
-- add %%py3dir macro to macros.python3 (to be used during unified python 2/3
-builds for setting up the python3 copy of the source tree)
-
-* Wed Jan 20 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-18
-- move lib2to3 from -tools subpackage to main package (bug 556667)
-
-* Sun Jan 17 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-17
-- patch Makefile.pre.in to avoid building static library (patch 6, bug 556092)
-
-* Fri Jan 15 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-16
-- use the %%{_isa} macro to ensure that the python-devel dependency on python
-is for the correct multilib arch (#555943)
-- delete bundled copy of libffi to make sure we use the system one
-
-* Fri Jan 15 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-15
-- fix the URLs output by pydoc so they point at python.org's 3.1 build of the
-docs, rather than the 2.6 build
-
-* Wed Jan 13 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-14
-- replace references to /usr with %%{_prefix}; replace references to
-/usr/include with %%{_includedir} (Toshio)
-
-* Mon Jan 11 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-13
-- fix permission on find-provides-without-python-sonames.sh from 775 to 755
-
-* Mon Jan 11 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-12
-- remove build-time requirements on tix and tk, since we already have
-build-time requirements on the -devel subpackages for each of these (Thomas
-Spura)
-- replace usage of %%define with %%global (Thomas Spura)
-- remove forcing of CC=gcc as this old workaround for bug 109268 appears to
-longer be necessary
-- move various test files from the "tools"/"tkinter" subpackages to
the "test"
-subpackage
-
-* Thu Jan 7 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-11
-- add %%check section (thanks to Thomas Spura)
-- update patch 4 to use correct shebang line
-- get rid of stray patch file from buildroot
-
-* Tue Nov 17 2009 Andrew McNabb <amcnabb(a)mcnabbs.org> - 3.1.1-10
-- switched a few instances of "find |xargs" to "find -exec" for
consistency.
-- made the description of __os_install_post more accurate.
-
-* Wed Nov 4 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-9
-- add macros.python3 to the -devel subpackage, containing common macros for use
-when packaging python3 modules
-
-* Tue Nov 3 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-8
-- add a provides of "python(abi)" (see bug 532118)
-- fix issues identified by a.badger in package review (bug 526126, comment 39):
- - use "3" thoughout metadata, rather than "3.*"
- - remove conditional around "pkg-config openssl"
- - use standard cleanup of RPM_BUILD_ROOT
- - replace hardcoded references to /usr with _prefix macro
- - stop removing egg-info files
- - use /usr/bin/python3.1 rather than /use/bin/env python3.1 when fixing
-up shebang lines
- - stop attempting to remove no-longer-present .cvsignore files
- - move the post/postun sections above the "files" sections
-
-* Thu Oct 29 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-7
-- remove commented-away patch 51 (python-2.6-distutils_rpm.patch): the -O1
-flag is used by default in the upstream code
-- "Makefile" and the config-32/64.h file are needed by distutils/sysconfig.py
-_init_posix(), so we include them in the core package, along with their parent
-directories (bug 531901)
-
-* Tue Oct 27 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-6
-- reword description, based on suggestion by amcnabb
-- fix the test_email and test_imp selftests (patch 3 and patch 4 respectively)
-- fix the test_tk and test_ttk_* selftests (patch 5)
-- fix up the specfile's handling of shebang/perms to avoid corrupting
-test_httpservers.py (sed command suggested by amcnabb)
-
-* Thu Oct 22 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-5
-- fixup importlib/_bootstrap.py so that it correctly handles being unable to
-open .pyc files for writing (patch 2, upstream issue 7187)
-- actually apply the rpath patch (patch 1)
-
-* Thu Oct 22 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-4
-- update patch0's setup of the crypt module to link it against libcrypt
-- update patch0 to comment "datetimemodule" back out, so that it is built
-using setup.py (see Setup, option 3), thus linking it statically against
-timemodule.c and thus avoiding a run-time "undefined symbol:
-_PyTime_DoubleToTimet" failure on "import datetime"
-
-* Wed Oct 21 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-3
-- remove executable flag from various files that shouldn't have it
-- fix end-of-line encodings
-- fix a character encoding
-
-* Tue Oct 20 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-2
-- disable invocation of brp-python-bytecompile in postprocessing, since
-it would be with the wrong version of python (adapted from ivazquez'
-python3000 specfile)
-- use a custom implementation of __find_provides in order to filter out bogus
-provides lines for the various .so modules
-- fixup distutils/unixccompiler.py to remove standard library path from rpath
-(patch 1, was Patch0 in ivazquez' python3000 specfile)
-- split out libraries into a -libs subpackage
-- update summaries and descriptions, basing content on ivazquez' specfile
-- fixup executable permissions on .py, .xpm and .xbm files, based on work in
-ivazquez's specfile
-- get rid of DOS batch files
-- fixup permissions for shared libraries from non-standard 555 to standard 755
-- move /usr/bin/python*-config to the -devel subpackage
-- mark various directories as being documentation
-
-* Thu Sep 24 2009 Andrew McNabb <amcnabb(a)mcnabbs.org> 3.1.1-1
-- Initial package for Python 3.
-
diff --git a/python37.rpmlintrc b/python37.rpmlintrc
new file mode 100644
index 0000000..e1e2cbe
--- /dev/null
+++ b/python37.rpmlintrc
@@ -0,0 +1,78 @@
+# KNOWN BUGS:
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1489816
+addFilter(r'crypto-policy-non-compliance-openssl')
+
+
+# TESTS:
+addFilter(r'(zero-length|pem-certificate|uncompressed-zip)
/usr/lib(64)?/python3.\d/test')
+
+
+# OTHER DELIBERATES:
+# chroot function
+addFilter(r'missing-call-to-chdir-with-chroot')
+
+# intentionally unversioned and selfobsoleted
+addFilter(r'unversioned-explicit-obsoletes python')
+addFilter(r'self-obsoletion python3\d obsoletes python3\d')
+
+# intentionally hardcoded
+addFilter(r'hardcoded-library-path in
%{_prefix}/lib/(debug/%{_libdir}|python%{pybasever})')
+
+# intentional for our pythonXY package
+addFilter(r'python3\d\.[^:]+: (E|W): devel-file-in-non-devel-package')
+
+# we have non binary stuff, python files
+addFilter(r'only-non-binary-in-usr-lib')
+
+# some devel files that are deliberately needed
+addFilter(r'devel-file-in-non-devel-package
/usr/include/python3\.\dm/pyconfig-(32|64)\.h')
+addFilter(r'devel-file-in-non-devel-package
/usr/lib(64)?/python3\.\d/distutils/tests/xxmodule\.c')
+
+
+# SORRY, NOT SORRY:
+# manual pages
+addFilter(r'no-manual-page-for-binary
(idle|pydoc|pyvenv|2to3|python3-debug|pathfix|msgfmt|pygettext)')
+addFilter(r'no-manual-page-for-binary python3.*-config$')
+addFilter(r'no-manual-page-for-binary python3.\dd?m$')
+
+# missing documentation from subpackages
+addFilter(r'^python3\d?-(debug|tkinter|test|idle)\.[^:]+: (E|W):
no-documentation')
+
+# platform python is obsoleted, but not provided
+addFilter(r'obsolete-not-provided platform-python')
+
+
+# RPMLINT IMPERFECTIONS
+#
https://github.com/rpm-software-management/rpmlint/issues/123
+addFilter(r'python-bytecode-wrong-magic-value .* expected 33\d\d \(3\.7\), found
3393')
+#
https://github.com/rpm-software-management/rpmlint/pull/133
+addFilter(r'python-bytecode-wrong-magic-value .* expected 33\d\d \(3\.7\), found
3394')
+
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1550562
+#
https://github.com/rpm-software-management/rpmlint/issues/128
+addFilter(r'python-bytecode-inconsistent-mtime .* 1970')
+
+# debugsource
+addFilter(r'^python3\d?-debugsource\.[^:]+: (E|W): no-documentation')
+
+# debuginfo
+addFilter(r'^python3\d?-debuginfo\.[^:]+: (E|W): useless-provides
debuginfo\(build-id\)')
+
+# this is OK for F28+
+addFilter(r'library-without-ldconfig-post')
+
+# debug package contains devel and non-devel files
+addFilter(r'python3\d?-debug.[^:]+: (E|W):
(non-)?devel-file-in-(non-)?devel-package')
+
+# this goes to other subpackage, hence not actually dangling, the read error is bogus
+addFilter(r'dangling-relative-symlink /usr/lib(64)?/pkgconfig/python-3\.\ddm\.pc
python-3\.\d\.pc')
+addFilter(r'read-error /usr/lib(64)?/pkgconfig/python-3\.\ddm\.pc \[Errno 2\]')
+
+# we need this macro to evaluate, even if the line starts with #
+addFilter(r'macro-in-comment %\{_pyconfig(32|64)_h\}')
+
+# Python modules don't need to be linked against libc
+addFilter(r'E: library-not-linked-against-libc
/usr/lib(64)?/python3.\d/lib-dynload/')
+
+# SPELLING ERRORS
+addFilter(r'spelling-error .* en_US (bytecode|pyc|filename|tkinter|namespaces|pytest)
')
diff --git a/python37.spec b/python37.spec
new file mode 100644
index 0000000..db32e6e
--- /dev/null
+++ b/python37.spec
@@ -0,0 +1,2780 @@
+# ==================
+# Top-level metadata
+# ==================
+
+%global pybasever 3.7
+
+# pybasever without the dot:
+%global pyshortver 37
+
+Name: python%{pyshortver}
+Summary: Version %{pybasever} of the Python interpreter
+URL:
https://www.python.org/
+
+# WARNING When rebasing to a new Python version,
+# remember to update the python3-docs package as well
+%global general_version %{pybasever}.4
+#global prerel ...
+%global upstream_version %{general_version}%{?prerel}
+Version: %{general_version}%{?prerel:~%{prerel}}
+Release: 5%{?dist}
+License: Python
+
+
+# ==================================
+# Conditionals controlling the build
+# ==================================
+
+# Note that the bcond macros are named for the CLI option they create.
+# "%%bcond_without" means "ENABLE by default and create a --without
option"
+
+
+# Flat package, i.e. python36, python37, python38 for tox etc.
+# warning: changes some other defaults
+# in Fedora, never turn this on for the python3 package
+# and always keep it on for python37 etc.
+# WARNING: This does not change the package name and summary above
+%bcond_without flatpackage
+
+# Whether to use RPM build wheels from the python-{pip,setuptools}-wheel package
+# Uses upstream bundled prebuilt wheels otherwise
+%bcond_without rpmwheels
+
+# Expensive optimizations (mainly, profile-guided optimizations)
+%ifarch %{ix86} x86_64
+%bcond_without optimizations
+%else
+# On some architectures, the optimized build takes tens of hours, possibly
+# longer than Koji's 24-hour timeout. Disable optimizations here.
+%bcond_with optimizations
+%endif
+
+# Run the test suite in %%check
+%bcond_without tests
+
+# Extra build for debugging the interpreter or C-API extensions
+# (the -debug subpackages)
+%if %{with flatpackage}
+%bcond_with debug_build
+%else
+%bcond_without debug_build
+%endif
+
+# Support for the GDB debugger
+%bcond_without gdb_hooks
+
+# The dbm.gnu module (key-value database)
+%bcond_without gdbm
+
+# Main interpreter loop optimization
+%bcond_without computed_gotos
+
+# Support for the Valgrind debugger/profiler
+%ifarch %{valgrind_arches}
+%bcond_without valgrind
+%else
+%bcond_with valgrind
+%endif
+
+
+# Notes from bootstraping Python 3.7:
+#
https://fedoraproject.org/wiki/SIGs/Python/UpgradingPython
+
+
+# =====================
+# General global macros
+# =====================
+
+%global pylibdir %{_libdir}/python%{pybasever}
+%global dynload_dir %{pylibdir}/lib-dynload
+
+# ABIFLAGS, LDVERSION and SOABI are in the upstream configure.ac
+# See PEP 3149 for some background:
http://www.python.org/dev/peps/pep-3149/
+%global ABIFLAGS_optimized m
+%global ABIFLAGS_debug dm
+
+%global LDVERSION_optimized %{pybasever}%{ABIFLAGS_optimized}
+%global LDVERSION_debug %{pybasever}%{ABIFLAGS_debug}
+
+%global SOABI_optimized cpython-%{pyshortver}%{ABIFLAGS_optimized}-%{_arch}-linux%{_gnu}
+%global SOABI_debug cpython-%{pyshortver}%{ABIFLAGS_debug}-%{_arch}-linux%{_gnu}
+
+# All bytecode files are in a __pycache__ subdirectory, with a name
+# reflecting the version of the bytecode.
+# See PEP 3147:
http://www.python.org/dev/peps/pep-3147/
+# For example,
+# foo/bar.py
+# has bytecode at:
+# foo/__pycache__/bar.cpython-%%{pyshortver}.pyc
+# foo/__pycache__/bar.cpython-%%{pyshortver}.opt-1.pyc
+# foo/__pycache__/bar.cpython-%%{pyshortver}.opt-2.pyc
+%global bytecode_suffixes .cpython-%{pyshortver}*.pyc
+
+# Python's configure script defines SOVERSION, and this is used in the Makefile
+# to determine INSTSONAME, the name of the libpython DSO:
+# LDLIBRARY='libpython$(VERSION).so'
+# INSTSONAME="$LDLIBRARY".$SOVERSION
+# We mirror this here in order to make it easier to add the -gdb.py hooks.
+# (if these get out of sync, the payload of the libs subpackage will fail
+# and halt the build)
+%global py_SOVERSION 1.0
+%global py_INSTSONAME_optimized libpython%{LDVERSION_optimized}.so.%{py_SOVERSION}
+%global py_INSTSONAME_debug libpython%{LDVERSION_debug}.so.%{py_SOVERSION}
+
+# Disable automatic bytecompilation. The python3 binary is not yet be
+# available in /usr/bin when Python is built. Also, the bytecompilation fails
+# on files that test invalid syntax.
+%undefine py_auto_byte_compile
+
+# Don't let RPM set SOURCE_DATE_EPOCH based on the latest %%changelog date
+# It breaks tests with: can't find '__main__' module in .../test_zip.zip
+# Reported at
https://bugs.python.org/issue34022
+# Tracked at
https://bugzilla.redhat.com/show_bug.cgi?id=1724753
+%global source_date_epoch_from_changelog 0
+
+# For multilib support, files that are different between 32- and 64-bit arches
+# need different filenames. Use "64" or "32" according to the word
size.
+# Currently, the best way to determine an architecture's word size happens to
+# be checking %%{_lib}.
+%if "%{_lib}" == "lib64"
+%global wordsize 64
+%else
+%global wordsize 32
+%endif
+
+
+# =======================
+# Build-time requirements
+# =======================
+
+# (keep this list alphabetized)
+
+BuildRequires: autoconf
+BuildRequires: bluez-libs-devel
+BuildRequires: bzip2
+BuildRequires: bzip2-devel
+BuildRequires: desktop-file-utils
+BuildRequires: expat-devel
+
+BuildRequires: findutils
+BuildRequires: gcc-c++
+%if %{with gdbm}
+BuildRequires: gdbm-devel
+%endif
+BuildRequires: glibc-all-langpacks
+BuildRequires: glibc-devel
+BuildRequires: gmp-devel
+BuildRequires: libappstream-glib
+BuildRequires: libffi-devel
+BuildRequires: libnsl2-devel
+BuildRequires: libtirpc-devel
+BuildRequires: libGL-devel
+BuildRequires: libuuid-devel
+BuildRequires: libX11-devel
+BuildRequires: ncurses-devel
+
+BuildRequires: openssl-devel
+BuildRequires: pkgconfig
+BuildRequires: readline-devel
+BuildRequires: redhat-rpm-config >= 127
+BuildRequires: sqlite-devel
+BuildRequires: gdb
+
+BuildRequires: tar
+BuildRequires: tcl-devel
+BuildRequires: tix-devel
+BuildRequires: tk-devel
+
+%if %{with valgrind}
+BuildRequires: valgrind-devel
+%endif
+
+BuildRequires: xz-devel
+BuildRequires: zlib-devel
+
+BuildRequires: /usr/bin/dtrace
+
+# workaround
http://bugs.python.org/issue19804 (test_uuid requires ifconfig)
+BuildRequires: /usr/sbin/ifconfig
+
+# For %%python_provide
+BuildRequires: python-rpm-macros
+
+%if %{with rpmwheels}
+BuildRequires: python-setuptools-wheel
+BuildRequires: python-pip-wheel
+%endif
+
+
+# =======================
+# Source code and patches
+# =======================
+
+Source:
https://www.python.org/ftp/python/%{general_version}/Python-%{upstream_ve...
+
+# A simple script to check timestamps of bytecode files
+# Run in check section with Python that is currently being built
+# Originally written by bkabrda
+Source8: check-pyc-timestamps.py
+
+# Desktop menu entry for idle3
+Source10: idle3.desktop
+
+# AppData file for idle3
+Source11: idle3.appdata.xml
+
+# 00001 #
+# Fixup distutils/unixccompiler.py to remove standard library path from rpath:
+# Was Patch0 in ivazquez' python3000 specfile:
+Patch1: 00001-rpath.patch
+
+# 00102 #
+# Change the various install paths to use /usr/lib64/ instead or /usr/lib
+# Only used when "%%{_lib}" == "lib64"
+# Not yet sent upstream.
+Patch102: 00102-lib64.patch
+
+# 00111 #
+# Patch the Makefile.pre.in so that the generated Makefile doesn't try to build
+# a libpythonMAJOR.MINOR.a
+# See
https://bugzilla.redhat.com/show_bug.cgi?id=556092
+# Downstream only: not appropriate for upstream
+Patch111: 00111-no-static-lib.patch
+
+# 00155 #
+# Avoid allocating thunks in ctypes unless absolutely necessary, to avoid
+# generating SELinux denials on "import ctypes" and "import uuid"
when
+# embedding Python within httpd
+# See
https://bugzilla.redhat.com/show_bug.cgi?id=814391
+Patch155: 00155-avoid-ctypes-thunks.patch
+
+
+# 00170 #
+# In debug builds, try to print repr() when a C-level assert fails in the
+# garbage collector (typically indicating a reference-counting error
+# somewhere else e.g in an extension module)
+# The new macros/functions within gcmodule.c are hidden to avoid exposing
+# them within the extension API.
+# Sent upstream:
http://bugs.python.org/issue9263
+# See
https://bugzilla.redhat.com/show_bug.cgi?id=614680
+Patch170: 00170-gc-assertions.patch
+
+# 00178 #
+# Don't duplicate various FLAGS in sysconfig values
+#
http://bugs.python.org/issue17679
+# Does not affect python2 AFAICS (different sysconfig values initialization)
+Patch178: 00178-dont-duplicate-flags-in-sysconfig.patch
+
+# 00189 #
+# Instead of bundled wheels, use our RPM packaged wheels from
+# /usr/share/python-wheels
+Patch189: 00189-use-rpm-wheels.patch
+
+# 00205 #
+# LIBPL variable in makefile takes LIBPL from configure.ac
+# but the LIBPL variable defined there doesn't respect libdir macro
+Patch205: 00205-make-libpl-respect-lib64.patch
+
+# 00251
+# Set values of prefix and exec_prefix in distutils install command
+# to /usr/local if executable is /usr/bin/python* and RPM build
+# is not detected to make pip and distutils install into separate location
+# Fedora Change:
https://fedoraproject.org/wiki/Changes/Making_sudo_pip_safe
+Patch251: 00251-change-user-install-location.patch
+
+# 00274 #
+# Upstream uses Debian-style architecture naming. Change to match Fedora.
+Patch274: 00274-fix-arch-names.patch
+
+# 00316 #
+# We remove the exe files from distutil's bdist_wininst
+# So we mark the command as unsupported - and the tests are skipped
+Patch316: 00316-mark-bdist_wininst-unsupported.patch
+
+# 00328 #
+# Restore pyc to TIMESTAMP invalidation mode as default in rpmbubild
+# See
https://src.fedoraproject.org/rpms/redhat-rpm-config/pull-request/57#comm...
+Patch328: 00328-pyc-timestamp-invalidation-mode.patch
+
+# (New patches go here ^^^)
+#
+# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
+# please try to keep the patch numbers in-sync between all specfiles.
+#
+# More information, and a patch number catalog, is at:
+#
+#
https://fedoraproject.org/wiki/SIGs/Python/PythonPatches
+
+
+# ==========================================
+# Descriptions, and metadata for subpackages
+# ==========================================
+
+# People might want to dnf install pythonX.Y instead of pythonXY;
+# we enable this in both flat and nonflat package.
+Provides: python%{pybasever} = %{version}-%{release}
+
+%if %{without flatpackage}
+
+# Packages with Python modules in standard locations automatically
+# depend on python(abi). Provide that here.
+Provides: python(abi) = %{pybasever}
+
+Requires: %{name}-libs%{?_isa} = %{version}-%{release}
+
+# In order to support multiple Python interpreters for development purposes,
+# packages with the naming scheme flatpackage (e.g. python35) exist for
+# non-default versions of Python 3.
+# For consistency, and to keep the upgrade path clean, we Provide/Obsolete
+# these names here.
+Provides: python%{pyshortver} = %{version}-%{release}
+# Note that using Obsoletes without package version is not standard practice.
+# Here we assert that *any* version of the system's default interpreter is
+# preferable to an "extra" interpreter. For example, python3-3.6.1 will
+# replace python36-3.6.2.
+Obsoletes: python%{pyshortver}
+
+#
https://fedoraproject.org/wiki/Changes/Move_usr_bin_python_into_separate_...
+#
https://fedoraproject.org/wiki/Changes/Python_means_Python3
+# We recommend /usr/bin/python so users get it by default
+# Versioned recommends are problematic, and we know that the package requires
+# python3 back with fixed version, so we just use the path here:
+Recommends: %{_bindir}/python
+
+# In Fedora 31, /usr/bin/pydoc was moved here from Python 2.
+# Ideally we'd have an explicit conflict with "/usr/bin/pydoc < 3",
+# but file provides aren't versioned and the file moved across packages.
+# Instead, we rely on the conflict in python3-libs.
+
+# Previously, this was required for our rewheel patch to work.
+# This is technically no longer needed, but we keep it recommended
+# for the developer experience.
+Recommends: python3-setuptools
+Recommends: python3-pip
+
+# This prevents ALL subpackages built from this spec to require
+# /usr/bin/python3*. Granularity per subpackage is impossible.
+# It's intended for the libs package not to drag in the interpreter, see
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1547131
+# All others require %%{name} anyway.
+%global __requires_exclude ^/usr/bin/python3
+
+
+# The description used both for the SRPM and the main `python3` subpackage:
+%description
+Python is an accessible, high-level, dynamically typed, interpreted programming
+language, designed with an emphasis on code readability.
+It includes an extensive standard library, and has a vast ecosystem of
+third-party libraries.
+
+The %{name} package provides the "python3" executable: the reference
+interpreter for the Python language, version 3.
+The majority of its standard library is provided in the %{name}-libs package,
+which should be installed automatically along with %{name}.
+The remaining parts of the Python standard library are broken out into the
+%{name}-tkinter and %{name}-test packages, which may need to be installed
+separately.
+
+Documentation for Python is provided in the %{name}-docs package.
+
+Packages containing additional libraries for Python are generally named with
+the "%{name}-" prefix.
+
+
+#
https://fedoraproject.org/wiki/Changes/Move_usr_bin_python_into_separate_...
+#
https://fedoraproject.org/wiki/Changes/Python_means_Python3
+%package -n python-unversioned-command
+Summary: The "python" command that runs Python 3
+BuildArch: noarch
+
+# In theory this could require any python3 version
+Requires: python3 == %{version}-%{release}
+# But since we want to provide versioned python, we require exact version
+Provides: python = %{version}-%{release}
+# This also save us an explicit conflict for older python3 builds
+
+%description -n python-unversioned-command
+This package contains /usr/bin/python - the "python" command that runs Python
3.
+
+
+%package libs
+Summary: Python runtime libraries
+
+%if %{with rpmwheels}
+Requires: python-setuptools-wheel
+Requires: python-pip-wheel
+%else
+Provides: bundled(python3-pip) = 19.0.3
+Provides: bundled(python3-setuptools) = 40.8.0
+%endif
+
+%{?python_provide:%python_provide python3-libs}
+
+# There are files in the standard library that have python shebang.
+# We've filtered the automatic requirement out so libs are installable without
+# the main package. This however makes it pulled in by default.
+# See
https://bugzilla.redhat.com/show_bug.cgi?id=1547131
+Recommends: %{name}%{?_isa} = %{version}-%{release}
+
+#
https://fedoraproject.org/wiki/Changes/Move_usr_bin_python_into_separate_...
+# In Fedora 31, several "unversioned" files like /usr/bin/pydoc and all the
+# "unversioned" provides were moved from python2 to python3.
+# So, newer python3 packages need to conflict with old Python 2 builds that
+# still provided unversioned Python.
+# Since all python packages, new and old, have versioned requires on
+# python?-libs, we do it here:
+Conflicts: python-libs < 3
+# (We explicitly conflict with python-libs and not python2-libs, so only the
+# old Python 2 builds that still provided unversioned Python are handled.)
+
+
+%description libs
+This package contains runtime libraries for use by Python:
+- the majority of the Python standard library
+- a dynamically linked library for use by applications that embed Python as
+ a scripting language, and by the main "python3" executable
+
+
+%package devel
+Summary: Libraries and header files needed for Python development
+Requires: %{name} = %{version}-%{release}
+Requires: %{name}-libs%{?_isa} = %{version}-%{release}
+BuildRequires: python-rpm-macros
+
+# The RPM related dependencies bring nothing to a non-RPM Python developer
+# But we want them when packages BuildRequire python3-devel
+Requires: (python-rpm-macros if rpm-build)
+Requires: (python3-rpm-macros if rpm-build)
+Requires: (python3-rpm-generators if rpm-build)
+
+# This is not "API" (packages that need setuptools should still BuildRequire
it)
+# However some packages apparently can build both with and without setuptools
+# producing egg-info as file or directory (depending on setuptools presence).
+# Directory-to-file updates are problematic in RPM, so we ensure setuptools is
+# installed when -devel is required.
+# See
https://bugzilla.redhat.com/show_bug.cgi?id=1623914
+# See
https://fedoraproject.org/wiki/Packaging:Directory_Replacement
+Requires: (python3-setuptools if rpm-build)
+
+%{?python_provide:%python_provide python3-devel}
+
+Provides: %{name}-2to3 = %{version}-%{release}
+Provides: 2to3 = %{version}-%{release}
+
+Conflicts: %{name} < %{version}-%{release}
+
+# In Fedora 31, several "unversioned" files were moved here from Python 2:
+# pygettext.py, msgfmt.py, python-config, python.pc
+Conflicts: python-devel < 3
+
+%description devel
+This package contains the header files and configuration needed to compile
+Python extension modules (typically written in C or C++), to embed Python
+into other programs, and to make binary distributions for Python libraries.
+
+It also contains the necessary macros to build RPM packages with Python modules
+and 2to3 tool, an automatic source converter from Python 2.X.
+
+
+%package idle
+Summary: A basic graphical development environment for Python
+Requires: %{name} = %{version}-%{release}
+Requires: %{name}-tkinter = %{version}-%{release}
+
+Provides: idle3 = %{version}-%{release}
+Provides: idle = %{version}-%{release}
+
+Provides: %{name}-tools = %{version}-%{release}
+Provides: %{name}-tools%{?_isa} = %{version}-%{release}
+Obsoletes: %{name}-tools < %{version}-%{release}
+
+# In Fedora 31, /usr/bin/idle was moved here from Python 2.
+Conflicts: python-tools < 3
+
+%{?python_provide:%python_provide python3-idle}
+
+%description idle
+IDLE is Pythons Integrated Development and Learning Environment.
+
+IDLE has the following features: Python shell window (interactive
+interpreter) with colorizing of code input, output, and error messages;
+multi-window text editor with multiple undo, Python colorizing,
+smart indent, call tips, auto completion, and other features;
+search within any window, replace within editor windows, and
+search through multiple files (grep); debugger with persistent
+breakpoints, stepping, and viewing of global and local namespaces;
+configuration, browsers, and other dialogs.
+
+
+%package tkinter
+Summary: A GUI toolkit for Python
+Requires: %{name} = %{version}-%{release}
+
+%{?python_provide:%python_provide python3-tkinter}
+
+%description tkinter
+The Tkinter (Tk interface) library is a graphical user interface toolkit for
+the Python programming language.
+
+
+%package test
+Summary: The self-test suite for the main python3 package
+Requires: %{name} = %{version}-%{release}
+Requires: %{name}-libs%{?_isa} = %{version}-%{release}
+
+%{?python_provide:%python_provide python3-test}
+
+%description test
+The self-test suite for the Python interpreter.
+
+This is only useful to test Python itself. For testing general Python code,
+you should use the unittest module from %{name}-libs, or a library such as
+%{name}-pytest or %{name}-nose.
+
+
+%if %{with debug_build}
+%package debug
+Summary: Debug version of the Python runtime
+
+# The debug build is an all-in-one package version of the regular build, and
+# shares the same .py/.pyc files and directories as the regular build. Hence
+# we depend on all of the subpackages of the regular build:
+Requires: %{name}%{?_isa} = %{version}-%{release}
+Requires: %{name}-libs%{?_isa} = %{version}-%{release}
+Requires: %{name}-devel%{?_isa} = %{version}-%{release}
+Requires: %{name}-test%{?_isa} = %{version}-%{release}
+Requires: %{name}-tkinter%{?_isa} = %{version}-%{release}
+Requires: %{name}-idle%{?_isa} = %{version}-%{release}
+
+# In Fedora 31, /usr/bin/python-debug was moved here from Python 2.
+Conflicts: python-debug < 3
+
+%{?python_provide:%python_provide python3-debug}
+
+%description debug
+python3-debug provides a version of the Python runtime with numerous debugging
+features enabled, aimed at advanced Python users such as developers of Python
+extension modules.
+
+This version uses more memory and will be slower than the regular Python build,
+but is useful for tracking down reference-counting issues and other bugs.
+
+The bytecode format is unchanged, so that .pyc files are compatible between
+this and the standard version of Python, but the debugging features mean that
+C/C++ extension modules are ABI-incompatible and must be built for each version
+separately.
+
+The debug build shares installation directories with the standard Python
+runtime, so that .py and .pyc files can be shared.
+Compiled extension modules use a special ABI flag ("d") in the filename,
+so extensions for both versions can co-exist in the same directory.
+%endif # with debug_build
+
+%else # with flatpackage
+
+# We'll not provide this, on purpose
+# No package in Fedora shall ever depend on flatpackage via this
+%global __requires_exclude ^python\\(abi\\) = 3\\..$
+%global __provides_exclude ^python\\(abi\\) = 3\\..$
+
+%if %{with rpmwheels}
+Requires: python-setuptools-wheel
+Requires: python-pip-wheel
+%else
+Provides: bundled(python3-pip) = 19.0.3
+Provides: bundled(python3-setuptools) = 40.8.0
+%endif
+
+# The description for the flat package
+%description
+Python %{pybasever} package for developers.
+
+This package exists to allow developers to test their code against an older
+version of Python. This is not a full Python stack and if you wish to run
+your applications with Python %{pybasever}, see other distributions
+that support it, such as an older Fedora release.
+
+%endif # with flatpackage
+
+# ======================================================
+# The prep phase of the build:
+# ======================================================
+
+%prep
+%setup -q -n Python-%{upstream_version}
+# Remove all exe files to ensure we are not shipping prebuilt binaries
+# note that those are only used to create Microsoft Windows installers
+# and that functionality is broken on Linux anyway
+find -name '*.exe' -print -delete
+
+# Remove bundled libraries to ensure that we're using the system copy.
+rm -r Modules/expat
+
+#
+# Apply patches:
+#
+%patch1 -p1
+
+%if "%{_lib}" == "lib64"
+%patch102 -p1
+%endif
+%patch111 -p1
+%patch155 -p1
+%patch170 -p1
+%patch178 -p1
+
+%if %{with rpmwheels}
+%patch189 -p1
+rm Lib/ensurepip/_bundled/*.whl
+%endif
+
+%patch205 -p1
+%patch251 -p1
+%patch274 -p1
+%patch316 -p1
+%patch328 -p1
+
+
+# Remove files that should be generated by the build
+# (This is after patching, so that we can use patches directly from upstream)
+rm configure pyconfig.h.in
+
+
+# ======================================================
+# Configuring and building the code:
+# ======================================================
+
+%build
+
+# Regenerate the configure script and pyconfig.h.in
+autoconf
+autoheader
+
+# Remember the current directory (which has sources and the configure script),
+# so we can refer to it after we "cd" elsewhere.
+topdir=$(pwd)
+
+# Get proper option names from bconds
+%if %{with computed_gotos}
+%global computed_gotos_flag yes
+%else
+%global computed_gotos_flag no
+%endif
+
+%if %{with optimizations}
+%global optimizations_flag "--enable-optimizations"
+%else
+%global optimizations_flag "--disable-optimizations"
+%endif
+
+# Set common compiler/linker flags
+# We utilize the %%extension_...flags macros here so users building C/C++
+# extensions with our python won't get all the compiler/linker flags used
+# in Fedora RPMs.
+# Standard library built here will still use the %%build_...flags,
+# Fedora packages utilizing %%py3_build will use them as well
+#
https://fedoraproject.org/wiki/Changes/Python_Extension_Flags
+export CFLAGS="%{extension_cflags} -D_GNU_SOURCE -fPIC -fwrapv"
+export CFLAGS_NODIST="%{build_cflags} -D_GNU_SOURCE -fPIC -fwrapv"
+export CXXFLAGS="%{extension_cxxflags} -D_GNU_SOURCE -fPIC -fwrapv"
+export CPPFLAGS="$(pkg-config --cflags-only-I libffi)"
+export OPT="%{extension_cflags} -D_GNU_SOURCE -fPIC -fwrapv"
+export LINKCC="gcc"
+export CFLAGS="$CFLAGS $(pkg-config --cflags openssl)"
+export LDFLAGS="%{extension_ldflags} -g $(pkg-config --libs-only-L openssl)"
+export LDFLAGS_NODIST="%{build_ldflags} -g $(pkg-config --libs-only-L
openssl)"
+
+# We can build several different configurations of Python: regular and debug.
+# Define a common function that does one build:
+BuildPython() {
+ ConfName=$1
+ ExtraConfigArgs=$2
+ MoreCFlags=$3
+
+ # Each build is done in its own directory
+ ConfDir=build/$ConfName
+ echo STARTING: BUILD OF PYTHON FOR CONFIGURATION: $ConfName
+ mkdir -p $ConfDir
+ pushd $ConfDir
+
+ # Normally, %%configure looks for the "configure" script in the current
+ # directory.
+ # Since we changed directories, we need to tell %%configure where to look.
+ %global _configure $topdir/configure
+
+%configure \
+ --enable-ipv6 \
+ --enable-shared \
+ --with-computed-gotos=%{computed_gotos_flag} \
+ --with-dbmliborder=gdbm:ndbm:bdb \
+ --with-system-expat \
+ --with-system-ffi \
+ --enable-loadable-sqlite-extensions \
+ --with-dtrace \
+ --with-lto \
+ --with-ssl-default-suites=openssl \
+%if %{with valgrind}
+ --with-valgrind \
+%endif
+ $ExtraConfigArgs \
+ %{nil}
+
+ # Invoke the build
+ make EXTRA_CFLAGS="$CFLAGS $MoreCFlags" %{?_smp_mflags}
+
+ popd
+ echo FINISHED: BUILD OF PYTHON FOR CONFIGURATION: $ConfName
+}
+
+# Call the above to build each configuration.
+
+%if %{with debug_build}
+BuildPython debug \
+ "--without-ensurepip --with-pydebug" \
+ "-Og"
+%endif # with debug_build
+
+BuildPython optimized \
+ "--without-ensurepip %{optimizations_flag}" \
+ ""
+
+# ======================================================
+# Installing the built code:
+# ======================================================
+
+%install
+
+# As in %%build, remember the current directory
+topdir=$(pwd)
+
+# We install a collection of hooks for gdb that make it easier to debug
+# executables linked against libpython3* (such as /usr/bin/python3 itself)
+#
+# These hooks are implemented in Python itself (though they are for the version
+# of python that gdb is linked with)
+#
+# gdb-archer looks for them in the same path as the ELF file or its .debug
+# file, with a -gdb.py suffix.
+# We put them next to the debug file, because ldconfig would complain if
+# it found non-library files directly in /usr/lib/
+# (see
https://bugzilla.redhat.com/show_bug.cgi?id=562980)
+#
+# We'll put these files in the debuginfo package by installing them to e.g.:
+# /usr/lib/debug/usr/lib/libpython3.2.so.1.0.debug-gdb.py
+# (note that the debug path is /usr/lib/debug for both 32/64 bit)
+#
+# See
https://fedoraproject.org/wiki/Features/EasierPythonDebugging for more
+# information
+
+%if %{with gdb_hooks}
+DirHoldingGdbPy=%{_prefix}/lib/debug/%{_libdir}
+mkdir -p %{buildroot}$DirHoldingGdbPy
+%endif # with gdb_hooks
+
+# Multilib support for pyconfig.h
+# 32- and 64-bit versions of pyconfig.h are different. For multilib support
+# (making it possible to install 32- and 64-bit versions simultaneously),
+# we need to install them under different filenames, and to make the common
+# "pyconfig.h" include the right file based on architecture.
+# See
https://bugzilla.redhat.com/show_bug.cgi?id=192747
+# Filanames are defined here:
+%global _pyconfig32_h pyconfig-32.h
+%global _pyconfig64_h pyconfig-64.h
+%global _pyconfig_h pyconfig-%{wordsize}.h
+
+# Use a common function to do an install for all our configurations:
+InstallPython() {
+
+ ConfName=$1
+ PyInstSoName=$2
+ MoreCFlags=$3
+ LDVersion=$4
+
+ # Switch to the directory with this configuration's built files
+ ConfDir=build/$ConfName
+ echo STARTING: INSTALL OF PYTHON FOR CONFIGURATION: $ConfName
+ mkdir -p $ConfDir
+ pushd $ConfDir
+
+ make \
+ DESTDIR=%{buildroot} \
+ INSTALL="install -p" \
+ EXTRA_CFLAGS="$MoreCFlags" \
+ install
+
+ popd
+
+%if %{with gdb_hooks}
+ # See comment on $DirHoldingGdbPy above
+ PathOfGdbPy=$DirHoldingGdbPy/$PyInstSoName-%{version}-%{release}.%{_arch}.debug-gdb.py
+ cp Tools/gdb/libpython.py %{buildroot}$PathOfGdbPy
+%endif # with gdb_hooks
+
+ # Rename the -devel script that differs on different arches to arch specific name
+ mv %{buildroot}%{_bindir}/python${LDVersion}-{,`uname -m`-}config
+ echo -e '#!/bin/sh\nexec `dirname $0`/python'${LDVersion}'-`uname
-m`-config "$@"' > \
+ %{buildroot}%{_bindir}/python${LDVersion}-config
+ echo '[ $? -eq 127 ] && echo "Could not find
python'${LDVersion}'-`uname -m`-config. Look around to see available arches."
>&2' >> \
+ %{buildroot}%{_bindir}/python${LDVersion}-config
+ chmod +x %{buildroot}%{_bindir}/python${LDVersion}-config
+
+ # Make python3-devel multilib-ready
+ mv %{buildroot}%{_includedir}/python${LDVersion}/pyconfig.h \
+ %{buildroot}%{_includedir}/python${LDVersion}/%{_pyconfig_h}
+ cat > %{buildroot}%{_includedir}/python${LDVersion}/pyconfig.h << EOF
+#include <bits/wordsize.h>
+
+#if __WORDSIZE == 32
+#include "%{_pyconfig32_h}"
+#elif __WORDSIZE == 64
+#include "%{_pyconfig64_h}"
+#else
+#error "Unknown word size"
+#endif
+EOF
+
+ echo FINISHED: INSTALL OF PYTHON FOR CONFIGURATION: $ConfName
+}
+
+# Install the "debug" build first; any common files will be overridden with
+# later builds
+%if %{with debug_build}
+InstallPython debug \
+ %{py_INSTSONAME_debug} \
+ -O0 \
+ %{LDVERSION_debug}
+%endif # with debug_build
+
+# Now the optimized build:
+InstallPython optimized \
+ %{py_INSTSONAME_optimized} \
+ "" \
+ %{LDVERSION_optimized}
+
+# Install directories for additional packages
+install -d -m 0755 %{buildroot}%{pylibdir}/site-packages/__pycache__
+%if "%{_lib}" == "lib64"
+# The 64-bit version needs to create "site-packages" in /usr/lib/ (for
+# pure-Python modules) as well as in /usr/lib64/ (for packages with extension
+# modules).
+# Note that rpmlint will complain about hardcoded library path;
+# this is intentional.
+install -d -m 0755
%{buildroot}%{_prefix}/lib/python%{pybasever}/site-packages/__pycache__
+%endif
+
+%if %{without flatpackage}
+# add idle3 to menu
+install -D -m 0644 Lib/idlelib/Icons/idle_16.png
%{buildroot}%{_datadir}/icons/hicolor/16x16/apps/idle3.png
+install -D -m 0644 Lib/idlelib/Icons/idle_32.png
%{buildroot}%{_datadir}/icons/hicolor/32x32/apps/idle3.png
+install -D -m 0644 Lib/idlelib/Icons/idle_48.png
%{buildroot}%{_datadir}/icons/hicolor/48x48/apps/idle3.png
+desktop-file-install --dir=%{buildroot}%{_datadir}/applications %{SOURCE10}
+
+# Install and validate appdata file
+mkdir -p %{buildroot}%{_metainfodir}
+cp -a %{SOURCE11} %{buildroot}%{_metainfodir}
+appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/idle3.appdata.xml
+%endif
+
+# Make sure distutils looks at the right pyconfig.h file
+# See
https://bugzilla.redhat.com/show_bug.cgi?id=201434
+# Similar for sysconfig: sysconfig.get_config_h_filename tries to locate
+# pyconfig.h so it can be parsed, and needs to do this at runtime in site.py
+# when python starts up (see
https://bugzilla.redhat.com/show_bug.cgi?id=653058)
+#
+# Split this out so it goes directly to the pyconfig-32.h/pyconfig-64.h
+# variants:
+sed -i -e "s/'pyconfig.h'/'%{_pyconfig_h}'/" \
+ %{buildroot}%{pylibdir}/distutils/sysconfig.py \
+ %{buildroot}%{pylibdir}/sysconfig.py
+
+# Install pathfix.py to bindir
+# See
https://github.com/fedora-python/python-rpm-porting/issues/24
+cp -p Tools/scripts/pathfix.py %{buildroot}%{_bindir}/
+
+# Install i18n tools to bindir
+# They are also in python2, so we version them
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1571474
+for tool in pygettext msgfmt; do
+ cp -p Tools/i18n/${tool}.py %{buildroot}%{_bindir}/${tool}%{pybasever}.py
+ ln -s ${tool}%{pybasever}.py %{buildroot}%{_bindir}/${tool}3.py
+done
+
+# Switch all shebangs to refer to the specific Python version.
+# This currently only covers files matching ^[a-zA-Z0-9_]+\.py$,
+# so handle files named using other naming scheme separately.
+LD_LIBRARY_PATH=./build/optimized ./build/optimized/python \
+ Tools/scripts/pathfix.py \
+ -i "%{_bindir}/python%{pybasever}" -pn \
+ %{buildroot} \
+ %{buildroot}%{_bindir}/*%{pybasever}.py \
+ %{?with_gdb_hooks:%{buildroot}$DirHoldingGdbPy/*.py}
+
+# Remove tests for python3-tools which was removed in
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1312030
+rm -rf %{buildroot}%{pylibdir}/test/test_tools
+
+# Remove shebang lines from .py files that aren't executable, and
+# remove executability from .py files that don't have a shebang line:
+find %{buildroot} -name \*.py \
+ \( \( \! -perm /u+x,g+x,o+x -exec sed -e '/^#!/Q 0' -e 'Q 1' {} \; \
+ -print -exec sed -i '1d' {} \; \) -o \( \
+ -perm /u+x,g+x,o+x ! -exec grep -m 1 -q '^#!' {} \; \
+ -exec chmod a-x {} \; \) \)
+
+# Get rid of DOS batch files:
+find %{buildroot} -name \*.bat -exec rm {} \;
+
+# Get rid of backup files:
+find %{buildroot}/ -name "*~" -exec rm -f {} \;
+find . -name "*~" -exec rm -f {} \;
+
+# Do bytecompilation with the newly installed interpreter.
+# This is similar to the script in macros.pybytecompile
+# compile *.pyc
+find %{buildroot} -type f -a -name "*.py" -print0 | \
+ LD_LIBRARY_PATH="%{buildroot}%{dynload_dir}/:%{buildroot}%{_libdir}" \
+ PYTHONPATH="%{buildroot}%{_libdir}/python%{pybasever}
%{buildroot}%{_libdir}/python%{pybasever}/site-packages" \
+ xargs -0 %{buildroot}%{_bindir}/python%{pybasever} -O -c 'import py_compile, sys;
[py_compile.compile(f, dfile=f.partition("%{buildroot}")[2], optimize=opt) for
opt in range(3) for f in sys.argv[1:]]' || :
+
+# Since we have pathfix.py in bindir, this is created, but we don't want it
+rm -rf %{buildroot}%{_bindir}/__pycache__
+
+# Fixup permissions for shared libraries from non-standard 555 to standard 755:
+find %{buildroot} -perm 555 -exec chmod 755 {} \;
+
+# Create "/usr/bin/python3-debug", a symlink to the python3 debug binary, to
+# avoid the user having to know the precise version and ABI flags.
+# See e.g.
https://bugzilla.redhat.com/show_bug.cgi?id=676748
+%if %{with debug_build} && %{without flatpackage}
+ln -s \
+ %{_bindir}/python%{LDVERSION_debug} \
+ %{buildroot}%{_bindir}/python3-debug
+%endif
+
+# There's 2to3-X.X executable and 2to3 soft link to it.
+# No reason to have both, so keep only 2to3 as an executable.
+# See
https://bugzilla.redhat.com/show_bug.cgi?id=1111275
+mv %{buildroot}%{_bindir}/2to3-%{pybasever} %{buildroot}%{_bindir}/2to3
+
+# make man python3.Xm work
https://bugzilla.redhat.com/show_bug.cgi?id=1612241
+ln -s ./python%{pybasever}.1 %{buildroot}%{_mandir}/man1/python%{pybasever}m.1
+
+%if %{with flatpackage}
+# Remove stuff that would conflict with python3 package
+rm %{buildroot}%{_bindir}/python3
+rm %{buildroot}%{_bindir}/pydoc3
+rm %{buildroot}%{_bindir}/pathfix.py
+rm %{buildroot}%{_bindir}/pygettext3.py
+rm %{buildroot}%{_bindir}/msgfmt3.py
+rm %{buildroot}%{_bindir}/idle3
+rm %{buildroot}%{_bindir}/python3-*
+rm %{buildroot}%{_bindir}/pyvenv
+rm %{buildroot}%{_bindir}/2to3
+rm %{buildroot}%{_libdir}/libpython3.so
+rm %{buildroot}%{_mandir}/man1/python3.1*
+rm %{buildroot}%{_libdir}/pkgconfig/python3.pc
+%else
+# Link the unversioned stuff
+#
https://fedoraproject.org/wiki/Changes/Python_means_Python3
+ln -s ./python3 %{buildroot}%{_bindir}/python
+ln -s ./pydoc3 %{buildroot}%{_bindir}/pydoc
+ln -s ./pygettext3.py %{buildroot}%{_bindir}/pygettext.py
+ln -s ./msgfmt3.py %{buildroot}%{_bindir}/msgfmt.py
+ln -s ./idle3 %{buildroot}%{_bindir}/idle
+ln -s ./python3-config %{buildroot}%{_bindir}/python-config
+ln -s ./python3.1 %{buildroot}%{_mandir}/man1/python.1
+ln -s ./python3.pc %{buildroot}%{_libdir}/pkgconfig/python.pc
+%if %{with debug_build}
+ln -s ./python3-debug %{buildroot}%{_bindir}/python-debug
+%endif
+%endif
+
+
+# ======================================================
+# Checks for packaging issues
+# ======================================================
+
+%check
+
+# first of all, check timestamps of bytecode files
+find %{buildroot} -type f -a -name "*.py" -print0 | \
+ LD_LIBRARY_PATH="%{buildroot}%{dynload_dir}/:%{buildroot}%{_libdir}" \
+ PYTHONPATH="%{buildroot}%{_libdir}/python%{pybasever}
%{buildroot}%{_libdir}/python%{pybasever}/site-packages" \
+ xargs -0 %{buildroot}%{_bindir}/python%{pybasever} %{SOURCE8}
+
+# Ensure that the curses module was linked against libncursesw.so, rather than
+# libncurses.so
+# See
https://bugzilla.redhat.com/show_bug.cgi?id=539917
+ldd %{buildroot}/%{dynload_dir}/_curses*.so \
+ | grep curses \
+ | grep libncurses.so && (echo "_curses.so linked against
libncurses.so" ; exit 1)
+
+# Ensure that the debug modules are linked against the debug libpython, and
+# likewise for the optimized modules and libpython:
+for Module in %{buildroot}/%{dynload_dir}/*.so ; do
+ case $Module in
+ *.%{SOABI_debug})
+ ldd $Module | grep %{py_INSTSONAME_optimized} &&
+ (echo Debug module $Module linked against optimized
%{py_INSTSONAME_optimized} ; exit 1)
+
+ ;;
+ *.%{SOABI_optimized})
+ ldd $Module | grep %{py_INSTSONAME_debug} &&
+ (echo Optimized module $Module linked against debug %{py_INSTSONAME_debug} ;
exit 1)
+ ;;
+ esac
+done
+
+
+# ======================================================
+# Running the upstream test suite
+# ======================================================
+
+topdir=$(pwd)
+CheckPython() {
+ ConfName=$1
+ ConfDir=$(pwd)/build/$ConfName
+
+ echo STARTING: CHECKING OF PYTHON FOR CONFIGURATION: $ConfName
+
+ # Note that we're running the tests using the version of the code in the
+ # builddir, not in the buildroot.
+
+ # Show some info, helpful for debugging test failures
+ LD_LIBRARY_PATH=$ConfDir $ConfDir/python -m test.pythoninfo
+
+ # Run the upstream test suite
+ # test_gdb skipped on armv7hl:
+ #
https://bugzilla.redhat.com/show_bug.cgi?id=1196181
+ # test_gdb skipped on s390x:
+ #
https://bugzilla.redhat.com/show_bug.cgi?id=1678277
+ LD_LIBRARY_PATH=$ConfDir $ConfDir/python -m test.regrtest \
+ -wW --slowest -j0 \
+ -x test_distutils \
+ -x test_bdist_rpm \
+ %ifarch %{arm} s390x
+ -x test_gdb \
+ %endif
+ %ifarch %{mips64}
+ -x test_ctypes \
+ %endif
+
+ echo FINISHED: CHECKING OF PYTHON FOR CONFIGURATION: $ConfName
+
+}
+
+%if %{with tests}
+
+# Check each of the configurations:
+%if %{with debug_build}
+CheckPython debug
+%endif # with debug_build
+CheckPython optimized
+
+%endif # with tests
+
+
+%files
+%doc README.rst
+
+%if %{without flatpackage}
+%{_bindir}/pydoc*
+%{_bindir}/python3
+%{_bindir}/pyvenv
+%else
+%{_bindir}/pydoc%{pybasever}
+%endif
+
+%{_bindir}/python%{pybasever}
+%{_bindir}/python%{pybasever}m
+%{_bindir}/pyvenv-%{pybasever}
+%{_mandir}/*/*3*
+
+
+%if %{without flatpackage}
+%files -n python-unversioned-command
+%{_bindir}/python
+%{_mandir}/*/python.1*
+
+%files libs
+%doc README.rst
+%endif
+
+%dir %{pylibdir}
+%dir %{dynload_dir}
+
+%license %{pylibdir}/LICENSE.txt
+
+%{pylibdir}/lib2to3
+%if %{without flatpackage}
+%exclude %{pylibdir}/lib2to3/tests
+%endif
+
+%dir %{pylibdir}/unittest/
+%dir %{pylibdir}/unittest/__pycache__/
+%{pylibdir}/unittest/*.py
+%{pylibdir}/unittest/__pycache__/*%{bytecode_suffixes}
+
+%dir %{pylibdir}/asyncio/
+%dir %{pylibdir}/asyncio/__pycache__/
+%{pylibdir}/asyncio/*.py
+%{pylibdir}/asyncio/__pycache__/*%{bytecode_suffixes}
+
+%dir %{pylibdir}/venv/
+%dir %{pylibdir}/venv/__pycache__/
+%{pylibdir}/venv/*.py
+%{pylibdir}/venv/__pycache__/*%{bytecode_suffixes}
+%{pylibdir}/venv/scripts
+
+%{pylibdir}/wsgiref
+%{pylibdir}/xmlrpc
+
+%dir %{pylibdir}/ensurepip/
+%dir %{pylibdir}/ensurepip/__pycache__/
+%{pylibdir}/ensurepip/*.py
+%{pylibdir}/ensurepip/__pycache__/*%{bytecode_suffixes}
+
+%if %{with rpmwheels}
+%exclude %{pylibdir}/ensurepip/_bundled
+%else
+%dir %{pylibdir}/ensurepip/_bundled
+%{pylibdir}/ensurepip/_bundled/*.whl
+%endif
+
+%dir %{pylibdir}/concurrent/
+%dir %{pylibdir}/concurrent/__pycache__/
+%{pylibdir}/concurrent/*.py
+%{pylibdir}/concurrent/__pycache__/*%{bytecode_suffixes}
+
+%dir %{pylibdir}/concurrent/futures/
+%dir %{pylibdir}/concurrent/futures/__pycache__/
+%{pylibdir}/concurrent/futures/*.py
+%{pylibdir}/concurrent/futures/__pycache__/*%{bytecode_suffixes}
+
+%{pylibdir}/pydoc_data
+
+%{dynload_dir}/_blake2.%{SOABI_optimized}.so
+%{dynload_dir}/_md5.%{SOABI_optimized}.so
+%{dynload_dir}/_sha1.%{SOABI_optimized}.so
+%{dynload_dir}/_sha256.%{SOABI_optimized}.so
+%{dynload_dir}/_sha3.%{SOABI_optimized}.so
+%{dynload_dir}/_sha512.%{SOABI_optimized}.so
+
+%{dynload_dir}/_asyncio.%{SOABI_optimized}.so
+%{dynload_dir}/_bisect.%{SOABI_optimized}.so
+%{dynload_dir}/_bz2.%{SOABI_optimized}.so
+%{dynload_dir}/_codecs_cn.%{SOABI_optimized}.so
+%{dynload_dir}/_codecs_hk.%{SOABI_optimized}.so
+%{dynload_dir}/_codecs_iso2022.%{SOABI_optimized}.so
+%{dynload_dir}/_codecs_jp.%{SOABI_optimized}.so
+%{dynload_dir}/_codecs_kr.%{SOABI_optimized}.so
+%{dynload_dir}/_codecs_tw.%{SOABI_optimized}.so
+%{dynload_dir}/_contextvars.%{SOABI_optimized}.so
+%{dynload_dir}/_crypt.%{SOABI_optimized}.so
+%{dynload_dir}/_csv.%{SOABI_optimized}.so
+%{dynload_dir}/_ctypes.%{SOABI_optimized}.so
+%{dynload_dir}/_curses.%{SOABI_optimized}.so
+%{dynload_dir}/_curses_panel.%{SOABI_optimized}.so
+%{dynload_dir}/_dbm.%{SOABI_optimized}.so
+%{dynload_dir}/_decimal.%{SOABI_optimized}.so
+%{dynload_dir}/_elementtree.%{SOABI_optimized}.so
+%if %{with gdbm}
+%{dynload_dir}/_gdbm.%{SOABI_optimized}.so
+%endif
+%{dynload_dir}/_hashlib.%{SOABI_optimized}.so
+%{dynload_dir}/_heapq.%{SOABI_optimized}.so
+%{dynload_dir}/_json.%{SOABI_optimized}.so
+%{dynload_dir}/_lsprof.%{SOABI_optimized}.so
+%{dynload_dir}/_lzma.%{SOABI_optimized}.so
+%{dynload_dir}/_multibytecodec.%{SOABI_optimized}.so
+%{dynload_dir}/_multiprocessing.%{SOABI_optimized}.so
+%{dynload_dir}/_opcode.%{SOABI_optimized}.so
+%{dynload_dir}/_pickle.%{SOABI_optimized}.so
+%{dynload_dir}/_posixsubprocess.%{SOABI_optimized}.so
+%{dynload_dir}/_queue.%{SOABI_optimized}.so
+%{dynload_dir}/_random.%{SOABI_optimized}.so
+%{dynload_dir}/_socket.%{SOABI_optimized}.so
+%{dynload_dir}/_sqlite3.%{SOABI_optimized}.so
+%{dynload_dir}/_ssl.%{SOABI_optimized}.so
+%{dynload_dir}/_struct.%{SOABI_optimized}.so
+%{dynload_dir}/array.%{SOABI_optimized}.so
+%{dynload_dir}/audioop.%{SOABI_optimized}.so
+%{dynload_dir}/binascii.%{SOABI_optimized}.so
+%{dynload_dir}/cmath.%{SOABI_optimized}.so
+%{dynload_dir}/_datetime.%{SOABI_optimized}.so
+%{dynload_dir}/fcntl.%{SOABI_optimized}.so
+%{dynload_dir}/grp.%{SOABI_optimized}.so
+%{dynload_dir}/math.%{SOABI_optimized}.so
+%{dynload_dir}/mmap.%{SOABI_optimized}.so
+%{dynload_dir}/nis.%{SOABI_optimized}.so
+%{dynload_dir}/ossaudiodev.%{SOABI_optimized}.so
+%{dynload_dir}/parser.%{SOABI_optimized}.so
+%{dynload_dir}/pyexpat.%{SOABI_optimized}.so
+%{dynload_dir}/readline.%{SOABI_optimized}.so
+%{dynload_dir}/resource.%{SOABI_optimized}.so
+%{dynload_dir}/select.%{SOABI_optimized}.so
+%{dynload_dir}/spwd.%{SOABI_optimized}.so
+%{dynload_dir}/syslog.%{SOABI_optimized}.so
+%{dynload_dir}/termios.%{SOABI_optimized}.so
+%{dynload_dir}/_testmultiphase.%{SOABI_optimized}.so
+%{dynload_dir}/unicodedata.%{SOABI_optimized}.so
+%{dynload_dir}/_uuid.%{SOABI_optimized}.so
+%{dynload_dir}/xxlimited.%{SOABI_optimized}.so
+%{dynload_dir}/zlib.%{SOABI_optimized}.so
+
+%dir %{pylibdir}/site-packages/
+%dir %{pylibdir}/site-packages/__pycache__/
+%{pylibdir}/site-packages/README.txt
+%{pylibdir}/*.py
+%dir %{pylibdir}/__pycache__/
+%{pylibdir}/__pycache__/*%{bytecode_suffixes}
+
+%dir %{pylibdir}/collections/
+%dir %{pylibdir}/collections/__pycache__/
+%{pylibdir}/collections/*.py
+%{pylibdir}/collections/__pycache__/*%{bytecode_suffixes}
+
+%dir %{pylibdir}/ctypes/
+%dir %{pylibdir}/ctypes/__pycache__/
+%{pylibdir}/ctypes/*.py
+%{pylibdir}/ctypes/__pycache__/*%{bytecode_suffixes}
+%{pylibdir}/ctypes/macholib
+
+%{pylibdir}/curses
+
+%dir %{pylibdir}/dbm/
+%dir %{pylibdir}/dbm/__pycache__/
+%{pylibdir}/dbm/*.py
+%{pylibdir}/dbm/__pycache__/*%{bytecode_suffixes}
+
+%dir %{pylibdir}/distutils/
+%dir %{pylibdir}/distutils/__pycache__/
+%{pylibdir}/distutils/*.py
+%{pylibdir}/distutils/__pycache__/*%{bytecode_suffixes}
+%{pylibdir}/distutils/README
+%{pylibdir}/distutils/command
+
+%dir %{pylibdir}/email/
+%dir %{pylibdir}/email/__pycache__/
+%{pylibdir}/email/*.py
+%{pylibdir}/email/__pycache__/*%{bytecode_suffixes}
+%{pylibdir}/email/mime
+%doc %{pylibdir}/email/architecture.rst
+
+%{pylibdir}/encodings
+
+%{pylibdir}/html
+%{pylibdir}/http
+
+%dir %{pylibdir}/importlib/
+%dir %{pylibdir}/importlib/__pycache__/
+%{pylibdir}/importlib/*.py
+%{pylibdir}/importlib/__pycache__/*%{bytecode_suffixes}
+
+%dir %{pylibdir}/json/
+%dir %{pylibdir}/json/__pycache__/
+%{pylibdir}/json/*.py
+%{pylibdir}/json/__pycache__/*%{bytecode_suffixes}
+
+%{pylibdir}/logging
+%{pylibdir}/multiprocessing
+
+%dir %{pylibdir}/sqlite3/
+%dir %{pylibdir}/sqlite3/__pycache__/
+%{pylibdir}/sqlite3/*.py
+%{pylibdir}/sqlite3/__pycache__/*%{bytecode_suffixes}
+
+%if %{without flatpackage}
+%exclude %{pylibdir}/turtle.py
+%exclude %{pylibdir}/__pycache__/turtle*%{bytecode_suffixes}
+%endif
+
+%{pylibdir}/urllib
+%{pylibdir}/xml
+
+%if "%{_lib}" == "lib64"
+%attr(0755,root,root) %dir %{_prefix}/lib/python%{pybasever}
+%attr(0755,root,root) %dir %{_prefix}/lib/python%{pybasever}/site-packages
+%attr(0755,root,root) %dir %{_prefix}/lib/python%{pybasever}/site-packages/__pycache__/
+%endif
+
+# "Makefile" and the config-32/64.h file are needed by
+# distutils/sysconfig.py:_init_posix(), so we include them in the core
+# package, along with their parent directories (bug 531901):
+%dir %{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/
+%{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/Makefile
+%dir %{_includedir}/python%{LDVERSION_optimized}/
+%{_includedir}/python%{LDVERSION_optimized}/%{_pyconfig_h}
+
+%{_libdir}/%{py_INSTSONAME_optimized}
+%if %{without flatpackage}
+%{_libdir}/libpython3.so
+%endif
+
+
+%if %{without flatpackage}
+%files devel
+%{_bindir}/2to3
+%endif
+
+%{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/*
+%if %{without flatpackage}
+%exclude %{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/Makefile
+%exclude %{_includedir}/python%{LDVERSION_optimized}/%{_pyconfig_h}
+%endif
+%{_includedir}/python%{LDVERSION_optimized}/*.h
+%{_includedir}/python%{LDVERSION_optimized}/internal/
+%doc Misc/README.valgrind Misc/valgrind-python.supp Misc/gdbinit
+
+%if %{without flatpackage}
+%{_bindir}/python3-config
+%{_bindir}/python-config
+%{_libdir}/pkgconfig/python3.pc
+%{_libdir}/pkgconfig/python.pc
+%{_bindir}/pathfix.py
+%{_bindir}/pygettext3.py
+%{_bindir}/pygettext.py
+%{_bindir}/msgfmt3.py
+%{_bindir}/msgfmt.py
+%endif
+
+%{_bindir}/pygettext%{pybasever}.py
+%{_bindir}/msgfmt%{pybasever}.py
+
+%{_bindir}/python%{pybasever}-config
+%{_bindir}/python%{LDVERSION_optimized}-config
+%{_bindir}/python%{LDVERSION_optimized}-*-config
+%{_libdir}/libpython%{LDVERSION_optimized}.so
+%{_libdir}/pkgconfig/python-%{LDVERSION_optimized}.pc
+%{_libdir}/pkgconfig/python-%{pybasever}.pc
+
+
+%if %{without flatpackage}
+%files idle
+
+%{_bindir}/idle*
+%else
+%{_bindir}/idle%{pybasever}
+%endif
+
+%{pylibdir}/idlelib
+
+%if %{without flatpackage}
+%{_metainfodir}/idle3.appdata.xml
+%{_datadir}/applications/idle3.desktop
+%{_datadir}/icons/hicolor/*/apps/idle3.*
+%endif
+
+%if %{without flatpackage}
+%files tkinter
+%endif
+
+%{pylibdir}/tkinter
+%if %{without flatpackage}
+%exclude %{pylibdir}/tkinter/test
+%endif
+%{dynload_dir}/_tkinter.%{SOABI_optimized}.so
+%{pylibdir}/turtle.py
+%{pylibdir}/__pycache__/turtle*%{bytecode_suffixes}
+%dir %{pylibdir}/turtledemo
+%{pylibdir}/turtledemo/*.py
+%{pylibdir}/turtledemo/*.cfg
+%dir %{pylibdir}/turtledemo/__pycache__/
+%{pylibdir}/turtledemo/__pycache__/*%{bytecode_suffixes}
+
+
+%if %{without flatpackage}
+%files test
+%endif
+
+%{pylibdir}/ctypes/test
+%{pylibdir}/distutils/tests
+%{pylibdir}/sqlite3/test
+%{pylibdir}/test
+%{dynload_dir}/_ctypes_test.%{SOABI_optimized}.so
+%{dynload_dir}/_testbuffer.%{SOABI_optimized}.so
+%{dynload_dir}/_testcapi.%{SOABI_optimized}.so
+%{dynload_dir}/_testimportmultiple.%{SOABI_optimized}.so
+%{dynload_dir}/_xxtestfuzz.%{SOABI_optimized}.so
+%{pylibdir}/lib2to3/tests
+%{pylibdir}/tkinter/test
+%{pylibdir}/unittest/test
+
+# We don't bother splitting the debug build out into further subpackages:
+# if you need it, you're probably a developer.
+
+# Hence the manifest is the combination of analogous files in the manifests of
+# all of the other subpackages
+
+%if %{with debug_build}
+%if %{without flatpackage}
+%files debug
+%{_bindir}/python3-debug
+%{_bindir}/python-debug
+%endif
+
+# Analog of the core subpackage's files:
+%{_bindir}/python%{LDVERSION_debug}
+
+# Analog of the -libs subpackage's files:
+# ...with debug builds of the built-in "extension" modules:
+
+%{dynload_dir}/_blake2.%{SOABI_debug}.so
+%{dynload_dir}/_md5.%{SOABI_debug}.so
+%{dynload_dir}/_sha1.%{SOABI_debug}.so
+%{dynload_dir}/_sha256.%{SOABI_debug}.so
+%{dynload_dir}/_sha3.%{SOABI_debug}.so
+%{dynload_dir}/_sha512.%{SOABI_debug}.so
+
+%{dynload_dir}/_asyncio.%{SOABI_debug}.so
+%{dynload_dir}/_bisect.%{SOABI_debug}.so
+%{dynload_dir}/_bz2.%{SOABI_debug}.so
+%{dynload_dir}/_codecs_cn.%{SOABI_debug}.so
+%{dynload_dir}/_codecs_hk.%{SOABI_debug}.so
+%{dynload_dir}/_codecs_iso2022.%{SOABI_debug}.so
+%{dynload_dir}/_codecs_jp.%{SOABI_debug}.so
+%{dynload_dir}/_codecs_kr.%{SOABI_debug}.so
+%{dynload_dir}/_codecs_tw.%{SOABI_debug}.so
+%{dynload_dir}/_contextvars.%{SOABI_debug}.so
+%{dynload_dir}/_crypt.%{SOABI_debug}.so
+%{dynload_dir}/_csv.%{SOABI_debug}.so
+%{dynload_dir}/_ctypes.%{SOABI_debug}.so
+%{dynload_dir}/_curses.%{SOABI_debug}.so
+%{dynload_dir}/_curses_panel.%{SOABI_debug}.so
+%{dynload_dir}/_dbm.%{SOABI_debug}.so
+%{dynload_dir}/_decimal.%{SOABI_debug}.so
+%{dynload_dir}/_elementtree.%{SOABI_debug}.so
+%if %{with gdbm}
+%{dynload_dir}/_gdbm.%{SOABI_debug}.so
+%endif
+%{dynload_dir}/_hashlib.%{SOABI_debug}.so
+%{dynload_dir}/_heapq.%{SOABI_debug}.so
+%{dynload_dir}/_json.%{SOABI_debug}.so
+%{dynload_dir}/_lsprof.%{SOABI_debug}.so
+%{dynload_dir}/_lzma.%{SOABI_debug}.so
+%{dynload_dir}/_multibytecodec.%{SOABI_debug}.so
+%{dynload_dir}/_multiprocessing.%{SOABI_debug}.so
+%{dynload_dir}/_opcode.%{SOABI_debug}.so
+%{dynload_dir}/_pickle.%{SOABI_debug}.so
+%{dynload_dir}/_posixsubprocess.%{SOABI_debug}.so
+%{dynload_dir}/_queue.%{SOABI_debug}.so
+%{dynload_dir}/_random.%{SOABI_debug}.so
+%{dynload_dir}/_socket.%{SOABI_debug}.so
+%{dynload_dir}/_sqlite3.%{SOABI_debug}.so
+%{dynload_dir}/_ssl.%{SOABI_debug}.so
+%{dynload_dir}/_struct.%{SOABI_debug}.so
+%{dynload_dir}/array.%{SOABI_debug}.so
+%{dynload_dir}/audioop.%{SOABI_debug}.so
+%{dynload_dir}/binascii.%{SOABI_debug}.so
+%{dynload_dir}/cmath.%{SOABI_debug}.so
+%{dynload_dir}/_datetime.%{SOABI_debug}.so
+%{dynload_dir}/fcntl.%{SOABI_debug}.so
+%{dynload_dir}/grp.%{SOABI_debug}.so
+%{dynload_dir}/math.%{SOABI_debug}.so
+%{dynload_dir}/mmap.%{SOABI_debug}.so
+%{dynload_dir}/nis.%{SOABI_debug}.so
+%{dynload_dir}/ossaudiodev.%{SOABI_debug}.so
+%{dynload_dir}/parser.%{SOABI_debug}.so
+%{dynload_dir}/pyexpat.%{SOABI_debug}.so
+%{dynload_dir}/readline.%{SOABI_debug}.so
+%{dynload_dir}/resource.%{SOABI_debug}.so
+%{dynload_dir}/select.%{SOABI_debug}.so
+%{dynload_dir}/spwd.%{SOABI_debug}.so
+%{dynload_dir}/syslog.%{SOABI_debug}.so
+%{dynload_dir}/termios.%{SOABI_debug}.so
+%{dynload_dir}/_testmultiphase.%{SOABI_debug}.so
+%{dynload_dir}/unicodedata.%{SOABI_debug}.so
+%{dynload_dir}/_uuid.%{SOABI_debug}.so
+%{dynload_dir}/_xxtestfuzz.%{SOABI_debug}.so
+%{dynload_dir}/zlib.%{SOABI_debug}.so
+
+# No need to split things out the "Makefile" and the config-32/64.h file as we
+# do for the regular build above (bug 531901), since they're all in one package
+# now; they're listed below, under "-devel":
+
+%{_libdir}/%{py_INSTSONAME_debug}
+
+# Analog of the -devel subpackage's files:
+%{pylibdir}/config-%{LDVERSION_debug}-%{_arch}-linux%{_gnu}
+%{_includedir}/python%{LDVERSION_debug}
+%{_bindir}/python%{LDVERSION_debug}-config
+%{_bindir}/python%{LDVERSION_debug}-*-config
+%{_libdir}/libpython%{LDVERSION_debug}.so
+%{_libdir}/libpython%{LDVERSION_debug}.so.1.0
+%{_libdir}/pkgconfig/python-%{LDVERSION_debug}.pc
+
+# Analog of the -tools subpackage's files:
+# None for now; we could build precanned versions that have the appropriate
+# shebang if needed
+
+# Analog of the tkinter subpackage's files:
+%{dynload_dir}/_tkinter.%{SOABI_debug}.so
+
+# Analog of the -test subpackage's files:
+%{dynload_dir}/_ctypes_test.%{SOABI_debug}.so
+%{dynload_dir}/_testbuffer.%{SOABI_debug}.so
+%{dynload_dir}/_testcapi.%{SOABI_debug}.so
+%{dynload_dir}/_testimportmultiple.%{SOABI_debug}.so
+
+%endif # with debug_build
+
+# We put the debug-gdb.py file inside /usr/lib/debug to avoid noise from ldconfig
+# See
https://bugzilla.redhat.com/show_bug.cgi?id=562980
+#
+# The /usr/lib/rpm/redhat/macros defines %%__debug_package to use
+# debugfiles.list, and it appears that everything below /usr/lib/debug and
+# (/usr/src/debug) gets added to this file (via LISTFILES) in
+# /usr/lib/rpm/find-debuginfo.sh
+#
+# Hence by installing it below /usr/lib/debug we ensure it is added to the
+# -debuginfo subpackage
+# (if it doesn't, then the rpmbuild ought to fail since the debug-gdb.py
+# payload file would be unpackaged)
+
+# Workaround for
https://bugzilla.redhat.com/show_bug.cgi?id=1476593
+%undefine _debuginfo_subpackages
+
+# ======================================================
+# Finally, the changelog:
+# ======================================================
+
+%changelog
+* Sun Aug 11 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.4-5
+- Conditionalize python3-devel runtime dependencies on RPM packages and setuptools
+
+* Fri Jul 26 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.7.4-4
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
+* Mon Jul 15 2019 Lumr Balhar <lbalhar(a)redhat.com> - 3.7.4-3
+- Move test.support module to python3-test subpackage
+
https://fedoraproject.org/wiki/Changes/Move_test.support_module_to_python...
+- Restore pyc to TIMESTAMP invalidation mode as default in rpmbubild
+
+* Fri Jul 12 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.4-2
+-
https://fedoraproject.org/wiki/Changes/Python_means_Python3
+- The python-unversioned-command package is no longer Python 2, but 3
+- The python, pydoc, python-config, python-debug, idle, pygettext.py and
+ msgfmt.py commands are now in python3
+
+* Tue Jul 09 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.4-1
+- Update to 3.7.4
+
+* Tue Jul 02 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.4~rc2-1
+- Update to 3.7.4rc2
+
+* Tue Jun 25 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.4~rc1-1
+- Update to 3.7.4rc1
+
+* Tue May 07 2019 Charalampos Stratakis <cstratak(a)redhat.com> - 3.7.3-3
+- Fix handling of pre-normalization characters in urlsplit
+- Disallow control chars in http URLs (#1695572, #1700684, #1688169, #1706851)
+
+* Wed Apr 17 2019 Patrik Kopkan <pkopkan(a)redhat.com> - 3.7.3-2
+- Makes man python3.7m show python3.7 man pages (#1612241)
+
+* Wed Mar 27 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.3-1
+- Update to 3.7.3
+
+* Thu Mar 21 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.3~rc1-1
+- Update to 3.7.3rc1
+
+* Thu Mar 14 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.2-8
+- Security fix for CVE-2019-9636 (#1688543, #1688546)
+
+* Sun Feb 17 2019 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 3.7.2-7
+- Rebuild for readline 8.0
+
+* Tue Feb 12 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.2-6
+- Reduced default build flags used to build extension modules
+
https://fedoraproject.org/wiki/Changes/Python_Extension_Flags
+
+* Sat Feb 02 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.7.2-5
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
+* Wed Jan 16 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.2-4
+- Security fix for CVE-2019-5010 (#1666519, #1666522)
+
+* Mon Jan 14 2019 Bjrn Esser <besser82(a)fedoraproject.org> - 3.7.2-3
+- Rebuilt for libcrypt.so.2 (#1666033)
+
+* Fri Jan 04 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.2-2
+- No longer revert upstream commit 3b699932e5ac3e7
+- This was a dirty workaround for (#1644936)
+
+* Tue Dec 25 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.2-1
+- Update to 3.7.2
+
+* Fri Dec 07 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.1-5
+- Make sure we don't ship any exe files (not needed an prebuilt)
+
+* Wed Nov 21 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.1-4
+- Make sure the entire test.support module is in python3-libs (#1651245)
+
+* Tue Nov 06 2018 Victor Stinner <vstinner(a)redhat.com> - 3.7.1-3
+- Verify the value of '-s' when execute the CLI of cProfile (rhbz#1160640)
+
+* Sun Nov 04 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.1-2
+- Temporarily revert upstream commit 3b699932e5ac3e7
+- This is dirty workaround for (#1644936)
+
+* Mon Oct 22 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.1-1
+- Update to 3.7.1
+
+* Thu Sep 27 2018 Petr Viktorin <pviktori(a)redhat.com> - 3.7.0-10
+- Compile the debug build with -Og rather than -O0
+
+* Thu Aug 30 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-9
+- Require python3-setuptools from python3-devel to prevent packaging errors (#1623914)
+
+* Fri Aug 17 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-8
+- Add /usr/bin/pygettext3.py and msgfmt3.py to python3-devel
+Resolves: rhbz#1571474
+
+* Fri Aug 17 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-7
+- Backport TLS 1.3 related fixes to fix FTBFS
+Resolves: rhbz#1609291
+
+* Wed Aug 15 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-6
+- Use RPM built wheels of pip and setuptools in ensurepip instead of our rewheel patch
+
+* Fri Aug 10 2018 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 3.7.0-5
+- Fix wrong requirement on gdbm
+
+* Fri Jul 20 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-4
+- Allow to call Py_Main() after Py_Initialize()
+Resolves: rhbz#1595421
+
+* Sat Jul 14 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.7.0-3
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
+* Thu Jul 12 2018 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 3.7.0-2
+- Rebuild for new gdbm
+
+* Wed Jun 27 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-1
+- Update to 3.7.0 final
+
+* Wed Jun 13 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-0.21.rc1
+- Finish bootstrapping, enable rewheel, tests, optimizations
+
+* Tue Jun 12 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-0.20.rc1
+- Update to 3.7.0rc1
+- Bootstrap, disable rewheel, tests, optimizations
+
+* Mon Apr 23 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.5-4
+- Fix multiprocessing regression on newer glibcs
+- Enable test_multiprocessing_fork(server) and _spawn again
+Resolves: rhbz#1569933
+
+* Thu Apr 19 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.5-3
+- Skip test_multiprocessing_fork(server) and _spawn for now
+
+* Wed Apr 18 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.5-2
+- Add flatpackage conditionals
+
+* Thu Mar 29 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.5-1
+- Update to 3.6.5
+
+* Sat Mar 24 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-20
+- Fix broken macro invocation and broken building of C Python extensions
+Resolves: rhbz#1560103
+
+* Fri Mar 16 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-19
+- Add -n option for pathfix.py
+Resolves: rhbz#1546990
+
+* Thu Mar 15 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-18
+- Fix the py_byte_compile macro to work on Python 2
+- Remove the pybytecompile macro file from the flat package
+Resolves: rhbz#1484993
+
+* Tue Mar 13 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-17
+- Do not send IP addresses in SNI TLS extension
+
+* Sat Feb 24 2018 Florian Weimer <fweimer(a)redhat.com> - 3.6.4-16
+- Rebuild with new LDFLAGS from redhat-rpm-config
+
+* Wed Feb 21 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-15
+- Filter out automatic /usr/bin/python3.X requirement,
+ recommend the main package from libs instead
+Resolves: rhbz#1547131
+
+* Thu Feb 15 2018 Iryna Shcherbina <ishcherb(a)redhat.com> - 3.6.4-14
+- Remove the python3-tools package (#rhbz 1312030)
+- Move /usr/bin/2to3 to python3-devel
+- Move /usr/bin/idle and idlelib to python3-idle
+- Provide python3-tools from python3-idle
+
+* Fri Feb 09 2018 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 3.6.4-13
+- Escape macros in %%changelog
+
+* Fri Feb 02 2018 Michal Cyprian <mcyprian(a)redhat.com> - 3.6.4-12
+- Remove sys.executable check from change-user-install-location patch
+Resolves: rhbz#1532287
+
+* Thu Feb 01 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-11
+- Define TLS cipher suite on build time.
+
+* Wed Jan 31 2018 Tomas Orsava <torsava(a)redhat.com> - 3.6.4-10
+- Disable test_gdb for all arches and test_buffer for ppc64le in anticipation
+ of the F28 mass rebuild
+- Re-enable these tests after the mass rebuild when they can be properly
+ addressed
+
+* Tue Jan 23 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-9
+- Restore the PyExc_RecursionErrorInst public symbol
+
+* Tue Jan 23 2018 Bjrn Esser <besser82(a)fedoraproject.org> - 3.6.4-8
+- Add patch to explicitly link _ctypes module with -ldl (#1537489)
+- Refactored patch for libxcrypt
+- Re-enable strict symbol checks in the link editor
+
+* Mon Jan 22 2018 Bjrn Esser <besser82(a)fedoraproject.org> - 3.6.4-7
+- Add patch for libxcrypt
+- Disable strict symbol checks in the link editor
+
+* Sat Jan 20 2018 Bjrn Esser <besser82(a)fedoraproject.org> - 3.6.4-6
+- Rebuilt for switch to libxcrypt
+
+* Fri Jan 19 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-5
+- Fix localeconv() encoding for LC_NUMERIC
+
+* Thu Jan 18 2018 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 3.6.4-4
+- R: gdbm-devel R: gdbm for python3-libs
+
+* Wed Jan 17 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-3
+- Require large enough gdbm (fixup for previous bump)
+
+* Tue Jan 16 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-2
+- Rebuild for reverted gdbm 1.13 on Fedora 27
+
+* Mon Jan 15 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-1
+- Update to version 3.6.4
+
+* Fri Jan 12 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.3-5
+- Fix the compilation of the nis module.
+
+* Tue Nov 21 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.3-4
+- Raise the release of platform-python obsoletes for better maintainability
+
+* Wed Nov 15 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.3-3
+- Obsolete platform-python and it's subpackages
+
+* Mon Oct 09 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.3-2
+- Fix memory corruption due to allocator mix
+Resolves: rhbz#1498207
+
+* Fri Oct 06 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.3-1
+- Update to Python 3.6.3
+
+* Fri Sep 29 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.2-19
+- Move pathfix.py to bindir,
https://github.com/fedora-python/python-rpm-porting/issues/24
+- Make the -devel package require redhat-rpm-config
+Resolves: rhbz#1496757
+
+* Wed Sep 13 2017 Iryna Shcherbina <ishcherb(a)redhat.com> - 3.6.2-18
+- Fix /usr/bin/env dependency from python3-tools
+Resolves: rhbz#1482118
+
+* Wed Sep 06 2017 Iryna Shcherbina <ishcherb(a)redhat.com> - 3.6.2-17
+- Include `-g` in the flags sent to the linker (LDFLAGS)
+Resolves: rhbz#1483222
+
+* Tue Sep 05 2017 Petr Viktorin <pviktori(a)redhat.com> - 3.6.2-16
+- Specfile cleanup
+- Make the main description also applicable to the SRPM
+- Add audiotest.au to the test package
+
+* Fri Sep 01 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.2-15
+- Remove %%{pylibdir}/Tools/scripts/2to3
+
+* Fri Sep 01 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.2-14
+- Expat >= 2.1.0 is everywhere, remove explicit requires
+- Conditionalize systemtap-devel BuildRequires
+- For consistency, require /usr/sbin/ifconfig instead of net-tools
+
+* Mon Aug 28 2017 Petr Viktorin <pviktori(a)redhat.com> - 3.6.2-13
+- Rename patch files to be consistent
+- Run autotools to generate the configure script before building
+- Merge lib64 patches (104 into 102)
+- Skip test_bdist_rpm using test config rather than a patch (removes patch 137)
+- Remove patches 157 and 186, which had test changes left over after upstreaming
+- Remove patch 188, a temporary workaround for hashlib tests
+- Merge patches 180, 206, 243, 5001 (architecture naming) into new patch 274
+- Move python2-tools conflicts to tools subpackage (it was wrongly in tkinter)
+
+* Mon Aug 28 2017 Michal Cyprian <mcyprian(a)redhat.com> - 3.6.2-12
+- Use python3 style of calling super() without arguments in rpath
+ patch to prevent recursion in UnixCCompiler subclasses
+Resolves: rhbz#1458122
+
+* Mon Aug 21 2017 Petr Viktorin <pviktori(a)redhat.com> - 3.6.2-11
+- Add bcond for --without optimizations
+- Reword package descriptions
+- Remove Group declarations
+- Skip failing test_float_with_comma
+
+* Mon Aug 21 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.2-10
+- Remove system-python, see
https://fedoraproject.org/wiki/Changes/Platform_Python_Stack
+
+* Wed Aug 16 2017 Petr Viktorin <pviktori(a)redhat.com> - 3.6.2-9
+- Use bconds for configuring the build
+- Reorganize the initial sections
+
+* Wed Aug 16 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.2-8
+- Have /usr/bin/2to3 (rhbz#1111275)
+- Provide 2to3 and idle3, list them in summary and description (rhbz#1076401)
+
+* Fri Aug 11 2017 Michal Cyprian <mcyprian(a)redhat.com> - 3.6.2-7
+- Revert "Add --executable option to install.py command"
+ This enhancement is currently not needed and it can possibly
+ collide with `pip --editable`option
+
+* Mon Aug 07 2017 Iryna Shcherbina <ishcherb(a)redhat.com> - 3.6.2-6
+- Fix the "urllib FTP protocol stream injection" vulnerability
+Resolves: rhbz#1478916
+
+* Tue Aug 01 2017 Tomas Orsava <torsava(a)redhat.com> - 3.6.2-5
+- Dropped BuildRequires on db4-devel which was useful for Python 2 (module
+ bsddb), however, no longer needod for Python 3
+- Tested building Python 3 with and without the dependency, all tests pass and
+ filelists of resulting RPMs are identical
+
+* Sun Jul 30 2017 Florian Weimer <fweimer(a)redhat.com> - 3.6.2-4
+- Do not generate debuginfo subpackages (#1476593)
+- Rebuild with binutils fix for ppc64le (#1475636)
+
+* Thu Jul 27 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.6.2-3
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Tue Jul 25 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.2-2
+- Make test_asyncio to not depend on the current SIGHUP signal handler.
+
+* Tue Jul 18 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.2-1
+- Update to Python 3.6.2
+
+* Tue Jun 27 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.1-10
+- Update to the latest upstream implementation of PEP 538
+
+* Mon Jun 26 2017 Michal Cyprian <mcyprian(a)redhat.com> - 3.6.1-9
+- Make pip and distutils in user environment install into separate location
+
+* Fri Jun 23 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.1-8
+- Fix test_alpn_protocols from test_ssl
+- Do not require rebundled setuptools dependencies
+
+* Tue May 16 2017 Tomas Orsava <torsava(a)redhat.com> - 3.6.1-7
+- Added a dependency to the devel subpackage on python3-rpm-generators which
+ have been excised out of rpm-build
+- Updated notes on bootstrapping Python on top of this specfile accordingly
+- Involves: rhbz#1410631, rhbz#1444925
+
+* Tue May 09 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.1-6
+- Enable profile guided optimizations for x86_64 and i686 architectures
+- Update to a newer implementation of PEP 538
+- Update description to reflect that Python 3 is now the default Python
+
+* Fri May 05 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.1-5
+- Update PEP 538 to the latest upstream implementation
+
+* Tue Apr 18 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.1-4
+- Enable link time optimizations
+- Move windows executables to the devel subpackage (rhbz#1426257)
+
+* Thu Apr 13 2017 Tomas Orsava <torsava(a)redhat.com> - 3.6.1-3
+- Rename python3.Xdm-config script from -debug to be arch specific
+Resolves: rhbz#1179073
+
+* Wed Apr 05 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.1-2
+- Install the Makefile in its proper location (rhbz#1438219)
+
+* Wed Mar 22 2017 Iryna Shcherbina <ishcherb(a)redhat.com> - 3.6.1-1
+- Update to version 3.6.1 final
+
+* Tue Mar 21 2017 Tomas Orsava <torsava(a)redhat.com> - 3.6.1-0.2.rc1
+- Fix syntax error in %%py_byte_compile macro (rhbz#1433569)
+
+* Thu Mar 16 2017 Iryna Shcherbina <ishcherb(a)redaht.com> - 3.6.1-0.1.rc1
+- Update to Python 3.6.1 release candidate 1
+- Add patch 264 to skip a known test failure on aarch64
+
+* Fri Mar 10 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-21
+- Use proper command line parsing in _testembed
+- Backport of PEP 538: Coercing the legacy C locale to a UTF-8 based locale
+
https://fedoraproject.org/wiki/Changes/python3_c.utf-8_locale
+
+* Mon Feb 27 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-20
+- Add desktop entry and appdata.xml file for IDLE 3 (rhbz#1392049)
+
+* Fri Feb 24 2017 Michal Cyprian <mcyprian(a)redhat.com> - 3.6.0-19
+- Revert "Set values of prefix and exec_prefix to /usr/local for
+ /usr/bin/python* executables..." to prevent build failures
+ of packages using alternate build tools
+
+* Tue Feb 21 2017 Michal Cyprian <mcyprian(a)redhat.com> - 3.6.0-18
+- Set values of prefix and exec_prefix to /usr/local for
+ /usr/bin/python* executables
+- Use new %%_module_build macro
+
+* Fri Feb 17 2017 Michal Cyprian <mcyprian(a)redhat.com> - 3.6.0-13
+- Add --executable option to install.py command
+
+* Wed Feb 15 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-12
+- BuildRequire the new dependencies of setuptools when rewheel mode is enabled
+in order for the virtualenvs to work properly
+
+* Sat Feb 11 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.6.0-11
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
+* Wed Feb 01 2017 Stephen Gallagher <sgallagh(a)redhat.com> - 3.6.0-10
+- Add missing %%license macro
+
+* Thu Jan 26 2017 Tomas Orsava <torsava(a)redhat.com> - 3.6.0-9
+- Modify the runtime dependency of python3-libs on system-python-libs again,
+ because previous attempt didn't work properly with dnf resolving mechanism
+
+* Wed Jan 25 2017 Tomas Orsava <torsava(a)redhat.com> - 3.6.0-8
+- Modify the runtime dependency of python3-libs on system-python-libs to use
+ just the version and release number, but not the dist tag due to Modularity
+
+* Mon Jan 16 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-7
+- Fix error check, so that Random.seed actually uses OS randomness (rhbz#1412275)
+- Skip test_aead_aes_gcm during rpmbuild
+
+* Thu Jan 12 2017 Igor Gnatenko <ignatenko(a)redhat.com> - 3.6.0-6
+- Rebuild for readline 7.x
+
+* Tue Jan 10 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-5
+- Require glibc >= 2.24.90-26 for system-python-libs (rhbz#1410644)
+
+* Mon Jan 09 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-4
+- Define HAVE_LONG_LONG as 1 for backwards compatibility
+
+* Thu Jan 05 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.0-3
+- Don't blow up on EL7 kernel (random generator) (rhbz#1410175)
+
+* Tue Dec 27 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-1
+- Update to Python 3.6.0 final
+
+* Fri Dec 09 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-0.6.rc1
+- Enable rewheel
+
+* Wed Dec 07 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-0.5.rc1
+- Update to Python 3.6.0 release candidate 1
+
+* Mon Dec 05 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-0.4.b4
+- Update to Python 3.6.0 beta 4
+
+* Mon Dec 05 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.2-7
+- Set to work with pip version 9.0.1
+
+* Wed Oct 12 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.2-6
+- Use proper patch numbering and base upstream branch for
+porting ssl and hashlib modules to OpenSSL 1.1.0
+- Drop hashlib patch for now
+- Add riscv64 arch to 64bit and no-valgrind arches
+
+* Tue Oct 11 2016 Tom Mrz <tmraz(a)redhat.com> - 3.5.2-5
+- Make it build with OpenSSL-1.1.0 based on upstream patch
+
+* Wed Sep 14 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.2-4
+- Obsolete and Provide python35 package
+
+* Mon Sep 12 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.2-3
+- Update %%py_byte_compile macro
+- Remove unused configure flags (rhbz#1374357)
+
+* Fri Sep 09 2016 Tomas Orsava <torsava(a)redhat.com> - 3.5.2-2
+- Updated .pyc 'bytecompilation with the newly installed interpreter' to also
+ recompile optimized .pyc files
+- Removed .pyo 'bytecompilation with the newly installed interpreter', as .pyo
+ files are no more
+- Resolves rhbz#1373635
+
+* Mon Aug 15 2016 Tomas Orsava <torsava(a)redhat.com> - 3.5.2-1
+- Rebased to version 3.5.2
+- Set to work with pip version 8.1.2
+- Removed patches 207, 237, 241 as fixes are already contained in Python 3.5.2
+- Removed arch or environment specific patches 194, 196, 203, and 208
+ as test builds indicate they are no longer needed
+- Updated patches 102, 146, and 242 to work with the new Python codebase
+- Removed patches 200, 201, 5000 which weren't even being applied
+
+* Tue Aug 09 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.1-15
+- Fix for CVE-2016-1000110 HTTPoxy attack
+- SPEC file cleanup
+
+* Mon Aug 01 2016 Michal Toman <mtoman(a)fedoraproject.org> - 3.5.1-14
+- Build properly on MIPS
+
+* Tue Jul 19 2016 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> -
3.5.1-13
+-
https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_...
+
+* Fri Jul 08 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.1-12
+- Refactor patch for properly fixing CVE-2016-5636
+
+* Fri Jul 08 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.1-11
+- Fix test_pyexpat failure with Expat version of 2.2.0
+
+* Fri Jul 08 2016 Miro Hronok <mhroncok(a)redhat.com> - 3.5.1-10
+- Move xml module to system-python-libs
+
+* Thu Jun 16 2016 Tomas Orsava <torsava(a)redhat.com> - 3.5.1-9
+- Fix for: CVE-2016-0772 python: smtplib StartTLS stripping attack
+- Raise an error when STARTTLS fails
+- rhbz#1303647:
https://bugzilla.redhat.com/show_bug.cgi?id=1303647
+- rhbz#1346345:
https://bugzilla.redhat.com/show_bug.cgi?id=1346345
+- Fixed upstream:
https://hg.python.org/cpython/rev/d590114c2394
+
+* Mon Jun 13 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.1-8
+- Added patch for fixing possible integer overflow and heap corruption in
zipimporter.get_data()
+
+* Fri Mar 04 2016 Miro Hronok <mhroncok(a)redhat.com> - 3.5.1-7
+- Move distutils to system-python-libs
+
+* Wed Feb 24 2016 Robert Kuska <rkuska(a)redhat.com> - 3.5.1-6
+- Provide python3-enum34
+
+* Fri Feb 19 2016 Miro Hronok <mhroncok(a)redhat.com> - 3.5.1-5
+- Provide System Python packages and macros
+
+* Thu Feb 04 2016 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.5.1-4
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Wed Jan 13 2016 Orion Poplwski <orion(a)cora.nwra.com> - 3.5.1-2
+- Drop python3 macros, require python/python3-rpm-macros
+
+* Mon Dec 14 2015 Robert Kuska <rkuska(a)redhat.com> - 3.5.1-1
+- Update to 3.5.1
+- Removed patch 199 and 207 (upstream)
+
+* Sun Nov 15 2015 Robert Kuska <rkuska(a)redhat.com> - 3.5.0-5
+- Remove versioned libpython from devel package
+
+* Fri Nov 13 2015 Than Ngo <than(a)redhat.com> 3.5.0-4
+- add correct arch for ppc64/ppc64le to fix build failure
+
+* Wed Nov 11 2015 Robert Kuska <rkuska(a)redhat.com> - 3.5.0-3
+- Hide the private _Py_atomic_xxx symbols from public header
+
+* Wed Oct 14 2015 Robert Kuska <rkuska(a)redhat.com> - 3.5.0-2
+- Rebuild with wheel set to 1
+
+* Tue Sep 15 2015 Matej Stuchlik <mstuchli(a)redhat.com> - 3.5.0-1
+- Update to 3.5.0
+
+* Mon Jun 29 2015 Thomas Spura <tomspur(a)fedoraproject.org> - 3.4.3-4
+- python3-devel: Require python-macros for version independant macros such as
+ python_provide. See fpc#281 and fpc#534.
+
+* Thu Jun 18 2015 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> -
3.4.3-3
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
+
+* Wed Jun 17 2015 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.3-4
+- Use 1024bit DH key in test_ssl
+- Use -O0 when compiling -debug build
+- Update pip version variable to the version we actually ship
+
+* Wed Jun 17 2015 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.3-3
+- Make relocating Python by changing _prefix actually work
+Resolves: rhbz#1231801
+
+* Mon May 4 2015 Peter Robinson <pbrobinson(a)fedoraproject.org> 3.4.3-2
+- Disable test_gdb on aarch64 (rhbz#1196181), it joins all other non x86 arches
+
+* Thu Mar 12 2015 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.3-1
+- Updated to 3.4.3
+- BuildPython now accepts additional build options
+- Temporarily disabled test_gdb on arm (rhbz#1196181)
+
+* Wed Feb 25 2015 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.2-7
+- Fixed undefined behaviour in faulthandler which caused test to hang on x86_64
+ (
http://bugs.python.org/issue23433)
+
+* Sat Feb 21 2015 Till Maas <opensource(a)till.name> - 3.4.2-6
+- Rebuilt for Fedora 23 Change
+
https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-...
+
+* Tue Feb 17 2015 Ville Skytt <ville.skytta(a)iki.fi> - 3.4.2-5
+- Own systemtap dirs (#710733)
+
+* Mon Jan 12 2015 Dan Hork <dan[at]danny.cz> - 3.4.2-4
+- build with valgrind on ppc64le
+- disable test_gdb on s390(x) until rhbz#1181034 is resolved
+
+* Tue Dec 16 2014 Robert Kuska <rkuska(a)redhat.com> - 3.4.2-3
+- New patches: 170 (gc asserts), 200 (gettext headers),
+ 201 (gdbm memory leak)
+
+* Thu Dec 11 2014 Robert Kuska <rkuska(a)redhat.com> - 3.4.2-2
+- OpenSSL disabled SSLv3 in SSLv23 method
+
+* Thu Nov 13 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.2-1
+- Update to 3.4.2
+- Refreshed patches: 156 (gdb autoload)
+- Removed: 195 (Werror declaration), 197 (CVE-2014-4650)
+
+* Mon Nov 03 2014 Slavek Kabrda <bkabrda(a)redhat.com> - 3.4.1-16
+- Fix CVE-2014-4650 - CGIHTTPServer URL handling
+Resolves: rhbz#1113529
+
+* Sun Sep 07 2014 Karsten Hopp <karsten(a)redhat.com> 3.4.1-15
+- exclude test_gdb on ppc* (rhbz#1132488)
+
+* Thu Aug 21 2014 Slavek Kabrda <bkabrda(a)redhat.com> - 3.4.1-14
+- Update rewheel patch with fix from
https://github.com/bkabrda/rewheel/pull/1
+
+* Sun Aug 17 2014 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> -
3.4.1-13
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
+
+* Sun Jun 8 2014 Peter Robinson <pbrobinson(a)fedoraproject.org> 3.4.1-12
+- aarch64 has valgrind, just list those that don't support it
+
+* Sun Jun 08 2014 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> -
3.4.1-11
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
+* Wed Jun 04 2014 Karsten Hopp <karsten(a)redhat.com> 3.4.1-10
+- bump release and rebuild to link with the correct tcl/tk libs on ppcle
+
+* Tue Jun 03 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.1-9
+- Change paths to bundled projects in rewheel patch
+
+* Fri May 30 2014 Miro Hronok <mhroncok(a)redhat.com> - 3.4.1-8
+- In config script, use uname -m to write the arch
+
+* Thu May 29 2014 Dan Hork <dan[at]danny.cz> - 3.4.1-7
+- update the arch list where valgrind exists - %%power64 includes also
+ ppc64le which is not supported yet
+
+* Thu May 29 2014 Miro Hronok <mhroncok(a)redhat.com> - 3.4.1-6
+- Forward arguments to the arch specific config script
+Resolves: rhbz#1102683
+
+* Wed May 28 2014 Miro Hronok <mhroncok(a)redhat.com> - 3.4.1-5
+- Rename python3.Xm-config script to arch specific.
+Resolves: rhbz#1091815
+
+* Tue May 27 2014 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.4.1-4
+- Use python3-*, not python-* runtime requires on setuptools and pip
+- rebuild for tcl-8.6
+
+* Tue May 27 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.1-3
+- Update the rewheel module
+
+* Mon May 26 2014 Miro Hronok <mhroncok(a)redhat.com> - 3.4.1-2
+- Fix multilib dependencies.
+Resolves: rhbz#1091815
+
+* Sun May 25 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.1-1
+- Update to Python 3.4.1
+
+* Sun May 25 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.0-8
+- Fix test_gdb failure on ppc64le
+Resolves: rhbz#1095355
+
+* Thu May 22 2014 Miro Hronok <mhroncok(a)redhat.com> - 3.4.0-7
+- Add macro %%python3_version_nodots
+
+* Sun May 18 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.0-6
+- Disable test_faulthandler, test_gdb on aarch64
+Resolves: rhbz#1045193
+
+* Fri May 16 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.0-5
+- Don't add Werror=declaration-after-statement for extension
+ modules through setup.py (PyBT#21121)
+
+* Mon May 12 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.0-4
+- Add setuptools and pip to Requires
+
+* Tue Apr 29 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.0-3
+- Point __os_install_post to correct brp-* files
+
+* Tue Apr 15 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.0-2
+- Temporarily disable tests requiring SIGHUP (rhbz#1088233)
+
+* Tue Apr 15 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.0-1
+- Update to Python 3.4 final
+- Add patch adding the rewheel module
+- Merge patches from master
+
+* Wed Jan 08 2014 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.4.0-0.1.b2
+- Update to Python 3.4 beta 2.
+- Refreshed patches: 55 (systemtap), 146 (hashlib-fips), 154 (test_gdb noise)
+- Dropped patches: 114 (statvfs constants), 177 (platform unicode)
+
+* Mon Nov 25 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.4.0-0.1.b1
+- Update to Python 3.4 beta 1.
+- Refreshed patches: 102 (lib64), 111 (no static lib), 125 (less verbose COUNT
+ALLOCS), 141 (fix COUNT_ALLOCS in test_module), 146 (hashlib fips),
+157 (UID+GID overflows), 173 (ENOPROTOOPT in bind_port)
+- Removed patch 00187 (remove pthread atfork; upstreamed)
+
+* Mon Nov 04 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.4.0-0.1.a4
+- Update to Python 3.4 alpha 4.
+- Refreshed patches: 55 (systemtap), 102 (lib64), 111 (no static lib),
+114 (statvfs flags), 132 (unittest rpmbuild hooks), 134 (fix COUNT_ALLOCS in
+test_sys), 143 (tsc on ppc64), 146 (hashlib fips), 153 (test gdb noise),
+157 (UID+GID overflows), 173 (ENOPROTOOPT in bind_port), 186 (dont raise
+from py_compile)
+- Removed patches: 129 (test_subprocess nonreadable dir - no longer fails in
+Koji), 142 (the mock issue that caused this is fixed)
+- Added patch 187 (remove thread atfork) - will be in next version
+- Refreshed script for checking pyc and pyo timestamps with new ignored files.
+- The fips patch is disabled for now until upstream makes a final decision
+what to do with sha3 implementation for 3.4.0.
+
+* Wed Oct 30 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.3.2-7
+- Bytecompile all *.py files properly during build (rhbz#1023607)
+
+* Fri Aug 23 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 3.3.2-6
+- Added fix for CVE-2013-4238 (rhbz#996399)
+
+* Fri Jul 26 2013 Dennis Gilmore <dennis(a)ausil.us> - 3.3.2-5
+- fix up indentation in arm patch
+
+* Fri Jul 26 2013 Dennis Gilmore <dennis(a)ausil.us> - 3.3.2-4
+- disable a test that fails on arm
+- enable valgrind support on arm arches
+
+* Tue Jul 02 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.3.2-3
+- Fix build with libffi containing multilib wrapper for ffi.h (rhbz#979696).
+
+* Mon May 20 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.3.2-2
+- Add patch for CVE-2013-2099 (rhbz#963261).
+
+* Thu May 16 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.3.2-1
+- Updated to Python 3.3.2.
+- Refreshed patches: 153 (gdb test noise)
+- Dropped patches: 175 (configure -Wformat, fixed upstream), 182 (gdb
+test threads)
+- Synced patch numbers with python.spec.
+
+* Thu May 9 2013 David Malcolm <dmalcolm(a)redhat.com> - 3.3.1-4
+- fix test.test_gdb.PyBtTests.test_threads on ppc64 (patch 181; rhbz#960010)
+
+* Thu May 02 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.3.1-3
+- Add patch that enables building on ppc64p7 (replace the sed, so that
+we get consistent with python2 spec and it's more obvious that we're doing it.
+
+* Wed Apr 24 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.3.1-2
+- Add fix for gdb tests failing on arm, rhbz#951802.
+
+* Tue Apr 09 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.3.1-1
+- Updated to Python 3.3.1.
+- Refreshed patches: 55 (systemtap), 111 (no static lib), 146 (hashlib fips),
+153 (fix test_gdb noise), 157 (uid, gid overflow - fixed upstream, just
+keeping few more downstream tests)
+- Removed patches: 3 (audiotest.au made it to upstream tarball)
+- Removed workaround for
http://bugs.python.org/issue14774, discussed in
+http://bugs.python.org/issue15298 and fixed in revision 24d52d3060e8.
+
+* Mon Mar 25 2013 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-10
+- fix gcc 4.8 incompatibility (rhbz#927358); regenerate autotool intermediates
+
+* Mon Mar 25 2013 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-9
+- renumber patches to keep them in sync with python.spec
+
+* Fri Mar 15 2013 Toshio Kuratomi <toshio(a)fedoraproject.org> - 3.3.0-8
+- Fix error in platform.platform() when non-ascii byte strings are decoded to
+ unicode (rhbz#922149)
+
+* Thu Mar 14 2013 Toshio Kuratomi <toshio(a)fedoraproject.org> - 3.3.0-7
+- Fix up shared library extension (rhbz#889784)
+
+* Thu Mar 07 2013 Karsten Hopp <karsten(a)redhat.com> 3.3.0-6
+- add ppc64p7 build target, optimized for Power7
+
+* Mon Mar 4 2013 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-5
+- add workaround for ENOPROTOOPT seen running selftests in Koji
+(rhbz#913732)
+
+* Mon Mar 4 2013 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-4
+- remove config flag from /etc/rpm/macros.{python3|pybytecompile}
+
+* Mon Feb 11 2013 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-3
+- add aarch64 (rhbz#909783)
+
+* Thu Nov 29 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-2
+- add BR on bluez-libs-devel (rhbz#879720)
+
+* Sat Sep 29 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-1
+- 3.3.0rc3 -> 3.3.0; drop alphatag
+
+* Mon Sep 24 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-0.6.rc3
+- 3.3.0rc2 -> 3.3.0rc3
+
+* Mon Sep 10 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-0.5.rc2
+- 3.3.0rc1 -> 3.3.0rc2; refresh patch 55
+
+* Mon Aug 27 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-0.4.rc1
+- 3.3.0b2 -> 3.3.0rc1; refresh patches 3, 55
+
+* Mon Aug 13 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-0.3.b2
+- 3.3b1 -> 3.3b2; drop upstreamed patch 152; refresh patches 3, 102, 111,
+134, 153, 160; regenenerate autotools patch; rework systemtap patch to work
+correctly when LANG=C (patch 55); importlib.test was moved to
+test.test_importlib upstream
+
+* Mon Aug 13 2012 Karsten Hopp <karsten(a)redhat.com> 3.3.0-0.2.b1
+- disable some failing checks on PPC* (rhbz#846849)
+
+* Fri Aug 3 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-0.1.b1
+- 3.2 -> 3.3:
https://fedoraproject.org/wiki/Features/Python_3.3
+- 3.3.0b1: refresh patches 3, 55, 102, 111, 113, 114, 134, 157; drop upstream
+patch 147; regenenerate autotools patch; drop "--with-wide-unicode" from
+configure (PEP 393); "plat-linux2" -> "plat-linux" (upstream issue
12326);
+"bz2" -> "_bz2" and "crypt" -> "_crypt";
egg-info files are no longer shipped
+for stdlib (upstream issues 10645 and 12218); email/test moved to
+test/test_email; add /usr/bin/pyvenv[-3.3] and venv module (PEP 405); add
+_decimal and _lzma modules; make collections modules explicit in payload again
+(upstream issue 11085); add _testbuffer module to tests subpackage (added in
+upstream commit 3f9b3b6f7ff0); fix test failures (patches 160 and 161);
+workaround erroneously shared _sysconfigdata.py upstream issue #14774; fix
+distutils.sysconfig traceback (patch 162); add BuildRequires: xz-devel (for
+_lzma module); skip some tests within test_socket (patch 163)
+
+* Sat Jul 21 2012 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> -
3.2.3-11
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
+
+* Fri Jul 20 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-0.1.b1
+
+* Fri Jun 22 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-10
+- use macro for power64 (rhbz#834653)
+
+* Mon Jun 18 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-9
+- fix missing include in uid/gid handling patch (patch 157; rhbz#830405)
+
+* Wed May 30 2012 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.2.3-8
+- fix tapset for debug build
+
+* Tue May 15 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-7
+- update uid/gid handling to avoid int overflows seen with uid/gid
+values >= 2^31 on 32-bit architectures (patch 157; rhbz#697470)
+
+* Fri May 4 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-6
+- renumber autotools patch from 300 to 5000
+- specfile cleanups
+
+* Mon Apr 30 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-5
+- fix test_gdb.py (patch 156; rhbz#817072)
+
+* Fri Apr 20 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-4
+- avoid allocating thunks in ctypes unless absolutely necessary, to avoid
+generating SELinux denials on "import ctypes" and "import uuid" when
embedding
+Python within httpd (patch 155; rhbz#814391)
+
+* Fri Apr 20 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-3
+- add explicit version requirements on expat to avoid linkage problems with
+XML_SetHashSalt
+
+* Thu Apr 12 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-2
+- fix test_gdb (patch 153)
+
+* Wed Apr 11 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-1
+- 3.2.3; refresh patch 102 (lib64); drop upstream patches 148 (gdbm magic
+values), 149 (__pycache__ fix); add patch 152 (test_gdb regex)
+
+* Thu Feb 9 2012 Thomas Spura <tomspur(a)fedoraproject.org> - 3.2.2-13
+- use newly installed python for byte compiling (now for real)
+
+* Sun Feb 5 2012 Thomas Spura <tomspur(a)fedoraproject.org> - 3.2.2-12
+- use newly installed python for byte compiling (#787498)
+
+* Wed Jan 4 2012 Ville Skytt <ville.skytta(a)iki.fi> - 3.2.2-11
+- Build with $RPM_LD_FLAGS (#756863).
+- Use xz-compressed source tarball.
+
+* Wed Dec 07 2011 Karsten Hopp <karsten(a)redhat.com> 3.2.2-10
+- disable rAssertAlmostEqual in test_cmath on PPC (#750811)
+
+* Mon Oct 17 2011 Rex Dieter <rdieter(a)fedoraproject.org> - 3.2.2-9
+- python3-devel missing autogenerated pkgconfig() provides (#746751)
+
+* Mon Oct 10 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-8
+- cherrypick fix for distutils not using __pycache__ when byte-compiling
+files (rhbz#722578)
+
+* Fri Sep 30 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-7
+- re-enable gdbm (patch 148; rhbz#742242)
+
+* Fri Sep 16 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-6
+- add a sys._debugmallocstats() function (patch 147)
+
+* Wed Sep 14 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-5
+- support OpenSSL FIPS mode in _hashlib and hashlib; don't build the _md5 and
+_sha* modules, relying on _hashlib in hashlib (rhbz#563986; patch 146)
+
+* Tue Sep 13 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-4
+- disable gdbm module to prepare for gdbm soname bump
+
+* Mon Sep 12 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-3
+- renumber and rename patches for consistency with python.spec (8 to 55, 106
+to 104, 6 to 111, 104 to 113, 105 to 114, 125, 131, 130 to 143)
+
+* Sat Sep 10 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-2
+- rewrite of "check", introducing downstream-only hooks for skipping specific
+cases in an rpmbuild (patch 132), and fixing/skipping failing tests in a more
+fine-grained manner than before; (patches 106, 133-142 sparsely, moving
+patches for consistency with python.spec: 128 to 134, 126 to 135, 127 to 141)
+
+* Tue Sep 6 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-1
+- 3.2.2
+
+* Thu Sep 1 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.1-7
+- run selftests with "--verbose"
+- disable parts of test_io on ppc (rhbz#732998)
+
+* Wed Aug 31 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.1-6
+- use "--findleaks --verbose3" when running test suite
+
+* Tue Aug 23 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.1-5
+- re-enable and fix the --with-tsc option on ppc64, and rework it on 32-bit
+ppc to avoid aliasing violations (patch 130; rhbz#698726)
+
+* Tue Aug 23 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.1-4
+- don't use --with-tsc on ppc64 debug builds (rhbz#698726)
+
+* Thu Aug 18 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.1-3
+- add %%python3_version to the rpm macros (rhbz#719082)
+
+* Mon Jul 11 2011 Dennis Gilmore <dennis(a)ausil.us> - 3.2.1-2
+- disable some tests on sparc arches
+
+* Mon Jul 11 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.1-1
+- 3.2.1; refresh lib64 patch (102), subprocess unit test patch (129), disabling
+of static library build (due to Modules/_testembed; patch 6), autotool
+intermediates (patch 300)
+
+* Fri Jul 8 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-5
+- use the gdb hooks from the upstream tarball, rather than keeping our own copy
+
+* Fri Jul 8 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-4
+- don't run test_openpty and test_pty in %%check
+
+* Fri Jul 8 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-3
+- cleanup of BuildRequires; add comment headings to specfile sections
+
+* Tue Apr 19 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-2
+- fix the libpython.stp systemtap tapset (rhbz#697730)
+
+* Mon Feb 21 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-1
+- 3.2
+- drop alphatag
+- regenerate autotool patch
+
+* Mon Feb 14 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.13.rc3
+- add a /usr/bin/python3-debug symlink within the debug subpackage
+
+* Mon Feb 14 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.12.rc3
+- 3.2rc3
+- regenerate autotool patch
+
+* Wed Feb 09 2011 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> -
3.2-0.11.rc2
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
+
+* Mon Jan 31 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.10.rc2
+- 3.2rc2
+
+* Mon Jan 17 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.9.rc1
+- 3.2rc1
+- rework patch 6 (static lib removal)
+- remove upstreamed patch 130 (ppc debug build)
+- regenerate patch 300 (autotool intermediates)
+- updated packaging to reflect upstream rewrite of "Demo" (issue 7962)
+- added libpython3.so and 2to3-3.2
+
+* Wed Jan 5 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.8.b2
+- set EXTRA_CFLAGS to our CFLAGS, rather than overriding OPT, fixing a linker
+error with dynamic annotations (when configured using --with-valgrind)
+- fix the ppc build of the debug configuration (patch 130; rhbz#661510)
+
+* Tue Jan 4 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.7.b2
+- add --with-valgrind to configuration (on architectures that support this)
+
+* Wed Dec 29 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.6.b2
+- work around test_subprocess failure seen in koji (patch 129)
+
+* Tue Dec 28 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.5.b2
+- 3.2b2
+- rework patch 3 (removal of mimeaudio tests), patch 6 (no static libs),
+patch 8 (systemtap), patch 102 (lib64)
+- remove patch 4 (rendered redundant by upstream r85537), patch 103 (PEP 3149),
+patch 110 (upstreamed expat fix), patch 111 (parallel build fix for grammar
+fixed upstream)
+- regenerate patch 300 (autotool intermediates)
+- workaround COUNT_ALLOCS weakref issues in test suite (patch 126, patch 127,
+patch 128)
+- stop using runtest.sh in %%check (dropped by upstream), replacing with
+regrtest; fixup list of failing tests
+- introduce "pyshortver", "SOABI_optimized" and
"SOABI_debug" macros
+- rework manifests of shared libraries to use "SOABI_" macros, reflecting
+PEP 3149
+- drop itertools, operator and _collections modules from the manifests as py3k
+commit r84058 moved these inside libpython; json/tests moved to test/json_tests
+- move turtle code into the tkinter subpackage
+
+* Wed Nov 17 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.5.a1
+- fix sysconfig to not rely on the -devel subpackage (rhbz#653058)
+
+* Thu Sep 9 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.4.a1
+- move most of the content of the core package to the libs subpackage, given
+that the libs aren't meaningfully usable without the standard libraries
+
+* Wed Sep 8 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.3.a1
+- Move test.support to core package (rhbz#596258)
+- Add various missing __pycache__ directories to payload
+
+* Sun Aug 22 2010 Toshio Kuratomi <toshio(a)fedoraproject.org> - 3.2-0.2.a1
+- Add __pycache__ directory for site-packages
+
+* Sun Aug 22 2010 Thomas Spura <tomspur(a)fedoraproject.org> - 3.2-0.1.a1
+- on 64bit "stdlib" was still "/usr/lib/python*" (modify
*lib64.patch)
+- make find-provides-without-python-sonames.sh 64bit aware
+
+* Sat Aug 21 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.0.a1
+- 3.2a1; add alphatag
+- rework %%files in the light of PEP 3147 (__pycache__)
+- drop our configuration patch to Setup.dist (patch 0): setup.py should do a
+better job of things, and the %%files explicitly lists our modules (r82746
+appears to break the old way of doing things). This leads to various modules
+changing from "foomodule.so" to "foo.so". It also leads to the
optimized build
+dropping the _sha1, _sha256 and _sha512 modules, but these are provided by
+_hashlib; _weakref becomes a builtin module; xxsubtype goes away (it's only for
+testing/devel purposes)
+- fixup patches 3, 4, 6, 8, 102, 103, 105, 111 for the rebase
+- remove upstream patches: 7 (system expat), 106, 107, 108 (audioop reformat
+plus CVE-2010-1634 and CVE-2010-2089), 109 (CVE-2008-5983)
+- add machinery for rebuilding "configure" and friends, using the correct
+version of autoconf (patch 300)
+- patch the debug build's usage of COUNT_ALLOCS to be less verbose (patch 125)
+- "modulator" was removed upstream
+- drop "-b" from patch applications affecting .py files to avoid littering the
+installation tree
+
+* Thu Aug 19 2010 Toshio Kuratomi <toshio(a)fedoraproject.org> - 3.1.2-13
+- Turn on computed-gotos.
+- Fix for parallel make and graminit.c
+
+* Fri Jul 2 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-12
+- rebuild
+
+* Fri Jul 2 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-11
+- Fix an incompatibility between pyexpat and the system expat-2.0.1 that led to
+a segfault running test_pyexpat.py (patch 110; upstream issue 9054; rhbz#610312)
+
+* Fri Jun 4 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-10
+- ensure that the compiler is invoked with "-fwrapv" (rhbz#594819)
+- reformat whitespace in audioop.c (patch 106)
+- CVE-2010-1634: fix various integer overflow checks in the audioop
+module (patch 107)
+- CVE-2010-2089: further checks within the audioop module (patch 108)
+- CVE-2008-5983: the new PySys_SetArgvEx entry point from r81399 (patch 109)
+
+* Thu May 27 2010 Dan Hork <dan[at]danny.cz> - 3.1.2-9
+- reading the timestamp counter is available only on some arches (see Python/ceval.c)
+
+* Wed May 26 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-8
+- add flags for statvfs.f_flag to the constant list in posixmodule (i.e. "os")
+(patch 105)
+
+* Tue May 25 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-7
+- add configure-time support for COUNT_ALLOCS and CALL_PROFILE debug options
+(patch 104); enable them and the WITH_TSC option within the debug build
+
+* Mon May 24 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-6
+- build and install two different configurations of Python 3: debug and
+standard, packaging the debug build in a new "python3-debug" subpackage
+(patch 103)
+
+* Tue Apr 13 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-5
+- exclude test_http_cookies when running selftests, due to hang seen on
+http://koji.fedoraproject.org/koji/taskinfo?taskID=2088463 (cancelled after
+11 hours)
+- update python-gdb.py from v5 to py3k version submitted upstream
+
+* Wed Mar 31 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-4
+- update python-gdb.py from v4 to v5 (improving performance and stability,
+adding commands)
+
+* Thu Mar 25 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-3
+- update python-gdb.py from v3 to v4 (fixing infinite recursion on reference
+cycles and tracebacks on bytes 0x80-0xff in strings, adding handlers for sets
+and exceptions)
+
+* Wed Mar 24 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-2
+- refresh gdb hooks to v3 (reworking how they are packaged)
+
+* Sun Mar 21 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-1
+- update to 3.1.2:
http://www.python.org/download/releases/3.1.2/
+- drop upstreamed patch 2 (.pyc permissions handling)
+- drop upstream patch 5 (fix for the test_tk and test_ttk_* selftests)
+- drop upstreamed patch 200 (path-fixing script)
+
+* Sat Mar 20 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-28
+- fix typo in libpython.stp (rhbz:575336)
+
+* Fri Mar 12 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-27
+- add pyfuntop.stp example (source 7)
+- convert usage of $$RPM_BUILD_ROOT to %%{buildroot} throughout, for
+consistency with python.spec
+
+* Mon Feb 15 2010 Thomas Spura <tomspur(a)fedoraproject.org> - 3.1.1-26
+- rebuild for new package of redhat-rpm-config (rhbz:564527)
+- use 'install -p' when running 'make install'
+
+* Fri Feb 12 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-25
+- split configure options into multiple lines for easy of editing
+- add systemtap static markers (wcohen, mjw, dmalcolm; patch 8), a systemtap
+tapset defining "python.function.entry" and "python.function.return"
to make
+the markers easy to use (dmalcolm; source 5), and an example of using the
+tapset to the docs (dmalcolm; source 6) (rhbz:545179)
+
+* Mon Feb 8 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-24
+- move the -gdb.py file from %%{_libdir}/INSTSONAME-gdb.py to
+%%{_prefix}/lib/debug/%%{_libdir}/INSTSONAME.debug-gdb.py to avoid noise from
+ldconfig (bug 562980), and which should also ensure it becomes part of the
+debuginfo subpackage, rather than the libs subpackage
+- introduce %%{py_SOVERSION} and %%{py_INSTSONAME} to reflect the upstream
+configure script, and to avoid fragile scripts that try to figure this out
+dynamically (e.g. for the -gdb.py change)
+
+* Mon Feb 8 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-23
+- add gdb hooks for easier debugging (Source 4)
+
+* Thu Jan 28 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-22
+- update python-3.1.1-config.patch to remove downstream customization of build
+of pyexpat and elementtree modules
+- add patch adapted from upstream (patch 7) to add support for building against
+system expat; add --with-system-expat to "configure" invocation
+- remove embedded copies of expat and zlib from source tree during "prep"
+
+* Mon Jan 25 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-21
+- introduce %%{dynload_dir} macro
+- explicitly list all lib-dynload files, rather than dynamically gathering the
+payload into a temporary text file, so that we can be sure what we are
+shipping
+- introduce a macros.pybytecompile source file, to help with packaging python3
+modules (Source3; written by Toshio)
+- rename "2to3-3" to "python3-2to3" to better reflect python 3 module
packaging
+plans
+
+* Mon Jan 25 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-20
+- change python-3.1.1-config.patch to remove our downstream change to curses
+configuration in Modules/Setup.dist, so that the curses modules are built using
+setup.py with the downstream default (linking against libncursesw.so, rather
+than libncurses.so), rather than within the Makefile; add a test to %%install
+to verify the dso files that the curses module is linked against the correct
+DSO (bug 539917; changes _cursesmodule.so -> _curses.so)
+
+* Fri Jan 22 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-19
+- add %%py3dir macro to macros.python3 (to be used during unified python 2/3
+builds for setting up the python3 copy of the source tree)
+
+* Wed Jan 20 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-18
+- move lib2to3 from -tools subpackage to main package (bug 556667)
+
+* Sun Jan 17 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-17
+- patch Makefile.pre.in to avoid building static library (patch 6, bug 556092)
+
+* Fri Jan 15 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-16
+- use the %%{_isa} macro to ensure that the python-devel dependency on python
+is for the correct multilib arch (#555943)
+- delete bundled copy of libffi to make sure we use the system one
+
+* Fri Jan 15 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-15
+- fix the URLs output by pydoc so they point at python.org's 3.1 build of the
+docs, rather than the 2.6 build
+
+* Wed Jan 13 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-14
+- replace references to /usr with %%{_prefix}; replace references to
+/usr/include with %%{_includedir} (Toshio)
+
+* Mon Jan 11 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-13
+- fix permission on find-provides-without-python-sonames.sh from 775 to 755
+
+* Mon Jan 11 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-12
+- remove build-time requirements on tix and tk, since we already have
+build-time requirements on the -devel subpackages for each of these (Thomas
+Spura)
+- replace usage of %%define with %%global (Thomas Spura)
+- remove forcing of CC=gcc as this old workaround for bug 109268 appears to
+longer be necessary
+- move various test files from the "tools"/"tkinter" subpackages to
the "test"
+subpackage
+
+* Thu Jan 7 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-11
+- add %%check section (thanks to Thomas Spura)
+- update patch 4 to use correct shebang line
+- get rid of stray patch file from buildroot
+
+* Tue Nov 17 2009 Andrew McNabb <amcnabb(a)mcnabbs.org> - 3.1.1-10
+- switched a few instances of "find |xargs" to "find -exec" for
consistency.
+- made the description of __os_install_post more accurate.
+
+* Wed Nov 4 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-9
+- add macros.python3 to the -devel subpackage, containing common macros for use
+when packaging python3 modules
+
+* Tue Nov 3 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-8
+- add a provides of "python(abi)" (see bug 532118)
+- fix issues identified by a.badger in package review (bug 526126, comment 39):
+ - use "3" thoughout metadata, rather than "3.*"
+ - remove conditional around "pkg-config openssl"
+ - use standard cleanup of RPM_BUILD_ROOT
+ - replace hardcoded references to /usr with _prefix macro
+ - stop removing egg-info files
+ - use /usr/bin/python3.1 rather than /use/bin/env python3.1 when fixing
+up shebang lines
+ - stop attempting to remove no-longer-present .cvsignore files
+ - move the post/postun sections above the "files" sections
+
+* Thu Oct 29 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-7
+- remove commented-away patch 51 (python-2.6-distutils_rpm.patch): the -O1
+flag is used by default in the upstream code
+- "Makefile" and the config-32/64.h file are needed by distutils/sysconfig.py
+_init_posix(), so we include them in the core package, along with their parent
+directories (bug 531901)
+
+* Tue Oct 27 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-6
+- reword description, based on suggestion by amcnabb
+- fix the test_email and test_imp selftests (patch 3 and patch 4 respectively)
+- fix the test_tk and test_ttk_* selftests (patch 5)
+- fix up the specfile's handling of shebang/perms to avoid corrupting
+test_httpservers.py (sed command suggested by amcnabb)
+
+* Thu Oct 22 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-5
+- fixup importlib/_bootstrap.py so that it correctly handles being unable to
+open .pyc files for writing (patch 2, upstream issue 7187)
+- actually apply the rpath patch (patch 1)
+
+* Thu Oct 22 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-4
+- update patch0's setup of the crypt module to link it against libcrypt
+- update patch0 to comment "datetimemodule" back out, so that it is built
+using setup.py (see Setup, option 3), thus linking it statically against
+timemodule.c and thus avoiding a run-time "undefined symbol:
+_PyTime_DoubleToTimet" failure on "import datetime"
+
+* Wed Oct 21 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-3
+- remove executable flag from various files that shouldn't have it
+- fix end-of-line encodings
+- fix a character encoding
+
+* Tue Oct 20 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-2
+- disable invocation of brp-python-bytecompile in postprocessing, since
+it would be with the wrong version of python (adapted from ivazquez'
+python3000 specfile)
+- use a custom implementation of __find_provides in order to filter out bogus
+provides lines for the various .so modules
+- fixup distutils/unixccompiler.py to remove standard library path from rpath
+(patch 1, was Patch0 in ivazquez' python3000 specfile)
+- split out libraries into a -libs subpackage
+- update summaries and descriptions, basing content on ivazquez' specfile
+- fixup executable permissions on .py, .xpm and .xbm files, based on work in
+ivazquez's specfile
+- get rid of DOS batch files
+- fixup permissions for shared libraries from non-standard 555 to standard 755
+- move /usr/bin/python*-config to the -devel subpackage
+- mark various directories as being documentation
+
+* Thu Sep 24 2009 Andrew McNabb <amcnabb(a)mcnabbs.org> 3.1.1-1
+- Initial package for Python 3.
+
diff --git a/tests/tests.yml b/tests/tests.yml
index e0d81a8..fa0fb83 100644
--- a/tests/tests.yml
+++ b/tests/tests.yml
@@ -11,18 +11,8 @@
- smoke:
dir: python/smoke
run: VERSION=3.7 ./venv.sh
- - selftest:
- dir: python/selftest
- run: VERSION=3.7 X="-x test_wsgiref" ./parallel.sh
- - debugtest:
- dir: python/selftest
- run: VERSION=3.7 PYTHON=python3-debug X="-x test_wsgiref"
./parallel.sh
required_packages:
- - gcc # for extension building in venv and selftest
- - gdb # for test_gdb
- - python3-debug # for leak testing
- - python3-devel # for extension building in venv and selftest
- - python3-tkinter # for selftest
- - python3-test # for selftest
- - python3-tox # for venv tests
+ - gcc
+ - python3-tox
+ - python37
- glibc-all-langpacks # for locale tests
commit e2599943a248bfa9705fefa287c3f434bfb2b555
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Sun Aug 11 11:23:07 2019 +0200
Conditionalize python3-devel runtime dependencies on RPM packages and setuptools
Installing python3-devel currently brings in:
- annobin
- dwz
- efi-srpm-macros
- fpc-srpm-macros
- ghc-srpm-macros
- gnat-srpm-macros
- go-srpm-macros
- nim-srpm-macros
- ocaml-srpm-macros
- openblas-srpm-macros
- perl-srpm-macros
- python-rpm-macros
- python-srpm-macros
- python3-rpm-generators
- python3-rpm-macros
- qt5-srpm-macros
- redhat-rpm-config
- rust-srpm-macros
For somebody who needs python3-devel to build extension modules,
those are all useless, so we conditionalize it on rpm-build.
Based on the reason for setuptools dependency, we do the same here
(but note that python3 already recommends it).
diff --git a/python3.spec b/python3.spec
index 8cd0bcd..7910dd3 100644
--- a/python3.spec
+++ b/python3.spec
@@ -17,7 +17,7 @@ URL:
https://www.python.org/
#global prerel ...
%global upstream_version %{general_version}%{?prerel}
Version: %{general_version}%{?prerel:~%{prerel}}
-Release: 4%{?dist}
+Release: 5%{?dist}
License: Python
@@ -440,11 +440,12 @@ Summary: Libraries and header files needed for Python development
Requires: %{name} = %{version}-%{release}
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
BuildRequires: python-rpm-macros
-Requires: python-rpm-macros
-Requires: python3-rpm-macros
-Requires: python3-rpm-generators
-%{?python_provide:%python_provide python3-devel}
+# The RPM related dependencies bring nothing to a non-RPM Python developer
+# But we want them when packages BuildRequire python3-devel
+Requires: (python-rpm-macros if rpm-build)
+Requires: (python3-rpm-macros if rpm-build)
+Requires: (python3-rpm-generators if rpm-build)
# This is not "API" (packages that need setuptools should still BuildRequire
it)
# However some packages apparently can build both with and without setuptools
@@ -453,7 +454,9 @@ Requires: python3-rpm-generators
# installed when -devel is required.
# See
https://bugzilla.redhat.com/show_bug.cgi?id=1623914
# See
https://fedoraproject.org/wiki/Packaging:Directory_Replacement
-Requires: python3-setuptools
+Requires: (python3-setuptools if rpm-build)
+
+%{?python_provide:%python_provide python3-devel}
Provides: %{name}-2to3 = %{version}-%{release}
Provides: 2to3 = %{version}-%{release}
@@ -1536,6 +1539,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Sun Aug 11 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.4-5
+- Conditionalize python3-devel runtime dependencies on RPM packages and setuptools
+
* Fri Jul 26 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.7.4-4
- Rebuilt for
https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
commit 5c6b2e2b5cb52d029597179d83dd656d7f74f5e8
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Fri Jul 26 17:22:20 2019 +0000
- Rebuilt for
https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/python3.spec b/python3.spec
index 8837ec4..8cd0bcd 100644
--- a/python3.spec
+++ b/python3.spec
@@ -17,7 +17,7 @@ URL:
https://www.python.org/
#global prerel ...
%global upstream_version %{general_version}%{?prerel}
Version: %{general_version}%{?prerel:~%{prerel}}
-Release: 3%{?dist}
+Release: 4%{?dist}
License: Python
@@ -1536,6 +1536,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Fri Jul 26 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.7.4-4
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
* Mon Jul 15 2019 Lumr Balhar <lbalhar(a)redhat.com> - 3.7.4-3
- Move test.support module to python3-test subpackage
https://fedoraproject.org/wiki/Changes/Move_test.support_module_to_python...
commit 46d035d896ef083749360a183e52167c15a83fb9
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Thu Jul 11 16:20:09 2019 +0200
Keep the LICENSE.txt file in lib/pythonX.Y dir
The license() builtin tries to read it and virtualenv tries to copy it.
See
https://github.com/pypa/virtualenv/issues/1352
Up until now, the license() builtin juts felt back to:
See
https://www.python.org/psf/license/
However it should output the full license text.
Virtualenv ~16.6 warns:
No LICENSE.txt / LICENSE found in source
Technically, it is probably possible to install the package without
%license files, but that would simply resort to the previous noncritical
behavior.
This fix is not critical and hence it doesn't bump release, for easier
backporting to all our Python packages.
diff --git a/python3.spec b/python3.spec
index ceec4c2..8837ec4 100644
--- a/python3.spec
+++ b/python3.spec
@@ -925,9 +925,6 @@ find %{buildroot} -name \*.bat -exec rm {} \;
find %{buildroot}/ -name "*~" -exec rm -f {} \;
find . -name "*~" -exec rm -f {} \;
-# Get rid of a stray copy of the license:
-rm %{buildroot}%{pylibdir}/LICENSE.txt
-
# Do bytecompilation with the newly installed interpreter.
# This is similar to the script in macros.pybytecompile
# compile *.pyc
@@ -1075,7 +1072,6 @@ CheckPython optimized
%files
-%license LICENSE
%doc README.rst
%if %{without flatpackage}
@@ -1098,13 +1094,14 @@ CheckPython optimized
%{_mandir}/*/python.1*
%files libs
-%license LICENSE
%doc README.rst
%endif
%dir %{pylibdir}
%dir %{dynload_dir}
+%license %{pylibdir}/LICENSE.txt
+
%{pylibdir}/lib2to3
%if %{without flatpackage}
%exclude %{pylibdir}/lib2to3/tests
commit ec995d81726dbd454e9d1cb05ea28af1219bf035
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Mon Jul 15 15:38:52 2019 +0200
Restore pyc to TIMESTAMP invalidation mode as default in rpmbubild
See
https://src.fedoraproject.org/rpms/redhat-rpm-config/pull-request/57#comm...
diff --git a/00328-pyc-timestamp-invalidation-mode.patch
b/00328-pyc-timestamp-invalidation-mode.patch
new file mode 100644
index 0000000..87515c4
--- /dev/null
+++ b/00328-pyc-timestamp-invalidation-mode.patch
@@ -0,0 +1,55 @@
+From 746a45acd333174c3174230833b45f537bd92889 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro(a)hroncok.cz>
+Date: Thu, 11 Jul 2019 13:44:13 +0200
+Subject: [PATCH] 00328: Restore pyc to TIMESTAMP invalidation mode as default
+ in rpmbuild
+
+Since Fedora 31, the $SOURCE_DATE_EPOCH is set in rpmbuild to the latest
+%changelog date. This makes Python default to the CHECKED_HASH pyc
+invalidation mode, bringing more reproducible builds traded for an import
+performance decrease. To avoid that, we don't default to CHECKED_HASH
+when $RPM_BUILD_ROOT is set (i.e. when we are building RPM packages).
+
+See
https://src.fedoraproject.org/rpms/redhat-rpm-config/pull-request/57#comm...
+---
+ Lib/py_compile.py | 3 ++-
+ Lib/test/test_py_compile.py | 2 ++
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/Lib/py_compile.py b/Lib/py_compile.py
+index 21736896af..310bed5620 100644
+--- a/Lib/py_compile.py
++++ b/Lib/py_compile.py
+@@ -70,7 +70,8 @@ class PycInvalidationMode(enum.Enum):
+
+
+ def _get_default_invalidation_mode():
+- if os.environ.get('SOURCE_DATE_EPOCH'):
++ if (os.environ.get('SOURCE_DATE_EPOCH') and not
++ os.environ.get('RPM_BUILD_ROOT')):
+ return PycInvalidationMode.CHECKED_HASH
+ else:
+ return PycInvalidationMode.TIMESTAMP
+diff --git a/Lib/test/test_py_compile.py b/Lib/test/test_py_compile.py
+index d6677ab45f..88059b127e 100644
+--- a/Lib/test/test_py_compile.py
++++ b/Lib/test/test_py_compile.py
+@@ -17,6 +17,7 @@ def without_source_date_epoch(fxn):
+ def wrapper(*args, **kwargs):
+ with support.EnvironmentVarGuard() as env:
+ env.unset('SOURCE_DATE_EPOCH')
++ env.unset('RPM_BUILD_ROOT')
+ return fxn(*args, **kwargs)
+ return wrapper
+
+@@ -27,6 +28,7 @@ def with_source_date_epoch(fxn):
+ def wrapper(*args, **kwargs):
+ with support.EnvironmentVarGuard() as env:
+ env['SOURCE_DATE_EPOCH'] = '123456789'
++ env.unset('RPM_BUILD_ROOT')
+ return fxn(*args, **kwargs)
+ return wrapper
+
+--
+2.21.0
+
diff --git a/python3.spec b/python3.spec
index 9e0a415..ceec4c2 100644
--- a/python3.spec
+++ b/python3.spec
@@ -291,6 +291,11 @@ Patch274: 00274-fix-arch-names.patch
# So we mark the command as unsupported - and the tests are skipped
Patch316: 00316-mark-bdist_wininst-unsupported.patch
+# 00328 #
+# Restore pyc to TIMESTAMP invalidation mode as default in rpmbubild
+# See
https://src.fedoraproject.org/rpms/redhat-rpm-config/pull-request/57#comm...
+Patch328: 00328-pyc-timestamp-invalidation-mode.patch
+
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
@@ -624,6 +629,7 @@ rm Lib/ensurepip/_bundled/*.whl
%patch251 -p1
%patch274 -p1
%patch316 -p1
+%patch328 -p1
# Remove files that should be generated by the build
@@ -1536,6 +1542,7 @@ CheckPython optimized
* Mon Jul 15 2019 Lumr Balhar <lbalhar(a)redhat.com> - 3.7.4-3
- Move test.support module to python3-test subpackage
https://fedoraproject.org/wiki/Changes/Move_test.support_module_to_python...
+- Restore pyc to TIMESTAMP invalidation mode as default in rpmbubild
* Fri Jul 12 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.4-2
-
https://fedoraproject.org/wiki/Changes/Python_means_Python3
commit a664336af9229377cdbfd6fece47b66106aa95ff
Author: Lumir Balhar <lbalhar(a)redhat.com>
Date: Mon Jul 15 12:18:56 2019 +0200
Move test.support module to python3-test subpackage
More info:
https://fedoraproject.org/wiki/Changes/Move_test.support_module_to_python...
diff --git a/python3.spec b/python3.spec
index 06fa6af..9e0a415 100644
--- a/python3.spec
+++ b/python3.spec
@@ -17,7 +17,7 @@ URL:
https://www.python.org/
#global prerel ...
%global upstream_version %{general_version}%{?prerel}
Version: %{general_version}%{?prerel:~%{prerel}}
-Release: 2%{?dist}
+Release: 3%{?dist}
License: Python
@@ -1135,20 +1135,6 @@ CheckPython optimized
%{pylibdir}/ensurepip/_bundled/*.whl
%endif
-# The majority of the test module lives in the test subpackage
-# However test.support is in libs - it contains stuff used when testing your code
-#
https://bugzilla.redhat.com/show_bug.cgi?id=596258
-%if %{without flatpackage}
-%dir %{pylibdir}/test/
-%dir %{pylibdir}/test/__pycache__/
-%dir %{pylibdir}/test/support/
-%dir %{pylibdir}/test/support/__pycache__/
-%{pylibdir}/test/__init__.py
-%{pylibdir}/test/__pycache__/__init__%{bytecode_suffixes}
-%{pylibdir}/test/support/*.py
-%{pylibdir}/test/support/__pycache__/*%{bytecode_suffixes}
-%endif
-
%dir %{pylibdir}/concurrent/
%dir %{pylibdir}/concurrent/__pycache__/
%{pylibdir}/concurrent/*.py
@@ -1408,16 +1394,6 @@ CheckPython optimized
%{pylibdir}/tkinter/test
%{pylibdir}/unittest/test
-# stuff already owned by the libs subpackage
-# test requires libs, so we are safe not owning those dirs
-%if %{without flatpackage}
-%exclude %dir %{pylibdir}/test/
-%exclude %dir %{pylibdir}/test/__pycache__/
-%exclude %{pylibdir}/test/__init__.py
-%exclude %{pylibdir}/test/__pycache__/__init__%{bytecode_suffixes}
-%exclude %{pylibdir}/test/support/
-%endif
-
# We don't bother splitting the debug build out into further subpackages:
# if you need it, you're probably a developer.
@@ -1557,6 +1533,10 @@ CheckPython optimized
# ======================================================
%changelog
+* Mon Jul 15 2019 Lumr Balhar <lbalhar(a)redhat.com> - 3.7.4-3
+- Move test.support module to python3-test subpackage
+
https://fedoraproject.org/wiki/Changes/Move_test.support_module_to_python...
+
* Fri Jul 12 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.4-2
-
https://fedoraproject.org/wiki/Changes/Python_means_Python3
- The python-unversioned-command package is no longer Python 2, but 3
commit 337d3348c9c482e71041767eb9f0bba6f52945df
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Fri Jul 12 19:03:54 2019 +0200
Python now means Python 3
-
https://fedoraproject.org/wiki/Changes/Python_means_Python3
- The python-unversioned-command package is no longer Python 2, but 3
- The python, pydoc, python-config, python-debug, idle, pygettext.py and
msgfmt.py commands are now in python3
diff --git a/python3.spec b/python3.spec
index f0fee2f..06fa6af 100644
--- a/python3.spec
+++ b/python3.spec
@@ -17,7 +17,7 @@ URL:
https://www.python.org/
#global prerel ...
%global upstream_version %{general_version}%{?prerel}
Version: %{general_version}%{?prerel:~%{prerel}}
-Release: 1%{?dist}
+Release: 2%{?dist}
License: Python
@@ -329,6 +329,18 @@ Provides: python%{pyshortver} = %{version}-%{release}
# replace python36-3.6.2.
Obsoletes: python%{pyshortver}
+#
https://fedoraproject.org/wiki/Changes/Move_usr_bin_python_into_separate_...
+#
https://fedoraproject.org/wiki/Changes/Python_means_Python3
+# We recommend /usr/bin/python so users get it by default
+# Versioned recommends are problematic, and we know that the package requires
+# python3 back with fixed version, so we just use the path here:
+Recommends: %{_bindir}/python
+
+# In Fedora 31, /usr/bin/pydoc was moved here from Python 2.
+# Ideally we'd have an explicit conflict with "/usr/bin/pydoc < 3",
+# but file provides aren't versioned and the file moved across packages.
+# Instead, we rely on the conflict in python3-libs.
+
# Previously, this was required for our rewheel patch to work.
# This is technically no longer needed, but we keep it recommended
# for the developer experience.
@@ -364,6 +376,22 @@ Packages containing additional libraries for Python are generally
named with
the "%{name}-" prefix.
+#
https://fedoraproject.org/wiki/Changes/Move_usr_bin_python_into_separate_...
+#
https://fedoraproject.org/wiki/Changes/Python_means_Python3
+%package -n python-unversioned-command
+Summary: The "python" command that runs Python 3
+BuildArch: noarch
+
+# In theory this could require any python3 version
+Requires: python3 == %{version}-%{release}
+# But since we want to provide versioned python, we require exact version
+Provides: python = %{version}-%{release}
+# This also save us an explicit conflict for older python3 builds
+
+%description -n python-unversioned-command
+This package contains /usr/bin/python - the "python" command that runs Python
3.
+
+
%package libs
Summary: Python runtime libraries
@@ -383,6 +411,18 @@ Provides: bundled(python3-setuptools) = 40.8.0
# See
https://bugzilla.redhat.com/show_bug.cgi?id=1547131
Recommends: %{name}%{?_isa} = %{version}-%{release}
+#
https://fedoraproject.org/wiki/Changes/Move_usr_bin_python_into_separate_...
+# In Fedora 31, several "unversioned" files like /usr/bin/pydoc and all the
+# "unversioned" provides were moved from python2 to python3.
+# So, newer python3 packages need to conflict with old Python 2 builds that
+# still provided unversioned Python.
+# Since all python packages, new and old, have versioned requires on
+# python?-libs, we do it here:
+Conflicts: python-libs < 3
+# (We explicitly conflict with python-libs and not python2-libs, so only the
+# old Python 2 builds that still provided unversioned Python are handled.)
+
+
%description libs
This package contains runtime libraries for use by Python:
- the majority of the Python standard library
@@ -415,6 +455,10 @@ Provides: 2to3 = %{version}-%{release}
Conflicts: %{name} < %{version}-%{release}
+# In Fedora 31, several "unversioned" files were moved here from Python 2:
+# pygettext.py, msgfmt.py, python-config, python.pc
+Conflicts: python-devel < 3
+
%description devel
This package contains the header files and configuration needed to compile
Python extension modules (typically written in C or C++), to embed Python
@@ -430,11 +474,15 @@ Requires: %{name} = %{version}-%{release}
Requires: %{name}-tkinter = %{version}-%{release}
Provides: idle3 = %{version}-%{release}
+Provides: idle = %{version}-%{release}
Provides: %{name}-tools = %{version}-%{release}
Provides: %{name}-tools%{?_isa} = %{version}-%{release}
Obsoletes: %{name}-tools < %{version}-%{release}
+# In Fedora 31, /usr/bin/idle was moved here from Python 2.
+Conflicts: python-tools < 3
+
%{?python_provide:%python_provide python3-idle}
%description idle
@@ -490,6 +538,9 @@ Requires: %{name}-test%{?_isa} = %{version}-%{release}
Requires: %{name}-tkinter%{?_isa} = %{version}-%{release}
Requires: %{name}-idle%{?_isa} = %{version}-%{release}
+# In Fedora 31, /usr/bin/python-debug was moved here from Python 2.
+Conflicts: python-debug < 3
+
%{?python_provide:%python_provide python3-debug}
%description debug
@@ -916,6 +967,20 @@ rm %{buildroot}%{_bindir}/2to3
rm %{buildroot}%{_libdir}/libpython3.so
rm %{buildroot}%{_mandir}/man1/python3.1*
rm %{buildroot}%{_libdir}/pkgconfig/python3.pc
+%else
+# Link the unversioned stuff
+#
https://fedoraproject.org/wiki/Changes/Python_means_Python3
+ln -s ./python3 %{buildroot}%{_bindir}/python
+ln -s ./pydoc3 %{buildroot}%{_bindir}/pydoc
+ln -s ./pygettext3.py %{buildroot}%{_bindir}/pygettext.py
+ln -s ./msgfmt3.py %{buildroot}%{_bindir}/msgfmt.py
+ln -s ./idle3 %{buildroot}%{_bindir}/idle
+ln -s ./python3-config %{buildroot}%{_bindir}/python-config
+ln -s ./python3.1 %{buildroot}%{_mandir}/man1/python.1
+ln -s ./python3.pc %{buildroot}%{_libdir}/pkgconfig/python.pc
+%if %{with debug_build}
+ln -s ./python3-debug %{buildroot}%{_bindir}/python-debug
+%endif
%endif
@@ -1018,10 +1083,14 @@ CheckPython optimized
%{_bindir}/python%{pybasever}
%{_bindir}/python%{pybasever}m
%{_bindir}/pyvenv-%{pybasever}
-%{_mandir}/*/*
+%{_mandir}/*/*3*
%if %{without flatpackage}
+%files -n python-unversioned-command
+%{_bindir}/python
+%{_mandir}/*/python.1*
+
%files libs
%license LICENSE
%doc README.rst
@@ -1267,10 +1336,14 @@ CheckPython optimized
%if %{without flatpackage}
%{_bindir}/python3-config
+%{_bindir}/python-config
%{_libdir}/pkgconfig/python3.pc
+%{_libdir}/pkgconfig/python.pc
%{_bindir}/pathfix.py
%{_bindir}/pygettext3.py
+%{_bindir}/pygettext.py
%{_bindir}/msgfmt3.py
+%{_bindir}/msgfmt.py
%endif
%{_bindir}/pygettext%{pybasever}.py
@@ -1355,6 +1428,7 @@ CheckPython optimized
%if %{without flatpackage}
%files debug
%{_bindir}/python3-debug
+%{_bindir}/python-debug
%endif
# Analog of the core subpackage's files:
@@ -1483,6 +1557,12 @@ CheckPython optimized
# ======================================================
%changelog
+* Fri Jul 12 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.4-2
+-
https://fedoraproject.org/wiki/Changes/Python_means_Python3
+- The python-unversioned-command package is no longer Python 2, but 3
+- The python, pydoc, python-config, python-debug, idle, pygettext.py and
+ msgfmt.py commands are now in python3
+
* Tue Jul 09 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.4-1
- Update to 3.7.4
commit 0f89ab9113a4d9c0b2c08cccd807877123fa2312
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Fri Jul 12 18:41:02 2019 +0200
Remove obsolete obsoletes
diff --git a/python3.spec b/python3.spec
index 83d47eb..f0fee2f 100644
--- a/python3.spec
+++ b/python3.spec
@@ -329,13 +329,6 @@ Provides: python%{pyshortver} = %{version}-%{release}
# replace python36-3.6.2.
Obsoletes: python%{pyshortver}
-# Shall be removed in Fedora 31
-# The release is bumped to 20, so we can do f27 platform-python updates
-# If the release in f27 ever goes >= 20, raise it here
-# If platform-python is ever reintroduced, make it higher version than this:
-%global platpyver 3.6.2-20
-Obsoletes: platform-python < %{platpyver}
-
# Previously, this was required for our rewheel patch to work.
# This is technically no longer needed, but we keep it recommended
# for the developer experience.
@@ -390,10 +383,6 @@ Provides: bundled(python3-setuptools) = 40.8.0
# See
https://bugzilla.redhat.com/show_bug.cgi?id=1547131
Recommends: %{name}%{?_isa} = %{version}-%{release}
-# Shall be removed in Fedora 31
-Obsoletes: platform-python-libs < %{platpyver}
-Obsoletes: platform-python-libs-devel < %{platpyver}
-
%description libs
This package contains runtime libraries for use by Python:
- the majority of the Python standard library
@@ -426,9 +415,6 @@ Provides: 2to3 = %{version}-%{release}
Conflicts: %{name} < %{version}-%{release}
-# Shall be removed in Fedora 31
-Obsoletes: platform-python-devel < %{platpyver}
-
%description devel
This package contains the header files and configuration needed to compile
Python extension modules (typically written in C or C++), to embed Python
@@ -451,9 +437,6 @@ Obsoletes: %{name}-tools < %{version}-%{release}
%{?python_provide:%python_provide python3-idle}
-# Shall be removed in Fedora 31
-Obsoletes: platform-python-tools < %{platpyver}
-
%description idle
IDLE is Pythons Integrated Development and Learning Environment.
@@ -473,9 +456,6 @@ Requires: %{name} = %{version}-%{release}
%{?python_provide:%python_provide python3-tkinter}
-# Shall be removed in Fedora 31
-Obsoletes: platform-python-tkinter < %{platpyver}
-
%description tkinter
The Tkinter (Tk interface) library is a graphical user interface toolkit for
the Python programming language.
@@ -488,9 +468,6 @@ Requires: %{name}-libs%{?_isa} = %{version}-%{release}
%{?python_provide:%python_provide python3-test}
-# Shall be removed in Fedora 31
-Obsoletes: platform-python-test < %{platpyver}
-
%description test
The self-test suite for the Python interpreter.
commit f7475de5fcd1f2d3a44592c9c1392714b1a5c7bc
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Mon Jul 8 11:44:23 2019 +0200
Add %python_provide provides
This allows easier compatibility back and forth once (and if)
https://fedoraproject.org/wiki/Changes/Python_means_Python3
happens. This is not the full implementation of the change,
as the python-unversioned package still needs to be added.
This is currently a no-op as %python_provide does nothing
for python3.
diff --git a/python3.spec b/python3.spec
index cd07949..83d47eb 100644
--- a/python3.spec
+++ b/python3.spec
@@ -197,6 +197,9 @@ BuildRequires: /usr/bin/dtrace
# workaround
http://bugs.python.org/issue19804 (test_uuid requires ifconfig)
BuildRequires: /usr/sbin/ifconfig
+# For %%python_provide
+BuildRequires: python-rpm-macros
+
%if %{with rpmwheels}
BuildRequires: python-setuptools-wheel
BuildRequires: python-pip-wheel
@@ -379,6 +382,8 @@ Provides: bundled(python3-pip) = 19.0.3
Provides: bundled(python3-setuptools) = 40.8.0
%endif
+%{?python_provide:%python_provide python3-libs}
+
# There are files in the standard library that have python shebang.
# We've filtered the automatic requirement out so libs are installable without
# the main package. This however makes it pulled in by default.
@@ -405,6 +410,8 @@ Requires: python-rpm-macros
Requires: python3-rpm-macros
Requires: python3-rpm-generators
+%{?python_provide:%python_provide python3-devel}
+
# This is not "API" (packages that need setuptools should still BuildRequire
it)
# However some packages apparently can build both with and without setuptools
# producing egg-info as file or directory (depending on setuptools presence).
@@ -442,6 +449,8 @@ Provides: %{name}-tools = %{version}-%{release}
Provides: %{name}-tools%{?_isa} = %{version}-%{release}
Obsoletes: %{name}-tools < %{version}-%{release}
+%{?python_provide:%python_provide python3-idle}
+
# Shall be removed in Fedora 31
Obsoletes: platform-python-tools < %{platpyver}
@@ -462,6 +471,8 @@ configuration, browsers, and other dialogs.
Summary: A GUI toolkit for Python
Requires: %{name} = %{version}-%{release}
+%{?python_provide:%python_provide python3-tkinter}
+
# Shall be removed in Fedora 31
Obsoletes: platform-python-tkinter < %{platpyver}
@@ -475,6 +486,8 @@ Summary: The self-test suite for the main python3 package
Requires: %{name} = %{version}-%{release}
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
+%{?python_provide:%python_provide python3-test}
+
# Shall be removed in Fedora 31
Obsoletes: platform-python-test < %{platpyver}
@@ -500,6 +513,8 @@ Requires: %{name}-test%{?_isa} = %{version}-%{release}
Requires: %{name}-tkinter%{?_isa} = %{version}-%{release}
Requires: %{name}-idle%{?_isa} = %{version}-%{release}
+%{?python_provide:%python_provide python3-debug}
+
%description debug
python3-debug provides a version of the Python runtime with numerous debugging
features enabled, aimed at advanced Python users such as developers of Python
commit 663a998388bb348589ace368e9f71d4cf92b8a99
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Tue Jul 9 11:00:50 2019 +0200
Update to 3.7.4
diff --git a/python3.spec b/python3.spec
index b0e798e..cd07949 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
%global general_version %{pybasever}.4
-%global prerel rc2
+#global prerel ...
%global upstream_version %{general_version}%{?prerel}
Version: %{general_version}%{?prerel:~%{prerel}}
Release: 1%{?dist}
@@ -1491,6 +1491,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Tue Jul 09 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.4-1
+- Update to 3.7.4
+
* Tue Jul 02 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.4~rc2-1
- Update to 3.7.4rc2
diff --git a/sources b/sources
index afac668..dc50b76 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (Python-3.7.4rc2.tar.xz) =
ba3d75624ca0b5fa1da3131cf423c0842b552b8b41efd18fef03a17055508cfcd5e73a7a27f90b470a82336b8e27129ee7fc3231597ac142bddef9f710fbe430
+SHA512 (Python-3.7.4.tar.xz) =
71f64668c259f3ed07bd4aa239dbba6cc1b6b0a84d50bbff160664845d7986f757e4d65fca327e62a2d12ba593742ca83a22f7cb6093aff8715ec916c2ba9416
commit f585cd7ec184a899bd98801267d08630bfbccbdb
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Wed Jul 3 00:37:56 2019 +0200
Update to 3.7.4rc2
diff --git a/python3.spec b/python3.spec
index 7744d3c..b0e798e 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
%global general_version %{pybasever}.4
-%global prerel rc1
+%global prerel rc2
%global upstream_version %{general_version}%{?prerel}
Version: %{general_version}%{?prerel:~%{prerel}}
Release: 1%{?dist}
@@ -1491,6 +1491,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Tue Jul 02 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.4~rc2-1
+- Update to 3.7.4rc2
+
* Tue Jun 25 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.4~rc1-1
- Update to 3.7.4rc1
diff --git a/sources b/sources
index 39df067..afac668 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (Python-3.7.4rc1.tar.xz) =
a6a901de2f70d09d16e722daf5687d0c13d9244ab3a2bb2971d6240c0c680836def3d23d517d0dc20d9badcd6583e34a14d35a8818656c422664e07c3cbd5497
+SHA512 (Python-3.7.4rc2.tar.xz) =
ba3d75624ca0b5fa1da3131cf423c0842b552b8b41efd18fef03a17055508cfcd5e73a7a27f90b470a82336b8e27129ee7fc3231597ac142bddef9f710fbe430
commit 3815a08388d520f7536072568053dccb93544097
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Wed Jun 26 12:01:44 2019 +0200
Don't skip so many tests on the CI
test_wsgiref is tracked in
https://bugs.python.org/issue37411
diff --git a/tests/tests.yml b/tests/tests.yml
index 669255d..e0d81a8 100644
--- a/tests/tests.yml
+++ b/tests/tests.yml
@@ -13,10 +13,10 @@
run: VERSION=3.7 ./venv.sh
- selftest:
dir: python/selftest
- run: VERSION=3.7 X="-x test_socket -x test_asyncgen -x test_compile -x
test_concurrent_futures -x test_itertools -x test_multiprocessing_fork -x
test_multiprocessing_forkserver -x test_shutil -x test_time -x test_multiprocessing_spawn
-x test_threading -x test_wsgiref" ./parallel.sh
+ run: VERSION=3.7 X="-x test_wsgiref" ./parallel.sh
- debugtest:
dir: python/selftest
- run: VERSION=3.7 PYTHON=python3-debug X="-x test_socket -x test_asyncgen -x
test_compile -x test_concurrent_futures -x test_itertools -x test_multiprocessing_fork -x
test_multiprocessing_forkserver -x test_shutil -x test_time -x test_multiprocessing_spawn
-x test_threading -x test_wsgiref" ./parallel.sh
+ run: VERSION=3.7 PYTHON=python3-debug X="-x test_wsgiref"
./parallel.sh
required_packages:
- gcc # for extension building in venv and selftest
- gdb # for test_gdb
commit 9f5808cf53efafc3f76c1ed425d5b0bb7818e871
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Thu Jun 27 20:04:01 2019 +0200
Don't let RPM set SOURCE_DATE_EPOCH based on the latest %changelog date
It breaks tests with: can't find '__main__' module in .../test_zip.zip
Reported at
https://bugs.python.org/issue34022
Tracked at
https://bugzilla.redhat.com/show_bug.cgi?id=1724753
diff --git a/python3.spec b/python3.spec
index e05ed5d..7744d3c 100644
--- a/python3.spec
+++ b/python3.spec
@@ -126,6 +126,12 @@ License: Python
# on files that test invalid syntax.
%undefine py_auto_byte_compile
+# Don't let RPM set SOURCE_DATE_EPOCH based on the latest %%changelog date
+# It breaks tests with: can't find '__main__' module in .../test_zip.zip
+# Reported at
https://bugs.python.org/issue34022
+# Tracked at
https://bugzilla.redhat.com/show_bug.cgi?id=1724753
+%global source_date_epoch_from_changelog 0
+
# For multilib support, files that are different between 32- and 64-bit arches
# need different filenames. Use "64" or "32" according to the word
size.
# Currently, the best way to determine an architecture's word size happens to
commit b33b4a5162e2b5873c5846dcba882f3569ab76cd
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Wed Jun 26 10:30:21 2019 +0200
Remove the OPENSSL_CONF=/non-existing-file workaround
The test was fixed upstream to expect different config on Fedora.
Resolves
https://bugzilla.redhat.com/show_bug.cgi?id=1618753
(Note that we still keep that on the CI for older Python versions.)
diff --git a/python3.spec b/python3.spec
index 4958aa6..e05ed5d 100644
--- a/python3.spec
+++ b/python3.spec
@@ -966,12 +966,6 @@ CheckPython() {
ConfName=$1
ConfDir=$(pwd)/build/$ConfName
- # Fedora sets TLSv1 as explicit minimum version.
- # Python's test suite assumes that the minimum protocol version is set to
- # a magic marker. We workaround the test problem by setting:
- export OPENSSL_CONF=/non-existing-file
- #
https://bugzilla.redhat.com/show_bug.cgi?id=1618753
-
echo STARTING: CHECKING OF PYTHON FOR CONFIGURATION: $ConfName
# Note that we're running the tests using the version of the code in the
commit dd5f80b1b8d7737fc9544976f26eda46e0b843bd
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Tue Jun 25 16:08:20 2019 +0200
Update to 3.7.4rc1
- reenable test_asyncio
- drop merged CVE fixes (patches 320, 324)
diff --git a/00320-fix-pre-normalization-chars-in-urlsplit.patch
b/00320-fix-pre-normalization-chars-in-urlsplit.patch
deleted file mode 100644
index b8ae979..0000000
--- a/00320-fix-pre-normalization-chars-in-urlsplit.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py
-index 0faf2bb..d0365ec 100644
---- a/Lib/test/test_urlparse.py
-+++ b/Lib/test/test_urlparse.py
-@@ -1011,6 +1011,12 @@ class UrlParseTestCase(unittest.TestCase):
- self.assertIn('\u2100', denorm_chars)
- self.assertIn('\uFF03', denorm_chars)
-
-+ # bpo-36742: Verify port separators are ignored when they
-+ # existed prior to decomposition
-+ urllib.parse.urlsplit('http://\u30d5\u309a:80')
-+ with self.assertRaises(ValueError):
-+ urllib.parse.urlsplit('http://\u30d5\u309a\ufe1380')
-+
- for scheme in ["http", "https", "ftp"]:
- for c in denorm_chars:
- url = "{}://netloc{}false.netloc/path".format(scheme, c)
-diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py
-index 8b6c9b1..e2f7b69 100644
---- a/Lib/urllib/parse.py
-+++ b/Lib/urllib/parse.py
-@@ -402,13 +402,16 @@ def _checknetloc(netloc):
- # looking for characters like \u2100 that expand to 'a/c'
- # IDNA uses NFKC equivalence, so normalize for this check
- import unicodedata
-- netloc2 = unicodedata.normalize('NFKC', netloc)
-- if netloc == netloc2:
-+ n = netloc.rpartition('@')[2] # ignore anything to the left of '@'
-+ n = n.replace(':', '') # ignore characters already included
-+ n = n.replace('#', '') # but not the surrounding text
-+ n = n.replace('?', '')
-+ netloc2 = unicodedata.normalize('NFKC', n)
-+ if n == netloc2:
- return
-- _, _, netloc = netloc.rpartition('@') # anything to the left of '@'
is okay
- for c in '/?#@:':
- if c in netloc2:
-- raise ValueError("netloc '" + netloc2 + "' contains
invalid " +
-+ raise ValueError("netloc '" + netloc + "' contains
invalid " +
- "characters under NFKC normalization")
-
- def urlsplit(url, scheme='', allow_fragments=True):
diff --git a/00324-disallow-control-chars-in-http-urls.patch
b/00324-disallow-control-chars-in-http-urls.patch
deleted file mode 100644
index 9e4317a..0000000
--- a/00324-disallow-control-chars-in-http-urls.patch
+++ /dev/null
@@ -1,150 +0,0 @@
-From 7e200e0763f5b71c199aaf98bd5588f291585619 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro(a)hroncok.cz>
-Date: Tue, 7 May 2019 17:28:47 +0200
-Subject: [PATCH] bpo-30458: Disallow control chars in http URLs. (GH-12755)
- (GH-13154)
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Disallow control chars in http URLs in urllib.urlopen. This addresses a potential
security problem for applications that do not sanity check their URLs where http request
headers could be injected.
-
-Disable https related urllib tests on a build without ssl (GH-13032)
-These tests require an SSL enabled build. Skip these tests when python is built without
SSL to fix test failures.
-
-Use http.client.InvalidURL instead of ValueError as the new error case's exception.
(GH-13044)
-
-Backport Co-Authored-By: Miro Hronok <miro(a)hroncok.cz>
----
- Lib/http/client.py | 15 ++++++
- Lib/test/test_urllib.py | 53 +++++++++++++++++++
- Lib/test/test_xmlrpc.py | 7 ++-
- .../2019-04-10-08-53-30.bpo-30458.51E-DA.rst | 1 +
- 4 files changed, 75 insertions(+), 1 deletion(-)
- create mode 100644 Misc/NEWS.d/next/Security/2019-04-10-08-53-30.bpo-30458.51E-DA.rst
-
-diff --git a/Lib/http/client.py b/Lib/http/client.py
-index 1de151c38e..2afd452fe3 100644
---- a/Lib/http/client.py
-+++ b/Lib/http/client.py
-@@ -140,6 +140,16 @@ _MAXHEADERS = 100
- _is_legal_header_name = re.compile(rb'[^:\s][^:\r\n]*').fullmatch
- _is_illegal_header_value = re.compile(rb'\n(?![ \t])|\r(?![ \t\n])').search
-
-+# These characters are not allowed within HTTP URL paths.
-+# See
https://tools.ietf.org/html/rfc3986#section-3.3 and the
-+#
https://tools.ietf.org/html/rfc3986#appendix-A pchar definition.
-+# Prevents CVE-2019-9740. Includes control characters such as \r\n.
-+# We don't restrict chars above \x7f as putrequest() limits us to ASCII.
-+_contains_disallowed_url_pchar_re = re.compile('[\x00-\x20\x7f]')
-+# Arguably only these _should_ allowed:
-+# _is_allowed_url_pchars_re =
re.compile(r"^[/!$&'()*+,;=:@%a-zA-Z0-9._~-]+$")
-+# We are more lenient for assumed real world compatibility purposes.
-+
- # We always set the Content-Length header for these methods because some
- # servers will otherwise respond with a 411
- _METHODS_EXPECTING_BODY = {'PATCH', 'POST', 'PUT'}
-@@ -1101,6 +1111,11 @@ class HTTPConnection:
- self._method = method
- if not url:
- url = '/'
-+ # Prevent CVE-2019-9740.
-+ match = _contains_disallowed_url_pchar_re.search(url)
-+ if match:
-+ raise InvalidURL(f"URL can't contain control characters. {url!r}
"
-+ f"(found at least {match.group()!r})")
- request = '%s %s %s' % (method, url, self._http_vsn_str)
-
- # Non-ASCII characters should have been eliminated earlier
-diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py
-index 2ac73b58d8..7214492eca 100644
---- a/Lib/test/test_urllib.py
-+++ b/Lib/test/test_urllib.py
-@@ -329,6 +329,59 @@ class urlopen_HttpTests(unittest.TestCase, FakeHTTPMixin,
FakeFTPMixin):
- finally:
- self.unfakehttp()
-
-+ @unittest.skipUnless(ssl, "ssl module required")
-+ def test_url_with_control_char_rejected(self):
-+ for char_no in list(range(0, 0x21)) + [0x7f]:
-+ char = chr(char_no)
-+ schemeless_url = f"//localhost:7777/test{char}/"
-+ self.fakehttp(b"HTTP/1.1 200 OK\r\n\r\nHello.")
-+ try:
-+ # We explicitly test urllib.request.urlopen() instead of the top
-+ # level 'def urlopen()' function defined in this... (quite
ugly)
-+ # test suite. They use different url opening codepaths. Plain
-+ # urlopen uses FancyURLOpener which goes via a codepath that
-+ # calls urllib.parse.quote() on the URL which makes all of the
-+ # above attempts at injection within the url _path_ safe.
-+ escaped_char_repr = repr(char).replace('\\', r'\\')
-+ InvalidURL = http.client.InvalidURL
-+ with self.assertRaisesRegex(
-+ InvalidURL, f"contain control.*{escaped_char_repr}"):
-+ urllib.request.urlopen(f"http:{schemeless_url}")
-+ with self.assertRaisesRegex(
-+ InvalidURL, f"contain control.*{escaped_char_repr}"):
-+ urllib.request.urlopen(f"https:{schemeless_url}")
-+ # This code path quotes the URL so there is no injection.
-+ resp = urlopen(f"http:{schemeless_url}")
-+ self.assertNotIn(char, resp.geturl())
-+ finally:
-+ self.unfakehttp()
-+
-+ @unittest.skipUnless(ssl, "ssl module required")
-+ def test_url_with_newline_header_injection_rejected(self):
-+ self.fakehttp(b"HTTP/1.1 200 OK\r\n\r\nHello.")
-+ host = "localhost:7777?a=1 HTTP/1.1\r\nX-injected: header\r\nTEST:
123"
-+ schemeless_url = "//" + host + ":8080/test/?test=a"
-+ try:
-+ # We explicitly test urllib.request.urlopen() instead of the top
-+ # level 'def urlopen()' function defined in this... (quite ugly)
-+ # test suite. They use different url opening codepaths. Plain
-+ # urlopen uses FancyURLOpener which goes via a codepath that
-+ # calls urllib.parse.quote() on the URL which makes all of the
-+ # above attempts at injection within the url _path_ safe.
-+ InvalidURL = http.client.InvalidURL
-+ with self.assertRaisesRegex(
-+ InvalidURL, r"contain control.*\\r.*(found at least . .)"):
-+ urllib.request.urlopen(f"http:{schemeless_url}")
-+ with self.assertRaisesRegex(InvalidURL, r"contain control.*\\n"):
-+ urllib.request.urlopen(f"https:{schemeless_url}")
-+ # This code path quotes the URL so there is no injection.
-+ resp = urlopen(f"http:{schemeless_url}")
-+ self.assertNotIn(' ', resp.geturl())
-+ self.assertNotIn('\r', resp.geturl())
-+ self.assertNotIn('\n', resp.geturl())
-+ finally:
-+ self.unfakehttp()
-+
- def test_read_0_9(self):
- # "0.9" response accepted (but not "simple responses"
without
- # a status line)
-diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py
-index 32263f7f0b..0e002ec4ef 100644
---- a/Lib/test/test_xmlrpc.py
-+++ b/Lib/test/test_xmlrpc.py
-@@ -945,7 +945,12 @@ class SimpleServerTestCase(BaseServerTestCase):
- def test_partial_post(self):
- # Check that a partial POST doesn't make the server loop: issue #14001.
- conn = http.client.HTTPConnection(ADDR, PORT)
-- conn.request('POST', '/RPC2 HTTP/1.0\r\nContent-Length:
100\r\n\r\nbye')
-+ conn.send('POST /RPC2 HTTP/1.0\r\n'
-+ 'Content-Length: 100\r\n\r\n'
-+ 'bye HTTP/1.1\r\n'
-+ f'Host: {ADDR}:{PORT}\r\n'
-+ 'Accept-Encoding: identity\r\n'
-+ 'Content-Length: 0\r\n\r\n'.encode('ascii'))
- conn.close()
-
- def test_context_manager(self):
-diff --git a/Misc/NEWS.d/next/Security/2019-04-10-08-53-30.bpo-30458.51E-DA.rst
b/Misc/NEWS.d/next/Security/2019-04-10-08-53-30.bpo-30458.51E-DA.rst
-new file mode 100644
-index 0000000000..ed8027fb4d
---- /dev/null
-+++ b/Misc/NEWS.d/next/Security/2019-04-10-08-53-30.bpo-30458.51E-DA.rst
-@@ -0,0 +1 @@
-+Address CVE-2019-9740 by disallowing URL paths with embedded whitespace or control
characters through into the underlying http client request. Such potentially malicious
header injection URLs now cause an http.client.InvalidURL exception to be raised.
---
-2.21.0
-
diff --git a/python3.spec b/python3.spec
index 38c8982..4958aa6 100644
--- a/python3.spec
+++ b/python3.spec
@@ -13,11 +13,11 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
-%global general_version %{pybasever}.3
-#global prerel ...
+%global general_version %{pybasever}.4
+%global prerel rc1
%global upstream_version %{general_version}%{?prerel}
Version: %{general_version}%{?prerel:~%{prerel}}
-Release: 3%{?dist}
+Release: 1%{?dist}
License: Python
@@ -282,18 +282,6 @@ Patch274: 00274-fix-arch-names.patch
# So we mark the command as unsupported - and the tests are skipped
Patch316: 00316-mark-bdist_wininst-unsupported.patch
-# 00320 #
-# Fix handling of pre-normalization characters in urlsplit()
-# This fixes a regression introduced by the fix for CVE-2019-9636
-# Fixed upstream:
https://bugs.python.org/issue36742
-Patch320: 00320-fix-pre-normalization-chars-in-urlsplit.patch
-
-# 00324 #
-# Disallow control chars in http URLs
-# Security fix for CVE-2019-9740 and CVE-2019-9947
-# Fixed upstream:
https://bugs.python.org/issue30458
-Patch324: 00324-disallow-control-chars-in-http-urls.patch
-
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
@@ -587,8 +575,6 @@ rm Lib/ensurepip/_bundled/*.whl
%patch251 -p1
%patch274 -p1
%patch316 -p1
-%patch320 -p1
-%patch324 -p1
# Remove files that should be generated by the build
@@ -999,8 +985,6 @@ CheckPython() {
#
https://bugzilla.redhat.com/show_bug.cgi?id=1196181
# test_gdb skipped on s390x:
#
https://bugzilla.redhat.com/show_bug.cgi?id=1678277
- # test_asyncio skipped:
- #
https://bugs.python.org/issue35998
LD_LIBRARY_PATH=$ConfDir $ConfDir/python -m test.regrtest \
-wW --slowest -j0 \
-x test_distutils \
@@ -1011,7 +995,6 @@ CheckPython() {
%ifarch %{mips64}
-x test_ctypes \
%endif
- -x test_asyncio \
echo FINISHED: CHECKING OF PYTHON FOR CONFIGURATION: $ConfName
@@ -1508,6 +1491,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Tue Jun 25 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.4~rc1-1
+- Update to 3.7.4rc1
+
* Tue May 07 2019 Charalampos Stratakis <cstratak(a)redhat.com> - 3.7.3-3
- Fix handling of pre-normalization characters in urlsplit
- Disallow control chars in http URLs (#1695572, #1700684, #1688169, #1706851)
diff --git a/sources b/sources
index adf7491..39df067 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (Python-3.7.3.tar.xz) =
6d9b7c0f1764e0f655a39430a3af6f7b5e3c9b7166c042e780677a54b17ad4ca6d0d9cba262c82b1b70bba8f7c28883dad4cc0d7cc194fc7d2c1b5f4f08a763a
+SHA512 (Python-3.7.4rc1.tar.xz) =
a6a901de2f70d09d16e722daf5687d0c13d9244ab3a2bb2971d6240c0c680836def3d23d517d0dc20d9badcd6583e34a14d35a8818656c422664e07c3cbd5497
diff --git a/tests/tests.yml b/tests/tests.yml
index db1eff4..669255d 100644
--- a/tests/tests.yml
+++ b/tests/tests.yml
@@ -13,10 +13,10 @@
run: VERSION=3.7 ./venv.sh
- selftest:
dir: python/selftest
- run: VERSION=3.7 X="-x test_socket -x test_asyncgen -x test_asyncio -x
test_compile -x test_concurrent_futures -x test_itertools -x test_multiprocessing_fork -x
test_multiprocessing_forkserver -x test_shutil -x test_time -x test_multiprocessing_spawn
-x test_threading -x test_wsgiref" ./parallel.sh
+ run: VERSION=3.7 X="-x test_socket -x test_asyncgen -x test_compile -x
test_concurrent_futures -x test_itertools -x test_multiprocessing_fork -x
test_multiprocessing_forkserver -x test_shutil -x test_time -x test_multiprocessing_spawn
-x test_threading -x test_wsgiref" ./parallel.sh
- debugtest:
dir: python/selftest
- run: VERSION=3.7 PYTHON=python3-debug X="-x test_socket -x test_asyncgen -x
test_asyncio -x test_compile -x test_concurrent_futures -x test_itertools -x
test_multiprocessing_fork -x test_multiprocessing_forkserver -x test_shutil -x test_time
-x test_multiprocessing_spawn -x test_threading -x test_wsgiref" ./parallel.sh
+ run: VERSION=3.7 PYTHON=python3-debug X="-x test_socket -x test_asyncgen -x
test_compile -x test_concurrent_futures -x test_itertools -x test_multiprocessing_fork -x
test_multiprocessing_forkserver -x test_shutil -x test_time -x test_multiprocessing_spawn
-x test_threading -x test_wsgiref" ./parallel.sh
required_packages:
- gcc # for extension building in venv and selftest
- gdb # for test_gdb
commit 9941fbbeb98f779199c9bf43ff0a5d15ce9b8128
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Tue Jun 25 15:28:29 2019 +0200
CI: Stop running findleaks tests, but run the test suite on debug Python
diff --git a/tests/tests.yml b/tests/tests.yml
index 918d0b0..db1eff4 100644
--- a/tests/tests.yml
+++ b/tests/tests.yml
@@ -14,9 +14,9 @@
- selftest:
dir: python/selftest
run: VERSION=3.7 X="-x test_socket -x test_asyncgen -x test_asyncio -x
test_compile -x test_concurrent_futures -x test_itertools -x test_multiprocessing_fork -x
test_multiprocessing_forkserver -x test_shutil -x test_time -x test_multiprocessing_spawn
-x test_threading -x test_wsgiref" ./parallel.sh
- - findleaks:
+ - debugtest:
dir: python/selftest
- run: VERSION=3.7 X="-x test_socket -x test_asyncgen -x test_asyncio -x
test_compile -x test_concurrent_futures -x test_itertools -x test_multiprocessing_fork -x
test_multiprocessing_forkserver -x test_shutil -x test_time -x test_multiprocessing_spawn
-x test_threading -x test_wsgiref" ./findleaks.sh
+ run: VERSION=3.7 PYTHON=python3-debug X="-x test_socket -x test_asyncgen -x
test_asyncio -x test_compile -x test_concurrent_futures -x test_itertools -x
test_multiprocessing_fork -x test_multiprocessing_forkserver -x test_shutil -x test_time
-x test_multiprocessing_spawn -x test_threading -x test_wsgiref" ./parallel.sh
required_packages:
- gcc # for extension building in venv and selftest
- gdb # for test_gdb
commit d3803a6dd6315aabaa684d77319cc25dddbee17d
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Tue May 7 18:03:34 2019 +0200
Security fix for CVE-2019-9740 and CVE-2019-9947
Disallow control chars in http URLs
Fixed upstream:
https://bugs.python.org/issue30458
diff --git a/00324-disallow-control-chars-in-http-urls.patch
b/00324-disallow-control-chars-in-http-urls.patch
new file mode 100644
index 0000000..9e4317a
--- /dev/null
+++ b/00324-disallow-control-chars-in-http-urls.patch
@@ -0,0 +1,150 @@
+From 7e200e0763f5b71c199aaf98bd5588f291585619 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro(a)hroncok.cz>
+Date: Tue, 7 May 2019 17:28:47 +0200
+Subject: [PATCH] bpo-30458: Disallow control chars in http URLs. (GH-12755)
+ (GH-13154)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Disallow control chars in http URLs in urllib.urlopen. This addresses a potential
security problem for applications that do not sanity check their URLs where http request
headers could be injected.
+
+Disable https related urllib tests on a build without ssl (GH-13032)
+These tests require an SSL enabled build. Skip these tests when python is built without
SSL to fix test failures.
+
+Use http.client.InvalidURL instead of ValueError as the new error case's exception.
(GH-13044)
+
+Backport Co-Authored-By: Miro Hronok <miro(a)hroncok.cz>
+---
+ Lib/http/client.py | 15 ++++++
+ Lib/test/test_urllib.py | 53 +++++++++++++++++++
+ Lib/test/test_xmlrpc.py | 7 ++-
+ .../2019-04-10-08-53-30.bpo-30458.51E-DA.rst | 1 +
+ 4 files changed, 75 insertions(+), 1 deletion(-)
+ create mode 100644 Misc/NEWS.d/next/Security/2019-04-10-08-53-30.bpo-30458.51E-DA.rst
+
+diff --git a/Lib/http/client.py b/Lib/http/client.py
+index 1de151c38e..2afd452fe3 100644
+--- a/Lib/http/client.py
++++ b/Lib/http/client.py
+@@ -140,6 +140,16 @@ _MAXHEADERS = 100
+ _is_legal_header_name = re.compile(rb'[^:\s][^:\r\n]*').fullmatch
+ _is_illegal_header_value = re.compile(rb'\n(?![ \t])|\r(?![ \t\n])').search
+
++# These characters are not allowed within HTTP URL paths.
++# See
https://tools.ietf.org/html/rfc3986#section-3.3 and the
++#
https://tools.ietf.org/html/rfc3986#appendix-A pchar definition.
++# Prevents CVE-2019-9740. Includes control characters such as \r\n.
++# We don't restrict chars above \x7f as putrequest() limits us to ASCII.
++_contains_disallowed_url_pchar_re = re.compile('[\x00-\x20\x7f]')
++# Arguably only these _should_ allowed:
++# _is_allowed_url_pchars_re =
re.compile(r"^[/!$&'()*+,;=:@%a-zA-Z0-9._~-]+$")
++# We are more lenient for assumed real world compatibility purposes.
++
+ # We always set the Content-Length header for these methods because some
+ # servers will otherwise respond with a 411
+ _METHODS_EXPECTING_BODY = {'PATCH', 'POST', 'PUT'}
+@@ -1101,6 +1111,11 @@ class HTTPConnection:
+ self._method = method
+ if not url:
+ url = '/'
++ # Prevent CVE-2019-9740.
++ match = _contains_disallowed_url_pchar_re.search(url)
++ if match:
++ raise InvalidURL(f"URL can't contain control characters. {url!r}
"
++ f"(found at least {match.group()!r})")
+ request = '%s %s %s' % (method, url, self._http_vsn_str)
+
+ # Non-ASCII characters should have been eliminated earlier
+diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py
+index 2ac73b58d8..7214492eca 100644
+--- a/Lib/test/test_urllib.py
++++ b/Lib/test/test_urllib.py
+@@ -329,6 +329,59 @@ class urlopen_HttpTests(unittest.TestCase, FakeHTTPMixin,
FakeFTPMixin):
+ finally:
+ self.unfakehttp()
+
++ @unittest.skipUnless(ssl, "ssl module required")
++ def test_url_with_control_char_rejected(self):
++ for char_no in list(range(0, 0x21)) + [0x7f]:
++ char = chr(char_no)
++ schemeless_url = f"//localhost:7777/test{char}/"
++ self.fakehttp(b"HTTP/1.1 200 OK\r\n\r\nHello.")
++ try:
++ # We explicitly test urllib.request.urlopen() instead of the top
++ # level 'def urlopen()' function defined in this... (quite
ugly)
++ # test suite. They use different url opening codepaths. Plain
++ # urlopen uses FancyURLOpener which goes via a codepath that
++ # calls urllib.parse.quote() on the URL which makes all of the
++ # above attempts at injection within the url _path_ safe.
++ escaped_char_repr = repr(char).replace('\\', r'\\')
++ InvalidURL = http.client.InvalidURL
++ with self.assertRaisesRegex(
++ InvalidURL, f"contain control.*{escaped_char_repr}"):
++ urllib.request.urlopen(f"http:{schemeless_url}")
++ with self.assertRaisesRegex(
++ InvalidURL, f"contain control.*{escaped_char_repr}"):
++ urllib.request.urlopen(f"https:{schemeless_url}")
++ # This code path quotes the URL so there is no injection.
++ resp = urlopen(f"http:{schemeless_url}")
++ self.assertNotIn(char, resp.geturl())
++ finally:
++ self.unfakehttp()
++
++ @unittest.skipUnless(ssl, "ssl module required")
++ def test_url_with_newline_header_injection_rejected(self):
++ self.fakehttp(b"HTTP/1.1 200 OK\r\n\r\nHello.")
++ host = "localhost:7777?a=1 HTTP/1.1\r\nX-injected: header\r\nTEST:
123"
++ schemeless_url = "//" + host + ":8080/test/?test=a"
++ try:
++ # We explicitly test urllib.request.urlopen() instead of the top
++ # level 'def urlopen()' function defined in this... (quite ugly)
++ # test suite. They use different url opening codepaths. Plain
++ # urlopen uses FancyURLOpener which goes via a codepath that
++ # calls urllib.parse.quote() on the URL which makes all of the
++ # above attempts at injection within the url _path_ safe.
++ InvalidURL = http.client.InvalidURL
++ with self.assertRaisesRegex(
++ InvalidURL, r"contain control.*\\r.*(found at least . .)"):
++ urllib.request.urlopen(f"http:{schemeless_url}")
++ with self.assertRaisesRegex(InvalidURL, r"contain control.*\\n"):
++ urllib.request.urlopen(f"https:{schemeless_url}")
++ # This code path quotes the URL so there is no injection.
++ resp = urlopen(f"http:{schemeless_url}")
++ self.assertNotIn(' ', resp.geturl())
++ self.assertNotIn('\r', resp.geturl())
++ self.assertNotIn('\n', resp.geturl())
++ finally:
++ self.unfakehttp()
++
+ def test_read_0_9(self):
+ # "0.9" response accepted (but not "simple responses"
without
+ # a status line)
+diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py
+index 32263f7f0b..0e002ec4ef 100644
+--- a/Lib/test/test_xmlrpc.py
++++ b/Lib/test/test_xmlrpc.py
+@@ -945,7 +945,12 @@ class SimpleServerTestCase(BaseServerTestCase):
+ def test_partial_post(self):
+ # Check that a partial POST doesn't make the server loop: issue #14001.
+ conn = http.client.HTTPConnection(ADDR, PORT)
+- conn.request('POST', '/RPC2 HTTP/1.0\r\nContent-Length:
100\r\n\r\nbye')
++ conn.send('POST /RPC2 HTTP/1.0\r\n'
++ 'Content-Length: 100\r\n\r\n'
++ 'bye HTTP/1.1\r\n'
++ f'Host: {ADDR}:{PORT}\r\n'
++ 'Accept-Encoding: identity\r\n'
++ 'Content-Length: 0\r\n\r\n'.encode('ascii'))
+ conn.close()
+
+ def test_context_manager(self):
+diff --git a/Misc/NEWS.d/next/Security/2019-04-10-08-53-30.bpo-30458.51E-DA.rst
b/Misc/NEWS.d/next/Security/2019-04-10-08-53-30.bpo-30458.51E-DA.rst
+new file mode 100644
+index 0000000000..ed8027fb4d
+--- /dev/null
++++ b/Misc/NEWS.d/next/Security/2019-04-10-08-53-30.bpo-30458.51E-DA.rst
+@@ -0,0 +1 @@
++Address CVE-2019-9740 by disallowing URL paths with embedded whitespace or control
characters through into the underlying http client request. Such potentially malicious
header injection URLs now cause an http.client.InvalidURL exception to be raised.
+--
+2.21.0
+
diff --git a/python3.spec b/python3.spec
index 0d102f7..38c8982 100644
--- a/python3.spec
+++ b/python3.spec
@@ -288,6 +288,12 @@ Patch316: 00316-mark-bdist_wininst-unsupported.patch
# Fixed upstream:
https://bugs.python.org/issue36742
Patch320: 00320-fix-pre-normalization-chars-in-urlsplit.patch
+# 00324 #
+# Disallow control chars in http URLs
+# Security fix for CVE-2019-9740 and CVE-2019-9947
+# Fixed upstream:
https://bugs.python.org/issue30458
+Patch324: 00324-disallow-control-chars-in-http-urls.patch
+
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
@@ -582,6 +588,7 @@ rm Lib/ensurepip/_bundled/*.whl
%patch274 -p1
%patch316 -p1
%patch320 -p1
+%patch324 -p1
# Remove files that should be generated by the build
@@ -1503,6 +1510,7 @@ CheckPython optimized
%changelog
* Tue May 07 2019 Charalampos Stratakis <cstratak(a)redhat.com> - 3.7.3-3
- Fix handling of pre-normalization characters in urlsplit
+- Disallow control chars in http URLs (#1695572, #1700684, #1688169, #1706851)
* Wed Apr 17 2019 Patrik Kopkan <pkopkan(a)redhat.com> - 3.7.3-2
- Makes man python3.7m show python3.7 man pages (#1612241)
commit 1b92cc7981c4692d681f3af8031d8f025035f575
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Tue May 7 12:49:35 2019 +0200
Fix handling of pre-normalization characters in urlsplit
diff --git a/00320-fix-pre-normalization-chars-in-urlsplit.patch
b/00320-fix-pre-normalization-chars-in-urlsplit.patch
new file mode 100644
index 0000000..b8ae979
--- /dev/null
+++ b/00320-fix-pre-normalization-chars-in-urlsplit.patch
@@ -0,0 +1,42 @@
+diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py
+index 0faf2bb..d0365ec 100644
+--- a/Lib/test/test_urlparse.py
++++ b/Lib/test/test_urlparse.py
+@@ -1011,6 +1011,12 @@ class UrlParseTestCase(unittest.TestCase):
+ self.assertIn('\u2100', denorm_chars)
+ self.assertIn('\uFF03', denorm_chars)
+
++ # bpo-36742: Verify port separators are ignored when they
++ # existed prior to decomposition
++ urllib.parse.urlsplit('http://\u30d5\u309a:80')
++ with self.assertRaises(ValueError):
++ urllib.parse.urlsplit('http://\u30d5\u309a\ufe1380')
++
+ for scheme in ["http", "https", "ftp"]:
+ for c in denorm_chars:
+ url = "{}://netloc{}false.netloc/path".format(scheme, c)
+diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py
+index 8b6c9b1..e2f7b69 100644
+--- a/Lib/urllib/parse.py
++++ b/Lib/urllib/parse.py
+@@ -402,13 +402,16 @@ def _checknetloc(netloc):
+ # looking for characters like \u2100 that expand to 'a/c'
+ # IDNA uses NFKC equivalence, so normalize for this check
+ import unicodedata
+- netloc2 = unicodedata.normalize('NFKC', netloc)
+- if netloc == netloc2:
++ n = netloc.rpartition('@')[2] # ignore anything to the left of '@'
++ n = n.replace(':', '') # ignore characters already included
++ n = n.replace('#', '') # but not the surrounding text
++ n = n.replace('?', '')
++ netloc2 = unicodedata.normalize('NFKC', n)
++ if n == netloc2:
+ return
+- _, _, netloc = netloc.rpartition('@') # anything to the left of '@'
is okay
+ for c in '/?#@:':
+ if c in netloc2:
+- raise ValueError("netloc '" + netloc2 + "' contains
invalid " +
++ raise ValueError("netloc '" + netloc + "' contains
invalid " +
+ "characters under NFKC normalization")
+
+ def urlsplit(url, scheme='', allow_fragments=True):
diff --git a/python3.spec b/python3.spec
index 5834635..0d102f7 100644
--- a/python3.spec
+++ b/python3.spec
@@ -17,7 +17,7 @@ URL:
https://www.python.org/
#global prerel ...
%global upstream_version %{general_version}%{?prerel}
Version: %{general_version}%{?prerel:~%{prerel}}
-Release: 2%{?dist}
+Release: 3%{?dist}
License: Python
@@ -282,6 +282,12 @@ Patch274: 00274-fix-arch-names.patch
# So we mark the command as unsupported - and the tests are skipped
Patch316: 00316-mark-bdist_wininst-unsupported.patch
+# 00320 #
+# Fix handling of pre-normalization characters in urlsplit()
+# This fixes a regression introduced by the fix for CVE-2019-9636
+# Fixed upstream:
https://bugs.python.org/issue36742
+Patch320: 00320-fix-pre-normalization-chars-in-urlsplit.patch
+
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
@@ -575,6 +581,7 @@ rm Lib/ensurepip/_bundled/*.whl
%patch251 -p1
%patch274 -p1
%patch316 -p1
+%patch320 -p1
# Remove files that should be generated by the build
@@ -1494,6 +1501,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Tue May 07 2019 Charalampos Stratakis <cstratak(a)redhat.com> - 3.7.3-3
+- Fix handling of pre-normalization characters in urlsplit
+
* Wed Apr 17 2019 Patrik Kopkan <pkopkan(a)redhat.com> - 3.7.3-2
- Makes man python3.7m show python3.7 man pages (#1612241)
commit 0bee54773d0c54271e1206a3464870fb66c949c3
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Wed Apr 24 14:25:34 2019 +0200
Fedora CI: Provision 3 GiB of RAM
diff --git a/tests/.fmf/version b/tests/.fmf/version
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/tests/.fmf/version
@@ -0,0 +1 @@
+1
diff --git a/tests/provision.fmf b/tests/provision.fmf
new file mode 100644
index 0000000..1a4f0f0
--- /dev/null
+++ b/tests/provision.fmf
@@ -0,0 +1,4 @@
+---
+standard-inventory-qcow2:
+ qemu:
+ m: 3G # Amount of VM memory
commit 8f86cfe6965df6b9b6e3c6f9d60a95ee412ba3b3
Author: Patrik Kopkan <pkopkan(a)redhat.com>
Date: Thu Apr 18 16:40:00 2019 +0200
add symlink for python3.Xm manpages
diff --git a/python3.spec b/python3.spec
index d7e4d7d..5834635 100644
--- a/python3.spec
+++ b/python3.spec
@@ -17,7 +17,7 @@ URL:
https://www.python.org/
#global prerel ...
%global upstream_version %{general_version}%{?prerel}
Version: %{general_version}%{?prerel:~%{prerel}}
-Release: 1%{?dist}
+Release: 2%{?dist}
License: Python
@@ -901,6 +901,9 @@ ln -s \
# See
https://bugzilla.redhat.com/show_bug.cgi?id=1111275
mv %{buildroot}%{_bindir}/2to3-%{pybasever} %{buildroot}%{_bindir}/2to3
+# make man python3.Xm work
https://bugzilla.redhat.com/show_bug.cgi?id=1612241
+ln -s ./python%{pybasever}.1 %{buildroot}%{_mandir}/man1/python%{pybasever}m.1
+
%if %{with flatpackage}
# Remove stuff that would conflict with python3 package
rm %{buildroot}%{_bindir}/python3
@@ -1491,6 +1494,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Wed Apr 17 2019 Patrik Kopkan <pkopkan(a)redhat.com> - 3.7.3-2
+- Makes man python3.7m show python3.7 man pages (#1612241)
+
* Wed Mar 27 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.3-1
- Update to 3.7.3
commit 9733ead195a5cc26639afdabab3290f19bc3b7c8
Author: Victor Stinner <vstinner(a)redhat.com>
Date: Tue Mar 5 15:50:30 2019 +0100
Reenable test_posix.test_fs_holes()
Since 2012, when the test was skipped from Python 3.3.0b1 (commit
3b4dd24c42a177bd8bda0ebf127f199ef32364ef), Linux now have a good
support for punching holes in filesystems.
Only 00160-disable-test_fs_holes-in-rpm-build.patch and
00163-disable-parts-of-test_socket-in-rpm-build.patch patches used
@unittest._skipInRpmBuild @unittest._expectedFailureInRpmBuild
decorators, but these 2 patches have been removed: remove
00132-add-rpmbuild-hooks-to-unittest.patch and
WITHIN_PYTHON_RPM_BUILD environment variable as well.
diff --git a/00132-add-rpmbuild-hooks-to-unittest.patch
b/00132-add-rpmbuild-hooks-to-unittest.patch
deleted file mode 100644
index 77dc6ec..0000000
--- a/00132-add-rpmbuild-hooks-to-unittest.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-diff -up Python-3.2.2/Lib/unittest/case.py.add-rpmbuild-hooks-to-unittest
Python-3.2.2/Lib/unittest/case.py
---- Python-3.2.2/Lib/unittest/case.py.add-rpmbuild-hooks-to-unittest 2011-09-03
12:16:44.000000000 -0400
-+++ Python-3.2.2/Lib/unittest/case.py 2011-09-09 06:35:16.365568382 -0400
-@@ -3,6 +3,7 @@
- import sys
- import functools
- import difflib
-+import os
- import logging
- import pprint
- import re
-@@ -101,5 +102,21 @@ def expectedFailure(func):
- raise self.test_case.failureException(msg)
-
-+# Non-standard/downstream-only hooks for handling issues with specific test
-+# cases:
-+
-+def _skipInRpmBuild(reason):
-+ """
-+ Non-standard/downstream-only decorator for marking a specific unit test
-+ to be skipped when run within the %check of an rpmbuild.
-+
-+ Specifically, this takes effect when WITHIN_PYTHON_RPM_BUILD is set within
-+ the environment, and has no effect otherwise.
-+ """
-+ if 'WITHIN_PYTHON_RPM_BUILD' in os.environ:
-+ return skip(reason)
-+ else:
-+ return _id
-+
- class _AssertRaisesBaseContext(_BaseTestCaseContext):
-
- def __init__(self, expected, test_case, expected_regex=None):
-diff -up Python-3.2.2/Lib/unittest/__init__.py.add-rpmbuild-hooks-to-unittest
Python-3.2.2/Lib/unittest/__init__.py
---- Python-3.2.2/Lib/unittest/__init__.py.add-rpmbuild-hooks-to-unittest 2011-09-03
12:16:44.000000000 -0400
-+++ Python-3.2.2/Lib/unittest/__init__.py 2011-09-09 06:35:16.366568382 -0400
-@@ -57,7 +57,8 @@ __unittest = True
-
- from .result import TestResult
- from .case import (TestCase, FunctionTestCase, SkipTest, skip, skipIf,
-- skipUnless, expectedFailure)
-+ skipUnless, expectedFailure,
-+ _skipInRpmBuild)
- from .suite import BaseTestSuite, TestSuite
- from .loader import (TestLoader, defaultTestLoader, makeSuite, getTestCaseNames,
- findTestCases)
diff --git a/00160-disable-test_fs_holes-in-rpm-build.patch
b/00160-disable-test_fs_holes-in-rpm-build.patch
deleted file mode 100644
index 9fa91d5..0000000
--- a/00160-disable-test_fs_holes-in-rpm-build.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -up cpython-59223da36dec/Lib/test/test_posix.py.disable-test_fs_holes-in-rpm-build
cpython-59223da36dec/Lib/test/test_posix.py
----
cpython-59223da36dec/Lib/test/test_posix.py.disable-test_fs_holes-in-rpm-build 2012-08-07
17:15:59.000000000 -0400
-+++ cpython-59223da36dec/Lib/test/test_posix.py 2012-08-07 17:16:53.528330330 -0400
-@@ -973,6 +973,7 @@ class PosixTester(unittest.TestCase):
- posix.RTLD_GLOBAL
- posix.RTLD_LOCAL
-
-+ @unittest._skipInRpmBuild('running kernel may not match kernel in chroot')
- @unittest.skipUnless(hasattr(os, 'SEEK_HOLE'),
- "test needs an OS that reports file holes")
- def test_fs_holes(self):
diff --git a/python3.spec b/python3.spec
index b05f15d..d7e4d7d 100644
--- a/python3.spec
+++ b/python3.spec
@@ -232,20 +232,6 @@ Patch102: 00102-lib64.patch
# Downstream only: not appropriate for upstream
Patch111: 00111-no-static-lib.patch
-# 00132 #
-# Add non-standard hooks to unittest for use in the "check" phase below, when
-# running selftests within the build:
-# @unittest._skipInRpmBuild(reason)
-# for tests that hang or fail intermittently within the build environment, and:
-# @unittest._expectedFailureInRpmBuild
-# for tests that always fail within the build environment
-#
-# The hooks only take effect if WITHIN_PYTHON_RPM_BUILD is set in the
-# environment, which we set manually in the appropriate portion of the "check"
-# phase below (and which potentially other python-* rpms could set, to reuse
-# these unittest hooks in their own "check" phases)
-Patch132: 00132-add-rpmbuild-hooks-to-unittest.patch
-
# 00155 #
# Avoid allocating thunks in ctypes unless absolutely necessary, to avoid
# generating SELinux denials on "import ctypes" and "import uuid"
when
@@ -253,13 +239,6 @@ Patch132: 00132-add-rpmbuild-hooks-to-unittest.patch
# See
https://bugzilla.redhat.com/show_bug.cgi?id=814391
Patch155: 00155-avoid-ctypes-thunks.patch
-# 00160 #
-# Python 3.3 added os.SEEK_DATA and os.SEEK_HOLE, which may be present in the
-# header files in the build chroot, but may not be supported in the running
-# kernel, hence we disable this test in an rpm build.
-# Adding these was upstream issue
http://bugs.python.org/issue10142
-# Not yet sent upstream
-Patch160: 00160-disable-test_fs_holes-in-rpm-build.patch
# 00170 #
# In debug builds, try to print repr() when a C-level assert fails in the
@@ -583,9 +562,7 @@ rm -r Modules/expat
%patch102 -p1
%endif
%patch111 -p1
-%patch132 -p1
%patch155 -p1
-%patch160 -p1
%patch170 -p1
%patch178 -p1
@@ -1000,17 +977,13 @@ CheckPython() {
# Show some info, helpful for debugging test failures
LD_LIBRARY_PATH=$ConfDir $ConfDir/python -m test.pythoninfo
- # Run the upstream test suite, setting "WITHIN_PYTHON_RPM_BUILD" so that the
- # our non-standard decorators take effect on the relevant tests:
- # @unittest._skipInRpmBuild(reason)
- # @unittest._expectedFailureInRpmBuild
+ # Run the upstream test suite
# test_gdb skipped on armv7hl:
#
https://bugzilla.redhat.com/show_bug.cgi?id=1196181
# test_gdb skipped on s390x:
#
https://bugzilla.redhat.com/show_bug.cgi?id=1678277
# test_asyncio skipped:
#
https://bugs.python.org/issue35998
- WITHIN_PYTHON_RPM_BUILD= \
LD_LIBRARY_PATH=$ConfDir $ConfDir/python -m test.regrtest \
-wW --slowest -j0 \
-x test_distutils \
commit 6caee321b2388676257cf852f5a39640686b6223
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Wed Mar 27 01:03:17 2019 +0100
Update to 3.7.3
diff --git a/python3.spec b/python3.spec
index 66ed804..b05f15d 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
%global general_version %{pybasever}.3
-%global prerel rc1
+#global prerel ...
%global upstream_version %{general_version}%{?prerel}
Version: %{general_version}%{?prerel:~%{prerel}}
Release: 1%{?dist}
@@ -1518,6 +1518,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Wed Mar 27 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.3-1
+- Update to 3.7.3
+
* Thu Mar 21 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.3~rc1-1
- Update to 3.7.3rc1
diff --git a/sources b/sources
index bf35992..adf7491 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (Python-3.7.3rc1.tar.xz) =
a0266a414f5a5828587e43e95fad494be2b0ac4563faefc26ef3f36fb19abb8cfe9b845e4ffec7652ac3ce17b7f47d2b89cd2032017d0f607a9fe4a5f08c4da7
+SHA512 (Python-3.7.3.tar.xz) =
6d9b7c0f1764e0f655a39430a3af6f7b5e3c9b7166c042e780677a54b17ad4ca6d0d9cba262c82b1b70bba8f7c28883dad4cc0d7cc194fc7d2c1b5f4f08a763a
commit 45a4368c6eaa12a9b630cb4b71e9f3a6415a567d
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Thu Mar 21 10:44:12 2019 +0100
Rebase to 3.7.3rc1
Patches merged upstream: 317, 320
Patches rebased: 189 (pip and setuptools versions only)
diff --git a/00189-use-rpm-wheels.patch b/00189-use-rpm-wheels.patch
index 1afdab1..ffb80af 100644
--- a/00189-use-rpm-wheels.patch
+++ b/00189-use-rpm-wheels.patch
@@ -16,9 +16,9 @@ index 4748ba4..fc02255 100644
+_WHEEL_DIR = "/usr/share/python-wheels/"
--_SETUPTOOLS_VERSION = "40.6.2"
+-_SETUPTOOLS_VERSION = "40.8.0"
--_PIP_VERSION = "18.1"
+-_PIP_VERSION = "19.0.3"
+def _get_most_recent_wheel_version(pkg):
+ prefix = os.path.join(_WHEEL_DIR, "{}-".format(pkg))
+ suffix = "-py2.py3-none-any.whl"
diff --git a/00317-CVE-2019-5010.patch b/00317-CVE-2019-5010.patch
deleted file mode 100644
index 62e931e..0000000
--- a/00317-CVE-2019-5010.patch
+++ /dev/null
@@ -1,111 +0,0 @@
-From c660debb97f4f422255a82fef2d77804552c043a Mon Sep 17 00:00:00 2001
-From: Christian Heimes <christian(a)python.org>
-Date: Tue, 15 Jan 2019 18:16:30 +0100
-Subject: [PATCH] bpo-35746: Fix segfault in ssl's cert parser
-
-CVE-2019-5010, Fix a NULL pointer deref in ssl module. The cert parser did
-not handle CRL distribution points with empty DP or URI correctly. A
-malicious or buggy certificate can result into segfault.
-
-Signed-off-by: Christian Heimes <christian(a)python.org>
----
- Lib/test/talos-2019-0758.pem | 22 +++++++++++++++++++
- Lib/test/test_ssl.py | 22 +++++++++++++++++++
- .../2019-01-15-18-16-05.bpo-35746.nMSd0j.rst | 3 +++
- Modules/_ssl.c | 4 ++++
- 4 files changed, 51 insertions(+)
- create mode 100644 Lib/test/talos-2019-0758.pem
- create mode 100644 Misc/NEWS.d/next/Security/2019-01-15-18-16-05.bpo-35746.nMSd0j.rst
-
-diff --git a/Lib/test/talos-2019-0758.pem b/Lib/test/talos-2019-0758.pem
-new file mode 100644
-index 000000000000..13b95a77fd8a
---- /dev/null
-+++ b/Lib/test/talos-2019-0758.pem
-@@ -0,0 +1,22 @@
-+-----BEGIN CERTIFICATE-----
-+MIIDqDCCApKgAwIBAgIBAjALBgkqhkiG9w0BAQswHzELMAkGA1UEBhMCVUsxEDAO
-+BgNVBAMTB2NvZHktY2EwHhcNMTgwNjE4MTgwMDU4WhcNMjgwNjE0MTgwMDU4WjA7
-+MQswCQYDVQQGEwJVSzEsMCoGA1UEAxMjY29kZW5vbWljb24tdm0tMi50ZXN0Lmxh
-+bC5jaXNjby5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC63fGB
-+J80A9Av1GB0bptslKRIUtJm8EeEu34HkDWbL6AJY0P8WfDtlXjlPaLqFa6sqH6ES
-+V48prSm1ZUbDSVL8R6BYVYpOlK8/48xk4pGTgRzv69gf5SGtQLwHy8UPBKgjSZoD
-+5a5k5wJXGswhKFFNqyyxqCvWmMnJWxXTt2XDCiWc4g4YAWi4O4+6SeeHVAV9rV7C
-+1wxqjzKovVe2uZOHjKEzJbbIU6JBPb6TRfMdRdYOw98n1VXDcKVgdX2DuuqjCzHP
-+WhU4Tw050M9NaK3eXp4Mh69VuiKoBGOLSOcS8reqHIU46Reg0hqeL8LIL6OhFHIF
-+j7HR6V1X6F+BfRS/AgMBAAGjgdYwgdMwCQYDVR0TBAIwADAdBgNVHQ4EFgQUOktp
-+HQjxDXXUg8prleY9jeLKeQ4wTwYDVR0jBEgwRoAUx6zgPygZ0ZErF9sPC4+5e2Io
-+UU+hI6QhMB8xCzAJBgNVBAYTAlVLMRAwDgYDVQQDEwdjb2R5LWNhggkA1QEAuwb7
-+2s0wCQYDVR0SBAIwADAuBgNVHREEJzAlgiNjb2Rlbm9taWNvbi12bS0yLnRlc3Qu
-+bGFsLmNpc2NvLmNvbTAOBgNVHQ8BAf8EBAMCBaAwCwYDVR0fBAQwAjAAMAsGCSqG
-+SIb3DQEBCwOCAQEAvqantx2yBlM11RoFiCfi+AfSblXPdrIrHvccepV4pYc/yO6p
-+t1f2dxHQb8rWH3i6cWag/EgIZx+HJQvo0rgPY1BFJsX1WnYf1/znZpkUBGbVmlJr
-+t/dW1gSkNS6sPsM0Q+7HPgEv8CPDNK5eo7vU2seE0iWOkxSyVUuiCEY9ZVGaLVit
-+p0C78nZ35Pdv4I+1cosmHl28+es1WI22rrnmdBpH8J1eY6WvUw2xuZHLeNVN0TzV
-+Q3qq53AaCWuLOD1AjESWuUCxMZTK9DPS4JKXTK8RLyDeqOvJGjsSWp3kL0y3GaQ+
-+10T1rfkKJub2+m9A9duin1fn6tHc2wSvB7m3DA==
-+-----END CERTIFICATE-----
-diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
-index 7f6b93148f45..1fc657f4d867 100644
---- a/Lib/test/test_ssl.py
-+++ b/Lib/test/test_ssl.py
-@@ -115,6 +115,7 @@ def data_file(*name):
- BADKEY = data_file("badkey.pem")
- NOKIACERT = data_file("nokia.pem")
- NULLBYTECERT = data_file("nullbytecert.pem")
-+TALOS_INVALID_CRLDP = data_file("talos-2019-0758.pem")
-
- DHFILE = data_file("ffdh3072.pem")
- BYTES_DHFILE = os.fsencode(DHFILE)
-@@ -348,6 +349,27 @@ def test_parse_cert(self):
- self.assertEqual(p['crlDistributionPoints'],
- ('http://SVRIntl-G3-crl.verisign.com/SVRIntlG3.crl',))
-
-+ def test_parse_cert_CVE_2019_5010(self):
-+ p = ssl._ssl._test_decode_cert(TALOS_INVALID_CRLDP)
-+ if support.verbose:
-+ sys.stdout.write("\n" + pprint.pformat(p) + "\n")
-+ self.assertEqual(
-+ p,
-+ {
-+ 'issuer': (
-+ (('countryName', 'UK'),), (('commonName',
'cody-ca'),)),
-+ 'notAfter': 'Jun 14 18:00:58 2028 GMT',
-+ 'notBefore': 'Jun 18 18:00:58 2018 GMT',
-+ 'serialNumber': '02',
-+ 'subject': ((('countryName', 'UK'),),
-+ (('commonName',
-+ 'codenomicon-vm-2.test.lal.cisco.com'),)),
-+ 'subjectAltName': (
-+ ('DNS', 'codenomicon-vm-2.test.lal.cisco.com'),),
-+ 'version': 3
-+ }
-+ )
-+
- def test_parse_cert_CVE_2013_4238(self):
- p = ssl._ssl._test_decode_cert(NULLBYTECERT)
- if support.verbose:
-diff --git a/Misc/NEWS.d/next/Security/2019-01-15-18-16-05.bpo-35746.nMSd0j.rst
b/Misc/NEWS.d/next/Security/2019-01-15-18-16-05.bpo-35746.nMSd0j.rst
-new file mode 100644
-index 000000000000..dffe347eec84
---- /dev/null
-+++ b/Misc/NEWS.d/next/Security/2019-01-15-18-16-05.bpo-35746.nMSd0j.rst
-@@ -0,0 +1,3 @@
-+[CVE-2019-5010] Fix a NULL pointer deref in ssl module. The cert parser did
-+not handle CRL distribution points with empty DP or URI correctly. A
-+malicious or buggy certificate can result into segfault.
-diff --git a/Modules/_ssl.c b/Modules/_ssl.c
-index 4e3352d9e661..0e720e268d93 100644
---- a/Modules/_ssl.c
-+++ b/Modules/_ssl.c
-@@ -1515,6 +1515,10 @@ _get_crl_dp(X509 *certificate) {
- STACK_OF(GENERAL_NAME) *gns;
-
- dp = sk_DIST_POINT_value(dps, i);
-+ if (dp->distpoint == NULL) {
-+ /* Ignore empty DP value, CVE-2019-5010 */
-+ continue;
-+ }
- gns = dp->distpoint->name.fullname;
-
- for (j=0; j < sk_GENERAL_NAME_num(gns); j++) {
diff --git a/00320-CVE-2019-9636.patch b/00320-CVE-2019-9636.patch
deleted file mode 100644
index 49967d5..0000000
--- a/00320-CVE-2019-9636.patch
+++ /dev/null
@@ -1,150 +0,0 @@
-From daad2c482c91de32d8305abbccc76a5de8b3a8be Mon Sep 17 00:00:00 2001
-From: Steve Dower <steve.dower(a)microsoft.com>
-Date: Thu, 7 Mar 2019 09:08:18 -0800
-Subject: [PATCH] bpo-36216: Add check for characters in netloc that normalize
- to separators (GH-12201)
-
----
- Doc/library/urllib.parse.rst | 18 +++++++++++++++
- Lib/test/test_urlparse.py | 23 +++++++++++++++++++
- Lib/urllib/parse.py | 17 ++++++++++++++
- .../2019-03-06-09-38-40.bpo-36216.6q1m4a.rst | 3 +++
- 4 files changed, 61 insertions(+)
- create mode 100644 Misc/NEWS.d/next/Security/2019-03-06-09-38-40.bpo-36216.6q1m4a.rst
-
-diff --git a/Doc/library/urllib.parse.rst b/Doc/library/urllib.parse.rst
-index 0c8f0f607314..b565e1edd321 100644
---- a/Doc/library/urllib.parse.rst
-+++ b/Doc/library/urllib.parse.rst
-@@ -124,6 +124,11 @@ or on combining URL components into a URL string.
- Unmatched square brackets in the :attr:`netloc` attribute will raise a
- :exc:`ValueError`.
-
-+ Characters in the :attr:`netloc` attribute that decompose under NFKC
-+ normalization (as used by the IDNA encoding) into any of ``/``, ``?``,
-+ ``#``, ``@``, or ``:`` will raise a :exc:`ValueError`. If the URL is
-+ decomposed before parsing, no error will be raised.
-+
- .. versionchanged:: 3.2
- Added IPv6 URL parsing capabilities.
-
-@@ -136,6 +141,10 @@ or on combining URL components into a URL string.
- Out-of-range port numbers now raise :exc:`ValueError`, instead of
- returning :const:`None`.
-
-+ .. versionchanged:: 3.7.3
-+ Characters that affect netloc parsing under NFKC normalization will
-+ now raise :exc:`ValueError`.
-+
-
- .. function:: parse_qs(qs, keep_blank_values=False, strict_parsing=False,
encoding='utf-8', errors='replace', max_num_fields=None)
-
-@@ -257,10 +266,19 @@ or on combining URL components into a URL string.
- Unmatched square brackets in the :attr:`netloc` attribute will raise a
- :exc:`ValueError`.
-
-+ Characters in the :attr:`netloc` attribute that decompose under NFKC
-+ normalization (as used by the IDNA encoding) into any of ``/``, ``?``,
-+ ``#``, ``@``, or ``:`` will raise a :exc:`ValueError`. If the URL is
-+ decomposed before parsing, no error will be raised.
-+
- .. versionchanged:: 3.6
- Out-of-range port numbers now raise :exc:`ValueError`, instead of
- returning :const:`None`.
-
-+ .. versionchanged:: 3.7.3
-+ Characters that affect netloc parsing under NFKC normalization will
-+ now raise :exc:`ValueError`.
-+
-
- .. function:: urlunsplit(parts)
-
-diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py
-index be50b47603aa..e6638aee2244 100644
---- a/Lib/test/test_urlparse.py
-+++ b/Lib/test/test_urlparse.py
-@@ -1,3 +1,5 @@
-+import sys
-+import unicodedata
- import unittest
- import urllib.parse
-
-@@ -984,6 +986,27 @@ def test_all(self):
- expected.append(name)
- self.assertCountEqual(urllib.parse.__all__, expected)
-
-+ def test_urlsplit_normalization(self):
-+ # Certain characters should never occur in the netloc,
-+ # including under normalization.
-+ # Ensure that ALL of them are detected and cause an error
-+ illegal_chars = '/:#?@'
-+ hex_chars = {'{:04X}'.format(ord(c)) for c in illegal_chars}
-+ denorm_chars = [
-+ c for c in map(chr, range(128, sys.maxunicode))
-+ if (hex_chars & set(unicodedata.decomposition(c).split()))
-+ and c not in illegal_chars
-+ ]
-+ # Sanity check that we found at least one such character
-+ self.assertIn('\u2100', denorm_chars)
-+ self.assertIn('\uFF03', denorm_chars)
-+
-+ for scheme in ["http", "https", "ftp"]:
-+ for c in denorm_chars:
-+ url = "{}://netloc{}false.netloc/path".format(scheme, c)
-+ with self.subTest(url=url, char='{:04X}'.format(ord(c))):
-+ with self.assertRaises(ValueError):
-+ urllib.parse.urlsplit(url)
-
- class Utility_Tests(unittest.TestCase):
- """Testcase to test the various utility functions in the
urllib."""
-diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py
-index f691ab74f87f..39c5d6a80824 100644
---- a/Lib/urllib/parse.py
-+++ b/Lib/urllib/parse.py
-@@ -391,6 +391,21 @@ def _splitnetloc(url, start=0):
- delim = min(delim, wdelim) # use earliest delim position
- return url[start:delim], url[delim:] # return (domain, rest)
-
-+def _checknetloc(netloc):
-+ if not netloc or netloc.isascii():
-+ return
-+ # looking for characters like \u2100 that expand to 'a/c'
-+ # IDNA uses NFKC equivalence, so normalize for this check
-+ import unicodedata
-+ netloc2 = unicodedata.normalize('NFKC', netloc)
-+ if netloc == netloc2:
-+ return
-+ _, _, netloc = netloc.rpartition('@') # anything to the left of '@'
is okay
-+ for c in '/?#@:':
-+ if c in netloc2:
-+ raise ValueError("netloc '" + netloc2 + "' contains
invalid " +
-+ "characters under NFKC normalization")
-+
- def urlsplit(url, scheme='', allow_fragments=True):
- """Parse a URL into 5 components:
- <scheme>://<netloc>/<path>?<query>#<fragment>
-@@ -419,6 +434,7 @@ def urlsplit(url, scheme='', allow_fragments=True):
- url, fragment = url.split('#', 1)
- if '?' in url:
- url, query = url.split('?', 1)
-+ _checknetloc(netloc)
- v = SplitResult('http', netloc, url, query, fragment)
- _parse_cache[key] = v
- return _coerce_result(v)
-@@ -442,6 +458,7 @@ def urlsplit(url, scheme='', allow_fragments=True):
- url, fragment = url.split('#', 1)
- if '?' in url:
- url, query = url.split('?', 1)
-+ _checknetloc(netloc)
- v = SplitResult(scheme, netloc, url, query, fragment)
- _parse_cache[key] = v
- return _coerce_result(v)
-diff --git a/Misc/NEWS.d/next/Security/2019-03-06-09-38-40.bpo-36216.6q1m4a.rst
b/Misc/NEWS.d/next/Security/2019-03-06-09-38-40.bpo-36216.6q1m4a.rst
-new file mode 100644
-index 000000000000..5546394157f9
---- /dev/null
-+++ b/Misc/NEWS.d/next/Security/2019-03-06-09-38-40.bpo-36216.6q1m4a.rst
-@@ -0,0 +1,3 @@
-+Changes urlsplit() to raise ValueError when the URL contains characters that
-+decompose under IDNA encoding (NFKC-normalization) into characters that
-+affect how the URL is parsed.
diff --git a/python3.spec b/python3.spec
index fa16f24..66ed804 100644
--- a/python3.spec
+++ b/python3.spec
@@ -13,8 +13,11 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
-Version: %{pybasever}.2
-Release: 8%{?dist}
+%global general_version %{pybasever}.3
+%global prerel rc1
+%global upstream_version %{general_version}%{?prerel}
+Version: %{general_version}%{?prerel:~%{prerel}}
+Release: 1%{?dist}
License: Python
@@ -198,7 +201,7 @@ BuildRequires: python-pip-wheel
# Source code and patches
# =======================
-Source:
https://www.python.org/ftp/python/%{version}/Python-%{version}%{?prerel}....
+Source:
https://www.python.org/ftp/python/%{general_version}/Python-%{upstream_ve...
# A simple script to check timestamps of bytecode files
# Run in check section with Python that is currently being built
@@ -300,16 +303,6 @@ Patch274: 00274-fix-arch-names.patch
# So we mark the command as unsupported - and the tests are skipped
Patch316: 00316-mark-bdist_wininst-unsupported.patch
-# 00317 #
-# Security fix for CVE-2019-5010: Fix segfault in ssl's cert parser
-# Fixed upstream
https://bugs.python.org/issue35746
-Patch317: 00317-CVE-2019-5010.patch
-
-# 00320 #
-# Security fix for CVE-2019-9636: Information Disclosure due to urlsplit improper NFKC
normalization
-# Fixed upstream
https://bugs.python.org/issue36216
-Patch320: 00320-CVE-2019-9636.patch
-
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
@@ -397,8 +390,8 @@ Summary: Python runtime libraries
Requires: python-setuptools-wheel
Requires: python-pip-wheel
%else
-Provides: bundled(python3-pip) = 18.1
-Provides: bundled(python3-setuptools) = 40.6.2
+Provides: bundled(python3-pip) = 19.0.3
+Provides: bundled(python3-setuptools) = 40.8.0
%endif
# There are files in the standard library that have python shebang.
@@ -552,8 +545,8 @@ so extensions for both versions can co-exist in the same directory.
Requires: python-setuptools-wheel
Requires: python-pip-wheel
%else
-Provides: bundled(python3-pip) = 18.1
-Provides: bundled(python3-setuptools) = 40.6.2
+Provides: bundled(python3-pip) = 19.0.3
+Provides: bundled(python3-setuptools) = 40.8.0
%endif
# The description for the flat package
@@ -572,7 +565,7 @@ version once Python %{pybasever} is stable.
# ======================================================
%prep
-%setup -q -n Python-%{version}%{?prerel}
+%setup -q -n Python-%{upstream_version}
# Remove all exe files to ensure we are not shipping prebuilt binaries
# note that those are only used to create Microsoft Windows installers
# and that functionality is broken on Linux anyway
@@ -605,8 +598,6 @@ rm Lib/ensurepip/_bundled/*.whl
%patch251 -p1
%patch274 -p1
%patch316 -p1
-%patch317 -p1
-%patch320 -p1
# Remove files that should be generated by the build
@@ -1527,6 +1518,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Thu Mar 21 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.3~rc1-1
+- Update to 3.7.3rc1
+
* Thu Mar 14 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.2-8
- Security fix for CVE-2019-9636 (#1688543, #1688546)
diff --git a/sources b/sources
index 64dca46..bf35992 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (Python-3.7.2.tar.xz) =
6cd2d6d8455558783b99d55985cd7b22d67b98f41a09b4fdd96f680a630a4e035220d2b903f8c59ed513aa5ffe6730fa947ddb55bb72ce36f0e945ef8af5d971
+SHA512 (Python-3.7.3rc1.tar.xz) =
a0266a414f5a5828587e43e95fad494be2b0ac4563faefc26ef3f36fb19abb8cfe9b845e4ffec7652ac3ce17b7f47d2b89cd2032017d0f607a9fe4a5f08c4da7
commit ff4d48f430b8799c1ca174ebcc27db11bf860cc7
Author: Victor Stinner <vstinner(a)redhat.com>
Date: Tue Mar 5 15:35:12 2019 +0100
Reenable RecvmsgGenericStreamTests.testRecvmsgEOF()
Reenable RecvmsgGenericStreamTests.testRecvmsgEOF() of test_socket:
remove 00163-disable-parts-of-test_socket-in-rpm-build.patch.
diff --git a/00163-disable-parts-of-test_socket-in-rpm-build.patch
b/00163-disable-parts-of-test_socket-in-rpm-build.patch
deleted file mode 100644
index 0e28036..0000000
--- a/00163-disable-parts-of-test_socket-in-rpm-build.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -up Python-3.3.0b1/Lib/test/test_socket.py.disable-test_socket-in-rpm-builds
Python-3.3.0b1/Lib/test/test_socket.py
---- Python-3.3.0b1/Lib/test/test_socket.py.disable-test_socket-in-rpm-builds 2012-07-24
15:02:30.823355067 -0400
-+++ Python-3.3.0b1/Lib/test/test_socket.py 2012-07-24 15:08:13.021354999 -0400
-@@ -2188,6 +2188,7 @@ class RecvmsgGenericStreamTests(RecvmsgG
- # Tests which require a stream socket and can use either recvmsg()
- # or recvmsg_into().
-
-+ @unittest._skipInRpmBuild('fails intermittently when run within Koji')
- def testRecvmsgEOF(self):
- # Receive end-of-stream indicator (b"", peer socket closed).
- msg, ancdata, flags, addr = self.doRecvmsg(self.serv_sock, 1024)
diff --git a/python3.spec b/python3.spec
index 6220933..fa16f24 100644
--- a/python3.spec
+++ b/python3.spec
@@ -258,12 +258,6 @@ Patch155: 00155-avoid-ctypes-thunks.patch
# Not yet sent upstream
Patch160: 00160-disable-test_fs_holes-in-rpm-build.patch
-# 00163 #
-# Some tests within test_socket fail intermittently when run inside Koji;
-# disable them using unittest._skipInRpmBuild
-# Not yet sent upstream
-Patch163: 00163-disable-parts-of-test_socket-in-rpm-build.patch
-
# 00170 #
# In debug builds, try to print repr() when a C-level assert fails in the
# garbage collector (typically indicating a reference-counting error
@@ -599,7 +593,6 @@ rm -r Modules/expat
%patch132 -p1
%patch155 -p1
%patch160 -p1
-%patch163 -p1
%patch170 -p1
%patch178 -p1
commit 774c3f329b0d3baf579664f173a7ab4ce9e18672
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Wed Mar 20 12:31:21 2019 +0100
Temporarily skip test_asyncio to workaround bpo-35998
https://bugs.python.org/issue35998
diff --git a/python3.spec b/python3.spec
index e3f202b..6220933 100644
--- a/python3.spec
+++ b/python3.spec
@@ -1024,6 +1024,8 @@ CheckPython() {
#
https://bugzilla.redhat.com/show_bug.cgi?id=1196181
# test_gdb skipped on s390x:
#
https://bugzilla.redhat.com/show_bug.cgi?id=1678277
+ # test_asyncio skipped:
+ #
https://bugs.python.org/issue35998
WITHIN_PYTHON_RPM_BUILD= \
LD_LIBRARY_PATH=$ConfDir $ConfDir/python -m test.regrtest \
-wW --slowest -j0 \
@@ -1035,6 +1037,7 @@ CheckPython() {
%ifarch %{mips64}
-x test_ctypes \
%endif
+ -x test_asyncio \
echo FINISHED: CHECKING OF PYTHON FOR CONFIGURATION: $ConfName
commit 498b8834a091f9b3f85659f1f6a9eb620e23bda9
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Thu Mar 14 12:36:19 2019 +0100
Security fix for CVE-2019-9636 (#1688543, #1688546)
diff --git a/00320-CVE-2019-9636.patch b/00320-CVE-2019-9636.patch
new file mode 100644
index 0000000..49967d5
--- /dev/null
+++ b/00320-CVE-2019-9636.patch
@@ -0,0 +1,150 @@
+From daad2c482c91de32d8305abbccc76a5de8b3a8be Mon Sep 17 00:00:00 2001
+From: Steve Dower <steve.dower(a)microsoft.com>
+Date: Thu, 7 Mar 2019 09:08:18 -0800
+Subject: [PATCH] bpo-36216: Add check for characters in netloc that normalize
+ to separators (GH-12201)
+
+---
+ Doc/library/urllib.parse.rst | 18 +++++++++++++++
+ Lib/test/test_urlparse.py | 23 +++++++++++++++++++
+ Lib/urllib/parse.py | 17 ++++++++++++++
+ .../2019-03-06-09-38-40.bpo-36216.6q1m4a.rst | 3 +++
+ 4 files changed, 61 insertions(+)
+ create mode 100644 Misc/NEWS.d/next/Security/2019-03-06-09-38-40.bpo-36216.6q1m4a.rst
+
+diff --git a/Doc/library/urllib.parse.rst b/Doc/library/urllib.parse.rst
+index 0c8f0f607314..b565e1edd321 100644
+--- a/Doc/library/urllib.parse.rst
++++ b/Doc/library/urllib.parse.rst
+@@ -124,6 +124,11 @@ or on combining URL components into a URL string.
+ Unmatched square brackets in the :attr:`netloc` attribute will raise a
+ :exc:`ValueError`.
+
++ Characters in the :attr:`netloc` attribute that decompose under NFKC
++ normalization (as used by the IDNA encoding) into any of ``/``, ``?``,
++ ``#``, ``@``, or ``:`` will raise a :exc:`ValueError`. If the URL is
++ decomposed before parsing, no error will be raised.
++
+ .. versionchanged:: 3.2
+ Added IPv6 URL parsing capabilities.
+
+@@ -136,6 +141,10 @@ or on combining URL components into a URL string.
+ Out-of-range port numbers now raise :exc:`ValueError`, instead of
+ returning :const:`None`.
+
++ .. versionchanged:: 3.7.3
++ Characters that affect netloc parsing under NFKC normalization will
++ now raise :exc:`ValueError`.
++
+
+ .. function:: parse_qs(qs, keep_blank_values=False, strict_parsing=False,
encoding='utf-8', errors='replace', max_num_fields=None)
+
+@@ -257,10 +266,19 @@ or on combining URL components into a URL string.
+ Unmatched square brackets in the :attr:`netloc` attribute will raise a
+ :exc:`ValueError`.
+
++ Characters in the :attr:`netloc` attribute that decompose under NFKC
++ normalization (as used by the IDNA encoding) into any of ``/``, ``?``,
++ ``#``, ``@``, or ``:`` will raise a :exc:`ValueError`. If the URL is
++ decomposed before parsing, no error will be raised.
++
+ .. versionchanged:: 3.6
+ Out-of-range port numbers now raise :exc:`ValueError`, instead of
+ returning :const:`None`.
+
++ .. versionchanged:: 3.7.3
++ Characters that affect netloc parsing under NFKC normalization will
++ now raise :exc:`ValueError`.
++
+
+ .. function:: urlunsplit(parts)
+
+diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py
+index be50b47603aa..e6638aee2244 100644
+--- a/Lib/test/test_urlparse.py
++++ b/Lib/test/test_urlparse.py
+@@ -1,3 +1,5 @@
++import sys
++import unicodedata
+ import unittest
+ import urllib.parse
+
+@@ -984,6 +986,27 @@ def test_all(self):
+ expected.append(name)
+ self.assertCountEqual(urllib.parse.__all__, expected)
+
++ def test_urlsplit_normalization(self):
++ # Certain characters should never occur in the netloc,
++ # including under normalization.
++ # Ensure that ALL of them are detected and cause an error
++ illegal_chars = '/:#?@'
++ hex_chars = {'{:04X}'.format(ord(c)) for c in illegal_chars}
++ denorm_chars = [
++ c for c in map(chr, range(128, sys.maxunicode))
++ if (hex_chars & set(unicodedata.decomposition(c).split()))
++ and c not in illegal_chars
++ ]
++ # Sanity check that we found at least one such character
++ self.assertIn('\u2100', denorm_chars)
++ self.assertIn('\uFF03', denorm_chars)
++
++ for scheme in ["http", "https", "ftp"]:
++ for c in denorm_chars:
++ url = "{}://netloc{}false.netloc/path".format(scheme, c)
++ with self.subTest(url=url, char='{:04X}'.format(ord(c))):
++ with self.assertRaises(ValueError):
++ urllib.parse.urlsplit(url)
+
+ class Utility_Tests(unittest.TestCase):
+ """Testcase to test the various utility functions in the
urllib."""
+diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py
+index f691ab74f87f..39c5d6a80824 100644
+--- a/Lib/urllib/parse.py
++++ b/Lib/urllib/parse.py
+@@ -391,6 +391,21 @@ def _splitnetloc(url, start=0):
+ delim = min(delim, wdelim) # use earliest delim position
+ return url[start:delim], url[delim:] # return (domain, rest)
+
++def _checknetloc(netloc):
++ if not netloc or netloc.isascii():
++ return
++ # looking for characters like \u2100 that expand to 'a/c'
++ # IDNA uses NFKC equivalence, so normalize for this check
++ import unicodedata
++ netloc2 = unicodedata.normalize('NFKC', netloc)
++ if netloc == netloc2:
++ return
++ _, _, netloc = netloc.rpartition('@') # anything to the left of '@'
is okay
++ for c in '/?#@:':
++ if c in netloc2:
++ raise ValueError("netloc '" + netloc2 + "' contains
invalid " +
++ "characters under NFKC normalization")
++
+ def urlsplit(url, scheme='', allow_fragments=True):
+ """Parse a URL into 5 components:
+ <scheme>://<netloc>/<path>?<query>#<fragment>
+@@ -419,6 +434,7 @@ def urlsplit(url, scheme='', allow_fragments=True):
+ url, fragment = url.split('#', 1)
+ if '?' in url:
+ url, query = url.split('?', 1)
++ _checknetloc(netloc)
+ v = SplitResult('http', netloc, url, query, fragment)
+ _parse_cache[key] = v
+ return _coerce_result(v)
+@@ -442,6 +458,7 @@ def urlsplit(url, scheme='', allow_fragments=True):
+ url, fragment = url.split('#', 1)
+ if '?' in url:
+ url, query = url.split('?', 1)
++ _checknetloc(netloc)
+ v = SplitResult(scheme, netloc, url, query, fragment)
+ _parse_cache[key] = v
+ return _coerce_result(v)
+diff --git a/Misc/NEWS.d/next/Security/2019-03-06-09-38-40.bpo-36216.6q1m4a.rst
b/Misc/NEWS.d/next/Security/2019-03-06-09-38-40.bpo-36216.6q1m4a.rst
+new file mode 100644
+index 000000000000..5546394157f9
+--- /dev/null
++++ b/Misc/NEWS.d/next/Security/2019-03-06-09-38-40.bpo-36216.6q1m4a.rst
+@@ -0,0 +1,3 @@
++Changes urlsplit() to raise ValueError when the URL contains characters that
++decompose under IDNA encoding (NFKC-normalization) into characters that
++affect how the URL is parsed.
diff --git a/python3.spec b/python3.spec
index 766f1cd..e3f202b 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.2
-Release: 7%{?dist}
+Release: 8%{?dist}
License: Python
@@ -311,6 +311,11 @@ Patch316: 00316-mark-bdist_wininst-unsupported.patch
# Fixed upstream
https://bugs.python.org/issue35746
Patch317: 00317-CVE-2019-5010.patch
+# 00320 #
+# Security fix for CVE-2019-9636: Information Disclosure due to urlsplit improper NFKC
normalization
+# Fixed upstream
https://bugs.python.org/issue36216
+Patch320: 00320-CVE-2019-9636.patch
+
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
@@ -608,6 +613,7 @@ rm Lib/ensurepip/_bundled/*.whl
%patch274 -p1
%patch316 -p1
%patch317 -p1
+%patch320 -p1
# Remove files that should be generated by the build
@@ -1525,6 +1531,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Thu Mar 14 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.2-8
+- Security fix for CVE-2019-9636 (#1688543, #1688546)
+
* Sun Feb 17 2019 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 3.7.2-7
- Rebuild for readline 8.0
commit 4b6961f25f28394da892fb090853244660420062
Author: Victor Stinner <vstinner(a)redhat.com>
Date: Thu Jan 31 11:56:28 2019 +0100
Reenable test_gdb on most archs except arm and s390x
gdb has been fixed in Rawhide:
https://bugzilla.redhat.com/show_bug.cgi?id=1638798
https://bugzilla.redhat.com/show_bug.cgi?id=1634781
Install also gdb in selftest to no longer skip test_gdb
on the x86_64 CI.
But test_gdb is still skipped on armv7hl:
https://bugzilla.redhat.com/show_bug.cgi?id=1196181
And skipped on s390x:
https://bugzilla.redhat.com/show_bug.cgi?id=1678277
diff --git a/python3.spec b/python3.spec
index 2ee2188..766f1cd 100644
--- a/python3.spec
+++ b/python3.spec
@@ -1014,12 +1014,18 @@ CheckPython() {
# our non-standard decorators take effect on the relevant tests:
# @unittest._skipInRpmBuild(reason)
# @unittest._expectedFailureInRpmBuild
+ # test_gdb skipped on armv7hl:
+ #
https://bugzilla.redhat.com/show_bug.cgi?id=1196181
+ # test_gdb skipped on s390x:
+ #
https://bugzilla.redhat.com/show_bug.cgi?id=1678277
WITHIN_PYTHON_RPM_BUILD= \
LD_LIBRARY_PATH=$ConfDir $ConfDir/python -m test.regrtest \
-wW --slowest -j0 \
-x test_distutils \
-x test_bdist_rpm \
+ %ifarch %{arm} s390x
-x test_gdb \
+ %endif
%ifarch %{mips64}
-x test_ctypes \
%endif
diff --git a/tests/tests.yml b/tests/tests.yml
index d26ece2..918d0b0 100644
--- a/tests/tests.yml
+++ b/tests/tests.yml
@@ -19,6 +19,7 @@
run: VERSION=3.7 X="-x test_socket -x test_asyncgen -x test_asyncio -x
test_compile -x test_concurrent_futures -x test_itertools -x test_multiprocessing_fork -x
test_multiprocessing_forkserver -x test_shutil -x test_time -x test_multiprocessing_spawn
-x test_threading -x test_wsgiref" ./findleaks.sh
required_packages:
- gcc # for extension building in venv and selftest
+ - gdb # for test_gdb
- python3-debug # for leak testing
- python3-devel # for extension building in venv and selftest
- python3-tkinter # for selftest
commit 1e30f555cf0d557d820db94961e0cbe87119ca79
Author: Victor Stinner <vstinner(a)redhat.com>
Date: Fri Feb 15 14:55:26 2019 +0100
Reenable test_buffer on ppc64le
The test failed because of a GCC bug which has been fixed in GCC
master branch and Rawhide uses GCC 9 (master branch):
*
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88892
*
https://bugzilla.redhat.com/show_bug.cgi?id=1540995
diff --git a/python3.spec b/python3.spec
index 99ae31d..2ee2188 100644
--- a/python3.spec
+++ b/python3.spec
@@ -1023,9 +1023,6 @@ CheckPython() {
%ifarch %{mips64}
-x test_ctypes \
%endif
- %ifarch ppc64le
- -x test_buffer \
- %endif
echo FINISHED: CHECKING OF PYTHON FOR CONFIGURATION: $ConfName
commit 50afd5bbf5df83b27d2eec94c0dc8ed0f7cd1924
Author: Igor Gnatenko <ignatenkobrain(a)fedoraproject.org>
Date: Sun Feb 17 09:30:52 2019 +0100
Rebuild for readline 8.0
diff --git a/python3.spec b/python3.spec
index 387e545..99ae31d 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.2
-Release: 6%{?dist}
+Release: 7%{?dist}
License: Python
@@ -1522,6 +1522,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Sun Feb 17 2019 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 3.7.2-7
+- Rebuild for readline 8.0
+
* Tue Feb 12 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.2-6
- Reduced default build flags used to build extension modules
https://fedoraproject.org/wiki/Changes/Python_Extension_Flags
commit d8428d8696e34c7a1bbf16eb4a32bef1ed78c27e
Author: Tomas Orsava <torsava(a)redhat.com>
Date: Thu Feb 14 17:37:18 2019 +0100
Fix arch names for the ppc architecture
Updated patch 00274
diff --git a/00274-fix-arch-names.patch b/00274-fix-arch-names.patch
index c8e53c1..ee15930 100644
--- a/00274-fix-arch-names.patch
+++ b/00274-fix-arch-names.patch
@@ -1,8 +1,19 @@
+From 3b0d3a25576e74c2ac1eb25136ae811bdbdd7c6c Mon Sep 17 00:00:00 2001
+From: Tomas Orsava <torsava(a)redhat.com>
+Date: Thu, 14 Feb 2019 16:08:57 +0100
+Subject: [PATCH] Upstream uses Debian-style architecture naming. Change to
+ match Fedora / RHEL
+
+---
+ config.sub | 2 +-
+ configure.ac | 16 ++++++++--------
+ 2 files changed, 9 insertions(+), 9 deletions(-)
+
diff --git a/config.sub b/config.sub
-index ba37cf9..52a9ec6 100755
+index 40ea5df..932128b 100755
--- a/config.sub
+++ b/config.sub
-@@ -1042,7 +1042,7 @@ case $basic_machine in
+@@ -1045,7 +1045,7 @@ case $basic_machine in
;;
ppc64) basic_machine=powerpc64-unknown
;;
@@ -12,10 +23,10 @@ index ba37cf9..52a9ec6 100755
ppc64le | powerpc64little)
basic_machine=powerpc64le-unknown
diff --git a/configure.ac b/configure.ac
-index 2535969..9fb3193 100644
+index a075ce3..b7f2ee3 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -765,9 +765,9 @@ cat >> conftest.c <<EOF
+@@ -788,9 +788,9 @@ cat >> conftest.c <<EOF
alpha-linux-gnu
# elif defined(__ARM_EABI__) && defined(__ARM_PCS_VFP)
# if defined(__ARMEL__)
@@ -27,7 +38,7 @@ index 2535969..9fb3193 100644
# endif
# elif defined(__ARM_EABI__) && !defined(__ARM_PCS_VFP)
# if defined(__ARMEL__)
-@@ -807,7 +807,7 @@ cat >> conftest.c <<EOF
+@@ -810,7 +810,7 @@ cat >> conftest.c <<EOF
# elif _MIPS_SIM == _ABIN32
mips64el-linux-gnuabin32
# elif _MIPS_SIM == _ABI64
@@ -36,7 +47,7 @@ index 2535969..9fb3193 100644
# else
# error unknown platform triplet
# endif
-@@ -817,7 +817,7 @@ cat >> conftest.c <<EOF
+@@ -820,22 +820,22 @@ cat >> conftest.c <<EOF
# elif _MIPS_SIM == _ABIN32
mips64-linux-gnuabin32
# elif _MIPS_SIM == _ABI64
@@ -45,8 +56,11 @@ index 2535969..9fb3193 100644
# else
# error unknown platform triplet
# endif
-@@ -827,9 +827,9 @@ cat >> conftest.c <<EOF
- powerpc-linux-gnuspe
+ # elif defined(__or1k__)
+ or1k-linux-gnu
+ # elif defined(__powerpc__) && defined(__SPE__)
+- powerpc-linux-gnuspe
++ ppc-linux-gnuspe
# elif defined(__powerpc64__)
# if defined(__LITTLE_ENDIAN__)
- powerpc64le-linux-gnu
@@ -56,4 +70,11 @@ index 2535969..9fb3193 100644
+ ppc64-linux-gnu
# endif
# elif defined(__powerpc__)
- powerpc-linux-gnu
+- powerpc-linux-gnu
++ ppc-linux-gnu
+ # elif defined(__s390x__)
+ s390x-linux-gnu
+ # elif defined(__s390__)
+--
+2.20.1
+
commit 8927d3f2671041d33c2682b47d238c7070474d0e
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Wed Jan 2 18:15:20 2019 +0100
Reduced default build flags used to build extension modules
Utilize extension_...flags for extension builds.
See
https://fedoraproject.org/wiki/Changes/Python_Extension_Flags
Depends on
https://src.fedoraproject.org/rpms/redhat-rpm-config/c/e80fa1344a49662fec...
diff --git a/python3.spec b/python3.spec
index b910bd2..387e545 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.2
-Release: 5%{?dist}
+Release: 6%{?dist}
License: Python
@@ -167,6 +167,7 @@ BuildRequires: ncurses-devel
BuildRequires: openssl-devel
BuildRequires: pkgconfig
BuildRequires: readline-devel
+BuildRequires: redhat-rpm-config >= 127
BuildRequires: sqlite-devel
BuildRequires: gdb
@@ -436,12 +437,6 @@ Requires: python3-rpm-generators
# See
https://fedoraproject.org/wiki/Packaging:Directory_Replacement
Requires: python3-setuptools
-#
https://bugzilla.redhat.com/show_bug.cgi?id=1217376
-#
https://bugzilla.redhat.com/show_bug.cgi?id=1496757
-#
https://bugzilla.redhat.com/show_bug.cgi?id=1218294
-# TODO change to a specific subpackage once available (#1218294)
-Requires: redhat-rpm-config
-
Provides: %{name}-2to3 = %{version}-%{release}
Provides: 2to3 = %{version}-%{release}
@@ -549,8 +544,6 @@ so extensions for both versions can co-exist in the same directory.
%else # with flatpackage
-Requires: redhat-rpm-config
-
# We'll not provide this, on purpose
# No package in Fedora shall ever depend on flatpackage via this
%global __requires_exclude ^python\\(abi\\) = 3\\..$
@@ -650,13 +643,21 @@ topdir=$(pwd)
%endif
# Set common compiler/linker flags
-export CFLAGS="$RPM_OPT_FLAGS -D_GNU_SOURCE -fPIC -fwrapv"
-export CXXFLAGS="$RPM_OPT_FLAGS -D_GNU_SOURCE -fPIC -fwrapv"
+# We utilize the %%extension_...flags macros here so users building C/C++
+# extensions with our python won't get all the compiler/linker flags used
+# in Fedora RPMs.
+# Standard library built here will still use the %%build_...flags,
+# Fedora packages utilizing %%py3_build will use them as well
+#
https://fedoraproject.org/wiki/Changes/Python_Extension_Flags
+export CFLAGS="%{extension_cflags} -D_GNU_SOURCE -fPIC -fwrapv"
+export CFLAGS_NODIST="%{build_cflags} -D_GNU_SOURCE -fPIC -fwrapv"
+export CXXFLAGS="%{extension_cxxflags} -D_GNU_SOURCE -fPIC -fwrapv"
export CPPFLAGS="$(pkg-config --cflags-only-I libffi)"
-export OPT="$RPM_OPT_FLAGS -D_GNU_SOURCE -fPIC -fwrapv"
+export OPT="%{extension_cflags} -D_GNU_SOURCE -fPIC -fwrapv"
export LINKCC="gcc"
export CFLAGS="$CFLAGS $(pkg-config --cflags openssl)"
-export LDFLAGS="$RPM_LD_FLAGS -g $(pkg-config --libs-only-L openssl)"
+export LDFLAGS="%{extension_ldflags} -g $(pkg-config --libs-only-L openssl)"
+export LDFLAGS_NODIST="%{build_ldflags} -g $(pkg-config --libs-only-L
openssl)"
# We can build several different configurations of Python: regular and debug.
# Define a common function that does one build:
@@ -1521,6 +1522,10 @@ CheckPython optimized
# ======================================================
%changelog
+* Tue Feb 12 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.2-6
+- Reduced default build flags used to build extension modules
+
https://fedoraproject.org/wiki/Changes/Python_Extension_Flags
+
* Sat Feb 02 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.7.2-5
- Rebuilt for
https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
commit a6496be3e23b39b25bc40ad3931b1956fa91c457
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Wed Feb 6 02:25:20 2019 +0100
rpmlint: Python modules don't need to be linked against libc
They are loaded from Python and Python is already linked against libc.
See
https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.o...
diff --git a/python3.rpmlintrc b/python3.rpmlintrc
index d59fe13..e1e2cbe 100644
--- a/python3.rpmlintrc
+++ b/python3.rpmlintrc
@@ -71,5 +71,8 @@ addFilter(r'read-error /usr/lib(64)?/pkgconfig/python-3\.\ddm\.pc
\[Errno 2\]')
# we need this macro to evaluate, even if the line starts with #
addFilter(r'macro-in-comment %\{_pyconfig(32|64)_h\}')
+# Python modules don't need to be linked against libc
+addFilter(r'E: library-not-linked-against-libc
/usr/lib(64)?/python3.\d/lib-dynload/')
+
# SPELLING ERRORS
addFilter(r'spelling-error .* en_US (bytecode|pyc|filename|tkinter|namespaces|pytest)
')
commit 1cdc336f35f414dc65e97b501bb0ed2aef2678cd
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Sat Feb 2 10:18:25 2019 +0000
- Rebuilt for
https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/python3.spec b/python3.spec
index 09908ae..b910bd2 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.2
-Release: 4%{?dist}
+Release: 5%{?dist}
License: Python
@@ -1521,6 +1521,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Sat Feb 02 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.7.2-5
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
* Wed Jan 16 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.2-4
- Security fix for CVE-2019-5010 (#1666519, #1666522)
commit 75005c20f68f3b4ceb734e876b37009c8c3b99f3
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Mon Jan 28 12:54:13 2019 +0100
Clean old cruft, provide pythonX.Y
In diff order:
- gdbm releases in all Fedoras are long above 1:1.13
- the flat package should be called python3.7 but we are lazy to rename
- system-python is long gone, upgrade path works
- python3-enum34 is only required by 2 pkgs [0][1]
- glibc releases in all Fedoras are long above 2.24.90-26
Not removed:
- platform-python obsoletes shall be removed in Fedora 31, they were added in 28
[0]
https://src.fedoraproject.org/rpms/python-qt5/pull-request/3
[1]
https://src.fedoraproject.org/rpms/python-taskflow/pull-request/1
diff --git a/python3.spec b/python3.spec
index 3126463..09908ae 100644
--- a/python3.spec
+++ b/python3.spec
@@ -150,7 +150,7 @@ BuildRequires: expat-devel
BuildRequires: findutils
BuildRequires: gcc-c++
%if %{with gdbm}
-BuildRequires: gdbm-devel >= 1:1.13
+BuildRequires: gdbm-devel
%endif
BuildRequires: glibc-all-langpacks
BuildRequires: glibc-devel
@@ -324,18 +324,16 @@ Patch317: 00317-CVE-2019-5010.patch
# Descriptions, and metadata for subpackages
# ==========================================
+# People might want to dnf install pythonX.Y instead of pythonXY;
+# we enable this in both flat and nonflat package.
+Provides: python%{pybasever} = %{version}-%{release}
+
%if %{without flatpackage}
# Packages with Python modules in standard locations automatically
# depend on python(abi). Provide that here.
Provides: python(abi) = %{pybasever}
-# For backward compatibility only, remove in F29:
-Provides: system-python(abi) = %{pybasever}
-Provides: system-python = %{version}-%{release}
-Provides: system-python%{?_isa} = %{version}-%{release}
-Obsoletes: system-python < %{version}-%{release}
-
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
# In order to support multiple Python interpreters for development purposes,
@@ -395,20 +393,6 @@ the "%{name}-" prefix.
%package libs
Summary: Python runtime libraries
-# The "enum" module is included in the standard library.
-# Provide an upgrade path from the external library.
-Provides: python3-enum34 = 1.0.4-5%{?dist}
-Obsoletes: python3-enum34 < 1.0.4-5%{?dist}
-
-# Python 3 built with glibc >= 2.24.90-26 needs to require it
-# See
https://bugzilla.redhat.com/show_bug.cgi?id=1410644
-Requires: glibc%{?_isa} >= 2.24.90-26
-
-%if %{with gdbm}
-# When built with this (as guarded by the BuildRequires above), require it
-Requires: gdbm-libs%{?_isa} >= 1:1.13
-%endif
-
%if %{with rpmwheels}
Requires: python-setuptools-wheel
Requires: python-pip-wheel
@@ -423,11 +407,6 @@ Provides: bundled(python3-setuptools) = 40.6.2
# See
https://bugzilla.redhat.com/show_bug.cgi?id=1547131
Recommends: %{name}%{?_isa} = %{version}-%{release}
-# For backward compatibility only, remove in F29:
-Provides: system-python-libs = %{version}-%{release}
-Provides: system-python-libs%{?_isa} = %{version}-%{release}
-Obsoletes: system-python-libs < %{version}-%{release}
-
# Shall be removed in Fedora 31
Obsoletes: platform-python-libs < %{platpyver}
Obsoletes: platform-python-libs-devel < %{platpyver}
@@ -468,16 +447,6 @@ Provides: 2to3 = %{version}-%{release}
Conflicts: %{name} < %{version}-%{release}
-#
https://bugzilla.redhat.com/show_bug.cgi?id=1111275
-# /usr/bin/2to3 was moved from python2-tools to python3-tools
-# TODO Remove in Fedora 29
-Conflicts: python2-tools < 2.7.13-17
-Conflicts: python-tools < 2.7.13-17
-#
https://bugzilla.redhat.com/show_bug.cgi?id=1312030
-# /usr/bin/2to3 was moved from python3-tools to python3-devel
-# TODO Remove in Fedora 30
-Conflicts: python3-tools < 3.7
-
# Shall be removed in Fedora 31
Obsoletes: platform-python-devel < %{platpyver}
@@ -959,13 +928,6 @@ ln -s \
%{buildroot}%{_bindir}/python3-debug
%endif
-# System Python: Link the executable to libexec
-# This is for backwards compatibility only and should be removed in Fedora 29
-%if %{without flatpackage}
-mkdir -p %{buildroot}%{_libexecdir}
-ln -s %{_bindir}/python%{pybasever} %{buildroot}%{_libexecdir}/system-python
-%endif
-
# There's 2to3-X.X executable and 2to3 soft link to it.
# No reason to have both, so keep only 2to3 as an executable.
# See
https://bugzilla.redhat.com/show_bug.cgi?id=1111275
@@ -1087,8 +1049,6 @@ CheckPython optimized
%{_bindir}/pydoc*
%{_bindir}/python3
%{_bindir}/pyvenv
-# Remove in Fedora 29:
-%{_libexecdir}/system-python
%else
%{_bindir}/pydoc%{pybasever}
%endif
commit 4e7015b15350c792ee08c610868d213ada26b5b9
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Wed Jan 16 09:13:16 2019 +0100
Security fix for CVE-2019-5010
https://bugs.python.org/issue35746
https://bugzilla.redhat.com/show_bug.cgi?id=1666519
https://bugzilla.redhat.com/show_bug.cgi?id=1666522
diff --git a/00317-CVE-2019-5010.patch b/00317-CVE-2019-5010.patch
new file mode 100644
index 0000000..62e931e
--- /dev/null
+++ b/00317-CVE-2019-5010.patch
@@ -0,0 +1,111 @@
+From c660debb97f4f422255a82fef2d77804552c043a Mon Sep 17 00:00:00 2001
+From: Christian Heimes <christian(a)python.org>
+Date: Tue, 15 Jan 2019 18:16:30 +0100
+Subject: [PATCH] bpo-35746: Fix segfault in ssl's cert parser
+
+CVE-2019-5010, Fix a NULL pointer deref in ssl module. The cert parser did
+not handle CRL distribution points with empty DP or URI correctly. A
+malicious or buggy certificate can result into segfault.
+
+Signed-off-by: Christian Heimes <christian(a)python.org>
+---
+ Lib/test/talos-2019-0758.pem | 22 +++++++++++++++++++
+ Lib/test/test_ssl.py | 22 +++++++++++++++++++
+ .../2019-01-15-18-16-05.bpo-35746.nMSd0j.rst | 3 +++
+ Modules/_ssl.c | 4 ++++
+ 4 files changed, 51 insertions(+)
+ create mode 100644 Lib/test/talos-2019-0758.pem
+ create mode 100644 Misc/NEWS.d/next/Security/2019-01-15-18-16-05.bpo-35746.nMSd0j.rst
+
+diff --git a/Lib/test/talos-2019-0758.pem b/Lib/test/talos-2019-0758.pem
+new file mode 100644
+index 000000000000..13b95a77fd8a
+--- /dev/null
++++ b/Lib/test/talos-2019-0758.pem
+@@ -0,0 +1,22 @@
++-----BEGIN CERTIFICATE-----
++MIIDqDCCApKgAwIBAgIBAjALBgkqhkiG9w0BAQswHzELMAkGA1UEBhMCVUsxEDAO
++BgNVBAMTB2NvZHktY2EwHhcNMTgwNjE4MTgwMDU4WhcNMjgwNjE0MTgwMDU4WjA7
++MQswCQYDVQQGEwJVSzEsMCoGA1UEAxMjY29kZW5vbWljb24tdm0tMi50ZXN0Lmxh
++bC5jaXNjby5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC63fGB
++J80A9Av1GB0bptslKRIUtJm8EeEu34HkDWbL6AJY0P8WfDtlXjlPaLqFa6sqH6ES
++V48prSm1ZUbDSVL8R6BYVYpOlK8/48xk4pGTgRzv69gf5SGtQLwHy8UPBKgjSZoD
++5a5k5wJXGswhKFFNqyyxqCvWmMnJWxXTt2XDCiWc4g4YAWi4O4+6SeeHVAV9rV7C
++1wxqjzKovVe2uZOHjKEzJbbIU6JBPb6TRfMdRdYOw98n1VXDcKVgdX2DuuqjCzHP
++WhU4Tw050M9NaK3eXp4Mh69VuiKoBGOLSOcS8reqHIU46Reg0hqeL8LIL6OhFHIF
++j7HR6V1X6F+BfRS/AgMBAAGjgdYwgdMwCQYDVR0TBAIwADAdBgNVHQ4EFgQUOktp
++HQjxDXXUg8prleY9jeLKeQ4wTwYDVR0jBEgwRoAUx6zgPygZ0ZErF9sPC4+5e2Io
++UU+hI6QhMB8xCzAJBgNVBAYTAlVLMRAwDgYDVQQDEwdjb2R5LWNhggkA1QEAuwb7
++2s0wCQYDVR0SBAIwADAuBgNVHREEJzAlgiNjb2Rlbm9taWNvbi12bS0yLnRlc3Qu
++bGFsLmNpc2NvLmNvbTAOBgNVHQ8BAf8EBAMCBaAwCwYDVR0fBAQwAjAAMAsGCSqG
++SIb3DQEBCwOCAQEAvqantx2yBlM11RoFiCfi+AfSblXPdrIrHvccepV4pYc/yO6p
++t1f2dxHQb8rWH3i6cWag/EgIZx+HJQvo0rgPY1BFJsX1WnYf1/znZpkUBGbVmlJr
++t/dW1gSkNS6sPsM0Q+7HPgEv8CPDNK5eo7vU2seE0iWOkxSyVUuiCEY9ZVGaLVit
++p0C78nZ35Pdv4I+1cosmHl28+es1WI22rrnmdBpH8J1eY6WvUw2xuZHLeNVN0TzV
++Q3qq53AaCWuLOD1AjESWuUCxMZTK9DPS4JKXTK8RLyDeqOvJGjsSWp3kL0y3GaQ+
++10T1rfkKJub2+m9A9duin1fn6tHc2wSvB7m3DA==
++-----END CERTIFICATE-----
+diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
+index 7f6b93148f45..1fc657f4d867 100644
+--- a/Lib/test/test_ssl.py
++++ b/Lib/test/test_ssl.py
+@@ -115,6 +115,7 @@ def data_file(*name):
+ BADKEY = data_file("badkey.pem")
+ NOKIACERT = data_file("nokia.pem")
+ NULLBYTECERT = data_file("nullbytecert.pem")
++TALOS_INVALID_CRLDP = data_file("talos-2019-0758.pem")
+
+ DHFILE = data_file("ffdh3072.pem")
+ BYTES_DHFILE = os.fsencode(DHFILE)
+@@ -348,6 +349,27 @@ def test_parse_cert(self):
+ self.assertEqual(p['crlDistributionPoints'],
+ ('http://SVRIntl-G3-crl.verisign.com/SVRIntlG3.crl',))
+
++ def test_parse_cert_CVE_2019_5010(self):
++ p = ssl._ssl._test_decode_cert(TALOS_INVALID_CRLDP)
++ if support.verbose:
++ sys.stdout.write("\n" + pprint.pformat(p) + "\n")
++ self.assertEqual(
++ p,
++ {
++ 'issuer': (
++ (('countryName', 'UK'),), (('commonName',
'cody-ca'),)),
++ 'notAfter': 'Jun 14 18:00:58 2028 GMT',
++ 'notBefore': 'Jun 18 18:00:58 2018 GMT',
++ 'serialNumber': '02',
++ 'subject': ((('countryName', 'UK'),),
++ (('commonName',
++ 'codenomicon-vm-2.test.lal.cisco.com'),)),
++ 'subjectAltName': (
++ ('DNS', 'codenomicon-vm-2.test.lal.cisco.com'),),
++ 'version': 3
++ }
++ )
++
+ def test_parse_cert_CVE_2013_4238(self):
+ p = ssl._ssl._test_decode_cert(NULLBYTECERT)
+ if support.verbose:
+diff --git a/Misc/NEWS.d/next/Security/2019-01-15-18-16-05.bpo-35746.nMSd0j.rst
b/Misc/NEWS.d/next/Security/2019-01-15-18-16-05.bpo-35746.nMSd0j.rst
+new file mode 100644
+index 000000000000..dffe347eec84
+--- /dev/null
++++ b/Misc/NEWS.d/next/Security/2019-01-15-18-16-05.bpo-35746.nMSd0j.rst
+@@ -0,0 +1,3 @@
++[CVE-2019-5010] Fix a NULL pointer deref in ssl module. The cert parser did
++not handle CRL distribution points with empty DP or URI correctly. A
++malicious or buggy certificate can result into segfault.
+diff --git a/Modules/_ssl.c b/Modules/_ssl.c
+index 4e3352d9e661..0e720e268d93 100644
+--- a/Modules/_ssl.c
++++ b/Modules/_ssl.c
+@@ -1515,6 +1515,10 @@ _get_crl_dp(X509 *certificate) {
+ STACK_OF(GENERAL_NAME) *gns;
+
+ dp = sk_DIST_POINT_value(dps, i);
++ if (dp->distpoint == NULL) {
++ /* Ignore empty DP value, CVE-2019-5010 */
++ continue;
++ }
+ gns = dp->distpoint->name.fullname;
+
+ for (j=0; j < sk_GENERAL_NAME_num(gns); j++) {
diff --git a/python3.spec b/python3.spec
index dba250b..3126463 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.2
-Release: 3%{?dist}
+Release: 4%{?dist}
License: Python
@@ -305,6 +305,11 @@ Patch274: 00274-fix-arch-names.patch
# So we mark the command as unsupported - and the tests are skipped
Patch316: 00316-mark-bdist_wininst-unsupported.patch
+# 00317 #
+# Security fix for CVE-2019-5010: Fix segfault in ssl's cert parser
+# Fixed upstream
https://bugs.python.org/issue35746
+Patch317: 00317-CVE-2019-5010.patch
+
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
@@ -640,6 +645,7 @@ rm Lib/ensurepip/_bundled/*.whl
%patch251 -p1
%patch274 -p1
%patch316 -p1
+%patch317 -p1
# Remove files that should be generated by the build
@@ -1555,6 +1561,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Wed Jan 16 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.2-4
+- Security fix for CVE-2019-5010 (#1666519, #1666522)
+
* Mon Jan 14 2019 Bjrn Esser <besser82(a)fedoraproject.org> - 3.7.2-3
- Rebuilt for libcrypt.so.2 (#1666033)
commit 053863ab4146d8f26c0c8b7bb01015a7af29275e
Author: Bjrn Esser <besser82(a)fedoraproject.org>
Date: Mon Jan 14 18:53:46 2019 +0100
Rebuilt for libcrypt.so.2 (#1666033)
diff --git a/python3.spec b/python3.spec
index 6f9d923..dba250b 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.2
-Release: 2%{?dist}
+Release: 3%{?dist}
License: Python
@@ -1555,6 +1555,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Mon Jan 14 2019 Bjrn Esser <besser82(a)fedoraproject.org> - 3.7.2-3
+- Rebuilt for libcrypt.so.2 (#1666033)
+
* Fri Jan 04 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.2-2
- No longer revert upstream commit 3b699932e5ac3e7
- This was a dirty workaround for (#1644936)
commit 41f5904a99d5a024993b41ffcadacaa6e5a42ebf
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Fri Jan 4 23:52:11 2019 +0100
No longer revert upstream commit 3b699932e5ac3e7
This was a dirty workaround for
https://bugzilla.redhat.com/show_bug.cgi?id=1644936
diff --git a/00312-revert-bpo-6721.patch b/00312-revert-bpo-6721.patch
deleted file mode 100644
index c3350bf..0000000
--- a/00312-revert-bpo-6721.patch
+++ /dev/null
@@ -1,168 +0,0 @@
-From 583bb07116505dcc73c0fc4aa3c1cf5074f3522d Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro(a)hroncok.cz>
-Date: Fri, 2 Nov 2018 14:01:28 +0100
-Subject: [PATCH] Revert "bpo-6721: Hold logging locks across fork() (GH-4071)
- (#9291)"
-
-This reverts commit 3b699932e5ac3e76031bbb6d700fbea07492641d.
----
- Lib/logging/__init__.py | 50 ------------------------------
- Lib/test/test_logging.py | 67 ----------------------------------------
- 2 files changed, 117 deletions(-)
-
-diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py
-index 3ad2cc38f6..53780cd600 100644
---- a/Lib/logging/__init__.py
-+++ b/Lib/logging/__init__.py
-@@ -225,55 +225,6 @@ def _releaseLock():
- if _lock:
- _lock.release()
-
--
--# Prevent a held logging lock from blocking a child from logging.
--
--if not hasattr(os, 'register_at_fork'): # Windows and friends.
-- def _register_at_fork_acquire_release(instance):
-- pass # no-op when os.register_at_fork does not exist.
--else: # The os.register_at_fork API exists
-- os.register_at_fork(before=_acquireLock,
-- after_in_child=_releaseLock,
-- after_in_parent=_releaseLock)
--
-- # A collection of instances with acquire and release methods (logging.Handler)
-- # to be called before and after fork. The weakref avoids us keeping discarded
-- # Handler instances alive forever in case an odd program creates and destroys
-- # many over its lifetime.
-- _at_fork_acquire_release_weakset = weakref.WeakSet()
--
--
-- def _register_at_fork_acquire_release(instance):
-- # We put the instance itself in a single WeakSet as we MUST have only
-- # one atomic weak ref. used by both before and after atfork calls to
-- # guarantee matched pairs of acquire and release calls.
-- _at_fork_acquire_release_weakset.add(instance)
--
--
-- def _at_fork_weak_calls(method_name):
-- for instance in _at_fork_acquire_release_weakset:
-- method = getattr(instance, method_name)
-- try:
-- method()
-- except Exception as err:
-- # Similar to what PyErr_WriteUnraisable does.
-- print("Ignoring exception from logging atfork", instance,
-- method_name, "method:", err, file=sys.stderr)
--
--
-- def _before_at_fork_weak_calls():
-- _at_fork_weak_calls('acquire')
--
--
-- def _after_at_fork_weak_calls():
-- _at_fork_weak_calls('release')
--
--
-- os.register_at_fork(before=_before_at_fork_weak_calls,
-- after_in_child=_after_at_fork_weak_calls,
-- after_in_parent=_after_at_fork_weak_calls)
--
--
- #---------------------------------------------------------------------------
- # The logging record
- #---------------------------------------------------------------------------
-@@ -844,7 +795,6 @@ class Handler(Filterer):
- Acquire a thread lock for serializing access to the underlying I/O.
- """
- self.lock = threading.RLock()
-- _register_at_fork_acquire_release(self)
-
- def acquire(self):
- """
-diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
-index 1ea2967f5b..5d5eba7357 100644
---- a/Lib/test/test_logging.py
-+++ b/Lib/test/test_logging.py
-@@ -35,7 +35,6 @@ import os
- import queue
- import random
- import re
--import signal
- import socket
- import struct
- import sys
-@@ -667,72 +666,6 @@ class HandlerTest(BaseTest):
- if os.path.exists(fn):
- os.unlink(fn)
-
-- # The implementation relies on os.register_at_fork existing, but we test
-- # based on os.fork existing because that is what users and this test use.
-- # This helps ensure that when fork exists (the important concept) that the
-- # register_at_fork mechanism is also present and used.
-- @unittest.skipIf(not hasattr(os, 'fork'), 'Test requires
os.fork().')
-- def test_post_fork_child_no_deadlock(self):
-- """Ensure forked child logging locks are not held;
bpo-6721."""
-- refed_h = logging.Handler()
-- refed_h.name = 'because we need at least one for this test'
-- self.assertGreater(len(logging._handlers), 0)
--
-- locks_held__ready_to_fork = threading.Event()
-- fork_happened__release_locks_and_end_thread = threading.Event()
--
-- def lock_holder_thread_fn():
-- logging._acquireLock()
-- try:
-- refed_h.acquire()
-- try:
-- # Tell the main thread to do the fork.
-- locks_held__ready_to_fork.set()
--
-- # If the deadlock bug exists, the fork will happen
-- # without dealing with the locks we hold, deadlocking
-- # the child.
--
-- # Wait for a successful fork or an unreasonable amount of
-- # time before releasing our locks. To avoid a timing based
-- # test we'd need communication from os.fork() as to when it
-- # has actually happened. Given this is a regression test
-- # for a fixed issue, potentially less reliably detecting
-- # regression via timing is acceptable for simplicity.
-- # The test will always take at least this long. :(
-- fork_happened__release_locks_and_end_thread.wait(0.5)
-- finally:
-- refed_h.release()
-- finally:
-- logging._releaseLock()
--
-- lock_holder_thread = threading.Thread(
-- target=lock_holder_thread_fn,
-- name='test_post_fork_child_no_deadlock lock holder')
-- lock_holder_thread.start()
--
-- locks_held__ready_to_fork.wait()
-- pid = os.fork()
-- if pid == 0: # Child.
-- logging.error(r'Child process did not deadlock. \o/')
-- os._exit(0)
-- else: # Parent.
-- fork_happened__release_locks_and_end_thread.set()
-- lock_holder_thread.join()
-- start_time = time.monotonic()
-- while True:
-- waited_pid, status = os.waitpid(pid, os.WNOHANG)
-- if waited_pid == pid:
-- break # child process exited.
-- if time.monotonic() - start_time > 7:
-- break # so long? implies child deadlock.
-- time.sleep(0.05)
-- if waited_pid != pid:
-- os.kill(pid, signal.SIGKILL)
-- waited_pid, status = os.waitpid(pid, 0)
-- self.fail("child process deadlocked.")
-- self.assertEqual(status, 0, msg="child process error")
--
-
- class BadStream(object):
- def write(self, data):
---
-2.19.1
-
diff --git a/python3.spec b/python3.spec
index 7a730f8..6f9d923 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.2
-Release: 1%{?dist}
+Release: 2%{?dist}
License: Python
@@ -300,13 +300,6 @@ Patch251: 00251-change-user-install-location.patch
# Upstream uses Debian-style architecture naming. Change to match Fedora.
Patch274: 00274-fix-arch-names.patch
-# 00312 #
-# Revert "bpo-6721: Hold logging locks across fork() 3b699932e5ac3e7
-# This is a TEMPORARY WORKAROUND for an urgent Fedora bug
-# TODO Investigate properly and get a real fix (here or in anaconda)!
-# See:
https://bugzilla.redhat.com/show_bug.cgi?id=1644936
-Patch312: 00312-revert-bpo-6721.patch
-
# 00316 #
# We remove the exe files from distutil's bdist_wininst
# So we mark the command as unsupported - and the tests are skipped
@@ -646,7 +639,6 @@ rm Lib/ensurepip/_bundled/*.whl
%patch205 -p1
%patch251 -p1
%patch274 -p1
-%patch312 -p1
%patch316 -p1
@@ -1563,6 +1555,10 @@ CheckPython optimized
# ======================================================
%changelog
+* Fri Jan 04 2019 Miro Hronok <mhroncok(a)redhat.com> - 3.7.2-2
+- No longer revert upstream commit 3b699932e5ac3e7
+- This was a dirty workaround for (#1644936)
+
* Tue Dec 25 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.2-1
- Update to 3.7.2
commit 1385d6e65a65c4820b5778218da41e1beddb9484
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Wed Dec 12 07:58:52 2018 +0100
Update to 3.7.2
Already upstreamed patches: 313, 315
Patches rebased: 111, 189 (new pip/setuptools versions only)
diff --git a/00111-no-static-lib.patch b/00111-no-static-lib.patch
index 5bfff87..4cce364 100644
--- a/00111-no-static-lib.patch
+++ b/00111-no-static-lib.patch
@@ -1,17 +1,17 @@
diff --git a/Makefile.pre.in b/Makefile.pre.in
-index 0eddd13..7ed4f3c 100644
+index 0db0dd0..bd8f769 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
-@@ -565,7 +565,7 @@ clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c
+@@ -574,7 +574,7 @@ clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c
$(PYTHON_FOR_REGEN) $(srcdir)/Tools/clinic/clinic.py --make --srcdir $(srcdir)
# Build the interpreter
-$(BUILDPYTHON): Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY)
+$(BUILDPYTHON): Programs/python.o $(LDLIBRARY) $(PY3LIBRARY)
- $(LINKCC) $(PY_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS)
$(MODLIBS) $(SYSLIBS) $(LDLAST)
+ $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY)
$(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
platform: $(BUILDPYTHON) pybuilddir.txt
-@@ -609,12 +609,6 @@ sharedmods: $(BUILDPYTHON) pybuilddir.txt Modules/_math.o
+@@ -622,12 +622,6 @@ sharedmods: $(BUILDPYTHON) pybuilddir.txt Modules/_math.o
_TCLTK_INCLUDES='$(TCLTK_INCLUDES)' _TCLTK_LIBS='$(TCLTK_LIBS)' \
$(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build
@@ -24,16 +24,16 @@ index 0eddd13..7ed4f3c 100644
libpython$(LDVERSION).so: $(LIBRARY_OBJS)
if test $(INSTSONAME) != $(LDLIBRARY); then \
$(BLDSHARED) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS)
$(LIBC) $(LIBM) $(LDLAST); \
-@@ -702,7 +696,7 @@ Modules/Setup: $(srcdir)/Modules/Setup.dist
+@@ -715,7 +709,7 @@ Modules/Setup: $(srcdir)/Modules/Setup.dist
echo "-----------------------------------------------"; \
fi
-Programs/_testembed: Programs/_testembed.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY)
+Programs/_testembed: Programs/_testembed.o $(LDLIBRARY) $(PY3LIBRARY)
- $(LINKCC) $(PY_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/_testembed.o $(BLDLIBRARY)
$(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
+ $(LINKCC) $(PY_CORE_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/_testembed.o $(BLDLIBRARY)
$(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
############################################################################
-@@ -1460,17 +1454,6 @@ libainstall: @DEF_MAKE_RULE@ python-config
+@@ -1483,17 +1477,6 @@ libainstall: @DEF_MAKE_RULE@ python-config
else true; \
fi; \
done
diff --git a/00189-use-rpm-wheels.patch b/00189-use-rpm-wheels.patch
index cc2719b..1afdab1 100644
--- a/00189-use-rpm-wheels.patch
+++ b/00189-use-rpm-wheels.patch
@@ -16,9 +16,9 @@ index 4748ba4..fc02255 100644
+_WHEEL_DIR = "/usr/share/python-wheels/"
--_SETUPTOOLS_VERSION = "39.0.1"
+-_SETUPTOOLS_VERSION = "40.6.2"
--_PIP_VERSION = "10.0.1"
+-_PIP_VERSION = "18.1"
+def _get_most_recent_wheel_version(pkg):
+ prefix = os.path.join(_WHEEL_DIR, "{}-".format(pkg))
+ suffix = "-py2.py3-none-any.whl"
diff --git a/00313-cprofile-sort-option.patch b/00313-cprofile-sort-option.patch
deleted file mode 100644
index fe427e5..0000000
--- a/00313-cprofile-sort-option.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-commit c36e8721f276e7cc09cecdb9c04783630f0ba82a
-Author: Victor Stinner <vstinner(a)redhat.com>
-Date: Wed Nov 7 00:34:22 2018 +0100
-
- bpo-23420: Verify the value of '-s' when execute the CLI of cProfile
-
- Verify the value for the parameter '-s' of the cProfile CLI. Patch by Robert
- Kuska.
-
- Resolves: rhbz#1160640
-
-diff --git a/Lib/cProfile.py b/Lib/cProfile.py
-index c044be8..f6e423b 100755
---- a/Lib/cProfile.py
-+++ b/Lib/cProfile.py
-@@ -124,6 +124,7 @@ def main():
- import os
- import sys
- import runpy
-+ import pstats
- from optparse import OptionParser
- usage = "cProfile.py [-o output_file_path] [-s sort] [-m module | scriptfile]
[arg] ..."
- parser = OptionParser(usage=usage)
-@@ -132,7 +133,8 @@ def main():
- help="Save stats to <outfile>", default=None)
- parser.add_option('-s', '--sort', dest="sort",
- help="Sort order when printing to stdout, based on pstats.Stats
class",
-- default=-1)
-+ default=-1,
-+ choices=sorted(pstats.Stats.sort_arg_dict_default))
- parser.add_option('-m', dest="module",
action="store_true",
- help="Profile a library module", default=False)
-
-diff --git a/Lib/test/test_cprofile.py b/Lib/test/test_cprofile.py
-index 1430d22..5c4ec5b 100644
---- a/Lib/test/test_cprofile.py
-+++ b/Lib/test/test_cprofile.py
-@@ -2,6 +2,7 @@
-
- import sys
- from test.support import run_unittest, TESTFN, unlink
-+import unittest
-
- # rip off all interesting stuff from test_profile
- import cProfile
-@@ -50,8 +51,14 @@ class CProfileTest(ProfileTest):
- assert_python_ok('-m', 'cProfile', '-m',
'timeit', '-n', '1')
-
-
-+class TestCommandLine(unittest.TestCase):
-+ def test_sort(self):
-+ rc, out, err = assert_python_failure('-m', 'cProfile',
'-s', 'demo')
-+ self.assertGreater(rc, 0)
-+ self.assertIn(b"option -s: invalid choice: 'demo'", err)
-+
- def test_main():
-- run_unittest(CProfileTest)
-+ run_unittest(CProfileTest, TestCommandLine)
-
- def main():
- if '-r' not in sys.argv:
diff --git a/00315-test_email-mktime.patch b/00315-test_email-mktime.patch
deleted file mode 100644
index aacdcd6..0000000
--- a/00315-test_email-mktime.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 0165caf04ef9c615c8b86dd16f7c201ca7a0befa Mon Sep 17 00:00:00 2001
-From: Victor Stinner <vstinner(a)redhat.com>
-Date: Tue, 27 Nov 2018 12:40:50 +0100
-Subject: [PATCH] bpo-35317: Fix mktime() error in test_email (GH-10721)
-
-Fix mktime() overflow error in test_email: run
-test_localtime_daylight_true_dst_true() and
-test_localtime_daylight_false_dst_true() with a specific timezone.
-(cherry picked from commit cfaafda8e3e19764682abb4bd4c574accb784c42)
-
-Co-authored-by: Victor Stinner <vstinner(a)redhat.com>
----
- Lib/test/test_email/test_utils.py | 2 ++
- .../NEWS.d/next/Tests/2018-11-26-16-54-21.bpo-35317.jByGP2.rst | 3 +++
- 2 files changed, 5 insertions(+)
- create mode 100644 Misc/NEWS.d/next/Tests/2018-11-26-16-54-21.bpo-35317.jByGP2.rst
-
-diff --git a/Lib/test/test_email/test_utils.py b/Lib/test/test_email/test_utils.py
-index 6dcb3bbe7aab..4e3c3f3a195f 100644
---- a/Lib/test/test_email/test_utils.py
-+++ b/Lib/test/test_email/test_utils.py
-@@ -75,6 +75,7 @@ def test_localtime_daylight_false_dst_false(self):
- t2 = utils.localtime(t1)
- self.assertEqual(t1, t2)
-
-+ @test.support.run_with_tz('Europe/Minsk')
- def test_localtime_daylight_true_dst_true(self):
- test.support.patch(self, time, 'daylight', True)
- t0 = datetime.datetime(2012, 3, 12, 1, 1)
-@@ -82,6 +83,7 @@ def test_localtime_daylight_true_dst_true(self):
- t2 = utils.localtime(t1)
- self.assertEqual(t1, t2)
-
-+ @test.support.run_with_tz('Europe/Minsk')
- def test_localtime_daylight_false_dst_true(self):
- test.support.patch(self, time, 'daylight', False)
- t0 = datetime.datetime(2012, 3, 12, 1, 1)
-diff --git a/Misc/NEWS.d/next/Tests/2018-11-26-16-54-21.bpo-35317.jByGP2.rst
b/Misc/NEWS.d/next/Tests/2018-11-26-16-54-21.bpo-35317.jByGP2.rst
-new file mode 100644
-index 000000000000..73a30f71927f
---- /dev/null
-+++ b/Misc/NEWS.d/next/Tests/2018-11-26-16-54-21.bpo-35317.jByGP2.rst
-@@ -0,0 +1,3 @@
-+Fix ``mktime()`` overflow error in ``test_email``: run
-+``test_localtime_daylight_true_dst_true()`` and
-+``test_localtime_daylight_false_dst_true()`` with a specific timezone.
diff --git a/python3.spec b/python3.spec
index 2e3569c..7a730f8 100644
--- a/python3.spec
+++ b/python3.spec
@@ -13,8 +13,8 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
-Version: %{pybasever}.1
-Release: 5%{?dist}
+Version: %{pybasever}.2
+Release: 1%{?dist}
License: Python
@@ -307,18 +307,6 @@ Patch274: 00274-fix-arch-names.patch
# See:
https://bugzilla.redhat.com/show_bug.cgi?id=1644936
Patch312: 00312-revert-bpo-6721.patch
-# 00313 #
-# Verify the value of '-s' when execute the CLI of cProfile
-#
http://bugs.python.org/issue23420
-#
https://bugzilla.redhat.com/show_bug.cgi?id=1160640
-Patch313: 00313-cprofile-sort-option.patch
-
-# 00315 #
-# Fix mktime() error in test_email
-#
http://bugs.python.org/issue35317
-#
https://bugzilla.redhat.com/show_bug.cgi?id=1652843
-Patch315: 00315-test_email-mktime.patch
-
# 00316 #
# We remove the exe files from distutil's bdist_wininst
# So we mark the command as unsupported - and the tests are skipped
@@ -427,8 +415,8 @@ Requires: gdbm-libs%{?_isa} >= 1:1.13
Requires: python-setuptools-wheel
Requires: python-pip-wheel
%else
-Provides: bundled(python3-pip) = 10.0.1
-Provides: bundled(python3-setuptools) = 39.0.1
+Provides: bundled(python3-pip) = 18.1
+Provides: bundled(python3-setuptools) = 40.6.2
%endif
# There are files in the standard library that have python shebang.
@@ -605,8 +593,8 @@ Requires: redhat-rpm-config
Requires: python-setuptools-wheel
Requires: python-pip-wheel
%else
-Provides: bundled(python3-pip) = 10.0.1
-Provides: bundled(python3-setuptools) = 39.0.1
+Provides: bundled(python3-pip) = 18.1
+Provides: bundled(python3-setuptools) = 40.6.2
%endif
# The description for the flat package
@@ -659,8 +647,6 @@ rm Lib/ensurepip/_bundled/*.whl
%patch251 -p1
%patch274 -p1
%patch312 -p1
-%patch313 -p1
-%patch315 -p1
%patch316 -p1
@@ -1356,6 +1342,7 @@ CheckPython optimized
%exclude %{_includedir}/python%{LDVERSION_optimized}/%{_pyconfig_h}
%endif
%{_includedir}/python%{LDVERSION_optimized}/*.h
+%{_includedir}/python%{LDVERSION_optimized}/internal/
%doc Misc/README.valgrind Misc/valgrind-python.supp Misc/gdbinit
%if %{without flatpackage}
@@ -1576,6 +1563,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Tue Dec 25 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.2-1
+- Update to 3.7.2
+
* Fri Dec 07 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.1-5
- Make sure we don't ship any exe files (not needed an prebuilt)
diff --git a/sources b/sources
index 4d40818..64dca46 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (Python-3.7.1.tar.xz) =
3eb62a0127609b14420a47442727702f396519c649625aca59883d04f4c02e5f37ba1d58ac8e93c49d14a63f17ae7909315c33fc813293dbcdb6127f39a148b0
+SHA512 (Python-3.7.2.tar.xz) =
6cd2d6d8455558783b99d55985cd7b22d67b98f41a09b4fdd96f680a630a4e035220d2b903f8c59ed513aa5ffe6730fa947ddb55bb72ce36f0e945ef8af5d971
commit 15d5b5cfc53df90ea4d499bfdc405d1ada88cc26
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Thu Dec 20 12:46:25 2018 +0100
Mark bdist_wininst unsupported to skip the tests
See also
https://src.fedoraproject.org/rpms/python3/pull-request/74
diff --git a/00316-mark-bdist_wininst-unsupported.patch
b/00316-mark-bdist_wininst-unsupported.patch
new file mode 100644
index 0000000..a6a3faf
--- /dev/null
+++ b/00316-mark-bdist_wininst-unsupported.patch
@@ -0,0 +1,13 @@
+diff --git a/Lib/distutils/command/bdist_wininst.py
b/Lib/distutils/command/bdist_wininst.py
+index 0871a4f..8796b68 100644
+--- a/Lib/distutils/command/bdist_wininst.py
++++ b/Lib/distutils/command/bdist_wininst.py
+@@ -12,6 +12,8 @@ from distutils.sysconfig import get_python_version
+ from distutils import log
+
+ class bdist_wininst(Command):
++ # Marker for tests that we have the unsupported bdist_wininst
++ _unsupported = True
+
+ description = "create an executable installer for MS Windows"
+
diff --git a/python3.spec b/python3.spec
index 6ba9805..2e3569c 100644
--- a/python3.spec
+++ b/python3.spec
@@ -319,6 +319,11 @@ Patch313: 00313-cprofile-sort-option.patch
#
https://bugzilla.redhat.com/show_bug.cgi?id=1652843
Patch315: 00315-test_email-mktime.patch
+# 00316 #
+# We remove the exe files from distutil's bdist_wininst
+# So we mark the command as unsupported - and the tests are skipped
+Patch316: 00316-mark-bdist_wininst-unsupported.patch
+
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
@@ -656,6 +661,7 @@ rm Lib/ensurepip/_bundled/*.whl
%patch312 -p1
%patch313 -p1
%patch315 -p1
+%patch316 -p1
# Remove files that should be generated by the build
commit 0e0fe4ff87c90aa88ad57b5456a7229c0051c0df
Author: Victor Stinner <vstinner(a)redhat.com>
Date: Tue Dec 18 15:41:35 2018 +0100
Remove patches fixed upstream
Remove patches:
* 00291-setup-Link-ctypes-against-dl-explicitly.patch
Fixed upstream:
https://bugs.python.org/issue32647
* 00292-restore-PyExc_RecursionErrorInst-symbol.patch
Fixed upstream:
https://bugs.python.org/issue30697
* 00294-define-TLS-cipher-suite-on-build-time.patch
Fixed upstream:
https://bugs.python.org/issue31429
* 00301-pathfix-add-n-option-for-no-backup.patch
Fixed upstream:
https://bugs.python.org/issue32885
* 00302-fix-multiprocessing-regression-on-newer-glibcs.patch
Fixed upstream:
https://bugs.python.org/issue33329
Note: the ctypes issue has been fixed differently (better fix)
upstream.
diff --git a/00291-setup-Link-ctypes-against-dl-explicitly.patch
b/00291-setup-Link-ctypes-against-dl-explicitly.patch
deleted file mode 100644
index 4bf4801..0000000
--- a/00291-setup-Link-ctypes-against-dl-explicitly.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From aae2ef0bace0e38f4ee5aaa4642aa32450a84216 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Bj=C3=B6rn=20Esser?= <besser82(a)fedoraproject.org>
-Date: Tue, 23 Jan 2018 14:43:43 +0100
-Subject: [PATCH] setup: Link ctypes against dl explicitly
-
----
- setup.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/setup.py b/setup.py
-index c23628a2a9..9e40bb53e6 100644
---- a/setup.py
-+++ b/setup.py
-@@ -1935,7 +1935,7 @@ class PyBuildExt(build_ext):
- self.use_system_libffi = False
- include_dirs = []
- extra_compile_args = []
-- extra_link_args = []
-+ extra_link_args = ['-ldl']
- sources = ['_ctypes/_ctypes.c',
- '_ctypes/callbacks.c',
- '_ctypes/callproc.c',
---
-2.16.1
-
diff --git a/00292-restore-PyExc_RecursionErrorInst-symbol.patch
b/00292-restore-PyExc_RecursionErrorInst-symbol.patch
deleted file mode 100644
index 89671f8..0000000
--- a/00292-restore-PyExc_RecursionErrorInst-symbol.patch
+++ /dev/null
@@ -1,106 +0,0 @@
-diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst
-index 847b50140a6..570dc3ed6fe 100644
---- a/Doc/whatsnew/3.6.rst
-+++ b/Doc/whatsnew/3.6.rst
-@@ -1852,10 +1852,10 @@ Build and C API Changes
- * The :c:func:`PyUnicode_FSConverter` and :c:func:`PyUnicode_FSDecoder`
- functions will now accept :term:`path-like objects <path-like object>`.
-
--* The ``PyExc_RecursionErrorInst`` singleton that was part of the public API
-- has been removed as its members being never cleared may cause a segfault
-- during finalization of the interpreter. Contributed by Xavier de Gaye in
-- :issue:`22898` and :issue:`30697`.
-+* The ``PyExc_RecursionErrorInst`` singleton is not used anymore as its members
-+ being never cleared may cause a segfault during finalization of the
-+ interpreter. Contributed by Xavier de Gaye in :issue:`22898` and
-+ :issue:`30697`.
-
-
- Other Improvements
-diff --git a/Include/pyerrors.h b/Include/pyerrors.h
-index c28c1373f82..8c1dbc5047b 100644
---- a/Include/pyerrors.h
-+++ b/Include/pyerrors.h
-@@ -219,6 +219,8 @@ PyAPI_DATA(PyObject *) PyExc_IOError;
- PyAPI_DATA(PyObject *) PyExc_WindowsError;
- #endif
-
-+PyAPI_DATA(PyObject *) PyExc_RecursionErrorInst;
-+
- /* Predefined warning categories */
- PyAPI_DATA(PyObject *) PyExc_Warning;
- PyAPI_DATA(PyObject *) PyExc_UserWarning;
-diff --git a/Misc/NEWS.d/next/C API/2017-12-20-15-23-06.bpo-30697.v9FmgG.rst
b/Misc/NEWS.d/next/C API/2017-12-20-15-23-06.bpo-30697.v9FmgG.rst
-new file mode 100644
-index 00000000000..28f74ad4f30
---- /dev/null
-+++ b/Misc/NEWS.d/next/C API/2017-12-20-15-23-06.bpo-30697.v9FmgG.rst
-@@ -0,0 +1 @@
-+Restore PyExc_RecursionErrorInst in 3.6
-diff --git a/Objects/exceptions.c b/Objects/exceptions.c
-index df4899372a5..271e293e325 100644
---- a/Objects/exceptions.c
-+++ b/Objects/exceptions.c
-@@ -2430,6 +2430,12 @@ SimpleExtendsException(PyExc_Warning, ResourceWarning,
-
-
-
-+/* Pre-computed RecursionError instance for when recursion depth is reached.
-+ Meant to be used when normalizing the exception for exceeding the recursion
-+ depth will cause its own infinite recursion.
-+*/
-+PyObject *PyExc_RecursionErrorInst = NULL;
-+
- #define PRE_INIT(TYPE) \
- if (!(_PyExc_ ## TYPE.tp_flags & Py_TPFLAGS_READY)) { \
- if (PyType_Ready(&_PyExc_ ## TYPE) < 0) \
-@@ -2691,11 +2697,37 @@ _PyExc_Init(PyObject *bltinmod)
- ADD_ERRNO(TimeoutError, ETIMEDOUT);
-
- preallocate_memerrors();
-+
-+ if (!PyExc_RecursionErrorInst) {
-+ PyExc_RecursionErrorInst = BaseException_new(&_PyExc_RecursionError, NULL,
NULL);
-+ if (!PyExc_RecursionErrorInst)
-+ Py_FatalError("Cannot pre-allocate RecursionError instance for "
-+ "recursion errors");
-+ else {
-+ PyBaseExceptionObject *err_inst =
-+ (PyBaseExceptionObject *)PyExc_RecursionErrorInst;
-+ PyObject *args_tuple;
-+ PyObject *exc_message;
-+ exc_message = PyUnicode_FromString("maximum recursion depth
exceeded");
-+ if (!exc_message)
-+ Py_FatalError("cannot allocate argument for RecursionError "
-+ "pre-allocation");
-+ args_tuple = PyTuple_Pack(1, exc_message);
-+ if (!args_tuple)
-+ Py_FatalError("cannot allocate tuple for RecursionError "
-+ "pre-allocation");
-+ Py_DECREF(exc_message);
-+ if (BaseException_init(err_inst, args_tuple, NULL))
-+ Py_FatalError("init of pre-allocated RecursionError failed");
-+ Py_DECREF(args_tuple);
-+ }
-+ }
- }
-
- void
- _PyExc_Fini(void)
- {
-+ Py_CLEAR(PyExc_RecursionErrorInst);
- free_preallocated_memerrors();
- Py_CLEAR(errnomap);
- }
-diff --git a/PC/python3.def b/PC/python3.def
-index 4fc4a6814ee..ff70718fc37 100644
---- a/PC/python3.def
-+++ b/PC/python3.def
-@@ -224,6 +224,7 @@ EXPORTS
- PyExc_PermissionError=python36.PyExc_PermissionError DATA
- PyExc_ProcessLookupError=python36.PyExc_ProcessLookupError DATA
- PyExc_RecursionError=python36.PyExc_RecursionError DATA
-+ PyExc_RecursionErrorInst=python36.PyExc_RecursionErrorInst DATA
- PyExc_ReferenceError=python36.PyExc_ReferenceError DATA
- PyExc_ResourceWarning=python36.PyExc_ResourceWarning DATA
- PyExc_RuntimeError=python36.PyExc_RuntimeError DATA
diff --git a/00294-define-TLS-cipher-suite-on-build-time.patch
b/00294-define-TLS-cipher-suite-on-build-time.patch
deleted file mode 100644
index 1aa348c..0000000
--- a/00294-define-TLS-cipher-suite-on-build-time.patch
+++ /dev/null
@@ -1,228 +0,0 @@
-diff --git a/Lib/ssl.py b/Lib/ssl.py
-index 1f3a31a..b54a684 100644
---- a/Lib/ssl.py
-+++ b/Lib/ssl.py
-@@ -116,6 +116,7 @@ except ImportError:
-
-
- from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN, HAS_ALPN, HAS_TLSv1_3
-+from _ssl import _DEFAULT_CIPHERS
- from _ssl import _OPENSSL_API_VERSION
-
-
-@@ -174,48 +175,7 @@ else:
- CHANNEL_BINDING_TYPES = []
-
-
--# Disable weak or insecure ciphers by default
--# (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
--# * Prefer AES-GCM over ChaCha20 because most platforms have AES-NI
--# (ChaCha20 needs OpenSSL 1.1.0 or patched 1.0.2)
--# * Prefer any AES-GCM and ChaCha20 over any AES-CBC for better
--# performance and security
--# * Then Use HIGH cipher suites as a fallback
--# * 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'
-- )
--
--# 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
--# * Prefer AES-GCM over ChaCha20 because most platforms have AES-NI
--# * Prefer any AES-GCM and ChaCha20 over any AES-CBC for better
--# performance and security
--# * Then Use HIGH cipher suites as a fallback
--# * 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'
--)
-+_RESTRICTED_SERVER_CIPHERS = _DEFAULT_CIPHERS
-
-
- class CertificateError(ValueError):
-@@ -389,8 +349,6 @@ class SSLContext(_SSLContext):
-
- def __new__(cls, protocol=PROTOCOL_TLS, *args, **kwargs):
- self = _SSLContext.__new__(cls, protocol)
-- if protocol != _SSLv2_IF_EXISTS:
-- self.set_ciphers(_DEFAULT_CIPHERS)
- return self
-
- def __init__(self, protocol=PROTOCOL_TLS):
-@@ -505,8 +463,6 @@ def create_default_context(purpose=Purpose.SERVER_AUTH, *,
cafile=None,
- # verify certs and host name in client mode
- context.verify_mode = CERT_REQUIRED
- context.check_hostname = True
-- elif purpose == Purpose.CLIENT_AUTH:
-- context.set_ciphers(_RESTRICTED_SERVER_CIPHERS)
-
- if cafile or capath or cadata:
- context.load_verify_locations(cafile, capath, cadata)
-diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
-index 54644e1..799100c 100644
---- a/Lib/test/test_ssl.py
-+++ b/Lib/test/test_ssl.py
-@@ -18,6 +18,7 @@ import asyncore
- import weakref
- import platform
- import functools
-+import sysconfig
- try:
- import ctypes
- except ImportError:
-@@ -36,7 +37,7 @@ PROTOCOLS = sorted(ssl._PROTOCOL_NAMES)
- HOST = support.HOST
- IS_LIBRESSL = ssl.OPENSSL_VERSION.startswith('LibreSSL')
- IS_OPENSSL_1_1 = not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (1, 1, 0)
--
-+PY_SSL_DEFAULT_CIPHERS = sysconfig.get_config_var('PY_SSL_DEFAULT_CIPHERS')
-
- def data_file(*name):
- return os.path.join(os.path.dirname(__file__), *name)
-@@ -889,6 +890,19 @@ class ContextTests(unittest.TestCase):
- with self.assertRaisesRegex(ssl.SSLError, "No cipher can be
selected"):
- ctx.set_ciphers("^$:,;?*'dorothyx")
-
-+ @unittest.skipUnless(PY_SSL_DEFAULT_CIPHERS == 1,
-+ "Test applies only to Python default ciphers")
-+ def test_python_ciphers(self):
-+ ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
-+ ciphers = ctx.get_ciphers()
-+ for suite in ciphers:
-+ name = suite['name']
-+ self.assertNotIn("PSK", name)
-+ self.assertNotIn("SRP", name)
-+ self.assertNotIn("MD5", name)
-+ self.assertNotIn("RC4", name)
-+ self.assertNotIn("3DES", name)
-+
- @unittest.skipIf(ssl.OPENSSL_VERSION_INFO < (1, 0, 2, 0, 0), 'OpenSSL too
old')
- def test_get_ciphers(self):
- ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
-diff --git a/Modules/_ssl.c b/Modules/_ssl.c
-index df8c6a7..e23a569 100644
---- a/Modules/_ssl.c
-+++ b/Modules/_ssl.c
-@@ -206,6 +206,31 @@ SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *s)
-
- #endif /* OpenSSL < 1.1.0 or LibreSSL */
-
-+/* Default cipher suites */
-+#ifndef PY_SSL_DEFAULT_CIPHERS
-+#define PY_SSL_DEFAULT_CIPHERS 1
-+#endif
-+
-+#if PY_SSL_DEFAULT_CIPHERS == 0
-+ #ifndef PY_SSL_DEFAULT_CIPHER_STRING
-+ #error "Py_SSL_DEFAULT_CIPHERS 0 needs Py_SSL_DEFAULT_CIPHER_STRING"
-+ #endif
-+#elif PY_SSL_DEFAULT_CIPHERS == 1
-+/* Python custom selection of sensible ciper suites
-+ * DEFAULT: OpenSSL's default cipher list. Since 1.0.2 the list is in sensible
order.
-+ * !aNULL:!eNULL: really no NULL ciphers
-+ * !MD5:!3DES:!DES:!RC4:!IDEA:!SEED: no weak or broken algorithms on old OpenSSL
versions.
-+ * !aDSS: no authentication with discrete logarithm DSA algorithm
-+ * !SRP:!PSK: no secure remote password or pre-shared key authentication
-+ */
-+ #define PY_SSL_DEFAULT_CIPHER_STRING
"DEFAULT:!aNULL:!eNULL:!MD5:!3DES:!DES:!RC4:!IDEA:!SEED:!aDSS:!SRP:!PSK"
-+#elif PY_SSL_DEFAULT_CIPHERS == 2
-+/* Ignored in SSLContext constructor, only used to as _ssl.DEFAULT_CIPHER_STRING */
-+ #define PY_SSL_DEFAULT_CIPHER_STRING SSL_DEFAULT_CIPHER_LIST
-+#else
-+ #error "Unsupported PY_SSL_DEFAULT_CIPHERS"
-+#endif
-+
-
- enum py_ssl_error {
- /* these mirror ssl.h */
-@@ -2739,7 +2764,12 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version)
- /* A bare minimum cipher list without completely 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");
-+#if PY_SSL_DEFAULT_CIPHERS == 2
-+ /* stick to OpenSSL's default settings */
-+ result = 1;
-+#else
-+ result = SSL_CTX_set_cipher_list(ctx, PY_SSL_DEFAULT_CIPHER_STRING);
-+#endif
- } else {
- /* SSLv2 needs MD5 */
- result = SSL_CTX_set_cipher_list(ctx, "HIGH:!aNULL:!eNULL");
-@@ -5279,6 +5309,9 @@ PyInit__ssl(void)
- (PyObject *)&PySSLSession_Type) != 0)
- return NULL;
-
-+ PyModule_AddStringConstant(m, "_DEFAULT_CIPHERS",
-+ PY_SSL_DEFAULT_CIPHER_STRING);
-+
- PyModule_AddIntConstant(m, "SSL_ERROR_ZERO_RETURN",
- PY_SSL_ERROR_ZERO_RETURN);
- PyModule_AddIntConstant(m, "SSL_ERROR_WANT_READ",
-diff --git a/configure.ac b/configure.ac
-index 7ea62f8..4b42393 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -5555,6 +5555,42 @@ if test "$have_getrandom" = yes; then
- [Define to 1 if the getrandom() function is available])
- fi
-
-+# ssl module default cipher suite string
-+AH_TEMPLATE(PY_SSL_DEFAULT_CIPHERS,
-+ [Default cipher suites list for ssl module.
-+ 1: Python's preferred selection, 2: leave OpenSSL defaults untouched, 0: custom
string])
-+AH_TEMPLATE(PY_SSL_DEFAULT_CIPHER_STRING,
-+ [Cipher suite string for PY_SSL_DEFAULT_CIPHERS=0]
-+)
-+AC_MSG_CHECKING(for --with-ssl-default-suites)
-+AC_ARG_WITH(ssl-default-suites,
-+
AS_HELP_STRING([--with-ssl-default-suites=@<:@python|openssl|STRING@:>@],
-+ [Override default cipher suites string,
-+ python: use Python's preferred selection (default),
-+ openssl: leave OpenSSL's defaults untouched,
-+ STRING: use a custom string,
-+ PROTOCOL_SSLv2 ignores the setting]),
-+[
-+AC_MSG_RESULT($withval)
-+case "$withval" in
-+ python)
-+ AC_DEFINE(PY_SSL_DEFAULT_CIPHERS, 1)
-+ ;;
-+ openssl)
-+ AC_DEFINE(PY_SSL_DEFAULT_CIPHERS, 2)
-+ ;;
-+ *)
-+ AC_DEFINE(PY_SSL_DEFAULT_CIPHERS, 0)
-+ AC_DEFINE_UNQUOTED(PY_SSL_DEFAULT_CIPHER_STRING, "$withval")
-+ ;;
-+esac
-+],
-+[
-+AC_MSG_RESULT(python)
-+AC_DEFINE(PY_SSL_DEFAULT_CIPHERS, 1)
-+])
-+
-+
- # generate output files
- AC_CONFIG_FILES(Makefile.pre Modules/Setup.config Misc/python.pc Misc/python-config.sh)
- AC_CONFIG_FILES([Modules/ld_so_aix], [chmod +x Modules/ld_so_aix])
diff --git a/00301-pathfix-add-n-option-for-no-backup.patch
b/00301-pathfix-add-n-option-for-no-backup.patch
deleted file mode 100644
index 350fe97..0000000
--- a/00301-pathfix-add-n-option-for-no-backup.patch
+++ /dev/null
@@ -1,104 +0,0 @@
-From 5affd5c29eb1493cb31ef3cfdde15538ac134689 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro(a)hroncok.cz>
-Date: Tue, 13 Mar 2018 10:56:43 +0100
-Subject: [PATCH] bpo-32885: Tools/scripts/pathfix.py: Add -n option for no
- backup~ (#5772)
-
-Creating backup files with ~ suffix can be undesirable in some environment,
-such as when building RPM packages. Instead of requiring the user to remove
-those files manually, option -n was added, that simply disables this feature.
-
--n was selected because 2to3 has the same option with this behavior.
----
- Misc/ACKS | 1 +
- .../2018-02-20-12-16-47.bpo-32885.dL5x7C.rst | 2 ++
- Tools/scripts/pathfix.py | 28 +++++++++++++++-------
- 3 files changed, 23 insertions(+), 8 deletions(-)
- create mode 100644
Misc/NEWS.d/next/Tools-Demos/2018-02-20-12-16-47.bpo-32885.dL5x7C.rst
-
-diff --git a/Misc/ACKS b/Misc/ACKS
-index d8179c8b03ab..d752d8a35434 100644
---- a/Misc/ACKS
-+++ b/Misc/ACKS
-@@ -687,6 +687,7 @@ Ken Howard
- Brad Howes
- Mike Hoy
- Ben Hoyt
-+Miro Hronok
- Chiu-Hsiang Hsu
- Chih-Hao Huang
- Christian Hudon
-diff --git a/Misc/NEWS.d/next/Tools-Demos/2018-02-20-12-16-47.bpo-32885.dL5x7C.rst
b/Misc/NEWS.d/next/Tools-Demos/2018-02-20-12-16-47.bpo-32885.dL5x7C.rst
-new file mode 100644
-index 000000000000..e003e1d84fd0
---- /dev/null
-+++ b/Misc/NEWS.d/next/Tools-Demos/2018-02-20-12-16-47.bpo-32885.dL5x7C.rst
-@@ -0,0 +1,2 @@
-+Add an ``-n`` flag for ``Tools/scripts/pathfix.py`` to disbale automatic
-+backup creation (files with ``~`` suffix).
-diff --git a/Tools/scripts/pathfix.py b/Tools/scripts/pathfix.py
-index 562bbc737812..c5bf984306a3 100755
---- a/Tools/scripts/pathfix.py
-+++ b/Tools/scripts/pathfix.py
-@@ -7,8 +7,9 @@
- # Directories are searched recursively for files whose name looks
- # like a python module.
- # Symbolic links are always ignored (except as explicit directory
--# arguments). Of course, the original file is kept as a back-up
--# (with a "~" attached to its name).
-+# arguments).
-+# The original file is kept as a back-up (with a "~" attached to its name),
-+# -n flag can be used to disable this.
- #
- # Undoubtedly you can do this using find and sed or perl, but this is
- # a nice example of Python code that recurses down a directory tree
-@@ -31,14 +32,17 @@
-
- new_interpreter = None
- preserve_timestamps = False
-+create_backup = True
-+
-
- def main():
- global new_interpreter
- global preserve_timestamps
-- usage = ('usage: %s -i /interpreter -p file-or-directory ...\n' %
-+ global create_backup
-+ usage = ('usage: %s -i /interpreter -p -n file-or-directory ...\n' %
- sys.argv[0])
- try:
-- opts, args = getopt.getopt(sys.argv[1:], 'i:p')
-+ opts, args = getopt.getopt(sys.argv[1:], 'i:pn')
- except getopt.error as msg:
- err(str(msg) + '\n')
- err(usage)
-@@ -48,6 +52,8 @@ def main():
- new_interpreter = a.encode()
- if o == '-p':
- preserve_timestamps = True
-+ if o == '-n':
-+ create_backup = False
- if not new_interpreter or not new_interpreter.startswith(b'/') or \
- not args:
- err('-i option or file-or-directory missing\n')
-@@ -134,10 +140,16 @@ def fix(filename):
- except OSError as msg:
- err('%s: warning: chmod failed (%r)\n' % (tempname, msg))
- # Then make a backup of the original file as filename~
-- try:
-- os.rename(filename, filename + '~')
-- except OSError as msg:
-- err('%s: warning: backup failed (%r)\n' % (filename, msg))
-+ if create_backup:
-+ try:
-+ os.rename(filename, filename + '~')
-+ except OSError as msg:
-+ err('%s: warning: backup failed (%r)\n' % (filename, msg))
-+ else:
-+ try:
-+ os.remove(filename)
-+ except OSError as msg:
-+ err('%s: warning: removing failed (%r)\n' % (filename, msg))
- # Now move the temp file to the original file
- try:
- os.rename(tempname, filename)
diff --git a/00302-fix-multiprocessing-regression-on-newer-glibcs.patch
b/00302-fix-multiprocessing-regression-on-newer-glibcs.patch
deleted file mode 100644
index 965792a..0000000
--- a/00302-fix-multiprocessing-regression-on-newer-glibcs.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From a3febe3cba14b89885f42ca2f0224096a52885f6 Mon Sep 17 00:00:00 2001
-From: Antoine Pitrou <antoine(a)python.org>
-Date: Mon, 23 Apr 2018 13:19:42 +0200
-Subject: [PATCH] bpo-33329: Fix multiprocessing regression on newer glibcs
-
-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.
----
- .../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/Misc/NEWS.d/next/Library/2018-04-23-13-21-39.bpo-33329.lQ-Eod.rst
b/Misc/NEWS.d/next/Library/2018-04-23-13-21-39.bpo-33329.lQ-Eod.rst
-new file mode 100644
-index 000000000000..d1a4e56d04b9
---- /dev/null
-+++ b/Misc/NEWS.d/next/Library/2018-04-23-13-21-39.bpo-33329.lQ-Eod.rst
-@@ -0,0 +1 @@
-+Fix multiprocessing regression on newer glibcs
-diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
-index 791616014384..35fd87e2d1e7 100644
---- a/Modules/signalmodule.c
-+++ b/Modules/signalmodule.c
-@@ -819,7 +819,6 @@ iterable_to_sigset(PyObject *iterable, sigset_t *mask)
- int result = -1;
- PyObject *iterator, *item;
- long signum;
-- int err;
-
- sigemptyset(mask);
-
-@@ -841,11 +840,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;
diff --git a/python3.spec b/python3.spec
index 7472a57..6ba9805 100644
--- a/python3.spec
+++ b/python3.spec
@@ -300,12 +300,6 @@ Patch251: 00251-change-user-install-location.patch
# Upstream uses Debian-style architecture naming. Change to match Fedora.
Patch274: 00274-fix-arch-names.patch
-# 00291 #
-# Build fails with undefined references to dlopen / dlsym otherwise.
-# See:
https://bugzilla.redhat.com/show_bug.cgi?id=1537489
-# and:
https://src.fedoraproject.org/rpms/redhat-rpm-config/c/078af19
-Patch291: 00291-setup-Link-ctypes-against-dl-explicitly.patch
-
# 00312 #
# Revert "bpo-6721: Hold logging locks across fork() 3b699932e5ac3e7
# This is a TEMPORARY WORKAROUND for an urgent Fedora bug
@@ -659,7 +653,6 @@ rm Lib/ensurepip/_bundled/*.whl
%patch205 -p1
%patch251 -p1
%patch274 -p1
-%patch291 -p1
%patch312 -p1
%patch313 -p1
%patch315 -p1
commit 1092d478f540ba9d510316205eca201e5c5d07e9
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Fri Dec 7 10:03:24 2018 +0100
Make sure we don't ship any exe files (not needed an prebuilt)
Such files are only used to create Microsoft Windows installers
and that functionality is broken on Linux anyway.
We can keep the exe files in SRPM, as they are free software as
confirmed by the Python Software Foundation:
Hello,
Shipping and distributing these files is ok.
These files are stubs, used as the executable part of a self-unzipping
executable and showing an "installer window" to the user.
They are original to Python and, while they call win32 functions,
they don't have Windows SDK code in them.
The source is at: PC/bdist_wininst/install.c
The binaries are included so that anyone creating a bdist_wininst
distribution (mostly deprecated, actually) can do so, even when
cross-compiling.
Thanks,
Van (Lindberg)
See also
https://mail.python.org/pipermail/python-dev/2018-October/155507.html
diff --git a/python3.spec b/python3.spec
index bb020fa..7472a57 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.1
-Release: 4%{?dist}
+Release: 5%{?dist}
License: Python
@@ -627,6 +627,10 @@ version once Python %{pybasever} is stable.
%prep
%setup -q -n Python-%{version}%{?prerel}
+# Remove all exe files to ensure we are not shipping prebuilt binaries
+# note that those are only used to create Microsoft Windows installers
+# and that functionality is broken on Linux anyway
+find -name '*.exe' -print -delete
# Remove bundled libraries to ensure that we're using the system copy.
rm -r Modules/expat
@@ -1283,7 +1287,6 @@ CheckPython optimized
%{pylibdir}/distutils/__pycache__/*%{bytecode_suffixes}
%{pylibdir}/distutils/README
%{pylibdir}/distutils/command
-%exclude %{pylibdir}/distutils/command/wininst-*.exe
%dir %{pylibdir}/email/
%dir %{pylibdir}/email/__pycache__/
@@ -1353,7 +1356,6 @@ CheckPython optimized
%exclude %{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/Makefile
%exclude %{_includedir}/python%{LDVERSION_optimized}/%{_pyconfig_h}
%endif
-%{pylibdir}/distutils/command/wininst-*.exe
%{_includedir}/python%{LDVERSION_optimized}/*.h
%doc Misc/README.valgrind Misc/valgrind-python.supp Misc/gdbinit
@@ -1575,6 +1577,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Fri Dec 07 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.1-5
+- Make sure we don't ship any exe files (not needed an prebuilt)
+
* Wed Nov 21 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.1-4
- Make sure the entire test.support module is in python3-libs (#1651245)
commit 5258d1d1943c5f416fe693cc8f5c740e514c6f35
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Mon Dec 10 17:29:57 2018 +0100
Run the testsuite in parallel, --findleaks runs in the CI
diff --git a/python3.spec b/python3.spec
index e194ab2..bb020fa 100644
--- a/python3.spec
+++ b/python3.spec
@@ -1066,7 +1066,7 @@ CheckPython() {
# @unittest._expectedFailureInRpmBuild
WITHIN_PYTHON_RPM_BUILD= \
LD_LIBRARY_PATH=$ConfDir $ConfDir/python -m test.regrtest \
- -wW --slowest --findleaks \
+ -wW --slowest -j0 \
-x test_distutils \
-x test_bdist_rpm \
-x test_gdb \
commit bc8629686948c26706c634b14edb0265bacb3449
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Wed Nov 14 16:34:36 2018 +0100
Run the selftest suite on Fedora CI
diff --git a/tests/tests.yml b/tests/tests.yml
index 2e14ca0..d26ece2 100644
--- a/tests/tests.yml
+++ b/tests/tests.yml
@@ -11,7 +11,17 @@
- smoke:
dir: python/smoke
run: VERSION=3.7 ./venv.sh
+ - selftest:
+ dir: python/selftest
+ run: VERSION=3.7 X="-x test_socket -x test_asyncgen -x test_asyncio -x
test_compile -x test_concurrent_futures -x test_itertools -x test_multiprocessing_fork -x
test_multiprocessing_forkserver -x test_shutil -x test_time -x test_multiprocessing_spawn
-x test_threading -x test_wsgiref" ./parallel.sh
+ - findleaks:
+ dir: python/selftest
+ run: VERSION=3.7 X="-x test_socket -x test_asyncgen -x test_asyncio -x
test_compile -x test_concurrent_futures -x test_itertools -x test_multiprocessing_fork -x
test_multiprocessing_forkserver -x test_shutil -x test_time -x test_multiprocessing_spawn
-x test_threading -x test_wsgiref" ./findleaks.sh
required_packages:
- - gcc
- - python3-tox
- - python3-devel
+ - gcc # for extension building in venv and selftest
+ - python3-debug # for leak testing
+ - python3-devel # for extension building in venv and selftest
+ - python3-tkinter # for selftest
+ - python3-test # for selftest
+ - python3-tox # for venv tests
+ - glibc-all-langpacks # for locale tests
commit 7be8eebca61f0afeaa2065b4a4e25dd21dffa249
Author: Victor Stinner <vstinner(a)redhat.com>
Date: Tue Dec 18 11:27:06 2018 +0100
Require glibc-all-langpacks to test locales
Python 3 test suite requires various locales. Install all of them to
build the package to make sure that no test is skipped because of a
missing locale.
diff --git a/python3.spec b/python3.spec
index 2890caa..e194ab2 100644
--- a/python3.spec
+++ b/python3.spec
@@ -152,6 +152,7 @@ BuildRequires: gcc-c++
%if %{with gdbm}
BuildRequires: gdbm-devel >= 1:1.13
%endif
+BuildRequires: glibc-all-langpacks
BuildRequires: glibc-devel
BuildRequires: gmp-devel
BuildRequires: libappstream-glib
commit 4f22584498d101092afb723fde527159a1cf22aa
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Tue Nov 27 13:36:14 2018 +0100
Fix mktime() error in test_email
http://bugs.python.org/issue35317
https://bugzilla.redhat.com/show_bug.cgi?id=1652843
diff --git a/00315-test_email-mktime.patch b/00315-test_email-mktime.patch
new file mode 100644
index 0000000..aacdcd6
--- /dev/null
+++ b/00315-test_email-mktime.patch
@@ -0,0 +1,46 @@
+From 0165caf04ef9c615c8b86dd16f7c201ca7a0befa Mon Sep 17 00:00:00 2001
+From: Victor Stinner <vstinner(a)redhat.com>
+Date: Tue, 27 Nov 2018 12:40:50 +0100
+Subject: [PATCH] bpo-35317: Fix mktime() error in test_email (GH-10721)
+
+Fix mktime() overflow error in test_email: run
+test_localtime_daylight_true_dst_true() and
+test_localtime_daylight_false_dst_true() with a specific timezone.
+(cherry picked from commit cfaafda8e3e19764682abb4bd4c574accb784c42)
+
+Co-authored-by: Victor Stinner <vstinner(a)redhat.com>
+---
+ Lib/test/test_email/test_utils.py | 2 ++
+ .../NEWS.d/next/Tests/2018-11-26-16-54-21.bpo-35317.jByGP2.rst | 3 +++
+ 2 files changed, 5 insertions(+)
+ create mode 100644 Misc/NEWS.d/next/Tests/2018-11-26-16-54-21.bpo-35317.jByGP2.rst
+
+diff --git a/Lib/test/test_email/test_utils.py b/Lib/test/test_email/test_utils.py
+index 6dcb3bbe7aab..4e3c3f3a195f 100644
+--- a/Lib/test/test_email/test_utils.py
++++ b/Lib/test/test_email/test_utils.py
+@@ -75,6 +75,7 @@ def test_localtime_daylight_false_dst_false(self):
+ t2 = utils.localtime(t1)
+ self.assertEqual(t1, t2)
+
++ @test.support.run_with_tz('Europe/Minsk')
+ def test_localtime_daylight_true_dst_true(self):
+ test.support.patch(self, time, 'daylight', True)
+ t0 = datetime.datetime(2012, 3, 12, 1, 1)
+@@ -82,6 +83,7 @@ def test_localtime_daylight_true_dst_true(self):
+ t2 = utils.localtime(t1)
+ self.assertEqual(t1, t2)
+
++ @test.support.run_with_tz('Europe/Minsk')
+ def test_localtime_daylight_false_dst_true(self):
+ test.support.patch(self, time, 'daylight', False)
+ t0 = datetime.datetime(2012, 3, 12, 1, 1)
+diff --git a/Misc/NEWS.d/next/Tests/2018-11-26-16-54-21.bpo-35317.jByGP2.rst
b/Misc/NEWS.d/next/Tests/2018-11-26-16-54-21.bpo-35317.jByGP2.rst
+new file mode 100644
+index 000000000000..73a30f71927f
+--- /dev/null
++++ b/Misc/NEWS.d/next/Tests/2018-11-26-16-54-21.bpo-35317.jByGP2.rst
+@@ -0,0 +1,3 @@
++Fix ``mktime()`` overflow error in ``test_email``: run
++``test_localtime_daylight_true_dst_true()`` and
++``test_localtime_daylight_false_dst_true()`` with a specific timezone.
diff --git a/python3.spec b/python3.spec
index 7444132..2890caa 100644
--- a/python3.spec
+++ b/python3.spec
@@ -318,6 +318,12 @@ Patch312: 00312-revert-bpo-6721.patch
#
https://bugzilla.redhat.com/show_bug.cgi?id=1160640
Patch313: 00313-cprofile-sort-option.patch
+# 00315 #
+# Fix mktime() error in test_email
+#
http://bugs.python.org/issue35317
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1652843
+Patch315: 00315-test_email-mktime.patch
+
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
@@ -651,6 +657,7 @@ rm Lib/ensurepip/_bundled/*.whl
%patch291 -p1
%patch312 -p1
%patch313 -p1
+%patch315 -p1
# Remove files that should be generated by the build
commit e21e6a6b22570e4027047076a268481ad1436dd9
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Mon Nov 26 15:52:56 2018 +0100
Show test.pythoninfo, helpful for debugging test failures
diff --git a/python3.spec b/python3.spec
index 9c638c8..7444132 100644
--- a/python3.spec
+++ b/python3.spec
@@ -1049,6 +1049,9 @@ CheckPython() {
# Note that we're running the tests using the version of the code in the
# builddir, not in the buildroot.
+ # Show some info, helpful for debugging test failures
+ LD_LIBRARY_PATH=$ConfDir $ConfDir/python -m test.pythoninfo
+
# Run the upstream test suite, setting "WITHIN_PYTHON_RPM_BUILD" so that the
# our non-standard decorators take effect on the relevant tests:
# @unittest._skipInRpmBuild(reason)
commit 31d96372deeb66e3a6b061f075cf70fdd3205966
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Mon Nov 19 15:55:55 2018 +0100
Make sure the entire test.support module is in python3-libs (#1651245)
diff --git a/python3.spec b/python3.spec
index 2cbf972..9c638c8 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.1
-Release: 3%{?dist}
+Release: 4%{?dist}
License: Python
@@ -540,6 +540,7 @@ the Python programming language.
%package test
Summary: The self-test suite for the main python3 package
Requires: %{name} = %{version}-%{release}
+Requires: %{name}-libs%{?_isa} = %{version}-%{release}
# Shall be removed in Fedora 31
Obsoletes: platform-python-test < %{platpyver}
@@ -1145,14 +1146,19 @@ CheckPython optimized
%{pylibdir}/ensurepip/_bundled/*.whl
%endif
+# The majority of the test module lives in the test subpackage
+# However test.support is in libs - it contains stuff used when testing your code
+#
https://bugzilla.redhat.com/show_bug.cgi?id=596258
+%if %{without flatpackage}
%dir %{pylibdir}/test/
%dir %{pylibdir}/test/__pycache__/
%dir %{pylibdir}/test/support/
%dir %{pylibdir}/test/support/__pycache__/
%{pylibdir}/test/__init__.py
%{pylibdir}/test/__pycache__/__init__%{bytecode_suffixes}
-%{pylibdir}/test/support/__init__.py
-%{pylibdir}/test/support/__pycache__/__init__%{bytecode_suffixes}
+%{pylibdir}/test/support/*.py
+%{pylibdir}/test/support/__pycache__/*%{bytecode_suffixes}
+%endif
%dir %{pylibdir}/concurrent/
%dir %{pylibdir}/concurrent/__pycache__/
@@ -1410,6 +1416,15 @@ CheckPython optimized
%{pylibdir}/tkinter/test
%{pylibdir}/unittest/test
+# stuff already owned by the libs subpackage
+# test requires libs, so we are safe not owning those dirs
+%if %{without flatpackage}
+%exclude %dir %{pylibdir}/test/
+%exclude %dir %{pylibdir}/test/__pycache__/
+%exclude %{pylibdir}/test/__init__.py
+%exclude %{pylibdir}/test/__pycache__/__init__%{bytecode_suffixes}
+%exclude %{pylibdir}/test/support/
+%endif
# We don't bother splitting the debug build out into further subpackages:
# if you need it, you're probably a developer.
@@ -1549,6 +1564,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Wed Nov 21 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.1-4
+- Make sure the entire test.support module is in python3-libs (#1651245)
+
* Tue Nov 06 2018 Victor Stinner <vstinner(a)redhat.com> - 3.7.1-3
- Verify the value of '-s' when execute the CLI of cProfile (rhbz#1160640)
commit a4e394925c249b7afd150fe2a6c7c77a3702f1b7
Author: Victor Stinner <vstinner(a)redhat.com>
Date: Wed Nov 7 00:37:34 2018 +0100
Verify the value of '-s' when execute the CLI of cProfile
Resolves: rhbz#1160640
diff --git a/00313-cprofile-sort-option.patch b/00313-cprofile-sort-option.patch
new file mode 100644
index 0000000..fe427e5
--- /dev/null
+++ b/00313-cprofile-sort-option.patch
@@ -0,0 +1,61 @@
+commit c36e8721f276e7cc09cecdb9c04783630f0ba82a
+Author: Victor Stinner <vstinner(a)redhat.com>
+Date: Wed Nov 7 00:34:22 2018 +0100
+
+ bpo-23420: Verify the value of '-s' when execute the CLI of cProfile
+
+ Verify the value for the parameter '-s' of the cProfile CLI. Patch by Robert
+ Kuska.
+
+ Resolves: rhbz#1160640
+
+diff --git a/Lib/cProfile.py b/Lib/cProfile.py
+index c044be8..f6e423b 100755
+--- a/Lib/cProfile.py
++++ b/Lib/cProfile.py
+@@ -124,6 +124,7 @@ def main():
+ import os
+ import sys
+ import runpy
++ import pstats
+ from optparse import OptionParser
+ usage = "cProfile.py [-o output_file_path] [-s sort] [-m module | scriptfile]
[arg] ..."
+ parser = OptionParser(usage=usage)
+@@ -132,7 +133,8 @@ def main():
+ help="Save stats to <outfile>", default=None)
+ parser.add_option('-s', '--sort', dest="sort",
+ help="Sort order when printing to stdout, based on pstats.Stats
class",
+- default=-1)
++ default=-1,
++ choices=sorted(pstats.Stats.sort_arg_dict_default))
+ parser.add_option('-m', dest="module",
action="store_true",
+ help="Profile a library module", default=False)
+
+diff --git a/Lib/test/test_cprofile.py b/Lib/test/test_cprofile.py
+index 1430d22..5c4ec5b 100644
+--- a/Lib/test/test_cprofile.py
++++ b/Lib/test/test_cprofile.py
+@@ -2,6 +2,7 @@
+
+ import sys
+ from test.support import run_unittest, TESTFN, unlink
++import unittest
+
+ # rip off all interesting stuff from test_profile
+ import cProfile
+@@ -50,8 +51,14 @@ class CProfileTest(ProfileTest):
+ assert_python_ok('-m', 'cProfile', '-m',
'timeit', '-n', '1')
+
+
++class TestCommandLine(unittest.TestCase):
++ def test_sort(self):
++ rc, out, err = assert_python_failure('-m', 'cProfile',
'-s', 'demo')
++ self.assertGreater(rc, 0)
++ self.assertIn(b"option -s: invalid choice: 'demo'", err)
++
+ def test_main():
+- run_unittest(CProfileTest)
++ run_unittest(CProfileTest, TestCommandLine)
+
+ def main():
+ if '-r' not in sys.argv:
diff --git a/python3.spec b/python3.spec
index dffcbdc..2cbf972 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.1
-Release: 2%{?dist}
+Release: 3%{?dist}
License: Python
@@ -312,6 +312,12 @@ Patch291: 00291-setup-Link-ctypes-against-dl-explicitly.patch
# See:
https://bugzilla.redhat.com/show_bug.cgi?id=1644936
Patch312: 00312-revert-bpo-6721.patch
+# 00313 #
+# Verify the value of '-s' when execute the CLI of cProfile
+#
http://bugs.python.org/issue23420
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1160640
+Patch313: 00313-cprofile-sort-option.patch
+
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
@@ -643,6 +649,7 @@ rm Lib/ensurepip/_bundled/*.whl
%patch274 -p1
%patch291 -p1
%patch312 -p1
+%patch313 -p1
# Remove files that should be generated by the build
@@ -1542,6 +1549,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Tue Nov 06 2018 Victor Stinner <vstinner(a)redhat.com> - 3.7.1-3
+- Verify the value of '-s' when execute the CLI of cProfile (rhbz#1160640)
+
* Sun Nov 04 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.1-2
- Temporarily revert upstream commit 3b699932e5ac3e7
- This is dirty workaround for (#1644936)
commit 72bc3f43c46b8142b42e0ef82a48c7f78f0714d0
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Sun Nov 4 19:26:46 2018 +0100
Temporarily revert upstream commit 3b699932e5ac3e7
This is dirty workaround for
https://bugzilla.redhat.com/show_bug.cgi?id=1644936
diff --git a/00312-revert-bpo-6721.patch b/00312-revert-bpo-6721.patch
new file mode 100644
index 0000000..c3350bf
--- /dev/null
+++ b/00312-revert-bpo-6721.patch
@@ -0,0 +1,168 @@
+From 583bb07116505dcc73c0fc4aa3c1cf5074f3522d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro(a)hroncok.cz>
+Date: Fri, 2 Nov 2018 14:01:28 +0100
+Subject: [PATCH] Revert "bpo-6721: Hold logging locks across fork() (GH-4071)
+ (#9291)"
+
+This reverts commit 3b699932e5ac3e76031bbb6d700fbea07492641d.
+---
+ Lib/logging/__init__.py | 50 ------------------------------
+ Lib/test/test_logging.py | 67 ----------------------------------------
+ 2 files changed, 117 deletions(-)
+
+diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py
+index 3ad2cc38f6..53780cd600 100644
+--- a/Lib/logging/__init__.py
++++ b/Lib/logging/__init__.py
+@@ -225,55 +225,6 @@ def _releaseLock():
+ if _lock:
+ _lock.release()
+
+-
+-# Prevent a held logging lock from blocking a child from logging.
+-
+-if not hasattr(os, 'register_at_fork'): # Windows and friends.
+- def _register_at_fork_acquire_release(instance):
+- pass # no-op when os.register_at_fork does not exist.
+-else: # The os.register_at_fork API exists
+- os.register_at_fork(before=_acquireLock,
+- after_in_child=_releaseLock,
+- after_in_parent=_releaseLock)
+-
+- # A collection of instances with acquire and release methods (logging.Handler)
+- # to be called before and after fork. The weakref avoids us keeping discarded
+- # Handler instances alive forever in case an odd program creates and destroys
+- # many over its lifetime.
+- _at_fork_acquire_release_weakset = weakref.WeakSet()
+-
+-
+- def _register_at_fork_acquire_release(instance):
+- # We put the instance itself in a single WeakSet as we MUST have only
+- # one atomic weak ref. used by both before and after atfork calls to
+- # guarantee matched pairs of acquire and release calls.
+- _at_fork_acquire_release_weakset.add(instance)
+-
+-
+- def _at_fork_weak_calls(method_name):
+- for instance in _at_fork_acquire_release_weakset:
+- method = getattr(instance, method_name)
+- try:
+- method()
+- except Exception as err:
+- # Similar to what PyErr_WriteUnraisable does.
+- print("Ignoring exception from logging atfork", instance,
+- method_name, "method:", err, file=sys.stderr)
+-
+-
+- def _before_at_fork_weak_calls():
+- _at_fork_weak_calls('acquire')
+-
+-
+- def _after_at_fork_weak_calls():
+- _at_fork_weak_calls('release')
+-
+-
+- os.register_at_fork(before=_before_at_fork_weak_calls,
+- after_in_child=_after_at_fork_weak_calls,
+- after_in_parent=_after_at_fork_weak_calls)
+-
+-
+ #---------------------------------------------------------------------------
+ # The logging record
+ #---------------------------------------------------------------------------
+@@ -844,7 +795,6 @@ class Handler(Filterer):
+ Acquire a thread lock for serializing access to the underlying I/O.
+ """
+ self.lock = threading.RLock()
+- _register_at_fork_acquire_release(self)
+
+ def acquire(self):
+ """
+diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
+index 1ea2967f5b..5d5eba7357 100644
+--- a/Lib/test/test_logging.py
++++ b/Lib/test/test_logging.py
+@@ -35,7 +35,6 @@ import os
+ import queue
+ import random
+ import re
+-import signal
+ import socket
+ import struct
+ import sys
+@@ -667,72 +666,6 @@ class HandlerTest(BaseTest):
+ if os.path.exists(fn):
+ os.unlink(fn)
+
+- # The implementation relies on os.register_at_fork existing, but we test
+- # based on os.fork existing because that is what users and this test use.
+- # This helps ensure that when fork exists (the important concept) that the
+- # register_at_fork mechanism is also present and used.
+- @unittest.skipIf(not hasattr(os, 'fork'), 'Test requires
os.fork().')
+- def test_post_fork_child_no_deadlock(self):
+- """Ensure forked child logging locks are not held;
bpo-6721."""
+- refed_h = logging.Handler()
+- refed_h.name = 'because we need at least one for this test'
+- self.assertGreater(len(logging._handlers), 0)
+-
+- locks_held__ready_to_fork = threading.Event()
+- fork_happened__release_locks_and_end_thread = threading.Event()
+-
+- def lock_holder_thread_fn():
+- logging._acquireLock()
+- try:
+- refed_h.acquire()
+- try:
+- # Tell the main thread to do the fork.
+- locks_held__ready_to_fork.set()
+-
+- # If the deadlock bug exists, the fork will happen
+- # without dealing with the locks we hold, deadlocking
+- # the child.
+-
+- # Wait for a successful fork or an unreasonable amount of
+- # time before releasing our locks. To avoid a timing based
+- # test we'd need communication from os.fork() as to when it
+- # has actually happened. Given this is a regression test
+- # for a fixed issue, potentially less reliably detecting
+- # regression via timing is acceptable for simplicity.
+- # The test will always take at least this long. :(
+- fork_happened__release_locks_and_end_thread.wait(0.5)
+- finally:
+- refed_h.release()
+- finally:
+- logging._releaseLock()
+-
+- lock_holder_thread = threading.Thread(
+- target=lock_holder_thread_fn,
+- name='test_post_fork_child_no_deadlock lock holder')
+- lock_holder_thread.start()
+-
+- locks_held__ready_to_fork.wait()
+- pid = os.fork()
+- if pid == 0: # Child.
+- logging.error(r'Child process did not deadlock. \o/')
+- os._exit(0)
+- else: # Parent.
+- fork_happened__release_locks_and_end_thread.set()
+- lock_holder_thread.join()
+- start_time = time.monotonic()
+- while True:
+- waited_pid, status = os.waitpid(pid, os.WNOHANG)
+- if waited_pid == pid:
+- break # child process exited.
+- if time.monotonic() - start_time > 7:
+- break # so long? implies child deadlock.
+- time.sleep(0.05)
+- if waited_pid != pid:
+- os.kill(pid, signal.SIGKILL)
+- waited_pid, status = os.waitpid(pid, 0)
+- self.fail("child process deadlocked.")
+- self.assertEqual(status, 0, msg="child process error")
+-
+
+ class BadStream(object):
+ def write(self, data):
+--
+2.19.1
+
diff --git a/python3.spec b/python3.spec
index 2e2ee57..dffcbdc 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.1
-Release: 1%{?dist}
+Release: 2%{?dist}
License: Python
@@ -305,6 +305,13 @@ Patch274: 00274-fix-arch-names.patch
# and:
https://src.fedoraproject.org/rpms/redhat-rpm-config/c/078af19
Patch291: 00291-setup-Link-ctypes-against-dl-explicitly.patch
+# 00312 #
+# Revert "bpo-6721: Hold logging locks across fork() 3b699932e5ac3e7
+# This is a TEMPORARY WORKAROUND for an urgent Fedora bug
+# TODO Investigate properly and get a real fix (here or in anaconda)!
+# See:
https://bugzilla.redhat.com/show_bug.cgi?id=1644936
+Patch312: 00312-revert-bpo-6721.patch
+
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
@@ -635,6 +642,7 @@ rm Lib/ensurepip/_bundled/*.whl
%patch251 -p1
%patch274 -p1
%patch291 -p1
+%patch312 -p1
# Remove files that should be generated by the build
@@ -1534,6 +1542,10 @@ CheckPython optimized
# ======================================================
%changelog
+* Sun Nov 04 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.1-2
+- Temporarily revert upstream commit 3b699932e5ac3e7
+- This is dirty workaround for (#1644936)
+
* Mon Oct 22 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.1-1
- Update to 3.7.1
commit d533a32456480f7e57a05f03f03bf1887c9f4a80
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Mon Oct 1 16:05:20 2018 +0200
Update to 3.7.1
Removed patches due to being upstreamed: 307, 308
Rebased patches: 170
diff --git a/00170-gc-assertions.patch b/00170-gc-assertions.patch
index c37e69c..fb3ad85 100644
--- a/00170-gc-assertions.patch
+++ b/00170-gc-assertions.patch
@@ -53,15 +53,16 @@ index c772dea..5729797 100644
}
#endif
diff --git a/Lib/test/test_gc.py b/Lib/test/test_gc.py
-index 904fc7d..288e242 100644
+index 8d806db..dc8bb16 100644
--- a/Lib/test/test_gc.py
+++ b/Lib/test/test_gc.py
-@@ -1,10 +1,11 @@
+@@ -1,10 +1,12 @@
import unittest
from test.support import (verbose, refcount_test, run_unittest,
strip_python_stderr, cpython_only, start_threads,
-- temp_dir, requires_type_collecting)
-+ temp_dir, import_module, requires_type_collecting)
+- temp_dir, requires_type_collecting, TESTFN, unlink)
++ temp_dir, requires_type_collecting, TESTFN, unlink,
++ import_module)
from test.support.script_helper import assert_python_ok, make_script
import sys
@@ -69,7 +70,7 @@ index 904fc7d..288e242 100644
import time
import gc
import weakref
-@@ -46,6 +47,8 @@ class GC_Detector(object):
+@@ -46,6 +48,8 @@ class GC_Detector(object):
# gc collects it.
self.wr = weakref.ref(C1055820(666), it_happened)
@@ -78,7 +79,7 @@ index 904fc7d..288e242 100644
@with_tp_del
class Uncollectable(object):
"""Create a reference cycle with multiple __del__ methods.
-@@ -863,6 +866,50 @@ class GCCallbackTests(unittest.TestCase):
+@@ -878,6 +882,50 @@ class GCCallbackTests(unittest.TestCase):
self.assertEqual(len(gc.garbage), 0)
@@ -130,7 +131,7 @@ index 904fc7d..288e242 100644
def setUp(self):
gc.enable()
diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c
-index 8ba1093..e795308 100644
+index 4d701cb..388dd78 100644
--- a/Modules/gcmodule.c
+++ b/Modules/gcmodule.c
@@ -239,7 +239,8 @@ update_refs(PyGC_Head *containers)
@@ -251,7 +252,7 @@ index 8ba1093..e795308 100644
/* copy-paste of weakrefobject.c's handle_callback() */
temp = PyObject_CallFunctionObjArgs(callback, wr, NULL);
-@@ -720,12 +726,14 @@ check_garbage(PyGC_Head *collectable)
+@@ -717,12 +723,14 @@ check_garbage(PyGC_Head *collectable)
for (gc = collectable->gc.gc_next; gc != collectable;
gc = gc->gc.gc_next) {
_PyGCHead_SET_REFS(gc, Py_REFCNT(FROM_GC(gc)));
diff --git a/00307-allow-to-call-Py_Main-after-Py_Initialize.patch
b/00307-allow-to-call-Py_Main-after-Py_Initialize.patch
deleted file mode 100644
index d9c0486..0000000
--- a/00307-allow-to-call-Py_Main-after-Py_Initialize.patch
+++ /dev/null
@@ -1,150 +0,0 @@
-From bbd6fc7e77dbd33ae7d3670eaf7800b5d3ff42d3 Mon Sep 17 00:00:00 2001
-From: Victor Stinner <vstinner(a)redhat.com>
-Date: Fri, 20 Jul 2018 17:34:23 +0200
-Subject: [PATCH] bpo-34008: Allow to call Py_Main() after Py_Initialize()
- (GH-8043)
-
-Py_Main() can again be called after Py_Initialize(), as in Python
-3.6. The new configuration is ignored, except of
-_PyMainInterpreterConfig.argv which is used to update sys.argv.
-(cherry picked from commit fb47bca9ee2d07ce96df94b4e4abafd11826eb01)
-
-Co-authored-by: Victor Stinner <vstinner(a)redhat.com>
----
- Lib/test/test_embed.py | 8 ++++++++
- .../C API/2018-07-02-10-58-11.bpo-34008.COewz-.rst | 1 +
- Modules/main.c | 10 +++++++---
- Programs/_testembed.c | 16 +++++++++++++++
- Python/pylifecycle.c | 23 +++++++++++++++++++---
- 5 files changed, 52 insertions(+), 6 deletions(-)
- create mode 100644 Misc/NEWS.d/next/C API/2018-07-02-10-58-11.bpo-34008.COewz-.rst
-
-diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py
-index f3b60433ccc1..024c3f99a85d 100644
---- a/Lib/test/test_embed.py
-+++ b/Lib/test/test_embed.py
-@@ -238,6 +238,14 @@ def test_initialize_twice(self):
- self.assertEqual(out, '')
- self.assertEqual(err, '')
-
-+ def test_initialize_pymain(self):
-+ """
-+ bpo-34008: Calling Py_Main() after Py_Initialize() must not fail.
-+ """
-+ out, err = self.run_embedded_interpreter("initialize_pymain")
-+ self.assertEqual(out.rstrip(), "Py_Main() after Py_Initialize:
sys.argv=['-c', 'arg2']")
-+ self.assertEqual(err, '')
-+
-
- if __name__ == "__main__":
- unittest.main()
-diff --git a/Misc/NEWS.d/next/C API/2018-07-02-10-58-11.bpo-34008.COewz-.rst
b/Misc/NEWS.d/next/C API/2018-07-02-10-58-11.bpo-34008.COewz-.rst
-new file mode 100644
-index 000000000000..d9881b9945df
---- /dev/null
-+++ b/Misc/NEWS.d/next/C API/2018-07-02-10-58-11.bpo-34008.COewz-.rst
-@@ -0,0 +1 @@
-+Py_Main() can again be called after Py_Initialize(), as in Python 3.6.
-diff --git a/Modules/main.c b/Modules/main.c
-index 3809fa4abef5..31ebbceb83e0 100644
---- a/Modules/main.c
-+++ b/Modules/main.c
-@@ -2647,9 +2647,13 @@ pymain_main(_PyMain *pymain)
-
- pymain_init_stdio(pymain);
-
-- pymain->err = _Py_InitializeCore(&pymain->config);
-- if (_Py_INIT_FAILED(pymain->err)) {
-- _Py_FatalInitError(pymain->err);
-+ /* bpo-34008: For backward compatibility reasons, calling Py_Main() after
-+ Py_Initialize() ignores the new configuration. */
-+ if (!_PyRuntime.initialized) {
-+ pymain->err = _Py_InitializeCore(&pymain->config);
-+ if (_Py_INIT_FAILED(pymain->err)) {
-+ _Py_FatalInitError(pymain->err);
-+ }
- }
-
- if (pymain_init_python_main(pymain) < 0) {
-diff --git a/Programs/_testembed.c b/Programs/_testembed.c
-index b8827f074b9c..b1be682f7adc 100644
---- a/Programs/_testembed.c
-+++ b/Programs/_testembed.c
-@@ -276,6 +276,21 @@ static int test_initialize_twice(void)
- return 0;
- }
-
-+static int test_initialize_pymain(void)
-+{
-+ wchar_t *argv[] = {L"PYTHON", L"-c",
-+ L"import sys; print(f'Py_Main() after Py_Initialize:
sys.argv={sys.argv}')",
-+ L"arg2"};
-+ _testembed_Py_Initialize();
-+
-+ /* bpo-34008: Calling Py_Main() after Py_Initialize() must not crash */
-+ Py_Main(Py_ARRAY_LENGTH(argv), argv);
-+
-+ Py_Finalize();
-+
-+ return 0;
-+}
-+
-
- /* *********************************************************
- * List of test cases and the function that implements it.
-@@ -302,6 +317,7 @@ static struct TestCase TestCases[] = {
- { "pre_initialization_sys_options", test_pre_initialization_sys_options
},
- { "bpo20891", test_bpo20891 },
- { "initialize_twice", test_initialize_twice },
-+ { "initialize_pymain", test_initialize_pymain },
- { NULL, NULL }
- };
-
-diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
-index fdb759f480be..219a46558825 100644
---- a/Python/pylifecycle.c
-+++ b/Python/pylifecycle.c
-@@ -775,6 +775,22 @@ _Py_InitializeCore(const _PyCoreConfig *core_config)
- return _Py_INIT_OK();
- }
-
-+/* Py_Initialize() has already been called: update the main interpreter
-+ configuration. Example of bpo-34008: Py_Main() called after
-+ Py_Initialize(). */
-+static _PyInitError
-+_Py_ReconfigureMainInterpreter(PyInterpreterState *interp,
-+ const _PyMainInterpreterConfig *config)
-+{
-+ if (config->argv != NULL) {
-+ int res = PyDict_SetItemString(interp->sysdict, "argv",
config->argv);
-+ if (res < 0) {
-+ return _Py_INIT_ERR("fail to set sys.argv");
-+ }
-+ }
-+ return _Py_INIT_OK();
-+}
-+
- /* Update interpreter state based on supplied configuration settings
- *
- * After calling this function, most of the restrictions on the interpreter
-@@ -796,9 +812,6 @@ _Py_InitializeMainInterpreter(const _PyMainInterpreterConfig
*config)
- if (!_PyRuntime.core_initialized) {
- return _Py_INIT_ERR("runtime core not initialized");
- }
-- if (_PyRuntime.initialized) {
-- return _Py_INIT_ERR("main interpreter already initialized");
-- }
-
- /* Get current thread state and interpreter pointer */
- tstate = PyThreadState_GET();
-@@ -813,6 +826,10 @@ _Py_InitializeMainInterpreter(const _PyMainInterpreterConfig
*config)
- return _Py_INIT_ERR("failed to copy main interpreter config");
- }
-
-+ if (_PyRuntime.initialized) {
-+ return _Py_ReconfigureMainInterpreter(interp, config);
-+ }
-+
- if (interp->core_config._disable_importlib) {
- /* Special mode for freeze_importlib: run with no import system
- *
diff --git a/00308-tls-1.3.patch b/00308-tls-1.3.patch
deleted file mode 100644
index 7cd9e59..0000000
--- a/00308-tls-1.3.patch
+++ /dev/null
@@ -1,182 +0,0 @@
-diff --git a/Lib/test/dh1024.pem b/Lib/test/dh1024.pem
-deleted file mode 100644
-index a391176..0000000
---- a/Lib/test/dh1024.pem
-+++ /dev/null
-@@ -1,7 +0,0 @@
-------BEGIN DH PARAMETERS-----
--MIGHAoGBAIbzw1s9CT8SV5yv6L7esdAdZYZjPi3qWFs61CYTFFQnf2s/d09NYaJt
--rrvJhIzWavqnue71qXCf83/J3nz3FEwUU/L0mGyheVbsSHiI64wUo3u50wK5Igo0
--RNs/LD0irs7m0icZ//hijafTU+JOBiuA8zMI+oZfU7BGuc9XrUprAgEC
-------END DH PARAMETERS-----
--
--Generated with: openssl dhparam -out dh1024.pem 1024
-diff --git a/Lib/test/ffdh3072.pem b/Lib/test/ffdh3072.pem
-new file mode 100644
-index 0000000..ad69bac
---- /dev/null
-+++ b/Lib/test/ffdh3072.pem
-@@ -0,0 +1,41 @@
-+ DH Parameters: (3072 bit)
-+ prime:
-+ 00:ff:ff:ff:ff:ff:ff:ff:ff:ad:f8:54:58:a2:bb:
-+ 4a:9a:af:dc:56:20:27:3d:3c:f1:d8:b9:c5:83:ce:
-+ 2d:36:95:a9:e1:36:41:14:64:33:fb:cc:93:9d:ce:
-+ 24:9b:3e:f9:7d:2f:e3:63:63:0c:75:d8:f6:81:b2:
-+ 02:ae:c4:61:7a:d3:df:1e:d5:d5:fd:65:61:24:33:
-+ f5:1f:5f:06:6e:d0:85:63:65:55:3d:ed:1a:f3:b5:
-+ 57:13:5e:7f:57:c9:35:98:4f:0c:70:e0:e6:8b:77:
-+ e2:a6:89:da:f3:ef:e8:72:1d:f1:58:a1:36:ad:e7:
-+ 35:30:ac:ca:4f:48:3a:79:7a:bc:0a:b1:82:b3:24:
-+ fb:61:d1:08:a9:4b:b2:c8:e3:fb:b9:6a:da:b7:60:
-+ d7:f4:68:1d:4f:42:a3:de:39:4d:f4:ae:56:ed:e7:
-+ 63:72:bb:19:0b:07:a7:c8:ee:0a:6d:70:9e:02:fc:
-+ e1:cd:f7:e2:ec:c0:34:04:cd:28:34:2f:61:91:72:
-+ fe:9c:e9:85:83:ff:8e:4f:12:32:ee:f2:81:83:c3:
-+ fe:3b:1b:4c:6f:ad:73:3b:b5:fc:bc:2e:c2:20:05:
-+ c5:8e:f1:83:7d:16:83:b2:c6:f3:4a:26:c1:b2:ef:
-+ fa:88:6b:42:38:61:1f:cf:dc:de:35:5b:3b:65:19:
-+ 03:5b:bc:34:f4:de:f9:9c:02:38:61:b4:6f:c9:d6:
-+ e6:c9:07:7a:d9:1d:26:91:f7:f7:ee:59:8c:b0:fa:
-+ c1:86:d9:1c:ae:fe:13:09:85:13:92:70:b4:13:0c:
-+ 93:bc:43:79:44:f4:fd:44:52:e2:d7:4d:d3:64:f2:
-+ e2:1e:71:f5:4b:ff:5c:ae:82:ab:9c:9d:f6:9e:e8:
-+ 6d:2b:c5:22:36:3a:0d:ab:c5:21:97:9b:0d:ea:da:
-+ 1d:bf:9a:42:d5:c4:48:4e:0a:bc:d0:6b:fa:53:dd:
-+ ef:3c:1b:20:ee:3f:d5:9d:7c:25:e4:1d:2b:66:c6:
-+ 2e:37:ff:ff:ff:ff:ff:ff:ff:ff
-+ generator: 2 (0x2)
-+ recommended-private-length: 276 bits
-+-----BEGIN DH PARAMETERS-----
-+MIIBjAKCAYEA//////////+t+FRYortKmq/cViAnPTzx2LnFg84tNpWp4TZBFGQz
-++8yTnc4kmz75fS/jY2MMddj2gbICrsRhetPfHtXV/WVhJDP1H18GbtCFY2VVPe0a
-+87VXE15/V8k1mE8McODmi3fipona8+/och3xWKE2rec1MKzKT0g6eXq8CrGCsyT7
-+YdEIqUuyyOP7uWrat2DX9GgdT0Kj3jlN9K5W7edjcrsZCwenyO4KbXCeAvzhzffi
-+7MA0BM0oNC9hkXL+nOmFg/+OTxIy7vKBg8P+OxtMb61zO7X8vC7CIAXFjvGDfRaD
-+ssbzSibBsu/6iGtCOGEfz9zeNVs7ZRkDW7w09N75nAI4YbRvydbmyQd62R0mkff3
-+7lmMsPrBhtkcrv4TCYUTknC0EwyTvEN5RPT9RFLi103TZPLiHnH1S/9croKrnJ32
-+nuhtK8UiNjoNq8Uhl5sN6todv5pC1cRITgq80Gv6U93vPBsg7j/VnXwl5B0rZsYu
-+N///////////AgECAgIBFA==
-+-----END DH PARAMETERS-----
-diff --git a/Lib/test/test_ftplib.py b/Lib/test/test_ftplib.py
-index f9488a9..da8ba32 100644
---- a/Lib/test/test_ftplib.py
-+++ b/Lib/test/test_ftplib.py
-@@ -880,18 +880,23 @@ class TestTLS_FTPClass(TestCase):
- # clear text
- with self.client.transfercmd('list') as sock:
- self.assertNotIsInstance(sock, ssl.SSLSocket)
-+ self.assertEqual(sock.recv(1024), LIST_DATA.encode('ascii'))
- self.assertEqual(self.client.voidresp(), "226 transfer complete")
-
- # secured, after PROT P
- self.client.prot_p()
- with self.client.transfercmd('list') as sock:
- self.assertIsInstance(sock, ssl.SSLSocket)
-+ # consume from SSL socket to finalize handshake and avoid
-+ # "SSLError [SSL] shutdown while in init"
-+ self.assertEqual(sock.recv(1024), LIST_DATA.encode('ascii'))
- self.assertEqual(self.client.voidresp(), "226 transfer complete")
-
- # PROT C is issued, the connection must be in cleartext again
- self.client.prot_c()
- with self.client.transfercmd('list') as sock:
- self.assertNotIsInstance(sock, ssl.SSLSocket)
-+ self.assertEqual(sock.recv(1024), LIST_DATA.encode('ascii'))
- self.assertEqual(self.client.voidresp(), "226 transfer complete")
-
- def test_login(self):
-diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
-index 7bbaa9f..ea528b5 100644
---- a/Lib/test/test_ssl.py
-+++ b/Lib/test/test_ssl.py
-@@ -55,7 +55,6 @@ CAPATH = data_file("capath")
- BYTES_CAPATH = os.fsencode(CAPATH)
- CAFILE_NEURONIO = data_file("capath", "4e1295a3.0")
- CAFILE_CACERT = data_file("capath", "5ed36f99.0")
--WRONG_CERT = data_file("wrongcert.pem")
-
- CERTFILE_INFO = {
- 'issuer': ((('countryName', 'XY'),),
-@@ -118,7 +117,7 @@ BADKEY = data_file("badkey.pem")
- NOKIACERT = data_file("nokia.pem")
- NULLBYTECERT = data_file("nullbytecert.pem")
-
--DHFILE = data_file("dh1024.pem")
-+DHFILE = data_file("ffdh3072.pem")
- BYTES_DHFILE = os.fsencode(DHFILE)
-
- # Not defined in all versions of OpenSSL
-@@ -2846,8 +2845,8 @@ class ThreadedTests(unittest.TestCase):
- connect to it with a wrong client certificate fails.
- """
- client_context, server_context, hostname = testing_context()
-- # load client cert
-- client_context.load_cert_chain(WRONG_CERT)
-+ # load client cert that is not signed by trusted CA
-+ client_context.load_cert_chain(CERTFILE)
- # require TLS client authentication
- server_context.verify_mode = ssl.CERT_REQUIRED
- # TLS 1.3 has different handshake
-@@ -2879,7 +2878,8 @@ class ThreadedTests(unittest.TestCase):
- @unittest.skipUnless(ssl.HAS_TLSv1_3, "Test needs TLS 1.3")
- def test_wrong_cert_tls13(self):
- client_context, server_context, hostname = testing_context()
-- client_context.load_cert_chain(WRONG_CERT)
-+ # load client cert that is not signed by trusted CA
-+ client_context.load_cert_chain(CERTFILE)
- server_context.verify_mode = ssl.CERT_REQUIRED
- server_context.minimum_version = ssl.TLSVersion.TLSv1_3
- client_context.minimum_version = ssl.TLSVersion.TLSv1_3
-diff --git a/Lib/test/wrongcert.pem b/Lib/test/wrongcert.pem
-deleted file mode 100644
-index 5f92f9b..0000000
---- a/Lib/test/wrongcert.pem
-+++ /dev/null
-@@ -1,32 +0,0 @@
-------BEGIN RSA PRIVATE KEY-----
--MIICXAIBAAKBgQC89ZNxjTgWgq7Z1g0tJ65w+k7lNAj5IgjLb155UkUrz0XsHDnH
--FlbsVUg2Xtk6+bo2UEYIzN7cIm5ImpmyW/2z0J1IDVDlvR2xJ659xrE0v5c2cB6T
--f9lnNTwpSoeK24Nd7Jwq4j9vk95fLrdqsBq0/KVlsCXeixS/CaqqduXfvwIDAQAB
--AoGAQFko4uyCgzfxr4Ezb4Mp5pN3Npqny5+Jey3r8EjSAX9Ogn+CNYgoBcdtFgbq
--1yif/0sK7ohGBJU9FUCAwrqNBI9ZHB6rcy7dx+gULOmRBGckln1o5S1+smVdmOsW
--7zUVLBVByKuNWqTYFlzfVd6s4iiXtAE2iHn3GCyYdlICwrECQQDhMQVxHd3EFbzg
--SFmJBTARlZ2GKA3c1g/h9/XbkEPQ9/RwI3vnjJ2RaSnjlfoLl8TOcf0uOGbOEyFe
--19RvCLXjAkEA1s+UE5ziF+YVkW3WolDCQ2kQ5WG9+ccfNebfh6b67B7Ln5iG0Sbg
--ky9cjsO3jbMJQtlzAQnH1850oRD5Gi51dQJAIbHCDLDZU9Ok1TI+I2BhVuA6F666
--lEZ7TeZaJSYq34OaUYUdrwG9OdqwZ9sy9LUav4ESzu2lhEQchCJrKMn23QJAReqs
--ZLHUeTjfXkVk7dHhWPWSlUZ6AhmIlA/AQ7Payg2/8wM/JkZEJEPvGVykms9iPUrv
--frADRr+hAGe43IewnQJBAJWKZllPgKuEBPwoEldHNS8nRu61D7HzxEzQ2xnfj+Nk
--2fgf1MAzzTRsikfGENhVsVWeqOcijWb6g5gsyCmlRpc=
-------END RSA PRIVATE KEY-----
-------BEGIN CERTIFICATE-----
--MIICsDCCAhmgAwIBAgIJAOqYOYFJfEEoMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
--BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
--aWRnaXRzIFB0eSBMdGQwHhcNMDgwNjI2MTgxNTUyWhcNMDkwNjI2MTgxNTUyWjBF
--MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50
--ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
--gQC89ZNxjTgWgq7Z1g0tJ65w+k7lNAj5IgjLb155UkUrz0XsHDnHFlbsVUg2Xtk6
--+bo2UEYIzN7cIm5ImpmyW/2z0J1IDVDlvR2xJ659xrE0v5c2cB6Tf9lnNTwpSoeK
--24Nd7Jwq4j9vk95fLrdqsBq0/KVlsCXeixS/CaqqduXfvwIDAQABo4GnMIGkMB0G
--A1UdDgQWBBTctMtI3EO9OjLI0x9Zo2ifkwIiNjB1BgNVHSMEbjBsgBTctMtI3EO9
--OjLI0x9Zo2ifkwIiNqFJpEcwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUt
--U3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZIIJAOqYOYFJ
--fEEoMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAQwa7jya/DfhaDn7E
--usPkpgIX8WCL2B1SqnRTXEZfBPPVq/cUmFGyEVRVATySRuMwi8PXbVcOhXXuocA+
--43W+iIsD9pXapCZhhOerCq18TC1dWK98vLUsoK8PMjB6e5H/O8bqojv0EeC+fyCw
--eSHj5jpC8iZKjCHBn+mAi4cQ514=
-------END CERTIFICATE-----
-diff --git a/Lib/test/test_poplib.py b/Lib/test/test_poplib.py
-index 20d4eeac12..a0c683bbcf 100644
---- a/Lib/test/test_poplib.py
-+++ b/Lib/test/test_poplib.py
-@@ -178,7 +178,8 @@ class DummyPOP3Handler(asynchat.async_chat):
- return self.handle_close()
- # TODO: SSLError does not expose alert information
- elif ("SSLV3_ALERT_BAD_CERTIFICATE" in err.args[1] or
-- "SSLV3_ALERT_CERTIFICATE_UNKNOWN" in err.args[1]):
-+ "SSLV3_ALERT_CERTIFICATE_UNKNOWN" in err.args[1] or
-+ "bad record type" in err.args[1]):
- return self.handle_close()
- raise
- except OSError as err:
diff --git a/python3.spec b/python3.spec
index 6bc5a64..2e2ee57 100644
--- a/python3.spec
+++ b/python3.spec
@@ -13,8 +13,8 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
-Version: %{pybasever}.0
-Release: 10%{?dist}
+Version: %{pybasever}.1
+Release: 1%{?dist}
License: Python
@@ -196,7 +196,7 @@ BuildRequires: python-pip-wheel
# Source code and patches
# =======================
-Source:
https://www.python.org/ftp/python/%{version}/Python-%{version}.tar.xz
+Source:
https://www.python.org/ftp/python/%{version}/Python-%{version}%{?prerel}....
# A simple script to check timestamps of bytecode files
# Run in check section with Python that is currently being built
@@ -305,21 +305,6 @@ Patch274: 00274-fix-arch-names.patch
# and:
https://src.fedoraproject.org/rpms/redhat-rpm-config/c/078af19
Patch291: 00291-setup-Link-ctypes-against-dl-explicitly.patch
-# 00307 #
-# Allow to call Py_Main() after Py_Initialize()
-# See:
https://bugzilla.redhat.com/show_bug.cgi?id=1595421
-# and:
https://bugs.python.org/issue34008
-Patch307: 00307-allow-to-call-Py_Main-after-Py_Initialize.patch
-
-# 00308 #
-# TLS 1.3 related fixes from upstream:
-#
https://github.com/python/cpython/pull/8762
-#
https://github.com/python/cpython/pull/8787
-# And a workaround before openssl is 1.1.1-pre9:
-#
https://bugzilla.redhat.com/show_bug.cgi?id=1609291#c12
-# See:
https://bugzilla.redhat.com/show_bug.cgi?id=1609291
-Patch308: 00308-tls-1.3.patch
-
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
@@ -650,8 +635,6 @@ rm Lib/ensurepip/_bundled/*.whl
%patch251 -p1
%patch274 -p1
%patch291 -p1
-%patch307 -p1
-%patch308 -p1
# Remove files that should be generated by the build
@@ -1551,6 +1534,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Mon Oct 22 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.1-1
+- Update to 3.7.1
+
* Thu Sep 27 2018 Petr Viktorin <pviktori(a)redhat.com> - 3.7.0-10
- Compile the debug build with -Og rather than -O0
diff --git a/sources b/sources
index 099b345..4d40818 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (Python-3.7.0.tar.xz) =
8bb11233fb67ee9ab8ed1b72f8fdc62f66e26a6beaaeb92448bce681cf065269833b1658d3ed2459127f25ba43adb0eab73cf27c59834a2a803fb529b4216739
+SHA512 (Python-3.7.1.tar.xz) =
3eb62a0127609b14420a47442727702f396519c649625aca59883d04f4c02e5f37ba1d58ac8e93c49d14a63f17ae7909315c33fc813293dbcdb6127f39a148b0
commit 091b4b20e9f8fc324b0db7e04cb20b8426ab8612
Author: Petr Viktorin <pviktori(a)redhat.com>
Date: Thu Sep 27 11:32:47 2018 +0200
Compile the debug build with -Og rather than -O0
That is, "optimize for debugging experience" rather than
"don't optimize".
diff --git a/python3.spec b/python3.spec
index 993132b..6bc5a64 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.0
-Release: 9%{?dist}
+Release: 10%{?dist}
License: Python
@@ -742,7 +742,7 @@ BuildPython() {
%if %{with debug_build}
BuildPython debug \
"--without-ensurepip --with-pydebug" \
- "-O0"
+ "-Og"
%endif # with debug_build
BuildPython optimized \
@@ -1551,6 +1551,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Thu Sep 27 2018 Petr Viktorin <pviktori(a)redhat.com> - 3.7.0-10
+- Compile the debug build with -Og rather than -O0
+
* Thu Aug 30 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-9
- Require python3-setuptools from python3-devel to prevent packaging errors (#1623914)
commit e354fb5703f6b2157235a4bf6df150a41ad718ba
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Thu Sep 27 13:57:12 2018 +0200
Disable test_gdb for now as it fails
with latest gdb.
diff --git a/python3.spec b/python3.spec
index 6ebe8d0..993132b 100644
--- a/python3.spec
+++ b/python3.spec
@@ -1059,12 +1059,10 @@ CheckPython() {
-wW --slowest --findleaks \
-x test_distutils \
-x test_bdist_rpm \
+ -x test_gdb \
%ifarch %{mips64}
-x test_ctypes \
%endif
- %ifarch %{power64} s390 s390x armv7hl %{mips}
- -x test_gdb \
- %endif
%ifarch ppc64le
-x test_buffer \
%endif
commit 33cd8ff3711a9a2bed9841431998d85c95415e82
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Mon Sep 3 14:10:31 2018 +0200
rpmlintrc updates
* put 64 in ()? to support 32bit RPMs
* add new executables to the manpages ignore list
diff --git a/python3.rpmlintrc b/python3.rpmlintrc
index 6c1ce83..d59fe13 100644
--- a/python3.rpmlintrc
+++ b/python3.rpmlintrc
@@ -26,12 +26,12 @@ addFilter(r'only-non-binary-in-usr-lib')
# some devel files that are deliberately needed
addFilter(r'devel-file-in-non-devel-package
/usr/include/python3\.\dm/pyconfig-(32|64)\.h')
-addFilter(r'devel-file-in-non-devel-package
/usr/lib64/python3\.\d/distutils/tests/xxmodule\.c')
+addFilter(r'devel-file-in-non-devel-package
/usr/lib(64)?/python3\.\d/distutils/tests/xxmodule\.c')
# SORRY, NOT SORRY:
# manual pages
-addFilter(r'no-manual-page-for-binary
(idle|pydoc|pyvenv|2to3|python3-debug|pathfix\.py)')
+addFilter(r'no-manual-page-for-binary
(idle|pydoc|pyvenv|2to3|python3-debug|pathfix|msgfmt|pygettext)')
addFilter(r'no-manual-page-for-binary python3.*-config$')
addFilter(r'no-manual-page-for-binary python3.\dd?m$')
commit 704ecff9600ad338b4b00a7ca6677917102a75e3
Author: Petr plchal <psplicha(a)redhat.com>
Date: Thu Jul 19 17:02:45 2018 +0200
Enable basic venv smoke test in the CI
This executes virtual environment smoke test from the shared
python tests repository against Python 3.7.
diff --git a/tests/tests.yml b/tests/tests.yml
new file mode 100644
index 0000000..2e14ca0
--- /dev/null
+++ b/tests/tests.yml
@@ -0,0 +1,17 @@
+---
+- hosts: localhost
+ roles:
+ - role: standard-test-basic
+ tags:
+ - classic
+ repositories:
+ - repo: "https://src.fedoraproject.org/tests/python.git"
+ dest: "python"
+ tests:
+ - smoke:
+ dir: python/smoke
+ run: VERSION=3.7 ./venv.sh
+ required_packages:
+ - gcc
+ - python3-tox
+ - python3-devel
commit 4da7cff796031aae6132274def989f6fbcc482f7
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Thu Aug 30 15:17:04 2018 +0200
Require python3-setuptools from python3-devel to prevent packaging errors (#1623914)
diff --git a/python3.spec b/python3.spec
index 5969a45..6ebe8d0 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.0
-Release: 8%{?dist}
+Release: 9%{?dist}
License: Python
@@ -458,6 +458,15 @@ Requires: python-rpm-macros
Requires: python3-rpm-macros
Requires: python3-rpm-generators
+# This is not "API" (packages that need setuptools should still BuildRequire
it)
+# However some packages apparently can build both with and without setuptools
+# producing egg-info as file or directory (depending on setuptools presence).
+# Directory-to-file updates are problematic in RPM, so we ensure setuptools is
+# installed when -devel is required.
+# See
https://bugzilla.redhat.com/show_bug.cgi?id=1623914
+# See
https://fedoraproject.org/wiki/Packaging:Directory_Replacement
+Requires: python3-setuptools
+
#
https://bugzilla.redhat.com/show_bug.cgi?id=1217376
#
https://bugzilla.redhat.com/show_bug.cgi?id=1496757
#
https://bugzilla.redhat.com/show_bug.cgi?id=1218294
@@ -1544,6 +1553,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Thu Aug 30 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-9
+- Require python3-setuptools from python3-devel to prevent packaging errors (#1623914)
+
* Fri Aug 17 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-8
- Add /usr/bin/pygettext3.py and msgfmt3.py to python3-devel
Resolves: rhbz#1571474
commit 37056bc0f97ec9610dc96fa567da39f8e5c5d811
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Thu Jul 26 14:19:23 2018 +0200
Renew check-pyc-timestamps.py
- rename it, the are no pyo files on Python 3
- make sure to check all levels of pyc files optimization
- use path globs
- use comprehensions instead of map + filter
- use f-strings and print() instead of sys.stderr.write()
diff --git a/check-pyc-and-pyo-timestamps.py b/check-pyc-and-pyo-timestamps.py
deleted file mode 100644
index ab75c9f..0000000
--- a/check-pyc-and-pyo-timestamps.py
+++ /dev/null
@@ -1,66 +0,0 @@
-"""Checks if all *.pyc and *.pyo files have later mtime than their *.py
files."""
-
-import importlib.util
-import os
-import sys
-
-# list of test and other files that we expect not to have bytecode
-not_compiled = [
- '/usr/bin/pathfix.py',
- '/usr/bin/pygettext3.py',
- f'/usr/bin/pygettext{sys.version[:3]}.py',
- '/usr/bin/msgfmt3.py',
- f'/usr/bin/msgfmt{sys.version[:3]}.py',
- 'test/bad_coding.py',
- 'test/bad_coding2.py',
- 'test/badsyntax_3131.py',
- 'test/badsyntax_future3.py',
- 'test/badsyntax_future4.py',
- 'test/badsyntax_future5.py',
- 'test/badsyntax_future6.py',
- 'test/badsyntax_future7.py',
- 'test/badsyntax_future8.py',
- 'test/badsyntax_future9.py',
- 'test/badsyntax_future10.py',
- 'test/badsyntax_async1.py',
- 'test/badsyntax_async2.py',
- 'test/badsyntax_async3.py',
- 'test/badsyntax_async4.py',
- 'test/badsyntax_async5.py',
- 'test/badsyntax_async6.py',
- 'test/badsyntax_async7.py',
- 'test/badsyntax_async8.py',
- 'test/badsyntax_async9.py',
- 'test/badsyntax_pep3120.py',
- 'lib2to3/tests/data/bom.py',
- 'lib2to3/tests/data/crlf.py',
- 'lib2to3/tests/data/different_encoding.py',
- 'lib2to3/tests/data/false_encoding.py',
- 'lib2to3/tests/data/py2_test_grammar.py',
- '.debug-gdb.py',
-]
-failed = 0
-
-
-def bytecode_expected(source):
- for f in not_compiled:
- if source.endswith(f):
- return False
- return True
-
-
-compiled = filter(lambda f: bytecode_expected(f), sys.argv[1:])
-for f in compiled:
- # check both pyo and pyc
- to_check = map(lambda b: importlib.util.cache_from_source(f, b), (True, False))
- f_mtime = os.path.getmtime(f)
- for c in to_check:
- c_mtime = os.path.getmtime(c)
- if c_mtime < f_mtime:
- sys.stderr.write('Failed bytecompilation timestamps check: ')
- sys.stderr.write('Bytecode file {} is older than source file
{}.\n'.format(c, f))
- failed += 1
-
-if failed:
- sys.stderr.write('\n{} files failed bytecompilation timestamps
check.\n'.format(failed))
- sys.exit(1)
diff --git a/check-pyc-timestamps.py b/check-pyc-timestamps.py
new file mode 100644
index 0000000..91af4fd
--- /dev/null
+++ b/check-pyc-timestamps.py
@@ -0,0 +1,55 @@
+"""Checks if all *.pyc files have later mtime than their *.py
files."""
+
+import os
+import sys
+from importlib.util import cache_from_source
+from pathlib import Path
+
+
+RPM_BUILD_ROOT = os.environ.get('RPM_BUILD_ROOT', '')
+
+# ...cpython-3X.pyc
+# ...cpython-3X.opt-1.pyc
+# ...cpython-3X.opt-2.pyc
+LEVELS = (None, 1, 2)
+
+# list of globs of test and other files that we expect not to have bytecode
+not_compiled = [
+ '/usr/bin/*',
+ '*/test/bad_coding.py',
+ '*/test/bad_coding2.py',
+ '*/test/badsyntax_*.py',
+ '*/lib2to3/tests/data/bom.py',
+ '*/lib2to3/tests/data/crlf.py',
+ '*/lib2to3/tests/data/different_encoding.py',
+ '*/lib2to3/tests/data/false_encoding.py',
+ '*/lib2to3/tests/data/py2_test_grammar.py',
+ '*.debug-gdb.py',
+]
+
+
+def bytecode_expected(path):
+ path = Path(path[len(RPM_BUILD_ROOT):])
+ for glob in not_compiled:
+ if path.match(glob):
+ return False
+ return True
+
+
+failed = 0
+compiled = (path for path in sys.argv[1:] if bytecode_expected(path))
+for path in compiled:
+ to_check = (cache_from_source(path, optimization=opt) for opt in LEVELS)
+ f_mtime = os.path.getmtime(path)
+ for pyc in to_check:
+ c_mtime = os.path.getmtime(pyc)
+ if c_mtime < f_mtime:
+ print('Failed bytecompilation timestamps check: '
+ f'Bytecode file {pyc} is older than source file {path}',
+ file=sys.stderr)
+ failed += 1
+
+if failed:
+ print(f'\n{failed} files failed bytecompilation timestamps check.',
+ file=sys.stderr)
+ sys.exit(1)
diff --git a/python3.spec b/python3.spec
index a6c6481..5969a45 100644
--- a/python3.spec
+++ b/python3.spec
@@ -200,8 +200,8 @@ Source:
https://www.python.org/ftp/python/%{version}/Python-%{version}.tar.xz
# A simple script to check timestamps of bytecode files
# Run in check section with Python that is currently being built
-# Written by bkabrda
-Source8: check-pyc-and-pyo-timestamps.py
+# Originally written by bkabrda
+Source8: check-pyc-timestamps.py
# Desktop menu entry for idle3
Source10: idle3.desktop
commit 83a5f52678e1699558dd538004931e76394cd5c9
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Thu Jul 26 13:44:49 2018 +0200
Add /usr/bin/pygettext3.py and msgfmt3.py to python3-devel
Resolves: rhbz#1571474
diff --git a/check-pyc-and-pyo-timestamps.py b/check-pyc-and-pyo-timestamps.py
index 262a985..ab75c9f 100644
--- a/check-pyc-and-pyo-timestamps.py
+++ b/check-pyc-and-pyo-timestamps.py
@@ -7,6 +7,10 @@ import sys
# list of test and other files that we expect not to have bytecode
not_compiled = [
'/usr/bin/pathfix.py',
+ '/usr/bin/pygettext3.py',
+ f'/usr/bin/pygettext{sys.version[:3]}.py',
+ '/usr/bin/msgfmt3.py',
+ f'/usr/bin/msgfmt{sys.version[:3]}.py',
'test/bad_coding.py',
'test/bad_coding2.py',
'test/badsyntax_3131.py',
diff --git a/python3.spec b/python3.spec
index 91d0f34..a6c6481 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.0
-Release: 7%{?dist}
+Release: 8%{?dist}
License: Python
@@ -893,6 +893,14 @@ sed -i -e
"s/'pyconfig.h'/'%{_pyconfig_h}'/" \
# See
https://github.com/fedora-python/python-rpm-porting/issues/24
cp -p Tools/scripts/pathfix.py %{buildroot}%{_bindir}/
+# Install i18n tools to bindir
+# They are also in python2, so we version them
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1571474
+for tool in pygettext msgfmt; do
+ cp -p Tools/i18n/${tool}.py %{buildroot}%{_bindir}/${tool}%{pybasever}.py
+ ln -s ${tool}%{pybasever}.py %{buildroot}%{_bindir}/${tool}3.py
+done
+
# Switch all shebangs to refer to the specific Python version.
# This currently only covers files matching ^[a-zA-Z0-9_]+\.py$,
# so handle files named using other naming scheme separately.
@@ -900,6 +908,7 @@ LD_LIBRARY_PATH=./build/optimized ./build/optimized/python \
Tools/scripts/pathfix.py \
-i "%{_bindir}/python%{pybasever}" -pn \
%{buildroot} \
+ %{buildroot}%{_bindir}/*%{pybasever}.py \
%{?with_gdb_hooks:%{buildroot}$DirHoldingGdbPy/*.py}
# Remove tests for python3-tools which was removed in
@@ -964,6 +973,8 @@ mv %{buildroot}%{_bindir}/2to3-%{pybasever}
%{buildroot}%{_bindir}/2to3
rm %{buildroot}%{_bindir}/python3
rm %{buildroot}%{_bindir}/pydoc3
rm %{buildroot}%{_bindir}/pathfix.py
+rm %{buildroot}%{_bindir}/pygettext3.py
+rm %{buildroot}%{_bindir}/msgfmt3.py
rm %{buildroot}%{_bindir}/idle3
rm %{buildroot}%{_bindir}/python3-*
rm %{buildroot}%{_bindir}/pyvenv
@@ -1328,8 +1339,13 @@ CheckPython optimized
%{_bindir}/python3-config
%{_libdir}/pkgconfig/python3.pc
%{_bindir}/pathfix.py
+%{_bindir}/pygettext3.py
+%{_bindir}/msgfmt3.py
%endif
+%{_bindir}/pygettext%{pybasever}.py
+%{_bindir}/msgfmt%{pybasever}.py
+
%{_bindir}/python%{pybasever}-config
%{_bindir}/python%{LDVERSION_optimized}-config
%{_bindir}/python%{LDVERSION_optimized}-*-config
@@ -1528,6 +1544,10 @@ CheckPython optimized
# ======================================================
%changelog
+* Fri Aug 17 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-8
+- Add /usr/bin/pygettext3.py and msgfmt3.py to python3-devel
+Resolves: rhbz#1571474
+
* Fri Aug 17 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-7
- Backport TLS 1.3 related fixes to fix FTBFS
Resolves: rhbz#1609291
commit 4aa9ebcc0385f0475d3d8ad1593fb1d5806a9cea
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Fri Aug 17 13:00:03 2018 +0200
Backport TLS 1.3 related fixes to fix FTBFS
Resolves
https://bugzilla.redhat.com/show_bug.cgi?id=1609291
diff --git a/00308-tls-1.3.patch b/00308-tls-1.3.patch
new file mode 100644
index 0000000..7cd9e59
--- /dev/null
+++ b/00308-tls-1.3.patch
@@ -0,0 +1,182 @@
+diff --git a/Lib/test/dh1024.pem b/Lib/test/dh1024.pem
+deleted file mode 100644
+index a391176..0000000
+--- a/Lib/test/dh1024.pem
++++ /dev/null
+@@ -1,7 +0,0 @@
+------BEGIN DH PARAMETERS-----
+-MIGHAoGBAIbzw1s9CT8SV5yv6L7esdAdZYZjPi3qWFs61CYTFFQnf2s/d09NYaJt
+-rrvJhIzWavqnue71qXCf83/J3nz3FEwUU/L0mGyheVbsSHiI64wUo3u50wK5Igo0
+-RNs/LD0irs7m0icZ//hijafTU+JOBiuA8zMI+oZfU7BGuc9XrUprAgEC
+------END DH PARAMETERS-----
+-
+-Generated with: openssl dhparam -out dh1024.pem 1024
+diff --git a/Lib/test/ffdh3072.pem b/Lib/test/ffdh3072.pem
+new file mode 100644
+index 0000000..ad69bac
+--- /dev/null
++++ b/Lib/test/ffdh3072.pem
+@@ -0,0 +1,41 @@
++ DH Parameters: (3072 bit)
++ prime:
++ 00:ff:ff:ff:ff:ff:ff:ff:ff:ad:f8:54:58:a2:bb:
++ 4a:9a:af:dc:56:20:27:3d:3c:f1:d8:b9:c5:83:ce:
++ 2d:36:95:a9:e1:36:41:14:64:33:fb:cc:93:9d:ce:
++ 24:9b:3e:f9:7d:2f:e3:63:63:0c:75:d8:f6:81:b2:
++ 02:ae:c4:61:7a:d3:df:1e:d5:d5:fd:65:61:24:33:
++ f5:1f:5f:06:6e:d0:85:63:65:55:3d:ed:1a:f3:b5:
++ 57:13:5e:7f:57:c9:35:98:4f:0c:70:e0:e6:8b:77:
++ e2:a6:89:da:f3:ef:e8:72:1d:f1:58:a1:36:ad:e7:
++ 35:30:ac:ca:4f:48:3a:79:7a:bc:0a:b1:82:b3:24:
++ fb:61:d1:08:a9:4b:b2:c8:e3:fb:b9:6a:da:b7:60:
++ d7:f4:68:1d:4f:42:a3:de:39:4d:f4:ae:56:ed:e7:
++ 63:72:bb:19:0b:07:a7:c8:ee:0a:6d:70:9e:02:fc:
++ e1:cd:f7:e2:ec:c0:34:04:cd:28:34:2f:61:91:72:
++ fe:9c:e9:85:83:ff:8e:4f:12:32:ee:f2:81:83:c3:
++ fe:3b:1b:4c:6f:ad:73:3b:b5:fc:bc:2e:c2:20:05:
++ c5:8e:f1:83:7d:16:83:b2:c6:f3:4a:26:c1:b2:ef:
++ fa:88:6b:42:38:61:1f:cf:dc:de:35:5b:3b:65:19:
++ 03:5b:bc:34:f4:de:f9:9c:02:38:61:b4:6f:c9:d6:
++ e6:c9:07:7a:d9:1d:26:91:f7:f7:ee:59:8c:b0:fa:
++ c1:86:d9:1c:ae:fe:13:09:85:13:92:70:b4:13:0c:
++ 93:bc:43:79:44:f4:fd:44:52:e2:d7:4d:d3:64:f2:
++ e2:1e:71:f5:4b:ff:5c:ae:82:ab:9c:9d:f6:9e:e8:
++ 6d:2b:c5:22:36:3a:0d:ab:c5:21:97:9b:0d:ea:da:
++ 1d:bf:9a:42:d5:c4:48:4e:0a:bc:d0:6b:fa:53:dd:
++ ef:3c:1b:20:ee:3f:d5:9d:7c:25:e4:1d:2b:66:c6:
++ 2e:37:ff:ff:ff:ff:ff:ff:ff:ff
++ generator: 2 (0x2)
++ recommended-private-length: 276 bits
++-----BEGIN DH PARAMETERS-----
++MIIBjAKCAYEA//////////+t+FRYortKmq/cViAnPTzx2LnFg84tNpWp4TZBFGQz
+++8yTnc4kmz75fS/jY2MMddj2gbICrsRhetPfHtXV/WVhJDP1H18GbtCFY2VVPe0a
++87VXE15/V8k1mE8McODmi3fipona8+/och3xWKE2rec1MKzKT0g6eXq8CrGCsyT7
++YdEIqUuyyOP7uWrat2DX9GgdT0Kj3jlN9K5W7edjcrsZCwenyO4KbXCeAvzhzffi
++7MA0BM0oNC9hkXL+nOmFg/+OTxIy7vKBg8P+OxtMb61zO7X8vC7CIAXFjvGDfRaD
++ssbzSibBsu/6iGtCOGEfz9zeNVs7ZRkDW7w09N75nAI4YbRvydbmyQd62R0mkff3
++7lmMsPrBhtkcrv4TCYUTknC0EwyTvEN5RPT9RFLi103TZPLiHnH1S/9croKrnJ32
++nuhtK8UiNjoNq8Uhl5sN6todv5pC1cRITgq80Gv6U93vPBsg7j/VnXwl5B0rZsYu
++N///////////AgECAgIBFA==
++-----END DH PARAMETERS-----
+diff --git a/Lib/test/test_ftplib.py b/Lib/test/test_ftplib.py
+index f9488a9..da8ba32 100644
+--- a/Lib/test/test_ftplib.py
++++ b/Lib/test/test_ftplib.py
+@@ -880,18 +880,23 @@ class TestTLS_FTPClass(TestCase):
+ # clear text
+ with self.client.transfercmd('list') as sock:
+ self.assertNotIsInstance(sock, ssl.SSLSocket)
++ self.assertEqual(sock.recv(1024), LIST_DATA.encode('ascii'))
+ self.assertEqual(self.client.voidresp(), "226 transfer complete")
+
+ # secured, after PROT P
+ self.client.prot_p()
+ with self.client.transfercmd('list') as sock:
+ self.assertIsInstance(sock, ssl.SSLSocket)
++ # consume from SSL socket to finalize handshake and avoid
++ # "SSLError [SSL] shutdown while in init"
++ self.assertEqual(sock.recv(1024), LIST_DATA.encode('ascii'))
+ self.assertEqual(self.client.voidresp(), "226 transfer complete")
+
+ # PROT C is issued, the connection must be in cleartext again
+ self.client.prot_c()
+ with self.client.transfercmd('list') as sock:
+ self.assertNotIsInstance(sock, ssl.SSLSocket)
++ self.assertEqual(sock.recv(1024), LIST_DATA.encode('ascii'))
+ self.assertEqual(self.client.voidresp(), "226 transfer complete")
+
+ def test_login(self):
+diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
+index 7bbaa9f..ea528b5 100644
+--- a/Lib/test/test_ssl.py
++++ b/Lib/test/test_ssl.py
+@@ -55,7 +55,6 @@ CAPATH = data_file("capath")
+ BYTES_CAPATH = os.fsencode(CAPATH)
+ CAFILE_NEURONIO = data_file("capath", "4e1295a3.0")
+ CAFILE_CACERT = data_file("capath", "5ed36f99.0")
+-WRONG_CERT = data_file("wrongcert.pem")
+
+ CERTFILE_INFO = {
+ 'issuer': ((('countryName', 'XY'),),
+@@ -118,7 +117,7 @@ BADKEY = data_file("badkey.pem")
+ NOKIACERT = data_file("nokia.pem")
+ NULLBYTECERT = data_file("nullbytecert.pem")
+
+-DHFILE = data_file("dh1024.pem")
++DHFILE = data_file("ffdh3072.pem")
+ BYTES_DHFILE = os.fsencode(DHFILE)
+
+ # Not defined in all versions of OpenSSL
+@@ -2846,8 +2845,8 @@ class ThreadedTests(unittest.TestCase):
+ connect to it with a wrong client certificate fails.
+ """
+ client_context, server_context, hostname = testing_context()
+- # load client cert
+- client_context.load_cert_chain(WRONG_CERT)
++ # load client cert that is not signed by trusted CA
++ client_context.load_cert_chain(CERTFILE)
+ # require TLS client authentication
+ server_context.verify_mode = ssl.CERT_REQUIRED
+ # TLS 1.3 has different handshake
+@@ -2879,7 +2878,8 @@ class ThreadedTests(unittest.TestCase):
+ @unittest.skipUnless(ssl.HAS_TLSv1_3, "Test needs TLS 1.3")
+ def test_wrong_cert_tls13(self):
+ client_context, server_context, hostname = testing_context()
+- client_context.load_cert_chain(WRONG_CERT)
++ # load client cert that is not signed by trusted CA
++ client_context.load_cert_chain(CERTFILE)
+ server_context.verify_mode = ssl.CERT_REQUIRED
+ server_context.minimum_version = ssl.TLSVersion.TLSv1_3
+ client_context.minimum_version = ssl.TLSVersion.TLSv1_3
+diff --git a/Lib/test/wrongcert.pem b/Lib/test/wrongcert.pem
+deleted file mode 100644
+index 5f92f9b..0000000
+--- a/Lib/test/wrongcert.pem
++++ /dev/null
+@@ -1,32 +0,0 @@
+------BEGIN RSA PRIVATE KEY-----
+-MIICXAIBAAKBgQC89ZNxjTgWgq7Z1g0tJ65w+k7lNAj5IgjLb155UkUrz0XsHDnH
+-FlbsVUg2Xtk6+bo2UEYIzN7cIm5ImpmyW/2z0J1IDVDlvR2xJ659xrE0v5c2cB6T
+-f9lnNTwpSoeK24Nd7Jwq4j9vk95fLrdqsBq0/KVlsCXeixS/CaqqduXfvwIDAQAB
+-AoGAQFko4uyCgzfxr4Ezb4Mp5pN3Npqny5+Jey3r8EjSAX9Ogn+CNYgoBcdtFgbq
+-1yif/0sK7ohGBJU9FUCAwrqNBI9ZHB6rcy7dx+gULOmRBGckln1o5S1+smVdmOsW
+-7zUVLBVByKuNWqTYFlzfVd6s4iiXtAE2iHn3GCyYdlICwrECQQDhMQVxHd3EFbzg
+-SFmJBTARlZ2GKA3c1g/h9/XbkEPQ9/RwI3vnjJ2RaSnjlfoLl8TOcf0uOGbOEyFe
+-19RvCLXjAkEA1s+UE5ziF+YVkW3WolDCQ2kQ5WG9+ccfNebfh6b67B7Ln5iG0Sbg
+-ky9cjsO3jbMJQtlzAQnH1850oRD5Gi51dQJAIbHCDLDZU9Ok1TI+I2BhVuA6F666
+-lEZ7TeZaJSYq34OaUYUdrwG9OdqwZ9sy9LUav4ESzu2lhEQchCJrKMn23QJAReqs
+-ZLHUeTjfXkVk7dHhWPWSlUZ6AhmIlA/AQ7Payg2/8wM/JkZEJEPvGVykms9iPUrv
+-frADRr+hAGe43IewnQJBAJWKZllPgKuEBPwoEldHNS8nRu61D7HzxEzQ2xnfj+Nk
+-2fgf1MAzzTRsikfGENhVsVWeqOcijWb6g5gsyCmlRpc=
+------END RSA PRIVATE KEY-----
+------BEGIN CERTIFICATE-----
+-MIICsDCCAhmgAwIBAgIJAOqYOYFJfEEoMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
+-BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQKExhJbnRlcm5ldCBX
+-aWRnaXRzIFB0eSBMdGQwHhcNMDgwNjI2MTgxNTUyWhcNMDkwNjI2MTgxNTUyWjBF
+-MQswCQYDVQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50
+-ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+-gQC89ZNxjTgWgq7Z1g0tJ65w+k7lNAj5IgjLb155UkUrz0XsHDnHFlbsVUg2Xtk6
+-+bo2UEYIzN7cIm5ImpmyW/2z0J1IDVDlvR2xJ659xrE0v5c2cB6Tf9lnNTwpSoeK
+-24Nd7Jwq4j9vk95fLrdqsBq0/KVlsCXeixS/CaqqduXfvwIDAQABo4GnMIGkMB0G
+-A1UdDgQWBBTctMtI3EO9OjLI0x9Zo2ifkwIiNjB1BgNVHSMEbjBsgBTctMtI3EO9
+-OjLI0x9Zo2ifkwIiNqFJpEcwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgTClNvbWUt
+-U3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZIIJAOqYOYFJ
+-fEEoMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAQwa7jya/DfhaDn7E
+-usPkpgIX8WCL2B1SqnRTXEZfBPPVq/cUmFGyEVRVATySRuMwi8PXbVcOhXXuocA+
+-43W+iIsD9pXapCZhhOerCq18TC1dWK98vLUsoK8PMjB6e5H/O8bqojv0EeC+fyCw
+-eSHj5jpC8iZKjCHBn+mAi4cQ514=
+------END CERTIFICATE-----
+diff --git a/Lib/test/test_poplib.py b/Lib/test/test_poplib.py
+index 20d4eeac12..a0c683bbcf 100644
+--- a/Lib/test/test_poplib.py
++++ b/Lib/test/test_poplib.py
+@@ -178,7 +178,8 @@ class DummyPOP3Handler(asynchat.async_chat):
+ return self.handle_close()
+ # TODO: SSLError does not expose alert information
+ elif ("SSLV3_ALERT_BAD_CERTIFICATE" in err.args[1] or
+- "SSLV3_ALERT_CERTIFICATE_UNKNOWN" in err.args[1]):
++ "SSLV3_ALERT_CERTIFICATE_UNKNOWN" in err.args[1] or
++ "bad record type" in err.args[1]):
+ return self.handle_close()
+ raise
+ except OSError as err:
diff --git a/python3.spec b/python3.spec
index 9caf494..91d0f34 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.0
-Release: 6%{?dist}
+Release: 7%{?dist}
License: Python
@@ -311,6 +311,15 @@ Patch291: 00291-setup-Link-ctypes-against-dl-explicitly.patch
# and:
https://bugs.python.org/issue34008
Patch307: 00307-allow-to-call-Py_Main-after-Py_Initialize.patch
+# 00308 #
+# TLS 1.3 related fixes from upstream:
+#
https://github.com/python/cpython/pull/8762
+#
https://github.com/python/cpython/pull/8787
+# And a workaround before openssl is 1.1.1-pre9:
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1609291#c12
+# See:
https://bugzilla.redhat.com/show_bug.cgi?id=1609291
+Patch308: 00308-tls-1.3.patch
+
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
@@ -633,6 +642,7 @@ rm Lib/ensurepip/_bundled/*.whl
%patch274 -p1
%patch291 -p1
%patch307 -p1
+%patch308 -p1
# Remove files that should be generated by the build
@@ -1009,6 +1019,12 @@ CheckPython() {
ConfName=$1
ConfDir=$(pwd)/build/$ConfName
+ # Fedora sets TLSv1 as explicit minimum version.
+ # Python's test suite assumes that the minimum protocol version is set to
+ # a magic marker. We workaround the test problem by setting:
+ export OPENSSL_CONF=/non-existing-file
+ #
https://bugzilla.redhat.com/show_bug.cgi?id=1618753
+
echo STARTING: CHECKING OF PYTHON FOR CONFIGURATION: $ConfName
# Note that we're running the tests using the version of the code in the
@@ -1512,6 +1528,10 @@ CheckPython optimized
# ======================================================
%changelog
+* Fri Aug 17 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-7
+- Backport TLS 1.3 related fixes to fix FTBFS
+Resolves: rhbz#1609291
+
* Wed Aug 15 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-6
- Use RPM built wheels of pip and setuptools in ensurepip instead of our rewheel patch
commit b9e8a46cca86dec69891b26ab810cc80b4db96b2
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Thu Aug 16 12:30:28 2018 +0200
Recommend setuptools and pip for developer experience
diff --git a/python3.spec b/python3.spec
index 6e87de8..9caf494 100644
--- a/python3.spec
+++ b/python3.spec
@@ -358,6 +358,12 @@ Obsoletes: python%{pyshortver}
%global platpyver 3.6.2-20
Obsoletes: platform-python < %{platpyver}
+# Previously, this was required for our rewheel patch to work.
+# This is technically no longer needed, but we keep it recommended
+# for the developer experience.
+Recommends: python3-setuptools
+Recommends: python3-pip
+
# This prevents ALL subpackages built from this spec to require
# /usr/bin/python3*. Granularity per subpackage is impossible.
# It's intended for the libs package not to drag in the interpreter, see
commit 0b241abda6b7f8d4b092974cecd11d9660fa7b83
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Wed Aug 15 15:36:29 2018 +0200
Drop the rewheel patch, use RPM built wheels instead
diff --git a/00189-add-rewheel-module.patch b/00189-add-rewheel-module.patch
deleted file mode 100644
index d8ba671..0000000
--- a/00189-add-rewheel-module.patch
+++ /dev/null
@@ -1,245 +0,0 @@
-diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py
-index 7ff938b..8c3d062 100644
---- a/Lib/ensurepip/__init__.py
-+++ b/Lib/ensurepip/__init__.py
-@@ -1,8 +1,10 @@
- import os
- import os.path
- import pkgutil
-+import shutil
- import sys
- import tempfile
-+from ensurepip import rewheel
-
-
- __all__ = ["version", "bootstrap"]
-@@ -24,8 +26,15 @@ def _run_pip(args, additional_paths=None):
- sys.path = additional_paths + sys.path
-
- # Install the bundled software
-- import pip._internal
-- return pip._internal.main(args)
-+ try:
-+ # pip 10
-+ from pip._internal import main
-+ except ImportError:
-+ # pip 9
-+ from pip import main
-+ if args[0] in ["install", "list", "wheel"]:
-+ args.append('--pre')
-+ return main(args)
-
-
- def version():
-@@ -88,20 +97,39 @@ def _bootstrap(*, root=None, upgrade=False, user=False,
- # omit pip and easy_install
- os.environ["ENSUREPIP_OPTIONS"] = "install"
-
-+ whls = []
-+ rewheel_dir = None
-+ # try to see if we have system-wide versions of _PROJECTS
-+ dep_records = rewheel.find_system_records([p[0] for p in _PROJECTS])
-+ # TODO: check if system-wide versions are the newest ones
-+ # if --upgrade is used?
-+ if all(dep_records):
-+ # if we have all _PROJECTS installed system-wide, we'll recreate
-+ # wheels from them and install those
-+ rewheel_dir = tempfile.TemporaryDirectory()
-+ for dr in dep_records:
-+ new_whl = rewheel.rewheel_from_record(dr, rewheel_dir.name)
-+ whls.append(os.path.join(rewheel_dir.name, new_whl))
-+ else:
-+ # if we don't have all the _PROJECTS installed system-wide,
-+ # let's just fall back to bundled wheels
-+ for project, version in _PROJECTS:
-+ whl = os.path.join(
-+ os.path.dirname(__file__),
-+ "_bundled",
-+ "{}-{}-py2.py3-none-any.whl".format(project, version)
-+ )
-+ whls.append(whl)
-+
- with tempfile.TemporaryDirectory() as tmpdir:
- # Put our bundled wheels into a temporary directory and construct the
- # additional paths that need added to sys.path
- additional_paths = []
-- for project, version in _PROJECTS:
-- wheel_name = "{}-{}-py2.py3-none-any.whl".format(project,
version)
-- whl = pkgutil.get_data(
-- "ensurepip",
-- "_bundled/{}".format(wheel_name),
-- )
-- with open(os.path.join(tmpdir, wheel_name), "wb") as fp:
-- fp.write(whl)
--
-- additional_paths.append(os.path.join(tmpdir, wheel_name))
-+ for whl in whls:
-+ shutil.copy(whl, tmpdir)
-+ additional_paths.append(os.path.join(tmpdir, os.path.basename(whl)))
-+ if rewheel_dir:
-+ rewheel_dir.cleanup()
-
- # Construct the arguments to be passed to the pip command
- args = ["install", "--no-index", "--find-links",
tmpdir]
-diff --git a/Lib/ensurepip/rewheel/__init__.py b/Lib/ensurepip/rewheel/__init__.py
-new file mode 100644
-index 0000000..753c764
---- /dev/null
-+++ b/Lib/ensurepip/rewheel/__init__.py
-@@ -0,0 +1,143 @@
-+import argparse
-+import codecs
-+import csv
-+import email.parser
-+import os
-+import io
-+import re
-+import site
-+import subprocess
-+import sys
-+import zipfile
-+
-+def run():
-+ parser = argparse.ArgumentParser(description='Recreate wheel of package with
given RECORD.')
-+ parser.add_argument('record_path',
-+ help='Path to RECORD file')
-+ parser.add_argument('-o', '--output-dir',
-+ help='Dir where to place the wheel, defaults to current
working dir.',
-+ dest='outdir',
-+ default=os.path.curdir)
-+
-+ ns = parser.parse_args()
-+ retcode = 0
-+ try:
-+ print(rewheel_from_record(**vars(ns)))
-+ except BaseException as e:
-+ print('Failed: {}'.format(e))
-+ retcode = 1
-+ sys.exit(1)
-+
-+def find_system_records(projects):
-+ """Return list of paths to RECORD files for system-installed
projects.
-+
-+ If a project is not installed, the resulting list contains None instead
-+ of a path to its RECORD
-+ """
-+ records = []
-+ # get system site-packages dirs
-+ sys_sitepack = site.getsitepackages([sys.base_prefix, sys.base_exec_prefix])
-+ sys_sitepack = [sp for sp in sys_sitepack if os.path.exists(sp)]
-+ # try to find all projects in all system site-packages
-+ for project in projects:
-+ path = None
-+ for sp in sys_sitepack:
-+ dist_info_re = os.path.join(sp, project) +
r'-[^\{0}]+\.dist-info'.format(os.sep)
-+ candidates = [os.path.join(sp, p) for p in os.listdir(sp)]
-+ # filter out candidate dirs based on the above regexp
-+ filtered = [c for c in candidates if re.match(dist_info_re, c)]
-+ # if we have 0 or 2 or more dirs, something is wrong...
-+ if len(filtered) == 1:
-+ path = filtered[0]
-+ if path is not None:
-+ records.append(os.path.join(path, 'RECORD'))
-+ else:
-+ records.append(None)
-+ return records
-+
-+def rewheel_from_record(record_path, outdir):
-+ """Recreates a whee of package with given record_path and returns
path
-+ to the newly created wheel."""
-+ site_dir = os.path.dirname(os.path.dirname(record_path))
-+ record_relpath = record_path[len(site_dir):].strip(os.path.sep)
-+ to_write, to_omit = get_records_to_pack(site_dir, record_relpath)
-+ new_wheel_name = get_wheel_name(record_path)
-+ new_wheel_path = os.path.join(outdir, new_wheel_name + '.whl')
-+
-+ new_wheel = zipfile.ZipFile(new_wheel_path, mode='w',
compression=zipfile.ZIP_DEFLATED)
-+ # we need to write a new record with just the files that we will write,
-+ # e.g. not binaries and *.pyc/*.pyo files
-+ new_record = io.StringIO()
-+ writer = csv.writer(new_record)
-+
-+ # handle files that we can write straight away
-+ for f, sha_hash, size in to_write:
-+ new_wheel.write(os.path.join(site_dir, f), arcname=f)
-+ writer.writerow([f, sha_hash,size])
-+
-+ # rewrite the old wheel file with a new computed one
-+ writer.writerow([record_relpath, '', ''])
-+ new_wheel.writestr(record_relpath, new_record.getvalue())
-+
-+ new_wheel.close()
-+
-+ return new_wheel.filename
-+
-+def get_wheel_name(record_path):
-+ """Return proper name of the wheel, without .whl."""
-+
-+ wheel_info_path = os.path.join(os.path.dirname(record_path), 'WHEEL')
-+ with codecs.open(wheel_info_path, encoding='utf-8') as wheel_info_file:
-+ wheel_info = email.parser.Parser().parsestr(wheel_info_file.read())
-+
-+ metadata_path = os.path.join(os.path.dirname(record_path), 'METADATA')
-+ with codecs.open(metadata_path, encoding='utf-8') as metadata_file:
-+ metadata = email.parser.Parser().parsestr(metadata_file.read())
-+
-+ # construct name parts according to wheel spec
-+ distribution = metadata.get('Name')
-+ version = metadata.get('Version')
-+ build_tag = '' # nothing for now
-+ lang_tag = []
-+ for t in wheel_info.get_all('Tag'):
-+ lang_tag.append(t.split('-')[0])
-+ lang_tag = '.'.join(lang_tag)
-+ abi_tag, plat_tag = wheel_info.get('Tag').split('-')[1:3]
-+ # leave out build tag, if it is empty
-+ to_join = filter(None, [distribution, version, build_tag, lang_tag, abi_tag,
plat_tag])
-+ return '-'.join(list(to_join))
-+
-+def get_records_to_pack(site_dir, record_relpath):
-+ """Accepts path of sitedir and path of RECORD file relative to it.
-+ Returns two lists:
-+ - list of files that can be written to new RECORD straight away
-+ - list of files that shouldn't be written or need some processing
-+ (pyc and pyo files, scripts)
-+ """
-+ record_file_path = os.path.join(site_dir, record_relpath)
-+ with codecs.open(record_file_path, encoding='utf-8') as record_file:
-+ record_contents = record_file.read()
-+ # temporary fix for
https://github.com/pypa/pip/issues/1376
-+ # we need to ignore files under ".data" directory
-+ data_dir = os.path.dirname(record_relpath).strip(os.path.sep)
-+ data_dir = data_dir[:-len('dist-info')] + 'data'
-+
-+ to_write = []
-+ to_omit = []
-+ for l in record_contents.splitlines():
-+ spl = l.split(',')
-+ if len(spl) == 3:
-+ # new record will omit (or write differently):
-+ # - abs paths, paths with ".." (entry points),
-+ # - pyc+pyo files
-+ # - the old RECORD file
-+ # TODO: is there any better way to recognize an entry point?
-+ if os.path.isabs(spl[0]) or spl[0].startswith('..') or \
-+ spl[0].endswith('.pyc') or spl[0].endswith('.pyo') or \
-+ spl[0] == record_relpath or spl[0].startswith(data_dir):
-+ to_omit.append(spl)
-+ else:
-+ to_write.append(spl)
-+ else:
-+ pass # bad RECORD or empty line
-+ return to_write, to_omit
-diff --git a/Makefile.pre.in b/Makefile.pre.in
-index d07b312..1c6720e 100644
---- a/Makefile.pre.in
-+++ b/Makefile.pre.in
-@@ -1301,7 +1301,7 @@ LIBSUBDIRS= tkinter tkinter/test tkinter/test/test_tkinter \
- test/test_asyncio \
- collections concurrent concurrent/futures encodings \
- email email/mime test/test_email test/test_email/data \
-- ensurepip ensurepip/_bundled \
-+ ensurepip ensurepip/_bundled ensurepip/rewheel \
- html json test/test_json http dbm xmlrpc \
- sqlite3 sqlite3/test \
- logging csv wsgiref urllib \
diff --git a/00189-use-rpm-wheels.patch b/00189-use-rpm-wheels.patch
new file mode 100644
index 0000000..cc2719b
--- /dev/null
+++ b/00189-use-rpm-wheels.patch
@@ -0,0 +1,51 @@
+diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py
+index 4748ba4..fc02255 100644
+--- a/Lib/ensurepip/__init__.py
++++ b/Lib/ensurepip/__init__.py
+@@ -1,16 +1,27 @@
++import distutils.version
++import glob
+ import os
+ import os.path
+-import pkgutil
+ import sys
+ import tempfile
+
+
+ __all__ = ["version", "bootstrap"]
+
++_WHEEL_DIR = "/usr/share/python-wheels/"
+
+-_SETUPTOOLS_VERSION = "39.0.1"
+
+-_PIP_VERSION = "10.0.1"
++def _get_most_recent_wheel_version(pkg):
++ prefix = os.path.join(_WHEEL_DIR, "{}-".format(pkg))
++ suffix = "-py2.py3-none-any.whl"
++ pattern = "{}*{}".format(prefix, suffix)
++ versions = (p[len(prefix):-len(suffix)] for p in glob.glob(pattern))
++ return str(max(versions, key=distutils.version.LooseVersion))
++
++
++_SETUPTOOLS_VERSION = _get_most_recent_wheel_version("setuptools")
++
++_PIP_VERSION = _get_most_recent_wheel_version("pip")
+
+ _PROJECTS = [
+ ("setuptools", _SETUPTOOLS_VERSION),
+@@ -94,12 +105,9 @@ def _bootstrap(*, root=None, upgrade=False, user=False,
+ additional_paths = []
+ for project, version in _PROJECTS:
+ wheel_name = "{}-{}-py2.py3-none-any.whl".format(project,
version)
+- whl = pkgutil.get_data(
+- "ensurepip",
+- "_bundled/{}".format(wheel_name),
+- )
+- with open(os.path.join(tmpdir, wheel_name), "wb") as fp:
+- fp.write(whl)
++ with open(os.path.join(_WHEEL_DIR, wheel_name), "rb") as sfp:
++ with open(os.path.join(tmpdir, wheel_name), "wb") as fp:
++ fp.write(sfp.read())
+
+ additional_paths.append(os.path.join(tmpdir, wheel_name))
+
diff --git a/python3.spec b/python3.spec
index 3661213..6e87de8 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.0
-Release: 5%{?dist}
+Release: 6%{?dist}
License: Python
@@ -33,6 +33,9 @@ License: Python
# WARNING: This does not change the package name and summary above
%bcond_with flatpackage
+# Whether to use RPM build wheels from the python-{pip,setuptools}-wheel package
+# Uses upstream bundled prebuilt wheels otherwise
+%bcond_without rpmwheels
# Expensive optimizations (mainly, profile-guided optimizations)
%ifarch %{ix86} x86_64
@@ -46,13 +49,6 @@ License: Python
# Run the test suite in %%check
%bcond_without tests
-# Ability to reuse RPM-installed pip using rewheel
-%if %{with flatpackage}
-%bcond_with rewheel
-%else
-%bcond_without rewheel
-%endif
-
# Extra build for debugging the interpreter or C-API extensions
# (the -debug subpackages)
%if %{with flatpackage}
@@ -190,9 +186,9 @@ BuildRequires: /usr/bin/dtrace
# workaround
http://bugs.python.org/issue19804 (test_uuid requires ifconfig)
BuildRequires: /usr/sbin/ifconfig
-%if %{with rewheel}
-BuildRequires: python3-setuptools
-BuildRequires: python3-pip
+%if %{with rpmwheels}
+BuildRequires: python-setuptools-wheel
+BuildRequires: python-pip-wheel
%endif
@@ -283,10 +279,9 @@ Patch170: 00170-gc-assertions.patch
Patch178: 00178-dont-duplicate-flags-in-sysconfig.patch
# 00189 #
-# Add the rewheel module, allowing to recreate wheels from already installed
-# ones
-#
https://github.com/bkabrda/rewheel
-Patch189: 00189-add-rewheel-module.patch
+# Instead of bundled wheels, use our RPM packaged wheels from
+# /usr/share/python-wheels
+Patch189: 00189-use-rpm-wheels.patch
# 00205 #
# LIBPL variable in makefile takes LIBPL from configure.ac
@@ -363,11 +358,6 @@ Obsoletes: python%{pyshortver}
%global platpyver 3.6.2-20
Obsoletes: platform-python < %{platpyver}
-%if %{with rewheel}
-Requires: python3-setuptools
-Requires: python3-pip
-%endif
-
# This prevents ALL subpackages built from this spec to require
# /usr/bin/python3*. Granularity per subpackage is impossible.
# It's intended for the libs package not to drag in the interpreter, see
@@ -414,6 +404,14 @@ Requires: glibc%{?_isa} >= 2.24.90-26
Requires: gdbm-libs%{?_isa} >= 1:1.13
%endif
+%if %{with rpmwheels}
+Requires: python-setuptools-wheel
+Requires: python-pip-wheel
+%else
+Provides: bundled(python3-pip) = 10.0.1
+Provides: bundled(python3-setuptools) = 39.0.1
+%endif
+
# There are files in the standard library that have python shebang.
# We've filtered the automatic requirement out so libs are installable without
# the main package. This however makes it pulled in by default.
@@ -443,12 +441,7 @@ Requires: %{name}-libs%{?_isa} = %{version}-%{release}
BuildRequires: python-rpm-macros
Requires: python-rpm-macros
Requires: python3-rpm-macros
-
-%if %{with rewheel}
-# without rewheel is used to bootstrap setuptools+pip
-# python3-rpm-generators needs python3-setuptools, so we cannot have it yet
Requires: python3-rpm-generators
-%endif
#
https://bugzilla.redhat.com/show_bug.cgi?id=1217376
#
https://bugzilla.redhat.com/show_bug.cgi?id=1496757
@@ -579,9 +572,13 @@ Requires: redhat-rpm-config
%global __requires_exclude ^python\\(abi\\) = 3\\..$
%global __provides_exclude ^python\\(abi\\) = 3\\..$
-# We keep those inside on purpose
+%if %{with rpmwheels}
+Requires: python-setuptools-wheel
+Requires: python-pip-wheel
+%else
Provides: bundled(python3-pip) = 10.0.1
Provides: bundled(python3-setuptools) = 39.0.1
+%endif
# The description for the flat package
%description
@@ -604,11 +601,6 @@ version once Python %{pybasever} is stable.
# Remove bundled libraries to ensure that we're using the system copy.
rm -r Modules/expat
-%if %{with rewheel}
-%global pip_version %(pip3 --version | cut -d' ' -f2)
-sed -r -i s/'_PIP_VERSION = "[0-9.]+"'/'_PIP_VERSION =
"%{pip_version}"'/ Lib/ensurepip/__init__.py
-%endif
-
#
# Apply patches:
#
@@ -625,8 +617,9 @@ sed -r -i s/'_PIP_VERSION =
"[0-9.]+"'/'_PIP_VERSION = "%{pip_version}"'/ Lib/en
%patch170 -p1
%patch178 -p1
-%if %{with rewheel}
+%if %{with rpmwheels}
%patch189 -p1
+rm Lib/ensurepip/_bundled/*.whl
%endif
%patch205 -p1
@@ -1107,20 +1100,13 @@ CheckPython optimized
%{pylibdir}/ensurepip/*.py
%{pylibdir}/ensurepip/__pycache__/*%{bytecode_suffixes}
-%if %{without flatpackage}
+%if %{with rpmwheels}
%exclude %{pylibdir}/ensurepip/_bundled
%else
%dir %{pylibdir}/ensurepip/_bundled
%{pylibdir}/ensurepip/_bundled/*.whl
%endif
-%if %{with rewheel}
-%dir %{pylibdir}/ensurepip/rewheel/
-%dir %{pylibdir}/ensurepip/rewheel/__pycache__/
-%{pylibdir}/ensurepip/rewheel/*.py
-%{pylibdir}/ensurepip/rewheel/__pycache__/*%{bytecode_suffixes}
-%endif
-
%dir %{pylibdir}/test/
%dir %{pylibdir}/test/__pycache__/
%dir %{pylibdir}/test/support/
@@ -1520,6 +1506,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Wed Aug 15 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-6
+- Use RPM built wheels of pip and setuptools in ensurepip instead of our rewheel patch
+
* Fri Aug 10 2018 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 3.7.0-5
- Fix wrong requirement on gdbm
commit da8bebda6dc857076a540a222e65328def300345
Author: Igor Gnatenko <ignatenkobrain(a)fedoraproject.org>
Date: Fri Aug 10 12:56:24 2018 +0200
Fix wrong requirement on gdbm
Signed-off-by: Igor Gnatenko <ignatenkobrain(a)fedoraproject.org>
diff --git a/python3.spec b/python3.spec
index 4359d8b..3661213 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.0
-Release: 4%{?dist}
+Release: 5%{?dist}
License: Python
@@ -411,7 +411,7 @@ Requires: glibc%{?_isa} >= 2.24.90-26
%if %{with gdbm}
# When built with this (as guarded by the BuildRequires above), require it
-Requires: gdbm%{?_isa} >= 1:1.13
+Requires: gdbm-libs%{?_isa} >= 1:1.13
%endif
# There are files in the standard library that have python shebang.
@@ -1520,6 +1520,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Fri Aug 10 2018 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 3.7.0-5
+- Fix wrong requirement on gdbm
+
* Fri Jul 20 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-4
- Allow to call Py_Main() after Py_Initialize()
Resolves: rhbz#1595421
commit a64e7f7e987353a3485cac592d39ff7a78b1718b
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Sat Aug 4 22:07:21 2018 +0200
Use the %{valgrind_arches} macro instead of hardcoding unsupported arches
https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.o...
diff --git a/python3.spec b/python3.spec
index a3ff6af..4359d8b 100644
--- a/python3.spec
+++ b/python3.spec
@@ -71,10 +71,9 @@ License: Python
%bcond_without computed_gotos
# Support for the Valgrind debugger/profiler
-%ifnarch s390 %{mips} riscv64
+%ifarch %{valgrind_arches}
%bcond_without valgrind
%else
-# Some arches don't have valgrind, disable support for it there.
%bcond_with valgrind
%endif
commit 37437e1d447934363bebd27bfadccc041e9b4cde
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Fri Jul 20 17:47:22 2018 +0200
Allow to call Py_Main() after Py_Initialize()
Resolves: rhbz#1595421
diff --git a/00307-allow-to-call-Py_Main-after-Py_Initialize.patch
b/00307-allow-to-call-Py_Main-after-Py_Initialize.patch
new file mode 100644
index 0000000..d9c0486
--- /dev/null
+++ b/00307-allow-to-call-Py_Main-after-Py_Initialize.patch
@@ -0,0 +1,150 @@
+From bbd6fc7e77dbd33ae7d3670eaf7800b5d3ff42d3 Mon Sep 17 00:00:00 2001
+From: Victor Stinner <vstinner(a)redhat.com>
+Date: Fri, 20 Jul 2018 17:34:23 +0200
+Subject: [PATCH] bpo-34008: Allow to call Py_Main() after Py_Initialize()
+ (GH-8043)
+
+Py_Main() can again be called after Py_Initialize(), as in Python
+3.6. The new configuration is ignored, except of
+_PyMainInterpreterConfig.argv which is used to update sys.argv.
+(cherry picked from commit fb47bca9ee2d07ce96df94b4e4abafd11826eb01)
+
+Co-authored-by: Victor Stinner <vstinner(a)redhat.com>
+---
+ Lib/test/test_embed.py | 8 ++++++++
+ .../C API/2018-07-02-10-58-11.bpo-34008.COewz-.rst | 1 +
+ Modules/main.c | 10 +++++++---
+ Programs/_testembed.c | 16 +++++++++++++++
+ Python/pylifecycle.c | 23 +++++++++++++++++++---
+ 5 files changed, 52 insertions(+), 6 deletions(-)
+ create mode 100644 Misc/NEWS.d/next/C API/2018-07-02-10-58-11.bpo-34008.COewz-.rst
+
+diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py
+index f3b60433ccc1..024c3f99a85d 100644
+--- a/Lib/test/test_embed.py
++++ b/Lib/test/test_embed.py
+@@ -238,6 +238,14 @@ def test_initialize_twice(self):
+ self.assertEqual(out, '')
+ self.assertEqual(err, '')
+
++ def test_initialize_pymain(self):
++ """
++ bpo-34008: Calling Py_Main() after Py_Initialize() must not fail.
++ """
++ out, err = self.run_embedded_interpreter("initialize_pymain")
++ self.assertEqual(out.rstrip(), "Py_Main() after Py_Initialize:
sys.argv=['-c', 'arg2']")
++ self.assertEqual(err, '')
++
+
+ if __name__ == "__main__":
+ unittest.main()
+diff --git a/Misc/NEWS.d/next/C API/2018-07-02-10-58-11.bpo-34008.COewz-.rst
b/Misc/NEWS.d/next/C API/2018-07-02-10-58-11.bpo-34008.COewz-.rst
+new file mode 100644
+index 000000000000..d9881b9945df
+--- /dev/null
++++ b/Misc/NEWS.d/next/C API/2018-07-02-10-58-11.bpo-34008.COewz-.rst
+@@ -0,0 +1 @@
++Py_Main() can again be called after Py_Initialize(), as in Python 3.6.
+diff --git a/Modules/main.c b/Modules/main.c
+index 3809fa4abef5..31ebbceb83e0 100644
+--- a/Modules/main.c
++++ b/Modules/main.c
+@@ -2647,9 +2647,13 @@ pymain_main(_PyMain *pymain)
+
+ pymain_init_stdio(pymain);
+
+- pymain->err = _Py_InitializeCore(&pymain->config);
+- if (_Py_INIT_FAILED(pymain->err)) {
+- _Py_FatalInitError(pymain->err);
++ /* bpo-34008: For backward compatibility reasons, calling Py_Main() after
++ Py_Initialize() ignores the new configuration. */
++ if (!_PyRuntime.initialized) {
++ pymain->err = _Py_InitializeCore(&pymain->config);
++ if (_Py_INIT_FAILED(pymain->err)) {
++ _Py_FatalInitError(pymain->err);
++ }
+ }
+
+ if (pymain_init_python_main(pymain) < 0) {
+diff --git a/Programs/_testembed.c b/Programs/_testembed.c
+index b8827f074b9c..b1be682f7adc 100644
+--- a/Programs/_testembed.c
++++ b/Programs/_testembed.c
+@@ -276,6 +276,21 @@ static int test_initialize_twice(void)
+ return 0;
+ }
+
++static int test_initialize_pymain(void)
++{
++ wchar_t *argv[] = {L"PYTHON", L"-c",
++ L"import sys; print(f'Py_Main() after Py_Initialize:
sys.argv={sys.argv}')",
++ L"arg2"};
++ _testembed_Py_Initialize();
++
++ /* bpo-34008: Calling Py_Main() after Py_Initialize() must not crash */
++ Py_Main(Py_ARRAY_LENGTH(argv), argv);
++
++ Py_Finalize();
++
++ return 0;
++}
++
+
+ /* *********************************************************
+ * List of test cases and the function that implements it.
+@@ -302,6 +317,7 @@ static struct TestCase TestCases[] = {
+ { "pre_initialization_sys_options", test_pre_initialization_sys_options
},
+ { "bpo20891", test_bpo20891 },
+ { "initialize_twice", test_initialize_twice },
++ { "initialize_pymain", test_initialize_pymain },
+ { NULL, NULL }
+ };
+
+diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
+index fdb759f480be..219a46558825 100644
+--- a/Python/pylifecycle.c
++++ b/Python/pylifecycle.c
+@@ -775,6 +775,22 @@ _Py_InitializeCore(const _PyCoreConfig *core_config)
+ return _Py_INIT_OK();
+ }
+
++/* Py_Initialize() has already been called: update the main interpreter
++ configuration. Example of bpo-34008: Py_Main() called after
++ Py_Initialize(). */
++static _PyInitError
++_Py_ReconfigureMainInterpreter(PyInterpreterState *interp,
++ const _PyMainInterpreterConfig *config)
++{
++ if (config->argv != NULL) {
++ int res = PyDict_SetItemString(interp->sysdict, "argv",
config->argv);
++ if (res < 0) {
++ return _Py_INIT_ERR("fail to set sys.argv");
++ }
++ }
++ return _Py_INIT_OK();
++}
++
+ /* Update interpreter state based on supplied configuration settings
+ *
+ * After calling this function, most of the restrictions on the interpreter
+@@ -796,9 +812,6 @@ _Py_InitializeMainInterpreter(const _PyMainInterpreterConfig
*config)
+ if (!_PyRuntime.core_initialized) {
+ return _Py_INIT_ERR("runtime core not initialized");
+ }
+- if (_PyRuntime.initialized) {
+- return _Py_INIT_ERR("main interpreter already initialized");
+- }
+
+ /* Get current thread state and interpreter pointer */
+ tstate = PyThreadState_GET();
+@@ -813,6 +826,10 @@ _Py_InitializeMainInterpreter(const _PyMainInterpreterConfig
*config)
+ return _Py_INIT_ERR("failed to copy main interpreter config");
+ }
+
++ if (_PyRuntime.initialized) {
++ return _Py_ReconfigureMainInterpreter(interp, config);
++ }
++
+ if (interp->core_config._disable_importlib) {
+ /* Special mode for freeze_importlib: run with no import system
+ *
diff --git a/python3.spec b/python3.spec
index b77ab76..a3ff6af 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.0
-Release: 3%{?dist}
+Release: 4%{?dist}
License: Python
@@ -311,6 +311,12 @@ Patch274: 00274-fix-arch-names.patch
# and:
https://src.fedoraproject.org/rpms/redhat-rpm-config/c/078af19
Patch291: 00291-setup-Link-ctypes-against-dl-explicitly.patch
+# 00307 #
+# Allow to call Py_Main() after Py_Initialize()
+# See:
https://bugzilla.redhat.com/show_bug.cgi?id=1595421
+# and:
https://bugs.python.org/issue34008
+Patch307: 00307-allow-to-call-Py_Main-after-Py_Initialize.patch
+
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
@@ -628,6 +634,7 @@ sed -r -i s/'_PIP_VERSION =
"[0-9.]+"'/'_PIP_VERSION = "%{pip_version}"'/ Lib/en
%patch251 -p1
%patch274 -p1
%patch291 -p1
+%patch307 -p1
# Remove files that should be generated by the build
@@ -1514,6 +1521,10 @@ CheckPython optimized
# ======================================================
%changelog
+* Fri Jul 20 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-4
+- Allow to call Py_Main() after Py_Initialize()
+Resolves: rhbz#1595421
+
* Sat Jul 14 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.7.0-3
- Rebuilt for
https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
commit d90f9872b6d41e2cff3389ded4f9df5e28c092b0
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Mon Jul 9 12:53:43 2018 +0200
Replace no longer relevant notes from bootstrapping 3.6 with link to 3.7
diff --git a/python3.spec b/python3.spec
index 3863a95..b77ab76 100644
--- a/python3.spec
+++ b/python3.spec
@@ -79,40 +79,8 @@ License: Python
%endif
-# ==================================
-# Notes from bootstraping Python 3.6
-# ==================================
-#
-# New Python major version (3.X) break ABI and bytecode compatibility,
-# so all packages depending on it need to be rebuilt.
-#
-# Due to a dependency cycle between Python, gdb, rpm, pip, setuptools, wheel,
-# and other packages, this isn't straightforward.
-# Build in the following order:
-#
-# 1. At the same time:
-# - gdb without python support (add %%global _without_python 1 on top of
-# gdb's SPEC file)
-# - python-rpm-generators
-# (this can be done also during step 2., but should be done before 3.)
-# 2. python3 without rewheel (use %%bcond_with rewheel instead of
-# %%bcond_without)
-# 3. gdb with python support (remove %%global _without_python 1 on top of
-# gdb's SPEC file)
-# 4. rpm
-# 5. python-setuptools with bootstrap set to 1
-# 6. python-pip with build_wheel set to 0
-# 7. python-wheel with %%bcond_without bootstrap
-# 8. python-setuptools with bootstrap set to 0 and also with_check set to 0
-# 9. python-pip with build_wheel set to 1
-# 10. pyparsing
-# 11. python3 with rewheel
-#
-# Then the most important packages have to be built, in dependency order.
-# These were:
-# python-sphinx, pytest, python-requests, cloud-init, dnf, anaconda, abrt
-#
-# After these have been built, a targeted rebuild should be done for the rest.
+# Notes from bootstraping Python 3.7:
+#
https://fedoraproject.org/wiki/SIGs/Python/UpgradingPython
# =====================
commit 266317a762f36aa79cb4db25039b3b0e4bee9a9d
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Sat Jul 14 02:50:11 2018 +0000
- Rebuilt for
https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/python3.spec b/python3.spec
index 4e972c5..3863a95 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.0
-Release: 2%{?dist}
+Release: 3%{?dist}
License: Python
@@ -1546,6 +1546,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Sat Jul 14 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.7.0-3
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
* Thu Jul 12 2018 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 3.7.0-2
- Rebuild for new gdbm
commit 7a4ecff9a735f2a154aeb7a22b4a6503226b31eb
Author: Igor Gnatenko <ignatenkobrain(a)fedoraproject.org>
Date: Thu Jul 12 10:58:16 2018 +0200
Rebuild for new gdbm
Signed-off-by: Igor Gnatenko <ignatenkobrain(a)fedoraproject.org>
diff --git a/python3.spec b/python3.spec
index ccada0f..4e972c5 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.0
-Release: 1%{?dist}
+Release: 2%{?dist}
License: Python
@@ -1546,6 +1546,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Thu Jul 12 2018 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 3.7.0-2
+- Rebuild for new gdbm
+
* Wed Jun 27 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-1
- Update to 3.7.0 final
commit dc63bc71b5e68ce18dd72bc15a99817ce16cfa8d
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Wed Jun 27 12:17:46 2018 +0200
Update to 3.7.0 final
diff --git a/python3.spec b/python3.spec
index 7f9c29a..ccada0f 100644
--- a/python3.spec
+++ b/python3.spec
@@ -11,14 +11,10 @@ Name: python3
Summary: Interpreter of the Python programming language
URL:
https://www.python.org/
-
-# First rc
-%global prerel rc1
-
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.0
-Release: 0.21.%{?prerel}%{?dist}
+Release: 1%{?dist}
License: Python
@@ -237,7 +233,7 @@ BuildRequires: python3-pip
# Source code and patches
# =======================
-Source:
https://www.python.org/ftp/python/%{version}/Python-%{version}%{prerel}.t...
+Source:
https://www.python.org/ftp/python/%{version}/Python-%{version}.tar.xz
# A simple script to check timestamps of bytecode files
# Run in check section with Python that is currently being built
@@ -1550,6 +1546,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Wed Jun 27 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-1
+- Update to 3.7.0 final
+
* Wed Jun 13 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-0.21.rc1
- Finish bootstrapping, enable rewheel, tests, optimizations
diff --git a/sources b/sources
index 8ed12d6..099b345 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (Python-3.7.0rc1.tar.xz) =
cc4c29dfce7e2fca6328f802bd435e1ffc4acecd70d83d602a894bf076bdb95fb4635c891043ba1c3b6438d23ba7f76545cfe323ec0b57029b5c0f639fc6d2c5
+SHA512 (Python-3.7.0.tar.xz) =
8bb11233fb67ee9ab8ed1b72f8fdc62f66e26a6beaaeb92448bce681cf065269833b1658d3ed2459127f25ba43adb0eab73cf27c59834a2a803fb529b4216739
commit 838e397e16128957c8fcf6f2db31b099d2d90350
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Mon Jun 18 23:44:35 2018 +0200
Install appdata files to %{_metainfodir}
See:
https://www.freedesktop.org/software/appstream/docs/sect-Metadata-Applica...
and:
https://www.freedesktop.org/software/appstream/docs/chap-Metadata.html
diff --git a/python3.spec b/python3.spec
index 7e2cd03..7f9c29a 100644
--- a/python3.spec
+++ b/python3.spec
@@ -893,9 +893,9 @@ install -D -m 0644 Lib/idlelib/Icons/idle_48.png
%{buildroot}%{_datadir}/icons/h
desktop-file-install --dir=%{buildroot}%{_datadir}/applications %{SOURCE10}
# Install and validate appdata file
-mkdir -p %{buildroot}%{_datadir}/appdata
-cp -a %{SOURCE11} %{buildroot}%{_datadir}/appdata
-appstream-util validate-relax --nonet %{buildroot}%{_datadir}/appdata/idle3.appdata.xml
+mkdir -p %{buildroot}%{_metainfodir}
+cp -a %{SOURCE11} %{buildroot}%{_metainfodir}
+appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/idle3.appdata.xml
%endif
# Make sure distutils looks at the right pyconfig.h file
@@ -1371,7 +1371,7 @@ CheckPython optimized
%{pylibdir}/idlelib
%if %{without flatpackage}
-%{_datadir}/appdata/idle3.appdata.xml
+%{_metainfodir}/idle3.appdata.xml
%{_datadir}/applications/idle3.desktop
%{_datadir}/icons/hicolor/*/apps/idle3.*
%endif
commit 40d6240272f02361704e89a807f683e81ef84a0b
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Mon Jun 18 23:42:46 2018 +0200
Remove %defattr(-, root, root)
It is not needed since gods know when. Is's the default.
diff --git a/python3.spec b/python3.spec
index cfe6468..7e2cd03 100644
--- a/python3.spec
+++ b/python3.spec
@@ -1080,7 +1080,6 @@ CheckPython optimized
%files
-%defattr(-, root, root)
%license LICENSE
%doc README.rst
@@ -1102,7 +1101,6 @@ CheckPython optimized
%if %{without flatpackage}
%files libs
-%defattr(-,root,root,-)
%license LICENSE
%doc README.rst
%endif
@@ -1336,7 +1334,6 @@ CheckPython optimized
%if %{without flatpackage}
%files devel
-%defattr(-,root,root)
%{_bindir}/2to3
%endif
@@ -1365,7 +1362,6 @@ CheckPython optimized
%if %{without flatpackage}
%files idle
-%defattr(-,root,root,755)
%{_bindir}/idle*
%else
@@ -1382,7 +1378,6 @@ CheckPython optimized
%if %{without flatpackage}
%files tkinter
-%defattr(-,root,root,755)
%endif
%{pylibdir}/tkinter
@@ -1401,7 +1396,6 @@ CheckPython optimized
%if %{without flatpackage}
%files test
-%defattr(-, root, root)
%endif
%{pylibdir}/ctypes/test
@@ -1427,7 +1421,6 @@ CheckPython optimized
%if %{with debug_build}
%if %{without flatpackage}
%files debug
-%defattr(-,root,root,-)
%{_bindir}/python3-debug
%endif
commit d780a93d16002cb4fddc858863437c784a904516
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Wed Jun 13 20:47:48 2018 +0200
Don't hardcode pip version, make it dynamic at build time
This will make test_with_pip (test.test_venv.EnsurePipTest) happy.
diff --git a/python3.spec b/python3.spec
index ae579b5..cfe6468 100644
--- a/python3.spec
+++ b/python3.spec
@@ -636,7 +636,7 @@ version once Python %{pybasever} is stable.
rm -r Modules/expat
%if %{with rewheel}
-%global pip_version 9.0.1
+%global pip_version %(pip3 --version | cut -d' ' -f2)
sed -r -i s/'_PIP_VERSION = "[0-9.]+"'/'_PIP_VERSION =
"%{pip_version}"'/ Lib/ensurepip/__init__.py
%endif
commit 3ba1d1aadf6f9125a1d7a3059f8581aa738bb074
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Wed Jun 13 19:14:30 2018 +0200
Finish bootstrapping, enable rewheel, tests, optimizations
diff --git a/python3.spec b/python3.spec
index 5cb2190..ae579b5 100644
--- a/python3.spec
+++ b/python3.spec
@@ -18,7 +18,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.0
-Release: 0.20.%{?prerel}%{?dist}
+Release: 0.21.%{?prerel}%{?dist}
License: Python
@@ -40,7 +40,7 @@ License: Python
# Expensive optimizations (mainly, profile-guided optimizations)
%ifarch %{ix86} x86_64
-%bcond_with optimizations
+%bcond_without optimizations
%else
# On some architectures, the optimized build takes tens of hours, possibly
# longer than Koji's 24-hour timeout. Disable optimizations here.
@@ -48,13 +48,13 @@ License: Python
%endif
# Run the test suite in %%check
-%bcond_with tests
+%bcond_without tests
# Ability to reuse RPM-installed pip using rewheel
%if %{with flatpackage}
%bcond_with rewheel
%else
-%bcond_with rewheel
+%bcond_without rewheel
%endif
# Extra build for debugging the interpreter or C-API extensions
@@ -1557,6 +1557,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Wed Jun 13 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-0.21.rc1
+- Finish bootstrapping, enable rewheel, tests, optimizations
+
* Tue Jun 12 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-0.20.rc1
- Update to 3.7.0rc1
- Bootstrap, disable rewheel, tests, optimizations
commit 2266a26125b54d320d22ce07e09ef6620e9d1065
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Wed Jun 13 15:27:50 2018 +0200
Bootstrap, disable tests, optimizations
diff --git a/python3.spec b/python3.spec
index c166c19..5cb2190 100644
--- a/python3.spec
+++ b/python3.spec
@@ -40,7 +40,7 @@ License: Python
# Expensive optimizations (mainly, profile-guided optimizations)
%ifarch %{ix86} x86_64
-%bcond_without optimizations
+%bcond_with optimizations
%else
# On some architectures, the optimized build takes tens of hours, possibly
# longer than Koji's 24-hour timeout. Disable optimizations here.
@@ -48,7 +48,7 @@ License: Python
%endif
# Run the test suite in %%check
-%bcond_without tests
+%bcond_with tests
# Ability to reuse RPM-installed pip using rewheel
%if %{with flatpackage}
@@ -1559,7 +1559,7 @@ CheckPython optimized
%changelog
* Tue Jun 12 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-0.20.rc1
- Update to 3.7.0rc1
-- Bootstrap, disable rewheel
+- Bootstrap, disable rewheel, tests, optimizations
* Mon Apr 23 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.5-4
- Fix multiprocessing regression on newer glibcs
commit 00bb7bddf29c3fd4a83a43f7f66fe90fd79740e1
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Tue Jun 12 13:55:40 2018 +0200
Bootstrap, disable rewheel
diff --git a/python3.spec b/python3.spec
index 1e2645b..c166c19 100644
--- a/python3.spec
+++ b/python3.spec
@@ -54,7 +54,7 @@ License: Python
%if %{with flatpackage}
%bcond_with rewheel
%else
-%bcond_without rewheel
+%bcond_with rewheel
%endif
# Extra build for debugging the interpreter or C-API extensions
@@ -1559,6 +1559,7 @@ CheckPython optimized
%changelog
* Tue Jun 12 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-0.20.rc1
- Update to 3.7.0rc1
+- Bootstrap, disable rewheel
* Mon Apr 23 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.5-4
- Fix multiprocessing regression on newer glibcs
commit cb1167a87825f7bce17fed3fc4e24a040995cd77
Merge: 2d5b843 de441a2
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Tue Jun 12 12:44:40 2018 +0200
Merge from python37, update to 3.7.0rc1
diff --cc python3.rpmlintrc
index 03607c6,0000000..6c1ce83
mode 100644,000000..100644
--- a/python3.rpmlintrc
+++ b/python3.rpmlintrc
@@@ -1,67 -1,0 +1,75 @@@
+# KNOWN BUGS:
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1489816
+addFilter(r'crypto-policy-non-compliance-openssl')
+
+
+# TESTS:
+addFilter(r'(zero-length|pem-certificate|uncompressed-zip)
/usr/lib(64)?/python3.\d/test')
+
+
+# OTHER DELIBERATES:
+# chroot function
+addFilter(r'missing-call-to-chdir-with-chroot')
+
+# intentionally unversioned and selfobsoleted
+addFilter(r'unversioned-explicit-obsoletes python')
+addFilter(r'self-obsoletion python3\d obsoletes python3\d')
+
+# intentionally hardcoded
+addFilter(r'hardcoded-library-path in
%{_prefix}/lib/(debug/%{_libdir}|python%{pybasever})')
+
++# intentional for our pythonXY package
++addFilter(r'python3\d\.[^:]+: (E|W): devel-file-in-non-devel-package')
++
+# we have non binary stuff, python files
+addFilter(r'only-non-binary-in-usr-lib')
+
+# some devel files that are deliberately needed
+addFilter(r'devel-file-in-non-devel-package
/usr/include/python3\.\dm/pyconfig-(32|64)\.h')
+addFilter(r'devel-file-in-non-devel-package
/usr/lib64/python3\.\d/distutils/tests/xxmodule\.c')
+
+
+# SORRY, NOT SORRY:
+# manual pages
+addFilter(r'no-manual-page-for-binary
(idle|pydoc|pyvenv|2to3|python3-debug|pathfix\.py)')
+addFilter(r'no-manual-page-for-binary python3.*-config$')
+addFilter(r'no-manual-page-for-binary python3.\dd?m$')
+
+# missing documentation from subpackages
+addFilter(r'^python3\d?-(debug|tkinter|test|idle)\.[^:]+: (E|W):
no-documentation')
+
+# platform python is obsoleted, but not provided
+addFilter(r'obsolete-not-provided platform-python')
+
+
- # RPMLINT IMPERFECTIONS:
- # ifarch applied patches are OK
- #
https://fedoraproject.org/wiki/Packaging:Guidelines#Architecture_Support
- addFilter(r'%ifarch-applied-patch')
++# RPMLINT IMPERFECTIONS
++#
https://github.com/rpm-software-management/rpmlint/issues/123
++addFilter(r'python-bytecode-wrong-magic-value .* expected 33\d\d \(3\.7\), found
3393')
++#
https://github.com/rpm-software-management/rpmlint/pull/133
++addFilter(r'python-bytecode-wrong-magic-value .* expected 33\d\d \(3\.7\), found
3394')
++
++#
https://bugzilla.redhat.com/show_bug.cgi?id=1550562
++#
https://github.com/rpm-software-management/rpmlint/issues/128
++addFilter(r'python-bytecode-inconsistent-mtime .* 1970')
+
+# debugsource
+addFilter(r'^python3\d?-debugsource\.[^:]+: (E|W): no-documentation')
+
+# debuginfo
+addFilter(r'^python3\d?-debuginfo\.[^:]+: (E|W): useless-provides
debuginfo\(build-id\)')
+
+# this is OK for F28+
+addFilter(r'library-without-ldconfig-post')
+
+# debug package contains devel and non-devel files
+addFilter(r'python3\d?-debug.[^:]+: (E|W):
(non-)?devel-file-in-(non-)?devel-package')
+
+# this goes to other subpackage, hence not actually dangling, the read error is bogus
+addFilter(r'dangling-relative-symlink /usr/lib(64)?/pkgconfig/python-3\.\ddm\.pc
python-3\.\d\.pc')
+addFilter(r'read-error /usr/lib(64)?/pkgconfig/python-3\.\ddm\.pc \[Errno 2\]')
+
+# we need this macro to evaluate, even if the line starts with #
+addFilter(r'macro-in-comment %\{_pyconfig(32|64)_h\}')
+
+# SPELLING ERRORS
+addFilter(r'spelling-error .* en_US
(bytecode|pyc|filename|tkinter|namespaces|pytest) ')
diff --cc python3.spec
index e7f52f5,0000000..1e2645b
mode 100644,000000..100644
--- a/python3.spec
+++ b/python3.spec
@@@ -1,2703 -1,0 +1,2680 @@@
+# ==================
+# Top-level metadata
+# ==================
+
- %global pybasever 3.6
++%global pybasever 3.7
+
+# pybasever without the dot:
- %global pyshortver 36
++%global pyshortver 37
+
+Name: python3
+Summary: Interpreter of the Python programming language
+URL:
https://www.python.org/
+
++
++# First rc
++%global prerel rc1
++
+# WARNING When rebasing to a new Python version,
+# remember to update the python3-docs package as well
- Version: %{pybasever}.5
- Release: 4%{?dist}
++Version: %{pybasever}.0
++Release: 0.20.%{?prerel}%{?dist}
+License: Python
+
+
+# ==================================
+# Conditionals controlling the build
+# ==================================
+
+# Note that the bcond macros are named for the CLI option they create.
+# "%%bcond_without" means "ENABLE by default and create a --without
option"
+
++
+# Flat package, i.e. python36, python37, python38 for tox etc.
+# warning: changes some other defaults
+# in Fedora, never turn this on for the python3 package
- # and always keep it on for python36 etc.
++# and always keep it on for python37 etc.
+# WARNING: This does not change the package name and summary above
+%bcond_with flatpackage
+
+
+# Expensive optimizations (mainly, profile-guided optimizations)
+%ifarch %{ix86} x86_64
+%bcond_without optimizations
+%else
+# On some architectures, the optimized build takes tens of hours, possibly
+# longer than Koji's 24-hour timeout. Disable optimizations here.
+%bcond_with optimizations
+%endif
+
+# Run the test suite in %%check
+%bcond_without tests
+
+# Ability to reuse RPM-installed pip using rewheel
+%if %{with flatpackage}
+%bcond_with rewheel
+%else
+%bcond_without rewheel
+%endif
+
+# Extra build for debugging the interpreter or C-API extensions
+# (the -debug subpackages)
+%if %{with flatpackage}
+%bcond_with debug_build
+%else
+%bcond_without debug_build
+%endif
+
+# Support for the GDB debugger
+%bcond_without gdb_hooks
+
+# The dbm.gnu module (key-value database)
+%bcond_without gdbm
+
+# Main interpreter loop optimization
+%bcond_without computed_gotos
+
+# Support for the Valgrind debugger/profiler
+%ifnarch s390 %{mips} riscv64
+%bcond_without valgrind
+%else
+# Some arches don't have valgrind, disable support for it there.
+%bcond_with valgrind
+%endif
+
+
+# ==================================
+# Notes from bootstraping Python 3.6
+# ==================================
+#
+# New Python major version (3.X) break ABI and bytecode compatibility,
+# so all packages depending on it need to be rebuilt.
+#
+# Due to a dependency cycle between Python, gdb, rpm, pip, setuptools, wheel,
+# and other packages, this isn't straightforward.
+# Build in the following order:
+#
+# 1. At the same time:
+# - gdb without python support (add %%global _without_python 1 on top of
+# gdb's SPEC file)
+# - python-rpm-generators
+# (this can be done also during step 2., but should be done before 3.)
+# 2. python3 without rewheel (use %%bcond_with rewheel instead of
+# %%bcond_without)
+# 3. gdb with python support (remove %%global _without_python 1 on top of
+# gdb's SPEC file)
+# 4. rpm
+# 5. python-setuptools with bootstrap set to 1
+# 6. python-pip with build_wheel set to 0
+# 7. python-wheel with %%bcond_without bootstrap
+# 8. python-setuptools with bootstrap set to 0 and also with_check set to 0
+# 9. python-pip with build_wheel set to 1
+# 10. pyparsing
+# 11. python3 with rewheel
+#
+# Then the most important packages have to be built, in dependency order.
+# These were:
+# python-sphinx, pytest, python-requests, cloud-init, dnf, anaconda, abrt
+#
+# After these have been built, a targeted rebuild should be done for the rest.
+
+
+# =====================
+# General global macros
+# =====================
+
+%global pylibdir %{_libdir}/python%{pybasever}
+%global dynload_dir %{pylibdir}/lib-dynload
+
+# ABIFLAGS, LDVERSION and SOABI are in the upstream configure.ac
+# See PEP 3149 for some background:
http://www.python.org/dev/peps/pep-3149/
+%global ABIFLAGS_optimized m
+%global ABIFLAGS_debug dm
+
+%global LDVERSION_optimized %{pybasever}%{ABIFLAGS_optimized}
+%global LDVERSION_debug %{pybasever}%{ABIFLAGS_debug}
+
+%global SOABI_optimized
cpython-%{pyshortver}%{ABIFLAGS_optimized}-%{_arch}-linux%{_gnu}
+%global SOABI_debug cpython-%{pyshortver}%{ABIFLAGS_debug}-%{_arch}-linux%{_gnu}
+
+# All bytecode files are in a __pycache__ subdirectory, with a name
+# reflecting the version of the bytecode.
+# See PEP 3147:
http://www.python.org/dev/peps/pep-3147/
+# For example,
+# foo/bar.py
+# has bytecode at:
+# foo/__pycache__/bar.cpython-%%{pyshortver}.pyc
+# foo/__pycache__/bar.cpython-%%{pyshortver}.opt-1.pyc
+# foo/__pycache__/bar.cpython-%%{pyshortver}.opt-2.pyc
+%global bytecode_suffixes .cpython-%{pyshortver}*.pyc
+
+# Python's configure script defines SOVERSION, and this is used in the Makefile
+# to determine INSTSONAME, the name of the libpython DSO:
+# LDLIBRARY='libpython$(VERSION).so'
+# INSTSONAME="$LDLIBRARY".$SOVERSION
+# We mirror this here in order to make it easier to add the -gdb.py hooks.
+# (if these get out of sync, the payload of the libs subpackage will fail
+# and halt the build)
+%global py_SOVERSION 1.0
+%global py_INSTSONAME_optimized libpython%{LDVERSION_optimized}.so.%{py_SOVERSION}
+%global py_INSTSONAME_debug libpython%{LDVERSION_debug}.so.%{py_SOVERSION}
+
+# Disable automatic bytecompilation. The python3 binary is not yet be
+# available in /usr/bin when Python is built. Also, the bytecompilation fails
+# on files that test invalid syntax.
+%undefine py_auto_byte_compile
+
+# For multilib support, files that are different between 32- and 64-bit arches
+# need different filenames. Use "64" or "32" according to the word
size.
+# Currently, the best way to determine an architecture's word size happens to
+# be checking %%{_lib}.
+%if "%{_lib}" == "lib64"
+%global wordsize 64
+%else
+%global wordsize 32
+%endif
+
+
+# =======================
+# Build-time requirements
+# =======================
+
+# (keep this list alphabetized)
+
+BuildRequires: autoconf
+BuildRequires: bluez-libs-devel
+BuildRequires: bzip2
+BuildRequires: bzip2-devel
+BuildRequires: desktop-file-utils
+BuildRequires: expat-devel
+
+BuildRequires: findutils
+BuildRequires: gcc-c++
+%if %{with gdbm}
+BuildRequires: gdbm-devel >= 1:1.13
+%endif
+BuildRequires: glibc-devel
+BuildRequires: gmp-devel
+BuildRequires: libappstream-glib
+BuildRequires: libffi-devel
+BuildRequires: libnsl2-devel
+BuildRequires: libtirpc-devel
+BuildRequires: libGL-devel
++BuildRequires: libuuid-devel
+BuildRequires: libX11-devel
+BuildRequires: ncurses-devel
+
+BuildRequires: openssl-devel
+BuildRequires: pkgconfig
+BuildRequires: readline-devel
+BuildRequires: sqlite-devel
+BuildRequires: gdb
+
+BuildRequires: tar
+BuildRequires: tcl-devel
+BuildRequires: tix-devel
+BuildRequires: tk-devel
+
+%if %{with valgrind}
+BuildRequires: valgrind-devel
+%endif
+
+BuildRequires: xz-devel
+BuildRequires: zlib-devel
+
+BuildRequires: /usr/bin/dtrace
+
+# workaround
http://bugs.python.org/issue19804 (test_uuid requires ifconfig)
+BuildRequires: /usr/sbin/ifconfig
+
+%if %{with rewheel}
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%endif
+
+
+# =======================
+# Source code and patches
+# =======================
+
- Source:
https://www.python.org/ftp/python/%{version}/Python-%{version}.tar.xz
-
- # Supply an RPM macro "py_byte_compile" for the python3-devel subpackage
- # to enable specfiles to selectively byte-compile individual files and paths
- # with different Python runtimes as necessary:
- Source3: macros.pybytecompile%{pybasever}
++Source:
https://www.python.org/ftp/python/%{version}/Python-%{version}%{prerel}.t...
+
+# A simple script to check timestamps of bytecode files
+# Run in check section with Python that is currently being built
+# Written by bkabrda
+Source8: check-pyc-and-pyo-timestamps.py
+
- # Backward compatible no-op macro for system-python
- # Remove in Fedora 29
- Source9: macros.systempython
-
+# Desktop menu entry for idle3
+Source10: idle3.desktop
+
+# AppData file for idle3
+Source11: idle3.appdata.xml
+
+# 00001 #
+# Fixup distutils/unixccompiler.py to remove standard library path from rpath:
+# Was Patch0 in ivazquez' python3000 specfile:
+Patch1: 00001-rpath.patch
+
+# 00102 #
+# Change the various install paths to use /usr/lib64/ instead or /usr/lib
+# Only used when "%%{_lib}" == "lib64"
+# Not yet sent upstream.
+Patch102: 00102-lib64.patch
+
+# 00111 #
+# Patch the Makefile.pre.in so that the generated Makefile doesn't try to build
+# a libpythonMAJOR.MINOR.a
+# See
https://bugzilla.redhat.com/show_bug.cgi?id=556092
+# Downstream only: not appropriate for upstream
+Patch111: 00111-no-static-lib.patch
+
+# 00132 #
+# Add non-standard hooks to unittest for use in the "check" phase below, when
+# running selftests within the build:
+# @unittest._skipInRpmBuild(reason)
+# for tests that hang or fail intermittently within the build environment, and:
+# @unittest._expectedFailureInRpmBuild
+# for tests that always fail within the build environment
+#
+# The hooks only take effect if WITHIN_PYTHON_RPM_BUILD is set in the
+# environment, which we set manually in the appropriate portion of the
"check"
+# phase below (and which potentially other python-* rpms could set, to reuse
+# these unittest hooks in their own "check" phases)
+Patch132: 00132-add-rpmbuild-hooks-to-unittest.patch
+
+# 00155 #
+# Avoid allocating thunks in ctypes unless absolutely necessary, to avoid
+# generating SELinux denials on "import ctypes" and "import uuid"
when
+# embedding Python within httpd
+# See
https://bugzilla.redhat.com/show_bug.cgi?id=814391
+Patch155: 00155-avoid-ctypes-thunks.patch
+
+# 00160 #
+# Python 3.3 added os.SEEK_DATA and os.SEEK_HOLE, which may be present in the
+# header files in the build chroot, but may not be supported in the running
+# kernel, hence we disable this test in an rpm build.
+# Adding these was upstream issue
http://bugs.python.org/issue10142
+# Not yet sent upstream
+Patch160: 00160-disable-test_fs_holes-in-rpm-build.patch
+
+# 00163 #
+# Some tests within test_socket fail intermittently when run inside Koji;
+# disable them using unittest._skipInRpmBuild
+# Not yet sent upstream
+Patch163: 00163-disable-parts-of-test_socket-in-rpm-build.patch
+
+# 00170 #
+# In debug builds, try to print repr() when a C-level assert fails in the
+# garbage collector (typically indicating a reference-counting error
+# somewhere else e.g in an extension module)
+# The new macros/functions within gcmodule.c are hidden to avoid exposing
+# them within the extension API.
+# Sent upstream:
http://bugs.python.org/issue9263
+# See
https://bugzilla.redhat.com/show_bug.cgi?id=614680
+Patch170: 00170-gc-assertions.patch
+
+# 00178 #
+# Don't duplicate various FLAGS in sysconfig values
+#
http://bugs.python.org/issue17679
+# Does not affect python2 AFAICS (different sysconfig values initialization)
+Patch178: 00178-dont-duplicate-flags-in-sysconfig.patch
+
+# 00189 #
+# Add the rewheel module, allowing to recreate wheels from already installed
+# ones
+#
https://github.com/bkabrda/rewheel
+Patch189: 00189-add-rewheel-module.patch
+
+# 00205 #
+# LIBPL variable in makefile takes LIBPL from configure.ac
+# but the LIBPL variable defined there doesn't respect libdir macro
+Patch205: 00205-make-libpl-respect-lib64.patch
+
+# 00251
+# Set values of prefix and exec_prefix in distutils install command
+# to /usr/local if executable is /usr/bin/python* and RPM build
+# is not detected to make pip and distutils install into separate location
+# Fedora Change:
https://fedoraproject.org/wiki/Changes/Making_sudo_pip_safe
+Patch251: 00251-change-user-install-location.patch
+
- # 00262 #
- # Backport of PEP 538: Coercing the legacy C locale to a UTF-8 based locale
- #
https://www.python.org/dev/peps/pep-0538/
- # Fedora Change:
https://fedoraproject.org/wiki/Changes/python3_c.utf-8_locale
- # Original proposal:
https://bugzilla.redhat.com/show_bug.cgi?id=1404918
- Patch262: 00262-pep538_coerce_legacy_c_locale.patch
-
+# 00274 #
+# Upstream uses Debian-style architecture naming. Change to match Fedora.
+Patch274: 00274-fix-arch-names.patch
+
- # 00292 #
- # Restore the public PyExc_RecursionErrorInst symbol that was removed
- # from the 3.6.4 release upstream.
- # Reported upstream:
https://bugs.python.org/issue30697
- Patch292: 00292-restore-PyExc_RecursionErrorInst-symbol.patch
-
- # 00294 #
- # Define TLS cipher suite on build time depending
- # on the OpenSSL default cipher suite selection.
- # Fixed upstream on CPython's 3.7 branch:
- #
https://bugs.python.org/issue31429
- # See also:
https://bugzilla.redhat.com/show_bug.cgi?id=1489816
- Patch294: 00294-define-TLS-cipher-suite-on-build-time.patch
-
- # 00301 #
- # Tools/scripts/pathfix.py: Add -n option for no backup~
- # See:
https://bugzilla.redhat.com/show_bug.cgi?id=1546990
- # Fixed upstream:
https://bugs.python.org/issue32885
- Patch301: 00301-pathfix-add-n-option-for-no-backup.patch
-
- # 00302 #
- # Fix multiprocessing regression on newer glibcs
- # See:
https://bugzilla.redhat.com/show_bug.cgi?id=1569933
- # and:
https://bugs.python.org/issue33329
- Patch302: 00302-fix-multiprocessing-regression-on-newer-glibcs.patch
++# 00291 #
++# Build fails with undefined references to dlopen / dlsym otherwise.
++# See:
https://bugzilla.redhat.com/show_bug.cgi?id=1537489
++# and:
https://src.fedoraproject.org/rpms/redhat-rpm-config/c/078af19
++Patch291: 00291-setup-Link-ctypes-against-dl-explicitly.patch
+
+# (New patches go here ^^^)
+#
+# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
+# please try to keep the patch numbers in-sync between all specfiles.
+#
+# More information, and a patch number catalog, is at:
+#
+#
https://fedoraproject.org/wiki/SIGs/Python/PythonPatches
+
+
+# ==========================================
+# Descriptions, and metadata for subpackages
+# ==========================================
+
+%if %{without flatpackage}
+
+# Packages with Python modules in standard locations automatically
+# depend on python(abi). Provide that here.
+Provides: python(abi) = %{pybasever}
+
+# For backward compatibility only, remove in F29:
+Provides: system-python(abi) = %{pybasever}
+Provides: system-python = %{version}-%{release}
+Provides: system-python%{?_isa} = %{version}-%{release}
+Obsoletes: system-python < %{version}-%{release}
+
+Requires: %{name}-libs%{?_isa} = %{version}-%{release}
+
+# In order to support multiple Python interpreters for development purposes,
+# packages with the naming scheme flatpackage (e.g. python35) exist for
+# non-default versions of Python 3.
+# For consistency, and to keep the upgrade path clean, we Provide/Obsolete
+# these names here.
+Provides: python%{pyshortver} = %{version}-%{release}
+# Note that using Obsoletes without package version is not standard practice.
+# Here we assert that *any* version of the system's default interpreter is
+# preferable to an "extra" interpreter. For example, python3-3.6.1 will
+# replace python36-3.6.2.
+Obsoletes: python%{pyshortver}
+
+# Shall be removed in Fedora 31
+# The release is bumped to 20, so we can do f27 platform-python updates
+# If the release in f27 ever goes >= 20, raise it here
+# If platform-python is ever reintroduced, make it higher version than this:
+%global platpyver 3.6.2-20
+Obsoletes: platform-python < %{platpyver}
+
+%if %{with rewheel}
+Requires: python3-setuptools
+Requires: python3-pip
+%endif
+
+# This prevents ALL subpackages built from this spec to require
+# /usr/bin/python3*. Granularity per subpackage is impossible.
+# It's intended for the libs package not to drag in the interpreter, see
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1547131
+# All others require %%{name} anyway.
+%global __requires_exclude ^/usr/bin/python3
+
+
+# The description used both for the SRPM and the main `python3` subpackage:
+%description
+Python is an accessible, high-level, dynamically typed, interpreted programming
+language, designed with an emphasis on code readability.
+It includes an extensive standard library, and has a vast ecosystem of
+third-party libraries.
+
+The %{name} package provides the "python3" executable: the reference
+interpreter for the Python language, version 3.
+The majority of its standard library is provided in the %{name}-libs package,
+which should be installed automatically along with %{name}.
+The remaining parts of the Python standard library are broken out into the
+%{name}-tkinter and %{name}-test packages, which may need to be installed
+separately.
+
+Documentation for Python is provided in the %{name}-docs package.
+
+Packages containing additional libraries for Python are generally named with
+the "%{name}-" prefix.
+
+
+%package libs
+Summary: Python runtime libraries
+
+# The "enum" module is included in the standard library.
+# Provide an upgrade path from the external library.
+Provides: python3-enum34 = 1.0.4-5%{?dist}
+Obsoletes: python3-enum34 < 1.0.4-5%{?dist}
+
+# Python 3 built with glibc >= 2.24.90-26 needs to require it
+# See
https://bugzilla.redhat.com/show_bug.cgi?id=1410644
+Requires: glibc%{?_isa} >= 2.24.90-26
+
+%if %{with gdbm}
+# When built with this (as guarded by the BuildRequires above), require it
+Requires: gdbm%{?_isa} >= 1:1.13
+%endif
+
+# There are files in the standard library that have python shebang.
+# We've filtered the automatic requirement out so libs are installable without
+# the main package. This however makes it pulled in by default.
+# See
https://bugzilla.redhat.com/show_bug.cgi?id=1547131
+Recommends: %{name}%{?_isa} = %{version}-%{release}
+
+# For backward compatibility only, remove in F29:
+Provides: system-python-libs = %{version}-%{release}
+Provides: system-python-libs%{?_isa} = %{version}-%{release}
+Obsoletes: system-python-libs < %{version}-%{release}
+
+# Shall be removed in Fedora 31
+Obsoletes: platform-python-libs < %{platpyver}
+Obsoletes: platform-python-libs-devel < %{platpyver}
+
+%description libs
+This package contains runtime libraries for use by Python:
+- the majority of the Python standard library
+- a dynamically linked library for use by applications that embed Python as
+ a scripting language, and by the main "python3" executable
+
+
+%package devel
+Summary: Libraries and header files needed for Python development
+Requires: %{name} = %{version}-%{release}
+Requires: %{name}-libs%{?_isa} = %{version}-%{release}
+BuildRequires: python-rpm-macros
+Requires: python-rpm-macros
+Requires: python3-rpm-macros
++
++%if %{with rewheel}
++# without rewheel is used to bootstrap setuptools+pip
++# python3-rpm-generators needs python3-setuptools, so we cannot have it yet
+Requires: python3-rpm-generators
++%endif
+
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1217376
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1496757
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1218294
+# TODO change to a specific subpackage once available (#1218294)
+Requires: redhat-rpm-config
+
+Provides: %{name}-2to3 = %{version}-%{release}
+Provides: 2to3 = %{version}-%{release}
+
+Conflicts: %{name} < %{version}-%{release}
+
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1111275
+# /usr/bin/2to3 was moved from python2-tools to python3-tools
+# TODO Remove in Fedora 29
+Conflicts: python2-tools < 2.7.13-17
+Conflicts: python-tools < 2.7.13-17
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1312030
+# /usr/bin/2to3 was moved from python3-tools to python3-devel
+# TODO Remove in Fedora 30
- Conflicts: python3-tools < 3.6.4-14
++Conflicts: python3-tools < 3.7
+
+# Shall be removed in Fedora 31
+Obsoletes: platform-python-devel < %{platpyver}
+
+%description devel
+This package contains the header files and configuration needed to compile
+Python extension modules (typically written in C or C++), to embed Python
+into other programs, and to make binary distributions for Python libraries.
+
+It also contains the necessary macros to build RPM packages with Python modules
+and 2to3 tool, an automatic source converter from Python 2.X.
+
+
+%package idle
+Summary: A basic graphical development environment for Python
+Requires: %{name} = %{version}-%{release}
+Requires: %{name}-tkinter = %{version}-%{release}
+
+Provides: idle3 = %{version}-%{release}
+
+Provides: %{name}-tools = %{version}-%{release}
+Provides: %{name}-tools%{?_isa} = %{version}-%{release}
+Obsoletes: %{name}-tools < %{version}-%{release}
+
+# Shall be removed in Fedora 31
+Obsoletes: platform-python-tools < %{platpyver}
+
+%description idle
+IDLE is Pythons Integrated Development and Learning Environment.
+
+IDLE has the following features: Python shell window (interactive
+interpreter) with colorizing of code input, output, and error messages;
+multi-window text editor with multiple undo, Python colorizing,
+smart indent, call tips, auto completion, and other features;
+search within any window, replace within editor windows, and
+search through multiple files (grep); debugger with persistent
+breakpoints, stepping, and viewing of global and local namespaces;
+configuration, browsers, and other dialogs.
+
+
+%package tkinter
+Summary: A GUI toolkit for Python
+Requires: %{name} = %{version}-%{release}
+
+# Shall be removed in Fedora 31
+Obsoletes: platform-python-tkinter < %{platpyver}
+
+%description tkinter
+The Tkinter (Tk interface) library is a graphical user interface toolkit for
+the Python programming language.
+
+
+%package test
+Summary: The self-test suite for the main python3 package
+Requires: %{name} = %{version}-%{release}
+
+# Shall be removed in Fedora 31
+Obsoletes: platform-python-test < %{platpyver}
+
+%description test
+The self-test suite for the Python interpreter.
+
+This is only useful to test Python itself. For testing general Python code,
+you should use the unittest module from %{name}-libs, or a library such as
+%{name}-pytest or %{name}-nose.
+
+
+%if %{with debug_build}
+%package debug
+Summary: Debug version of the Python runtime
+
+# The debug build is an all-in-one package version of the regular build, and
+# shares the same .py/.pyc files and directories as the regular build. Hence
+# we depend on all of the subpackages of the regular build:
+Requires: %{name}%{?_isa} = %{version}-%{release}
+Requires: %{name}-libs%{?_isa} = %{version}-%{release}
+Requires: %{name}-devel%{?_isa} = %{version}-%{release}
+Requires: %{name}-test%{?_isa} = %{version}-%{release}
+Requires: %{name}-tkinter%{?_isa} = %{version}-%{release}
+Requires: %{name}-idle%{?_isa} = %{version}-%{release}
+
+%description debug
+python3-debug provides a version of the Python runtime with numerous debugging
+features enabled, aimed at advanced Python users such as developers of Python
+extension modules.
+
+This version uses more memory and will be slower than the regular Python build,
+but is useful for tracking down reference-counting issues and other bugs.
+
+The bytecode format is unchanged, so that .pyc files are compatible between
+this and the standard version of Python, but the debugging features mean that
+C/C++ extension modules are ABI-incompatible and must be built for each version
+separately.
+
+The debug build shares installation directories with the standard Python
+runtime, so that .py and .pyc files can be shared.
+Compiled extension modules use a special ABI flag ("d") in the filename,
+so extensions for both versions can co-exist in the same directory.
+%endif # with debug_build
+
+%else # with flatpackage
+
+Requires: redhat-rpm-config
+
+# We'll not provide this, on purpose
+# No package in Fedora shall ever depend on flatpackage via this
+%global __requires_exclude ^python\\(abi\\) = 3\\..$
+%global __provides_exclude ^python\\(abi\\) = 3\\..$
+
+# We keep those inside on purpose
- Provides: bundled(python3-pip) = 9.0.3
++Provides: bundled(python3-pip) = 10.0.1
+Provides: bundled(python3-setuptools) = 39.0.1
+
+# The description for the flat package
+%description
+Python %{pybasever} package for developers.
+
- This package exists to allow developers to test their code against an older
++This package exists to allow developers to test their code against a newer
+version of Python. This is not a full Python stack and if you wish to run
- your applications with Python %{pybasever}, see other distributions
- that support it, such as CentOS or RHEL with Software Collections
- or older Fedora releases.
++your applications with Python %{pybasever}, update your Fedora to a newer
++version once Python %{pybasever} is stable.
+
+%endif # with flatpackage
+
+# ======================================================
+# The prep phase of the build:
+# ======================================================
+
+%prep
+%setup -q -n Python-%{version}%{?prerel}
+
+# Remove bundled libraries to ensure that we're using the system copy.
+rm -r Modules/expat
- rm -r Modules/zlib
+
+%if %{with rewheel}
- %global pip_version 9.0.3
++%global pip_version 9.0.1
+sed -r -i s/'_PIP_VERSION = "[0-9.]+"'/'_PIP_VERSION =
"%{pip_version}"'/ Lib/ensurepip/__init__.py
+%endif
+
+#
+# Apply patches:
+#
+%patch1 -p1
+
+%if "%{_lib}" == "lib64"
+%patch102 -p1
+%endif
+%patch111 -p1
+%patch132 -p1
+%patch155 -p1
+%patch160 -p1
+%patch163 -p1
+%patch170 -p1
+%patch178 -p1
+
+%if %{with rewheel}
+%patch189 -p1
+%endif
+
+%patch205 -p1
+%patch251 -p1
- %patch262 -p1
+%patch274 -p1
- %patch292 -p1
- %patch294 -p1
- %patch301 -p1
- %patch302 -p1
++%patch291 -p1
+
+
+# Remove files that should be generated by the build
+# (This is after patching, so that we can use patches directly from upstream)
+rm configure pyconfig.h.in
+
+
+# ======================================================
+# Configuring and building the code:
+# ======================================================
+
+%build
+
+# Regenerate the configure script and pyconfig.h.in
+autoconf
+autoheader
+
+# Remember the current directory (which has sources and the configure script),
+# so we can refer to it after we "cd" elsewhere.
+topdir=$(pwd)
+
+# Get proper option names from bconds
+%if %{with computed_gotos}
+%global computed_gotos_flag yes
+%else
+%global computed_gotos_flag no
+%endif
+
+%if %{with optimizations}
+%global optimizations_flag "--enable-optimizations"
+%else
+%global optimizations_flag "--disable-optimizations"
+%endif
+
+# Set common compiler/linker flags
+export CFLAGS="$RPM_OPT_FLAGS -D_GNU_SOURCE -fPIC -fwrapv"
+export CXXFLAGS="$RPM_OPT_FLAGS -D_GNU_SOURCE -fPIC -fwrapv"
+export CPPFLAGS="$(pkg-config --cflags-only-I libffi)"
+export OPT="$RPM_OPT_FLAGS -D_GNU_SOURCE -fPIC -fwrapv"
+export LINKCC="gcc"
+export CFLAGS="$CFLAGS $(pkg-config --cflags openssl)"
+export LDFLAGS="$RPM_LD_FLAGS -g $(pkg-config --libs-only-L openssl)"
+
+# We can build several different configurations of Python: regular and debug.
+# Define a common function that does one build:
+BuildPython() {
+ ConfName=$1
+ ExtraConfigArgs=$2
+ MoreCFlags=$3
+
+ # Each build is done in its own directory
+ ConfDir=build/$ConfName
+ echo STARTING: BUILD OF PYTHON FOR CONFIGURATION: $ConfName
+ mkdir -p $ConfDir
+ pushd $ConfDir
+
+ # Normally, %%configure looks for the "configure" script in the current
+ # directory.
+ # Since we changed directories, we need to tell %%configure where to look.
+ %global _configure $topdir/configure
+
+%configure \
+ --enable-ipv6 \
+ --enable-shared \
+ --with-computed-gotos=%{computed_gotos_flag} \
+ --with-dbmliborder=gdbm:ndbm:bdb \
+ --with-system-expat \
+ --with-system-ffi \
+ --enable-loadable-sqlite-extensions \
+ --with-dtrace \
+ --with-lto \
+ --with-ssl-default-suites=openssl \
+%if %{with valgrind}
+ --with-valgrind \
+%endif
+ $ExtraConfigArgs \
+ %{nil}
+
+ # Invoke the build
+ make EXTRA_CFLAGS="$CFLAGS $MoreCFlags" %{?_smp_mflags}
+
+ popd
+ echo FINISHED: BUILD OF PYTHON FOR CONFIGURATION: $ConfName
+}
+
+# Call the above to build each configuration.
+
+%if %{with debug_build}
+BuildPython debug \
+ "--without-ensurepip --with-pydebug" \
+ "-O0"
+%endif # with debug_build
+
+BuildPython optimized \
+ "--without-ensurepip %{optimizations_flag}" \
+ ""
+
+# ======================================================
+# Installing the built code:
+# ======================================================
+
+%install
+
+# As in %%build, remember the current directory
+topdir=$(pwd)
+
+# We install a collection of hooks for gdb that make it easier to debug
+# executables linked against libpython3* (such as /usr/bin/python3 itself)
+#
+# These hooks are implemented in Python itself (though they are for the version
+# of python that gdb is linked with)
+#
+# gdb-archer looks for them in the same path as the ELF file or its .debug
+# file, with a -gdb.py suffix.
+# We put them next to the debug file, because ldconfig would complain if
+# it found non-library files directly in /usr/lib/
+# (see
https://bugzilla.redhat.com/show_bug.cgi?id=562980)
+#
+# We'll put these files in the debuginfo package by installing them to e.g.:
+# /usr/lib/debug/usr/lib/libpython3.2.so.1.0.debug-gdb.py
+# (note that the debug path is /usr/lib/debug for both 32/64 bit)
+#
+# See
https://fedoraproject.org/wiki/Features/EasierPythonDebugging for more
+# information
+
+%if %{with gdb_hooks}
+DirHoldingGdbPy=%{_prefix}/lib/debug/%{_libdir}
+mkdir -p %{buildroot}$DirHoldingGdbPy
+%endif # with gdb_hooks
+
+# Multilib support for pyconfig.h
+# 32- and 64-bit versions of pyconfig.h are different. For multilib support
+# (making it possible to install 32- and 64-bit versions simultaneously),
+# we need to install them under different filenames, and to make the common
+# "pyconfig.h" include the right file based on architecture.
+# See
https://bugzilla.redhat.com/show_bug.cgi?id=192747
+# Filanames are defined here:
+%global _pyconfig32_h pyconfig-32.h
+%global _pyconfig64_h pyconfig-64.h
+%global _pyconfig_h pyconfig-%{wordsize}.h
+
+# Use a common function to do an install for all our configurations:
+InstallPython() {
+
+ ConfName=$1
+ PyInstSoName=$2
+ MoreCFlags=$3
+ LDVersion=$4
+
+ # Switch to the directory with this configuration's built files
+ ConfDir=build/$ConfName
+ echo STARTING: INSTALL OF PYTHON FOR CONFIGURATION: $ConfName
+ mkdir -p $ConfDir
+ pushd $ConfDir
+
+ make \
+ DESTDIR=%{buildroot} \
+ INSTALL="install -p" \
+ EXTRA_CFLAGS="$MoreCFlags" \
+ install
+
+ popd
+
+%if %{with gdb_hooks}
+ # See comment on $DirHoldingGdbPy above
+
PathOfGdbPy=$DirHoldingGdbPy/$PyInstSoName-%{version}-%{release}.%{_arch}.debug-gdb.py
+ cp Tools/gdb/libpython.py %{buildroot}$PathOfGdbPy
+%endif # with gdb_hooks
+
+ # Rename the -devel script that differs on different arches to arch specific name
+ mv %{buildroot}%{_bindir}/python${LDVersion}-{,`uname -m`-}config
+ echo -e '#!/bin/sh\nexec `dirname $0`/python'${LDVersion}'-`uname
-m`-config "$@"' > \
+ %{buildroot}%{_bindir}/python${LDVersion}-config
+ echo '[ $? -eq 127 ] && echo "Could not find
python'${LDVersion}'-`uname -m`-config. Look around to see available arches."
>&2' >> \
+ %{buildroot}%{_bindir}/python${LDVersion}-config
+ chmod +x %{buildroot}%{_bindir}/python${LDVersion}-config
+
+ # Make python3-devel multilib-ready
+ mv %{buildroot}%{_includedir}/python${LDVersion}/pyconfig.h \
+ %{buildroot}%{_includedir}/python${LDVersion}/%{_pyconfig_h}
+ cat > %{buildroot}%{_includedir}/python${LDVersion}/pyconfig.h << EOF
+#include <bits/wordsize.h>
+
+#if __WORDSIZE == 32
+#include "%{_pyconfig32_h}"
+#elif __WORDSIZE == 64
+#include "%{_pyconfig64_h}"
+#else
+#error "Unknown word size"
+#endif
+EOF
+
+ echo FINISHED: INSTALL OF PYTHON FOR CONFIGURATION: $ConfName
+}
+
+# Install the "debug" build first; any common files will be overridden with
+# later builds
+%if %{with debug_build}
+InstallPython debug \
+ %{py_INSTSONAME_debug} \
+ -O0 \
+ %{LDVERSION_debug}
+%endif # with debug_build
+
+# Now the optimized build:
+InstallPython optimized \
+ %{py_INSTSONAME_optimized} \
+ "" \
+ %{LDVERSION_optimized}
+
+# Install directories for additional packages
+install -d -m 0755 %{buildroot}%{pylibdir}/site-packages/__pycache__
+%if "%{_lib}" == "lib64"
+# The 64-bit version needs to create "site-packages" in /usr/lib/ (for
+# pure-Python modules) as well as in /usr/lib64/ (for packages with extension
+# modules).
+# Note that rpmlint will complain about hardcoded library path;
+# this is intentional.
+install -d -m 0755
%{buildroot}%{_prefix}/lib/python%{pybasever}/site-packages/__pycache__
+%endif
+
+%if %{without flatpackage}
+# add idle3 to menu
+install -D -m 0644 Lib/idlelib/Icons/idle_16.png
%{buildroot}%{_datadir}/icons/hicolor/16x16/apps/idle3.png
+install -D -m 0644 Lib/idlelib/Icons/idle_32.png
%{buildroot}%{_datadir}/icons/hicolor/32x32/apps/idle3.png
+install -D -m 0644 Lib/idlelib/Icons/idle_48.png
%{buildroot}%{_datadir}/icons/hicolor/48x48/apps/idle3.png
+desktop-file-install --dir=%{buildroot}%{_datadir}/applications %{SOURCE10}
+
+# Install and validate appdata file
+mkdir -p %{buildroot}%{_datadir}/appdata
+cp -a %{SOURCE11} %{buildroot}%{_datadir}/appdata
+appstream-util validate-relax --nonet %{buildroot}%{_datadir}/appdata/idle3.appdata.xml
+%endif
+
+# Make sure distutils looks at the right pyconfig.h file
+# See
https://bugzilla.redhat.com/show_bug.cgi?id=201434
+# Similar for sysconfig: sysconfig.get_config_h_filename tries to locate
+# pyconfig.h so it can be parsed, and needs to do this at runtime in site.py
+# when python starts up (see
https://bugzilla.redhat.com/show_bug.cgi?id=653058)
+#
+# Split this out so it goes directly to the pyconfig-32.h/pyconfig-64.h
+# variants:
+sed -i -e "s/'pyconfig.h'/'%{_pyconfig_h}'/" \
+ %{buildroot}%{pylibdir}/distutils/sysconfig.py \
+ %{buildroot}%{pylibdir}/sysconfig.py
+
+# Install pathfix.py to bindir
+# See
https://github.com/fedora-python/python-rpm-porting/issues/24
+cp -p Tools/scripts/pathfix.py %{buildroot}%{_bindir}/
+
+# Switch all shebangs to refer to the specific Python version.
+# This currently only covers files matching ^[a-zA-Z0-9_]+\.py$,
+# so handle files named using other naming scheme separately.
+LD_LIBRARY_PATH=./build/optimized ./build/optimized/python \
+ Tools/scripts/pathfix.py \
+ -i "%{_bindir}/python%{pybasever}" -pn \
+ %{buildroot} \
+ %{?with_gdb_hooks:%{buildroot}$DirHoldingGdbPy/*.py}
+
+# Remove tests for python3-tools which was removed in
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1312030
+rm -rf %{buildroot}%{pylibdir}/test/test_tools
+
+# Remove shebang lines from .py files that aren't executable, and
+# remove executability from .py files that don't have a shebang line:
+find %{buildroot} -name \*.py \
+ \( \( \! -perm /u+x,g+x,o+x -exec sed -e '/^#!/Q 0' -e 'Q 1' {} \; \
+ -print -exec sed -i '1d' {} \; \) -o \( \
+ -perm /u+x,g+x,o+x ! -exec grep -m 1 -q '^#!' {} \; \
+ -exec chmod a-x {} \; \) \)
+
+# Get rid of DOS batch files:
+find %{buildroot} -name \*.bat -exec rm {} \;
+
+# Get rid of backup files:
+find %{buildroot}/ -name "*~" -exec rm -f {} \;
+find . -name "*~" -exec rm -f {} \;
+
+# Get rid of a stray copy of the license:
+rm %{buildroot}%{pylibdir}/LICENSE.txt
+
+# Do bytecompilation with the newly installed interpreter.
+# This is similar to the script in macros.pybytecompile
+# compile *.pyc
+find %{buildroot} -type f -a -name "*.py" -print0 | \
+ LD_LIBRARY_PATH="%{buildroot}%{dynload_dir}/:%{buildroot}%{_libdir}" \
+ PYTHONPATH="%{buildroot}%{_libdir}/python%{pybasever}
%{buildroot}%{_libdir}/python%{pybasever}/site-packages" \
+ xargs -0 %{buildroot}%{_bindir}/python%{pybasever} -O -c 'import py_compile,
sys; [py_compile.compile(f, dfile=f.partition("%{buildroot}")[2], optimize=opt)
for opt in range(3) for f in sys.argv[1:]]' || :
+
+# Since we have pathfix.py in bindir, this is created, but we don't want it
+rm -rf %{buildroot}%{_bindir}/__pycache__
+
+# Fixup permissions for shared libraries from non-standard 555 to standard 755:
+find %{buildroot} -perm 555 -exec chmod 755 {} \;
+
- %if %{without flatpackage}
- # Install macros for rpm:
- mkdir -p %{buildroot}/%{_rpmconfigdir}/macros.d/
- install -m 644 %{SOURCE3} %{buildroot}/%{_rpmconfigdir}/macros.d/
- install -m 644 %{SOURCE9} %{buildroot}/%{_rpmconfigdir}/macros.d/
- %endif
-
+# Create "/usr/bin/python3-debug", a symlink to the python3 debug binary, to
+# avoid the user having to know the precise version and ABI flags.
+# See e.g.
https://bugzilla.redhat.com/show_bug.cgi?id=676748
+%if %{with debug_build} && %{without flatpackage}
+ln -s \
+ %{_bindir}/python%{LDVERSION_debug} \
+ %{buildroot}%{_bindir}/python3-debug
+%endif
+
+# System Python: Link the executable to libexec
+# This is for backwards compatibility only and should be removed in Fedora 29
+%if %{without flatpackage}
+mkdir -p %{buildroot}%{_libexecdir}
+ln -s %{_bindir}/python%{pybasever} %{buildroot}%{_libexecdir}/system-python
+%endif
+
++# There's 2to3-X.X executable and 2to3 soft link to it.
++# No reason to have both, so keep only 2to3 as an executable.
++# See
https://bugzilla.redhat.com/show_bug.cgi?id=1111275
++mv %{buildroot}%{_bindir}/2to3-%{pybasever} %{buildroot}%{_bindir}/2to3
++
+%if %{with flatpackage}
+# Remove stuff that would conflict with python3 package
+rm %{buildroot}%{_bindir}/python3
+rm %{buildroot}%{_bindir}/pydoc3
+rm %{buildroot}%{_bindir}/pathfix.py
+rm %{buildroot}%{_bindir}/idle3
+rm %{buildroot}%{_bindir}/python3-*
+rm %{buildroot}%{_bindir}/pyvenv
- rm %{buildroot}%{_bindir}/2to3*
++rm %{buildroot}%{_bindir}/2to3
+rm %{buildroot}%{_libdir}/libpython3.so
+rm %{buildroot}%{_mandir}/man1/python3.1*
+rm %{buildroot}%{_libdir}/pkgconfig/python3.pc
+%endif
+
++
+# ======================================================
+# Checks for packaging issues
+# ======================================================
+
+%check
+
+# first of all, check timestamps of bytecode files
+find %{buildroot} -type f -a -name "*.py" -print0 | \
+ LD_LIBRARY_PATH="%{buildroot}%{dynload_dir}/:%{buildroot}%{_libdir}" \
+ PYTHONPATH="%{buildroot}%{_libdir}/python%{pybasever}
%{buildroot}%{_libdir}/python%{pybasever}/site-packages" \
+ xargs -0 %{buildroot}%{_bindir}/python%{pybasever} %{SOURCE8}
+
+# Ensure that the curses module was linked against libncursesw.so, rather than
+# libncurses.so
+# See
https://bugzilla.redhat.com/show_bug.cgi?id=539917
+ldd %{buildroot}/%{dynload_dir}/_curses*.so \
+ | grep curses \
+ | grep libncurses.so && (echo "_curses.so linked against
libncurses.so" ; exit 1)
+
+# Ensure that the debug modules are linked against the debug libpython, and
+# likewise for the optimized modules and libpython:
+for Module in %{buildroot}/%{dynload_dir}/*.so ; do
+ case $Module in
+ *.%{SOABI_debug})
+ ldd $Module | grep %{py_INSTSONAME_optimized} &&
+ (echo Debug module $Module linked against optimized
%{py_INSTSONAME_optimized} ; exit 1)
+
+ ;;
+ *.%{SOABI_optimized})
+ ldd $Module | grep %{py_INSTSONAME_debug} &&
+ (echo Optimized module $Module linked against debug %{py_INSTSONAME_debug} ;
exit 1)
+ ;;
+ esac
+done
+
++
+# ======================================================
+# Running the upstream test suite
+# ======================================================
+
+topdir=$(pwd)
+CheckPython() {
+ ConfName=$1
+ ConfDir=$(pwd)/build/$ConfName
+
+ echo STARTING: CHECKING OF PYTHON FOR CONFIGURATION: $ConfName
+
+ # Note that we're running the tests using the version of the code in the
+ # builddir, not in the buildroot.
+
+ # Run the upstream test suite, setting "WITHIN_PYTHON_RPM_BUILD" so that
the
+ # our non-standard decorators take effect on the relevant tests:
+ # @unittest._skipInRpmBuild(reason)
+ # @unittest._expectedFailureInRpmBuild
- # test_faulthandler.test_register_chain currently fails on ppc64le and
- # aarch64, see upstream bug
http://bugs.python.org/issue21131
+ WITHIN_PYTHON_RPM_BUILD= \
+ LD_LIBRARY_PATH=$ConfDir $ConfDir/python -m test.regrtest \
+ -wW --slowest --findleaks \
+ -x test_distutils \
+ -x test_bdist_rpm \
- -x test_gdb \
- %ifarch ppc64le aarch64
- -x test_faulthandler \
- %endif
+ %ifarch %{mips64}
+ -x test_ctypes \
+ %endif
++ %ifarch %{power64} s390 s390x armv7hl %{mips}
++ -x test_gdb \
++ %endif
+ %ifarch ppc64le
+ -x test_buffer \
+ %endif
+
+ echo FINISHED: CHECKING OF PYTHON FOR CONFIGURATION: $ConfName
+
+}
+
+%if %{with tests}
+
+# Check each of the configurations:
+%if %{with debug_build}
+CheckPython debug
+%endif # with debug_build
+CheckPython optimized
+
+%endif # with tests
+
+
+%files
+%defattr(-, root, root)
+%license LICENSE
+%doc README.rst
+
+%if %{without flatpackage}
+%{_bindir}/pydoc*
+%{_bindir}/python3
+%{_bindir}/pyvenv
- %{_mandir}/*/*
- %{_bindir}/pyvenv
+# Remove in Fedora 29:
+%{_libexecdir}/system-python
+%else
+%{_bindir}/pydoc%{pybasever}
- %{_mandir}/*/python%{pybasever}*
+%endif
- %{_bindir}/pyvenv-%{pybasever}
++
+%{_bindir}/python%{pybasever}
+%{_bindir}/python%{pybasever}m
++%{_bindir}/pyvenv-%{pybasever}
++%{_mandir}/*/*
++
+
+%if %{without flatpackage}
+%files libs
+%defattr(-,root,root,-)
+%license LICENSE
+%doc README.rst
+%endif
+
+%dir %{pylibdir}
+%dir %{dynload_dir}
+
+%{pylibdir}/lib2to3
+%if %{without flatpackage}
+%exclude %{pylibdir}/lib2to3/tests
+%endif
+
+%dir %{pylibdir}/unittest/
+%dir %{pylibdir}/unittest/__pycache__/
+%{pylibdir}/unittest/*.py
+%{pylibdir}/unittest/__pycache__/*%{bytecode_suffixes}
+
+%dir %{pylibdir}/asyncio/
+%dir %{pylibdir}/asyncio/__pycache__/
+%{pylibdir}/asyncio/*.py
+%{pylibdir}/asyncio/__pycache__/*%{bytecode_suffixes}
+
+%dir %{pylibdir}/venv/
+%dir %{pylibdir}/venv/__pycache__/
+%{pylibdir}/venv/*.py
+%{pylibdir}/venv/__pycache__/*%{bytecode_suffixes}
+%{pylibdir}/venv/scripts
+
+%{pylibdir}/wsgiref
+%{pylibdir}/xmlrpc
+
+%dir %{pylibdir}/ensurepip/
+%dir %{pylibdir}/ensurepip/__pycache__/
+%{pylibdir}/ensurepip/*.py
+%{pylibdir}/ensurepip/__pycache__/*%{bytecode_suffixes}
+
+%if %{without flatpackage}
+%exclude %{pylibdir}/ensurepip/_bundled
+%else
+%dir %{pylibdir}/ensurepip/_bundled
+%{pylibdir}/ensurepip/_bundled/*.whl
+%endif
+
+%if %{with rewheel}
+%dir %{pylibdir}/ensurepip/rewheel/
+%dir %{pylibdir}/ensurepip/rewheel/__pycache__/
+%{pylibdir}/ensurepip/rewheel/*.py
+%{pylibdir}/ensurepip/rewheel/__pycache__/*%{bytecode_suffixes}
+%endif
+
+%dir %{pylibdir}/test/
+%dir %{pylibdir}/test/__pycache__/
+%dir %{pylibdir}/test/support/
+%dir %{pylibdir}/test/support/__pycache__/
+%{pylibdir}/test/__init__.py
+%{pylibdir}/test/__pycache__/__init__%{bytecode_suffixes}
+%{pylibdir}/test/support/__init__.py
+%{pylibdir}/test/support/__pycache__/__init__%{bytecode_suffixes}
+
+%dir %{pylibdir}/concurrent/
+%dir %{pylibdir}/concurrent/__pycache__/
+%{pylibdir}/concurrent/*.py
+%{pylibdir}/concurrent/__pycache__/*%{bytecode_suffixes}
+
+%dir %{pylibdir}/concurrent/futures/
+%dir %{pylibdir}/concurrent/futures/__pycache__/
+%{pylibdir}/concurrent/futures/*.py
+%{pylibdir}/concurrent/futures/__pycache__/*%{bytecode_suffixes}
+
+%{pylibdir}/pydoc_data
+
+%{dynload_dir}/_blake2.%{SOABI_optimized}.so
+%{dynload_dir}/_md5.%{SOABI_optimized}.so
+%{dynload_dir}/_sha1.%{SOABI_optimized}.so
+%{dynload_dir}/_sha256.%{SOABI_optimized}.so
+%{dynload_dir}/_sha3.%{SOABI_optimized}.so
+%{dynload_dir}/_sha512.%{SOABI_optimized}.so
+
+%{dynload_dir}/_asyncio.%{SOABI_optimized}.so
+%{dynload_dir}/_bisect.%{SOABI_optimized}.so
+%{dynload_dir}/_bz2.%{SOABI_optimized}.so
+%{dynload_dir}/_codecs_cn.%{SOABI_optimized}.so
+%{dynload_dir}/_codecs_hk.%{SOABI_optimized}.so
+%{dynload_dir}/_codecs_iso2022.%{SOABI_optimized}.so
+%{dynload_dir}/_codecs_jp.%{SOABI_optimized}.so
+%{dynload_dir}/_codecs_kr.%{SOABI_optimized}.so
+%{dynload_dir}/_codecs_tw.%{SOABI_optimized}.so
++%{dynload_dir}/_contextvars.%{SOABI_optimized}.so
+%{dynload_dir}/_crypt.%{SOABI_optimized}.so
+%{dynload_dir}/_csv.%{SOABI_optimized}.so
+%{dynload_dir}/_ctypes.%{SOABI_optimized}.so
+%{dynload_dir}/_curses.%{SOABI_optimized}.so
+%{dynload_dir}/_curses_panel.%{SOABI_optimized}.so
+%{dynload_dir}/_dbm.%{SOABI_optimized}.so
+%{dynload_dir}/_decimal.%{SOABI_optimized}.so
+%{dynload_dir}/_elementtree.%{SOABI_optimized}.so
+%if %{with gdbm}
+%{dynload_dir}/_gdbm.%{SOABI_optimized}.so
+%endif
+%{dynload_dir}/_hashlib.%{SOABI_optimized}.so
+%{dynload_dir}/_heapq.%{SOABI_optimized}.so
+%{dynload_dir}/_json.%{SOABI_optimized}.so
+%{dynload_dir}/_lsprof.%{SOABI_optimized}.so
+%{dynload_dir}/_lzma.%{SOABI_optimized}.so
+%{dynload_dir}/_multibytecodec.%{SOABI_optimized}.so
+%{dynload_dir}/_multiprocessing.%{SOABI_optimized}.so
+%{dynload_dir}/_opcode.%{SOABI_optimized}.so
+%{dynload_dir}/_pickle.%{SOABI_optimized}.so
+%{dynload_dir}/_posixsubprocess.%{SOABI_optimized}.so
++%{dynload_dir}/_queue.%{SOABI_optimized}.so
+%{dynload_dir}/_random.%{SOABI_optimized}.so
+%{dynload_dir}/_socket.%{SOABI_optimized}.so
+%{dynload_dir}/_sqlite3.%{SOABI_optimized}.so
+%{dynload_dir}/_ssl.%{SOABI_optimized}.so
+%{dynload_dir}/_struct.%{SOABI_optimized}.so
+%{dynload_dir}/array.%{SOABI_optimized}.so
+%{dynload_dir}/audioop.%{SOABI_optimized}.so
+%{dynload_dir}/binascii.%{SOABI_optimized}.so
+%{dynload_dir}/cmath.%{SOABI_optimized}.so
+%{dynload_dir}/_datetime.%{SOABI_optimized}.so
+%{dynload_dir}/fcntl.%{SOABI_optimized}.so
+%{dynload_dir}/grp.%{SOABI_optimized}.so
+%{dynload_dir}/math.%{SOABI_optimized}.so
+%{dynload_dir}/mmap.%{SOABI_optimized}.so
+%{dynload_dir}/nis.%{SOABI_optimized}.so
+%{dynload_dir}/ossaudiodev.%{SOABI_optimized}.so
+%{dynload_dir}/parser.%{SOABI_optimized}.so
+%{dynload_dir}/pyexpat.%{SOABI_optimized}.so
+%{dynload_dir}/readline.%{SOABI_optimized}.so
+%{dynload_dir}/resource.%{SOABI_optimized}.so
+%{dynload_dir}/select.%{SOABI_optimized}.so
+%{dynload_dir}/spwd.%{SOABI_optimized}.so
+%{dynload_dir}/syslog.%{SOABI_optimized}.so
+%{dynload_dir}/termios.%{SOABI_optimized}.so
+%{dynload_dir}/_testmultiphase.%{SOABI_optimized}.so
+%{dynload_dir}/unicodedata.%{SOABI_optimized}.so
++%{dynload_dir}/_uuid.%{SOABI_optimized}.so
+%{dynload_dir}/xxlimited.%{SOABI_optimized}.so
+%{dynload_dir}/zlib.%{SOABI_optimized}.so
+
+%dir %{pylibdir}/site-packages/
+%dir %{pylibdir}/site-packages/__pycache__/
+%{pylibdir}/site-packages/README.txt
+%{pylibdir}/*.py
+%dir %{pylibdir}/__pycache__/
+%{pylibdir}/__pycache__/*%{bytecode_suffixes}
+
+%dir %{pylibdir}/collections/
+%dir %{pylibdir}/collections/__pycache__/
+%{pylibdir}/collections/*.py
+%{pylibdir}/collections/__pycache__/*%{bytecode_suffixes}
+
+%dir %{pylibdir}/ctypes/
+%dir %{pylibdir}/ctypes/__pycache__/
+%{pylibdir}/ctypes/*.py
+%{pylibdir}/ctypes/__pycache__/*%{bytecode_suffixes}
+%{pylibdir}/ctypes/macholib
+
+%{pylibdir}/curses
+
+%dir %{pylibdir}/dbm/
+%dir %{pylibdir}/dbm/__pycache__/
+%{pylibdir}/dbm/*.py
+%{pylibdir}/dbm/__pycache__/*%{bytecode_suffixes}
+
+%dir %{pylibdir}/distutils/
+%dir %{pylibdir}/distutils/__pycache__/
+%{pylibdir}/distutils/*.py
+%{pylibdir}/distutils/__pycache__/*%{bytecode_suffixes}
+%{pylibdir}/distutils/README
+%{pylibdir}/distutils/command
+%exclude %{pylibdir}/distutils/command/wininst-*.exe
+
+%dir %{pylibdir}/email/
+%dir %{pylibdir}/email/__pycache__/
+%{pylibdir}/email/*.py
+%{pylibdir}/email/__pycache__/*%{bytecode_suffixes}
+%{pylibdir}/email/mime
+%doc %{pylibdir}/email/architecture.rst
+
+%{pylibdir}/encodings
+
+%{pylibdir}/html
+%{pylibdir}/http
+
+%dir %{pylibdir}/importlib/
+%dir %{pylibdir}/importlib/__pycache__/
+%{pylibdir}/importlib/*.py
+%{pylibdir}/importlib/__pycache__/*%{bytecode_suffixes}
+
+%dir %{pylibdir}/json/
+%dir %{pylibdir}/json/__pycache__/
+%{pylibdir}/json/*.py
+%{pylibdir}/json/__pycache__/*%{bytecode_suffixes}
+
+%{pylibdir}/logging
+%{pylibdir}/multiprocessing
+
+%dir %{pylibdir}/sqlite3/
+%dir %{pylibdir}/sqlite3/__pycache__/
+%{pylibdir}/sqlite3/*.py
+%{pylibdir}/sqlite3/__pycache__/*%{bytecode_suffixes}
+
+%if %{without flatpackage}
+%exclude %{pylibdir}/turtle.py
+%exclude %{pylibdir}/__pycache__/turtle*%{bytecode_suffixes}
+%endif
+
+%{pylibdir}/urllib
+%{pylibdir}/xml
+
+%if "%{_lib}" == "lib64"
+%attr(0755,root,root) %dir %{_prefix}/lib/python%{pybasever}
+%attr(0755,root,root) %dir %{_prefix}/lib/python%{pybasever}/site-packages
+%attr(0755,root,root) %dir %{_prefix}/lib/python%{pybasever}/site-packages/__pycache__/
+%endif
+
+# "Makefile" and the config-32/64.h file are needed by
+# distutils/sysconfig.py:_init_posix(), so we include them in the core
+# package, along with their parent directories (bug 531901):
+%dir %{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/
+%{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/Makefile
+%dir %{_includedir}/python%{LDVERSION_optimized}/
+%{_includedir}/python%{LDVERSION_optimized}/%{_pyconfig_h}
+
+%{_libdir}/%{py_INSTSONAME_optimized}
+%if %{without flatpackage}
+%{_libdir}/libpython3.so
+%endif
+
++
+%if %{without flatpackage}
+%files devel
+%defattr(-,root,root)
+%{_bindir}/2to3
- # TODO: Remove 2to3-3.7 once rebased to 3.7
- %{_bindir}/2to3-%{pybasever}
+%endif
+
+%{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/*
+%if %{without flatpackage}
+%exclude %{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/Makefile
+%exclude %{_includedir}/python%{LDVERSION_optimized}/%{_pyconfig_h}
+%endif
+%{pylibdir}/distutils/command/wininst-*.exe
+%{_includedir}/python%{LDVERSION_optimized}/*.h
+%doc Misc/README.valgrind Misc/valgrind-python.supp Misc/gdbinit
+
+%if %{without flatpackage}
+%{_bindir}/python3-config
+%{_libdir}/pkgconfig/python3.pc
- %{_rpmconfigdir}/macros.d/macros.pybytecompile%{pybasever}
- %{_rpmconfigdir}/macros.d/macros.systempython
+%{_bindir}/pathfix.py
+%endif
+
+%{_bindir}/python%{pybasever}-config
+%{_bindir}/python%{LDVERSION_optimized}-config
+%{_bindir}/python%{LDVERSION_optimized}-*-config
+%{_libdir}/libpython%{LDVERSION_optimized}.so
+%{_libdir}/pkgconfig/python-%{LDVERSION_optimized}.pc
+%{_libdir}/pkgconfig/python-%{pybasever}.pc
+
++
+%if %{without flatpackage}
+%files idle
+%defattr(-,root,root,755)
+
+%{_bindir}/idle*
+%else
+%{_bindir}/idle%{pybasever}
+%endif
+
+%{pylibdir}/idlelib
+
+%if %{without flatpackage}
+%{_datadir}/appdata/idle3.appdata.xml
+%{_datadir}/applications/idle3.desktop
+%{_datadir}/icons/hicolor/*/apps/idle3.*
+%endif
+
+%if %{without flatpackage}
+%files tkinter
+%defattr(-,root,root,755)
+%endif
+
+%{pylibdir}/tkinter
+%if %{without flatpackage}
+%exclude %{pylibdir}/tkinter/test
+%endif
+%{dynload_dir}/_tkinter.%{SOABI_optimized}.so
+%{pylibdir}/turtle.py
+%{pylibdir}/__pycache__/turtle*%{bytecode_suffixes}
+%dir %{pylibdir}/turtledemo
+%{pylibdir}/turtledemo/*.py
+%{pylibdir}/turtledemo/*.cfg
+%dir %{pylibdir}/turtledemo/__pycache__/
+%{pylibdir}/turtledemo/__pycache__/*%{bytecode_suffixes}
+
++
+%if %{without flatpackage}
+%files test
+%defattr(-, root, root)
+%endif
++
+%{pylibdir}/ctypes/test
+%{pylibdir}/distutils/tests
+%{pylibdir}/sqlite3/test
+%{pylibdir}/test
+%{dynload_dir}/_ctypes_test.%{SOABI_optimized}.so
+%{dynload_dir}/_testbuffer.%{SOABI_optimized}.so
+%{dynload_dir}/_testcapi.%{SOABI_optimized}.so
+%{dynload_dir}/_testimportmultiple.%{SOABI_optimized}.so
++%{dynload_dir}/_xxtestfuzz.%{SOABI_optimized}.so
+%{pylibdir}/lib2to3/tests
+%{pylibdir}/tkinter/test
+%{pylibdir}/unittest/test
+
+
+# We don't bother splitting the debug build out into further subpackages:
+# if you need it, you're probably a developer.
+
+# Hence the manifest is the combination of analogous files in the manifests of
+# all of the other subpackages
+
+%if %{with debug_build}
+%if %{without flatpackage}
+%files debug
+%defattr(-,root,root,-)
+%{_bindir}/python3-debug
+%endif
+
+# Analog of the core subpackage's files:
+%{_bindir}/python%{LDVERSION_debug}
+
+# Analog of the -libs subpackage's files:
+# ...with debug builds of the built-in "extension" modules:
+
+%{dynload_dir}/_blake2.%{SOABI_debug}.so
+%{dynload_dir}/_md5.%{SOABI_debug}.so
+%{dynload_dir}/_sha1.%{SOABI_debug}.so
+%{dynload_dir}/_sha256.%{SOABI_debug}.so
+%{dynload_dir}/_sha3.%{SOABI_debug}.so
+%{dynload_dir}/_sha512.%{SOABI_debug}.so
+
+%{dynload_dir}/_asyncio.%{SOABI_debug}.so
+%{dynload_dir}/_bisect.%{SOABI_debug}.so
+%{dynload_dir}/_bz2.%{SOABI_debug}.so
+%{dynload_dir}/_codecs_cn.%{SOABI_debug}.so
+%{dynload_dir}/_codecs_hk.%{SOABI_debug}.so
+%{dynload_dir}/_codecs_iso2022.%{SOABI_debug}.so
+%{dynload_dir}/_codecs_jp.%{SOABI_debug}.so
+%{dynload_dir}/_codecs_kr.%{SOABI_debug}.so
+%{dynload_dir}/_codecs_tw.%{SOABI_debug}.so
++%{dynload_dir}/_contextvars.%{SOABI_debug}.so
+%{dynload_dir}/_crypt.%{SOABI_debug}.so
+%{dynload_dir}/_csv.%{SOABI_debug}.so
+%{dynload_dir}/_ctypes.%{SOABI_debug}.so
+%{dynload_dir}/_curses.%{SOABI_debug}.so
+%{dynload_dir}/_curses_panel.%{SOABI_debug}.so
+%{dynload_dir}/_dbm.%{SOABI_debug}.so
+%{dynload_dir}/_decimal.%{SOABI_debug}.so
+%{dynload_dir}/_elementtree.%{SOABI_debug}.so
+%if %{with gdbm}
+%{dynload_dir}/_gdbm.%{SOABI_debug}.so
+%endif
+%{dynload_dir}/_hashlib.%{SOABI_debug}.so
+%{dynload_dir}/_heapq.%{SOABI_debug}.so
+%{dynload_dir}/_json.%{SOABI_debug}.so
+%{dynload_dir}/_lsprof.%{SOABI_debug}.so
+%{dynload_dir}/_lzma.%{SOABI_debug}.so
+%{dynload_dir}/_multibytecodec.%{SOABI_debug}.so
+%{dynload_dir}/_multiprocessing.%{SOABI_debug}.so
+%{dynload_dir}/_opcode.%{SOABI_debug}.so
+%{dynload_dir}/_pickle.%{SOABI_debug}.so
+%{dynload_dir}/_posixsubprocess.%{SOABI_debug}.so
++%{dynload_dir}/_queue.%{SOABI_debug}.so
+%{dynload_dir}/_random.%{SOABI_debug}.so
+%{dynload_dir}/_socket.%{SOABI_debug}.so
+%{dynload_dir}/_sqlite3.%{SOABI_debug}.so
+%{dynload_dir}/_ssl.%{SOABI_debug}.so
+%{dynload_dir}/_struct.%{SOABI_debug}.so
+%{dynload_dir}/array.%{SOABI_debug}.so
+%{dynload_dir}/audioop.%{SOABI_debug}.so
+%{dynload_dir}/binascii.%{SOABI_debug}.so
+%{dynload_dir}/cmath.%{SOABI_debug}.so
+%{dynload_dir}/_datetime.%{SOABI_debug}.so
+%{dynload_dir}/fcntl.%{SOABI_debug}.so
+%{dynload_dir}/grp.%{SOABI_debug}.so
+%{dynload_dir}/math.%{SOABI_debug}.so
+%{dynload_dir}/mmap.%{SOABI_debug}.so
+%{dynload_dir}/nis.%{SOABI_debug}.so
+%{dynload_dir}/ossaudiodev.%{SOABI_debug}.so
+%{dynload_dir}/parser.%{SOABI_debug}.so
+%{dynload_dir}/pyexpat.%{SOABI_debug}.so
+%{dynload_dir}/readline.%{SOABI_debug}.so
+%{dynload_dir}/resource.%{SOABI_debug}.so
+%{dynload_dir}/select.%{SOABI_debug}.so
+%{dynload_dir}/spwd.%{SOABI_debug}.so
+%{dynload_dir}/syslog.%{SOABI_debug}.so
+%{dynload_dir}/termios.%{SOABI_debug}.so
+%{dynload_dir}/_testmultiphase.%{SOABI_debug}.so
+%{dynload_dir}/unicodedata.%{SOABI_debug}.so
++%{dynload_dir}/_uuid.%{SOABI_debug}.so
++%{dynload_dir}/_xxtestfuzz.%{SOABI_debug}.so
+%{dynload_dir}/zlib.%{SOABI_debug}.so
+
+# No need to split things out the "Makefile" and the config-32/64.h file as
we
+# do for the regular build above (bug 531901), since they're all in one package
+# now; they're listed below, under "-devel":
+
+%{_libdir}/%{py_INSTSONAME_debug}
+
+# Analog of the -devel subpackage's files:
+%{pylibdir}/config-%{LDVERSION_debug}-%{_arch}-linux%{_gnu}
+%{_includedir}/python%{LDVERSION_debug}
+%{_bindir}/python%{LDVERSION_debug}-config
+%{_bindir}/python%{LDVERSION_debug}-*-config
+%{_libdir}/libpython%{LDVERSION_debug}.so
+%{_libdir}/libpython%{LDVERSION_debug}.so.1.0
+%{_libdir}/pkgconfig/python-%{LDVERSION_debug}.pc
+
+# Analog of the -tools subpackage's files:
+# None for now; we could build precanned versions that have the appropriate
+# shebang if needed
+
+# Analog of the tkinter subpackage's files:
+%{dynload_dir}/_tkinter.%{SOABI_debug}.so
+
+# Analog of the -test subpackage's files:
+%{dynload_dir}/_ctypes_test.%{SOABI_debug}.so
+%{dynload_dir}/_testbuffer.%{SOABI_debug}.so
+%{dynload_dir}/_testcapi.%{SOABI_debug}.so
+%{dynload_dir}/_testimportmultiple.%{SOABI_debug}.so
+
+%endif # with debug_build
+
+# We put the debug-gdb.py file inside /usr/lib/debug to avoid noise from ldconfig
+# See
https://bugzilla.redhat.com/show_bug.cgi?id=562980
+#
+# The /usr/lib/rpm/redhat/macros defines %%__debug_package to use
+# debugfiles.list, and it appears that everything below /usr/lib/debug and
+# (/usr/src/debug) gets added to this file (via LISTFILES) in
+# /usr/lib/rpm/find-debuginfo.sh
+#
+# Hence by installing it below /usr/lib/debug we ensure it is added to the
+# -debuginfo subpackage
+# (if it doesn't, then the rpmbuild ought to fail since the debug-gdb.py
+# payload file would be unpackaged)
+
+# Workaround for
https://bugzilla.redhat.com/show_bug.cgi?id=1476593
+%undefine _debuginfo_subpackages
+
+# ======================================================
+# Finally, the changelog:
+# ======================================================
+
+%changelog
++* Tue Jun 12 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.7.0-0.20.rc1
++- Update to 3.7.0rc1
++
+* Mon Apr 23 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.5-4
+- Fix multiprocessing regression on newer glibcs
+- Enable test_multiprocessing_fork(server) and _spawn again
+Resolves: rhbz#1569933
+
+* Thu Apr 19 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.5-3
+- Skip test_multiprocessing_fork(server) and _spawn for now
+
+* Wed Apr 18 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.5-2
+- Add flatpackage conditionals
+
+* Thu Mar 29 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.5-1
+- Update to 3.6.5
+
+* Sat Mar 24 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-20
+- Fix broken macro invocation and broken building of C Python extensions
+Resolves: rhbz#1560103
+
+* Fri Mar 16 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-19
+- Add -n option for pathfix.py
+Resolves: rhbz#1546990
+
+* Thu Mar 15 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-18
+- Fix the py_byte_compile macro to work on Python 2
+- Remove the pybytecompile macro file from the flat package
+Resolves: rhbz#1484993
+
+* Tue Mar 13 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-17
+- Do not send IP addresses in SNI TLS extension
+
+* Sat Feb 24 2018 Florian Weimer <fweimer(a)redhat.com> - 3.6.4-16
+- Rebuild with new LDFLAGS from redhat-rpm-config
+
+* Wed Feb 21 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-15
+- Filter out automatic /usr/bin/python3.X requirement,
+ recommend the main package from libs instead
+Resolves: rhbz#1547131
+
+* Thu Feb 15 2018 Iryna Shcherbina <ishcherb(a)redhat.com> - 3.6.4-14
+- Remove the python3-tools package (#rhbz 1312030)
+- Move /usr/bin/2to3 to python3-devel
+- Move /usr/bin/idle and idlelib to python3-idle
+- Provide python3-tools from python3-idle
+
+* Fri Feb 09 2018 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 3.6.4-13
+- Escape macros in %%changelog
+
+* Fri Feb 02 2018 Michal Cyprian <mcyprian(a)redhat.com> - 3.6.4-12
+- Remove sys.executable check from change-user-install-location patch
+Resolves: rhbz#1532287
+
+* Thu Feb 01 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-11
+- Define TLS cipher suite on build time.
+
+* Wed Jan 31 2018 Tomas Orsava <torsava(a)redhat.com> - 3.6.4-10
+- Disable test_gdb for all arches and test_buffer for ppc64le in anticipation
+ of the F28 mass rebuild
+- Re-enable these tests after the mass rebuild when they can be properly
+ addressed
+
+* Tue Jan 23 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-9
+- Restore the PyExc_RecursionErrorInst public symbol
+
+* Tue Jan 23 2018 Bjrn Esser <besser82(a)fedoraproject.org> - 3.6.4-8
+- Add patch to explicitly link _ctypes module with -ldl (#1537489)
+- Refactored patch for libxcrypt
+- Re-enable strict symbol checks in the link editor
+
+* Mon Jan 22 2018 Bjrn Esser <besser82(a)fedoraproject.org> - 3.6.4-7
+- Add patch for libxcrypt
+- Disable strict symbol checks in the link editor
+
+* Sat Jan 20 2018 Bjrn Esser <besser82(a)fedoraproject.org> - 3.6.4-6
+- Rebuilt for switch to libxcrypt
+
+* Fri Jan 19 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-5
+- Fix localeconv() encoding for LC_NUMERIC
+
+* Thu Jan 18 2018 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 3.6.4-4
+- R: gdbm-devel R: gdbm for python3-libs
+
+* Wed Jan 17 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-3
+- Require large enough gdbm (fixup for previous bump)
+
+* Tue Jan 16 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-2
+- Rebuild for reverted gdbm 1.13 on Fedora 27
+
+* Mon Jan 15 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-1
+- Update to version 3.6.4
+
+* Fri Jan 12 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.3-5
+- Fix the compilation of the nis module.
+
+* Tue Nov 21 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.3-4
+- Raise the release of platform-python obsoletes for better maintainability
+
+* Wed Nov 15 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.3-3
+- Obsolete platform-python and it's subpackages
+
+* Mon Oct 09 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.3-2
+- Fix memory corruption due to allocator mix
+Resolves: rhbz#1498207
+
+* Fri Oct 06 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.3-1
+- Update to Python 3.6.3
+
+* Fri Sep 29 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.2-19
+- Move pathfix.py to bindir,
https://github.com/fedora-python/python-rpm-porting/issues/24
+- Make the -devel package require redhat-rpm-config
+Resolves: rhbz#1496757
+
+* Wed Sep 13 2017 Iryna Shcherbina <ishcherb(a)redhat.com> - 3.6.2-18
+- Fix /usr/bin/env dependency from python3-tools
+Resolves: rhbz#1482118
+
+* Wed Sep 06 2017 Iryna Shcherbina <ishcherb(a)redhat.com> - 3.6.2-17
+- Include `-g` in the flags sent to the linker (LDFLAGS)
+Resolves: rhbz#1483222
+
+* Tue Sep 05 2017 Petr Viktorin <pviktori(a)redhat.com> - 3.6.2-16
+- Specfile cleanup
+- Make the main description also applicable to the SRPM
+- Add audiotest.au to the test package
+
+* Fri Sep 01 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.2-15
+- Remove %%{pylibdir}/Tools/scripts/2to3
+
+* Fri Sep 01 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.2-14
+- Expat >= 2.1.0 is everywhere, remove explicit requires
+- Conditionalize systemtap-devel BuildRequires
+- For consistency, require /usr/sbin/ifconfig instead of net-tools
+
+* Mon Aug 28 2017 Petr Viktorin <pviktori(a)redhat.com> - 3.6.2-13
+- Rename patch files to be consistent
+- Run autotools to generate the configure script before building
+- Merge lib64 patches (104 into 102)
+- Skip test_bdist_rpm using test config rather than a patch (removes patch 137)
+- Remove patches 157 and 186, which had test changes left over after upstreaming
+- Remove patch 188, a temporary workaround for hashlib tests
+- Merge patches 180, 206, 243, 5001 (architecture naming) into new patch 274
+- Move python2-tools conflicts to tools subpackage (it was wrongly in tkinter)
+
+* Mon Aug 28 2017 Michal Cyprian <mcyprian(a)redhat.com> - 3.6.2-12
+- Use python3 style of calling super() without arguments in rpath
+ patch to prevent recursion in UnixCCompiler subclasses
+Resolves: rhbz#1458122
+
+* Mon Aug 21 2017 Petr Viktorin <pviktori(a)redhat.com> - 3.6.2-11
+- Add bcond for --without optimizations
+- Reword package descriptions
+- Remove Group declarations
+- Skip failing test_float_with_comma
+
+* Mon Aug 21 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.2-10
+- Remove system-python, see
https://fedoraproject.org/wiki/Changes/Platform_Python_Stack
+
+* Wed Aug 16 2017 Petr Viktorin <pviktori(a)redhat.com> - 3.6.2-9
+- Use bconds for configuring the build
+- Reorganize the initial sections
+
+* Wed Aug 16 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.2-8
+- Have /usr/bin/2to3 (rhbz#1111275)
+- Provide 2to3 and idle3, list them in summary and description (rhbz#1076401)
+
+* Fri Aug 11 2017 Michal Cyprian <mcyprian(a)redhat.com> - 3.6.2-7
+- Revert "Add --executable option to install.py command"
+ This enhancement is currently not needed and it can possibly
+ collide with `pip --editable`option
+
+* Mon Aug 07 2017 Iryna Shcherbina <ishcherb(a)redhat.com> - 3.6.2-6
+- Fix the "urllib FTP protocol stream injection" vulnerability
+Resolves: rhbz#1478916
+
+* Tue Aug 01 2017 Tomas Orsava <torsava(a)redhat.com> - 3.6.2-5
+- Dropped BuildRequires on db4-devel which was useful for Python 2 (module
+ bsddb), however, no longer needod for Python 3
+- Tested building Python 3 with and without the dependency, all tests pass and
+ filelists of resulting RPMs are identical
+
+* Sun Jul 30 2017 Florian Weimer <fweimer(a)redhat.com> - 3.6.2-4
+- Do not generate debuginfo subpackages (#1476593)
+- Rebuild with binutils fix for ppc64le (#1475636)
+
+* Thu Jul 27 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.6.2-3
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
+* Tue Jul 25 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.2-2
+- Make test_asyncio to not depend on the current SIGHUP signal handler.
+
+* Tue Jul 18 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.2-1
+- Update to Python 3.6.2
+
+* Tue Jun 27 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.1-10
+- Update to the latest upstream implementation of PEP 538
+
+* Mon Jun 26 2017 Michal Cyprian <mcyprian(a)redhat.com> - 3.6.1-9
+- Make pip and distutils in user environment install into separate location
+
+* Fri Jun 23 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.1-8
+- Fix test_alpn_protocols from test_ssl
+- Do not require rebundled setuptools dependencies
+
+* Tue May 16 2017 Tomas Orsava <torsava(a)redhat.com> - 3.6.1-7
+- Added a dependency to the devel subpackage on python3-rpm-generators which
+ have been excised out of rpm-build
+- Updated notes on bootstrapping Python on top of this specfile accordingly
+- Involves: rhbz#1410631, rhbz#1444925
+
+* Tue May 09 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.1-6
+- Enable profile guided optimizations for x86_64 and i686 architectures
+- Update to a newer implementation of PEP 538
+- Update description to reflect that Python 3 is now the default Python
+
+* Fri May 05 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.1-5
+- Update PEP 538 to the latest upstream implementation
+
+* Tue Apr 18 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.1-4
+- Enable link time optimizations
+- Move windows executables to the devel subpackage (rhbz#1426257)
+
+* Thu Apr 13 2017 Tomas Orsava <torsava(a)redhat.com> - 3.6.1-3
+- Rename python3.Xdm-config script from -debug to be arch specific
+Resolves: rhbz#1179073
+
+* Wed Apr 05 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.1-2
+- Install the Makefile in its proper location (rhbz#1438219)
+
+* Wed Mar 22 2017 Iryna Shcherbina <ishcherb(a)redhat.com> - 3.6.1-1
+- Update to version 3.6.1 final
+
+* Tue Mar 21 2017 Tomas Orsava <torsava(a)redhat.com> - 3.6.1-0.2.rc1
+- Fix syntax error in %%py_byte_compile macro (rhbz#1433569)
+
+* Thu Mar 16 2017 Iryna Shcherbina <ishcherb(a)redaht.com> - 3.6.1-0.1.rc1
+- Update to Python 3.6.1 release candidate 1
+- Add patch 264 to skip a known test failure on aarch64
+
+* Fri Mar 10 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-21
+- Use proper command line parsing in _testembed
+- Backport of PEP 538: Coercing the legacy C locale to a UTF-8 based locale
+
https://fedoraproject.org/wiki/Changes/python3_c.utf-8_locale
+
+* Mon Feb 27 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-20
+- Add desktop entry and appdata.xml file for IDLE 3 (rhbz#1392049)
+
+* Fri Feb 24 2017 Michal Cyprian <mcyprian(a)redhat.com> - 3.6.0-19
+- Revert "Set values of prefix and exec_prefix to /usr/local for
+ /usr/bin/python* executables..." to prevent build failures
+ of packages using alternate build tools
+
+* Tue Feb 21 2017 Michal Cyprian <mcyprian(a)redhat.com> - 3.6.0-18
+- Set values of prefix and exec_prefix to /usr/local for
+ /usr/bin/python* executables
+- Use new %%_module_build macro
+
+* Fri Feb 17 2017 Michal Cyprian <mcyprian(a)redhat.com> - 3.6.0-13
+- Add --executable option to install.py command
+
+* Wed Feb 15 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-12
+- BuildRequire the new dependencies of setuptools when rewheel mode is enabled
+in order for the virtualenvs to work properly
+
+* Sat Feb 11 2017 Fedora Release Engineering <releng(a)fedoraproject.org> -
3.6.0-11
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
+* Wed Feb 01 2017 Stephen Gallagher <sgallagh(a)redhat.com> - 3.6.0-10
+- Add missing %%license macro
+
+* Thu Jan 26 2017 Tomas Orsava <torsava(a)redhat.com> - 3.6.0-9
+- Modify the runtime dependency of python3-libs on system-python-libs again,
+ because previous attempt didn't work properly with dnf resolving mechanism
+
+* Wed Jan 25 2017 Tomas Orsava <torsava(a)redhat.com> - 3.6.0-8
+- Modify the runtime dependency of python3-libs on system-python-libs to use
+ just the version and release number, but not the dist tag due to Modularity
+
+* Mon Jan 16 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-7
+- Fix error check, so that Random.seed actually uses OS randomness (rhbz#1412275)
+- Skip test_aead_aes_gcm during rpmbuild
+
+* Thu Jan 12 2017 Igor Gnatenko <ignatenko(a)redhat.com> - 3.6.0-6
+- Rebuild for readline 7.x
+
+* Tue Jan 10 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-5
+- Require glibc >= 2.24.90-26 for system-python-libs (rhbz#1410644)
+
+* Mon Jan 09 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-4
+- Define HAVE_LONG_LONG as 1 for backwards compatibility
+
+* Thu Jan 05 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.0-3
+- Don't blow up on EL7 kernel (random generator) (rhbz#1410175)
+
+* Tue Dec 27 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-1
+- Update to Python 3.6.0 final
+
+* Fri Dec 09 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-0.6.rc1
+- Enable rewheel
+
+* Wed Dec 07 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-0.5.rc1
+- Update to Python 3.6.0 release candidate 1
+
+* Mon Dec 05 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.0-0.4.b4
+- Update to Python 3.6.0 beta 4
+
+* Mon Dec 05 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.2-7
+- Set to work with pip version 9.0.1
+
+* Wed Oct 12 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.2-6
+- Use proper patch numbering and base upstream branch for
+porting ssl and hashlib modules to OpenSSL 1.1.0
+- Drop hashlib patch for now
+- Add riscv64 arch to 64bit and no-valgrind arches
+
+* Tue Oct 11 2016 Tom Mrz <tmraz(a)redhat.com> - 3.5.2-5
+- Make it build with OpenSSL-1.1.0 based on upstream patch
+
+* Wed Sep 14 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.2-4
+- Obsolete and Provide python35 package
+
+* Mon Sep 12 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.2-3
+- Update %%py_byte_compile macro
+- Remove unused configure flags (rhbz#1374357)
+
+* Fri Sep 09 2016 Tomas Orsava <torsava(a)redhat.com> - 3.5.2-2
+- Updated .pyc 'bytecompilation with the newly installed interpreter' to also
+ recompile optimized .pyc files
+- Removed .pyo 'bytecompilation with the newly installed interpreter', as .pyo
+ files are no more
+- Resolves rhbz#1373635
+
+* Mon Aug 15 2016 Tomas Orsava <torsava(a)redhat.com> - 3.5.2-1
+- Rebased to version 3.5.2
+- Set to work with pip version 8.1.2
+- Removed patches 207, 237, 241 as fixes are already contained in Python 3.5.2
+- Removed arch or environment specific patches 194, 196, 203, and 208
+ as test builds indicate they are no longer needed
+- Updated patches 102, 146, and 242 to work with the new Python codebase
+- Removed patches 200, 201, 5000 which weren't even being applied
+
+* Tue Aug 09 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.1-15
+- Fix for CVE-2016-1000110 HTTPoxy attack
+- SPEC file cleanup
+
+* Mon Aug 01 2016 Michal Toman <mtoman(a)fedoraproject.org> - 3.5.1-14
+- Build properly on MIPS
+
+* Tue Jul 19 2016 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> -
3.5.1-13
+-
https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_...
+
+* Fri Jul 08 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.1-12
+- Refactor patch for properly fixing CVE-2016-5636
+
+* Fri Jul 08 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.1-11
+- Fix test_pyexpat failure with Expat version of 2.2.0
+
+* Fri Jul 08 2016 Miro Hronok <mhroncok(a)redhat.com> - 3.5.1-10
+- Move xml module to system-python-libs
+
+* Thu Jun 16 2016 Tomas Orsava <torsava(a)redhat.com> - 3.5.1-9
+- Fix for: CVE-2016-0772 python: smtplib StartTLS stripping attack
+- Raise an error when STARTTLS fails
+- rhbz#1303647:
https://bugzilla.redhat.com/show_bug.cgi?id=1303647
+- rhbz#1346345:
https://bugzilla.redhat.com/show_bug.cgi?id=1346345
+- Fixed upstream:
https://hg.python.org/cpython/rev/d590114c2394
+
+* Mon Jun 13 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.1-8
+- Added patch for fixing possible integer overflow and heap corruption in
zipimporter.get_data()
+
+* Fri Mar 04 2016 Miro Hronok <mhroncok(a)redhat.com> - 3.5.1-7
+- Move distutils to system-python-libs
+
+* Wed Feb 24 2016 Robert Kuska <rkuska(a)redhat.com> - 3.5.1-6
+- Provide python3-enum34
+
+* Fri Feb 19 2016 Miro Hronok <mhroncok(a)redhat.com> - 3.5.1-5
+- Provide System Python packages and macros
+
+* Thu Feb 04 2016 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.5.1-4
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
+
+* Wed Jan 13 2016 Orion Poplwski <orion(a)cora.nwra.com> - 3.5.1-2
+- Drop python3 macros, require python/python3-rpm-macros
+
+* Mon Dec 14 2015 Robert Kuska <rkuska(a)redhat.com> - 3.5.1-1
+- Update to 3.5.1
+- Removed patch 199 and 207 (upstream)
+
+* Sun Nov 15 2015 Robert Kuska <rkuska(a)redhat.com> - 3.5.0-5
+- Remove versioned libpython from devel package
+
+* Fri Nov 13 2015 Than Ngo <than(a)redhat.com> 3.5.0-4
+- add correct arch for ppc64/ppc64le to fix build failure
+
+* Wed Nov 11 2015 Robert Kuska <rkuska(a)redhat.com> - 3.5.0-3
+- Hide the private _Py_atomic_xxx symbols from public header
+
+* Wed Oct 14 2015 Robert Kuska <rkuska(a)redhat.com> - 3.5.0-2
+- Rebuild with wheel set to 1
+
+* Tue Sep 15 2015 Matej Stuchlik <mstuchli(a)redhat.com> - 3.5.0-1
+- Update to 3.5.0
+
+* Mon Jun 29 2015 Thomas Spura <tomspur(a)fedoraproject.org> - 3.4.3-4
+- python3-devel: Require python-macros for version independant macros such as
+ python_provide. See fpc#281 and fpc#534.
+
+* Thu Jun 18 2015 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> -
3.4.3-3
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
+
+* Wed Jun 17 2015 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.3-4
+- Use 1024bit DH key in test_ssl
+- Use -O0 when compiling -debug build
+- Update pip version variable to the version we actually ship
+
+* Wed Jun 17 2015 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.3-3
+- Make relocating Python by changing _prefix actually work
+Resolves: rhbz#1231801
+
+* Mon May 4 2015 Peter Robinson <pbrobinson(a)fedoraproject.org> 3.4.3-2
+- Disable test_gdb on aarch64 (rhbz#1196181), it joins all other non x86 arches
+
+* Thu Mar 12 2015 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.3-1
+- Updated to 3.4.3
+- BuildPython now accepts additional build options
+- Temporarily disabled test_gdb on arm (rhbz#1196181)
+
+* Wed Feb 25 2015 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.2-7
+- Fixed undefined behaviour in faulthandler which caused test to hang on x86_64
+ (
http://bugs.python.org/issue23433)
+
+* Sat Feb 21 2015 Till Maas <opensource(a)till.name> - 3.4.2-6
+- Rebuilt for Fedora 23 Change
+
https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-...
+
+* Tue Feb 17 2015 Ville Skytt <ville.skytta(a)iki.fi> - 3.4.2-5
+- Own systemtap dirs (#710733)
+
+* Mon Jan 12 2015 Dan Hork <dan[at]danny.cz> - 3.4.2-4
+- build with valgrind on ppc64le
+- disable test_gdb on s390(x) until rhbz#1181034 is resolved
+
+* Tue Dec 16 2014 Robert Kuska <rkuska(a)redhat.com> - 3.4.2-3
+- New patches: 170 (gc asserts), 200 (gettext headers),
+ 201 (gdbm memory leak)
+
+* Thu Dec 11 2014 Robert Kuska <rkuska(a)redhat.com> - 3.4.2-2
+- OpenSSL disabled SSLv3 in SSLv23 method
+
+* Thu Nov 13 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.2-1
+- Update to 3.4.2
+- Refreshed patches: 156 (gdb autoload)
+- Removed: 195 (Werror declaration), 197 (CVE-2014-4650)
+
+* Mon Nov 03 2014 Slavek Kabrda <bkabrda(a)redhat.com> - 3.4.1-16
+- Fix CVE-2014-4650 - CGIHTTPServer URL handling
+Resolves: rhbz#1113529
+
+* Sun Sep 07 2014 Karsten Hopp <karsten(a)redhat.com> 3.4.1-15
+- exclude test_gdb on ppc* (rhbz#1132488)
+
+* Thu Aug 21 2014 Slavek Kabrda <bkabrda(a)redhat.com> - 3.4.1-14
+- Update rewheel patch with fix from
https://github.com/bkabrda/rewheel/pull/1
+
+* Sun Aug 17 2014 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> -
3.4.1-13
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
+
+* Sun Jun 8 2014 Peter Robinson <pbrobinson(a)fedoraproject.org> 3.4.1-12
+- aarch64 has valgrind, just list those that don't support it
+
+* Sun Jun 08 2014 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> -
3.4.1-11
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
+* Wed Jun 04 2014 Karsten Hopp <karsten(a)redhat.com> 3.4.1-10
+- bump release and rebuild to link with the correct tcl/tk libs on ppcle
+
+* Tue Jun 03 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.1-9
+- Change paths to bundled projects in rewheel patch
+
+* Fri May 30 2014 Miro Hronok <mhroncok(a)redhat.com> - 3.4.1-8
+- In config script, use uname -m to write the arch
+
+* Thu May 29 2014 Dan Hork <dan[at]danny.cz> - 3.4.1-7
+- update the arch list where valgrind exists - %%power64 includes also
+ ppc64le which is not supported yet
+
+* Thu May 29 2014 Miro Hronok <mhroncok(a)redhat.com> - 3.4.1-6
+- Forward arguments to the arch specific config script
+Resolves: rhbz#1102683
+
+* Wed May 28 2014 Miro Hronok <mhroncok(a)redhat.com> - 3.4.1-5
+- Rename python3.Xm-config script to arch specific.
+Resolves: rhbz#1091815
+
+* Tue May 27 2014 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.4.1-4
+- Use python3-*, not python-* runtime requires on setuptools and pip
+- rebuild for tcl-8.6
+
+* Tue May 27 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.1-3
+- Update the rewheel module
+
+* Mon May 26 2014 Miro Hronok <mhroncok(a)redhat.com> - 3.4.1-2
+- Fix multilib dependencies.
+Resolves: rhbz#1091815
+
+* Sun May 25 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.1-1
+- Update to Python 3.4.1
+
+* Sun May 25 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.0-8
+- Fix test_gdb failure on ppc64le
+Resolves: rhbz#1095355
+
+* Thu May 22 2014 Miro Hronok <mhroncok(a)redhat.com> - 3.4.0-7
+- Add macro %%python3_version_nodots
+
+* Sun May 18 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.0-6
+- Disable test_faulthandler, test_gdb on aarch64
+Resolves: rhbz#1045193
+
+* Fri May 16 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.0-5
+- Don't add Werror=declaration-after-statement for extension
+ modules through setup.py (PyBT#21121)
+
+* Mon May 12 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.0-4
+- Add setuptools and pip to Requires
+
+* Tue Apr 29 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.0-3
+- Point __os_install_post to correct brp-* files
+
+* Tue Apr 15 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.0-2
+- Temporarily disable tests requiring SIGHUP (rhbz#1088233)
+
+* Tue Apr 15 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 3.4.0-1
+- Update to Python 3.4 final
+- Add patch adding the rewheel module
+- Merge patches from master
+
+* Wed Jan 08 2014 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.4.0-0.1.b2
+- Update to Python 3.4 beta 2.
+- Refreshed patches: 55 (systemtap), 146 (hashlib-fips), 154 (test_gdb noise)
+- Dropped patches: 114 (statvfs constants), 177 (platform unicode)
+
+* Mon Nov 25 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.4.0-0.1.b1
+- Update to Python 3.4 beta 1.
+- Refreshed patches: 102 (lib64), 111 (no static lib), 125 (less verbose COUNT
+ALLOCS), 141 (fix COUNT_ALLOCS in test_module), 146 (hashlib fips),
+157 (UID+GID overflows), 173 (ENOPROTOOPT in bind_port)
+- Removed patch 00187 (remove pthread atfork; upstreamed)
+
+* Mon Nov 04 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.4.0-0.1.a4
+- Update to Python 3.4 alpha 4.
+- Refreshed patches: 55 (systemtap), 102 (lib64), 111 (no static lib),
+114 (statvfs flags), 132 (unittest rpmbuild hooks), 134 (fix COUNT_ALLOCS in
+test_sys), 143 (tsc on ppc64), 146 (hashlib fips), 153 (test gdb noise),
+157 (UID+GID overflows), 173 (ENOPROTOOPT in bind_port), 186 (dont raise
+from py_compile)
+- Removed patches: 129 (test_subprocess nonreadable dir - no longer fails in
+Koji), 142 (the mock issue that caused this is fixed)
+- Added patch 187 (remove thread atfork) - will be in next version
+- Refreshed script for checking pyc and pyo timestamps with new ignored files.
+- The fips patch is disabled for now until upstream makes a final decision
+what to do with sha3 implementation for 3.4.0.
+
+* Wed Oct 30 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.3.2-7
+- Bytecompile all *.py files properly during build (rhbz#1023607)
+
+* Fri Aug 23 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 3.3.2-6
+- Added fix for CVE-2013-4238 (rhbz#996399)
+
+* Fri Jul 26 2013 Dennis Gilmore <dennis(a)ausil.us> - 3.3.2-5
+- fix up indentation in arm patch
+
+* Fri Jul 26 2013 Dennis Gilmore <dennis(a)ausil.us> - 3.3.2-4
+- disable a test that fails on arm
+- enable valgrind support on arm arches
+
+* Tue Jul 02 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.3.2-3
+- Fix build with libffi containing multilib wrapper for ffi.h (rhbz#979696).
+
+* Mon May 20 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.3.2-2
+- Add patch for CVE-2013-2099 (rhbz#963261).
+
+* Thu May 16 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.3.2-1
+- Updated to Python 3.3.2.
+- Refreshed patches: 153 (gdb test noise)
+- Dropped patches: 175 (configure -Wformat, fixed upstream), 182 (gdb
+test threads)
+- Synced patch numbers with python.spec.
+
+* Thu May 9 2013 David Malcolm <dmalcolm(a)redhat.com> - 3.3.1-4
+- fix test.test_gdb.PyBtTests.test_threads on ppc64 (patch 181; rhbz#960010)
+
+* Thu May 02 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.3.1-3
+- Add patch that enables building on ppc64p7 (replace the sed, so that
+we get consistent with python2 spec and it's more obvious that we're doing it.
+
+* Wed Apr 24 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.3.1-2
+- Add fix for gdb tests failing on arm, rhbz#951802.
+
+* Tue Apr 09 2013 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.3.1-1
+- Updated to Python 3.3.1.
+- Refreshed patches: 55 (systemtap), 111 (no static lib), 146 (hashlib fips),
+153 (fix test_gdb noise), 157 (uid, gid overflow - fixed upstream, just
+keeping few more downstream tests)
+- Removed patches: 3 (audiotest.au made it to upstream tarball)
+- Removed workaround for
http://bugs.python.org/issue14774, discussed in
+http://bugs.python.org/issue15298 and fixed in revision 24d52d3060e8.
+
+* Mon Mar 25 2013 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-10
+- fix gcc 4.8 incompatibility (rhbz#927358); regenerate autotool intermediates
+
+* Mon Mar 25 2013 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-9
+- renumber patches to keep them in sync with python.spec
+
+* Fri Mar 15 2013 Toshio Kuratomi <toshio(a)fedoraproject.org> - 3.3.0-8
+- Fix error in platform.platform() when non-ascii byte strings are decoded to
+ unicode (rhbz#922149)
+
+* Thu Mar 14 2013 Toshio Kuratomi <toshio(a)fedoraproject.org> - 3.3.0-7
+- Fix up shared library extension (rhbz#889784)
+
+* Thu Mar 07 2013 Karsten Hopp <karsten(a)redhat.com> 3.3.0-6
+- add ppc64p7 build target, optimized for Power7
+
+* Mon Mar 4 2013 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-5
+- add workaround for ENOPROTOOPT seen running selftests in Koji
+(rhbz#913732)
+
+* Mon Mar 4 2013 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-4
+- remove config flag from /etc/rpm/macros.{python3|pybytecompile}
+
+* Mon Feb 11 2013 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-3
+- add aarch64 (rhbz#909783)
+
+* Thu Nov 29 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-2
+- add BR on bluez-libs-devel (rhbz#879720)
+
+* Sat Sep 29 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-1
+- 3.3.0rc3 -> 3.3.0; drop alphatag
+
+* Mon Sep 24 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-0.6.rc3
+- 3.3.0rc2 -> 3.3.0rc3
+
+* Mon Sep 10 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-0.5.rc2
+- 3.3.0rc1 -> 3.3.0rc2; refresh patch 55
+
+* Mon Aug 27 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-0.4.rc1
+- 3.3.0b2 -> 3.3.0rc1; refresh patches 3, 55
+
+* Mon Aug 13 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-0.3.b2
+- 3.3b1 -> 3.3b2; drop upstreamed patch 152; refresh patches 3, 102, 111,
+134, 153, 160; regenenerate autotools patch; rework systemtap patch to work
+correctly when LANG=C (patch 55); importlib.test was moved to
+test.test_importlib upstream
+
+* Mon Aug 13 2012 Karsten Hopp <karsten(a)redhat.com> 3.3.0-0.2.b1
+- disable some failing checks on PPC* (rhbz#846849)
+
+* Fri Aug 3 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-0.1.b1
+- 3.2 -> 3.3:
https://fedoraproject.org/wiki/Features/Python_3.3
+- 3.3.0b1: refresh patches 3, 55, 102, 111, 113, 114, 134, 157; drop upstream
+patch 147; regenenerate autotools patch; drop "--with-wide-unicode" from
+configure (PEP 393); "plat-linux2" -> "plat-linux" (upstream
issue 12326);
+"bz2" -> "_bz2" and "crypt" -> "_crypt";
egg-info files are no longer shipped
+for stdlib (upstream issues 10645 and 12218); email/test moved to
+test/test_email; add /usr/bin/pyvenv[-3.3] and venv module (PEP 405); add
+_decimal and _lzma modules; make collections modules explicit in payload again
+(upstream issue 11085); add _testbuffer module to tests subpackage (added in
+upstream commit 3f9b3b6f7ff0); fix test failures (patches 160 and 161);
+workaround erroneously shared _sysconfigdata.py upstream issue #14774; fix
+distutils.sysconfig traceback (patch 162); add BuildRequires: xz-devel (for
+_lzma module); skip some tests within test_socket (patch 163)
+
+* Sat Jul 21 2012 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> -
3.2.3-11
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
+
+* Fri Jul 20 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.3.0-0.1.b1
+
+* Fri Jun 22 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-10
+- use macro for power64 (rhbz#834653)
+
+* Mon Jun 18 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-9
+- fix missing include in uid/gid handling patch (patch 157; rhbz#830405)
+
+* Wed May 30 2012 Bohuslav Kabrda <bkabrda(a)redhat.com> - 3.2.3-8
+- fix tapset for debug build
+
+* Tue May 15 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-7
+- update uid/gid handling to avoid int overflows seen with uid/gid
+values >= 2^31 on 32-bit architectures (patch 157; rhbz#697470)
+
+* Fri May 4 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-6
+- renumber autotools patch from 300 to 5000
+- specfile cleanups
+
+* Mon Apr 30 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-5
+- fix test_gdb.py (patch 156; rhbz#817072)
+
+* Fri Apr 20 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-4
+- avoid allocating thunks in ctypes unless absolutely necessary, to avoid
+generating SELinux denials on "import ctypes" and "import uuid" when
embedding
+Python within httpd (patch 155; rhbz#814391)
+
+* Fri Apr 20 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-3
+- add explicit version requirements on expat to avoid linkage problems with
+XML_SetHashSalt
+
+* Thu Apr 12 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-2
+- fix test_gdb (patch 153)
+
+* Wed Apr 11 2012 David Malcolm <dmalcolm(a)redhat.com> - 3.2.3-1
+- 3.2.3; refresh patch 102 (lib64); drop upstream patches 148 (gdbm magic
+values), 149 (__pycache__ fix); add patch 152 (test_gdb regex)
+
+* Thu Feb 9 2012 Thomas Spura <tomspur(a)fedoraproject.org> - 3.2.2-13
+- use newly installed python for byte compiling (now for real)
+
+* Sun Feb 5 2012 Thomas Spura <tomspur(a)fedoraproject.org> - 3.2.2-12
+- use newly installed python for byte compiling (#787498)
+
+* Wed Jan 4 2012 Ville Skytt <ville.skytta(a)iki.fi> - 3.2.2-11
+- Build with $RPM_LD_FLAGS (#756863).
+- Use xz-compressed source tarball.
+
+* Wed Dec 07 2011 Karsten Hopp <karsten(a)redhat.com> 3.2.2-10
+- disable rAssertAlmostEqual in test_cmath on PPC (#750811)
+
+* Mon Oct 17 2011 Rex Dieter <rdieter(a)fedoraproject.org> - 3.2.2-9
+- python3-devel missing autogenerated pkgconfig() provides (#746751)
+
+* Mon Oct 10 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-8
+- cherrypick fix for distutils not using __pycache__ when byte-compiling
+files (rhbz#722578)
+
+* Fri Sep 30 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-7
+- re-enable gdbm (patch 148; rhbz#742242)
+
+* Fri Sep 16 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-6
+- add a sys._debugmallocstats() function (patch 147)
+
+* Wed Sep 14 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-5
+- support OpenSSL FIPS mode in _hashlib and hashlib; don't build the _md5 and
+_sha* modules, relying on _hashlib in hashlib (rhbz#563986; patch 146)
+
+* Tue Sep 13 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-4
+- disable gdbm module to prepare for gdbm soname bump
+
+* Mon Sep 12 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-3
+- renumber and rename patches for consistency with python.spec (8 to 55, 106
+to 104, 6 to 111, 104 to 113, 105 to 114, 125, 131, 130 to 143)
+
+* Sat Sep 10 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-2
+- rewrite of "check", introducing downstream-only hooks for skipping specific
+cases in an rpmbuild (patch 132), and fixing/skipping failing tests in a more
+fine-grained manner than before; (patches 106, 133-142 sparsely, moving
+patches for consistency with python.spec: 128 to 134, 126 to 135, 127 to 141)
+
+* Tue Sep 6 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.2-1
+- 3.2.2
+
+* Thu Sep 1 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.1-7
+- run selftests with "--verbose"
+- disable parts of test_io on ppc (rhbz#732998)
+
+* Wed Aug 31 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.1-6
+- use "--findleaks --verbose3" when running test suite
+
+* Tue Aug 23 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.1-5
+- re-enable and fix the --with-tsc option on ppc64, and rework it on 32-bit
+ppc to avoid aliasing violations (patch 130; rhbz#698726)
+
+* Tue Aug 23 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.1-4
+- don't use --with-tsc on ppc64 debug builds (rhbz#698726)
+
+* Thu Aug 18 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.1-3
+- add %%python3_version to the rpm macros (rhbz#719082)
+
+* Mon Jul 11 2011 Dennis Gilmore <dennis(a)ausil.us> - 3.2.1-2
+- disable some tests on sparc arches
+
+* Mon Jul 11 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2.1-1
+- 3.2.1; refresh lib64 patch (102), subprocess unit test patch (129), disabling
+of static library build (due to Modules/_testembed; patch 6), autotool
+intermediates (patch 300)
+
+* Fri Jul 8 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-5
+- use the gdb hooks from the upstream tarball, rather than keeping our own copy
+
+* Fri Jul 8 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-4
+- don't run test_openpty and test_pty in %%check
+
+* Fri Jul 8 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-3
+- cleanup of BuildRequires; add comment headings to specfile sections
+
+* Tue Apr 19 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-2
+- fix the libpython.stp systemtap tapset (rhbz#697730)
+
+* Mon Feb 21 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-1
+- 3.2
+- drop alphatag
+- regenerate autotool patch
+
+* Mon Feb 14 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.13.rc3
+- add a /usr/bin/python3-debug symlink within the debug subpackage
+
+* Mon Feb 14 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.12.rc3
+- 3.2rc3
+- regenerate autotool patch
+
+* Wed Feb 09 2011 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> -
3.2-0.11.rc2
+- Rebuilt for
https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
+
+* Mon Jan 31 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.10.rc2
+- 3.2rc2
+
+* Mon Jan 17 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.9.rc1
+- 3.2rc1
+- rework patch 6 (static lib removal)
+- remove upstreamed patch 130 (ppc debug build)
+- regenerate patch 300 (autotool intermediates)
+- updated packaging to reflect upstream rewrite of "Demo" (issue 7962)
+- added libpython3.so and 2to3-3.2
+
+* Wed Jan 5 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.8.b2
+- set EXTRA_CFLAGS to our CFLAGS, rather than overriding OPT, fixing a linker
+error with dynamic annotations (when configured using --with-valgrind)
+- fix the ppc build of the debug configuration (patch 130; rhbz#661510)
+
+* Tue Jan 4 2011 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.7.b2
+- add --with-valgrind to configuration (on architectures that support this)
+
+* Wed Dec 29 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.6.b2
+- work around test_subprocess failure seen in koji (patch 129)
+
+* Tue Dec 28 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.5.b2
+- 3.2b2
+- rework patch 3 (removal of mimeaudio tests), patch 6 (no static libs),
+patch 8 (systemtap), patch 102 (lib64)
+- remove patch 4 (rendered redundant by upstream r85537), patch 103 (PEP 3149),
+patch 110 (upstreamed expat fix), patch 111 (parallel build fix for grammar
+fixed upstream)
+- regenerate patch 300 (autotool intermediates)
+- workaround COUNT_ALLOCS weakref issues in test suite (patch 126, patch 127,
+patch 128)
+- stop using runtest.sh in %%check (dropped by upstream), replacing with
+regrtest; fixup list of failing tests
+- introduce "pyshortver", "SOABI_optimized" and
"SOABI_debug" macros
+- rework manifests of shared libraries to use "SOABI_" macros, reflecting
+PEP 3149
+- drop itertools, operator and _collections modules from the manifests as py3k
+commit r84058 moved these inside libpython; json/tests moved to test/json_tests
+- move turtle code into the tkinter subpackage
+
+* Wed Nov 17 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.5.a1
+- fix sysconfig to not rely on the -devel subpackage (rhbz#653058)
+
+* Thu Sep 9 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.4.a1
+- move most of the content of the core package to the libs subpackage, given
+that the libs aren't meaningfully usable without the standard libraries
+
+* Wed Sep 8 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.3.a1
+- Move test.support to core package (rhbz#596258)
+- Add various missing __pycache__ directories to payload
+
+* Sun Aug 22 2010 Toshio Kuratomi <toshio(a)fedoraproject.org> - 3.2-0.2.a1
+- Add __pycache__ directory for site-packages
+
+* Sun Aug 22 2010 Thomas Spura <tomspur(a)fedoraproject.org> - 3.2-0.1.a1
+- on 64bit "stdlib" was still "/usr/lib/python*" (modify
*lib64.patch)
+- make find-provides-without-python-sonames.sh 64bit aware
+
+* Sat Aug 21 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.2-0.0.a1
+- 3.2a1; add alphatag
+- rework %%files in the light of PEP 3147 (__pycache__)
+- drop our configuration patch to Setup.dist (patch 0): setup.py should do a
+better job of things, and the %%files explicitly lists our modules (r82746
+appears to break the old way of doing things). This leads to various modules
+changing from "foomodule.so" to "foo.so". It also leads to the
optimized build
+dropping the _sha1, _sha256 and _sha512 modules, but these are provided by
+_hashlib; _weakref becomes a builtin module; xxsubtype goes away (it's only for
+testing/devel purposes)
+- fixup patches 3, 4, 6, 8, 102, 103, 105, 111 for the rebase
+- remove upstream patches: 7 (system expat), 106, 107, 108 (audioop reformat
+plus CVE-2010-1634 and CVE-2010-2089), 109 (CVE-2008-5983)
+- add machinery for rebuilding "configure" and friends, using the correct
+version of autoconf (patch 300)
+- patch the debug build's usage of COUNT_ALLOCS to be less verbose (patch 125)
+- "modulator" was removed upstream
+- drop "-b" from patch applications affecting .py files to avoid littering
the
+installation tree
+
+* Thu Aug 19 2010 Toshio Kuratomi <toshio(a)fedoraproject.org> - 3.1.2-13
+- Turn on computed-gotos.
+- Fix for parallel make and graminit.c
+
+* Fri Jul 2 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-12
+- rebuild
+
+* Fri Jul 2 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-11
+- Fix an incompatibility between pyexpat and the system expat-2.0.1 that led to
+a segfault running test_pyexpat.py (patch 110; upstream issue 9054; rhbz#610312)
+
+* Fri Jun 4 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-10
+- ensure that the compiler is invoked with "-fwrapv" (rhbz#594819)
+- reformat whitespace in audioop.c (patch 106)
+- CVE-2010-1634: fix various integer overflow checks in the audioop
+module (patch 107)
+- CVE-2010-2089: further checks within the audioop module (patch 108)
+- CVE-2008-5983: the new PySys_SetArgvEx entry point from r81399 (patch 109)
+
+* Thu May 27 2010 Dan Hork <dan[at]danny.cz> - 3.1.2-9
+- reading the timestamp counter is available only on some arches (see Python/ceval.c)
+
+* Wed May 26 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-8
+- add flags for statvfs.f_flag to the constant list in posixmodule (i.e.
"os")
+(patch 105)
+
+* Tue May 25 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-7
+- add configure-time support for COUNT_ALLOCS and CALL_PROFILE debug options
+(patch 104); enable them and the WITH_TSC option within the debug build
+
+* Mon May 24 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-6
+- build and install two different configurations of Python 3: debug and
+standard, packaging the debug build in a new "python3-debug" subpackage
+(patch 103)
+
+* Tue Apr 13 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-5
+- exclude test_http_cookies when running selftests, due to hang seen on
+http://koji.fedoraproject.org/koji/taskinfo?taskID=2088463 (cancelled after
+11 hours)
+- update python-gdb.py from v5 to py3k version submitted upstream
+
+* Wed Mar 31 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-4
+- update python-gdb.py from v4 to v5 (improving performance and stability,
+adding commands)
+
+* Thu Mar 25 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-3
+- update python-gdb.py from v3 to v4 (fixing infinite recursion on reference
+cycles and tracebacks on bytes 0x80-0xff in strings, adding handlers for sets
+and exceptions)
+
+* Wed Mar 24 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-2
+- refresh gdb hooks to v3 (reworking how they are packaged)
+
+* Sun Mar 21 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.2-1
+- update to 3.1.2:
http://www.python.org/download/releases/3.1.2/
+- drop upstreamed patch 2 (.pyc permissions handling)
+- drop upstream patch 5 (fix for the test_tk and test_ttk_* selftests)
+- drop upstreamed patch 200 (path-fixing script)
+
+* Sat Mar 20 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-28
+- fix typo in libpython.stp (rhbz:575336)
+
+* Fri Mar 12 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-27
+- add pyfuntop.stp example (source 7)
+- convert usage of $$RPM_BUILD_ROOT to %%{buildroot} throughout, for
+consistency with python.spec
+
+* Mon Feb 15 2010 Thomas Spura <tomspur(a)fedoraproject.org> - 3.1.1-26
+- rebuild for new package of redhat-rpm-config (rhbz:564527)
+- use 'install -p' when running 'make install'
+
+* Fri Feb 12 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-25
+- split configure options into multiple lines for easy of editing
+- add systemtap static markers (wcohen, mjw, dmalcolm; patch 8), a systemtap
+tapset defining "python.function.entry" and "python.function.return"
to make
+the markers easy to use (dmalcolm; source 5), and an example of using the
+tapset to the docs (dmalcolm; source 6) (rhbz:545179)
+
+* Mon Feb 8 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-24
+- move the -gdb.py file from %%{_libdir}/INSTSONAME-gdb.py to
+%%{_prefix}/lib/debug/%%{_libdir}/INSTSONAME.debug-gdb.py to avoid noise from
+ldconfig (bug 562980), and which should also ensure it becomes part of the
+debuginfo subpackage, rather than the libs subpackage
+- introduce %%{py_SOVERSION} and %%{py_INSTSONAME} to reflect the upstream
+configure script, and to avoid fragile scripts that try to figure this out
+dynamically (e.g. for the -gdb.py change)
+
+* Mon Feb 8 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-23
+- add gdb hooks for easier debugging (Source 4)
+
+* Thu Jan 28 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-22
+- update python-3.1.1-config.patch to remove downstream customization of build
+of pyexpat and elementtree modules
+- add patch adapted from upstream (patch 7) to add support for building against
+system expat; add --with-system-expat to "configure" invocation
+- remove embedded copies of expat and zlib from source tree during "prep"
+
+* Mon Jan 25 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-21
+- introduce %%{dynload_dir} macro
+- explicitly list all lib-dynload files, rather than dynamically gathering the
+payload into a temporary text file, so that we can be sure what we are
+shipping
+- introduce a macros.pybytecompile source file, to help with packaging python3
+modules (Source3; written by Toshio)
+- rename "2to3-3" to "python3-2to3" to better reflect python 3
module packaging
+plans
+
+* Mon Jan 25 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-20
+- change python-3.1.1-config.patch to remove our downstream change to curses
+configuration in Modules/Setup.dist, so that the curses modules are built using
+setup.py with the downstream default (linking against libncursesw.so, rather
+than libncurses.so), rather than within the Makefile; add a test to %%install
+to verify the dso files that the curses module is linked against the correct
+DSO (bug 539917; changes _cursesmodule.so -> _curses.so)
+
+* Fri Jan 22 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-19
+- add %%py3dir macro to macros.python3 (to be used during unified python 2/3
+builds for setting up the python3 copy of the source tree)
+
+* Wed Jan 20 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-18
+- move lib2to3 from -tools subpackage to main package (bug 556667)
+
+* Sun Jan 17 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-17
+- patch Makefile.pre.in to avoid building static library (patch 6, bug 556092)
+
+* Fri Jan 15 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-16
+- use the %%{_isa} macro to ensure that the python-devel dependency on python
+is for the correct multilib arch (#555943)
+- delete bundled copy of libffi to make sure we use the system one
+
+* Fri Jan 15 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-15
+- fix the URLs output by pydoc so they point at python.org's 3.1 build of the
+docs, rather than the 2.6 build
+
+* Wed Jan 13 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-14
+- replace references to /usr with %%{_prefix}; replace references to
+/usr/include with %%{_includedir} (Toshio)
+
+* Mon Jan 11 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-13
+- fix permission on find-provides-without-python-sonames.sh from 775 to 755
+
+* Mon Jan 11 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-12
+- remove build-time requirements on tix and tk, since we already have
+build-time requirements on the -devel subpackages for each of these (Thomas
+Spura)
+- replace usage of %%define with %%global (Thomas Spura)
+- remove forcing of CC=gcc as this old workaround for bug 109268 appears to
+longer be necessary
+- move various test files from the "tools"/"tkinter" subpackages to
the "test"
+subpackage
+
+* Thu Jan 7 2010 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-11
+- add %%check section (thanks to Thomas Spura)
+- update patch 4 to use correct shebang line
+- get rid of stray patch file from buildroot
+
+* Tue Nov 17 2009 Andrew McNabb <amcnabb(a)mcnabbs.org> - 3.1.1-10
+- switched a few instances of "find |xargs" to "find -exec" for
consistency.
+- made the description of __os_install_post more accurate.
+
+* Wed Nov 4 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-9
+- add macros.python3 to the -devel subpackage, containing common macros for use
+when packaging python3 modules
+
+* Tue Nov 3 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-8
+- add a provides of "python(abi)" (see bug 532118)
+- fix issues identified by a.badger in package review (bug 526126, comment 39):
+ - use "3" thoughout metadata, rather than "3.*"
+ - remove conditional around "pkg-config openssl"
+ - use standard cleanup of RPM_BUILD_ROOT
+ - replace hardcoded references to /usr with _prefix macro
+ - stop removing egg-info files
+ - use /usr/bin/python3.1 rather than /use/bin/env python3.1 when fixing
+up shebang lines
+ - stop attempting to remove no-longer-present .cvsignore files
+ - move the post/postun sections above the "files" sections
+
+* Thu Oct 29 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-7
+- remove commented-away patch 51 (python-2.6-distutils_rpm.patch): the -O1
+flag is used by default in the upstream code
+- "Makefile" and the config-32/64.h file are needed by distutils/sysconfig.py
+_init_posix(), so we include them in the core package, along with their parent
+directories (bug 531901)
+
+* Tue Oct 27 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-6
+- reword description, based on suggestion by amcnabb
+- fix the test_email and test_imp selftests (patch 3 and patch 4 respectively)
+- fix the test_tk and test_ttk_* selftests (patch 5)
+- fix up the specfile's handling of shebang/perms to avoid corrupting
+test_httpservers.py (sed command suggested by amcnabb)
+
+* Thu Oct 22 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-5
+- fixup importlib/_bootstrap.py so that it correctly handles being unable to
+open .pyc files for writing (patch 2, upstream issue 7187)
+- actually apply the rpath patch (patch 1)
+
+* Thu Oct 22 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-4
+- update patch0's setup of the crypt module to link it against libcrypt
+- update patch0 to comment "datetimemodule" back out, so that it is built
+using setup.py (see Setup, option 3), thus linking it statically against
+timemodule.c and thus avoiding a run-time "undefined symbol:
+_PyTime_DoubleToTimet" failure on "import datetime"
+
+* Wed Oct 21 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-3
+- remove executable flag from various files that shouldn't have it
+- fix end-of-line encodings
+- fix a character encoding
+
+* Tue Oct 20 2009 David Malcolm <dmalcolm(a)redhat.com> - 3.1.1-2
+- disable invocation of brp-python-bytecompile in postprocessing, since
+it would be with the wrong version of python (adapted from ivazquez'
+python3000 specfile)
+- use a custom implementation of __find_provides in order to filter out bogus
+provides lines for the various .so modules
+- fixup distutils/unixccompiler.py to remove standard library path from rpath
+(patch 1, was Patch0 in ivazquez' python3000 specfile)
+- split out libraries into a -libs subpackage
+- update summaries and descriptions, basing content on ivazquez' specfile
+- fixup executable permissions on .py, .xpm and .xbm files, based on work in
+ivazquez's specfile
+- get rid of DOS batch files
+- fixup permissions for shared libraries from non-standard 555 to standard 755
+- move /usr/bin/python*-config to the -devel subpackage
+- mark various directories as being documentation
+
+* Thu Sep 24 2009 Andrew McNabb <amcnabb(a)mcnabbs.org> 3.1.1-1
+- Initial package for Python 3.
+
commit 2d5b84388b07f909b709643e0e6a9f4dc0b93f39
Author: Tomas Orsava <torsava(a)redhat.com>
Date: Thu May 24 18:11:18 2018 +0200
Update the bootstrapping sequence
diff --git a/python3.spec b/python3.spec
index a81b111..e7f52f5 100644
--- a/python3.spec
+++ b/python3.spec
@@ -92,15 +92,12 @@ License: Python
# 1. At the same time:
# - gdb without python support (add %%global _without_python 1 on top of
# gdb's SPEC file)
-# - python-rpm-generators with bootstrapping_python set to 1
+# - python-rpm-generators
# (this can be done also during step 2., but should be done before 3.)
# 2. python3 without rewheel (use %%bcond_with rewheel instead of
# %%bcond_without)
-# 3. At the same time:
-# - gdb with python support (remove %%global _without_python 1 on top of
-# gdb's SPEC file)
-# - python-rpm-generators with bootstrapping_python set to 0
-# (this can be done at any later step without negative effects)
+# 3. gdb with python support (remove %%global _without_python 1 on top of
+# gdb's SPEC file)
# 4. rpm
# 5. python-setuptools with bootstrap set to 1
# 6. python-pip with build_wheel set to 0
commit e324bf2dbba4dd776d787a8f124676a5e44c94d4
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Mon Apr 23 18:17:32 2018 +0200
Fix multiprocessing regression on newer glibcs
Enable test_multiprocessing_fork(server) and _spawn again
Resolves: rhbz#1569933
diff --git a/00302-fix-multiprocessing-regression-on-newer-glibcs.patch
b/00302-fix-multiprocessing-regression-on-newer-glibcs.patch
new file mode 100644
index 0000000..965792a
--- /dev/null
+++ b/00302-fix-multiprocessing-regression-on-newer-glibcs.patch
@@ -0,0 +1,55 @@
+From a3febe3cba14b89885f42ca2f0224096a52885f6 Mon Sep 17 00:00:00 2001
+From: Antoine Pitrou <antoine(a)python.org>
+Date: Mon, 23 Apr 2018 13:19:42 +0200
+Subject: [PATCH] bpo-33329: Fix multiprocessing regression on newer glibcs
+
+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.
+---
+ .../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/Misc/NEWS.d/next/Library/2018-04-23-13-21-39.bpo-33329.lQ-Eod.rst
b/Misc/NEWS.d/next/Library/2018-04-23-13-21-39.bpo-33329.lQ-Eod.rst
+new file mode 100644
+index 000000000000..d1a4e56d04b9
+--- /dev/null
++++ b/Misc/NEWS.d/next/Library/2018-04-23-13-21-39.bpo-33329.lQ-Eod.rst
+@@ -0,0 +1 @@
++Fix multiprocessing regression on newer glibcs
+diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
+index 791616014384..35fd87e2d1e7 100644
+--- a/Modules/signalmodule.c
++++ b/Modules/signalmodule.c
+@@ -819,7 +819,6 @@ iterable_to_sigset(PyObject *iterable, sigset_t *mask)
+ int result = -1;
+ PyObject *iterator, *item;
+ long signum;
+- int err;
+
+ sigemptyset(mask);
+
+@@ -841,11 +840,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;
diff --git a/python3.spec b/python3.spec
index a69624d..a81b111 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.5
-Release: 3%{?dist}
+Release: 4%{?dist}
License: Python
@@ -374,6 +374,12 @@ Patch294: 00294-define-TLS-cipher-suite-on-build-time.patch
# Fixed upstream:
https://bugs.python.org/issue32885
Patch301: 00301-pathfix-add-n-option-for-no-backup.patch
+# 00302 #
+# Fix multiprocessing regression on newer glibcs
+# See:
https://bugzilla.redhat.com/show_bug.cgi?id=1569933
+# and:
https://bugs.python.org/issue33329
+Patch302: 00302-fix-multiprocessing-regression-on-newer-glibcs.patch
+
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
@@ -691,6 +697,7 @@ sed -r -i s/'_PIP_VERSION =
"[0-9.]+"'/'_PIP_VERSION = "%{pip_version}"'/ Lib/en
%patch292 -p1
%patch294 -p1
%patch301 -p1
+%patch302 -p1
# Remove files that should be generated by the build
@@ -1093,9 +1100,6 @@ CheckPython() {
%ifarch ppc64le
-x test_buffer \
%endif
- -x test_multiprocessing_fork \
- -x test_multiprocessing_forkserver \
- -x test_multiprocessing_spawn \
echo FINISHED: CHECKING OF PYTHON FOR CONFIGURATION: $ConfName
@@ -1582,6 +1586,11 @@ CheckPython optimized
# ======================================================
%changelog
+* Mon Apr 23 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.5-4
+- Fix multiprocessing regression on newer glibcs
+- Enable test_multiprocessing_fork(server) and _spawn again
+Resolves: rhbz#1569933
+
* Thu Apr 19 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.5-3
- Skip test_multiprocessing_fork(server) and _spawn for now
commit 45a046d2f4d6624b57b8b7d7acaa468a4ff57ebb
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Thu Apr 19 22:17:51 2018 +0200
Skip test_multiprocessing_fork(server) and _spawn for now
It hangs the build
diff --git a/python3.spec b/python3.spec
index 4b4f79d..a69624d 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.5
-Release: 2%{?dist}
+Release: 3%{?dist}
License: Python
@@ -1093,6 +1093,9 @@ CheckPython() {
%ifarch ppc64le
-x test_buffer \
%endif
+ -x test_multiprocessing_fork \
+ -x test_multiprocessing_forkserver \
+ -x test_multiprocessing_spawn \
echo FINISHED: CHECKING OF PYTHON FOR CONFIGURATION: $ConfName
@@ -1579,6 +1582,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Thu Apr 19 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.5-3
+- Skip test_multiprocessing_fork(server) and _spawn for now
+
* Wed Apr 18 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.5-2
- Add flatpackage conditionals
commit 8c67bafd7ce7a04d4b41aa58b464857dfb14dd70
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Wed Apr 18 14:40:03 2018 +0200
Add flatpackage conditionals
This will allow us to create python36 easily once needed [1].
It shoudl also make it easier to merge stuff between python36 and 37.
This more or less backports:
https://src.fedoraproject.org/rpms/python37/c/63459d7d2a4a8df39f900d753cf...
https://src.fedoraproject.org/rpms/python37/c/7f3ae64d2f98f00b8778b9693ad...
https://src.fedoraproject.org/rpms/python37/c/6a6d4a03245c076ec8686b8f96a...
[1]
https://fedoraproject.org/wiki/Changes/Python3.7
diff --git a/python3.spec b/python3.spec
index 5bdde01..4b4f79d 100644
--- a/python3.spec
+++ b/python3.spec
@@ -2,19 +2,19 @@
# Top-level metadata
# ==================
-Name: python3
-Summary: Interpreter of the Python programming language
-URL:
https://www.python.org/
-
%global pybasever 3.6
# pybasever without the dot:
%global pyshortver 36
+Name: python3
+Summary: Interpreter of the Python programming language
+URL:
https://www.python.org/
+
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.5
-Release: 1%{?dist}
+Release: 2%{?dist}
License: Python
@@ -25,6 +25,14 @@ License: Python
# Note that the bcond macros are named for the CLI option they create.
# "%%bcond_without" means "ENABLE by default and create a --without
option"
+# Flat package, i.e. python36, python37, python38 for tox etc.
+# warning: changes some other defaults
+# in Fedora, never turn this on for the python3 package
+# and always keep it on for python36 etc.
+# WARNING: This does not change the package name and summary above
+%bcond_with flatpackage
+
+
# Expensive optimizations (mainly, profile-guided optimizations)
%ifarch %{ix86} x86_64
%bcond_without optimizations
@@ -38,11 +46,19 @@ License: Python
%bcond_without tests
# Ability to reuse RPM-installed pip using rewheel
+%if %{with flatpackage}
+%bcond_with rewheel
+%else
%bcond_without rewheel
+%endif
# Extra build for debugging the interpreter or C-API extensions
# (the -debug subpackages)
+%if %{with flatpackage}
+%bcond_with debug_build
+%else
%bcond_without debug_build
+%endif
# Support for the GDB debugger
%bcond_without gdb_hooks
@@ -372,6 +388,8 @@ Patch301: 00301-pathfix-add-n-option-for-no-backup.patch
# Descriptions, and metadata for subpackages
# ==========================================
+%if %{without flatpackage}
+
# Packages with Python modules in standard locations automatically
# depend on python(abi). Provide that here.
Provides: python(abi) = %{pybasever}
@@ -385,7 +403,7 @@ Obsoletes: system-python < %{version}-%{release}
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
# In order to support multiple Python interpreters for development purposes,
-# packages with with the naming scheme pythonXY (e.g. python35) exist for
+# packages with the naming scheme flatpackage (e.g. python35) exist for
# non-default versions of Python 3.
# For consistency, and to keep the upgrade path clean, we Provide/Obsolete
# these names here.
@@ -605,6 +623,30 @@ Compiled extension modules use a special ABI flag ("d") in
the filename,
so extensions for both versions can co-exist in the same directory.
%endif # with debug_build
+%else # with flatpackage
+
+Requires: redhat-rpm-config
+
+# We'll not provide this, on purpose
+# No package in Fedora shall ever depend on flatpackage via this
+%global __requires_exclude ^python\\(abi\\) = 3\\..$
+%global __provides_exclude ^python\\(abi\\) = 3\\..$
+
+# We keep those inside on purpose
+Provides: bundled(python3-pip) = 9.0.3
+Provides: bundled(python3-setuptools) = 39.0.1
+
+# The description for the flat package
+%description
+Python %{pybasever} package for developers.
+
+This package exists to allow developers to test their code against an older
+version of Python. This is not a full Python stack and if you wish to run
+your applications with Python %{pybasever}, see other distributions
+that support it, such as CentOS or RHEL with Software Collections
+or older Fedora releases.
+
+%endif # with flatpackage
# ======================================================
# The prep phase of the build:
@@ -870,6 +912,7 @@ install -d -m 0755 %{buildroot}%{pylibdir}/site-packages/__pycache__
install -d -m 0755
%{buildroot}%{_prefix}/lib/python%{pybasever}/site-packages/__pycache__
%endif
+%if %{without flatpackage}
# add idle3 to menu
install -D -m 0644 Lib/idlelib/Icons/idle_16.png
%{buildroot}%{_datadir}/icons/hicolor/16x16/apps/idle3.png
install -D -m 0644 Lib/idlelib/Icons/idle_32.png
%{buildroot}%{_datadir}/icons/hicolor/32x32/apps/idle3.png
@@ -880,6 +923,7 @@ desktop-file-install --dir=%{buildroot}%{_datadir}/applications
%{SOURCE10}
mkdir -p %{buildroot}%{_datadir}/appdata
cp -a %{SOURCE11} %{buildroot}%{_datadir}/appdata
appstream-util validate-relax --nonet %{buildroot}%{_datadir}/appdata/idle3.appdata.xml
+%endif
# Make sure distutils looks at the right pyconfig.h file
# See
https://bugzilla.redhat.com/show_bug.cgi?id=201434
@@ -942,15 +986,17 @@ rm -rf %{buildroot}%{_bindir}/__pycache__
# Fixup permissions for shared libraries from non-standard 555 to standard 755:
find %{buildroot} -perm 555 -exec chmod 755 {} \;
+%if %{without flatpackage}
# Install macros for rpm:
mkdir -p %{buildroot}/%{_rpmconfigdir}/macros.d/
install -m 644 %{SOURCE3} %{buildroot}/%{_rpmconfigdir}/macros.d/
install -m 644 %{SOURCE9} %{buildroot}/%{_rpmconfigdir}/macros.d/
+%endif
# Create "/usr/bin/python3-debug", a symlink to the python3 debug binary, to
# avoid the user having to know the precise version and ABI flags.
# See e.g.
https://bugzilla.redhat.com/show_bug.cgi?id=676748
-%if %{with debug_build}
+%if %{with debug_build} && %{without flatpackage}
ln -s \
%{_bindir}/python%{LDVERSION_debug} \
%{buildroot}%{_bindir}/python3-debug
@@ -958,9 +1004,24 @@ ln -s \
# System Python: Link the executable to libexec
# This is for backwards compatibility only and should be removed in Fedora 29
+%if %{without flatpackage}
mkdir -p %{buildroot}%{_libexecdir}
ln -s %{_bindir}/python%{pybasever} %{buildroot}%{_libexecdir}/system-python
+%endif
+%if %{with flatpackage}
+# Remove stuff that would conflict with python3 package
+rm %{buildroot}%{_bindir}/python3
+rm %{buildroot}%{_bindir}/pydoc3
+rm %{buildroot}%{_bindir}/pathfix.py
+rm %{buildroot}%{_bindir}/idle3
+rm %{buildroot}%{_bindir}/python3-*
+rm %{buildroot}%{_bindir}/pyvenv
+rm %{buildroot}%{_bindir}/2to3*
+rm %{buildroot}%{_libdir}/libpython3.so
+rm %{buildroot}%{_mandir}/man1/python3.1*
+rm %{buildroot}%{_libdir}/pkgconfig/python3.pc
+%endif
# ======================================================
# Checks for packaging issues
@@ -1052,26 +1113,37 @@ CheckPython optimized
%defattr(-, root, root)
%license LICENSE
%doc README.rst
+
+%if %{without flatpackage}
%{_bindir}/pydoc*
%{_bindir}/python3
-%{_bindir}/python%{pybasever}
-%{_bindir}/python%{pybasever}m
%{_bindir}/pyvenv
-%{_bindir}/pyvenv-%{pybasever}
%{_mandir}/*/*
+%{_bindir}/pyvenv
# Remove in Fedora 29:
%{_libexecdir}/system-python
+%else
+%{_bindir}/pydoc%{pybasever}
+%{_mandir}/*/python%{pybasever}*
+%endif
+%{_bindir}/pyvenv-%{pybasever}
+%{_bindir}/python%{pybasever}
+%{_bindir}/python%{pybasever}m
+%if %{without flatpackage}
%files libs
%defattr(-,root,root,-)
%license LICENSE
%doc README.rst
+%endif
%dir %{pylibdir}
%dir %{dynload_dir}
%{pylibdir}/lib2to3
+%if %{without flatpackage}
%exclude %{pylibdir}/lib2to3/tests
+%endif
%dir %{pylibdir}/unittest/
%dir %{pylibdir}/unittest/__pycache__/
@@ -1096,7 +1168,13 @@ CheckPython optimized
%dir %{pylibdir}/ensurepip/__pycache__/
%{pylibdir}/ensurepip/*.py
%{pylibdir}/ensurepip/__pycache__/*%{bytecode_suffixes}
+
+%if %{without flatpackage}
%exclude %{pylibdir}/ensurepip/_bundled
+%else
+%dir %{pylibdir}/ensurepip/_bundled
+%{pylibdir}/ensurepip/_bundled/*.whl
+%endif
%if %{with rewheel}
%dir %{pylibdir}/ensurepip/rewheel/
@@ -1255,8 +1333,10 @@ CheckPython optimized
%{pylibdir}/sqlite3/*.py
%{pylibdir}/sqlite3/__pycache__/*%{bytecode_suffixes}
+%if %{without flatpackage}
%exclude %{pylibdir}/turtle.py
%exclude %{pylibdir}/__pycache__/turtle*%{bytecode_suffixes}
+%endif
%{pylibdir}/urllib
%{pylibdir}/xml
@@ -1276,43 +1356,68 @@ CheckPython optimized
%{_includedir}/python%{LDVERSION_optimized}/%{_pyconfig_h}
%{_libdir}/%{py_INSTSONAME_optimized}
+%if %{without flatpackage}
%{_libdir}/libpython3.so
+%endif
+%if %{without flatpackage}
%files devel
%defattr(-,root,root)
%{_bindir}/2to3
# TODO: Remove 2to3-3.7 once rebased to 3.7
%{_bindir}/2to3-%{pybasever}
+%endif
+
%{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/*
+%if %{without flatpackage}
%exclude %{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/Makefile
+%exclude %{_includedir}/python%{LDVERSION_optimized}/%{_pyconfig_h}
+%endif
%{pylibdir}/distutils/command/wininst-*.exe
%{_includedir}/python%{LDVERSION_optimized}/*.h
-%exclude %{_includedir}/python%{LDVERSION_optimized}/%{_pyconfig_h}
%doc Misc/README.valgrind Misc/valgrind-python.supp Misc/gdbinit
+
+%if %{without flatpackage}
%{_bindir}/python3-config
+%{_libdir}/pkgconfig/python3.pc
+%{_rpmconfigdir}/macros.d/macros.pybytecompile%{pybasever}
+%{_rpmconfigdir}/macros.d/macros.systempython
+%{_bindir}/pathfix.py
+%endif
+
%{_bindir}/python%{pybasever}-config
%{_bindir}/python%{LDVERSION_optimized}-config
%{_bindir}/python%{LDVERSION_optimized}-*-config
-%{_bindir}/pathfix.py
%{_libdir}/libpython%{LDVERSION_optimized}.so
%{_libdir}/pkgconfig/python-%{LDVERSION_optimized}.pc
%{_libdir}/pkgconfig/python-%{pybasever}.pc
-%{_libdir}/pkgconfig/python3.pc
-%{_rpmconfigdir}/macros.d/macros.pybytecompile%{pybasever}
-%{_rpmconfigdir}/macros.d/macros.systempython
+%if %{without flatpackage}
%files idle
%defattr(-,root,root,755)
+
%{_bindir}/idle*
+%else
+%{_bindir}/idle%{pybasever}
+%endif
+
%{pylibdir}/idlelib
+
+%if %{without flatpackage}
%{_datadir}/appdata/idle3.appdata.xml
%{_datadir}/applications/idle3.desktop
%{_datadir}/icons/hicolor/*/apps/idle3.*
+%endif
+%if %{without flatpackage}
%files tkinter
%defattr(-,root,root,755)
+%endif
+
%{pylibdir}/tkinter
+%if %{without flatpackage}
%exclude %{pylibdir}/tkinter/test
+%endif
%{dynload_dir}/_tkinter.%{SOABI_optimized}.so
%{pylibdir}/turtle.py
%{pylibdir}/__pycache__/turtle*%{bytecode_suffixes}
@@ -1322,8 +1427,10 @@ CheckPython optimized
%dir %{pylibdir}/turtledemo/__pycache__/
%{pylibdir}/turtledemo/__pycache__/*%{bytecode_suffixes}
+%if %{without flatpackage}
%files test
%defattr(-, root, root)
+%endif
%{pylibdir}/ctypes/test
%{pylibdir}/distutils/tests
%{pylibdir}/sqlite3/test
@@ -1344,12 +1451,14 @@ CheckPython optimized
# all of the other subpackages
%if %{with debug_build}
+%if %{without flatpackage}
%files debug
%defattr(-,root,root,-)
+%{_bindir}/python3-debug
+%endif
# Analog of the core subpackage's files:
%{_bindir}/python%{LDVERSION_debug}
-%{_bindir}/python3-debug
# Analog of the -libs subpackage's files:
# ...with debug builds of the built-in "extension" modules:
@@ -1470,6 +1579,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Wed Apr 18 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.5-2
+- Add flatpackage conditionals
+
* Thu Mar 29 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.5-1
- Update to 3.6.5
commit 34ebe3da1391f2feca7b23173cec5fc5e5d01fdf
Merge: 9a2e4be fb9702f
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Wed Apr 18 13:36:00 2018 +0200
Merge master with f28
commit 9a2e4be589292030ebf559eec8bb547250915d95
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Thu Mar 29 16:03:33 2018 +0200
Update to 3.6.5
Rebased patches: 102, 111, 262
Removed patches due to being upstreamed:
264, 273, 289, 290, 291, 298
Update pip version to 9.0.3
diff --git a/00102-lib64.patch b/00102-lib64.patch
index 8eea66d..2b913ca 100644
--- a/00102-lib64.patch
+++ b/00102-lib64.patch
@@ -110,7 +110,7 @@ index f698927..bc977b5 100644
@@ -248,8 +248,8 @@ class HelperFunctionsTests(unittest.TestCase):
self.assertEqual(dirs[1], wanted)
elif os.sep == '/':
- # OS X non-framwework builds, Linux, FreeBSD, etc
+ # OS X non-framework builds, Linux, FreeBSD, etc
- self.assertEqual(len(dirs), 1)
- wanted = os.path.join('xoxo', 'lib',
+ self.assertEqual(len(dirs), 2)
diff --git a/00111-no-static-lib.patch b/00111-no-static-lib.patch
index 6929fda..bc4203d 100644
--- a/00111-no-static-lib.patch
+++ b/00111-no-static-lib.patch
@@ -1,9 +1,9 @@
diff --git a/Makefile.pre.in b/Makefile.pre.in
-index 70e5927..04c8e3d 100644
+index 4b093e3..1088435 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
-@@ -556,7 +556,7 @@ clinic: $(BUILDPYTHON) $(srcdir)/Modules/_blake2/blake2s_impl.c
- $(RUNSHARED) $(PYTHON_FOR_BUILD) ./Tools/clinic/clinic.py --make
+@@ -543,7 +543,7 @@ clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c
+ $(PYTHON_FOR_REGEN) ./Tools/clinic/clinic.py --make
# Build the interpreter
-$(BUILDPYTHON): Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY)
@@ -11,7 +11,7 @@ index 70e5927..04c8e3d 100644
$(LINKCC) $(PY_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS)
$(MODLIBS) $(SYSLIBS) $(LDLAST)
platform: $(BUILDPYTHON) pybuilddir.txt
-@@ -601,18 +601,6 @@ sharedmods: $(BUILDPYTHON) pybuilddir.txt Modules/_math.o
+@@ -588,18 +588,6 @@ sharedmods: $(BUILDPYTHON) pybuilddir.txt Modules/_math.o
$(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build
@@ -30,7 +30,7 @@ index 70e5927..04c8e3d 100644
libpython$(LDVERSION).so: $(LIBRARY_OBJS)
if test $(INSTSONAME) != $(LDLIBRARY); then \
$(BLDSHARED) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS)
$(LIBC) $(LIBM) $(LDLAST); \
-@@ -702,7 +690,7 @@ Modules/Setup: $(srcdir)/Modules/Setup.dist
+@@ -689,7 +677,7 @@ Modules/Setup: $(srcdir)/Modules/Setup.dist
echo "-----------------------------------------------"; \
fi
@@ -39,7 +39,7 @@ index 70e5927..04c8e3d 100644
$(LINKCC) $(PY_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/_testembed.o $(BLDLIBRARY)
$(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
############################################################################
-@@ -1382,18 +1370,6 @@ libainstall: all python-config
+@@ -1425,18 +1413,6 @@ libainstall: @DEF_MAKE_RULE@ python-config
else true; \
fi; \
done
diff --git a/00262-pep538_coerce_legacy_c_locale.patch
b/00262-pep538_coerce_legacy_c_locale.patch
index b144ba5..4a640fd 100644
--- a/00262-pep538_coerce_legacy_c_locale.patch
+++ b/00262-pep538_coerce_legacy_c_locale.patch
@@ -542,18 +542,6 @@ diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py
index ae2bcd4..0a302ff 100644
--- a/Lib/test/test_cmd_line.py
+++ b/Lib/test/test_cmd_line.py
-@@ -9,8 +9,9 @@ import sys
- import subprocess
- import tempfile
- from test.support import script_helper, is_android
--from test.support.script_helper import (spawn_python, kill_python, assert_python_ok,
-- assert_python_failure)
-+from test.support.script_helper import (
-+ spawn_python, kill_python, assert_python_ok, assert_python_failure
-+)
-
-
- # XXX (ncoghlan): Move to script_helper and make consistent with run_python
@@ -151,6 +152,7 @@ class CmdLineTest(unittest.TestCase):
env = os.environ.copy()
# Use C locale to get ascii for the locale encoding
diff --git a/00264-skip-test-failing-on-aarch64.patch
b/00264-skip-test-failing-on-aarch64.patch
deleted file mode 100644
index edda219..0000000
--- a/00264-skip-test-failing-on-aarch64.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/Lib/ctypes/test/test_structures.py b/Lib/ctypes/test/test_structures.py
-index 3eded77..ad7859a 100644
---- a/Lib/ctypes/test/test_structures.py
-+++ b/Lib/ctypes/test/test_structures.py
-@@ -392,6 +392,7 @@ class StructureTestCase(unittest.TestCase):
- (1, 0, 0, 0, 0, 0))
- self.assertRaises(TypeError, lambda: Z(1, 2, 3, 4, 5, 6, 7))
-
-+ @unittest.skip('Fails on aarch64:
http://bugs.python.org/issue29804')
- def test_pass_by_value(self):
- # This should mirror the structure in Modules/_ctypes/_ctypes_test.c
- class X(Structure):
diff --git a/00273-fix-localeconv-encoding-for-LC_NUMERIC.patch
b/00273-fix-localeconv-encoding-for-LC_NUMERIC.patch
deleted file mode 100644
index 4d0c87d..0000000
--- a/00273-fix-localeconv-encoding-for-LC_NUMERIC.patch
+++ /dev/null
@@ -1,240 +0,0 @@
-diff --git a/Doc/library/locale.rst b/Doc/library/locale.rst
-index b04442bc162..9a0c570533a 100644
---- a/Doc/library/locale.rst
-+++ b/Doc/library/locale.rst
-@@ -147,6 +147,16 @@ The :mod:`locale` module defines the following exception and
functions:
- | ``CHAR_MAX`` | Nothing is specified in this locale. |
- +--------------+-----------------------------------------+
-
-+ The function sets temporarily the ``LC_CTYPE`` locale to the ``LC_NUMERIC``
-+ locale to decode ``decimal_point`` and ``thousands_sep`` byte strings if
-+ they are non-ASCII or longer than 1 byte, and the ``LC_NUMERIC`` locale is
-+ different than the ``LC_CTYPE`` locale. This temporary change affects other
-+ threads.
-+
-+ .. versionchanged:: 3.6.5
-+ The function now sets temporarily the ``LC_CTYPE`` locale to the
-+ ``LC_NUMERIC`` locale in some cases.
-+
-
- .. function:: nl_langinfo(option)
-
-diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst
-index 196a4c00056..d8a1647e8b5 100644
---- a/Doc/library/stdtypes.rst
-+++ b/Doc/library/stdtypes.rst
-@@ -1599,6 +1599,20 @@ expression support in the :mod:`re` module).
- See :ref:`formatstrings` for a description of the various formatting options
- that can be specified in format strings.
-
-+ .. note::
-+ When formatting a number (:class:`int`, :class:`float`, :class:`float`
-+ and subclasses) with the ``n`` type (ex: ``'{:n}'.format(1234)``), the
-+ function sets temporarily the ``LC_CTYPE`` locale to the ``LC_NUMERIC``
-+ locale to decode ``decimal_point`` and ``thousands_sep`` fields of
-+ :c:func:`localeconv` if they are non-ASCII or longer than 1 byte, and the
-+ ``LC_NUMERIC`` locale is different than the ``LC_CTYPE`` locale. This
-+ temporary change affects other threads.
-+
-+ .. versionchanged:: 3.6.5
-+ When formatting a number with the ``n`` type, the function sets
-+ temporarily the ``LC_CTYPE`` locale to the ``LC_NUMERIC`` locale in some
-+ cases.
-+
-
- .. method:: str.format_map(mapping)
-
-diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst
-index 847b50140a6..f83508c9250 100644
---- a/Doc/whatsnew/3.6.rst
-+++ b/Doc/whatsnew/3.6.rst
-@@ -2346,3 +2346,11 @@ It has been replaced by the new ``make regen-all`` target.
- (Contributed by Victor Stinner in :issue:`23404`.)
-
- .. versionchanged:: 3.6.2
-+
-+
-+Notable changes in Python 3.6.5
-+===============================
-+
-+The :func:`locale.localeconv` function now sets temporarily the ``LC_CTYPE``
-+locale to the ``LC_NUMERIC`` locale in some cases.
-+(Contributed by Victor Stinner in :issue:`31900`.)
-diff --git a/Include/fileutils.h b/Include/fileutils.h
-index 900c70faad7..875715df97a 100644
---- a/Include/fileutils.h
-+++ b/Include/fileutils.h
-@@ -119,6 +119,11 @@ PyAPI_FUNC(int) _Py_get_blocking(int fd);
- PyAPI_FUNC(int) _Py_set_blocking(int fd, int blocking);
- #endif /* !MS_WINDOWS */
-
-+PyAPI_FUNC(int) _Py_GetLocaleconvNumeric(
-+ PyObject **decimal_point,
-+ PyObject **thousands_sep,
-+ const char **grouping);
-+
- #endif /* Py_LIMITED_API */
-
- #ifdef __cplusplus
-diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c
-index 71c9146ccb8..95b370b1ad0 100644
---- a/Modules/_localemodule.c
-+++ b/Modules/_localemodule.c
-@@ -171,12 +171,6 @@ PyLocale_localeconv(PyObject* self)
- RESULT(#i, x); \
- } while (0)
-
-- /* Numeric information */
-- RESULT_STRING(decimal_point);
-- RESULT_STRING(thousands_sep);
-- x = copy_grouping(l->grouping);
-- RESULT("grouping", x);
--
- /* Monetary information */
- RESULT_STRING(int_curr_symbol);
- RESULT_STRING(currency_symbol);
-@@ -195,6 +189,32 @@ PyLocale_localeconv(PyObject* self)
- RESULT_INT(n_sep_by_space);
- RESULT_INT(p_sign_posn);
- RESULT_INT(n_sign_posn);
-+
-+ /* Numeric information */
-+ PyObject *decimal_point, *thousands_sep;
-+ const char *grouping;
-+ if (_Py_GetLocaleconvNumeric(&decimal_point,
-+ &thousands_sep,
-+ &grouping) < 0) {
-+ goto failed;
-+ }
-+
-+ if (PyDict_SetItemString(result, "decimal_point", decimal_point) < 0)
{
-+ Py_DECREF(decimal_point);
-+ Py_DECREF(thousands_sep);
-+ goto failed;
-+ }
-+ Py_DECREF(decimal_point);
-+
-+ if (PyDict_SetItemString(result, "thousands_sep", thousands_sep) < 0)
{
-+ Py_DECREF(thousands_sep);
-+ goto failed;
-+ }
-+ Py_DECREF(thousands_sep);
-+
-+ x = copy_grouping(grouping);
-+ RESULT("grouping", x);
-+
- return result;
-
- failed:
-diff --git a/Python/fileutils.c b/Python/fileutils.c
-index 97505e5bc6d..14dd81b03f0 100644
---- a/Python/fileutils.c
-+++ b/Python/fileutils.c
-@@ -1597,3 +1597,80 @@ _Py_set_blocking(int fd, int blocking)
- return -1;
- }
- #endif
-+
-+
-+int
-+_Py_GetLocaleconvNumeric(PyObject **decimal_point, PyObject **thousands_sep,
-+ const char **grouping)
-+{
-+ int res = -1;
-+
-+ struct lconv *lc = localeconv();
-+
-+ int change_locale = 0;
-+ if (decimal_point != NULL &&
-+ (strlen(lc->decimal_point) > 1 || ((unsigned char)lc->decimal_point[0])
> 127))
-+ {
-+ change_locale = 1;
-+ }
-+ if (thousands_sep != NULL &&
-+ (strlen(lc->thousands_sep) > 1 || ((unsigned char)lc->thousands_sep[0])
> 127))
-+ {
-+ change_locale = 1;
-+ }
-+
-+ /* Keep a copy of the LC_CTYPE locale */
-+ char *oldloc = NULL, *loc = NULL;
-+ if (change_locale) {
-+ oldloc = setlocale(LC_CTYPE, NULL);
-+ if (!oldloc) {
-+ PyErr_SetString(PyExc_RuntimeWarning, "faild to get LC_CTYPE
locale");
-+ return -1;
-+ }
-+
-+ oldloc = _PyMem_Strdup(oldloc);
-+ if (!oldloc) {
-+ PyErr_NoMemory();
-+ return -1;
-+ }
-+
-+ loc = setlocale(LC_NUMERIC, NULL);
-+ if (loc != NULL && strcmp(loc, oldloc) == 0) {
-+ loc = NULL;
-+ }
-+
-+ if (loc != NULL) {
-+ /* Only set the locale temporarilty the LC_CTYPE locale
-+ if LC_NUMERIC locale is different than LC_CTYPE locale and
-+ decimal_point and/or thousands_sep are non-ASCII or longer than
-+ 1 byte */
-+ setlocale(LC_CTYPE, loc);
-+ }
-+ }
-+
-+ if (decimal_point != NULL) {
-+ *decimal_point = PyUnicode_DecodeLocale(lc->decimal_point, NULL);
-+ if (*decimal_point == NULL) {
-+ goto error;
-+ }
-+ }
-+ if (thousands_sep != NULL) {
-+ *thousands_sep = PyUnicode_DecodeLocale(lc->thousands_sep, NULL);
-+ if (*thousands_sep == NULL) {
-+ goto error;
-+ }
-+ }
-+
-+ if (grouping != NULL) {
-+ *grouping = lc->grouping;
-+ }
-+
-+ res = 0;
-+
-+error:
-+ if (loc != NULL) {
-+ setlocale(LC_CTYPE, oldloc);
-+ }
-+ PyMem_Free(oldloc);
-+ return res;
-+}
-diff --git a/Python/formatter_unicode.c b/Python/formatter_unicode.c
-index d2be76f1e1a..d3ef650e6ce 100644
---- a/Python/formatter_unicode.c
-+++ b/Python/formatter_unicode.c
-@@ -707,18 +707,11 @@ get_locale_info(enum LocaleType type, LocaleInfo *locale_info)
- {
- switch (type) {
- case LT_CURRENT_LOCALE: {
-- struct lconv *locale_data = localeconv();
-- locale_info->decimal_point = PyUnicode_DecodeLocale(
-- locale_data->decimal_point,
-- NULL);
-- if (locale_info->decimal_point == NULL)
-+ if (_Py_GetLocaleconvNumeric(&locale_info->decimal_point,
-+ &locale_info->thousands_sep,
-+ &locale_info->grouping) < 0) {
- return -1;
-- locale_info->thousands_sep = PyUnicode_DecodeLocale(
-- locale_data->thousands_sep,
-- NULL);
-- if (locale_info->thousands_sep == NULL)
-- return -1;
-- locale_info->grouping = locale_data->grouping;
-+ }
- break;
- }
- case LT_DEFAULT_LOCALE:
diff --git a/00277-fix-test-subprocess-hanging-tests.patch
b/00277-fix-test-subprocess-hanging-tests.patch
deleted file mode 100644
index c9b54e2..0000000
--- a/00277-fix-test-subprocess-hanging-tests.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 54849962eacc38f4e6c6f8a72ae258b3e7c2ecd5 Mon Sep 17 00:00:00 2001
-From: Victor Stinner <victor.stinner(a)gmail.com>
-Date: Thu, 5 Oct 2017 15:05:30 +0200
-Subject: [PATCH] bpo-31178: Mock os.waitpid() in test_subprocess
-
-Fix test_exception_errpipe_bad_data() and
-test_exception_errpipe_normal() of test_subprocess: mock os.waitpid()
-to avoid calling the real os.waitpid(0, 0) which is an unexpected
-side effect of the test.
----
- Lib/test/test_subprocess.py | 12 ++++++++----
- 1 file changed, 8 insertions(+), 4 deletions(-)
-
-diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
-index 00dc37bc2c7..3ba5c028517 100644
---- a/Lib/test/test_subprocess.py
-+++ b/Lib/test/test_subprocess.py
-@@ -1559,8 +1559,10 @@ def proper_error(*args):
-
- fork_exec.side_effect = proper_error
-
-- with self.assertRaises(IsADirectoryError):
-- self.PopenNoDestructor(["non_existent_command"])
-+ with mock.patch("subprocess.os.waitpid",
-+ side_effect=ChildProcessError):
-+ with self.assertRaises(IsADirectoryError):
-+ self.PopenNoDestructor(["non_existent_command"])
-
- @mock.patch("subprocess._posixsubprocess.fork_exec")
- def test_exception_errpipe_bad_data(self, fork_exec):
-@@ -1577,8 +1579,10 @@ def bad_error(*args):
-
- fork_exec.side_effect = bad_error
-
-- with self.assertRaises(subprocess.SubprocessError) as e:
-- self.PopenNoDestructor(["non_existent_command"])
-+ with mock.patch("subprocess.os.waitpid",
-+ side_effect=ChildProcessError):
-+ with self.assertRaises(subprocess.SubprocessError) as e:
-+ self.PopenNoDestructor(["non_existent_command"])
-
- self.assertIn(repr(error_data), str(e.exception))
-
diff --git a/00279-fix-memory-corruption-due-to-allocator-mix.patch
b/00279-fix-memory-corruption-due-to-allocator-mix.patch
deleted file mode 100644
index 4937391..0000000
--- a/00279-fix-memory-corruption-due-to-allocator-mix.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/Modules/getpath.c b/Modules/getpath.c
-index c4055be..1258fcd 100644
---- a/Modules/getpath.c
-+++ b/Modules/getpath.c
-@@ -735,7 +735,7 @@ calculate_path(void)
- bufsz += wcslen(zip_path) + 1;
- bufsz += wcslen(exec_prefix) + 1;
-
-- buf = PyMem_New(wchar_t, bufsz);
-+ buf = PyMem_RawMalloc(bufsz * sizeof(wchar_t));
- if (buf == NULL) {
- Py_FatalError(
- "Not enough memory for dynamic PYTHONPATH");
diff --git a/00289-fix-nis-compilation.patch b/00289-fix-nis-compilation.patch
deleted file mode 100644
index 4d4e3dc..0000000
--- a/00289-fix-nis-compilation.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-diff --git a/setup.py b/setup.py
-index 3eb6ad1..3437e48 100644
---- a/setup.py
-+++ b/setup.py
-@@ -1331,20 +1331,14 @@ class PyBuildExt(build_ext):
- exts.append( Extension('termios', ['termios.c']) )
- # Jeremy Hylton's rlimit interface
- exts.append( Extension('resource', ['resource.c']) )
-+ else:
-+ missing.extend(['resource', 'termios'])
-
-- # Sun yellow pages. Some systems have the functions in libc.
-- if (host_platform not in ['cygwin', 'qnx6'] and
-- find_file('rpcsvc/yp_prot.h', inc_dirs, []) is not None):
-- if (self.compiler.find_library_file(lib_dirs, 'nsl')):
-- libs = ['nsl']
-- else:
-- libs = []
-- exts.append( Extension('nis', ['nismodule.c'],
-- libraries = libs) )
-- else:
-- missing.append('nis')
-+ nis = self._detect_nis(inc_dirs, lib_dirs)
-+ if nis is not None:
-+ exts.append(nis)
- else:
-- missing.extend(['nis', 'resource', 'termios'])
-+ missing.append('nis')
-
- # Curses support, requiring the System V version of curses, often
- # provided by the ncurses library.
-@@ -2179,6 +2173,51 @@ class PyBuildExt(build_ext):
- )
- return ext
-
-+ def _detect_nis(self, inc_dirs, lib_dirs):
-+ if host_platform in {'win32', 'cygwin', 'qnx6'}:
-+ return None
-+
-+ libs = []
-+ library_dirs = []
-+ includes_dirs = []
-+
-+ # Latest glibc has moved Sun RPC headers into tircp and nsl sub
-+ # directories. rpc code has been moved to libtirpc.
-+ rpcsvc_inc = find_file(
-+ 'rpcsvc/yp_prot.h', inc_dirs,
-+ ['/usr/local/include/nsl', '/usr/include/nsl']
-+ )
-+ rpc_inc = find_file(
-+ 'rpc/rpc.h', inc_dirs,
-+ ['/usr/local/include/tirpc', '/usr/include/tirpc']
-+ )
-+ if rpcsvc_inc is None or rpc_inc is None:
-+ # not found
-+ return None
-+ includes_dirs.extend(rpcsvc_inc)
-+ includes_dirs.extend(rpc_inc)
-+
-+ if self.compiler.find_library_file(lib_dirs, 'nsl'):
-+ libs.append('nsl')
-+ else:
-+ # libnsl-devel: check for libnsl in nsl/ subdirectory
-+ nsl_dirs = [os.path.join(lib_dir, 'nsl') for lib_dir in lib_dirs]
-+ libnsl = self.compiler.find_library_file(nsl_dirs, 'nsl')
-+ if libnsl is not None:
-+ library_dirs.append(os.path.dirname(libnsl))
-+ libs.append('nsl')
-+
-+ if self.compiler.find_library_file(lib_dirs, 'tirpc'):
-+ libs.append('tirpc')
-+
-+ return Extension(
-+ 'nis', ['nismodule.c'],
-+ libraries=libs,
-+ library_dirs=library_dirs,
-+ include_dirs=includes_dirs
-+ )
-+
-+
- class PyBuildInstall(install):
- # Suppress the warning about installation into the lib_dynload
- # directory, which is not in sys.path when running Python during
diff --git a/00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
b/00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
deleted file mode 100644
index c5d768b..0000000
--- a/00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-diff --git a/Include/Python.h b/Include/Python.h
-index dd595ea5e4c..1feb1531cc9 100644
---- a/Include/Python.h
-+++ b/Include/Python.h
-@@ -35,6 +35,9 @@
- #ifdef HAVE_UNISTD_H
- #include <unistd.h>
- #endif
-+#ifdef HAVE_CRYPT_H
-+#include <crypt.h>
-+#endif
-
- /* For size_t? */
- #ifdef HAVE_STDDEF_H
-diff --git a/configure.ac b/configure.ac
-index 03b0f501aff..15ef872a53a 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -2041,7 +2041,7 @@ dnl AC_MSG_RESULT($cpp_type)
-
- # checks for header files
- AC_HEADER_STDC
--AC_CHECK_HEADERS(asm/types.h conio.h direct.h dlfcn.h errno.h \
-+AC_CHECK_HEADERS(asm/types.h crypt.h conio.h direct.h dlfcn.h errno.h \
- fcntl.h grp.h \
- ieeefp.h io.h langinfo.h libintl.h process.h pthread.h \
- sched.h shadow.h signal.h stropts.h termios.h \
-
diff --git a/00291-setup-Link-ctypes-against-dl-explicitly.patch
b/00291-setup-Link-ctypes-against-dl-explicitly.patch
deleted file mode 100644
index 6539003..0000000
--- a/00291-setup-Link-ctypes-against-dl-explicitly.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-diff --git a/setup.py b/setup.py
-index f4f6e4fdb1f0..8536c350fe3a 100644
---- a/setup.py
-+++ b/setup.py
-@@ -2005,6 +2005,10 @@ def detect_ctypes(self, inc_dirs, lib_dirs):
- ext.libraries.append(ffi_lib)
- self.use_system_libffi = True
-
-+ if sysconfig.get_config_var('HAVE_LIBDL'):
-+ # for dlopen, see bpo-32647
-+ ext.libraries.append('dl')
-+
- def _decimal_ext(self):
- extra_compile_args = []
- undef_macros = []
diff --git a/00298-do-not-send-IP-in-SNI-TLS-extension.patch
b/00298-do-not-send-IP-in-SNI-TLS-extension.patch
deleted file mode 100644
index 19b6b31..0000000
--- a/00298-do-not-send-IP-in-SNI-TLS-extension.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-diff --git a/Modules/_ssl.c b/Modules/_ssl.c
-index df8c6a7d96d8..e8cffef14de0 100644
---- a/Modules/_ssl.c
-+++ b/Modules/_ssl.c
-@@ -55,6 +55,11 @@ static PySocketModule_APIObject PySocketModule;
- #include <sys/poll.h>
- #endif
-
-+#ifndef MS_WINDOWS
-+/* inet_pton */
-+#include <arpa/inet.h>
-+#endif
-+
- /* Don't warn about deprecated functions */
- #ifdef __GNUC__
- #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-@@ -667,8 +672,41 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock,
- SSL_set_mode(self->ssl, mode);
-
- #if HAVE_SNI
-- if (server_hostname != NULL)
-- SSL_set_tlsext_host_name(self->ssl, server_hostname);
-+ if (server_hostname != NULL) {
-+/* Don't send SNI for IP addresses. We cannot simply use inet_aton() and
-+ * inet_pton() here. inet_aton() may be linked weakly and inet_pton() isn't
-+ * available on all platforms. Use OpenSSL's IP address parser. It's
-+ * available since 1.0.2 and LibreSSL since at least 2.3.0. */
-+ int send_sni = 1;
-+#if OPENSSL_VERSION_NUMBER >= 0x10200000L
-+ ASN1_OCTET_STRING *ip = a2i_IPADDRESS(server_hostname);
-+ if (ip == NULL) {
-+ send_sni = 1;
-+ ERR_clear_error();
-+ } else {
-+ send_sni = 0;
-+ ASN1_OCTET_STRING_free(ip);
-+ }
-+#elif defined(HAVE_INET_PTON)
-+#ifdef ENABLE_IPV6
-+ char packed[Py_MAX(sizeof(struct in_addr), sizeof(struct in6_addr))];
-+#else
-+ char packed[sizeof(struct in_addr)];
-+#endif /* ENABLE_IPV6 */
-+ if (inet_pton(AF_INET, server_hostname, packed)) {
-+ send_sni = 0;
-+#ifdef ENABLE_IPV6
-+ } else if(inet_pton(AF_INET6, server_hostname, packed)) {
-+ send_sni = 0;
-+#endif /* ENABLE_IPV6 */
-+ } else {
-+ send_sni = 1;
-+ }
-+#endif /* HAVE_INET_PTON */
-+ if (send_sni) {
-+ SSL_set_tlsext_host_name(self->ssl, server_hostname);
-+ }
-+ }
- #endif
-
- /* If the socket is in non-blocking mode or timeout mode, set the BIO
diff --git a/python3.spec b/python3.spec
index dd21fdc..5bdde01 100644
--- a/python3.spec
+++ b/python3.spec
@@ -13,8 +13,8 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
-Version: %{pybasever}.4
-Release: 20%{?dist}
+Version: %{pybasever}.5
+Release: 1%{?dist}
License: Python
@@ -334,45 +334,10 @@ Patch251: 00251-change-user-install-location.patch
# Original proposal:
https://bugzilla.redhat.com/show_bug.cgi?id=1404918
Patch262: 00262-pep538_coerce_legacy_c_locale.patch
-# 00264 #
-# test_pass_by_value was added in Python 3.6.1 and on aarch64
-# it is catching an error that was there, but wasn't tested before.
-# Therefore skipping the test on aarch64 until fixed upstream.
-# Reported upstream:
http://bugs.python.org/issue29804
-Patch264: 00264-skip-test-failing-on-aarch64.patch
-
-# 00273 #
-# Fix localeconv() encoding for LC_NUMERIC
-# Fixed upstream:
https://bugs.python.org/issue31900
-Patch273: 00273-fix-localeconv-encoding-for-LC_NUMERIC.patch
-
# 00274 #
# Upstream uses Debian-style architecture naming. Change to match Fedora.
Patch274: 00274-fix-arch-names.patch
-# 00289 #
-# Fix the compilation of the nis module, as glibc removed the
-# interfaces related to Sun RPC and they are now provided
-# by libtirpc and libnsl2.
-# See:
https://fedoraproject.org/wiki/Changes/SunRPCRemoval
-# and
https://fedoraproject.org/wiki/Changes/NISIPv6
-# Fixed upstream:
https://bugs.python.org/issue32521
-Patch289: 00289-fix-nis-compilation.patch
-
-# 00290 #
-# Not every target system may provide a crypt() function in its stdlibc
-# and may use an external or replacement library, like libxcrypt, for
-# providing such functions.
-# Fixed upstream:
https://bugs.python.org/issue32635
-Patch290: 00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
-
-# 00291 #
-# Build fails with undefined references to dlopen / dlsym otherwise.
-# See:
https://bugzilla.redhat.com/show_bug.cgi?id=1537489
-# and:
https://src.fedoraproject.org/rpms/redhat-rpm-config/c/078af19
-# Fixed upstream:
https://bugs.python.org/issue32647
-Patch291: 00291-setup-Link-ctypes-against-dl-explicitly.patch
-
# 00292 #
# Restore the public PyExc_RecursionErrorInst symbol that was removed
# from the 3.6.4 release upstream.
@@ -387,12 +352,6 @@ Patch292: 00292-restore-PyExc_RecursionErrorInst-symbol.patch
# See also:
https://bugzilla.redhat.com/show_bug.cgi?id=1489816
Patch294: 00294-define-TLS-cipher-suite-on-build-time.patch
-# 00298 #
-# The SSL module no longer sends IP addresses in SNI TLS extension on
-# platforms with OpenSSL 1.0.2+ or inet_pton.
-# Fixed upstream:
https://bugs.python.org/issue32185
-Patch298: 00298-do-not-send-IP-in-SNI-TLS-extension.patch
-
# 00301 #
# Tools/scripts/pathfix.py: Add -n option for no backup~
# See:
https://bugzilla.redhat.com/show_bug.cgi?id=1546990
@@ -659,7 +618,7 @@ rm -r Modules/expat
rm -r Modules/zlib
%if %{with rewheel}
-%global pip_version 9.0.1
+%global pip_version 9.0.3
sed -r -i s/'_PIP_VERSION = "[0-9.]+"'/'_PIP_VERSION =
"%{pip_version}"'/ Lib/ensurepip/__init__.py
%endif
@@ -686,19 +645,9 @@ sed -r -i s/'_PIP_VERSION =
"[0-9.]+"'/'_PIP_VERSION = "%{pip_version}"'/ Lib/en
%patch205 -p1
%patch251 -p1
%patch262 -p1
-
-%ifarch aarch64
-%patch264 -p1
-%endif
-
-%patch273 -p1
%patch274 -p1
-%patch289 -p1
-%patch290 -p1
-%patch291 -p1
%patch292 -p1
%patch294 -p1
-%patch298 -p1
%patch301 -p1
@@ -1521,6 +1470,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Thu Mar 29 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.5-1
+- Update to 3.6.5
+
* Sat Mar 24 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-20
- Fix broken macro invocation and broken building of C Python extensions
Resolves: rhbz#1560103
diff --git a/sources b/sources
index 6b5ff13..9d32274 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (Python-3.6.4.tar.xz) =
09ba2103ac517ac4d262f00380c9aac836a53401ce252540c17fd821a3b92e1ddf32528d00772221eb3126b12cb95b62c3ac3e852f4951e6f2eb406c88c848a2
+SHA512 (Python-3.6.5.tar.xz) =
6b26fcd296b9bd8e67861eff10d14db7507711ddba947288d16d6def53135c39326b7f969c04bb2b2993f924d9e7ad3f5c5282a3915760bc0885cf0a8ea5eb51
commit fb9702fb7f582516652106aabd7c208108970071
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Thu Mar 29 16:03:33 2018 +0200
Update to 3.6.5
Rebased patches: 102, 111, 262
Removed patches due to being upstreamed:
264, 273, 289, 290, 291, 298
Update pip version to 9.0.3
diff --git a/00102-lib64.patch b/00102-lib64.patch
index 8eea66d..2b913ca 100644
--- a/00102-lib64.patch
+++ b/00102-lib64.patch
@@ -110,7 +110,7 @@ index f698927..bc977b5 100644
@@ -248,8 +248,8 @@ class HelperFunctionsTests(unittest.TestCase):
self.assertEqual(dirs[1], wanted)
elif os.sep == '/':
- # OS X non-framwework builds, Linux, FreeBSD, etc
+ # OS X non-framework builds, Linux, FreeBSD, etc
- self.assertEqual(len(dirs), 1)
- wanted = os.path.join('xoxo', 'lib',
+ self.assertEqual(len(dirs), 2)
diff --git a/00111-no-static-lib.patch b/00111-no-static-lib.patch
index 6929fda..bc4203d 100644
--- a/00111-no-static-lib.patch
+++ b/00111-no-static-lib.patch
@@ -1,9 +1,9 @@
diff --git a/Makefile.pre.in b/Makefile.pre.in
-index 70e5927..04c8e3d 100644
+index 4b093e3..1088435 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
-@@ -556,7 +556,7 @@ clinic: $(BUILDPYTHON) $(srcdir)/Modules/_blake2/blake2s_impl.c
- $(RUNSHARED) $(PYTHON_FOR_BUILD) ./Tools/clinic/clinic.py --make
+@@ -543,7 +543,7 @@ clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c
+ $(PYTHON_FOR_REGEN) ./Tools/clinic/clinic.py --make
# Build the interpreter
-$(BUILDPYTHON): Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY)
@@ -11,7 +11,7 @@ index 70e5927..04c8e3d 100644
$(LINKCC) $(PY_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS)
$(MODLIBS) $(SYSLIBS) $(LDLAST)
platform: $(BUILDPYTHON) pybuilddir.txt
-@@ -601,18 +601,6 @@ sharedmods: $(BUILDPYTHON) pybuilddir.txt Modules/_math.o
+@@ -588,18 +588,6 @@ sharedmods: $(BUILDPYTHON) pybuilddir.txt Modules/_math.o
$(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build
@@ -30,7 +30,7 @@ index 70e5927..04c8e3d 100644
libpython$(LDVERSION).so: $(LIBRARY_OBJS)
if test $(INSTSONAME) != $(LDLIBRARY); then \
$(BLDSHARED) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS)
$(LIBC) $(LIBM) $(LDLAST); \
-@@ -702,7 +690,7 @@ Modules/Setup: $(srcdir)/Modules/Setup.dist
+@@ -689,7 +677,7 @@ Modules/Setup: $(srcdir)/Modules/Setup.dist
echo "-----------------------------------------------"; \
fi
@@ -39,7 +39,7 @@ index 70e5927..04c8e3d 100644
$(LINKCC) $(PY_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/_testembed.o $(BLDLIBRARY)
$(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
############################################################################
-@@ -1382,18 +1370,6 @@ libainstall: all python-config
+@@ -1425,18 +1413,6 @@ libainstall: @DEF_MAKE_RULE@ python-config
else true; \
fi; \
done
diff --git a/00262-pep538_coerce_legacy_c_locale.patch
b/00262-pep538_coerce_legacy_c_locale.patch
index b144ba5..4a640fd 100644
--- a/00262-pep538_coerce_legacy_c_locale.patch
+++ b/00262-pep538_coerce_legacy_c_locale.patch
@@ -542,18 +542,6 @@ diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py
index ae2bcd4..0a302ff 100644
--- a/Lib/test/test_cmd_line.py
+++ b/Lib/test/test_cmd_line.py
-@@ -9,8 +9,9 @@ import sys
- import subprocess
- import tempfile
- from test.support import script_helper, is_android
--from test.support.script_helper import (spawn_python, kill_python, assert_python_ok,
-- assert_python_failure)
-+from test.support.script_helper import (
-+ spawn_python, kill_python, assert_python_ok, assert_python_failure
-+)
-
-
- # XXX (ncoghlan): Move to script_helper and make consistent with run_python
@@ -151,6 +152,7 @@ class CmdLineTest(unittest.TestCase):
env = os.environ.copy()
# Use C locale to get ascii for the locale encoding
diff --git a/00264-skip-test-failing-on-aarch64.patch
b/00264-skip-test-failing-on-aarch64.patch
deleted file mode 100644
index edda219..0000000
--- a/00264-skip-test-failing-on-aarch64.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/Lib/ctypes/test/test_structures.py b/Lib/ctypes/test/test_structures.py
-index 3eded77..ad7859a 100644
---- a/Lib/ctypes/test/test_structures.py
-+++ b/Lib/ctypes/test/test_structures.py
-@@ -392,6 +392,7 @@ class StructureTestCase(unittest.TestCase):
- (1, 0, 0, 0, 0, 0))
- self.assertRaises(TypeError, lambda: Z(1, 2, 3, 4, 5, 6, 7))
-
-+ @unittest.skip('Fails on aarch64:
http://bugs.python.org/issue29804')
- def test_pass_by_value(self):
- # This should mirror the structure in Modules/_ctypes/_ctypes_test.c
- class X(Structure):
diff --git a/00273-fix-localeconv-encoding-for-LC_NUMERIC.patch
b/00273-fix-localeconv-encoding-for-LC_NUMERIC.patch
deleted file mode 100644
index 4d0c87d..0000000
--- a/00273-fix-localeconv-encoding-for-LC_NUMERIC.patch
+++ /dev/null
@@ -1,240 +0,0 @@
-diff --git a/Doc/library/locale.rst b/Doc/library/locale.rst
-index b04442bc162..9a0c570533a 100644
---- a/Doc/library/locale.rst
-+++ b/Doc/library/locale.rst
-@@ -147,6 +147,16 @@ The :mod:`locale` module defines the following exception and
functions:
- | ``CHAR_MAX`` | Nothing is specified in this locale. |
- +--------------+-----------------------------------------+
-
-+ The function sets temporarily the ``LC_CTYPE`` locale to the ``LC_NUMERIC``
-+ locale to decode ``decimal_point`` and ``thousands_sep`` byte strings if
-+ they are non-ASCII or longer than 1 byte, and the ``LC_NUMERIC`` locale is
-+ different than the ``LC_CTYPE`` locale. This temporary change affects other
-+ threads.
-+
-+ .. versionchanged:: 3.6.5
-+ The function now sets temporarily the ``LC_CTYPE`` locale to the
-+ ``LC_NUMERIC`` locale in some cases.
-+
-
- .. function:: nl_langinfo(option)
-
-diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst
-index 196a4c00056..d8a1647e8b5 100644
---- a/Doc/library/stdtypes.rst
-+++ b/Doc/library/stdtypes.rst
-@@ -1599,6 +1599,20 @@ expression support in the :mod:`re` module).
- See :ref:`formatstrings` for a description of the various formatting options
- that can be specified in format strings.
-
-+ .. note::
-+ When formatting a number (:class:`int`, :class:`float`, :class:`float`
-+ and subclasses) with the ``n`` type (ex: ``'{:n}'.format(1234)``), the
-+ function sets temporarily the ``LC_CTYPE`` locale to the ``LC_NUMERIC``
-+ locale to decode ``decimal_point`` and ``thousands_sep`` fields of
-+ :c:func:`localeconv` if they are non-ASCII or longer than 1 byte, and the
-+ ``LC_NUMERIC`` locale is different than the ``LC_CTYPE`` locale. This
-+ temporary change affects other threads.
-+
-+ .. versionchanged:: 3.6.5
-+ When formatting a number with the ``n`` type, the function sets
-+ temporarily the ``LC_CTYPE`` locale to the ``LC_NUMERIC`` locale in some
-+ cases.
-+
-
- .. method:: str.format_map(mapping)
-
-diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst
-index 847b50140a6..f83508c9250 100644
---- a/Doc/whatsnew/3.6.rst
-+++ b/Doc/whatsnew/3.6.rst
-@@ -2346,3 +2346,11 @@ It has been replaced by the new ``make regen-all`` target.
- (Contributed by Victor Stinner in :issue:`23404`.)
-
- .. versionchanged:: 3.6.2
-+
-+
-+Notable changes in Python 3.6.5
-+===============================
-+
-+The :func:`locale.localeconv` function now sets temporarily the ``LC_CTYPE``
-+locale to the ``LC_NUMERIC`` locale in some cases.
-+(Contributed by Victor Stinner in :issue:`31900`.)
-diff --git a/Include/fileutils.h b/Include/fileutils.h
-index 900c70faad7..875715df97a 100644
---- a/Include/fileutils.h
-+++ b/Include/fileutils.h
-@@ -119,6 +119,11 @@ PyAPI_FUNC(int) _Py_get_blocking(int fd);
- PyAPI_FUNC(int) _Py_set_blocking(int fd, int blocking);
- #endif /* !MS_WINDOWS */
-
-+PyAPI_FUNC(int) _Py_GetLocaleconvNumeric(
-+ PyObject **decimal_point,
-+ PyObject **thousands_sep,
-+ const char **grouping);
-+
- #endif /* Py_LIMITED_API */
-
- #ifdef __cplusplus
-diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c
-index 71c9146ccb8..95b370b1ad0 100644
---- a/Modules/_localemodule.c
-+++ b/Modules/_localemodule.c
-@@ -171,12 +171,6 @@ PyLocale_localeconv(PyObject* self)
- RESULT(#i, x); \
- } while (0)
-
-- /* Numeric information */
-- RESULT_STRING(decimal_point);
-- RESULT_STRING(thousands_sep);
-- x = copy_grouping(l->grouping);
-- RESULT("grouping", x);
--
- /* Monetary information */
- RESULT_STRING(int_curr_symbol);
- RESULT_STRING(currency_symbol);
-@@ -195,6 +189,32 @@ PyLocale_localeconv(PyObject* self)
- RESULT_INT(n_sep_by_space);
- RESULT_INT(p_sign_posn);
- RESULT_INT(n_sign_posn);
-+
-+ /* Numeric information */
-+ PyObject *decimal_point, *thousands_sep;
-+ const char *grouping;
-+ if (_Py_GetLocaleconvNumeric(&decimal_point,
-+ &thousands_sep,
-+ &grouping) < 0) {
-+ goto failed;
-+ }
-+
-+ if (PyDict_SetItemString(result, "decimal_point", decimal_point) < 0)
{
-+ Py_DECREF(decimal_point);
-+ Py_DECREF(thousands_sep);
-+ goto failed;
-+ }
-+ Py_DECREF(decimal_point);
-+
-+ if (PyDict_SetItemString(result, "thousands_sep", thousands_sep) < 0)
{
-+ Py_DECREF(thousands_sep);
-+ goto failed;
-+ }
-+ Py_DECREF(thousands_sep);
-+
-+ x = copy_grouping(grouping);
-+ RESULT("grouping", x);
-+
- return result;
-
- failed:
-diff --git a/Python/fileutils.c b/Python/fileutils.c
-index 97505e5bc6d..14dd81b03f0 100644
---- a/Python/fileutils.c
-+++ b/Python/fileutils.c
-@@ -1597,3 +1597,80 @@ _Py_set_blocking(int fd, int blocking)
- return -1;
- }
- #endif
-+
-+
-+int
-+_Py_GetLocaleconvNumeric(PyObject **decimal_point, PyObject **thousands_sep,
-+ const char **grouping)
-+{
-+ int res = -1;
-+
-+ struct lconv *lc = localeconv();
-+
-+ int change_locale = 0;
-+ if (decimal_point != NULL &&
-+ (strlen(lc->decimal_point) > 1 || ((unsigned char)lc->decimal_point[0])
> 127))
-+ {
-+ change_locale = 1;
-+ }
-+ if (thousands_sep != NULL &&
-+ (strlen(lc->thousands_sep) > 1 || ((unsigned char)lc->thousands_sep[0])
> 127))
-+ {
-+ change_locale = 1;
-+ }
-+
-+ /* Keep a copy of the LC_CTYPE locale */
-+ char *oldloc = NULL, *loc = NULL;
-+ if (change_locale) {
-+ oldloc = setlocale(LC_CTYPE, NULL);
-+ if (!oldloc) {
-+ PyErr_SetString(PyExc_RuntimeWarning, "faild to get LC_CTYPE
locale");
-+ return -1;
-+ }
-+
-+ oldloc = _PyMem_Strdup(oldloc);
-+ if (!oldloc) {
-+ PyErr_NoMemory();
-+ return -1;
-+ }
-+
-+ loc = setlocale(LC_NUMERIC, NULL);
-+ if (loc != NULL && strcmp(loc, oldloc) == 0) {
-+ loc = NULL;
-+ }
-+
-+ if (loc != NULL) {
-+ /* Only set the locale temporarilty the LC_CTYPE locale
-+ if LC_NUMERIC locale is different than LC_CTYPE locale and
-+ decimal_point and/or thousands_sep are non-ASCII or longer than
-+ 1 byte */
-+ setlocale(LC_CTYPE, loc);
-+ }
-+ }
-+
-+ if (decimal_point != NULL) {
-+ *decimal_point = PyUnicode_DecodeLocale(lc->decimal_point, NULL);
-+ if (*decimal_point == NULL) {
-+ goto error;
-+ }
-+ }
-+ if (thousands_sep != NULL) {
-+ *thousands_sep = PyUnicode_DecodeLocale(lc->thousands_sep, NULL);
-+ if (*thousands_sep == NULL) {
-+ goto error;
-+ }
-+ }
-+
-+ if (grouping != NULL) {
-+ *grouping = lc->grouping;
-+ }
-+
-+ res = 0;
-+
-+error:
-+ if (loc != NULL) {
-+ setlocale(LC_CTYPE, oldloc);
-+ }
-+ PyMem_Free(oldloc);
-+ return res;
-+}
-diff --git a/Python/formatter_unicode.c b/Python/formatter_unicode.c
-index d2be76f1e1a..d3ef650e6ce 100644
---- a/Python/formatter_unicode.c
-+++ b/Python/formatter_unicode.c
-@@ -707,18 +707,11 @@ get_locale_info(enum LocaleType type, LocaleInfo *locale_info)
- {
- switch (type) {
- case LT_CURRENT_LOCALE: {
-- struct lconv *locale_data = localeconv();
-- locale_info->decimal_point = PyUnicode_DecodeLocale(
-- locale_data->decimal_point,
-- NULL);
-- if (locale_info->decimal_point == NULL)
-+ if (_Py_GetLocaleconvNumeric(&locale_info->decimal_point,
-+ &locale_info->thousands_sep,
-+ &locale_info->grouping) < 0) {
- return -1;
-- locale_info->thousands_sep = PyUnicode_DecodeLocale(
-- locale_data->thousands_sep,
-- NULL);
-- if (locale_info->thousands_sep == NULL)
-- return -1;
-- locale_info->grouping = locale_data->grouping;
-+ }
- break;
- }
- case LT_DEFAULT_LOCALE:
diff --git a/00277-fix-test-subprocess-hanging-tests.patch
b/00277-fix-test-subprocess-hanging-tests.patch
deleted file mode 100644
index c9b54e2..0000000
--- a/00277-fix-test-subprocess-hanging-tests.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 54849962eacc38f4e6c6f8a72ae258b3e7c2ecd5 Mon Sep 17 00:00:00 2001
-From: Victor Stinner <victor.stinner(a)gmail.com>
-Date: Thu, 5 Oct 2017 15:05:30 +0200
-Subject: [PATCH] bpo-31178: Mock os.waitpid() in test_subprocess
-
-Fix test_exception_errpipe_bad_data() and
-test_exception_errpipe_normal() of test_subprocess: mock os.waitpid()
-to avoid calling the real os.waitpid(0, 0) which is an unexpected
-side effect of the test.
----
- Lib/test/test_subprocess.py | 12 ++++++++----
- 1 file changed, 8 insertions(+), 4 deletions(-)
-
-diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
-index 00dc37bc2c7..3ba5c028517 100644
---- a/Lib/test/test_subprocess.py
-+++ b/Lib/test/test_subprocess.py
-@@ -1559,8 +1559,10 @@ def proper_error(*args):
-
- fork_exec.side_effect = proper_error
-
-- with self.assertRaises(IsADirectoryError):
-- self.PopenNoDestructor(["non_existent_command"])
-+ with mock.patch("subprocess.os.waitpid",
-+ side_effect=ChildProcessError):
-+ with self.assertRaises(IsADirectoryError):
-+ self.PopenNoDestructor(["non_existent_command"])
-
- @mock.patch("subprocess._posixsubprocess.fork_exec")
- def test_exception_errpipe_bad_data(self, fork_exec):
-@@ -1577,8 +1579,10 @@ def bad_error(*args):
-
- fork_exec.side_effect = bad_error
-
-- with self.assertRaises(subprocess.SubprocessError) as e:
-- self.PopenNoDestructor(["non_existent_command"])
-+ with mock.patch("subprocess.os.waitpid",
-+ side_effect=ChildProcessError):
-+ with self.assertRaises(subprocess.SubprocessError) as e:
-+ self.PopenNoDestructor(["non_existent_command"])
-
- self.assertIn(repr(error_data), str(e.exception))
-
diff --git a/00279-fix-memory-corruption-due-to-allocator-mix.patch
b/00279-fix-memory-corruption-due-to-allocator-mix.patch
deleted file mode 100644
index 4937391..0000000
--- a/00279-fix-memory-corruption-due-to-allocator-mix.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/Modules/getpath.c b/Modules/getpath.c
-index c4055be..1258fcd 100644
---- a/Modules/getpath.c
-+++ b/Modules/getpath.c
-@@ -735,7 +735,7 @@ calculate_path(void)
- bufsz += wcslen(zip_path) + 1;
- bufsz += wcslen(exec_prefix) + 1;
-
-- buf = PyMem_New(wchar_t, bufsz);
-+ buf = PyMem_RawMalloc(bufsz * sizeof(wchar_t));
- if (buf == NULL) {
- Py_FatalError(
- "Not enough memory for dynamic PYTHONPATH");
diff --git a/00289-fix-nis-compilation.patch b/00289-fix-nis-compilation.patch
deleted file mode 100644
index 4d4e3dc..0000000
--- a/00289-fix-nis-compilation.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-diff --git a/setup.py b/setup.py
-index 3eb6ad1..3437e48 100644
---- a/setup.py
-+++ b/setup.py
-@@ -1331,20 +1331,14 @@ class PyBuildExt(build_ext):
- exts.append( Extension('termios', ['termios.c']) )
- # Jeremy Hylton's rlimit interface
- exts.append( Extension('resource', ['resource.c']) )
-+ else:
-+ missing.extend(['resource', 'termios'])
-
-- # Sun yellow pages. Some systems have the functions in libc.
-- if (host_platform not in ['cygwin', 'qnx6'] and
-- find_file('rpcsvc/yp_prot.h', inc_dirs, []) is not None):
-- if (self.compiler.find_library_file(lib_dirs, 'nsl')):
-- libs = ['nsl']
-- else:
-- libs = []
-- exts.append( Extension('nis', ['nismodule.c'],
-- libraries = libs) )
-- else:
-- missing.append('nis')
-+ nis = self._detect_nis(inc_dirs, lib_dirs)
-+ if nis is not None:
-+ exts.append(nis)
- else:
-- missing.extend(['nis', 'resource', 'termios'])
-+ missing.append('nis')
-
- # Curses support, requiring the System V version of curses, often
- # provided by the ncurses library.
-@@ -2179,6 +2173,51 @@ class PyBuildExt(build_ext):
- )
- return ext
-
-+ def _detect_nis(self, inc_dirs, lib_dirs):
-+ if host_platform in {'win32', 'cygwin', 'qnx6'}:
-+ return None
-+
-+ libs = []
-+ library_dirs = []
-+ includes_dirs = []
-+
-+ # Latest glibc has moved Sun RPC headers into tircp and nsl sub
-+ # directories. rpc code has been moved to libtirpc.
-+ rpcsvc_inc = find_file(
-+ 'rpcsvc/yp_prot.h', inc_dirs,
-+ ['/usr/local/include/nsl', '/usr/include/nsl']
-+ )
-+ rpc_inc = find_file(
-+ 'rpc/rpc.h', inc_dirs,
-+ ['/usr/local/include/tirpc', '/usr/include/tirpc']
-+ )
-+ if rpcsvc_inc is None or rpc_inc is None:
-+ # not found
-+ return None
-+ includes_dirs.extend(rpcsvc_inc)
-+ includes_dirs.extend(rpc_inc)
-+
-+ if self.compiler.find_library_file(lib_dirs, 'nsl'):
-+ libs.append('nsl')
-+ else:
-+ # libnsl-devel: check for libnsl in nsl/ subdirectory
-+ nsl_dirs = [os.path.join(lib_dir, 'nsl') for lib_dir in lib_dirs]
-+ libnsl = self.compiler.find_library_file(nsl_dirs, 'nsl')
-+ if libnsl is not None:
-+ library_dirs.append(os.path.dirname(libnsl))
-+ libs.append('nsl')
-+
-+ if self.compiler.find_library_file(lib_dirs, 'tirpc'):
-+ libs.append('tirpc')
-+
-+ return Extension(
-+ 'nis', ['nismodule.c'],
-+ libraries=libs,
-+ library_dirs=library_dirs,
-+ include_dirs=includes_dirs
-+ )
-+
-+
- class PyBuildInstall(install):
- # Suppress the warning about installation into the lib_dynload
- # directory, which is not in sys.path when running Python during
diff --git a/00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
b/00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
deleted file mode 100644
index c5d768b..0000000
--- a/00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-diff --git a/Include/Python.h b/Include/Python.h
-index dd595ea5e4c..1feb1531cc9 100644
---- a/Include/Python.h
-+++ b/Include/Python.h
-@@ -35,6 +35,9 @@
- #ifdef HAVE_UNISTD_H
- #include <unistd.h>
- #endif
-+#ifdef HAVE_CRYPT_H
-+#include <crypt.h>
-+#endif
-
- /* For size_t? */
- #ifdef HAVE_STDDEF_H
-diff --git a/configure.ac b/configure.ac
-index 03b0f501aff..15ef872a53a 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -2041,7 +2041,7 @@ dnl AC_MSG_RESULT($cpp_type)
-
- # checks for header files
- AC_HEADER_STDC
--AC_CHECK_HEADERS(asm/types.h conio.h direct.h dlfcn.h errno.h \
-+AC_CHECK_HEADERS(asm/types.h crypt.h conio.h direct.h dlfcn.h errno.h \
- fcntl.h grp.h \
- ieeefp.h io.h langinfo.h libintl.h process.h pthread.h \
- sched.h shadow.h signal.h stropts.h termios.h \
-
diff --git a/00291-setup-Link-ctypes-against-dl-explicitly.patch
b/00291-setup-Link-ctypes-against-dl-explicitly.patch
deleted file mode 100644
index 6539003..0000000
--- a/00291-setup-Link-ctypes-against-dl-explicitly.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-diff --git a/setup.py b/setup.py
-index f4f6e4fdb1f0..8536c350fe3a 100644
---- a/setup.py
-+++ b/setup.py
-@@ -2005,6 +2005,10 @@ def detect_ctypes(self, inc_dirs, lib_dirs):
- ext.libraries.append(ffi_lib)
- self.use_system_libffi = True
-
-+ if sysconfig.get_config_var('HAVE_LIBDL'):
-+ # for dlopen, see bpo-32647
-+ ext.libraries.append('dl')
-+
- def _decimal_ext(self):
- extra_compile_args = []
- undef_macros = []
diff --git a/00298-do-not-send-IP-in-SNI-TLS-extension.patch
b/00298-do-not-send-IP-in-SNI-TLS-extension.patch
deleted file mode 100644
index 19b6b31..0000000
--- a/00298-do-not-send-IP-in-SNI-TLS-extension.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-diff --git a/Modules/_ssl.c b/Modules/_ssl.c
-index df8c6a7d96d8..e8cffef14de0 100644
---- a/Modules/_ssl.c
-+++ b/Modules/_ssl.c
-@@ -55,6 +55,11 @@ static PySocketModule_APIObject PySocketModule;
- #include <sys/poll.h>
- #endif
-
-+#ifndef MS_WINDOWS
-+/* inet_pton */
-+#include <arpa/inet.h>
-+#endif
-+
- /* Don't warn about deprecated functions */
- #ifdef __GNUC__
- #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-@@ -667,8 +672,41 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock,
- SSL_set_mode(self->ssl, mode);
-
- #if HAVE_SNI
-- if (server_hostname != NULL)
-- SSL_set_tlsext_host_name(self->ssl, server_hostname);
-+ if (server_hostname != NULL) {
-+/* Don't send SNI for IP addresses. We cannot simply use inet_aton() and
-+ * inet_pton() here. inet_aton() may be linked weakly and inet_pton() isn't
-+ * available on all platforms. Use OpenSSL's IP address parser. It's
-+ * available since 1.0.2 and LibreSSL since at least 2.3.0. */
-+ int send_sni = 1;
-+#if OPENSSL_VERSION_NUMBER >= 0x10200000L
-+ ASN1_OCTET_STRING *ip = a2i_IPADDRESS(server_hostname);
-+ if (ip == NULL) {
-+ send_sni = 1;
-+ ERR_clear_error();
-+ } else {
-+ send_sni = 0;
-+ ASN1_OCTET_STRING_free(ip);
-+ }
-+#elif defined(HAVE_INET_PTON)
-+#ifdef ENABLE_IPV6
-+ char packed[Py_MAX(sizeof(struct in_addr), sizeof(struct in6_addr))];
-+#else
-+ char packed[sizeof(struct in_addr)];
-+#endif /* ENABLE_IPV6 */
-+ if (inet_pton(AF_INET, server_hostname, packed)) {
-+ send_sni = 0;
-+#ifdef ENABLE_IPV6
-+ } else if(inet_pton(AF_INET6, server_hostname, packed)) {
-+ send_sni = 0;
-+#endif /* ENABLE_IPV6 */
-+ } else {
-+ send_sni = 1;
-+ }
-+#endif /* HAVE_INET_PTON */
-+ if (send_sni) {
-+ SSL_set_tlsext_host_name(self->ssl, server_hostname);
-+ }
-+ }
- #endif
-
- /* If the socket is in non-blocking mode or timeout mode, set the BIO
diff --git a/python3.spec b/python3.spec
index dd21fdc..5bdde01 100644
--- a/python3.spec
+++ b/python3.spec
@@ -13,8 +13,8 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
-Version: %{pybasever}.4
-Release: 20%{?dist}
+Version: %{pybasever}.5
+Release: 1%{?dist}
License: Python
@@ -334,45 +334,10 @@ Patch251: 00251-change-user-install-location.patch
# Original proposal:
https://bugzilla.redhat.com/show_bug.cgi?id=1404918
Patch262: 00262-pep538_coerce_legacy_c_locale.patch
-# 00264 #
-# test_pass_by_value was added in Python 3.6.1 and on aarch64
-# it is catching an error that was there, but wasn't tested before.
-# Therefore skipping the test on aarch64 until fixed upstream.
-# Reported upstream:
http://bugs.python.org/issue29804
-Patch264: 00264-skip-test-failing-on-aarch64.patch
-
-# 00273 #
-# Fix localeconv() encoding for LC_NUMERIC
-# Fixed upstream:
https://bugs.python.org/issue31900
-Patch273: 00273-fix-localeconv-encoding-for-LC_NUMERIC.patch
-
# 00274 #
# Upstream uses Debian-style architecture naming. Change to match Fedora.
Patch274: 00274-fix-arch-names.patch
-# 00289 #
-# Fix the compilation of the nis module, as glibc removed the
-# interfaces related to Sun RPC and they are now provided
-# by libtirpc and libnsl2.
-# See:
https://fedoraproject.org/wiki/Changes/SunRPCRemoval
-# and
https://fedoraproject.org/wiki/Changes/NISIPv6
-# Fixed upstream:
https://bugs.python.org/issue32521
-Patch289: 00289-fix-nis-compilation.patch
-
-# 00290 #
-# Not every target system may provide a crypt() function in its stdlibc
-# and may use an external or replacement library, like libxcrypt, for
-# providing such functions.
-# Fixed upstream:
https://bugs.python.org/issue32635
-Patch290: 00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
-
-# 00291 #
-# Build fails with undefined references to dlopen / dlsym otherwise.
-# See:
https://bugzilla.redhat.com/show_bug.cgi?id=1537489
-# and:
https://src.fedoraproject.org/rpms/redhat-rpm-config/c/078af19
-# Fixed upstream:
https://bugs.python.org/issue32647
-Patch291: 00291-setup-Link-ctypes-against-dl-explicitly.patch
-
# 00292 #
# Restore the public PyExc_RecursionErrorInst symbol that was removed
# from the 3.6.4 release upstream.
@@ -387,12 +352,6 @@ Patch292: 00292-restore-PyExc_RecursionErrorInst-symbol.patch
# See also:
https://bugzilla.redhat.com/show_bug.cgi?id=1489816
Patch294: 00294-define-TLS-cipher-suite-on-build-time.patch
-# 00298 #
-# The SSL module no longer sends IP addresses in SNI TLS extension on
-# platforms with OpenSSL 1.0.2+ or inet_pton.
-# Fixed upstream:
https://bugs.python.org/issue32185
-Patch298: 00298-do-not-send-IP-in-SNI-TLS-extension.patch
-
# 00301 #
# Tools/scripts/pathfix.py: Add -n option for no backup~
# See:
https://bugzilla.redhat.com/show_bug.cgi?id=1546990
@@ -659,7 +618,7 @@ rm -r Modules/expat
rm -r Modules/zlib
%if %{with rewheel}
-%global pip_version 9.0.1
+%global pip_version 9.0.3
sed -r -i s/'_PIP_VERSION = "[0-9.]+"'/'_PIP_VERSION =
"%{pip_version}"'/ Lib/ensurepip/__init__.py
%endif
@@ -686,19 +645,9 @@ sed -r -i s/'_PIP_VERSION =
"[0-9.]+"'/'_PIP_VERSION = "%{pip_version}"'/ Lib/en
%patch205 -p1
%patch251 -p1
%patch262 -p1
-
-%ifarch aarch64
-%patch264 -p1
-%endif
-
-%patch273 -p1
%patch274 -p1
-%patch289 -p1
-%patch290 -p1
-%patch291 -p1
%patch292 -p1
%patch294 -p1
-%patch298 -p1
%patch301 -p1
@@ -1521,6 +1470,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Thu Mar 29 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.5-1
+- Update to 3.6.5
+
* Sat Mar 24 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-20
- Fix broken macro invocation and broken building of C Python extensions
Resolves: rhbz#1560103
diff --git a/sources b/sources
index 6b5ff13..9d32274 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (Python-3.6.4.tar.xz) =
09ba2103ac517ac4d262f00380c9aac836a53401ce252540c17fd821a3b92e1ddf32528d00772221eb3126b12cb95b62c3ac3e852f4951e6f2eb406c88c848a2
+SHA512 (Python-3.6.5.tar.xz) =
6b26fcd296b9bd8e67861eff10d14db7507711ddba947288d16d6def53135c39326b7f969c04bb2b2993f924d9e7ad3f5c5282a3915760bc0885cf0a8ea5eb51
commit 6c5992ec4eefd7d510434df06fb18f56a7bdf49a
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Sun Mar 25 20:49:54 2018 +0200
Fix shebangs of the GDB hooks
Also, use -p (preserve timestamp) and -n (don't create backup files)
with pathfix.py.
Resolves
https://bugzilla.redhat.com/show_bug.cgi?id=1560295
diff --git a/python3.spec b/python3.spec
index 8c9dacd..dd21fdc 100644
--- a/python3.spec
+++ b/python3.spec
@@ -953,8 +953,9 @@ cp -p Tools/scripts/pathfix.py %{buildroot}%{_bindir}/
# so handle files named using other naming scheme separately.
LD_LIBRARY_PATH=./build/optimized ./build/optimized/python \
Tools/scripts/pathfix.py \
- -i "%{_bindir}/python%{pybasever}" \
- %{buildroot}
+ -i "%{_bindir}/python%{pybasever}" -pn \
+ %{buildroot} \
+ %{?with_gdb_hooks:%{buildroot}$DirHoldingGdbPy/*.py}
# Remove tests for python3-tools which was removed in
#
https://bugzilla.redhat.com/show_bug.cgi?id=1312030
commit 37c970a4db6dd7f5c6885e40bc506efd3288a573
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Sat Mar 24 08:06:56 2018 +0100
rpmlintrc: Filter macro-in-comment %{_pyconfig(32|64)_h}
diff --git a/python3.rpmlintrc b/python3.rpmlintrc
index 2c6e93d..03607c6 100644
--- a/python3.rpmlintrc
+++ b/python3.rpmlintrc
@@ -60,6 +60,8 @@ addFilter(r'python3\d?-debug.[^:]+: (E|W):
(non-)?devel-file-in-(non-)?devel-pac
addFilter(r'dangling-relative-symlink /usr/lib(64)?/pkgconfig/python-3\.\ddm\.pc
python-3\.\d\.pc')
addFilter(r'read-error /usr/lib(64)?/pkgconfig/python-3\.\ddm\.pc \[Errno 2\]')
+# we need this macro to evaluate, even if the line starts with #
+addFilter(r'macro-in-comment %\{_pyconfig(32|64)_h\}')
# SPELLING ERRORS
addFilter(r'spelling-error .* en_US (bytecode|pyc|filename|tkinter|namespaces|pytest)
')
commit e8fa184158dfa253cf88fbac86a18cfb82046ca9
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Sat Mar 24 08:02:08 2018 +0100
Fix broken macro invocation and broken building of C Python extensions
Revert "Use %% for actual % in spec"
This reverts commit 90512a5a1b6bb4e54449a0e3611482e6a55a8ab3.
Resolves
https://bugzilla.redhat.com/show_bug.cgi?id=1560103
diff --git a/python3.spec b/python3.spec
index e96ccf7..8c9dacd 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.4
-Release: 19%{?dist}
+Release: 20%{?dist}
License: Python
@@ -884,9 +884,9 @@ InstallPython() {
#include <bits/wordsize.h>
#if __WORDSIZE == 32
-#include "%%{_pyconfig32_h}"
+#include "%{_pyconfig32_h}"
#elif __WORDSIZE == 64
-#include "%%{_pyconfig64_h}"
+#include "%{_pyconfig64_h}"
#else
#error "Unknown word size"
#endif
@@ -1520,6 +1520,10 @@ CheckPython optimized
# ======================================================
%changelog
+* Sat Mar 24 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-20
+- Fix broken macro invocation and broken building of C Python extensions
+Resolves: rhbz#1560103
+
* Fri Mar 16 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-19
- Add -n option for pathfix.py
Resolves: rhbz#1546990
commit 58c6b177d4bfe558542c765d6b57d641646b4fe0
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Thu Mar 1 15:21:59 2018 +0100
Add rpmlintrc file
Filter all the errors and warnings. This allows us to actually read the rpmlint
output to get new information. From now on, we can rely on this information
when pushing updates.
Resolves
https://bugzilla.redhat.com/show_bug.cgi?id=1548683
Backport of
https://src.fedoraproject.org/rpms/python37/pull-request/10
diff --git a/python3.rpmlintrc b/python3.rpmlintrc
new file mode 100644
index 0000000..2c6e93d
--- /dev/null
+++ b/python3.rpmlintrc
@@ -0,0 +1,65 @@
+# KNOWN BUGS:
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1489816
+addFilter(r'crypto-policy-non-compliance-openssl')
+
+
+# TESTS:
+addFilter(r'(zero-length|pem-certificate|uncompressed-zip)
/usr/lib(64)?/python3.\d/test')
+
+
+# OTHER DELIBERATES:
+# chroot function
+addFilter(r'missing-call-to-chdir-with-chroot')
+
+# intentionally unversioned and selfobsoleted
+addFilter(r'unversioned-explicit-obsoletes python')
+addFilter(r'self-obsoletion python3\d obsoletes python3\d')
+
+# intentionally hardcoded
+addFilter(r'hardcoded-library-path in
%{_prefix}/lib/(debug/%{_libdir}|python%{pybasever})')
+
+# we have non binary stuff, python files
+addFilter(r'only-non-binary-in-usr-lib')
+
+# some devel files that are deliberately needed
+addFilter(r'devel-file-in-non-devel-package
/usr/include/python3\.\dm/pyconfig-(32|64)\.h')
+addFilter(r'devel-file-in-non-devel-package
/usr/lib64/python3\.\d/distutils/tests/xxmodule\.c')
+
+
+# SORRY, NOT SORRY:
+# manual pages
+addFilter(r'no-manual-page-for-binary
(idle|pydoc|pyvenv|2to3|python3-debug|pathfix\.py)')
+addFilter(r'no-manual-page-for-binary python3.*-config$')
+addFilter(r'no-manual-page-for-binary python3.\dd?m$')
+
+# missing documentation from subpackages
+addFilter(r'^python3\d?-(debug|tkinter|test|idle)\.[^:]+: (E|W):
no-documentation')
+
+# platform python is obsoleted, but not provided
+addFilter(r'obsolete-not-provided platform-python')
+
+
+# RPMLINT IMPERFECTIONS:
+# ifarch applied patches are OK
+#
https://fedoraproject.org/wiki/Packaging:Guidelines#Architecture_Support
+addFilter(r'%ifarch-applied-patch')
+
+# debugsource
+addFilter(r'^python3\d?-debugsource\.[^:]+: (E|W): no-documentation')
+
+# debuginfo
+addFilter(r'^python3\d?-debuginfo\.[^:]+: (E|W): useless-provides
debuginfo\(build-id\)')
+
+# this is OK for F28+
+addFilter(r'library-without-ldconfig-post')
+
+# debug package contains devel and non-devel files
+addFilter(r'python3\d?-debug.[^:]+: (E|W):
(non-)?devel-file-in-(non-)?devel-package')
+
+# this goes to other subpackage, hence not actually dangling, the read error is bogus
+addFilter(r'dangling-relative-symlink /usr/lib(64)?/pkgconfig/python-3\.\ddm\.pc
python-3\.\d\.pc')
+addFilter(r'read-error /usr/lib(64)?/pkgconfig/python-3\.\ddm\.pc \[Errno 2\]')
+
+
+# SPELLING ERRORS
+addFilter(r'spelling-error .* en_US (bytecode|pyc|filename|tkinter|namespaces|pytest)
')
commit 90512a5a1b6bb4e54449a0e3611482e6a55a8ab3
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Thu Mar 1 15:19:51 2018 +0100
Use %% for actual % in spec
rpmlint reports this as macro in comment, however it was left here, because it
is not macro and not comment. On the other hand, % shall be escaped using %%.
All this needs to blow is somebody defining a macro called _pyconfig64_h.
diff --git a/python3.spec b/python3.spec
index 41594dd..e96ccf7 100644
--- a/python3.spec
+++ b/python3.spec
@@ -884,9 +884,9 @@ InstallPython() {
#include <bits/wordsize.h>
#if __WORDSIZE == 32
-#include "%{_pyconfig32_h}"
+#include "%%{_pyconfig32_h}"
#elif __WORDSIZE == 64
-#include "%{_pyconfig64_h}"
+#include "%%{_pyconfig64_h}"
#else
#error "Unknown word size"
#endif
commit 545e6802537971e9848fdcda7e15d3c5bfb08b9e
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Wed Mar 14 22:05:06 2018 +0100
Add -n option for pathfix.py (#1546990)
diff --git a/00301-pathfix-add-n-option-for-no-backup.patch
b/00301-pathfix-add-n-option-for-no-backup.patch
new file mode 100644
index 0000000..350fe97
--- /dev/null
+++ b/00301-pathfix-add-n-option-for-no-backup.patch
@@ -0,0 +1,104 @@
+From 5affd5c29eb1493cb31ef3cfdde15538ac134689 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro(a)hroncok.cz>
+Date: Tue, 13 Mar 2018 10:56:43 +0100
+Subject: [PATCH] bpo-32885: Tools/scripts/pathfix.py: Add -n option for no
+ backup~ (#5772)
+
+Creating backup files with ~ suffix can be undesirable in some environment,
+such as when building RPM packages. Instead of requiring the user to remove
+those files manually, option -n was added, that simply disables this feature.
+
+-n was selected because 2to3 has the same option with this behavior.
+---
+ Misc/ACKS | 1 +
+ .../2018-02-20-12-16-47.bpo-32885.dL5x7C.rst | 2 ++
+ Tools/scripts/pathfix.py | 28 +++++++++++++++-------
+ 3 files changed, 23 insertions(+), 8 deletions(-)
+ create mode 100644
Misc/NEWS.d/next/Tools-Demos/2018-02-20-12-16-47.bpo-32885.dL5x7C.rst
+
+diff --git a/Misc/ACKS b/Misc/ACKS
+index d8179c8b03ab..d752d8a35434 100644
+--- a/Misc/ACKS
++++ b/Misc/ACKS
+@@ -687,6 +687,7 @@ Ken Howard
+ Brad Howes
+ Mike Hoy
+ Ben Hoyt
++Miro Hronok
+ Chiu-Hsiang Hsu
+ Chih-Hao Huang
+ Christian Hudon
+diff --git a/Misc/NEWS.d/next/Tools-Demos/2018-02-20-12-16-47.bpo-32885.dL5x7C.rst
b/Misc/NEWS.d/next/Tools-Demos/2018-02-20-12-16-47.bpo-32885.dL5x7C.rst
+new file mode 100644
+index 000000000000..e003e1d84fd0
+--- /dev/null
++++ b/Misc/NEWS.d/next/Tools-Demos/2018-02-20-12-16-47.bpo-32885.dL5x7C.rst
+@@ -0,0 +1,2 @@
++Add an ``-n`` flag for ``Tools/scripts/pathfix.py`` to disbale automatic
++backup creation (files with ``~`` suffix).
+diff --git a/Tools/scripts/pathfix.py b/Tools/scripts/pathfix.py
+index 562bbc737812..c5bf984306a3 100755
+--- a/Tools/scripts/pathfix.py
++++ b/Tools/scripts/pathfix.py
+@@ -7,8 +7,9 @@
+ # Directories are searched recursively for files whose name looks
+ # like a python module.
+ # Symbolic links are always ignored (except as explicit directory
+-# arguments). Of course, the original file is kept as a back-up
+-# (with a "~" attached to its name).
++# arguments).
++# The original file is kept as a back-up (with a "~" attached to its name),
++# -n flag can be used to disable this.
+ #
+ # Undoubtedly you can do this using find and sed or perl, but this is
+ # a nice example of Python code that recurses down a directory tree
+@@ -31,14 +32,17 @@
+
+ new_interpreter = None
+ preserve_timestamps = False
++create_backup = True
++
+
+ def main():
+ global new_interpreter
+ global preserve_timestamps
+- usage = ('usage: %s -i /interpreter -p file-or-directory ...\n' %
++ global create_backup
++ usage = ('usage: %s -i /interpreter -p -n file-or-directory ...\n' %
+ sys.argv[0])
+ try:
+- opts, args = getopt.getopt(sys.argv[1:], 'i:p')
++ opts, args = getopt.getopt(sys.argv[1:], 'i:pn')
+ except getopt.error as msg:
+ err(str(msg) + '\n')
+ err(usage)
+@@ -48,6 +52,8 @@ def main():
+ new_interpreter = a.encode()
+ if o == '-p':
+ preserve_timestamps = True
++ if o == '-n':
++ create_backup = False
+ if not new_interpreter or not new_interpreter.startswith(b'/') or \
+ not args:
+ err('-i option or file-or-directory missing\n')
+@@ -134,10 +140,16 @@ def fix(filename):
+ except OSError as msg:
+ err('%s: warning: chmod failed (%r)\n' % (tempname, msg))
+ # Then make a backup of the original file as filename~
+- try:
+- os.rename(filename, filename + '~')
+- except OSError as msg:
+- err('%s: warning: backup failed (%r)\n' % (filename, msg))
++ if create_backup:
++ try:
++ os.rename(filename, filename + '~')
++ except OSError as msg:
++ err('%s: warning: backup failed (%r)\n' % (filename, msg))
++ else:
++ try:
++ os.remove(filename)
++ except OSError as msg:
++ err('%s: warning: removing failed (%r)\n' % (filename, msg))
+ # Now move the temp file to the original file
+ try:
+ os.rename(tempname, filename)
diff --git a/python3.spec b/python3.spec
index a81494f..41594dd 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.4
-Release: 18%{?dist}
+Release: 19%{?dist}
License: Python
@@ -393,6 +393,12 @@ Patch294: 00294-define-TLS-cipher-suite-on-build-time.patch
# Fixed upstream:
https://bugs.python.org/issue32185
Patch298: 00298-do-not-send-IP-in-SNI-TLS-extension.patch
+# 00301 #
+# Tools/scripts/pathfix.py: Add -n option for no backup~
+# See:
https://bugzilla.redhat.com/show_bug.cgi?id=1546990
+# Fixed upstream:
https://bugs.python.org/issue32885
+Patch301: 00301-pathfix-add-n-option-for-no-backup.patch
+
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
@@ -693,6 +699,7 @@ sed -r -i s/'_PIP_VERSION =
"[0-9.]+"'/'_PIP_VERSION = "%{pip_version}"'/ Lib/en
%patch292 -p1
%patch294 -p1
%patch298 -p1
+%patch301 -p1
# Remove files that should be generated by the build
@@ -1513,6 +1520,10 @@ CheckPython optimized
# ======================================================
%changelog
+* Fri Mar 16 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-19
+- Add -n option for pathfix.py
+Resolves: rhbz#1546990
+
* Thu Mar 15 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-18
- Fix the py_byte_compile macro to work on Python 2
- Remove the pybytecompile macro file from the flat package
commit e5f4159f8f90b5b2836af3af921a9d80c7df1b86
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Thu Jan 18 16:53:05 2018 +0100
Fix the py_byte_compile macro to work on Python 2
See
https://bugzilla.redhat.com/show_bug.cgi?id=1484993
Inspired by Terje Rsten's workaround from that bugzilla
diff --git a/macros.pybytecompile3.6 b/macros.pybytecompile3.6
index 3968c6e..f319979 100644
--- a/macros.pybytecompile3.6
+++ b/macros.pybytecompile3.6
@@ -3,8 +3,23 @@
# Python's compile_all module only works on directories, and requires a max
# recursion depth
+# Note that the py_byte_compile macro should work for python2 as well
+# Which unfortunately makes the definition more complicated than it should be
+# The condition should be reversed once /usr/bin/python is python3!
+
%py_byte_compile()\
-python_binary="%1"\
-bytecode_compilation_path="%2"\
-find $bytecode_compilation_path -type f -a -name "*.py" -print0 | xargs -0
$python_binary -O -c 'import py_compile, sys; [py_compile.compile(f,
dfile=f.partition("$RPM_BUILD_ROOT")[2], optimize=opt) for opt in range(2) for f
in sys.argv[1:]]' || :\
+py2_byte_compile () {\
+ python_binary="%1"\
+ bytecode_compilation_path="%2"\
+ find $bytecode_compilation_path -type f -a -name "*.py" -print0 | xargs -0
$python_binary -c 'import py_compile, sys; [py_compile.compile(f,
dfile=f.partition("$RPM_BUILD_ROOT")[2]) for f in sys.argv[1:]]' || :\
+ find $bytecode_compilation_path -type f -a -name "*.py" -print0 | xargs -0
$python_binary -O -c 'import py_compile, sys; [py_compile.compile(f,
dfile=f.partition("$RPM_BUILD_ROOT")[2]) for f in sys.argv[1:]]' || :\
+}\
+\
+py3_byte_compile () {\
+ python_binary="%1"\
+ bytecode_compilation_path="%2"\
+ find $bytecode_compilation_path -type f -a -name "*.py" -print0 | xargs -0
$python_binary -O -c 'import py_compile, sys; [py_compile.compile(f,
dfile=f.partition("$RPM_BUILD_ROOT")[2], optimize=opt) for opt in range(2) for f
in sys.argv[1:]]' || :\
+}\
+\
+[[ "%1" == *python3* ]] || py2_byte_compile "%1" "%2"
&& py3_byte_compile "%1" "%2" \
%{nil}
diff --git a/python3.spec b/python3.spec
index b649cd9..a81494f 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.4
-Release: 17%{?dist}
+Release: 18%{?dist}
License: Python
@@ -1513,6 +1513,11 @@ CheckPython optimized
# ======================================================
%changelog
+* Thu Mar 15 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-18
+- Fix the py_byte_compile macro to work on Python 2
+- Remove the pybytecompile macro file from the flat package
+Resolves: rhbz#1484993
+
* Tue Mar 13 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-17
- Do not send IP addresses in SNI TLS extension
commit c9bb114a1dc3fc2216af482d1cdbafe58db45afb
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Tue Mar 13 16:58:18 2018 +0100
Do not send IP addresses in SNI TLS extension
diff --git a/00298-do-not-send-IP-in-SNI-TLS-extension.patch
b/00298-do-not-send-IP-in-SNI-TLS-extension.patch
new file mode 100644
index 0000000..19b6b31
--- /dev/null
+++ b/00298-do-not-send-IP-in-SNI-TLS-extension.patch
@@ -0,0 +1,60 @@
+diff --git a/Modules/_ssl.c b/Modules/_ssl.c
+index df8c6a7d96d8..e8cffef14de0 100644
+--- a/Modules/_ssl.c
++++ b/Modules/_ssl.c
+@@ -55,6 +55,11 @@ static PySocketModule_APIObject PySocketModule;
+ #include <sys/poll.h>
+ #endif
+
++#ifndef MS_WINDOWS
++/* inet_pton */
++#include <arpa/inet.h>
++#endif
++
+ /* Don't warn about deprecated functions */
+ #ifdef __GNUC__
+ #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+@@ -667,8 +672,41 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject *sock,
+ SSL_set_mode(self->ssl, mode);
+
+ #if HAVE_SNI
+- if (server_hostname != NULL)
+- SSL_set_tlsext_host_name(self->ssl, server_hostname);
++ if (server_hostname != NULL) {
++/* Don't send SNI for IP addresses. We cannot simply use inet_aton() and
++ * inet_pton() here. inet_aton() may be linked weakly and inet_pton() isn't
++ * available on all platforms. Use OpenSSL's IP address parser. It's
++ * available since 1.0.2 and LibreSSL since at least 2.3.0. */
++ int send_sni = 1;
++#if OPENSSL_VERSION_NUMBER >= 0x10200000L
++ ASN1_OCTET_STRING *ip = a2i_IPADDRESS(server_hostname);
++ if (ip == NULL) {
++ send_sni = 1;
++ ERR_clear_error();
++ } else {
++ send_sni = 0;
++ ASN1_OCTET_STRING_free(ip);
++ }
++#elif defined(HAVE_INET_PTON)
++#ifdef ENABLE_IPV6
++ char packed[Py_MAX(sizeof(struct in_addr), sizeof(struct in6_addr))];
++#else
++ char packed[sizeof(struct in_addr)];
++#endif /* ENABLE_IPV6 */
++ if (inet_pton(AF_INET, server_hostname, packed)) {
++ send_sni = 0;
++#ifdef ENABLE_IPV6
++ } else if(inet_pton(AF_INET6, server_hostname, packed)) {
++ send_sni = 0;
++#endif /* ENABLE_IPV6 */
++ } else {
++ send_sni = 1;
++ }
++#endif /* HAVE_INET_PTON */
++ if (send_sni) {
++ SSL_set_tlsext_host_name(self->ssl, server_hostname);
++ }
++ }
+ #endif
+
+ /* If the socket is in non-blocking mode or timeout mode, set the BIO
diff --git a/python3.spec b/python3.spec
index 3a6cf71..b649cd9 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.4
-Release: 16%{?dist}
+Release: 17%{?dist}
License: Python
@@ -387,6 +387,12 @@ Patch292: 00292-restore-PyExc_RecursionErrorInst-symbol.patch
# See also:
https://bugzilla.redhat.com/show_bug.cgi?id=1489816
Patch294: 00294-define-TLS-cipher-suite-on-build-time.patch
+# 00298 #
+# The SSL module no longer sends IP addresses in SNI TLS extension on
+# platforms with OpenSSL 1.0.2+ or inet_pton.
+# Fixed upstream:
https://bugs.python.org/issue32185
+Patch298: 00298-do-not-send-IP-in-SNI-TLS-extension.patch
+
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
@@ -686,6 +692,7 @@ sed -r -i s/'_PIP_VERSION =
"[0-9.]+"'/'_PIP_VERSION = "%{pip_version}"'/ Lib/en
%patch291 -p1
%patch292 -p1
%patch294 -p1
+%patch298 -p1
# Remove files that should be generated by the build
@@ -1506,6 +1513,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Tue Mar 13 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-17
+- Do not send IP addresses in SNI TLS extension
+
* Sat Feb 24 2018 Florian Weimer <fweimer(a)redhat.com> - 3.6.4-16
- Rebuild with new LDFLAGS from redhat-rpm-config
commit 6b9e1d1d7ab03dcd54b53bce53c59ffc368ee9c9
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Mon Feb 26 17:28:35 2018 +0100
Replace patch 291 with the upstream fix.
diff --git a/00291-setup-Link-ctypes-against-dl-explicitly.patch
b/00291-setup-Link-ctypes-against-dl-explicitly.patch
index 4bf4801..6539003 100644
--- a/00291-setup-Link-ctypes-against-dl-explicitly.patch
+++ b/00291-setup-Link-ctypes-against-dl-explicitly.patch
@@ -1,25 +1,15 @@
-From aae2ef0bace0e38f4ee5aaa4642aa32450a84216 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Bj=C3=B6rn=20Esser?= <besser82(a)fedoraproject.org>
-Date: Tue, 23 Jan 2018 14:43:43 +0100
-Subject: [PATCH] setup: Link ctypes against dl explicitly
-
----
- setup.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
diff --git a/setup.py b/setup.py
-index c23628a2a9..9e40bb53e6 100644
+index f4f6e4fdb1f0..8536c350fe3a 100644
--- a/setup.py
+++ b/setup.py
-@@ -1935,7 +1935,7 @@ class PyBuildExt(build_ext):
- self.use_system_libffi = False
- include_dirs = []
+@@ -2005,6 +2005,10 @@ def detect_ctypes(self, inc_dirs, lib_dirs):
+ ext.libraries.append(ffi_lib)
+ self.use_system_libffi = True
+
++ if sysconfig.get_config_var('HAVE_LIBDL'):
++ # for dlopen, see bpo-32647
++ ext.libraries.append('dl')
++
+ def _decimal_ext(self):
extra_compile_args = []
-- extra_link_args = []
-+ extra_link_args = ['-ldl']
- sources = ['_ctypes/_ctypes.c',
- '_ctypes/callbacks.c',
- '_ctypes/callproc.c',
---
-2.16.1
-
+ undef_macros = []
diff --git a/python3.spec b/python3.spec
index 9b033c9..3a6cf71 100644
--- a/python3.spec
+++ b/python3.spec
@@ -370,6 +370,7 @@ Patch290:
00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
# Build fails with undefined references to dlopen / dlsym otherwise.
# See:
https://bugzilla.redhat.com/show_bug.cgi?id=1537489
# and:
https://src.fedoraproject.org/rpms/redhat-rpm-config/c/078af19
+# Fixed upstream:
https://bugs.python.org/issue32647
Patch291: 00291-setup-Link-ctypes-against-dl-explicitly.patch
# 00292 #
commit 347e968f54b2eb8693041334ca8abdb3416f97c6
Author: Florian Weimer <fweimer(a)redhat.com>
Date: Sat Feb 24 18:28:44 2018 +0100
Rebuild with new LDFLAGS from redhat-rpm-config
diff --git a/python3.spec b/python3.spec
index 4b032be..9b033c9 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.4
-Release: 15%{?dist}
+Release: 16%{?dist}
License: Python
@@ -1505,6 +1505,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Sat Feb 24 2018 Florian Weimer <fweimer(a)redhat.com> - 3.6.4-16
+- Rebuild with new LDFLAGS from redhat-rpm-config
+
* Wed Feb 21 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-15
- Filter out automatic /usr/bin/python3.X requirement,
recommend the main package from libs instead
commit 3f778c43e364bfcca194d665bab51bdb6a5c1f84
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Wed Feb 21 14:35:54 2018 +0100
Filter out automatic /usr/bin/python3.X requirement...
...recommend the main package from libs instead.
Resolves
https://bugzilla.redhat.com/show_bug.cgi?id=1547131
diff --git a/python3.spec b/python3.spec
index f647c00..4b032be 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.4
-Release: 14%{?dist}
+Release: 15%{?dist}
License: Python
@@ -436,6 +436,14 @@ Requires: python3-setuptools
Requires: python3-pip
%endif
+# This prevents ALL subpackages built from this spec to require
+# /usr/bin/python3*. Granularity per subpackage is impossible.
+# It's intended for the libs package not to drag in the interpreter, see
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1547131
+# All others require %%{name} anyway.
+%global __requires_exclude ^/usr/bin/python3
+
+
# The description used both for the SRPM and the main `python3` subpackage:
%description
Python is an accessible, high-level, dynamically typed, interpreted programming
@@ -474,6 +482,12 @@ Requires: glibc%{?_isa} >= 2.24.90-26
Requires: gdbm%{?_isa} >= 1:1.13
%endif
+# There are files in the standard library that have python shebang.
+# We've filtered the automatic requirement out so libs are installable without
+# the main package. This however makes it pulled in by default.
+# See
https://bugzilla.redhat.com/show_bug.cgi?id=1547131
+Recommends: %{name}%{?_isa} = %{version}-%{release}
+
# For backward compatibility only, remove in F29:
Provides: system-python-libs = %{version}-%{release}
Provides: system-python-libs%{?_isa} = %{version}-%{release}
@@ -1491,6 +1505,11 @@ CheckPython optimized
# ======================================================
%changelog
+* Wed Feb 21 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-15
+- Filter out automatic /usr/bin/python3.X requirement,
+ recommend the main package from libs instead
+Resolves: rhbz#1547131
+
* Thu Feb 15 2018 Iryna Shcherbina <ishcherb(a)redhat.com> - 3.6.4-14
- Remove the python3-tools package (#rhbz 1312030)
- Move /usr/bin/2to3 to python3-devel
commit ffaa0f307889d9e7a3055b1f212182da79f59c5e
Author: Iryna Shcherbina <shcherbina.iryna(a)gmail.com>
Date: Tue Feb 13 16:23:24 2018 +0100
Remove unused Postfix argument from InstallPython
It was used for Systemtap hooks, which were removed recently:
https://src.fedoraproject.org/rpms/python3/c/dd3cb47629970fe54d5dd87825c0...
diff --git a/python3.spec b/python3.spec
index 523364d..f647c00 100644
--- a/python3.spec
+++ b/python3.spec
@@ -819,7 +819,6 @@ InstallPython() {
PyInstSoName=$2
MoreCFlags=$3
LDVersion=$4
- Postfix=$5
# Switch to the directory with this configuration's built files
ConfDir=build/$ConfName
@@ -873,16 +872,14 @@ EOF
InstallPython debug \
%{py_INSTSONAME_debug} \
-O0 \
- %{LDVERSION_debug} \
- -debug
+ %{LDVERSION_debug}
%endif # with debug_build
# Now the optimized build:
InstallPython optimized \
%{py_INSTSONAME_optimized} \
"" \
- %{LDVERSION_optimized} \
- ""
+ %{LDVERSION_optimized}
# Install directories for additional packages
install -d -m 0755 %{buildroot}%{pylibdir}/site-packages/__pycache__
commit 56c7fd9871f10addbf4456faf1ac8d7270996009
Author: Iryna Shcherbina <shcherbina.iryna(a)gmail.com>
Date: Tue Feb 13 13:49:21 2018 +0100
Fix deprecation warning on using imp
In build log fixes the following warning:
/builddir/build/SOURCES/check-pyc-and-pyo-timestamps.py:3: DeprecationWarning: the imp
module is deprecated in favour of importlib; see the module's documentation for
alternative uses
import imp
diff --git a/check-pyc-and-pyo-timestamps.py b/check-pyc-and-pyo-timestamps.py
index 76a3421..262a985 100644
--- a/check-pyc-and-pyo-timestamps.py
+++ b/check-pyc-and-pyo-timestamps.py
@@ -1,6 +1,6 @@
"""Checks if all *.pyc and *.pyo files have later mtime than their *.py
files."""
-import imp
+import importlib.util
import os
import sys
@@ -37,16 +37,18 @@ not_compiled = [
]
failed = 0
+
def bytecode_expected(source):
for f in not_compiled:
if source.endswith(f):
return False
return True
+
compiled = filter(lambda f: bytecode_expected(f), sys.argv[1:])
for f in compiled:
# check both pyo and pyc
- to_check = map(lambda b: imp.cache_from_source(f, b), (True, False))
+ to_check = map(lambda b: importlib.util.cache_from_source(f, b), (True, False))
f_mtime = os.path.getmtime(f)
for c in to_check:
c_mtime = os.path.getmtime(c)
commit daeec838fe3aa8668ffa4ac4cca8e23a8c9aa375
Author: Iryna Shcherbina <shcherbina.iryna(a)gmail.com>
Date: Tue Feb 13 11:16:40 2018 +0100
Remove not used patches
Should have been removed with update to 3.6.3
https://src.fedoraproject.org/rpms/python3/c/47069ff4171cd7fafa42544033be...
diff --git a/00270-fix-ssl-alpn-hook-test.patch b/00270-fix-ssl-alpn-hook-test.patch
deleted file mode 100644
index 97b433e..0000000
--- a/00270-fix-ssl-alpn-hook-test.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
-index d203cdd..c128dae 100644
---- a/Lib/test/test_ssl.py
-+++ b/Lib/test/test_ssl.py
-@@ -3256,8 +3256,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/00271-asyncio-get-default-signal-handler.patch
b/00271-asyncio-get-default-signal-handler.patch
deleted file mode 100644
index 8b1bf77..0000000
--- a/00271-asyncio-get-default-signal-handler.patch
+++ /dev/null
@@ -1,99 +0,0 @@
-diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py
-index 492a84a2313..9746678607c 100644
---- a/Lib/test/test_asyncio/test_events.py
-+++ b/Lib/test/test_asyncio/test_events.py
-@@ -1980,19 +1980,26 @@ def test_subprocess_terminate(self):
-
- @unittest.skipIf(sys.platform == 'win32', "Don't have
SIGHUP")
- def test_subprocess_send_signal(self):
-- prog = os.path.join(os.path.dirname(__file__), 'echo.py')
--
-- connect = self.loop.subprocess_exec(
-- functools.partial(MySubprocessProtocol, self.loop),
-- sys.executable, prog)
-- transp, proto = self.loop.run_until_complete(connect)
-- self.assertIsInstance(proto, MySubprocessProtocol)
-- self.loop.run_until_complete(proto.connected)
--
-- transp.send_signal(signal.SIGHUP)
-- self.loop.run_until_complete(proto.completed)
-- self.assertEqual(-signal.SIGHUP, proto.returncode)
-- transp.close()
-+ # bpo-31034: Make sure that we get the default signal handler (killing
-+ # the process). The parent process may have decided to ignore SIGHUP,
-+ # and signal handlers are inherited.
-+ old_handler = signal.signal(signal.SIGHUP, signal.SIG_DFL)
-+ try:
-+ prog = os.path.join(os.path.dirname(__file__), 'echo.py')
-+
-+ connect = self.loop.subprocess_exec(
-+ functools.partial(MySubprocessProtocol, self.loop),
-+ sys.executable, prog)
-+ transp, proto = self.loop.run_until_complete(connect)
-+ self.assertIsInstance(proto, MySubprocessProtocol)
-+ self.loop.run_until_complete(proto.connected)
-+
-+ transp.send_signal(signal.SIGHUP)
-+ self.loop.run_until_complete(proto.completed)
-+ self.assertEqual(-signal.SIGHUP, proto.returncode)
-+ transp.close()
-+ finally:
-+ signal.signal(signal.SIGHUP, old_handler)
-
- def test_subprocess_stderr(self):
- prog = os.path.join(os.path.dirname(__file__), 'echo2.py')
-diff --git a/Lib/test/test_asyncio/test_subprocess.py
b/Lib/test/test_asyncio/test_subprocess.py
-index 2e14a8a9735..e8822c36698 100644
---- a/Lib/test/test_asyncio/test_subprocess.py
-+++ b/Lib/test/test_asyncio/test_subprocess.py
-@@ -166,25 +166,32 @@ def test_terminate(self):
-
- @unittest.skipIf(sys.platform == 'win32', "Don't have
SIGHUP")
- def test_send_signal(self):
-- code = 'import time; print("sleeping", flush=True);
time.sleep(3600)'
-- args = [sys.executable, '-c', code]
-- create = asyncio.create_subprocess_exec(*args,
-- stdout=subprocess.PIPE,
-- loop=self.loop)
-- proc = self.loop.run_until_complete(create)
--
-- @asyncio.coroutine
-- def send_signal(proc):
-- # basic synchronization to wait until the program is sleeping
-- line = yield from proc.stdout.readline()
-- self.assertEqual(line, b'sleeping\n')
-+ # bpo-31034: Make sure that we get the default signal handler (killing
-+ # the process). The parent process may have decided to ignore SIGHUP,
-+ # and signal handlers are inherited.
-+ old_handler = signal.signal(signal.SIGHUP, signal.SIG_DFL)
-+ try:
-+ code = 'import time; print("sleeping", flush=True);
time.sleep(3600)'
-+ args = [sys.executable, '-c', code]
-+ create = asyncio.create_subprocess_exec(*args,
-+ stdout=subprocess.PIPE,
-+ loop=self.loop)
-+ proc = self.loop.run_until_complete(create)
-
-- proc.send_signal(signal.SIGHUP)
-- returncode = (yield from proc.wait())
-- return returncode
--
-- returncode = self.loop.run_until_complete(send_signal(proc))
-- self.assertEqual(-signal.SIGHUP, returncode)
-+ @asyncio.coroutine
-+ def send_signal(proc):
-+ # basic synchronization to wait until the program is sleeping
-+ line = yield from proc.stdout.readline()
-+ self.assertEqual(line, b'sleeping\n')
-+
-+ proc.send_signal(signal.SIGHUP)
-+ returncode = (yield from proc.wait())
-+ return returncode
-+
-+ returncode = self.loop.run_until_complete(send_signal(proc))
-+ self.assertEqual(-signal.SIGHUP, returncode)
-+ finally:
-+ signal.signal(signal.SIGHUP, old_handler)
-
- def prepare_broken_pipe_test(self):
- # buffer large enough to feed the whole pipe buffer
diff --git a/00272-fix-ftplib-to-reject-newlines.patch
b/00272-fix-ftplib-to-reject-newlines.patch
deleted file mode 100644
index 66486a8..0000000
--- a/00272-fix-ftplib-to-reject-newlines.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From 8c2d4cf092c5f0335e7982392a33927579c4d512 Mon Sep 17 00:00:00 2001
-From: Dong-hee Na <donghee.na92(a)gmail.com>
-Date: Wed, 26 Jul 2017 21:11:25 +0900
-Subject: [PATCH] [3.6] bpo-30119: fix ftplib.FTP.putline() to throw an error
- for a illegal command (#1214) (#2886)
-
----
- Lib/ftplib.py | 2 ++
- Lib/test/test_ftplib.py | 6 +++++-
- Misc/NEWS.d/next/Library/2017-07-26-15-15-00.bpo-30119.DZ6C_S.rst | 2 ++
- 3 files changed, 9 insertions(+), 1 deletion(-)
- create mode 100644 Misc/NEWS.d/next/Library/2017-07-26-15-15-00.bpo-30119.DZ6C_S.rst
-
-diff --git a/Lib/ftplib.py b/Lib/ftplib.py
-index 8f36f537e8a..a02e595cb02 100644
---- a/Lib/ftplib.py
-+++ b/Lib/ftplib.py
-@@ -186,6 +186,8 @@ def sanitize(self, s):
-
- # Internal: send one line to the server, appending CRLF
- def putline(self, line):
-+ if '\r' in line or '\n' in line:
-+ raise ValueError('an illegal newline character should not be
contained')
- line = line + CRLF
- if self.debugging > 1:
- print('*put*', self.sanitize(line))
-diff --git a/Lib/test/test_ftplib.py b/Lib/test/test_ftplib.py
-index 12fabc5e8be..a561e9efa03 100644
---- a/Lib/test/test_ftplib.py
-+++ b/Lib/test/test_ftplib.py
-@@ -484,6 +484,9 @@ def test_sanitize(self):
- self.assertEqual(self.client.sanitize('PASS 12345'), repr('PASS
*****'))
-
- def test_exceptions(self):
-+ self.assertRaises(ValueError, self.client.sendcmd, 'echo 40\r\n0')
-+ self.assertRaises(ValueError, self.client.sendcmd, 'echo 40\n0')
-+ self.assertRaises(ValueError, self.client.sendcmd, 'echo 40\r0')
- self.assertRaises(ftplib.error_temp, self.client.sendcmd, 'echo 400')
- self.assertRaises(ftplib.error_temp, self.client.sendcmd, 'echo 499')
- self.assertRaises(ftplib.error_perm, self.client.sendcmd, 'echo 500')
-@@ -492,7 +495,8 @@ def test_exceptions(self):
-
- def test_all_errors(self):
- exceptions = (ftplib.error_reply, ftplib.error_temp, ftplib.error_perm,
-- ftplib.error_proto, ftplib.Error, OSError, EOFError)
-+ ftplib.error_proto, ftplib.Error, OSError,
-+ EOFError)
- for x in exceptions:
- try:
- raise x('exception not included in all_errors set')
-diff --git a/Misc/NEWS.d/next/Library/2017-07-26-15-15-00.bpo-30119.DZ6C_S.rst
b/Misc/NEWS.d/next/Library/2017-07-26-15-15-00.bpo-30119.DZ6C_S.rst
-new file mode 100644
-index 00000000000..a37d3703842
---- /dev/null
-+++ b/Misc/NEWS.d/next/Library/2017-07-26-15-15-00.bpo-30119.DZ6C_S.rst
-@@ -0,0 +1,2 @@
-+ftplib.FTP.putline() now throws ValueError on commands that contains CR or
-+LF. Patch by Dong-hee Na.
commit 3bbc2a0bdf53b44febb0bbe45d9e5ed284698e02
Author: Iryna Shcherbina <shcherbina.iryna(a)gmail.com>
Date: Mon Feb 12 17:43:19 2018 +0100
Fix rpmlint errors: spelling, tabs (bz#1535596)
diff --git a/python3.spec b/python3.spec
index cc3b0ef..523364d 100644
--- a/python3.spec
+++ b/python3.spec
@@ -127,7 +127,7 @@ License: Python
# has bytecode at:
# foo/__pycache__/bar.cpython-%%{pyshortver}.pyc
# foo/__pycache__/bar.cpython-%%{pyshortver}.opt-1.pyc
-# foo/__pycache__/bar.cpython-%%{pyshortver}.opt-2.pyc
+# foo/__pycache__/bar.cpython-%%{pyshortver}.opt-2.pyc
%global bytecode_suffixes .cpython-%{pyshortver}*.pyc
# Python's configure script defines SOVERSION, and this is used in the Makefile
@@ -439,7 +439,7 @@ Requires: python3-pip
# The description used both for the SRPM and the main `python3` subpackage:
%description
Python is an accessible, high-level, dynamically typed, interpreted programming
-language, designed with an emphasis on code readibility.
+language, designed with an emphasis on code readability.
It includes an extensive standard library, and has a vast ecosystem of
third-party libraries.
@@ -591,7 +591,7 @@ you should use the unittest module from %{name}-libs, or a library
such as
Summary: Debug version of the Python runtime
# The debug build is an all-in-one package version of the regular build, and
-# shares the same .py/.pyc files and directories as the regular build. Hence
+# shares the same .py/.pyc files and directories as the regular build. Hence
# we depend on all of the subpackages of the regular build:
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
@@ -616,7 +616,7 @@ separately.
The debug build shares installation directories with the standard Python
runtime, so that .py and .pyc files can be shared.
Compiled extension modules use a special ABI flag ("d") in the filename,
-so extensions for both verisons can co-exist in the same directory.
+so extensions for both versions can co-exist in the same directory.
%endif # with debug_build
commit d938460ea1a9a638205d427014593e10c5dfa6e0
Author: Iryna Shcherbina <shcherbina.iryna(a)gmail.com>
Date: Thu Jan 18 22:57:38 2018 +0100
Remove the python3-tools package (bz#1312030)
For more details see
https://bugzilla.redhat.com/show_bug.cgi?id=1312030
Scope:
- Remove the python3-tools package and `Tools/` library
- Move /usr/bin/2to3 to python3-devel
- Move /usr/bin/idle and idlelib to python3-idle
- Provide python3-tools from python3-idle to keep upgrades sane
- Remove tests for tools from python3-tests package
Backported from
https://src.fedoraproject.org/rpms/python37/pull-request/4
diff --git a/python3.spec b/python3.spec
index 78317c8..cc3b0ef 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.4
-Release: 13%{?dist}
+Release: 14%{?dist}
License: Python
@@ -505,8 +505,21 @@ Requires: python3-rpm-generators
# TODO change to a specific subpackage once available (#1218294)
Requires: redhat-rpm-config
+Provides: %{name}-2to3 = %{version}-%{release}
+Provides: 2to3 = %{version}-%{release}
+
Conflicts: %{name} < %{version}-%{release}
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1111275
+# /usr/bin/2to3 was moved from python2-tools to python3-tools
+# TODO Remove in Fedora 29
+Conflicts: python2-tools < 2.7.13-17
+Conflicts: python-tools < 2.7.13-17
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1312030
+# /usr/bin/2to3 was moved from python3-tools to python3-devel
+# TODO Remove in Fedora 30
+Conflicts: python3-tools < 3.6.4-14
+
# Shall be removed in Fedora 31
Obsoletes: platform-python-devel < %{platpyver}
@@ -515,32 +528,35 @@ This package contains the header files and configuration needed to
compile
Python extension modules (typically written in C or C++), to embed Python
into other programs, and to make binary distributions for Python libraries.
-It also contains the necessary macros to build RPM packages with Python modules.
+It also contains the necessary macros to build RPM packages with Python modules
+and 2to3 tool, an automatic source converter from Python 2.X.
-%package tools
-Summary: A collection of tools included with Python including 2to3 and idle
+%package idle
+Summary: A basic graphical development environment for Python
Requires: %{name} = %{version}-%{release}
Requires: %{name}-tkinter = %{version}-%{release}
-Provides: %{name}-2to3 = %{version}-%{release}
-Provides: %{name}-idle = %{version}-%{release}
-Provides: 2to3 = %{version}-%{release}
Provides: idle3 = %{version}-%{release}
-#
https://bugzilla.redhat.com/show_bug.cgi?id=1111275
-# /usr/bin/2to3 was moved from here
-# TODO Remove in Fedora 29
-Conflicts: python2-tools < 2.7.13-17
-Conflicts: python-tools < 2.7.13-17
+Provides: %{name}-tools = %{version}-%{release}
+Provides: %{name}-tools%{?_isa} = %{version}-%{release}
+Obsoletes: %{name}-tools < %{version}-%{release}
# Shall be removed in Fedora 31
Obsoletes: platform-python-tools < %{platpyver}
-%description tools
-This package contains several tools included with Python, including:
-- 2to3, an automatic source converter from Python 2.X
-- idle, a basic graphical development environment
+%description idle
+IDLE is Pythons Integrated Development and Learning Environment.
+
+IDLE has the following features: Python shell window (interactive
+interpreter) with colorizing of code input, output, and error messages;
+multi-window text editor with multiple undo, Python colorizing,
+smart indent, call tips, auto completion, and other features;
+search within any window, replace within editor windows, and
+search through multiple files (grep); debugger with persistent
+breakpoints, stepping, and viewing of global and local namespaces;
+configuration, browsers, and other dialogs.
%package tkinter
@@ -558,7 +574,6 @@ the Python programming language.
%package test
Summary: The self-test suite for the main python3 package
Requires: %{name} = %{version}-%{release}
-Requires: %{name}-tools = %{version}-%{release}
# Shall be removed in Fedora 31
Obsoletes: platform-python-test < %{platpyver}
@@ -583,7 +598,7 @@ Requires: %{name}-libs%{?_isa} = %{version}-%{release}
Requires: %{name}-devel%{?_isa} = %{version}-%{release}
Requires: %{name}-test%{?_isa} = %{version}-%{release}
Requires: %{name}-tkinter%{?_isa} = %{version}-%{release}
-Requires: %{name}-tools%{?_isa} = %{version}-%{release}
+Requires: %{name}-idle%{?_isa} = %{version}-%{release}
%description debug
python3-debug provides a version of the Python runtime with numerous debugging
@@ -891,21 +906,6 @@ mkdir -p %{buildroot}%{_datadir}/appdata
cp -a %{SOURCE11} %{buildroot}%{_datadir}/appdata
appstream-util validate-relax --nonet %{buildroot}%{_datadir}/appdata/idle3.appdata.xml
-# Development tools
-install -m755 -d %{buildroot}%{pylibdir}/Tools
-install Tools/README %{buildroot}%{pylibdir}/Tools/
-cp -ar Tools/freeze %{buildroot}%{pylibdir}/Tools/
-cp -ar Tools/i18n %{buildroot}%{pylibdir}/Tools/
-cp -ar Tools/pynche %{buildroot}%{pylibdir}/Tools/
-cp -ar Tools/scripts %{buildroot}%{pylibdir}/Tools/
-
-# Documentation tools
-install -m755 -d %{buildroot}%{pylibdir}/Doc
-cp -ar Doc/tools %{buildroot}%{pylibdir}/Doc/
-
-# Demo scripts
-cp -ar Tools/demo %{buildroot}%{pylibdir}/Tools/
-
# Make sure distutils looks at the right pyconfig.h file
# See
https://bugzilla.redhat.com/show_bug.cgi?id=201434
# Similar for sysconfig: sysconfig.get_config_h_filename tries to locate
@@ -918,22 +918,21 @@ sed -i -e
"s/'pyconfig.h'/'%{_pyconfig_h}'/" \
%{buildroot}%{pylibdir}/distutils/sysconfig.py \
%{buildroot}%{pylibdir}/sysconfig.py
+# Install pathfix.py to bindir
+# See
https://github.com/fedora-python/python-rpm-porting/issues/24
+cp -p Tools/scripts/pathfix.py %{buildroot}%{_bindir}/
+
# Switch all shebangs to refer to the specific Python version.
# This currently only covers files matching ^[a-zA-Z0-9_]+\.py$,
# so handle files named using other naming scheme separately.
LD_LIBRARY_PATH=./build/optimized ./build/optimized/python \
Tools/scripts/pathfix.py \
-i "%{_bindir}/python%{pybasever}" \
- %{buildroot} %{buildroot}%{pylibdir}/Tools/scripts/*-*.py \
- %{buildroot}%{pylibdir}/Tools/pynche/{pynche,pynche.pyw}
-# not covered, also redundant and useless:
-rm %{buildroot}%{pylibdir}/Tools/scripts/{2to3,idle3,pydoc3,pyvenv}
-
-
-# Move pathfix.py to bindir
-# See
https://github.com/fedora-python/python-rpm-porting/issues/24
-mv %{buildroot}%{pylibdir}/Tools/scripts/pathfix.py %{buildroot}%{_bindir}/
+ %{buildroot}
+# Remove tests for python3-tools which was removed in
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1312030
+rm -rf %{buildroot}%{pylibdir}/test/test_tools
# Remove shebang lines from .py files that aren't executable, and
# remove executability from .py files that don't have a shebang line:
@@ -943,10 +942,6 @@ find %{buildroot} -name \*.py \
-perm /u+x,g+x,o+x ! -exec grep -m 1 -q '^#!' {} \; \
-exec chmod a-x {} \; \) \)
-# Remove executable flag from files that shouldn't have it:
-chmod a-x \
- %{buildroot}%{pylibdir}/Tools/README
-
# Get rid of DOS batch files:
find %{buildroot} -name \*.bat -exec rm {} \;
@@ -1134,8 +1129,6 @@ CheckPython optimized
%{pylibdir}/ensurepip/rewheel/__pycache__/*%{bytecode_suffixes}
%endif
-%{pylibdir}/idlelib
-
%dir %{pylibdir}/test/
%dir %{pylibdir}/test/__pycache__/
%dir %{pylibdir}/test/support/
@@ -1311,6 +1304,9 @@ CheckPython optimized
%files devel
%defattr(-,root,root)
+%{_bindir}/2to3
+# TODO: Remove 2to3-3.7 once rebased to 3.7
+%{_bindir}/2to3-%{pybasever}
%{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/*
%exclude %{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/Makefile
%{pylibdir}/distutils/command/wininst-*.exe
@@ -1329,14 +1325,10 @@ CheckPython optimized
%{_rpmconfigdir}/macros.d/macros.pybytecompile%{pybasever}
%{_rpmconfigdir}/macros.d/macros.systempython
-%files tools
+%files idle
%defattr(-,root,root,755)
-%{_bindir}/2to3
-# TODO: Remove 2to3-3.7 once rebased to 3.7
-%{_bindir}/2to3-%{pybasever}
%{_bindir}/idle*
-%{pylibdir}/Tools
-%doc %{pylibdir}/Doc
+%{pylibdir}/idlelib
%{_datadir}/appdata/idle3.appdata.xml
%{_datadir}/applications/idle3.desktop
%{_datadir}/icons/hicolor/*/apps/idle3.*
@@ -1502,6 +1494,12 @@ CheckPython optimized
# ======================================================
%changelog
+* Thu Feb 15 2018 Iryna Shcherbina <ishcherb(a)redhat.com> - 3.6.4-14
+- Remove the python3-tools package (#rhbz 1312030)
+- Move /usr/bin/2to3 to python3-devel
+- Move /usr/bin/idle and idlelib to python3-idle
+- Provide python3-tools from python3-idle
+
* Fri Feb 09 2018 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 3.6.4-13
- Escape macros in %%changelog
commit 2bcebb2b16c28cd4324c31187ba8aa8a1965f29f
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Thu Feb 15 14:34:07 2018 +0100
Fix the name macro in the description 2
diff --git a/python3.spec b/python3.spec
index 6cbcfca..78317c8 100644
--- a/python3.spec
+++ b/python3.spec
@@ -568,7 +568,7 @@ The self-test suite for the Python interpreter.
This is only useful to test Python itself. For testing general Python code,
you should use the unittest module from %{name}-libs, or a library such as
-${name}-pytest or ${name}-nose.
+%{name}-pytest or %{name}-nose.
%if %{with debug_build}
commit 40b8f9ece20b5f9cbaf3d2fd78a39a3158dfa0c5
Author: Igor Gnatenko <ignatenkobrain(a)fedoraproject.org>
Date: Fri Feb 9 09:05:39 2018 +0100
Escape macros in %changelog
Reference:
https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.o...
Signed-off-by: Igor Gnatenko <ignatenkobrain(a)fedoraproject.org>
diff --git a/python3.spec b/python3.spec
index 0dc0dda..6cbcfca 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.4
-Release: 12%{?dist}
+Release: 13%{?dist}
License: Python
@@ -1502,6 +1502,9 @@ CheckPython optimized
# ======================================================
%changelog
+* Fri Feb 09 2018 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 3.6.4-13
+- Escape macros in %%changelog
+
* Fri Feb 02 2018 Michal Cyprian <mcyprian(a)redhat.com> - 3.6.4-12
- Remove sys.executable check from change-user-install-location patch
Resolves: rhbz#1532287
@@ -1775,7 +1778,7 @@ porting ssl and hashlib modules to OpenSSL 1.1.0
- Obsolete and Provide python35 package
* Mon Sep 12 2016 Charalampos Stratakis <cstratak(a)redhat.com> - 3.5.2-3
-- Update %py_byte_compile macro
+- Update %%py_byte_compile macro
- Remove unused configure flags (rhbz#1374357)
* Fri Sep 09 2016 Tomas Orsava <torsava(a)redhat.com> - 3.5.2-2
commit af1dc2628db378d5086f7396efd13f86a04b0bd7
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Thu Feb 8 14:54:08 2018 +0100
Fix the name macro in the description
diff --git a/python3.spec b/python3.spec
index 748e26d..0dc0dda 100644
--- a/python3.spec
+++ b/python3.spec
@@ -443,7 +443,7 @@ language, designed with an emphasis on code readibility.
It includes an extensive standard library, and has a vast ecosystem of
third-party libraries.
-The ${name} package provides the "python3" executable: the reference
+The %{name} package provides the "python3" executable: the reference
interpreter for the Python language, version 3.
The majority of its standard library is provided in the %{name}-libs package,
which should be installed automatically along with %{name}.
commit 08ffd081b5cd033575aaea43a56990ea76ab6248
Author: Michal Cyprian <m.cyprian(a)gmail.com>
Date: Fri Feb 2 12:27:49 2018 +0100
Remove sys.executable check from change-user-install-location patch
Resolves: rhbz#1532287
diff --git a/00251-change-user-install-location.patch
b/00251-change-user-install-location.patch
index 1dcd9f2..4104449 100644
--- a/00251-change-user-install-location.patch
+++ b/00251-change-user-install-location.patch
@@ -1,19 +1,20 @@
diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py
-index 9d31d13..ed44a93 100644
+index 0258d3d..4ebf50a 100644
--- a/Lib/distutils/command/install.py
+++ b/Lib/distutils/command/install.py
-@@ -424,8 +424,18 @@ class install(Command):
+@@ -418,8 +418,19 @@ class install(Command):
raise DistutilsOptionError(
"must not supply exec-prefix without prefix")
- self.prefix = os.path.normpath(sys.prefix)
- self.exec_prefix = os.path.normpath(sys.exec_prefix)
+ # self.prefix is set to sys.prefix + /local/
-+ # if the executable is /usr/bin/python* and RPM build
-+ # is not detected to make pip and distutils install into
-+ # the separate location.
-+ if (sys.executable.startswith("/usr/bin/python")
-+ and 'RPM_BUILD_ROOT' not in os.environ):
++ # if neither RPM build nor virtual environment is
++ # detected to make pip and distutils install packages
++ # into the separate location.
++ if (not (hasattr(sys, 'real_prefix') or
++ sys.prefix != sys.base_prefix) and
++ 'RPM_BUILD_ROOT' not in os.environ):
+ addition = "/local"
+ else:
+ addition = ""
@@ -24,22 +25,21 @@ index 9d31d13..ed44a93 100644
else:
if self.exec_prefix is None:
diff --git a/Lib/site.py b/Lib/site.py
-index 4744eb0..b5fe571 100644
+index 0fc9200..c95202e 100644
--- a/Lib/site.py
+++ b/Lib/site.py
-@@ -326,7 +326,15 @@ def getsitepackages(prefixes=None):
+@@ -322,7 +322,14 @@ def getsitepackages(prefixes=None):
return sitepackages
def addsitepackages(known_paths, prefixes=None):
- """Add site-packages to sys.path"""
-+ """Add site-packages to sys.path.
++ """Add site-packages to sys.path
+
-+ '/usr/local' is included in PREFIXES if the executable is /usr/bin/python*
-+ and RPM build is not detected to make sudo pip installed packages visible.
++ '/usr/local' is included in PREFIXES if RPM build is not detected
++ to make packages installed into this location visible.
+
+ """
-+ if (ENABLE_USER_SITE and sys.executable.startswith("/usr/bin/python")
-+ and 'RPM_BUILD_ROOT' not in os.environ):
++ if ENABLE_USER_SITE and 'RPM_BUILD_ROOT' not in os.environ:
+ PREFIXES.insert(0, "/usr/local")
for sitedir in getsitepackages(prefixes):
if os.path.isdir(sitedir):
diff --git a/python3.spec b/python3.spec
index 8765231..748e26d 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.4
-Release: 11%{?dist}
+Release: 12%{?dist}
License: Python
@@ -1502,6 +1502,10 @@ CheckPython optimized
# ======================================================
%changelog
+* Fri Feb 02 2018 Michal Cyprian <mcyprian(a)redhat.com> - 3.6.4-12
+- Remove sys.executable check from change-user-install-location patch
+Resolves: rhbz#1532287
+
* Thu Feb 01 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-11
- Define TLS cipher suite on build time.
commit 14deb52d02decabd7dda8bcfa01e628031f03414
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Mon Feb 5 17:50:53 2018 +0100
Remove obsolete scriptlets that are now automatic.
diff --git a/python3.spec b/python3.spec
index e9465a6..8765231 100644
--- a/python3.spec
+++ b/python3.spec
@@ -1077,26 +1077,6 @@ CheckPython optimized
%endif # with tests
-# ======================================================
-# Scriptlets
-# ======================================================
-
-%post libs -p /sbin/ldconfig
-
-%postun libs -p /sbin/ldconfig
-
-%post
-/bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null || :
-
-%postun
-if [ $1 -eq 0 ] ; then
- /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null
- /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
-fi
-
-%posttrans
-/usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
-
%files
%defattr(-, root, root)
%license LICENSE
commit 969d51434e2479639d62c2b03fd51df7403eb722
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Thu Feb 1 11:20:15 2018 +0100
Define TLS cipher suite on build time
diff --git a/00294-define-TLS-cipher-suite-on-build-time.patch
b/00294-define-TLS-cipher-suite-on-build-time.patch
new file mode 100644
index 0000000..1aa348c
--- /dev/null
+++ b/00294-define-TLS-cipher-suite-on-build-time.patch
@@ -0,0 +1,228 @@
+diff --git a/Lib/ssl.py b/Lib/ssl.py
+index 1f3a31a..b54a684 100644
+--- a/Lib/ssl.py
++++ b/Lib/ssl.py
+@@ -116,6 +116,7 @@ except ImportError:
+
+
+ from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN, HAS_ALPN, HAS_TLSv1_3
++from _ssl import _DEFAULT_CIPHERS
+ from _ssl import _OPENSSL_API_VERSION
+
+
+@@ -174,48 +175,7 @@ else:
+ CHANNEL_BINDING_TYPES = []
+
+
+-# Disable weak or insecure ciphers by default
+-# (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
+-# * Prefer AES-GCM over ChaCha20 because most platforms have AES-NI
+-# (ChaCha20 needs OpenSSL 1.1.0 or patched 1.0.2)
+-# * Prefer any AES-GCM and ChaCha20 over any AES-CBC for better
+-# performance and security
+-# * Then Use HIGH cipher suites as a fallback
+-# * 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'
+- )
+-
+-# 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
+-# * Prefer AES-GCM over ChaCha20 because most platforms have AES-NI
+-# * Prefer any AES-GCM and ChaCha20 over any AES-CBC for better
+-# performance and security
+-# * Then Use HIGH cipher suites as a fallback
+-# * 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'
+-)
++_RESTRICTED_SERVER_CIPHERS = _DEFAULT_CIPHERS
+
+
+ class CertificateError(ValueError):
+@@ -389,8 +349,6 @@ class SSLContext(_SSLContext):
+
+ def __new__(cls, protocol=PROTOCOL_TLS, *args, **kwargs):
+ self = _SSLContext.__new__(cls, protocol)
+- if protocol != _SSLv2_IF_EXISTS:
+- self.set_ciphers(_DEFAULT_CIPHERS)
+ return self
+
+ def __init__(self, protocol=PROTOCOL_TLS):
+@@ -505,8 +463,6 @@ def create_default_context(purpose=Purpose.SERVER_AUTH, *,
cafile=None,
+ # verify certs and host name in client mode
+ context.verify_mode = CERT_REQUIRED
+ context.check_hostname = True
+- elif purpose == Purpose.CLIENT_AUTH:
+- context.set_ciphers(_RESTRICTED_SERVER_CIPHERS)
+
+ if cafile or capath or cadata:
+ context.load_verify_locations(cafile, capath, cadata)
+diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
+index 54644e1..799100c 100644
+--- a/Lib/test/test_ssl.py
++++ b/Lib/test/test_ssl.py
+@@ -18,6 +18,7 @@ import asyncore
+ import weakref
+ import platform
+ import functools
++import sysconfig
+ try:
+ import ctypes
+ except ImportError:
+@@ -36,7 +37,7 @@ PROTOCOLS = sorted(ssl._PROTOCOL_NAMES)
+ HOST = support.HOST
+ IS_LIBRESSL = ssl.OPENSSL_VERSION.startswith('LibreSSL')
+ IS_OPENSSL_1_1 = not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (1, 1, 0)
+-
++PY_SSL_DEFAULT_CIPHERS = sysconfig.get_config_var('PY_SSL_DEFAULT_CIPHERS')
+
+ def data_file(*name):
+ return os.path.join(os.path.dirname(__file__), *name)
+@@ -889,6 +890,19 @@ class ContextTests(unittest.TestCase):
+ with self.assertRaisesRegex(ssl.SSLError, "No cipher can be
selected"):
+ ctx.set_ciphers("^$:,;?*'dorothyx")
+
++ @unittest.skipUnless(PY_SSL_DEFAULT_CIPHERS == 1,
++ "Test applies only to Python default ciphers")
++ def test_python_ciphers(self):
++ ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
++ ciphers = ctx.get_ciphers()
++ for suite in ciphers:
++ name = suite['name']
++ self.assertNotIn("PSK", name)
++ self.assertNotIn("SRP", name)
++ self.assertNotIn("MD5", name)
++ self.assertNotIn("RC4", name)
++ self.assertNotIn("3DES", name)
++
+ @unittest.skipIf(ssl.OPENSSL_VERSION_INFO < (1, 0, 2, 0, 0), 'OpenSSL too
old')
+ def test_get_ciphers(self):
+ ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
+diff --git a/Modules/_ssl.c b/Modules/_ssl.c
+index df8c6a7..e23a569 100644
+--- a/Modules/_ssl.c
++++ b/Modules/_ssl.c
+@@ -206,6 +206,31 @@ SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *s)
+
+ #endif /* OpenSSL < 1.1.0 or LibreSSL */
+
++/* Default cipher suites */
++#ifndef PY_SSL_DEFAULT_CIPHERS
++#define PY_SSL_DEFAULT_CIPHERS 1
++#endif
++
++#if PY_SSL_DEFAULT_CIPHERS == 0
++ #ifndef PY_SSL_DEFAULT_CIPHER_STRING
++ #error "Py_SSL_DEFAULT_CIPHERS 0 needs Py_SSL_DEFAULT_CIPHER_STRING"
++ #endif
++#elif PY_SSL_DEFAULT_CIPHERS == 1
++/* Python custom selection of sensible ciper suites
++ * DEFAULT: OpenSSL's default cipher list. Since 1.0.2 the list is in sensible
order.
++ * !aNULL:!eNULL: really no NULL ciphers
++ * !MD5:!3DES:!DES:!RC4:!IDEA:!SEED: no weak or broken algorithms on old OpenSSL
versions.
++ * !aDSS: no authentication with discrete logarithm DSA algorithm
++ * !SRP:!PSK: no secure remote password or pre-shared key authentication
++ */
++ #define PY_SSL_DEFAULT_CIPHER_STRING
"DEFAULT:!aNULL:!eNULL:!MD5:!3DES:!DES:!RC4:!IDEA:!SEED:!aDSS:!SRP:!PSK"
++#elif PY_SSL_DEFAULT_CIPHERS == 2
++/* Ignored in SSLContext constructor, only used to as _ssl.DEFAULT_CIPHER_STRING */
++ #define PY_SSL_DEFAULT_CIPHER_STRING SSL_DEFAULT_CIPHER_LIST
++#else
++ #error "Unsupported PY_SSL_DEFAULT_CIPHERS"
++#endif
++
+
+ enum py_ssl_error {
+ /* these mirror ssl.h */
+@@ -2739,7 +2764,12 @@ _ssl__SSLContext_impl(PyTypeObject *type, int proto_version)
+ /* A bare minimum cipher list without completely 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");
++#if PY_SSL_DEFAULT_CIPHERS == 2
++ /* stick to OpenSSL's default settings */
++ result = 1;
++#else
++ result = SSL_CTX_set_cipher_list(ctx, PY_SSL_DEFAULT_CIPHER_STRING);
++#endif
+ } else {
+ /* SSLv2 needs MD5 */
+ result = SSL_CTX_set_cipher_list(ctx, "HIGH:!aNULL:!eNULL");
+@@ -5279,6 +5309,9 @@ PyInit__ssl(void)
+ (PyObject *)&PySSLSession_Type) != 0)
+ return NULL;
+
++ PyModule_AddStringConstant(m, "_DEFAULT_CIPHERS",
++ PY_SSL_DEFAULT_CIPHER_STRING);
++
+ PyModule_AddIntConstant(m, "SSL_ERROR_ZERO_RETURN",
+ PY_SSL_ERROR_ZERO_RETURN);
+ PyModule_AddIntConstant(m, "SSL_ERROR_WANT_READ",
+diff --git a/configure.ac b/configure.ac
+index 7ea62f8..4b42393 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -5555,6 +5555,42 @@ if test "$have_getrandom" = yes; then
+ [Define to 1 if the getrandom() function is available])
+ fi
+
++# ssl module default cipher suite string
++AH_TEMPLATE(PY_SSL_DEFAULT_CIPHERS,
++ [Default cipher suites list for ssl module.
++ 1: Python's preferred selection, 2: leave OpenSSL defaults untouched, 0: custom
string])
++AH_TEMPLATE(PY_SSL_DEFAULT_CIPHER_STRING,
++ [Cipher suite string for PY_SSL_DEFAULT_CIPHERS=0]
++)
++AC_MSG_CHECKING(for --with-ssl-default-suites)
++AC_ARG_WITH(ssl-default-suites,
++
AS_HELP_STRING([--with-ssl-default-suites=@<:@python|openssl|STRING@:>@],
++ [Override default cipher suites string,
++ python: use Python's preferred selection (default),
++ openssl: leave OpenSSL's defaults untouched,
++ STRING: use a custom string,
++ PROTOCOL_SSLv2 ignores the setting]),
++[
++AC_MSG_RESULT($withval)
++case "$withval" in
++ python)
++ AC_DEFINE(PY_SSL_DEFAULT_CIPHERS, 1)
++ ;;
++ openssl)
++ AC_DEFINE(PY_SSL_DEFAULT_CIPHERS, 2)
++ ;;
++ *)
++ AC_DEFINE(PY_SSL_DEFAULT_CIPHERS, 0)
++ AC_DEFINE_UNQUOTED(PY_SSL_DEFAULT_CIPHER_STRING, "$withval")
++ ;;
++esac
++],
++[
++AC_MSG_RESULT(python)
++AC_DEFINE(PY_SSL_DEFAULT_CIPHERS, 1)
++])
++
++
+ # generate output files
+ AC_CONFIG_FILES(Makefile.pre Modules/Setup.config Misc/python.pc Misc/python-config.sh)
+ AC_CONFIG_FILES([Modules/ld_so_aix], [chmod +x Modules/ld_so_aix])
diff --git a/python3.spec b/python3.spec
index f8a1509..e9465a6 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.4
-Release: 10%{?dist}
+Release: 11%{?dist}
License: Python
@@ -378,6 +378,14 @@ Patch291: 00291-setup-Link-ctypes-against-dl-explicitly.patch
# Reported upstream:
https://bugs.python.org/issue30697
Patch292: 00292-restore-PyExc_RecursionErrorInst-symbol.patch
+# 00294 #
+# Define TLS cipher suite on build time depending
+# on the OpenSSL default cipher suite selection.
+# Fixed upstream on CPython's 3.7 branch:
+#
https://bugs.python.org/issue31429
+# See also:
https://bugzilla.redhat.com/show_bug.cgi?id=1489816
+Patch294: 00294-define-TLS-cipher-suite-on-build-time.patch
+
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
@@ -647,6 +655,7 @@ sed -r -i s/'_PIP_VERSION =
"[0-9.]+"'/'_PIP_VERSION = "%{pip_version}"'/ Lib/en
%patch290 -p1
%patch291 -p1
%patch292 -p1
+%patch294 -p1
# Remove files that should be generated by the build
@@ -718,6 +727,7 @@ BuildPython() {
--enable-loadable-sqlite-extensions \
--with-dtrace \
--with-lto \
+ --with-ssl-default-suites=openssl \
%if %{with valgrind}
--with-valgrind \
%endif
@@ -1512,6 +1522,9 @@ fi
# ======================================================
%changelog
+* Thu Feb 01 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-11
+- Define TLS cipher suite on build time.
+
* Wed Jan 31 2018 Tomas Orsava <torsava(a)redhat.com> - 3.6.4-10
- Disable test_gdb for all arches and test_buffer for ppc64le in anticipation
of the F28 mass rebuild
commit be049209131847f4fcb28b67ea7c04134d9c4f9e
Author: Tomas Orsava <torsava(a)redhat.com>
Date: Wed Jan 31 15:16:02 2018 +0100
Disable test_gdb for all arches and test_buffer for ppc64le in anticipation of the F28
mass rebuild
- Re-enable these tests after the mass rebuild when they can be properly
addressed
diff --git a/python3.spec b/python3.spec
index 5ba3068..f8a1509 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.4
-Release: 9%{?dist}
+Release: 10%{?dist}
License: Python
@@ -1041,14 +1041,15 @@ CheckPython() {
-wW --slowest --findleaks \
-x test_distutils \
-x test_bdist_rpm \
+ -x test_gdb \
%ifarch ppc64le aarch64
-x test_faulthandler \
%endif
%ifarch %{mips64}
-x test_ctypes \
%endif
- %ifarch %{power64} s390 s390x armv7hl aarch64 %{mips}
- -x test_gdb
+ %ifarch ppc64le
+ -x test_buffer \
%endif
echo FINISHED: CHECKING OF PYTHON FOR CONFIGURATION: $ConfName
@@ -1511,6 +1512,12 @@ fi
# ======================================================
%changelog
+* Wed Jan 31 2018 Tomas Orsava <torsava(a)redhat.com> - 3.6.4-10
+- Disable test_gdb for all arches and test_buffer for ppc64le in anticipation
+ of the F28 mass rebuild
+- Re-enable these tests after the mass rebuild when they can be properly
+ addressed
+
* Tue Jan 23 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-9
- Restore the PyExc_RecursionErrorInst public symbol
commit d623e929ca5b17f310a4c437c1a497c7af1b2316
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Tue Jan 23 17:19:17 2018 +0100
Restore the PyExc_RecursionErrorInst public symbol
diff --git a/00292-restore-PyExc_RecursionErrorInst-symbol.patch
b/00292-restore-PyExc_RecursionErrorInst-symbol.patch
new file mode 100644
index 0000000..89671f8
--- /dev/null
+++ b/00292-restore-PyExc_RecursionErrorInst-symbol.patch
@@ -0,0 +1,106 @@
+diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst
+index 847b50140a6..570dc3ed6fe 100644
+--- a/Doc/whatsnew/3.6.rst
++++ b/Doc/whatsnew/3.6.rst
+@@ -1852,10 +1852,10 @@ Build and C API Changes
+ * The :c:func:`PyUnicode_FSConverter` and :c:func:`PyUnicode_FSDecoder`
+ functions will now accept :term:`path-like objects <path-like object>`.
+
+-* The ``PyExc_RecursionErrorInst`` singleton that was part of the public API
+- has been removed as its members being never cleared may cause a segfault
+- during finalization of the interpreter. Contributed by Xavier de Gaye in
+- :issue:`22898` and :issue:`30697`.
++* The ``PyExc_RecursionErrorInst`` singleton is not used anymore as its members
++ being never cleared may cause a segfault during finalization of the
++ interpreter. Contributed by Xavier de Gaye in :issue:`22898` and
++ :issue:`30697`.
+
+
+ Other Improvements
+diff --git a/Include/pyerrors.h b/Include/pyerrors.h
+index c28c1373f82..8c1dbc5047b 100644
+--- a/Include/pyerrors.h
++++ b/Include/pyerrors.h
+@@ -219,6 +219,8 @@ PyAPI_DATA(PyObject *) PyExc_IOError;
+ PyAPI_DATA(PyObject *) PyExc_WindowsError;
+ #endif
+
++PyAPI_DATA(PyObject *) PyExc_RecursionErrorInst;
++
+ /* Predefined warning categories */
+ PyAPI_DATA(PyObject *) PyExc_Warning;
+ PyAPI_DATA(PyObject *) PyExc_UserWarning;
+diff --git a/Misc/NEWS.d/next/C API/2017-12-20-15-23-06.bpo-30697.v9FmgG.rst
b/Misc/NEWS.d/next/C API/2017-12-20-15-23-06.bpo-30697.v9FmgG.rst
+new file mode 100644
+index 00000000000..28f74ad4f30
+--- /dev/null
++++ b/Misc/NEWS.d/next/C API/2017-12-20-15-23-06.bpo-30697.v9FmgG.rst
+@@ -0,0 +1 @@
++Restore PyExc_RecursionErrorInst in 3.6
+diff --git a/Objects/exceptions.c b/Objects/exceptions.c
+index df4899372a5..271e293e325 100644
+--- a/Objects/exceptions.c
++++ b/Objects/exceptions.c
+@@ -2430,6 +2430,12 @@ SimpleExtendsException(PyExc_Warning, ResourceWarning,
+
+
+
++/* Pre-computed RecursionError instance for when recursion depth is reached.
++ Meant to be used when normalizing the exception for exceeding the recursion
++ depth will cause its own infinite recursion.
++*/
++PyObject *PyExc_RecursionErrorInst = NULL;
++
+ #define PRE_INIT(TYPE) \
+ if (!(_PyExc_ ## TYPE.tp_flags & Py_TPFLAGS_READY)) { \
+ if (PyType_Ready(&_PyExc_ ## TYPE) < 0) \
+@@ -2691,11 +2697,37 @@ _PyExc_Init(PyObject *bltinmod)
+ ADD_ERRNO(TimeoutError, ETIMEDOUT);
+
+ preallocate_memerrors();
++
++ if (!PyExc_RecursionErrorInst) {
++ PyExc_RecursionErrorInst = BaseException_new(&_PyExc_RecursionError, NULL,
NULL);
++ if (!PyExc_RecursionErrorInst)
++ Py_FatalError("Cannot pre-allocate RecursionError instance for "
++ "recursion errors");
++ else {
++ PyBaseExceptionObject *err_inst =
++ (PyBaseExceptionObject *)PyExc_RecursionErrorInst;
++ PyObject *args_tuple;
++ PyObject *exc_message;
++ exc_message = PyUnicode_FromString("maximum recursion depth
exceeded");
++ if (!exc_message)
++ Py_FatalError("cannot allocate argument for RecursionError "
++ "pre-allocation");
++ args_tuple = PyTuple_Pack(1, exc_message);
++ if (!args_tuple)
++ Py_FatalError("cannot allocate tuple for RecursionError "
++ "pre-allocation");
++ Py_DECREF(exc_message);
++ if (BaseException_init(err_inst, args_tuple, NULL))
++ Py_FatalError("init of pre-allocated RecursionError failed");
++ Py_DECREF(args_tuple);
++ }
++ }
+ }
+
+ void
+ _PyExc_Fini(void)
+ {
++ Py_CLEAR(PyExc_RecursionErrorInst);
+ free_preallocated_memerrors();
+ Py_CLEAR(errnomap);
+ }
+diff --git a/PC/python3.def b/PC/python3.def
+index 4fc4a6814ee..ff70718fc37 100644
+--- a/PC/python3.def
++++ b/PC/python3.def
+@@ -224,6 +224,7 @@ EXPORTS
+ PyExc_PermissionError=python36.PyExc_PermissionError DATA
+ PyExc_ProcessLookupError=python36.PyExc_ProcessLookupError DATA
+ PyExc_RecursionError=python36.PyExc_RecursionError DATA
++ PyExc_RecursionErrorInst=python36.PyExc_RecursionErrorInst DATA
+ PyExc_ReferenceError=python36.PyExc_ReferenceError DATA
+ PyExc_ResourceWarning=python36.PyExc_ResourceWarning DATA
+ PyExc_RuntimeError=python36.PyExc_RuntimeError DATA
diff --git a/python3.spec b/python3.spec
index 73cb6e2..5ba3068 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.4
-Release: 8%{?dist}
+Release: 9%{?dist}
License: Python
@@ -372,6 +372,12 @@ Patch290:
00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
# and:
https://src.fedoraproject.org/rpms/redhat-rpm-config/c/078af19
Patch291: 00291-setup-Link-ctypes-against-dl-explicitly.patch
+# 00292 #
+# Restore the public PyExc_RecursionErrorInst symbol that was removed
+# from the 3.6.4 release upstream.
+# Reported upstream:
https://bugs.python.org/issue30697
+Patch292: 00292-restore-PyExc_RecursionErrorInst-symbol.patch
+
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
@@ -640,6 +646,7 @@ sed -r -i s/'_PIP_VERSION =
"[0-9.]+"'/'_PIP_VERSION = "%{pip_version}"'/ Lib/en
%patch289 -p1
%patch290 -p1
%patch291 -p1
+%patch292 -p1
# Remove files that should be generated by the build
@@ -1504,6 +1511,9 @@ fi
# ======================================================
%changelog
+* Tue Jan 23 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-9
+- Restore the PyExc_RecursionErrorInst public symbol
+
* Tue Jan 23 2018 Bjrn Esser <besser82(a)fedoraproject.org> - 3.6.4-8
- Add patch to explicitly link _ctypes module with -ldl (#1537489)
- Refactored patch for libxcrypt
commit 434d46925934a7254c9de8bb4d2008546902d49a
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Tue Jan 23 17:18:20 2018 +0100
Synced patch for libxcrypt with upstream
diff --git a/00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
b/00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
index 38aa7de..c5d768b 100644
--- a/00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
+++ b/00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
@@ -1,45 +1,28 @@
-From bb9a8332e54fd6d2b0d4767b55c7df9a36ad3022 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Bj=C3=B6rn=20Esser?= <besser82(a)fedoraproject.org>
-Date: Sun, 21 Jan 2018 18:55:31 +0100
-Subject: [PATCH] cryptmodule: Include <crypt.h> for declaration of crypt() if
- needed
-
-Not every target system may provide a crypt() function in its stdlibc
-and may use an external or replacement library, like libxcrypt, for
-providing such functions.
----
- Modules/_cryptmodule.c | 4 ++++
- configure.ac | 2 +-
- 2 files changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/Modules/_cryptmodule.c b/Modules/_cryptmodule.c
-index 58d179e6a3..0031037b64 100644
---- a/Modules/_cryptmodule.c
-+++ b/Modules/_cryptmodule.c
-@@ -5,6 +5,10 @@
-
- #include <sys/types.h>
-
-+#if defined(HAVE_CRYPT_H)
+diff --git a/Include/Python.h b/Include/Python.h
+index dd595ea5e4c..1feb1531cc9 100644
+--- a/Include/Python.h
++++ b/Include/Python.h
+@@ -35,6 +35,9 @@
+ #ifdef HAVE_UNISTD_H
+ #include <unistd.h>
+ #endif
++#ifdef HAVE_CRYPT_H
+#include <crypt.h>
+#endif
-+
- /* Module crypt */
- /*[clinic input]
+ /* For size_t? */
+ #ifdef HAVE_STDDEF_H
diff --git a/configure.ac b/configure.ac
-index 39e2e8e769..79397a7a24 100644
+index 03b0f501aff..15ef872a53a 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -2049,7 +2049,7 @@ AC_CHECK_HEADERS(asm/types.h conio.h direct.h dlfcn.h errno.h \
+@@ -2041,7 +2041,7 @@ dnl AC_MSG_RESULT($cpp_type)
+
+ # checks for header files
+ AC_HEADER_STDC
+-AC_CHECK_HEADERS(asm/types.h conio.h direct.h dlfcn.h errno.h \
++AC_CHECK_HEADERS(asm/types.h crypt.h conio.h direct.h dlfcn.h errno.h \
fcntl.h grp.h \
ieeefp.h io.h langinfo.h libintl.h process.h pthread.h \
sched.h shadow.h signal.h stropts.h termios.h \
--unistd.h utime.h \
-+unistd.h crypt.h utime.h \
- poll.h sys/devpoll.h sys/epoll.h sys/poll.h \
- sys/audioio.h sys/xattr.h sys/bsdtty.h sys/event.h sys/file.h sys/ioctl.h \
- sys/kern_control.h sys/loadavg.h sys/lock.h sys/mkdev.h sys/modem.h \
---
-2.16.1
-
+
diff --git a/python3.spec b/python3.spec
index b1cc9f6..73cb6e2 100644
--- a/python3.spec
+++ b/python3.spec
@@ -363,7 +363,7 @@ Patch289: 00289-fix-nis-compilation.patch
# Not every target system may provide a crypt() function in its stdlibc
# and may use an external or replacement library, like libxcrypt, for
# providing such functions.
-# Reported upstream:
https://bugs.python.org/issue32635
+# Fixed upstream:
https://bugs.python.org/issue32635
Patch290: 00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
# 00291 #
commit ce6ec4f16ac18a3f451b036bb6743fdeebb8813c
Author: Bjrn Esser <besser82(a)fedoraproject.org>
Date: Tue Jan 23 15:25:04 2018 +0100
Add patch to explicitly link _ctypes module with -ldl (#1537489)
Refactored patch for libxcrypt
Re-enable strict symbol checks in the link editor
diff --git a/00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
b/00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
index be62939..38aa7de 100644
--- a/00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
+++ b/00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
@@ -1,4 +1,4 @@
-From 6811089dbf34a2cef9799e1cb6d63b863b58739f Mon Sep 17 00:00:00 2001
+From bb9a8332e54fd6d2b0d4767b55c7df9a36ad3022 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Esser?= <besser82(a)fedoraproject.org>
Date: Sun, 21 Jan 2018 18:55:31 +0100
Subject: [PATCH] cryptmodule: Include <crypt.h> for declaration of crypt() if
@@ -9,18 +9,18 @@ and may use an external or replacement library, like libxcrypt, for
providing such functions.
---
Modules/_cryptmodule.c | 4 ++++
- configure.ac | 4 ++++
- 2 files changed, 8 insertions(+)
+ configure.ac | 2 +-
+ 2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/Modules/_cryptmodule.c b/Modules/_cryptmodule.c
-index 58d179e6a3..bb26d83f55 100644
+index 58d179e6a3..0031037b64 100644
--- a/Modules/_cryptmodule.c
+++ b/Modules/_cryptmodule.c
@@ -5,6 +5,10 @@
#include <sys/types.h>
-+#if defined(HAVE_XCRYPT)
++#if defined(HAVE_CRYPT_H)
+#include <crypt.h>
+#endif
+
@@ -28,20 +28,18 @@ index 58d179e6a3..bb26d83f55 100644
/*[clinic input]
diff --git a/configure.ac b/configure.ac
-index 39e2e8e769..129c198c15 100644
+index 39e2e8e769..79397a7a24 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -2816,6 +2816,10 @@ LIBS="$withval $LIBS"
-
- PKG_PROG_PKG_CONFIG
-
-+# Check for libxcrypt is present.
-+PKG_CHECK_MODULES([libxcrypt], libxcrypt,
-+ AC_DEFINE([HAVE_XCRYPT], 1, [Define to 1 if libxcrypt is found.]), [])
-+
- # Check for use of the system expat library
- AC_MSG_CHECKING(for --with-system-expat)
- AC_ARG_WITH(system_expat,
+@@ -2049,7 +2049,7 @@ AC_CHECK_HEADERS(asm/types.h conio.h direct.h dlfcn.h errno.h \
+ fcntl.h grp.h \
+ ieeefp.h io.h langinfo.h libintl.h process.h pthread.h \
+ sched.h shadow.h signal.h stropts.h termios.h \
+-unistd.h utime.h \
++unistd.h crypt.h utime.h \
+ poll.h sys/devpoll.h sys/epoll.h sys/poll.h \
+ sys/audioio.h sys/xattr.h sys/bsdtty.h sys/event.h sys/file.h sys/ioctl.h \
+ sys/kern_control.h sys/loadavg.h sys/lock.h sys/mkdev.h sys/modem.h \
--
-2.16.0
+2.16.1
diff --git a/00291-setup-Link-ctypes-against-dl-explicitly.patch
b/00291-setup-Link-ctypes-against-dl-explicitly.patch
new file mode 100644
index 0000000..4bf4801
--- /dev/null
+++ b/00291-setup-Link-ctypes-against-dl-explicitly.patch
@@ -0,0 +1,25 @@
+From aae2ef0bace0e38f4ee5aaa4642aa32450a84216 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Bj=C3=B6rn=20Esser?= <besser82(a)fedoraproject.org>
+Date: Tue, 23 Jan 2018 14:43:43 +0100
+Subject: [PATCH] setup: Link ctypes against dl explicitly
+
+---
+ setup.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/setup.py b/setup.py
+index c23628a2a9..9e40bb53e6 100644
+--- a/setup.py
++++ b/setup.py
+@@ -1935,7 +1935,7 @@ class PyBuildExt(build_ext):
+ self.use_system_libffi = False
+ include_dirs = []
+ extra_compile_args = []
+- extra_link_args = []
++ extra_link_args = ['-ldl']
+ sources = ['_ctypes/_ctypes.c',
+ '_ctypes/callbacks.c',
+ '_ctypes/callproc.c',
+--
+2.16.1
+
diff --git a/python3.spec b/python3.spec
index 9f1b88a..b1cc9f6 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.4
-Release: 7%{?dist}
+Release: 8%{?dist}
License: Python
@@ -146,11 +146,6 @@ License: Python
# on files that test invalid syntax.
%undefine py_auto_byte_compile
-# Disable strict symbol checks in the link editor.
-# See:
https://src.fedoraproject.org/rpms/redhat-rpm-config/c/078af192613e1beec3...
-#
https://bugzilla.redhat.com/show_bug.cgi?id=1537489
-%undefine _strict_symbol_defs_build
-
# For multilib support, files that are different between 32- and 64-bit arches
# need different filenames. Use "64" or "32" according to the word
size.
# Currently, the best way to determine an architecture's word size happens to
@@ -371,6 +366,12 @@ Patch289: 00289-fix-nis-compilation.patch
# Reported upstream:
https://bugs.python.org/issue32635
Patch290: 00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
+# 00291 #
+# Build fails with undefined references to dlopen / dlsym otherwise.
+# See:
https://bugzilla.redhat.com/show_bug.cgi?id=1537489
+# and:
https://src.fedoraproject.org/rpms/redhat-rpm-config/c/078af19
+Patch291: 00291-setup-Link-ctypes-against-dl-explicitly.patch
+
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
@@ -638,6 +639,7 @@ sed -r -i s/'_PIP_VERSION =
"[0-9.]+"'/'_PIP_VERSION = "%{pip_version}"'/ Lib/en
%patch274 -p1
%patch289 -p1
%patch290 -p1
+%patch291 -p1
# Remove files that should be generated by the build
@@ -1502,6 +1504,11 @@ fi
# ======================================================
%changelog
+* Tue Jan 23 2018 Bjrn Esser <besser82(a)fedoraproject.org> - 3.6.4-8
+- Add patch to explicitly link _ctypes module with -ldl (#1537489)
+- Refactored patch for libxcrypt
+- Re-enable strict symbol checks in the link editor
+
* Mon Jan 22 2018 Bjrn Esser <besser82(a)fedoraproject.org> - 3.6.4-7
- Add patch for libxcrypt
- Disable strict symbol checks in the link editor
commit 5a8bf97593a4db85208e905cb543728234fb4412
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Tue Jan 23 13:22:12 2018 +0100
Disable strict symbol checks in the link editor.
diff --git a/python3.spec b/python3.spec
index d86a696..9f1b88a 100644
--- a/python3.spec
+++ b/python3.spec
@@ -146,6 +146,11 @@ License: Python
# on files that test invalid syntax.
%undefine py_auto_byte_compile
+# Disable strict symbol checks in the link editor.
+# See:
https://src.fedoraproject.org/rpms/redhat-rpm-config/c/078af192613e1beec3...
+#
https://bugzilla.redhat.com/show_bug.cgi?id=1537489
+%undefine _strict_symbol_defs_build
+
# For multilib support, files that are different between 32- and 64-bit arches
# need different filenames. Use "64" or "32" according to the word
size.
# Currently, the best way to determine an architecture's word size happens to
@@ -363,6 +368,7 @@ Patch289: 00289-fix-nis-compilation.patch
# Not every target system may provide a crypt() function in its stdlibc
# and may use an external or replacement library, like libxcrypt, for
# providing such functions.
+# Reported upstream:
https://bugs.python.org/issue32635
Patch290: 00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
# (New patches go here ^^^)
@@ -1498,6 +1504,7 @@ fi
%changelog
* Mon Jan 22 2018 Bjrn Esser <besser82(a)fedoraproject.org> - 3.6.4-7
- Add patch for libxcrypt
+- Disable strict symbol checks in the link editor
* Sat Jan 20 2018 Bjrn Esser <besser82(a)fedoraproject.org> - 3.6.4-6
- Rebuilt for switch to libxcrypt
commit 5ea7bf417d382b9fe25e4382c8e40aa4074f46cb
Author: Bjrn Esser <besser82(a)fedoraproject.org>
Date: Mon Jan 22 21:10:32 2018 +0100
Add patch for libxcrypt
diff --git a/00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
b/00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
new file mode 100644
index 0000000..be62939
--- /dev/null
+++ b/00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
@@ -0,0 +1,47 @@
+From 6811089dbf34a2cef9799e1cb6d63b863b58739f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Bj=C3=B6rn=20Esser?= <besser82(a)fedoraproject.org>
+Date: Sun, 21 Jan 2018 18:55:31 +0100
+Subject: [PATCH] cryptmodule: Include <crypt.h> for declaration of crypt() if
+ needed
+
+Not every target system may provide a crypt() function in its stdlibc
+and may use an external or replacement library, like libxcrypt, for
+providing such functions.
+---
+ Modules/_cryptmodule.c | 4 ++++
+ configure.ac | 4 ++++
+ 2 files changed, 8 insertions(+)
+
+diff --git a/Modules/_cryptmodule.c b/Modules/_cryptmodule.c
+index 58d179e6a3..bb26d83f55 100644
+--- a/Modules/_cryptmodule.c
++++ b/Modules/_cryptmodule.c
+@@ -5,6 +5,10 @@
+
+ #include <sys/types.h>
+
++#if defined(HAVE_XCRYPT)
++#include <crypt.h>
++#endif
++
+ /* Module crypt */
+
+ /*[clinic input]
+diff --git a/configure.ac b/configure.ac
+index 39e2e8e769..129c198c15 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -2816,6 +2816,10 @@ LIBS="$withval $LIBS"
+
+ PKG_PROG_PKG_CONFIG
+
++# Check for libxcrypt is present.
++PKG_CHECK_MODULES([libxcrypt], libxcrypt,
++ AC_DEFINE([HAVE_XCRYPT], 1, [Define to 1 if libxcrypt is found.]), [])
++
+ # Check for use of the system expat library
+ AC_MSG_CHECKING(for --with-system-expat)
+ AC_ARG_WITH(system_expat,
+--
+2.16.0
+
diff --git a/python3.spec b/python3.spec
index 3eed00a..d86a696 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.4
-Release: 6%{?dist}
+Release: 7%{?dist}
License: Python
@@ -359,6 +359,12 @@ Patch274: 00274-fix-arch-names.patch
# Fixed upstream:
https://bugs.python.org/issue32521
Patch289: 00289-fix-nis-compilation.patch
+# 00290 #
+# Not every target system may provide a crypt() function in its stdlibc
+# and may use an external or replacement library, like libxcrypt, for
+# providing such functions.
+Patch290: 00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
+
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
@@ -625,6 +631,7 @@ sed -r -i s/'_PIP_VERSION =
"[0-9.]+"'/'_PIP_VERSION = "%{pip_version}"'/ Lib/en
%patch273 -p1
%patch274 -p1
%patch289 -p1
+%patch290 -p1
# Remove files that should be generated by the build
@@ -1489,6 +1496,9 @@ fi
# ======================================================
%changelog
+* Mon Jan 22 2018 Bjrn Esser <besser82(a)fedoraproject.org> - 3.6.4-7
+- Add patch for libxcrypt
+
* Sat Jan 20 2018 Bjrn Esser <besser82(a)fedoraproject.org> - 3.6.4-6
- Rebuilt for switch to libxcrypt
commit 085ae328d4e0757fb686cb14e9b9c30e7edf4fec
Author: Bjrn Esser <besser82(a)fedoraproject.org>
Date: Sat Jan 20 23:07:42 2018 +0100
Rebuilt for switch to libxcrypt
diff --git a/python3.spec b/python3.spec
index d2962bc..3eed00a 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.4
-Release: 5%{?dist}
+Release: 6%{?dist}
License: Python
@@ -1489,6 +1489,9 @@ fi
# ======================================================
%changelog
+* Sat Jan 20 2018 Bjrn Esser <besser82(a)fedoraproject.org> - 3.6.4-6
+- Rebuilt for switch to libxcrypt
+
* Fri Jan 19 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-5
- Fix localeconv() encoding for LC_NUMERIC
commit 40bb48b58479cf1b301b2e5a073d9d07f9c32420
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Fri Jan 19 17:44:40 2018 +0100
Properly add patch 273
diff --git a/00273-fix-localeconv-encoding-for-LC_NUMERIC.patch
b/00273-fix-localeconv-encoding-for-LC_NUMERIC.patch
new file mode 100644
index 0000000..4d0c87d
--- /dev/null
+++ b/00273-fix-localeconv-encoding-for-LC_NUMERIC.patch
@@ -0,0 +1,240 @@
+diff --git a/Doc/library/locale.rst b/Doc/library/locale.rst
+index b04442bc162..9a0c570533a 100644
+--- a/Doc/library/locale.rst
++++ b/Doc/library/locale.rst
+@@ -147,6 +147,16 @@ The :mod:`locale` module defines the following exception and
functions:
+ | ``CHAR_MAX`` | Nothing is specified in this locale. |
+ +--------------+-----------------------------------------+
+
++ The function sets temporarily the ``LC_CTYPE`` locale to the ``LC_NUMERIC``
++ locale to decode ``decimal_point`` and ``thousands_sep`` byte strings if
++ they are non-ASCII or longer than 1 byte, and the ``LC_NUMERIC`` locale is
++ different than the ``LC_CTYPE`` locale. This temporary change affects other
++ threads.
++
++ .. versionchanged:: 3.6.5
++ The function now sets temporarily the ``LC_CTYPE`` locale to the
++ ``LC_NUMERIC`` locale in some cases.
++
+
+ .. function:: nl_langinfo(option)
+
+diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst
+index 196a4c00056..d8a1647e8b5 100644
+--- a/Doc/library/stdtypes.rst
++++ b/Doc/library/stdtypes.rst
+@@ -1599,6 +1599,20 @@ expression support in the :mod:`re` module).
+ See :ref:`formatstrings` for a description of the various formatting options
+ that can be specified in format strings.
+
++ .. note::
++ When formatting a number (:class:`int`, :class:`float`, :class:`float`
++ and subclasses) with the ``n`` type (ex: ``'{:n}'.format(1234)``), the
++ function sets temporarily the ``LC_CTYPE`` locale to the ``LC_NUMERIC``
++ locale to decode ``decimal_point`` and ``thousands_sep`` fields of
++ :c:func:`localeconv` if they are non-ASCII or longer than 1 byte, and the
++ ``LC_NUMERIC`` locale is different than the ``LC_CTYPE`` locale. This
++ temporary change affects other threads.
++
++ .. versionchanged:: 3.6.5
++ When formatting a number with the ``n`` type, the function sets
++ temporarily the ``LC_CTYPE`` locale to the ``LC_NUMERIC`` locale in some
++ cases.
++
+
+ .. method:: str.format_map(mapping)
+
+diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst
+index 847b50140a6..f83508c9250 100644
+--- a/Doc/whatsnew/3.6.rst
++++ b/Doc/whatsnew/3.6.rst
+@@ -2346,3 +2346,11 @@ It has been replaced by the new ``make regen-all`` target.
+ (Contributed by Victor Stinner in :issue:`23404`.)
+
+ .. versionchanged:: 3.6.2
++
++
++Notable changes in Python 3.6.5
++===============================
++
++The :func:`locale.localeconv` function now sets temporarily the ``LC_CTYPE``
++locale to the ``LC_NUMERIC`` locale in some cases.
++(Contributed by Victor Stinner in :issue:`31900`.)
+diff --git a/Include/fileutils.h b/Include/fileutils.h
+index 900c70faad7..875715df97a 100644
+--- a/Include/fileutils.h
++++ b/Include/fileutils.h
+@@ -119,6 +119,11 @@ PyAPI_FUNC(int) _Py_get_blocking(int fd);
+ PyAPI_FUNC(int) _Py_set_blocking(int fd, int blocking);
+ #endif /* !MS_WINDOWS */
+
++PyAPI_FUNC(int) _Py_GetLocaleconvNumeric(
++ PyObject **decimal_point,
++ PyObject **thousands_sep,
++ const char **grouping);
++
+ #endif /* Py_LIMITED_API */
+
+ #ifdef __cplusplus
+diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c
+index 71c9146ccb8..95b370b1ad0 100644
+--- a/Modules/_localemodule.c
++++ b/Modules/_localemodule.c
+@@ -171,12 +171,6 @@ PyLocale_localeconv(PyObject* self)
+ RESULT(#i, x); \
+ } while (0)
+
+- /* Numeric information */
+- RESULT_STRING(decimal_point);
+- RESULT_STRING(thousands_sep);
+- x = copy_grouping(l->grouping);
+- RESULT("grouping", x);
+-
+ /* Monetary information */
+ RESULT_STRING(int_curr_symbol);
+ RESULT_STRING(currency_symbol);
+@@ -195,6 +189,32 @@ PyLocale_localeconv(PyObject* self)
+ RESULT_INT(n_sep_by_space);
+ RESULT_INT(p_sign_posn);
+ RESULT_INT(n_sign_posn);
++
++ /* Numeric information */
++ PyObject *decimal_point, *thousands_sep;
++ const char *grouping;
++ if (_Py_GetLocaleconvNumeric(&decimal_point,
++ &thousands_sep,
++ &grouping) < 0) {
++ goto failed;
++ }
++
++ if (PyDict_SetItemString(result, "decimal_point", decimal_point) < 0)
{
++ Py_DECREF(decimal_point);
++ Py_DECREF(thousands_sep);
++ goto failed;
++ }
++ Py_DECREF(decimal_point);
++
++ if (PyDict_SetItemString(result, "thousands_sep", thousands_sep) < 0)
{
++ Py_DECREF(thousands_sep);
++ goto failed;
++ }
++ Py_DECREF(thousands_sep);
++
++ x = copy_grouping(grouping);
++ RESULT("grouping", x);
++
+ return result;
+
+ failed:
+diff --git a/Python/fileutils.c b/Python/fileutils.c
+index 97505e5bc6d..14dd81b03f0 100644
+--- a/Python/fileutils.c
++++ b/Python/fileutils.c
+@@ -1597,3 +1597,80 @@ _Py_set_blocking(int fd, int blocking)
+ return -1;
+ }
+ #endif
++
++
++int
++_Py_GetLocaleconvNumeric(PyObject **decimal_point, PyObject **thousands_sep,
++ const char **grouping)
++{
++ int res = -1;
++
++ struct lconv *lc = localeconv();
++
++ int change_locale = 0;
++ if (decimal_point != NULL &&
++ (strlen(lc->decimal_point) > 1 || ((unsigned char)lc->decimal_point[0])
> 127))
++ {
++ change_locale = 1;
++ }
++ if (thousands_sep != NULL &&
++ (strlen(lc->thousands_sep) > 1 || ((unsigned char)lc->thousands_sep[0])
> 127))
++ {
++ change_locale = 1;
++ }
++
++ /* Keep a copy of the LC_CTYPE locale */
++ char *oldloc = NULL, *loc = NULL;
++ if (change_locale) {
++ oldloc = setlocale(LC_CTYPE, NULL);
++ if (!oldloc) {
++ PyErr_SetString(PyExc_RuntimeWarning, "faild to get LC_CTYPE
locale");
++ return -1;
++ }
++
++ oldloc = _PyMem_Strdup(oldloc);
++ if (!oldloc) {
++ PyErr_NoMemory();
++ return -1;
++ }
++
++ loc = setlocale(LC_NUMERIC, NULL);
++ if (loc != NULL && strcmp(loc, oldloc) == 0) {
++ loc = NULL;
++ }
++
++ if (loc != NULL) {
++ /* Only set the locale temporarilty the LC_CTYPE locale
++ if LC_NUMERIC locale is different than LC_CTYPE locale and
++ decimal_point and/or thousands_sep are non-ASCII or longer than
++ 1 byte */
++ setlocale(LC_CTYPE, loc);
++ }
++ }
++
++ if (decimal_point != NULL) {
++ *decimal_point = PyUnicode_DecodeLocale(lc->decimal_point, NULL);
++ if (*decimal_point == NULL) {
++ goto error;
++ }
++ }
++ if (thousands_sep != NULL) {
++ *thousands_sep = PyUnicode_DecodeLocale(lc->thousands_sep, NULL);
++ if (*thousands_sep == NULL) {
++ goto error;
++ }
++ }
++
++ if (grouping != NULL) {
++ *grouping = lc->grouping;
++ }
++
++ res = 0;
++
++error:
++ if (loc != NULL) {
++ setlocale(LC_CTYPE, oldloc);
++ }
++ PyMem_Free(oldloc);
++ return res;
++}
+diff --git a/Python/formatter_unicode.c b/Python/formatter_unicode.c
+index d2be76f1e1a..d3ef650e6ce 100644
+--- a/Python/formatter_unicode.c
++++ b/Python/formatter_unicode.c
+@@ -707,18 +707,11 @@ get_locale_info(enum LocaleType type, LocaleInfo *locale_info)
+ {
+ switch (type) {
+ case LT_CURRENT_LOCALE: {
+- struct lconv *locale_data = localeconv();
+- locale_info->decimal_point = PyUnicode_DecodeLocale(
+- locale_data->decimal_point,
+- NULL);
+- if (locale_info->decimal_point == NULL)
++ if (_Py_GetLocaleconvNumeric(&locale_info->decimal_point,
++ &locale_info->thousands_sep,
++ &locale_info->grouping) < 0) {
+ return -1;
+- locale_info->thousands_sep = PyUnicode_DecodeLocale(
+- locale_data->thousands_sep,
+- NULL);
+- if (locale_info->thousands_sep == NULL)
+- return -1;
+- locale_info->grouping = locale_data->grouping;
++ }
+ break;
+ }
+ case LT_DEFAULT_LOCALE:
commit 26024771dfe131dc39d4e4664c5194a69b47c48c
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Fri Jan 19 17:36:05 2018 +0100
Fix localeconv() encoding for LC_NUMERIC
diff --git a/00273-skip-float-test.patch b/00273-skip-float-test.patch
deleted file mode 100644
index 233d3ed..0000000
--- a/00273-skip-float-test.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/Lib/test/test_float.py b/Lib/test/test_float.py
-index 66726d6496d..3318fa5df59 100644
---- a/Lib/test/test_float.py
-+++ b/Lib/test/test_float.py
-@@ -141,6 +141,7 @@ class GeneralFloatCases(unittest.TestCase):
- # non-UTF-8 byte string
- check(b'123\xa0')
-
-+ @unittest.skip('Fails in Koji:
https://bugzilla.redhat.com/show_bug.cgi?id=1484497')
- @support.run_with_locale('LC_NUMERIC', 'fr_FR', 'de_DE')
- def test_float_with_comma(self):
- # set locale to something that doesn't use '.' for the decimal
point
diff --git a/python3.spec b/python3.spec
index 96416ce..d2962bc 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.4
-Release: 4%{?dist}
+Release: 5%{?dist}
License: Python
@@ -342,9 +342,9 @@ Patch262: 00262-pep538_coerce_legacy_c_locale.patch
Patch264: 00264-skip-test-failing-on-aarch64.patch
# 00273 #
-# Skip test_float_with_comma, which fails in Koji with UnicodeDecodeError
-# See
https://bugzilla.redhat.com/show_bug.cgi?id=1484497
-Patch273: 00273-skip-float-test.patch
+# Fix localeconv() encoding for LC_NUMERIC
+# Fixed upstream:
https://bugs.python.org/issue31900
+Patch273: 00273-fix-localeconv-encoding-for-LC_NUMERIC.patch
# 00274 #
# Upstream uses Debian-style architecture naming. Change to match Fedora.
@@ -1489,6 +1489,9 @@ fi
# ======================================================
%changelog
+* Fri Jan 19 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-5
+- Fix localeconv() encoding for LC_NUMERIC
+
* Thu Jan 18 2018 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 3.6.4-4
- R: gdbm-devel R: gdbm for python3-libs
commit 57ec20127dcd1e317c6f6eb846a72d846b180560
Author: Igor Gnatenko <ignatenkobrain(a)fedoraproject.org>
Date: Thu Jan 18 19:41:19 2018 +0100
R: gdbm-devel R: gdbm for python3-libs
Signed-off-by: Igor Gnatenko <ignatenkobrain(a)fedoraproject.org>
diff --git a/python3.spec b/python3.spec
index 80ce6ab..96416ce 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.4
-Release: 3%{?dist}
+Release: 4%{?dist}
License: Python
@@ -444,7 +444,7 @@ Requires: glibc%{?_isa} >= 2.24.90-26
%if %{with gdbm}
# When built with this (as guarded by the BuildRequires above), require it
-Requires: gdbm-devel%{?_isa} >= 1:1.13
+Requires: gdbm%{?_isa} >= 1:1.13
%endif
# For backward compatibility only, remove in F29:
@@ -1489,6 +1489,9 @@ fi
# ======================================================
%changelog
+* Thu Jan 18 2018 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 3.6.4-4
+- R: gdbm-devel R: gdbm for python3-libs
+
* Wed Jan 17 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-3
- Require large enough gdbm (fixup for previous bump)
commit 1a43a65185f0f0371e3ee0fc7341535a7929486b
Author: Miro Hronok <miro(a)hroncok.cz>
Date: Wed Jan 17 11:48:11 2018 +0100
Require large enough gdbm (fixup for previous commit)
diff --git a/python3.spec b/python3.spec
index 02b4557..80ce6ab 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.4
-Release: 2%{?dist}
+Release: 3%{?dist}
License: Python
@@ -442,6 +442,11 @@ Obsoletes: python3-enum34 < 1.0.4-5%{?dist}
# See
https://bugzilla.redhat.com/show_bug.cgi?id=1410644
Requires: glibc%{?_isa} >= 2.24.90-26
+%if %{with gdbm}
+# When built with this (as guarded by the BuildRequires above), require it
+Requires: gdbm-devel%{?_isa} >= 1:1.13
+%endif
+
# For backward compatibility only, remove in F29:
Provides: system-python-libs = %{version}-%{release}
Provides: system-python-libs%{?_isa} = %{version}-%{release}
@@ -1484,6 +1489,9 @@ fi
# ======================================================
%changelog
+* Wed Jan 17 2018 Miro Hronok <mhroncok(a)redhat.com> - 3.6.4-3
+- Require large enough gdbm (fixup for previous bump)
+
* Tue Jan 16 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-2
- Rebuild for reverted gdbm 1.13 on Fedora 27
commit 6e38667b8a4543e9dedebc181b9f6d417ecea23a
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Tue Jan 16 20:36:17 2018 +0100
Rebuild for reverted gdbm 1:1.13 on F27
diff --git a/python3.spec b/python3.spec
index d6f9c43..02b4557 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.4
-Release: 1%{?dist}
+Release: 2%{?dist}
License: Python
@@ -173,7 +173,7 @@ BuildRequires: expat-devel
BuildRequires: findutils
BuildRequires: gcc-c++
%if %{with gdbm}
-BuildRequires: gdbm-devel
+BuildRequires: gdbm-devel >= 1:1.13
%endif
BuildRequires: glibc-devel
BuildRequires: gmp-devel
@@ -1484,6 +1484,9 @@ fi
# ======================================================
%changelog
+* Tue Jan 16 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-2
+- Rebuild for reverted gdbm 1.13 on Fedora 27
+
* Mon Jan 15 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-1
- Update to version 3.6.4
commit 0077a197809465e42a2c6300b80af67898f8ebcd
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Mon Jan 15 15:28:35 2018 +0100
Update to version 3.6.4
Rebased patches: 189, 262
Dropped patches due to being upstreamed: 277, 279
diff --git a/00189-add-rewheel-module.patch b/00189-add-rewheel-module.patch
index 53a26ca..36b2611 100644
--- a/00189-add-rewheel-module.patch
+++ b/00189-add-rewheel-module.patch
@@ -1,6 +1,7 @@
-diff -Nur Python-3.4.1/Lib/ensurepip/__init__.py
Python-3.4.1-rewheel/Lib/ensurepip/__init__.py
---- Python-3.4.1/Lib/ensurepip/__init__.py 2014-08-21 10:49:30.792695824 +0200
-+++ Python-3.4.1-rewheel/Lib/ensurepip/__init__.py 2014-08-21 10:10:41.958341726 +0200
+diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py
+index d69e09f..5cb12df 100644
+--- a/Lib/ensurepip/__init__.py
++++ b/Lib/ensurepip/__init__.py
@@ -1,8 +1,10 @@
import os
import os.path
@@ -12,16 +13,16 @@ diff -Nur Python-3.4.1/Lib/ensurepip/__init__.py
Python-3.4.1-rewheel/Lib/ensure
__all__ = ["version", "bootstrap"]
-@@ -38,6 +40,8 @@
+@@ -25,6 +27,8 @@ def _run_pip(args, additional_paths=None):
# Install the bundled software
import pip
+ if args[0] in ["install", "list", "wheel"]:
+ args.append('--pre')
- pip.main(args)
+ return pip.main(args)
-@@ -87,20 +91,39 @@
+@@ -88,20 +92,39 @@ def _bootstrap(*, root=None, upgrade=False, user=False,
# omit pip and easy_install
os.environ["ENSUREPIP_OPTIONS"] = "install"
@@ -72,8 +73,8 @@ diff -Nur Python-3.4.1/Lib/ensurepip/__init__.py
Python-3.4.1-rewheel/Lib/ensure
# Construct the arguments to be passed to the pip command
args = ["install", "--no-index", "--find-links",
tmpdir]
diff -Nur Python-3.4.1/Lib/ensurepip/rewheel/__init__.py
Python-3.4.1-rewheel/Lib/ensurepip/rewheel/__init__.py
---- Python-3.4.1/Lib/ensurepip/rewheel/__init__.py 1970-01-01 01:00:00.000000000 +0100
-+++ Python-3.4.1-rewheel/Lib/ensurepip/rewheel/__init__.py 2014-08-21 10:11:22.560320121
+0200
+--- Python-3.4.1/Lib/ensurepip/rewheel/__init__.py 1970-01-01 01:00:00.000000000 +0100
++++ Python-3.4.1-rewheel/Lib/ensurepip/rewheel/__init__.py 2014-08-21 10:11:22.560320121
+0200
@@ -0,0 +1,143 @@
+import argparse
+import codecs
@@ -219,8 +220,8 @@ diff -Nur Python-3.4.1/Lib/ensurepip/rewheel/__init__.py
Python-3.4.1-rewheel/Li
+ pass # bad RECORD or empty line
+ return to_write, to_omit
diff -Nur Python-3.4.1/Makefile.pre.in Python-3.4.1-rewheel/Makefile.pre.in
---- Python-3.4.1/Makefile.pre.in 2014-08-21 10:49:31.512695040 +0200
-+++ Python-3.4.1-rewheel/Makefile.pre.in 2014-08-21 10:10:41.961341722 +0200
+--- Python-3.4.1/Makefile.pre.in 2014-08-21 10:49:31.512695040 +0200
++++ Python-3.4.1-rewheel/Makefile.pre.in 2014-08-21 10:10:41.961341722 +0200
@@ -1145,7 +1145,7 @@
test/test_asyncio \
collections concurrent concurrent/futures encodings \
diff --git a/00262-pep538_coerce_legacy_c_locale.patch
b/00262-pep538_coerce_legacy_c_locale.patch
index d749bac..b144ba5 100644
--- a/00262-pep538_coerce_legacy_c_locale.patch
+++ b/00262-pep538_coerce_legacy_c_locale.patch
@@ -1,8 +1,8 @@
diff --git a/Doc/using/cmdline.rst b/Doc/using/cmdline.rst
-index 195f63f..8ecd70f 100644
+index 9ffb714..3f7201a 100644
--- a/Doc/using/cmdline.rst
+++ b/Doc/using/cmdline.rst
-@@ -713,6 +713,45 @@ conflict.
+@@ -711,6 +711,45 @@ conflict.
.. versionadded:: 3.6
@@ -500,37 +500,13 @@ index 0000000..635c98f
+if __name__ == "__main__":
+ test_main()
diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py
-index 6c3625d..009f542 100644
+index 6e4286e..594dfa9 100644
--- a/Lib/test/test_capi.py
+++ b/Lib/test/test_capi.py
-@@ -369,14 +369,21 @@ class EmbeddingTests(unittest.TestCase):
- def tearDown(self):
- os.chdir(self.oldcwd)
-
-- def run_embedded_interpreter(self, *args):
-+ def run_embedded_interpreter(self, *args, env=None):
- """Runs a test in the embedded interpreter"""
- cmd = [self.test_exe]
- cmd.extend(args)
-+ if env is not None and sys.platform == 'win32':
-+ # Windows requires at least the SYSTEMROOT environment variable to
-+ # start Python.
-+ env = env.copy()
-+ env['SYSTEMROOT'] = os.environ['SYSTEMROOT']
-+
- p = subprocess.Popen(cmd,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
-- universal_newlines=True)
-+ universal_newlines=True,
-+ env=env)
- (out, err) = p.communicate()
- self.assertEqual(p.returncode, 0,
- "bad returncode %d, stderr is %r" %
-@@ -386,31 +393,21 @@ class EmbeddingTests(unittest.TestCase):
- def test_subinterps(self):
+@@ -425,32 +425,21 @@ class EmbeddingTests(unittest.TestCase):
+ def test_repeated_init_and_subinterpreters(self):
# This is just a "don't crash" test
- out, err = self.run_embedded_interpreter()
+ out, err =
self.run_embedded_interpreter('repeated_init_and_subinterpreters')
- if support.verbose:
+ if support.verbose > 1:
print()
@@ -549,33 +525,19 @@ index 6c3625d..009f542 100644
-
def test_forced_io_encoding(self):
# Checks forced configuration of embedded interpreter IO streams
-- out, err = self.run_embedded_interpreter("forced_io_encoding")
+ env = dict(os.environ, PYTHONIOENCODING="utf-8:surrogateescape")
+ out, err = self.run_embedded_interpreter("forced_io_encoding",
env=env)
- if support.verbose:
-+ env = dict(os.environ, PYTHONIOENCODING="utf-8:surrogateescape")
-+ out, err = self.run_embedded_interpreter("forced_io_encoding",
env=env)
+ if support.verbose > 1:
print()
print(out)
print(err)
-- expected_errors = sys.__stdout__.errors
-- expected_stdin_encoding = sys.__stdin__.encoding
+ expected_stream_encoding = "utf-8"
+ expected_errors = "surrogateescape"
- expected_pipe_encoding = self._get_default_pipe_encoding()
-+ expected_stream_encoding = "utf-8"
-+ expected_errors = "surrogateescape"
expected_output = '\n'.join([
"--- Use defaults ---",
"Expected encoding: default",
-@@ -437,8 +434,8 @@ class EmbeddingTests(unittest.TestCase):
- "stdout: latin-1:replace",
- "stderr: latin-1:backslashreplace"])
- expected_output = expected_output.format(
-- in_encoding=expected_stdin_encoding,
-- out_encoding=expected_pipe_encoding,
-+ in_encoding=expected_stream_encoding,
-+ out_encoding=expected_stream_encoding,
- errors=expected_errors)
- # This is useful if we ever trip over odd platform behaviour
- self.maxDiff = None
diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py
index ae2bcd4..0a302ff 100644
--- a/Lib/test/test_cmd_line.py
@@ -601,7 +563,7 @@ index ae2bcd4..0a302ff 100644
b'import locale; '
b'print(ascii("' + undecodable + b'"), '
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
-index df9ebd4..63145e4 100644
+index 7866a5c..b41239a 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -680,6 +680,7 @@ class SysModuleTest(unittest.TestCase):
@@ -613,7 +575,7 @@ index df9ebd4..63145e4 100644
'import sys',
'def dump(name):',
diff --git a/Modules/main.c b/Modules/main.c
-index dd50211..f20cf24 100644
+index b0fb78f..0d8590a 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -105,7 +105,11 @@ static const char usage_6[] =
@@ -630,16 +592,15 @@ index dd50211..f20cf24 100644
static int
usage(int exitcode, const wchar_t* program)
diff --git a/Programs/_testembed.c b/Programs/_testembed.c
-index 3968399..1bd2bbf 100644
+index b0f9087..da892bf 100644
--- a/Programs/_testembed.c
+++ b/Programs/_testembed.c
@@ -1,4 +1,5 @@
--#include <Python.h>
-+#include "Python.h"
+ #include <Python.h>
+#include "pyconfig.h"
+ #include "pythread.h"
#include <stdio.h>
- /*********************************************************
diff --git a/Programs/python.c b/Programs/python.c
index a7afbc7..03f8295 100644
--- a/Programs/python.c
@@ -713,7 +674,7 @@ index a7afbc7..03f8295 100644
for (i = 0; i < argc; i++) {
PyMem_RawFree(argv_copy2[i]);
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
-index a4f7f82..3843297 100644
+index 640271f..2a22b24 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -167,6 +167,7 @@ Py_SetStandardStreamEncoding(const char *encoding, const char
*errors)
@@ -929,7 +890,7 @@ index a4f7f82..3843297 100644
#endif
if ((p = Py_GETENV("PYTHONDEBUG")) && *p != '\0')
-@@ -1242,12 +1428,8 @@ initstdio(void)
+@@ -1251,12 +1437,8 @@ initstdio(void)
}
}
if (!errors && !(pythonioencoding && *pythonioencoding)) {
@@ -944,90 +905,11 @@ index a4f7f82..3843297 100644
}
}
-diff --git a/configure b/configure
-index 2915246..39e5a27 100755
---- a/configure
-+++ b/configure
-@@ -834,6 +834,8 @@ with_thread
- enable_ipv6
- with_doc_strings
- with_pymalloc
-+with_c_locale_coercion
-+with_c_locale_warning
- with_valgrind
- with_dtrace
- with_fpectl
-@@ -1527,6 +1529,12 @@ Optional Packages:
- deprecated; use --with(out)-threads
- --with(out)-doc-strings disable/enable documentation strings
- --with(out)-pymalloc disable/enable specialized mallocs
-+ --with(out)-c-locale-coercion
-+ disable/enable C locale coercion to a UTF-8 based
-+ locale
-+ --with(out)-c-locale-warning
-+ disable/enable locale compatibility warning in the C
-+ locale
- --with-valgrind Enable Valgrind support
- --with(out)-dtrace disable/enable DTrace support
- --with-fpectl enable SIGFPE catching
-@@ -11010,6 +11018,52 @@ fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_pymalloc" >&5
- $as_echo "$with_pymalloc" >&6; }
-
-+# Check for --with-c-locale-coercion
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for
--with-c-locale-coercion" >&5
-+$as_echo_n "checking for --with-c-locale-coercion... " >&6; }
-+
-+# Check whether --with-c-locale-coercion was given.
-+if test "${with_c_locale_coercion+set}" = set; then :
-+ withval=$with_c_locale_coercion;
-+fi
-+
-+
-+if test -z "$with_c_locale_coercion"
-+then
-+ with_c_locale_coercion="yes"
-+fi
-+if test "$with_c_locale_coercion" != "no"
-+then
-+
-+$as_echo "#define PY_COERCE_C_LOCALE 1" >>confdefs.h
-+
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_c_locale_coercion"
>&5
-+$as_echo "$with_c_locale_coercion" >&6; }
-+
-+# Check for --with-c-locale-warning
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-c-locale-warning"
>&5
-+$as_echo_n "checking for --with-c-locale-warning... " >&6; }
-+
-+# Check whether --with-c-locale-warning was given.
-+if test "${with_c_locale_warning+set}" = set; then :
-+ withval=$with_c_locale_warning;
-+fi
-+
-+
-+if test -z "$with_c_locale_warning"
-+then
-+ with_c_locale_warning="yes"
-+fi
-+if test "$with_c_locale_warning" != "no"
-+then
-+
-+$as_echo "#define PY_WARN_ON_C_LOCALE 1" >>confdefs.h
-+
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_c_locale_warning"
>&5
-+$as_echo "$with_c_locale_warning" >&6; }
-+
- # Check for Valgrind support
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-valgrind"
>&5
- $as_echo_n "checking for --with-valgrind... " >&6; }
diff --git a/configure.ac b/configure.ac
-index 67dfba3..b9c9f04 100644
+index 601cc84..5cdc021 100644
--- a/configure.ac
+++ b/configure.ac
-@@ -3279,6 +3279,40 @@ then
+@@ -3310,6 +3310,40 @@ then
fi
AC_MSG_RESULT($with_pymalloc)
@@ -1068,23 +950,3 @@ index 67dfba3..b9c9f04 100644
# Check for Valgrind support
AC_MSG_CHECKING([for --with-valgrind])
AC_ARG_WITH([valgrind],
-diff --git a/pyconfig.h.in b/pyconfig.h.in
-index b10c57f..0a6f3e2 100644
---- a/pyconfig.h.in
-+++ b/pyconfig.h.in
-@@ -1244,9 +1244,15 @@
- /* Define as the preferred size in bits of long digits */
- #undef PYLONG_BITS_IN_DIGIT
-
-+/* Define if you want to coerce the C locale to a UTF-8 based locale */
-+#undef PY_COERCE_C_LOCALE
-+
- /* Define to printf format modifier for Py_ssize_t */
- #undef PY_FORMAT_SIZE_T
-
-+/* Define to emit a locale compatibility warning in the C locale */
-+#undef PY_WARN_ON_C_LOCALE
-+
- /* Define if you want to build an interpreter with many run-time checks. */
- #undef Py_DEBUG
-
diff --git a/python3.spec b/python3.spec
index 7495259..d6f9c43 100644
--- a/python3.spec
+++ b/python3.spec
@@ -13,8 +13,8 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
-Version: %{pybasever}.3
-Release: 5%{?dist}
+Version: %{pybasever}.4
+Release: 1%{?dist}
License: Python
@@ -350,19 +350,6 @@ Patch273: 00273-skip-float-test.patch
# Upstream uses Debian-style architecture naming. Change to match Fedora.
Patch274: 00274-fix-arch-names.patch
-# 00277 #
-# Fix test_exception_errpipe_bad_data() and
-# test_exception_errpipe_normal() of test_subprocess: mock os.waitpid()
-# to avoid calling the real os.waitpid(0, 0) which is an unexpected
-# side effect of the test, which makes the koji builds hang.
-# Fixed upstream:
https://github.com/python/cpython/commit/11045c9d8a21dd9bd182a3939189db02...
-Patch277: 00277-fix-test-subprocess-hanging-tests.patch
-
-# 00279 #
-# Fix memory corruption due to allocator mix
-# Fixed upstream:
https://bugs.python.org/issue31532
-Patch279: 00279-fix-memory-corruption-due-to-allocator-mix.patch
-
# 00289 #
# Fix the compilation of the nis module, as glibc removed the
# interfaces related to Sun RPC and they are now provided
@@ -632,8 +619,6 @@ sed -r -i s/'_PIP_VERSION =
"[0-9.]+"'/'_PIP_VERSION = "%{pip_version}"'/ Lib/en
%patch273 -p1
%patch274 -p1
-%patch277 -p1
-%patch279 -p1
%patch289 -p1
@@ -1499,6 +1484,9 @@ fi
# ======================================================
%changelog
+* Mon Jan 15 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.4-1
+- Update to version 3.6.4
+
* Fri Jan 12 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.3-5
- Fix the compilation of the nis module.
diff --git a/sources b/sources
index 002f1fb..6b5ff13 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (Python-3.6.3.tar.xz) =
32f24a3adcb7880003c7ecdc5e53e838e774adda76b308961d8215e28db630b2fa2828097817924c76afa4212b2df3362eb64d4e10f37c0147f512ec5aa8662b
+SHA512 (Python-3.6.4.tar.xz) =
09ba2103ac517ac4d262f00380c9aac836a53401ce252540c17fd821a3b92e1ddf32528d00772221eb3126b12cb95b62c3ac3e852f4951e6f2eb406c88c848a2
commit 6ff303ee104bbee32f1912eb012ae02c4a92ea99
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Fri Jan 12 16:06:48 2018 +0100
Fix the compilation of the nis module.
The headers required to build the nis module were removed
from glibc and they are now provided by the libtirpc and libnsl2
packages, thus adding their respective -devel subpackages as
BuildRequires and the upstream fix to search for the headers
and the shared libraries at the appropriate locations.
diff --git a/00289-fix-nis-compilation.patch b/00289-fix-nis-compilation.patch
new file mode 100644
index 0000000..4d4e3dc
--- /dev/null
+++ b/00289-fix-nis-compilation.patch
@@ -0,0 +1,83 @@
+diff --git a/setup.py b/setup.py
+index 3eb6ad1..3437e48 100644
+--- a/setup.py
++++ b/setup.py
+@@ -1331,20 +1331,14 @@ class PyBuildExt(build_ext):
+ exts.append( Extension('termios', ['termios.c']) )
+ # Jeremy Hylton's rlimit interface
+ exts.append( Extension('resource', ['resource.c']) )
++ else:
++ missing.extend(['resource', 'termios'])
+
+- # Sun yellow pages. Some systems have the functions in libc.
+- if (host_platform not in ['cygwin', 'qnx6'] and
+- find_file('rpcsvc/yp_prot.h', inc_dirs, []) is not None):
+- if (self.compiler.find_library_file(lib_dirs, 'nsl')):
+- libs = ['nsl']
+- else:
+- libs = []
+- exts.append( Extension('nis', ['nismodule.c'],
+- libraries = libs) )
+- else:
+- missing.append('nis')
++ nis = self._detect_nis(inc_dirs, lib_dirs)
++ if nis is not None:
++ exts.append(nis)
+ else:
+- missing.extend(['nis', 'resource', 'termios'])
++ missing.append('nis')
+
+ # Curses support, requiring the System V version of curses, often
+ # provided by the ncurses library.
+@@ -2179,6 +2173,51 @@ class PyBuildExt(build_ext):
+ )
+ return ext
+
++ def _detect_nis(self, inc_dirs, lib_dirs):
++ if host_platform in {'win32', 'cygwin', 'qnx6'}:
++ return None
++
++ libs = []
++ library_dirs = []
++ includes_dirs = []
++
++ # Latest glibc has moved Sun RPC headers into tircp and nsl sub
++ # directories. rpc code has been moved to libtirpc.
++ rpcsvc_inc = find_file(
++ 'rpcsvc/yp_prot.h', inc_dirs,
++ ['/usr/local/include/nsl', '/usr/include/nsl']
++ )
++ rpc_inc = find_file(
++ 'rpc/rpc.h', inc_dirs,
++ ['/usr/local/include/tirpc', '/usr/include/tirpc']
++ )
++ if rpcsvc_inc is None or rpc_inc is None:
++ # not found
++ return None
++ includes_dirs.extend(rpcsvc_inc)
++ includes_dirs.extend(rpc_inc)
++
++ if self.compiler.find_library_file(lib_dirs, 'nsl'):
++ libs.append('nsl')
++ else:
++ # libnsl-devel: check for libnsl in nsl/ subdirectory
++ nsl_dirs = [os.path.join(lib_dir, 'nsl') for lib_dir in lib_dirs]
++ libnsl = self.compiler.find_library_file(nsl_dirs, 'nsl')
++ if libnsl is not None:
++ library_dirs.append(os.path.dirname(libnsl))
++ libs.append('nsl')
++
++ if self.compiler.find_library_file(lib_dirs, 'tirpc'):
++ libs.append('tirpc')
++
++ return Extension(
++ 'nis', ['nismodule.c'],
++ libraries=libs,
++ library_dirs=library_dirs,
++ include_dirs=includes_dirs
++ )
++
++
+ class PyBuildInstall(install):
+ # Suppress the warning about installation into the lib_dynload
+ # directory, which is not in sys.path when running Python during
diff --git a/python3.spec b/python3.spec
index 8bb01e0..7495259 100644
--- a/python3.spec
+++ b/python3.spec
@@ -14,7 +14,7 @@ URL:
https://www.python.org/
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.3
-Release: 4%{?dist}
+Release: 5%{?dist}
License: Python
@@ -179,6 +179,8 @@ BuildRequires: glibc-devel
BuildRequires: gmp-devel
BuildRequires: libappstream-glib
BuildRequires: libffi-devel
+BuildRequires: libnsl2-devel
+BuildRequires: libtirpc-devel
BuildRequires: libGL-devel
BuildRequires: libX11-devel
BuildRequires: ncurses-devel
@@ -361,6 +363,15 @@ Patch277: 00277-fix-test-subprocess-hanging-tests.patch
# Fixed upstream:
https://bugs.python.org/issue31532
Patch279: 00279-fix-memory-corruption-due-to-allocator-mix.patch
+# 00289 #
+# Fix the compilation of the nis module, as glibc removed the
+# interfaces related to Sun RPC and they are now provided
+# by libtirpc and libnsl2.
+# See:
https://fedoraproject.org/wiki/Changes/SunRPCRemoval
+# and
https://fedoraproject.org/wiki/Changes/NISIPv6
+# Fixed upstream:
https://bugs.python.org/issue32521
+Patch289: 00289-fix-nis-compilation.patch
+
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL,
etc.,
@@ -623,6 +634,7 @@ sed -r -i s/'_PIP_VERSION =
"[0-9.]+"'/'_PIP_VERSION = "%{pip_version}"'/ Lib/en
%patch274 -p1
%patch277 -p1
%patch279 -p1
+%patch289 -p1
# Remove files that should be generated by the build
@@ -1487,6 +1499,9 @@ fi
# ======================================================
%changelog
+* Fri Jan 12 2018 Charalampos Stratakis <cstratak(a)redhat.com> - 3.6.3-5
+- Fix the compilation of the nis module.
+
* Tue Nov 21 2017 Miro Hronok <mhroncok(a)redhat.com> - 3.6.3-4
- Raise the release of platform-python obsoletes for better maintainability
commit ec5f432a6e752b0fccc17b4e7a75a6378449164e
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Mon Dec 4 17:53:50 2017 +0100
Remove a ppc64 segfault workaround which provided a larger stack for that
arch, as it doesn't seem to affect the build anymore.
diff --git a/python3.spec b/python3.spec
index 1f7907e..8bb01e0 100644
--- a/python3.spec
+++ b/python3.spec
@@ -996,14 +996,6 @@ done
# Running the upstream test suite
# ======================================================
-# For ppc64 we need a larger stack than default
-# See
https://bugzilla.redhat.com/show_bug.cgi?id=1292462
-%ifarch %{power64}
- ulimit -a
- ulimit -s 16384
-%endif
-
-
topdir=$(pwd)
CheckPython() {
ConfName=$1
commit 15a050eb4bccb5537f23371b1547ae92f02600a0
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Wed Nov 29 16:46:46 2017 +0100
Masc two macros in comments that were expanded.
Remove the commented out file for the time shared library.
diff --git a/python3.spec b/python3.spec
index 29a7d70..1f7907e 100644
--- a/python3.spec
+++ b/python3.spec
@@ -245,7 +245,7 @@ Patch1: 00001-rpath.patch
# 00102 #
# Change the various install paths to use /usr/lib64/ instead or /usr/lib
-# Only used when "%{_lib}" == "lib64"
+# Only used when "%%{_lib}" == "lib64"
# Not yet sent upstream.
Patch102: 00102-lib64.patch
@@ -1211,7 +1211,6 @@ fi
%{dynload_dir}/spwd.%{SOABI_optimized}.so
%{dynload_dir}/syslog.%{SOABI_optimized}.so
%{dynload_dir}/termios.%{SOABI_optimized}.so
-#%{dynload_dir}/time.%{SOABI_optimized}.so
%{dynload_dir}/_testmultiphase.%{SOABI_optimized}.so
%{dynload_dir}/unicodedata.%{SOABI_optimized}.so
%{dynload_dir}/xxlimited.%{SOABI_optimized}.so
@@ -1441,7 +1440,6 @@ fi
%{dynload_dir}/spwd.%{SOABI_debug}.so
%{dynload_dir}/syslog.%{SOABI_debug}.so
%{dynload_dir}/termios.%{SOABI_debug}.so
-#%{dynload_dir}/time.%{SOABI_debug}.so
%{dynload_dir}/_testmultiphase.%{SOABI_debug}.so
%{dynload_dir}/unicodedata.%{SOABI_debug}.so
%{dynload_dir}/zlib.%{SOABI_debug}.so
@@ -1479,7 +1477,7 @@ fi
# We put the debug-gdb.py file inside /usr/lib/debug to avoid noise from ldconfig
# See
https://bugzilla.redhat.com/show_bug.cgi?id=562980
#
-# The /usr/lib/rpm/redhat/macros defines %__debug_package to use
+# The /usr/lib/rpm/redhat/macros defines %%__debug_package to use
# debugfiles.list, and it appears that everything below /usr/lib/debug and
# (/usr/src/debug) gets added to this file (via LISTFILES) in
# /usr/lib/rpm/find-debuginfo.sh
commit 522ee16d1ae7749c0cb6edaa2c64593efeb4e5d1
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Wed Nov 29 16:32:41 2017 +0100
Remove python-gdb.py source file as it now gets installed from the upstream sources
diff --git a/python-gdb.py b/python-gdb.py
deleted file mode 100644
index dd6d462..0000000
--- a/python-gdb.py
+++ /dev/null
@@ -1,1380 +0,0 @@
-#!/usr/bin/python
-'''
-From gdb 7 onwards, gdb's build can be configured --with-python, allowing gdb
-to be extended with Python code e.g. for library-specific data visualizations,
-such as for the C++ STL types. Documentation on this API can be seen at:
-http://sourceware.org/gdb/current/onlinedocs/gdb/Python-API.html
-
-
-This python module deals with the case when the process being debugged (the
-"inferior process" in gdb parlance) is itself python, or more specifically,
-linked against libpython. In this situation, almost every item of data is a
-(PyObject*), and having the debugger merely print their addresses is not very
-enlightening.
-
-This module embeds knowledge about the implementation details of libpython so
-that we can emit useful visualizations e.g. a string, a list, a dict, a frame
-giving file/line information and the state of local variables
-
-In particular, given a gdb.Value corresponding to a PyObject* in the inferior
-process, we can generate a "proxy value" within the gdb process. For example,
-given a PyObject* in the inferior process that is in fact a PyListObject*
-holding three PyObject* that turn out to be PyBytesObject* instances, we can
-generate a proxy value within the gdb process that is a list of bytes
-instances:
- [b"foo", b"bar", b"baz"]
-
-Doing so can be expensive for complicated graphs of objects, and could take
-some time, so we also have a "write_repr" method that writes a representation
-of the data to a file-like object. This allows us to stop the traversal by
-having the file-like object raise an exception if it gets too much data.
-
-With both "proxyval" and "write_repr" we keep track of the set of all
addresses
-visited so far in the traversal, to avoid infinite recursion due to cycles in
-the graph of object references.
-
-We try to defer gdb.lookup_type() invocations for python types until as late as
-possible: for a dynamically linked python binary, when the process starts in
-the debugger, the libpython.so hasn't been dynamically loaded yet, so none of
-the type names are known to the debugger
-
-The module also extends gdb with some python-specific commands.
-'''
-from __future__ import with_statement
-import gdb
-
-# Look up the gdb.Type for some standard types:
-_type_char_ptr = gdb.lookup_type('char').pointer() # char*
-_type_unsigned_char_ptr = gdb.lookup_type('unsigned char').pointer() # unsigned
char*
-_type_void_ptr = gdb.lookup_type('void').pointer() # void*
-_type_size_t = gdb.lookup_type('size_t')
-
-SIZEOF_VOID_P = _type_void_ptr.sizeof
-
-
-Py_TPFLAGS_HEAPTYPE = (1L << 9)
-
-Py_TPFLAGS_INT_SUBCLASS = (1L << 23)
-Py_TPFLAGS_LONG_SUBCLASS = (1L << 24)
-Py_TPFLAGS_LIST_SUBCLASS = (1L << 25)
-Py_TPFLAGS_TUPLE_SUBCLASS = (1L << 26)
-Py_TPFLAGS_BYTES_SUBCLASS = (1L << 27)
-Py_TPFLAGS_UNICODE_SUBCLASS = (1L << 28)
-Py_TPFLAGS_DICT_SUBCLASS = (1L << 29)
-Py_TPFLAGS_BASE_EXC_SUBCLASS = (1L << 30)
-Py_TPFLAGS_TYPE_SUBCLASS = (1L << 31)
-
-
-MAX_OUTPUT_LEN=1024
-
-class NullPyObjectPtr(RuntimeError):
- pass
-
-
-def safety_limit(val):
- # Given a integer value from the process being debugged, limit it to some
- # safety threshold so that arbitrary breakage within said process doesn't
- # break the gdb process too much (e.g. sizes of iterations, sizes of lists)
- return min(val, 1000)
-
-
-def safe_range(val):
- # As per range, but don't trust the value too much: cap it to a safety
- # threshold in case the data was corrupted
- return xrange(safety_limit(val))
-
-
-class StringTruncated(RuntimeError):
- pass
-
-class TruncatedStringIO(object):
- '''Similar to cStringIO, but can truncate the output by raising a
- StringTruncated exception'''
- def __init__(self, maxlen=None):
- self._val = ''
- self.maxlen = maxlen
-
- def write(self, data):
- if self.maxlen:
- if len(data) + len(self._val) > self.maxlen:
- # Truncation:
- self._val += data[0:self.maxlen - len(self._val)]
- raise StringTruncated()
-
- self._val += data
-
- def getvalue(self):
- return self._val
-
-class PyObjectPtr(object):
- """
- Class wrapping a gdb.Value that's a either a (PyObject*) within the
- inferior process, or some subclass pointer e.g. (PyBytesObject*)
-
- There will be a subclass for every refined PyObject type that we care
- about.
-
- Note that at every stage the underlying pointer could be NULL, point
- to corrupt data, etc; this is the debugger, after all.
- """
- _typename = 'PyObject'
-
- def __init__(self, gdbval, cast_to=None):
- if cast_to:
- self._gdbval = gdbval.cast(cast_to)
- else:
- self._gdbval = gdbval
-
- def field(self, name):
- '''
- Get the gdb.Value for the given field within the PyObject, coping with
- some python 2 versus python 3 differences.
-
- Various libpython types are defined using the "PyObject_HEAD" and
- "PyObject_VAR_HEAD" macros.
-
- In Python 2, this these are defined so that "ob_type" and (for a var
- object) "ob_size" are fields of the type in question.
-
- In Python 3, this is defined as an embedded PyVarObject type thus:
- PyVarObject ob_base;
- so that the "ob_size" field is located insize the "ob_base"
field, and
- the "ob_type" is most easily accessed by casting back to a
(PyObject*).
- '''
- if self.is_null():
- raise NullPyObjectPtr(self)
-
- if name == 'ob_type':
- pyo_ptr = self._gdbval.cast(PyObjectPtr.get_gdb_type())
- return pyo_ptr.dereference()[name]
-
- if name == 'ob_size':
- pyo_ptr = self._gdbval.cast(PyVarObjectPtr.get_gdb_type())
- return pyo_ptr.dereference()[name]
-
- # General case: look it up inside the object:
- return self._gdbval.dereference()[name]
-
- def pyop_field(self, name):
- '''
- Get a PyObjectPtr for the given PyObject* field within this PyObject,
- coping with some python 2 versus python 3 differences.
- '''
- return PyObjectPtr.from_pyobject_ptr(self.field(name))
-
- def write_field_repr(self, name, out, visited):
- '''
- Extract the PyObject* field named "name", and write its representation
- to file-like object "out"
- '''
- field_obj = self.pyop_field(name)
- field_obj.write_repr(out, visited)
-
- def get_truncated_repr(self, maxlen):
- '''
- Get a repr-like string for the data, but truncate it at "maxlen" bytes
- (ending the object graph traversal as soon as you do)
- '''
- out = TruncatedStringIO(maxlen)
- try:
- self.write_repr(out, set())
- except StringTruncated:
- # Truncation occurred:
- return out.getvalue() + '...(truncated)'
-
- # No truncation occurred:
- return out.getvalue()
-
- def type(self):
- return PyTypeObjectPtr(self.field('ob_type'))
-
- def is_null(self):
- return 0 == long(self._gdbval)
-
- def is_optimized_out(self):
- '''
- Is the value of the underlying PyObject* visible to the debugger?
-
- This can vary with the precise version of the compiler used to build
- Python, and the precise version of gdb.
-
- See e.g.
https://bugzilla.redhat.com/show_bug.cgi?id=556975 with
- PyEval_EvalFrameEx's "f"
- '''
- return self._gdbval.is_optimized_out
-
- def safe_tp_name(self):
- try:
- return self.type().field('tp_name').string()
- except NullPyObjectPtr:
- # NULL tp_name?
- return 'unknown'
- except RuntimeError:
- # Can't even read the object at all?
- return 'unknown'
-
- def proxyval(self, visited):
- '''
- Scrape a value from the inferior process, and try to represent it
- within the gdb process, whilst (hopefully) avoiding crashes when
- the remote data is corrupt.
-
- Derived classes will override this.
-
- For example, a PyIntObject* with ob_ival 42 in the inferior process
- should result in an int(42) in this process.
-
- visited: a set of all gdb.Value pyobject pointers already visited
- whilst generating this value (to guard against infinite recursion when
- visiting object graphs with loops). Analogous to Py_ReprEnter and
- Py_ReprLeave
- '''
-
- class FakeRepr(object):
- """
- Class representing a non-descript PyObject* value in the inferior
- process for when we don't have a custom scraper, intended to have
- a sane repr().
- """
-
- def __init__(self, tp_name, address):
- self.tp_name = tp_name
- self.address = address
-
- def __repr__(self):
- # For the NULL pointer, we have no way of knowing a type, so
- # special-case it as per
- #
http://bugs.python.org/issue8032#msg100882
- if self.address == 0:
- return '0x0'
- return '<%s at remote 0x%x>' % (self.tp_name,
self.address)
-
- return FakeRepr(self.safe_tp_name(),
- long(self._gdbval))
-
- def write_repr(self, out, visited):
- '''
- Write a string representation of the value scraped from the inferior
- process to "out", a file-like object.
- '''
- # Default implementation: generate a proxy value and write its repr
- # However, this could involve a lot of work for complicated objects,
- # so for derived classes we specialize this
- return out.write(repr(self.proxyval(visited)))
-
- @classmethod
- def subclass_from_type(cls, t):
- '''
- Given a PyTypeObjectPtr instance wrapping a gdb.Value that's a
- (PyTypeObject*), determine the corresponding subclass of PyObjectPtr
- to use
-
- Ideally, we would look up the symbols for the global types, but that
- isn't working yet:
- (gdb) python print gdb.lookup_symbol('PyList_Type')[0].value
- Traceback (most recent call last):
- File "<string>", line 1, in <module>
- NotImplementedError: Symbol type not yet supported in Python scripts.
- Error while executing Python code.
-
- For now, we use tp_flags, after doing some string comparisons on the
- tp_name for some special-cases that don't seem to be visible through
- flags
- '''
- try:
- tp_name = t.field('tp_name').string()
- tp_flags = int(t.field('tp_flags'))
- except RuntimeError:
- # Handle any kind of error e.g. NULL ptrs by simply using the base
- # class
- return cls
-
- #print 'tp_flags = 0x%08x' % tp_flags
- #print 'tp_name = %r' % tp_name
-
- name_map = {'bool': PyBoolObjectPtr,
- 'classobj': PyClassObjectPtr,
- 'instance': PyInstanceObjectPtr,
- 'NoneType': PyNoneStructPtr,
- 'frame': PyFrameObjectPtr,
- 'set' : PySetObjectPtr,
- 'frozenset' : PySetObjectPtr,
- 'builtin_function_or_method' : PyCFunctionObjectPtr,
- }
- if tp_name in name_map:
- return name_map[tp_name]
-
- if tp_flags & Py_TPFLAGS_HEAPTYPE:
- return HeapTypeObjectPtr
-
- if tp_flags & Py_TPFLAGS_INT_SUBCLASS:
- return PyIntObjectPtr
- if tp_flags & Py_TPFLAGS_LONG_SUBCLASS:
- return PyLongObjectPtr
- if tp_flags & Py_TPFLAGS_LIST_SUBCLASS:
- return PyListObjectPtr
- if tp_flags & Py_TPFLAGS_TUPLE_SUBCLASS:
- return PyTupleObjectPtr
- if tp_flags & Py_TPFLAGS_BYTES_SUBCLASS:
- return PyBytesObjectPtr
- if tp_flags & Py_TPFLAGS_UNICODE_SUBCLASS:
- return PyUnicodeObjectPtr
- if tp_flags & Py_TPFLAGS_DICT_SUBCLASS:
- return PyDictObjectPtr
- if tp_flags & Py_TPFLAGS_BASE_EXC_SUBCLASS:
- return PyBaseExceptionObjectPtr
- #if tp_flags & Py_TPFLAGS_TYPE_SUBCLASS:
- # return PyTypeObjectPtr
-
- # Use the base class:
- return cls
-
- @classmethod
- def from_pyobject_ptr(cls, gdbval):
- '''
- Try to locate the appropriate derived class dynamically, and cast
- the pointer accordingly.
- '''
- try:
- p = PyObjectPtr(gdbval)
- cls = cls.subclass_from_type(p.type())
- return cls(gdbval, cast_to=cls.get_gdb_type())
- except RuntimeError:
- # Handle any kind of error e.g. NULL ptrs by simply using the base
- # class
- pass
- return cls(gdbval)
-
- @classmethod
- def get_gdb_type(cls):
- return gdb.lookup_type(cls._typename).pointer()
-
- def as_address(self):
- return long(self._gdbval)
-
-class PyVarObjectPtr(PyObjectPtr):
- _typename = 'PyVarObject'
-
-class ProxyAlreadyVisited(object):
- '''
- Placeholder proxy to use when protecting against infinite recursion due to
- loops in the object graph.
-
- Analogous to the values emitted by the users of Py_ReprEnter and Py_ReprLeave
- '''
- def __init__(self, rep):
- self._rep = rep
-
- def __repr__(self):
- return self._rep
-
-
-def _write_instance_repr(out, visited, name, pyop_attrdict, address):
- '''Shared code for use by old-style and new-style classes:
- write a representation to file-like object "out"'''
- out.write('<')
- out.write(name)
-
- # Write dictionary of instance attributes:
- if isinstance(pyop_attrdict, PyDictObjectPtr):
- out.write('(')
- first = True
- for pyop_arg, pyop_val in pyop_attrdict.iteritems():
- if not first:
- out.write(', ')
- first = False
- out.write(pyop_arg.proxyval(visited))
- out.write('=')
- pyop_val.write_repr(out, visited)
- out.write(')')
- out.write(' at remote 0x%x>' % address)
-
-
-class InstanceProxy(object):
-
- def __init__(self, cl_name, attrdict, address):
- self.cl_name = cl_name
- self.attrdict = attrdict
- self.address = address
-
- def __repr__(self):
- if isinstance(self.attrdict, dict):
- kwargs = ', '.join(["%s=%r" % (arg, val)
- for arg, val in self.attrdict.iteritems()])
- return '<%s(%s) at remote 0x%x>' % (self.cl_name,
- kwargs, self.address)
- else:
- return '<%s at remote 0x%x>' % (self.cl_name,
- self.address)
-
-def _PyObject_VAR_SIZE(typeobj, nitems):
- return ( ( typeobj.field('tp_basicsize') +
- nitems * typeobj.field('tp_itemsize') +
- (SIZEOF_VOID_P - 1)
- ) & ~(SIZEOF_VOID_P - 1)
- ).cast(_type_size_t)
-
-class HeapTypeObjectPtr(PyObjectPtr):
- _typename = 'PyObject'
-
- def get_attr_dict(self):
- '''
- Get the PyDictObject ptr representing the attribute dictionary
- (or None if there's a problem)
- '''
- try:
- typeobj = self.type()
- dictoffset = int_from_int(typeobj.field('tp_dictoffset'))
- if dictoffset != 0:
- if dictoffset < 0:
- type_PyVarObject_ptr =
gdb.lookup_type('PyVarObject').pointer()
- tsize =
int_from_int(self._gdbval.cast(type_PyVarObject_ptr)['ob_size'])
- if tsize < 0:
- tsize = -tsize
- size = _PyObject_VAR_SIZE(typeobj, tsize)
- dictoffset += size
- assert dictoffset > 0
- assert dictoffset % SIZEOF_VOID_P == 0
-
- dictptr = self._gdbval.cast(_type_char_ptr) + dictoffset
- PyObjectPtrPtr = PyObjectPtr.get_gdb_type().pointer()
- dictptr = dictptr.cast(PyObjectPtrPtr)
- return PyObjectPtr.from_pyobject_ptr(dictptr.dereference())
- except RuntimeError:
- # Corrupt data somewhere; fail safe
- pass
-
- # Not found, or some kind of error:
- return None
-
- def proxyval(self, visited):
- '''
- Support for new-style classes.
-
- Currently we just locate the dictionary using a transliteration to
- python of _PyObject_GetDictPtr, ignoring descriptors
- '''
- # Guard against infinite loops:
- if self.as_address() in visited:
- return ProxyAlreadyVisited('<...>')
- visited.add(self.as_address())
-
- pyop_attr_dict = self.get_attr_dict()
- if pyop_attr_dict:
- attr_dict = pyop_attr_dict.proxyval(visited)
- else:
- attr_dict = {}
- tp_name = self.safe_tp_name()
-
- # New-style class:
- return InstanceProxy(tp_name, attr_dict, long(self._gdbval))
-
- def write_repr(self, out, visited):
- # Guard against infinite loops:
- if self.as_address() in visited:
- out.write('<...>')
- return
- visited.add(self.as_address())
-
- pyop_attrdict = self.get_attr_dict()
- _write_instance_repr(out, visited,
- self.safe_tp_name(), pyop_attrdict, self.as_address())
-
-class ProxyException(Exception):
- def __init__(self, tp_name, args):
- self.tp_name = tp_name
- self.args = args
-
- def __repr__(self):
- return '%s%r' % (self.tp_name, self.args)
-
-class PyBaseExceptionObjectPtr(PyObjectPtr):
- """
- Class wrapping a gdb.Value that's a PyBaseExceptionObject* i.e. an exception
- within the process being debugged.
- """
- _typename = 'PyBaseExceptionObject'
-
- def proxyval(self, visited):
- # Guard against infinite loops:
- if self.as_address() in visited:
- return ProxyAlreadyVisited('(...)')
- visited.add(self.as_address())
- arg_proxy = self.pyop_field('args').proxyval(visited)
- return ProxyException(self.safe_tp_name(),
- arg_proxy)
-
- def write_repr(self, out, visited):
- # Guard against infinite loops:
- if self.as_address() in visited:
- out.write('(...)')
- return
- visited.add(self.as_address())
-
- out.write(self.safe_tp_name())
- self.write_field_repr('args', out, visited)
-
-class PyClassObjectPtr(PyObjectPtr):
- """
- Class wrapping a gdb.Value that's a PyClassObject* i.e. a <classobj>
- instance within the process being debugged.
- """
- _typename = 'PyClassObject'
-
-
-class BuiltInFunctionProxy(object):
- def __init__(self, ml_name):
- self.ml_name = ml_name
-
- def __repr__(self):
- return "<built-in function %s>" % self.ml_name
-
-class BuiltInMethodProxy(object):
- def __init__(self, ml_name, pyop_m_self):
- self.ml_name = ml_name
- self.pyop_m_self = pyop_m_self
-
- def __repr__(self):
- return ('<built-in method %s of %s object at remote 0x%x>'
- % (self.ml_name,
- self.pyop_m_self.safe_tp_name(),
- self.pyop_m_self.as_address())
- )
-
-class PyCFunctionObjectPtr(PyObjectPtr):
- """
- Class wrapping a gdb.Value that's a PyCFunctionObject*
- (see Include/methodobject.h and Objects/methodobject.c)
- """
- _typename = 'PyCFunctionObject'
-
- def proxyval(self, visited):
- m_ml = self.field('m_ml') # m_ml is a (PyMethodDef*)
- ml_name = m_ml['ml_name'].string()
-
- pyop_m_self = self.pyop_field('m_self')
- if pyop_m_self.is_null():
- return BuiltInFunctionProxy(ml_name)
- else:
- return BuiltInMethodProxy(ml_name, pyop_m_self)
-
-
-class PyCodeObjectPtr(PyObjectPtr):
- """
- Class wrapping a gdb.Value that's a PyCodeObject* i.e. a <code> instance
- within the process being debugged.
- """
- _typename = 'PyCodeObject'
-
- def addr2line(self, addrq):
- '''
- Get the line number for a given bytecode offset
-
- Analogous to PyCode_Addr2Line; translated from pseudocode in
- Objects/lnotab_notes.txt
- '''
- co_lnotab = self.pyop_field('co_lnotab').proxyval(set())
-
- # Initialize lineno to co_firstlineno as per PyCode_Addr2Line
- # not 0, as lnotab_notes.txt has it:
- lineno = int_from_int(self.field('co_firstlineno'))
-
- addr = 0
- for addr_incr, line_incr in zip(co_lnotab[::2], co_lnotab[1::2]):
- addr += ord(addr_incr)
- if addr > addrq:
- return lineno
- lineno += ord(line_incr)
- return lineno
-
-
-class PyDictObjectPtr(PyObjectPtr):
- """
- Class wrapping a gdb.Value that's a PyDictObject* i.e. a dict instance
- within the process being debugged.
- """
- _typename = 'PyDictObject'
-
- def iteritems(self):
- '''
- Yields a sequence of (PyObjectPtr key, PyObjectPtr value) pairs,
- analagous to dict.iteritems()
- '''
- for i in safe_range(self.field('ma_mask') + 1):
- ep = self.field('ma_table') + i
- pyop_value = PyObjectPtr.from_pyobject_ptr(ep['me_value'])
- if not pyop_value.is_null():
- pyop_key = PyObjectPtr.from_pyobject_ptr(ep['me_key'])
- yield (pyop_key, pyop_value)
-
- def proxyval(self, visited):
- # Guard against infinite loops:
- if self.as_address() in visited:
- return ProxyAlreadyVisited('{...}')
- visited.add(self.as_address())
-
- result = {}
- for pyop_key, pyop_value in self.iteritems():
- proxy_key = pyop_key.proxyval(visited)
- proxy_value = pyop_value.proxyval(visited)
- result[proxy_key] = proxy_value
- return result
-
- def write_repr(self, out, visited):
- # Guard against infinite loops:
- if self.as_address() in visited:
- out.write('{...}')
- return
- visited.add(self.as_address())
-
- out.write('{')
- first = True
- for pyop_key, pyop_value in self.iteritems():
- if not first:
- out.write(', ')
- first = False
- pyop_key.write_repr(out, visited)
- out.write(': ')
- pyop_value.write_repr(out, visited)
- out.write('}')
-
-class PyInstanceObjectPtr(PyObjectPtr):
- _typename = 'PyInstanceObject'
-
- def proxyval(self, visited):
- # Guard against infinite loops:
- if self.as_address() in visited:
- return ProxyAlreadyVisited('<...>')
- visited.add(self.as_address())
-
- # Get name of class:
- in_class = self.pyop_field('in_class')
- cl_name = in_class.pyop_field('cl_name').proxyval(visited)
-
- # Get dictionary of instance attributes:
- in_dict = self.pyop_field('in_dict').proxyval(visited)
-
- # Old-style class:
- return InstanceProxy(cl_name, in_dict, long(self._gdbval))
-
- def write_repr(self, out, visited):
- # Guard against infinite loops:
- if self.as_address() in visited:
- out.write('<...>')
- return
- visited.add(self.as_address())
-
- # Old-style class:
-
- # Get name of class:
- in_class = self.pyop_field('in_class')
- cl_name = in_class.pyop_field('cl_name').proxyval(visited)
-
- # Get dictionary of instance attributes:
- pyop_in_dict = self.pyop_field('in_dict')
-
- _write_instance_repr(out, visited,
- cl_name, pyop_in_dict, self.as_address())
-
-class PyListObjectPtr(PyObjectPtr):
- _typename = 'PyListObject'
-
- def __getitem__(self, i):
- # Get the gdb.Value for the (PyObject*) with the given index:
- field_ob_item = self.field('ob_item')
- return field_ob_item[i]
-
- def proxyval(self, visited):
- # Guard against infinite loops:
- if self.as_address() in visited:
- return ProxyAlreadyVisited('[...]')
- visited.add(self.as_address())
-
- result = [PyObjectPtr.from_pyobject_ptr(self[i]).proxyval(visited)
- for i in safe_range(int_from_int(self.field('ob_size')))]
- return result
-
- def write_repr(self, out, visited):
- # Guard against infinite loops:
- if self.as_address() in visited:
- out.write('[...]')
- return
- visited.add(self.as_address())
-
- out.write('[')
- for i in safe_range(int_from_int(self.field('ob_size'))):
- if i > 0:
- out.write(', ')
- element = PyObjectPtr.from_pyobject_ptr(self[i])
- element.write_repr(out, visited)
- out.write(']')
-
-class PyLongObjectPtr(PyObjectPtr):
- _typename = 'PyLongObject'
-
- def proxyval(self, visited):
- '''
- Python's Include/longobjrep.h has this declaration:
- struct _longobject {
- PyObject_VAR_HEAD
- digit ob_digit[1];
- };
-
- with this description:
- The absolute value of a number is equal to
- SUM(for i=0 through abs(ob_size)-1) ob_digit[i] * 2**(SHIFT*i)
- Negative numbers are represented with ob_size < 0;
- zero is represented by ob_size == 0.
-
- where SHIFT can be either:
- #define PyLong_SHIFT 30
- #define PyLong_SHIFT 15
- '''
- ob_size = long(self.field('ob_size'))
- if ob_size == 0:
- return 0L
-
- ob_digit = self.field('ob_digit')
-
- if gdb.lookup_type('digit').sizeof == 2:
- SHIFT = 15L
- else:
- SHIFT = 30L
-
- digits = [long(ob_digit[i]) * 2**(SHIFT*i)
- for i in safe_range(abs(ob_size))]
- result = sum(digits)
- if ob_size < 0:
- result = -result
- return result
-
-class PyBoolObjectPtr(PyLongObjectPtr):
- """
- Class wrapping a gdb.Value that's a PyBoolObject* i.e. one of the two
- <bool> instances (Py_True/Py_False) within the process being debugged.
- """
- def proxyval(self, visited):
- if PyLongObjectPtr.proxyval(self, visited):
- return True
- else:
- return False
-
-class PyNoneStructPtr(PyObjectPtr):
- """
- Class wrapping a gdb.Value that's a PyObject* pointing to the
- singleton (we hope) _Py_NoneStruct with ob_type PyNone_Type
- """
- _typename = 'PyObject'
-
- def proxyval(self, visited):
- return None
-
-
-class PyFrameObjectPtr(PyObjectPtr):
- _typename = 'PyFrameObject'
-
- def __init__(self, gdbval, cast_to):
- PyObjectPtr.__init__(self, gdbval, cast_to)
-
- if not self.is_optimized_out():
- self.co = PyCodeObjectPtr.from_pyobject_ptr(self.field('f_code'))
- self.co_name = self.co.pyop_field('co_name')
- self.co_filename = self.co.pyop_field('co_filename')
-
- self.f_lineno = int_from_int(self.field('f_lineno'))
- self.f_lasti = int_from_int(self.field('f_lasti'))
- self.co_nlocals = int_from_int(self.co.field('co_nlocals'))
- self.co_varnames =
PyTupleObjectPtr.from_pyobject_ptr(self.co.field('co_varnames'))
-
- def iter_locals(self):
- '''
- Yield a sequence of (name,value) pairs of PyObjectPtr instances, for
- the local variables of this frame
- '''
- if self.is_optimized_out():
- return
-
- f_localsplus = self.field('f_localsplus')
- for i in safe_range(self.co_nlocals):
- pyop_value = PyObjectPtr.from_pyobject_ptr(f_localsplus[i])
- if not pyop_value.is_null():
- pyop_name = PyObjectPtr.from_pyobject_ptr(self.co_varnames[i])
- yield (pyop_name, pyop_value)
-
- def iter_globals(self):
- '''
- Yield a sequence of (name,value) pairs of PyObjectPtr instances, for
- the global variables of this frame
- '''
- if self.is_optimized_out():
- return
-
- pyop_globals = self.pyop_field('f_globals')
- return pyop_globals.iteritems()
-
- def iter_builtins(self):
- '''
- Yield a sequence of (name,value) pairs of PyObjectPtr instances, for
- the builtin variables
- '''
- if self.is_optimized_out():
- return
-
- pyop_builtins = self.pyop_field('f_builtins')
- return pyop_builtins.iteritems()
-
- def get_var_by_name(self, name):
- '''
- Look for the named local variable, returning a (PyObjectPtr, scope) pair
- where scope is a string 'local', 'global', 'builtin'
-
- If not found, return (None, None)
- '''
- for pyop_name, pyop_value in self.iter_locals():
- if name == pyop_name.proxyval(set()):
- return pyop_value, 'local'
- for pyop_name, pyop_value in self.iter_globals():
- if name == pyop_name.proxyval(set()):
- return pyop_value, 'global'
- for pyop_name, pyop_value in self.iter_builtins():
- if name == pyop_name.proxyval(set()):
- return pyop_value, 'builtin'
- return None, None
-
- def filename(self):
- '''Get the path of the current Python source file, as a
string'''
- if self.is_optimized_out():
- return '(frame information optimized out)'
- return self.co_filename.proxyval(set())
-
- def current_line_num(self):
- '''Get current line number as an integer (1-based)
-
- Translated from PyFrame_GetLineNumber and PyCode_Addr2Line
-
- See Objects/lnotab_notes.txt
- '''
- if self.is_optimized_out():
- return None
- f_trace = self.field('f_trace')
- if long(f_trace) != 0:
- # we have a non-NULL f_trace:
- return self.f_lineno
- else:
- #try:
- return self.co.addr2line(self.f_lasti)
- #except ValueError:
- # return self.f_lineno
-
- def current_line(self):
- '''Get the text of the current source line as a string, with a
trailing
- newline character'''
- if self.is_optimized_out():
- return '(frame information optimized out)'
- with open(self.filename(), 'r') as f:
- all_lines = f.readlines()
- # Convert from 1-based current_line_num to 0-based list offset:
- return all_lines[self.current_line_num()-1]
-
- def write_repr(self, out, visited):
- if self.is_optimized_out():
- out.write('(frame information optimized out)')
- return
- out.write('Frame 0x%x, for file %s, line %i, in %s ('
- % (self.as_address(),
- self.co_filename.proxyval(visited),
- self.current_line_num(),
- self.co_name.proxyval(visited)))
- first = True
- for pyop_name, pyop_value in self.iter_locals():
- if not first:
- out.write(', ')
- first = False
-
- out.write(pyop_name.proxyval(visited))
- out.write('=')
- pyop_value.write_repr(out, visited)
-
- out.write(')')
-
-class PySetObjectPtr(PyObjectPtr):
- _typename = 'PySetObject'
-
- def proxyval(self, visited):
- # Guard against infinite loops:
- if self.as_address() in visited:
- return ProxyAlreadyVisited('%s(...)' % self.safe_tp_name())
- visited.add(self.as_address())
-
- members = []
- table = self.field('table')
- for i in safe_range(self.field('mask')+1):
- setentry = table[i]
- key = setentry['key']
- if key != 0:
- key_proxy = PyObjectPtr.from_pyobject_ptr(key).proxyval(visited)
- if key_proxy != '<dummy key>':
- members.append(key_proxy)
- if self.safe_tp_name() == 'frozenset':
- return frozenset(members)
- else:
- return set(members)
-
- def write_repr(self, out, visited):
- out.write(self.safe_tp_name())
-
- # Guard against infinite loops:
- if self.as_address() in visited:
- out.write('(...)')
- return
- visited.add(self.as_address())
-
- out.write('([')
- first = True
- table = self.field('table')
- for i in safe_range(self.field('mask')+1):
- setentry = table[i]
- key = setentry['key']
- if key != 0:
- pyop_key = PyObjectPtr.from_pyobject_ptr(key)
- key_proxy = pyop_key.proxyval(visited) # FIXME!
- if key_proxy != '<dummy key>':
- if not first:
- out.write(', ')
- first = False
- pyop_key.write_repr(out, visited)
- out.write('])')
-
-
-class PyBytesObjectPtr(PyObjectPtr):
- _typename = 'PyBytesObject'
-
- def __str__(self):
- field_ob_size = self.field('ob_size')
- field_ob_sval = self.field('ob_sval')
- char_ptr = field_ob_sval.address.cast(_type_unsigned_char_ptr)
- return ''.join([chr(char_ptr[i]) for i in safe_range(field_ob_size)])
-
- def proxyval(self, visited):
- return str(self)
-
-class PyTupleObjectPtr(PyObjectPtr):
- _typename = 'PyTupleObject'
-
- def __getitem__(self, i):
- # Get the gdb.Value for the (PyObject*) with the given index:
- field_ob_item = self.field('ob_item')
- return field_ob_item[i]
-
- def proxyval(self, visited):
- # Guard against infinite loops:
- if self.as_address() in visited:
- return ProxyAlreadyVisited('(...)')
- visited.add(self.as_address())
-
- result = tuple([PyObjectPtr.from_pyobject_ptr(self[i]).proxyval(visited)
- for i in
safe_range(int_from_int(self.field('ob_size')))])
- return result
-
- def write_repr(self, out, visited):
- # Guard against infinite loops:
- if self.as_address() in visited:
- out.write('(...)')
- return
- visited.add(self.as_address())
-
- out.write('(')
- for i in safe_range(int_from_int(self.field('ob_size'))):
- if i > 0:
- out.write(', ')
- element = PyObjectPtr.from_pyobject_ptr(self[i])
- element.write_repr(out, visited)
- if self.field('ob_size') == 1:
- out.write(',)')
- else:
- out.write(')')
-
-class PyTypeObjectPtr(PyObjectPtr):
- _typename = 'PyTypeObject'
-
-
-class PyUnicodeObjectPtr(PyObjectPtr):
- _typename = 'PyUnicodeObject'
-
- def proxyval(self, visited):
- # From unicodeobject.h:
- # Py_ssize_t length; /* Length of raw Unicode data in buffer */
- # Py_UNICODE *str; /* Raw Unicode buffer */
- field_length = long(self.field('length'))
- field_str = self.field('str')
-
- # Gather a list of ints from the Py_UNICODE array; these are either
- # UCS-2 or UCS-4 code points:
- Py_UNICODEs = [int(field_str[i]) for i in safe_range(field_length)]
-
- # Convert the int code points to unicode characters, and generate a
- # local unicode instance:
- result = u''.join([unichr(ucs) for ucs in Py_UNICODEs])
- return result
-
-
-def int_from_int(gdbval):
- return int(str(gdbval))
-
-
-def stringify(val):
- # TODO: repr() puts everything on one line; pformat can be nicer, but
- # can lead to v.long results; this function isolates the choice
- if True:
- return repr(val)
- else:
- from pprint import pformat
- return pformat(val)
-
-
-class PyObjectPtrPrinter:
- "Prints a (PyObject*)"
-
- def __init__ (self, gdbval):
- self.gdbval = gdbval
-
- def to_string (self):
- pyop = PyObjectPtr.from_pyobject_ptr(self.gdbval)
- if True:
- return pyop.get_truncated_repr(MAX_OUTPUT_LEN)
- else:
- # Generate full proxy value then stringify it.
- # Doing so could be expensive
- proxyval = pyop.proxyval(set())
- return stringify(proxyval)
-
-def pretty_printer_lookup(gdbval):
- type = gdbval.type.unqualified()
- if type.code == gdb.TYPE_CODE_PTR:
- type = type.target().unqualified()
- t = str(type)
- if t in ("PyObject", "PyFrameObject",
"PyUnicodeObject"):
- return PyObjectPtrPrinter(gdbval)
-
-"""
-During development, I've been manually invoking the code in this way:
-(gdb) python
-
-import sys
-sys.path.append('/home/david/coding/python-gdb')
-import libpython
-end
-
-then reloading it after each edit like this:
-(gdb) python reload(libpython)
-
-The following code should ensure that the prettyprinter is registered
-if the code is autoloaded by gdb when visiting libpython.so, provided
-that this python file is installed to the same path as the library (or its
-.debug file) plus a "-gdb.py" suffix, e.g:
- /usr/lib/libpython2.6.so.1.0-gdb.py
- /usr/lib/debug/usr/lib/libpython2.6.so.1.0.debug-gdb.py
-"""
-def register (obj):
- if obj == None:
- obj = gdb
-
- # Wire up the pretty-printer
- obj.pretty_printers.append(pretty_printer_lookup)
-
-register (gdb.current_objfile ())
-
-
-class Frame(object):
- '''
- Wrapper for gdb.Frame, adding various methods
- '''
- def __init__(self, gdbframe):
- self._gdbframe = gdbframe
-
- def older(self):
- older = self._gdbframe.older()
- if older:
- return Frame(older)
- else:
- return None
-
- def newer(self):
- newer = self._gdbframe.newer()
- if newer:
- return Frame(newer)
- else:
- return None
-
- def select(self):
- self._gdbframe.select()
-
- def get_index(self):
- '''Calculate index of frame, starting at 0 for the newest frame
within
- this thread'''
- index = 0
- # Go down until you reach the newest frame:
- iter_frame = self
- while iter_frame.newer():
- index += 1
- iter_frame = iter_frame.newer()
- return index
-
- def is_evalframeex(self):
- if self._gdbframe.function():
- if self._gdbframe.function().name == 'PyEval_EvalFrameEx':
- '''
- I believe we also need to filter on the inline
- struct frame_id.inline_depth, only regarding frames with
- an inline depth of 0 as actually being this function
-
- So we reject those with type gdb.INLINE_FRAME
- '''
- if self._gdbframe.type() == gdb.NORMAL_FRAME:
- # We have a PyEval_EvalFrameEx frame:
- return True
-
- return False
-
- def get_pyop(self):
- try:
- f = self._gdbframe.read_var('f')
- return PyFrameObjectPtr.from_pyobject_ptr(f)
- except ValueError:
- return None
-
- @classmethod
- def get_selected_frame(cls):
- _gdbframe = gdb.selected_frame()
- if _gdbframe:
- return Frame(_gdbframe)
- return None
-
- @classmethod
- def get_selected_python_frame(cls):
- '''Try to obtain the Frame for the python code in the selected
frame,
- or None'''
- frame = cls.get_selected_frame()
-
- while frame:
- if frame.is_evalframeex():
- return frame
- frame = frame.older()
-
- # Not found:
- return None
-
- def print_summary(self):
- if self.is_evalframeex():
- pyop = self.get_pyop()
- if pyop:
- sys.stdout.write('#%i %s\n' % (self.get_index(),
pyop.get_truncated_repr(MAX_OUTPUT_LEN)))
- sys.stdout.write(pyop.current_line())
- else:
- sys.stdout.write('#%i (unable to read python frame
information)\n' % self.get_index())
- else:
- sys.stdout.write('#%i\n' % self.get_index())
-
-class PyList(gdb.Command):
- '''List the current Python source code, if any
-
- Use
- py-list START
- to list at a different line number within the python source.
-
- Use
- py-list START, END
- to list a specific range of lines within the python source.
- '''
-
- def __init__(self):
- gdb.Command.__init__ (self,
- "py-list",
- gdb.COMMAND_FILES,
- gdb.COMPLETE_NONE)
-
-
- def invoke(self, args, from_tty):
- import re
-
- start = None
- end = None
-
- m = re.match(r'\s*(\d+)\s*', args)
- if m:
- start = int(m.group(0))
- end = start + 10
-
- m = re.match(r'\s*(\d+)\s*,\s*(\d+)\s*', args)
- if m:
- start, end = map(int, m.groups())
-
- frame = Frame.get_selected_python_frame()
- if not frame:
- print 'Unable to locate python frame'
- return
-
- pyop = frame.get_pyop()
- if not pyop:
- print 'Unable to read information on python frame'
- return
-
- filename = pyop.filename()
- lineno = pyop.current_line_num()
-
- if start is None:
- start = lineno - 5
- end = lineno + 5
-
- if start<1:
- start = 1
-
- with open(filename, 'r') as f:
- all_lines = f.readlines()
- # start and end are 1-based, all_lines is 0-based;
- # so [start-1:end] as a python slice gives us [start, end] as a
- # closed interval
- for i, line in enumerate(all_lines[start-1:end]):
- linestr = str(i+start)
- # Highlight current line:
- if i + start == lineno:
- linestr = '>' + linestr
- sys.stdout.write('%4s %s' % (linestr, line))
-
-
-# ...and register the command:
-PyList()
-
-def move_in_stack(move_up):
- '''Move up or down the stack (for the py-up/py-down
command)'''
- frame = Frame.get_selected_python_frame()
- while frame:
- if move_up:
- iter_frame = frame.older()
- else:
- iter_frame = frame.newer()
-
- if not iter_frame:
- break
-
- if iter_frame.is_evalframeex():
- # Result:
- iter_frame.select()
- iter_frame.print_summary()
- return
-
- frame = iter_frame
-
- if move_up:
- print 'Unable to find an older python frame'
- else:
- print 'Unable to find a newer python frame'
-
-class PyUp(gdb.Command):
- 'Select and print the python stack frame that called this one (if any)'
- def __init__(self):
- gdb.Command.__init__ (self,
- "py-up",
- gdb.COMMAND_STACK,
- gdb.COMPLETE_NONE)
-
-
- def invoke(self, args, from_tty):
- move_in_stack(move_up=True)
-
-PyUp()
-
-class PyDown(gdb.Command):
- 'Select and print the python stack frame called by this one (if any)'
- def __init__(self):
- gdb.Command.__init__ (self,
- "py-down",
- gdb.COMMAND_STACK,
- gdb.COMPLETE_NONE)
-
-
- def invoke(self, args, from_tty):
- move_in_stack(move_up=False)
-
-PyDown()
-
-class PyBacktrace(gdb.Command):
- 'Display the current python frame and all the frames within its call stack (if
any)'
- def __init__(self):
- gdb.Command.__init__ (self,
- "py-bt",
- gdb.COMMAND_STACK,
- gdb.COMPLETE_NONE)
-
-
- def invoke(self, args, from_tty):
- frame = Frame.get_selected_python_frame()
- while frame:
- if frame.is_evalframeex():
- frame.print_summary()
- frame = frame.older()
-
-PyBacktrace()
-
-class PyPrint(gdb.Command):
- 'Look up the given python variable name, and print it'
- def __init__(self):
- gdb.Command.__init__ (self,
- "py-print",
- gdb.COMMAND_DATA,
- gdb.COMPLETE_NONE)
-
-
- def invoke(self, args, from_tty):
- name = str(args)
-
- frame = Frame.get_selected_python_frame()
- if not frame:
- print 'Unable to locate python frame'
- return
-
- pyop_frame = frame.get_pyop()
- if not pyop_frame:
- print 'Unable to read information on python frame'
- return
-
- pyop_var, scope = pyop_frame.get_var_by_name(name)
-
- if pyop_var:
- print ('%s %r = %s'
- % (scope,
- name,
- pyop_var.get_truncated_repr(MAX_OUTPUT_LEN)))
- else:
- print '%r not found' % name
-
-PyPrint()
-
-class PyLocals(gdb.Command):
- 'Look up the given python variable name, and print it'
- def __init__(self):
- gdb.Command.__init__ (self,
- "py-locals",
- gdb.COMMAND_DATA,
- gdb.COMPLETE_NONE)
-
-
- def invoke(self, args, from_tty):
- name = str(args)
-
- frame = Frame.get_selected_python_frame()
- if not frame:
- print 'Unable to locate python frame'
- return
-
- pyop_frame = frame.get_pyop()
- if not pyop_frame:
- print 'Unable to read information on python frame'
- return
-
- for pyop_name, pyop_value in pyop_frame.iter_locals():
- print ('%s = %s'
- % (pyop_name.proxyval(set()),
- pyop_value.get_truncated_repr(MAX_OUTPUT_LEN)))
-
-PyLocals()
commit dd3cb47629970fe54d5dd87825c005d51e3070be
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Wed Nov 29 16:09:30 2017 +0100
Remove our downstream systemtap instrumentation as now upstream provides us
with dtrace hooks.
diff --git a/00055-systemtap.patch b/00055-systemtap.patch
deleted file mode 100644
index a48fe7c..0000000
--- a/00055-systemtap.patch
+++ /dev/null
@@ -1,762 +0,0 @@
-diff -up Python-3.3.0rc2/configure.ac.systemtap Python-3.3.0rc2/configure.ac
---- Python-3.3.0rc2/configure.ac.systemtap 2012-09-09 05:11:14.000000000 -0400
-+++ Python-3.3.0rc2/configure.ac 2012-09-10 09:17:21.114511781 -0400
-@@ -2678,6 +2678,23 @@ if test "$with_valgrind" != no; then
- OPT="-DDYNAMIC_ANNOTATIONS_ENABLED=1 $OPT"
- fi
-
-+# Check for systemtap support
-+# On Linux, /usr/bin/dtrace is in fact a shim to SystemTap
-+AC_MSG_CHECKING([for --with-systemtap])
-+AC_ARG_WITH([systemtap],
-+ AC_HELP_STRING([--with(out)-systemtap], [disable/enable SystemTap
support]),,
-+ with_systemtap=no)
-+AC_MSG_RESULT([$with_systemtap])
-+if test "$with_systemtap" != no; then
-+ AC_DEFINE(WITH_SYSTEMTAP, 1,
-+ [Define if you want to compile in SystemTap support])
-+ SYSTEMTAPOBJS="Python/pysystemtap.o"
-+ SYSTEMTAPDEPS="\$(srcdir)/Python/pysystemtap.h"
-+fi
-+
-+AC_SUBST(SYSTEMTAPOBJS)
-+AC_SUBST(SYSTEMTAPDEPS)
-+
- # -I${DLINCLDIR} is added to the compile rule for importdl.o
- AC_SUBST(DLINCLDIR)
- DLINCLDIR=.
-diff -up Python-3.3.0rc2/Doc/howto/index.rst.systemtap
Python-3.3.0rc2/Doc/howto/index.rst
---- Python-3.3.0rc2/Doc/howto/index.rst.systemtap 2012-09-09 05:10:51.000000000 -0400
-+++ Python-3.3.0rc2/Doc/howto/index.rst 2012-09-10 09:17:21.117511779 -0400
-@@ -29,4 +29,5 @@ Currently, the HOWTOs are:
- argparse.rst
- ipaddress.rst
- clinic.rst
-+ instrumentation.rst
-
-diff -up Python-3.3.0rc2/Doc/howto/instrumentation.rst.systemtap
Python-3.3.0rc2/Doc/howto/instrumentation.rst
---- Python-3.3.0rc2/Doc/howto/instrumentation.rst.systemtap 2012-09-10 09:17:21.117511779
-0400
-+++ Python-3.3.0rc2/Doc/howto/instrumentation.rst 2012-09-10 09:17:21.117511779 -0400
-@@ -0,0 +1,295 @@
-+.. _instrumentation:
-+
-+====================================
-+Instrumenting CPython with SystemTap
-+====================================
-+
-+:author: David Malcolm <dmalcolm(a)redhat.com>
-+
-+DTrace and SystemTap are monitoring tools, each providing a way to inspect
-+what the processes on a computer system are doing. They both use
-+domain-specific languages allowing a user to write scripts which:
-+
-+ - filter which processes are to be observed
-+ - gather data from the processes of interest
-+ - generate reports on the data
-+
-+As of Python 3.3, CPython can be built with embedded "markers" that can be
-+observed by a SystemTap script, making it easier to monitor what the CPython
-+processes on a system are doing.
-+
-+.. Potentially this document could be expanded to also cover DTrace markers.
-+ However, I'm not a DTrace expert.
-+
-+.. I'm using ".. code-block:: c" for SystemTap scripts, as "c"
is syntactically
-+ the closest match that Sphinx supports
-+
-+
-+Enabling the static markers
-+---------------------------
-+
-+In order to build CPython with the embedded markers for SystemTap, the
-+SystemTap development tools must be installed.
-+
-+On a Fedora or Red Hat Enterprise Linux machine, this can be done via::
-+
-+ yum install systemtap-sdt-devel
-+
-+CPython must then be configured `--with-systemtap`::
-+
-+ checking for --with-systemtap... yes
-+
-+You can verify if the SystemTap static markers are present in the built
-+binary by seeing if it contains a ".note.stapsdt" section.
-+
-+.. code-block:: bash
-+
-+ $ eu-readelf -S ./python | grep .note.stapsdt
-+ [29] .note.stapsdt NOTE 0000000000000000 00308d78 000000b8 0 0
0 4
-+
-+If you've built python as a shared library (with --enable-shared), you need
-+to look instead within the shared library. For example:
-+
-+.. code-block:: bash
-+
-+ $ eu-readelf -S libpython3.3dm.so.1.0 | grep .note.stapsdt
-+ [28] .note.stapsdt NOTE 0000000000000000 00365b68 000000b8 0 0
0 4
-+
-+Earlier versions of SystemTap stored the markers in a ".probes" section.
-+
-+For the curious, you can see the metadata for the static markers using this
-+invocation.
-+
-+.. code-block:: bash
-+
-+ $ eu-readelf -x .note.stapsdt ./python
-+
-+ Hex dump of section [29] '.note.stapsdt', 184 bytes at offset 0x308d78:
-+ 0x00000000 08000000 45000000 03000000 73746170 ....E.......stap
-+ 0x00000010 73647400 d4664b00 00000000 4fc36600 sdt..fK.....O.f.
-+ 0x00000020 00000000 488d9000 00000000 70797468 ....H.......pyth
-+ 0x00000030 6f6e0066 756e6374 696f6e5f 5f656e74 on.function__ent
-+ 0x00000040 72790038 40257261 78203840 25726478 ry.8@%rax 8@%rdx
-+ 0x00000050 202d3440 25656378 00000000 08000000 -4@%ecx........
-+ 0x00000060 46000000 03000000 73746170 73647400 F.......stapsdt.
-+ 0x00000070 0d674b00 00000000 4fc36600 00000000 .gK.....O.f.....
-+ 0x00000080 4a8d9000 00000000 70797468 6f6e0066 J.......python.f
-+ 0x00000090 756e6374 696f6e5f 5f726574 75726e00 unction__return.
-+ 0x000000a0 38402572 61782038 40257264 78202d34 8@%rax 8@%rdx -4
-+ 0x000000b0 40256563 78000000 @%ecx...
-+
-+and a sufficiently modern eu-readelf can print the metadata:
-+
-+.. code-block:: bash
-+
-+ $ eu-readelf -n ./python
-+
-+ Note section [ 1] '.note.gnu.build-id' of 36 bytes at offset 0x190:
-+ Owner Data size Type
-+ GNU 20 GNU_BUILD_ID
-+ Build ID: a28f8db1b224530b0d38ad7b82a249cf7c3f18d6
-+
-+ Note section [27] '.note.stapsdt' of 184 bytes at offset 0x1ae884:
-+ Owner Data size Type
-+ stapsdt 70 Version: 3
-+ PC: 0xe0d3a, Base: 0x14b150, Semaphore: 0x3ae882
-+ Provider: python, Name: function__return, Args: '8@%rbx 8@%r13 -4@%eax'
-+ stapsdt 69 Version: 3
-+ PC: 0xe0f37, Base: 0x14b150, Semaphore: 0x3ae880
-+ Provider: python, Name: function__entry, Args: '8@%rbx 8@%r13 -4@%eax'
-+
-+The above metadata contains information for SystemTap describing how it can
-+patch strategically-placed machine code instructions to enable the tracing
-+hooks used by a SystemTap script.
-+
-+
-+Static markers
-+--------------
-+
-+The low-level way to use the SystemTap integration is to use the static
-+markers directly. This requires you to explicitly state the binary file
-+containing them.
-+
-+For example, this script can be used to show the call/return hierarchy of a
-+Python script:
-+
-+.. code-block:: c
-+
-+ probe process('python').mark("function__entry") {
-+ filename = user_string($arg1);
-+ funcname = user_string($arg2);
-+ lineno = $arg3;
-+
-+ printf("%s => %s in %s:%d\\n",
-+ thread_indent(1), funcname, filename, lineno);
-+ }
-+
-+ probe process('python').mark("function__return") {
-+ filename = user_string($arg1);
-+ funcname = user_string($arg2);
-+ lineno = $arg3;
-+
-+ printf("%s <= %s in %s:%d\\n",
-+ thread_indent(-1), funcname, filename, lineno);
-+ }
-+
-+It can be invoked like this:
-+
-+.. code-block:: bash
-+
-+ $ stap \
-+ show-call-hierarchy.stp \
-+ -c ./python test.py
-+
-+The output looks like this::
-+
-+ 11408 python(8274): => __contains__ in Lib/_abcoll.py:362
-+ 11414 python(8274): => __getitem__ in Lib/os.py:425
-+ 11418 python(8274): => encode in Lib/os.py:490
-+ 11424 python(8274): <= encode in Lib/os.py:493
-+ 11428 python(8274): <= __getitem__ in Lib/os.py:426
-+ 11433 python(8274): <= __contains__ in Lib/_abcoll.py:366
-+
-+where the columns are:
-+
-+ - time in microseconds since start of script
-+
-+ - name of executable
-+
-+ - PID of process
-+
-+and the remainder indicates the call/return hierarchy as the script executes.
-+
-+For a `--enable-shared` build of CPython, the markers are contained within the
-+libpython shared library, and the probe's dotted path needs to reflect this. For
-+example, this line from the above example::
-+
-+ probe process('python').mark("function__entry") {
-+
-+should instead read::
-+
-+ probe
process('python').library("libpython3.3dm.so.1.0").mark("function__entry")
{
-+
-+(assuming a debug build of CPython 3.3)
-+
-+.. I'm reusing the "c:function" type for markers
-+
-+.. c:function:: function__entry(str filename, str funcname, int lineno)
-+
-+ This marker indicates that execution of a Python function has begun. It is
-+ only triggered for pure-python (bytecode) functions.
-+
-+ The filename, function name, and line number are provided back to the
-+ tracing script as positional arguments, which must be accessed using
-+ `$arg1`, `$arg2`:
-+
-+ * `$arg1` : `(const char *)` filename, accessible using `user_string($arg1)`
-+
-+ * `$arg2` : `(const char *)` function name, accessible using
-+ `user_string($arg2)`
-+
-+ * `$arg3` : `int` line number
-+
-+ * `$arg4` : `(PyFrameObject *)`, the frame being executed
-+
-+.. c:function:: function__return(str filename, str funcname, int lineno)
-+
-+ This marker is the converse of `function__entry`, and indicates that
-+ execution of a Python function has ended (either via ``return``, or via an
-+ exception). It is only triggered for pure-python (bytecode) functions.
-+
-+ The arguments are the same as for `function__entry`
-+
-+
-+Tapsets
-+-------
-+
-+The higher-level way to use the SystemTap integration is to use a "tapset":
-+SystemTap's equivalent of a library, which hides some of the lower-level
-+details of the static markers.
-+
-+Here is a tapset file, based on a non-shared build of CPython:
-+
-+.. code-block:: c
-+
-+ /*
-+ Provide a higher-level wrapping around the function__entry and
-+ function__return markers:
-+ */
-+ probe python.function.entry =
process("python").mark("function__entry")
-+ {
-+ filename = user_string($arg1);
-+ funcname = user_string($arg2);
-+ lineno = $arg3;
-+ frameptr = $arg4
-+ }
-+ probe python.function.return =
process("python").mark("function__return")
-+ {
-+ filename = user_string($arg1);
-+ funcname = user_string($arg2);
-+ lineno = $arg3;
-+ frameptr = $arg4
-+ }
-+
-+If this file is installed in SystemTap's tapset directory (e.g.
-+`/usr/share/systemtap/tapset`), then these additional probepoints become
-+available:
-+
-+.. c:function:: python.function.entry(str filename, str funcname, int lineno, frameptr)
-+
-+ This probe point indicates that execution of a Python function has begun.
-+ It is only triggered for pure-python (bytecode) functions.
-+
-+.. c:function:: python.function.return(str filename, str funcname, int lineno,
frameptr)
-+
-+ This probe point is the converse of `python.function.return`, and indicates
-+ that execution of a Python function has ended (either via ``return``, or
-+ via an exception). It is only triggered for pure-python (bytecode) functions.
-+
-+
-+Examples
-+--------
-+This SystemTap script uses the tapset above to more cleanly implement the
-+example given above of tracing the Python function-call hierarchy, without
-+needing to directly name the static markers:
-+
-+.. code-block:: c
-+
-+ probe python.function.entry
-+ {
-+ printf("%s => %s in %s:%d\n",
-+ thread_indent(1), funcname, filename, lineno);
-+ }
-+
-+ probe python.function.return
-+ {
-+ printf("%s <= %s in %s:%d\n",
-+ thread_indent(-1), funcname, filename, lineno);
-+ }
-+
-+
-+The following script uses the tapset above to provide a top-like view of all
-+running CPython code, showing the top 20 most frequently-entered bytecode
-+frames, each second, across the whole system:
-+
-+.. code-block:: c
-+
-+ global fn_calls;
-+
-+ probe python.function.entry
-+ {
-+ fn_calls[pid(), filename, funcname, lineno] += 1;
-+ }
-+
-+ probe timer.ms(1000) {
-+ printf("\033[2J\033[1;1H") /* clear screen */
-+ printf("%6s %80s %6s %30s %6s\n",
-+ "PID", "FILENAME", "LINE",
"FUNCTION", "CALLS")
-+ foreach ([pid, filename, funcname, lineno] in fn_calls- limit 20) {
-+ printf("%6d %80s %6d %30s %6d\n",
-+ pid, filename, lineno, funcname,
-+ fn_calls[pid, filename, funcname, lineno]);
-+ }
-+ delete fn_calls;
-+ }
-+
-diff -up Python-3.3.0rc2/Lib/test/test_systemtap.py.systemtap
Python-3.3.0rc2/Lib/test/test_systemtap.py
---- Python-3.3.0rc2/Lib/test/test_systemtap.py.systemtap 2012-09-10 09:17:21.117511779
-0400
-+++ Python-3.3.0rc2/Lib/test/test_systemtap.py 2012-09-10 09:17:21.117511779 -0400
-@@ -0,0 +1,234 @@
-+# Verify that systemtap static probes work
-+#
-+import subprocess
-+import sys
-+import sysconfig
-+import os
-+import unittest
-+
-+from test.support import run_unittest, TESTFN, unlink
-+
-+if '--with-systemtap' not in sysconfig.get_config_var('CONFIG_ARGS'):
-+ raise unittest.SkipTest("Python was not configured --with-systemtap")
-+
-+try:
-+ _, stap_version = subprocess.Popen(["stap", "-V"],
-+ stdout=subprocess.PIPE,
-+ stderr=subprocess.PIPE,
-+ ).communicate()
-+except OSError:
-+ # This is what "no stap" looks like. There may, however, be other
-+ # errors that manifest this way too.
-+ raise unittest.SkipTest("Couldn't find stap on the path")
-+
-+def invoke_systemtap_script(script, cmd):
-+ # Start a child process, probing with the given systemtap script
-+ # (passed as stdin to the "stap" tool)
-+ # The script should be a bytes instance
-+ # Return (stdout, stderr) pair
-+
-+ p = subprocess.Popen(["stap", "-", '-vv', '-c',
cmd],
-+ stdin=subprocess.PIPE,
-+ stdout=subprocess.PIPE,
-+ stderr=subprocess.PIPE)
-+ out, err = p.communicate(input=script)
-+ return out, err
-+
-+# Verify that stap can run a simple "hello world"-style script
-+# This can fail for various reasons:
-+# - missing kernel headers
-+# - permissions (a non-root user needs to be in the "stapdev" group)
-+TRIVIAL_STAP_SCRIPT = b'probe begin { println("hello world") exit ()
}'
-+
-+out, err = invoke_systemtap_script(TRIVIAL_STAP_SCRIPT, 'true')
-+if out != b'hello world\n':
-+ raise unittest.SkipTest("Test systemtap script did not run; stderr was:
%s" % err)
-+
-+# We don't expect stderr to be empty, since we're invoking stap with
"-vv": stap
-+# will (we hope) generate debugging output on stderr.
-+
-+def invoke_python_under_systemtap(script, pythoncode=None, pythonfile=None):
-+ # Start a child python process, probing with the given systemtap script
-+ # (passed as stdin to the "stap" tool)
-+ # The script should be a bytes instance
-+ # Return (stdout, stderr) pair
-+
-+ if pythonfile:
-+ pythoncmd = '%s %s' % (sys.executable, pythonfile)
-+ else:
-+ pythoncmd = '%s -c %r' % (sys.executable, pythoncode)
-+
-+ # The process tree of a stap invocation of a command goes through
-+ # something like this:
-+ # stap ->fork/exec(staprun; exec stapio ->f/e(-c cmd); exec staprun -r)
-+ # and this trip through setuid leads to LD_LIBRARY_PATH being dropped,
-+ # which would lead to an --enable-shared build of python failing to be
-+ # find its libpython, with an error like:
-+ # error while loading shared libraries: libpython3.3dm.so.1.0: cannot
-+ # open shared object file: No such file or directory
-+ # Hence we need to jump through some hoops to expose LD_LIBRARY_PATH to
-+ # the invoked python process:
-+ LD_LIBRARY_PATH = os.environ.get('LD_LIBRARY_PATH', '')
-+ if LD_LIBRARY_PATH:
-+ pythoncmd = 'env LD_LIBRARY_PATH=%s ' % LD_LIBRARY_PATH + pythoncmd
-+
-+ return invoke_systemtap_script(script, pythoncmd)
-+
-+# When using the static markers, we need to supply the prefix of a systemtap
-+# dotted probe point that containing the marker.
-+# See
http://sourceware.org/systemtap/langref/Probe_points.html
-+#
-+# We need to determine if this is a shared-library build
-+#
-+# Note that sysconfig can get this wrong; see:
-+#
http://bugs.python.org/issue14774
-+#
-+if '--enable-shared' in sysconfig.get_config_var('CONFIG_ARGS'):
-+ # For a shared-library build, the markers are in library(INSTSONAME):
-+ INSTSONAME = sysconfig.get_config_var('INSTSONAME')
-+ probe_prefix = 'process("%s").library("%s")' %
(sys.executable, INSTSONAME)
-+else:
-+ # For a non-shared-library build, we can simply use sys.executable:
-+ probe_prefix = 'process("%s")' % sys.executable
-+
-+# The following script ought to generate lots of lines showing recursive
-+# function entry and return, of the form:
-+# 11408 python(8274): => __contains__ in Lib/_abcoll.py:362
-+# 11414 python(8274): => __getitem__ in Lib/os.py:425
-+# 11418 python(8274): => encode in Lib/os.py:490
-+# 11424 python(8274): <= encode in Lib/os.py:493
-+# 11428 python(8274): <= __getitem__ in Lib/os.py:426
-+# 11433 python(8274): <= __contains__ in Lib/_abcoll.py:366
-+# where the column are:
-+# - time in microseconds since start of script
-+# - name of executable
-+# - PID of process
-+# and the remainder indicates the call/return hierarchy
-+
-+hierarchy_script = ('''
-+probe %s.mark("function__entry") {
-+ filename = user_string($arg1);
-+ funcname = user_string($arg2);
-+ lineno = $arg3;
-+
-+ printf("%%s => %%s in %%s:%%d\\n", thread_indent(1), funcname,
filename, lineno);
-+}
-+
-+probe %s.mark("function__return") {
-+ filename = user_string($arg1);
-+ funcname = user_string($arg2);
-+ lineno = $arg3;
-+
-+ printf("%%s <= %%s in %%s:%%d\\n", thread_indent(-1), funcname,
filename, lineno);
-+}
-+''' % (probe_prefix, probe_prefix)).encode('utf-8')
-+
-+
-+class ErrorDumper:
-+ # A context manager that dumps extra information if an exception is raised,
-+ # to help track down why the problem occurred
-+ def __init__(self, out, err):
-+ self.out = out
-+ self.err = err
-+
-+ def __enter__(self):
-+ pass
-+
-+ def __exit__(self, type_, value, traceback):
-+ if type_:
-+ # an exception is being raised:
-+ print('stdout: %s' % out.decode())
-+ print('stderr: %s' % err.decode())
-+
-+class SystemtapTests(unittest.TestCase):
-+
-+ def test_invoking_python(self):
-+ # Ensure that we can invoke python under stap, with a trivial stap
-+ # script:
-+ out, err = invoke_python_under_systemtap(
-+ b'probe begin { println("hello from stap") exit () }',
-+ pythoncode="print('hello from python')")
-+ with ErrorDumper(out, err):
-+ self.assertIn(b'hello from stap', out)
-+ self.assertIn(b'hello from python', out)
-+
-+ def test_function_entry(self):
-+ # Ensure that the function_entry static marker works
-+ out, err = invoke_python_under_systemtap(hierarchy_script)
-+ # stdout ought to contain various lines showing recursive function
-+ # entry and return (see above)
-+
-+ # Uncomment this for debugging purposes:
-+ # print(out.decode('utf-8'))
-+
-+ # Executing the cmdline-supplied "pass":
-+ # 0 python(8274): => <module> in <string>:1
-+ # 5 python(8274): <= <module> in <string>:1
-+ with ErrorDumper(out, err):
-+ self.assertIn(b'=> <module> in <string>:1', out,
-+ msg="stdout: %s\nstderr: %s\n" % (out, err))
-+
-+ def test_function_encoding(self):
-+ # Ensure that function names containing non-Latin 1 code
-+ # points are handled:
-+ pythonfile = TESTFN
-+ try:
-+ unlink(pythonfile)
-+ f = open(pythonfile, "wb")
-+ f.write("""
-+# Sample script with non-ASCII filename, for use by test_systemtap.py
-+# Implicitly UTF-8
-+
-+def ():
-+ '''Function with non-ASCII identifier; I believe this reads
"mojibake"'''
-+ print("hello world!")
-+
-+()
-+""".encode('utf-8'))
-+ f.close()
-+
-+ out, err = invoke_python_under_systemtap(hierarchy_script,
-+ pythonfile=pythonfile)
-+ out_utf8 = out.decode('utf-8')
-+ with ErrorDumper(out, err):
-+ self.assertIn('=> <module> in %s:5' % pythonfile,
out_utf8)
-+ self.assertIn(' => in %s:5' % pythonfile, out_utf8)
-+ self.assertIn(' <= in %s:7' % pythonfile, out_utf8)
-+ self.assertIn('<= <module> in %s:9' % pythonfile,
out_utf8)
-+ finally:
-+ unlink(pythonfile)
-+
-+ @unittest.skipIf(sys.getfilesystemencoding() == 'ascii',
-+ 'the test filename is not encodable with ASCII')
-+ def test_filename_encoding(self):
-+ # Ensure that scripts names containing non-Latin 1 code
-+ # points are handled:
-+ pythonfile = TESTFN + '_.py'
-+ try:
-+ unlink(pythonfile)
-+ f = open(pythonfile, "wb")
-+ f.write("""
-+def foo():
-+ '''Function with non-ASCII identifier; I believe this reads
"mojibake"'''
-+ print("hello world!")
-+
-+foo()
-+""".encode('utf-8'))
-+ f.close()
-+
-+ out, err = invoke_python_under_systemtap(hierarchy_script,
-+ pythonfile=pythonfile)
-+ out_utf8 = out.decode('utf-8')
-+ with ErrorDumper(out, err):
-+ self.assertIn('=> <module> in %s:2' % pythonfile,
out_utf8)
-+ self.assertIn(' => foo in %s:2' % pythonfile, out_utf8)
-+ self.assertIn(' <= foo in %s:4' % pythonfile, out_utf8)
-+ self.assertIn('<= <module> in %s:6' % pythonfile,
out_utf8)
-+ finally:
-+ unlink(pythonfile)
-+
-+def test_main():
-+ run_unittest(SystemtapTests)
-+
-+if __name__ == "__main__":
-+ test_main()
-diff -up Python-3.3.0rc2/Makefile.pre.in.systemtap Python-3.3.0rc2/Makefile.pre.in
---- Python-3.3.0rc2/Makefile.pre.in.systemtap 2012-09-09 05:11:05.000000000 -0400
-+++ Python-3.3.0rc2/Makefile.pre.in 2012-09-10 09:19:51.195501518 -0400
-@@ -363,6 +363,7 @@ PYTHON_OBJS= \
- Python/formatter_unicode.o \
- Python/fileutils.o \
- Python/$(DYNLOADFILE) \
-+ @SYSTEMTAPOBJS@ \
- $(LIBOBJS) \
- $(MACHDEP_OBJS) \
- $(THREADOBJ)
-@@ -713,7 +714,8 @@ Objects/setobject.o: $(srcdir)/Objects/s
- $(OPCODETARGETS_H): $(OPCODETARGETGEN_FILES)
- $(OPCODETARGETGEN) $(OPCODETARGETS_H)
-
--Python/ceval.o: $(OPCODETARGETS_H) $(srcdir)/Python/ceval_gil.h
-+Python/ceval.o: $(OPCODETARGETS_H) $(srcdir)/Python/ceval_gil.h \
-+ $(srcdir)/Python/ceval_systemtap.h @SYSTEMTAPDEPS@
-
- Python/frozen.o: Python/importlib.h Python/importlib_external.h
-
-@@ -724,6 +726,13 @@ Objects/typeobject.o: $(srcdir)/Objects/
- Objects/typeslots.inc: $(srcdir)/Include/typeslots.h $(srcdir)/Objects/typeslots.py
- $(PYTHON) $(srcdir)/Objects/typeslots.py < $(srcdir)/Include/typeslots.h >
Objects/typeslots.inc
-
-+# Only needed with --with-systemtap; not a public header:
-+$(srcdir)/Python/pysystemtap.h: $(srcdir)/Python/pysystemtap.d
-+ dtrace -o $@ $(DFLAGS) -C -h -s $(srcdir)/Python/pysystemtap.d
-+
-+Python/pysystemtap.o: $(srcdir)/Python/pysystemtap.d Python/ceval.o
-+ dtrace -o $@ $(DFLAGS) -C -G -s $(srcdir)/Python/pysystemtap.d Python/ceval.o
-+
- ############################################################################
- # Header files
-
-@@ -1345,6 +1354,7 @@ clean: pycremoval
- -rm -f Lib/lib2to3/*Grammar*.pickle
- -rm -f Programs/_testembed Programs/_freeze_importlib
- -rm -rf build
-+ -rm -f $(srcdir)/Python/pysystemtap.h
-
- profile-removal:
- find . -name '*.gc??' -exec rm -f {} ';'
-diff -up Python-3.3.0rc2/pyconfig.h.in.systemtap Python-3.3.0rc2/pyconfig.h.in
---- Python-3.3.0rc2/pyconfig.h.in.systemtap 2012-09-09 05:11:14.000000000 -0400
-+++ Python-3.3.0rc2/pyconfig.h.in 2012-09-10 09:17:21.120511781 -0400
-@@ -1306,6 +1306,9 @@
- /* Define if you want to compile in Python-specific mallocs */
- #undef WITH_PYMALLOC
-
-+/* Define if you want to compile in SystemTap support */
-+#undef WITH_SYSTEMTAP
-+
- /* Define if you want to compile in rudimentary thread support */
- #undef WITH_THREAD
-
-diff -up Python-3.3.0rc2/Python/ceval.c.systemtap Python-3.3.0rc2/Python/ceval.c
---- Python-3.3.0rc2/Python/ceval.c.systemtap 2012-09-09 05:11:12.000000000 -0400
-+++ Python-3.3.0rc2/Python/ceval.c 2012-09-10 09:17:21.122511781 -0400
-@@ -18,6 +18,8 @@
-
- #include <ctype.h>
-
-+#include "ceval_systemtap.h"
-+
- #ifndef WITH_TSC
-
- #define READ_TIMESTAMP(var)
-@@ -1160,6 +1162,10 @@ PyEval_EvalFrameEx(PyFrameObject *f, int
- }
- }
-
-+ if (PYTHON_FUNCTION_ENTRY_ENABLED()) {
-+ systemtap_function_entry(f);
-+ }
-+
- co = f->f_code;
- names = co->co_names;
- consts = co->co_consts;
-@@ -3077,6 +3083,11 @@ fast_yield:
-
- /* pop frame */
- exit_eval_frame:
-+
-+ if (PYTHON_FUNCTION_RETURN_ENABLED()) {
-+ systemtap_function_return(f);
-+ }
-+
- Py_LeaveRecursiveCall();
- f->f_executing = 0;
- tstate->frame = f->f_back;
-diff -up Python-3.3.0rc2/Python/ceval_systemtap.h.systemtap
Python-3.3.0rc2/Python/ceval_systemtap.h
---- Python-3.3.0rc2/Python/ceval_systemtap.h.systemtap 2012-09-10 09:17:21.122511781
-0400
-+++ Python-3.3.0rc2/Python/ceval_systemtap.h 2012-09-10 09:17:21.122511781 -0400
-@@ -0,0 +1,86 @@
-+/*
-+ Support for SystemTap static markers
-+*/
-+
-+#ifdef WITH_SYSTEMTAP
-+
-+#include "pysystemtap.h"
-+
-+/*
-+ A struct to hold all of the information gathered when one of the traceable
-+ markers is triggered
-+*/
-+struct frame_marker_info
-+{
-+ PyObject *filename_obj;
-+ PyObject *funcname_obj;
-+ const char *filename;
-+ const char *funcname;
-+ int lineno;
-+};
-+
-+static void
-+get_frame_marker_info(PyFrameObject *f, struct frame_marker_info *fmi)
-+{
-+ PyObject *ptype;
-+ PyObject *pvalue;
-+ PyObject *ptraceback;
-+
-+ PyErr_Fetch(&ptype, &pvalue, &ptraceback);
-+
-+ fmi->filename_obj = PyUnicode_EncodeFSDefault(f->f_code->co_filename);
-+ if (fmi->filename_obj) {
-+ fmi->filename = PyBytes_AsString(fmi->filename_obj);
-+ } else {
-+ fmi->filename = NULL;
-+ }
-+
-+ fmi->funcname_obj = PyUnicode_AsUTF8String(f->f_code->co_name);
-+ if (fmi->funcname_obj) {
-+ fmi->funcname = PyBytes_AsString(fmi->funcname_obj);
-+ } else {
-+ fmi->funcname = NULL;
-+ }
-+
-+ fmi->lineno = PyCode_Addr2Line(f->f_code, f->f_lasti);
-+
-+ PyErr_Restore(ptype, pvalue, ptraceback);
-+
-+}
-+
-+static void
-+release_frame_marker_info(struct frame_marker_info *fmi)
-+{
-+ Py_XDECREF(fmi->filename_obj);
-+ Py_XDECREF(fmi->funcname_obj);
-+}
-+
-+static void
-+systemtap_function_entry(PyFrameObject *f)
-+{
-+ struct frame_marker_info fmi;
-+ get_frame_marker_info(f, &fmi);
-+ PYTHON_FUNCTION_ENTRY(fmi.filename, fmi.funcname, fmi.lineno, f);
-+ release_frame_marker_info(&fmi);
-+}
-+
-+static void
-+systemtap_function_return(PyFrameObject *f)
-+{
-+ struct frame_marker_info fmi;
-+ get_frame_marker_info(f, &fmi);
-+ PYTHON_FUNCTION_RETURN(fmi.filename, fmi.funcname, fmi.lineno, f);
-+ release_frame_marker_info(&fmi);
-+}
-+
-+#else /* #ifdef WITH_SYSTEMTAP */
-+
-+/*
-+ When configured --without-systemtap, everything compiles away to nothing:
-+*/
-+#define PYTHON_FUNCTION_ENTRY_ENABLED() 0
-+#define PYTHON_FUNCTION_RETURN_ENABLED() 0
-+#define systemtap_function_entry(f)
-+#define systemtap_function_return(f)
-+
-+#endif
-diff -up Python-3.3.0rc2/Python/pysystemtap.d.systemtap
Python-3.3.0rc2/Python/pysystemtap.d
---- Python-3.3.0rc2/Python/pysystemtap.d.systemtap 2012-09-10 09:17:21.122511781 -0400
-+++ Python-3.3.0rc2/Python/pysystemtap.d 2012-09-10 09:17:21.122511781 -0400
-@@ -0,0 +1,4 @@
-+provider python {
-+ probe function__entry(const char *, const char *, int, PyFrameObject *);
-+ probe function__return(const char *, const char *, int, PyFrameObject *);
-+};
diff --git a/libpython.stp b/libpython.stp
deleted file mode 100644
index f41da80..0000000
--- a/libpython.stp
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Systemtap tapset to make it easier to trace Python */
-
-/*
- Define python.function.entry/return:
-*/
-probe python.function.entry =
process("python3").library("LIBRARY_PATH").mark("function__entry")
-{
- filename = user_string($arg1);
- funcname = user_string($arg2);
- lineno = $arg3;
-}
-probe python.function.return =
process("python3").library("LIBRARY_PATH").mark("function__return")
-{
- filename = user_string($arg1);
- funcname = user_string($arg2);
- lineno = $arg3;
-}
diff --git a/pyfuntop.stp b/pyfuntop.stp
deleted file mode 100644
index f235a23..0000000
--- a/pyfuntop.stp
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/stap
-
-global fn_calls;
-
-probe python.function.entry
-{
- fn_calls[pid(), filename, funcname, lineno] += 1;
-}
-
-probe timer.ms(1000) {
- printf("\033[2J\033[1;1H") /* clear screen */
- printf("%6s %80s %6s %30s %6s\n",
- "PID", "FILENAME", "LINE", "FUNCTION",
"CALLS")
- foreach ([pid, filename, funcname, lineno] in fn_calls- limit 20) {
- printf("%6d %80s %6d %30s %6d\n",
- pid, filename, lineno, funcname,
- fn_calls[pid, filename, funcname, lineno]);
- }
-
- delete fn_calls;
-}
diff --git a/python3.spec b/python3.spec
index 9b8f122..29a7d70 100644
--- a/python3.spec
+++ b/python3.spec
@@ -47,9 +47,6 @@ License: Python
# Support for the GDB debugger
%bcond_without gdb_hooks
-# Support for systemtap instrumentation
-%bcond_with systemtap
-
# The dbm.gnu module (key-value database)
%bcond_without gdbm
@@ -192,12 +189,6 @@ BuildRequires: readline-devel
BuildRequires: sqlite-devel
BuildRequires: gdb
-%if %{with systemtap}
-BuildRequires: systemtap-devel
-BuildRequires: systemtap-sdt-devel
-%global tapsetdir /usr/share/systemtap/tapset
-%endif
-
BuildRequires: tar
BuildRequires: tcl-devel
BuildRequires: tix-devel
@@ -232,19 +223,6 @@ Source:
https://www.python.org/ftp/python/%{version}/Python-%{version}.tar.xz
# with different Python runtimes as necessary:
Source3: macros.pybytecompile%{pybasever}
-# Systemtap tapset to make it easier to use the systemtap static probes
-# (actually a template; LIBRARY_PATH will get fixed up during install)
-# Written by dmalcolm; not yet sent upstream
-Source5: libpython.stp
-
-# Example systemtap script using the tapset
-# Written by wcohen, mjw, dmalcolm; not yet sent upstream
-Source6: systemtap-example.stp
-
-# Another example systemtap script that uses the tapset
-# Written by dmalcolm; not yet sent upstream
-Source7: pyfuntop.stp
-
# A simple script to check timestamps of bytecode files
# Run in check section with Python that is currently being built
# Written by bkabrda
@@ -265,13 +243,6 @@ Source11: idle3.appdata.xml
# Was Patch0 in ivazquez' python3000 specfile:
Patch1: 00001-rpath.patch
-# 00055 #
-# Systemtap support: add statically-defined probe points
-# Patch sent upstream as
http://bugs.python.org/issue14776
-# with some subsequent reworking to cope with LANG=C in an rpmbuild
-# (where sys.getfilesystemencoding() == 'ascii')
-Patch55: 00055-systemtap.patch
-
# 00102 #
# Change the various install paths to use /usr/lib64/ instead or /usr/lib
# Only used when "%{_lib}" == "lib64"
@@ -611,12 +582,6 @@ so extensions for both verisons can co-exist in the same directory.
%prep
%setup -q -n Python-%{version}%{?prerel}
-%if %{with systemtap}
-# Provide an example of usage of the tapset:
-cp -a %{SOURCE6} .
-cp -a %{SOURCE7} .
-%endif # with systemtap
-
# Remove bundled libraries to ensure that we're using the system copy.
rm -r Modules/expat
rm -r Modules/zlib
@@ -631,10 +596,6 @@ sed -r -i s/'_PIP_VERSION =
"[0-9.]+"'/'_PIP_VERSION = "%{pip_version}"'/ Lib/en
#
%patch1 -p1
-%if %{with systemtap}
-%patch55 -p1 -b .systemtap
-%endif
-
%if "%{_lib}" == "lib64"
%patch102 -p1
%endif
@@ -733,9 +694,6 @@ BuildPython() {
--enable-loadable-sqlite-extensions \
--with-dtrace \
--with-lto \
-%if %{with systemtap}
- --with-systemtap \
-%endif
%if %{with valgrind}
--with-valgrind \
%endif
@@ -857,16 +815,6 @@ InstallPython() {
#endif
EOF
- # Systemtap hooks
-%if %{with systemtap}
- mkdir -p %{buildroot}%{tapsetdir}
- sed \
- -e "s|LIBRARY_PATH|%{_libdir}/${PyInstSoName}|" \
- -e 's|"python3"|"python3${Postfix}"|' \
- %{_sourcedir}/libpython.stp \
- > %{buildroot}%{tapsetdir}/libpython%{pybasever}${Postfix}-%{wordsize}.stp
-%endif # with systemtap
-
echo FINISHED: INSTALL OF PYTHON FOR CONFIGURATION: $ConfName
}
@@ -1354,12 +1302,6 @@ fi
%{_libdir}/%{py_INSTSONAME_optimized}
%{_libdir}/libpython3.so
-%if %{with systemtap}
-%dir %(dirname %{tapsetdir})
-%dir %{tapsetdir}
-%{tapsetdir}/%{libpython_stp_optimized}
-%doc systemtap-example.stp pyfuntop.stp
-%endif
%files devel
%defattr(-,root,root)
@@ -1509,11 +1451,6 @@ fi
# now; they're listed below, under "-devel":
%{_libdir}/%{py_INSTSONAME_debug}
-%if %{with systemtap}
-%dir %(dirname %{tapsetdir})
-%dir %{tapsetdir}
-%{tapsetdir}/%{libpython_stp_debug}
-%endif
# Analog of the -devel subpackage's files:
%{pylibdir}/config-%{LDVERSION_debug}-%{_arch}-linux%{_gnu}
diff --git a/systemtap-example.stp b/systemtap-example.stp
deleted file mode 100644
index 164333a..0000000
--- a/systemtap-example.stp
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- Example usage of the Python systemtap tapset to show a nested view of all
- Python function calls (and returns) across the whole system.
-
- Run this using
- stap systemtap-example.stp
- to instrument all Python processes on the system, or (for example) using
- stap systemtap-example.stp -c COMMAND
- to instrument a specific program (implemented in Python)
-*/
-probe python.function.entry
-{
- printf("%s => %s in %s:%d\n", thread_indent(1), funcname, filename,
lineno);
-}
-
-probe python.function.return
-{
- printf("%s <= %s in %s:%d\n", thread_indent(-1), funcname, filename,
lineno);
-}