The package rpms/python34.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/python34.git/commit/?id=87bf78428....
Change:
-%ifarch %{power64} s390x x86_64 ia64 alpha sparc64 aarch64
Thanks.
Full change:
============
commit 87bf78428443079725f84cc54c7b2730b4ba508b
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Aug 4 20:26:53 2020 +0200
https://fedoraproject.org/wiki/Changes/RetirePython34
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index f64d992..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,7 +0,0 @@
-/Python-3.4.3.tar.xz
-/Python-3.4.5.tar.xz
-/Python-3.4.7.tar.xz
-/Python-3.4.8.tar.xz
-/Python-3.4.9.tar.xz
-/Python-3.4.10rc1.tar.xz
-/Python-3.4.10.tar.xz
diff --git a/00055-systemtap.patch b/00055-systemtap.patch
deleted file mode 100644
index db4d006..0000000
--- a/00055-systemtap.patch
+++ /dev/null
@@ -1,822 +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/configure.systemtap Python-3.3.0rc2/configure
---- Python-3.3.0rc2/configure.systemtap 2012-09-09 05:11:14.000000000 -0400
-+++ Python-3.3.0rc2/configure 2012-09-10 09:17:21.116511780 -0400
-@@ -618,6 +618,8 @@ TRUE
- MACHDEP_OBJS
- DYNLOADFILE
- DLINCLDIR
-+SYSTEMTAPDEPS
-+SYSTEMTAPOBJS
- THREADOBJ
- LDLAST
- USE_THREAD_MODULE
-@@ -779,6 +781,7 @@ with_doc_strings
- with_tsc
- with_pymalloc
- with_valgrind
-+with_systemtap
- with_fpectl
- with_libm
- with_libc
-@@ -1456,6 +1459,7 @@ Optional Packages:
- --with(out)-tsc enable/disable timestamp counter profile
- --with(out)-pymalloc disable/enable specialized mallocs
- --with-valgrind Enable Valgrind support
-+ --with(out)-systemtap disable/enable SystemTap support
- --with-fpectl enable SIGFPE catching
- --with-libm=STRING math library
- --with-libc=STRING C library
-@@ -10065,6 +10069,31 @@ fi
- OPT="-DDYNAMIC_ANNOTATIONS_ENABLED=1 $OPT"
- fi
-
-+# Check for systemtap support
-+# On Linux, /usr/bin/dtrace is in fact a shim to SystemTap
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-systemtap"
>&5
-+$as_echo_n "checking for --with-systemtap... " >&6; }
-+
-+# Check whether --with-systemtap was given.
-+if test "${with_systemtap+set}" = set; then :
-+ withval=$with_systemtap;
-+else
-+ with_systemtap=no
-+fi
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_systemtap" >&5
-+$as_echo "$with_systemtap" >&6; }
-+if test "$with_systemtap" != no; then
-+
-+$as_echo "#define WITH_SYSTEMTAP 1" >>confdefs.h
-+
-+ SYSTEMTAPOBJS="Python/pysystemtap.o"
-+ SYSTEMTAPDEPS="\$(srcdir)/Python/pysystemtap.h"
-+fi
-+
-+
-+
-+
- # -I${DLINCLDIR} is added to the compile rule for importdl.o
-
- 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
-
-@@ -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 pybuilddir.txt
- -rm -f Lib/lib2to3/*Grammar*.pickle
- -rm -f Modules/_testembed Modules/_freeze_importlib
-+ -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/00102-lib64.patch b/00102-lib64.patch
deleted file mode 100644
index d59430a..0000000
--- a/00102-lib64.patch
+++ /dev/null
@@ -1,234 +0,0 @@
-diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py
-index d768dc5..a051164 100644
---- a/Lib/distutils/command/install.py
-+++ b/Lib/distutils/command/install.py
-@@ -30,14 +30,14 @@ WINDOWS_SCHEME = {
- INSTALL_SCHEMES = {
- 'unix_prefix': {
- 'purelib': '$base/lib/python$py_version_short/site-packages',
-- 'platlib':
'$platbase/lib/python$py_version_short/site-packages',
-+ 'platlib':
'$platbase/lib64/python$py_version_short/site-packages',
- 'headers':
'$base/include/python$py_version_short$abiflags/$dist_name',
- 'scripts': '$base/bin',
- 'data' : '$base',
- },
- 'unix_home': {
- 'purelib': '$base/lib/python',
-- 'platlib': '$base/lib/python',
-+ 'platlib': '$base/lib64/python',
- 'headers': '$base/include/python/$dist_name',
- 'scripts': '$base/bin',
- 'data' : '$base',
-diff --git a/Lib/distutils/sysconfig.py b/Lib/distutils/sysconfig.py
-index a1452fe..795c559 100644
---- a/Lib/distutils/sysconfig.py
-+++ b/Lib/distutils/sysconfig.py
-@@ -141,8 +141,12 @@ def get_python_lib(plat_specific=0, standard_lib=0, prefix=None):
- prefix = plat_specific and EXEC_PREFIX or PREFIX
-
- if os.name == "posix":
-+ if plat_specific or standard_lib:
-+ lib = "lib64"
-+ else:
-+ lib = "lib"
- libpython = os.path.join(prefix,
-- "lib", "python" +
get_python_version())
-+ lib, "python" + get_python_version())
- if standard_lib:
- return libpython
- else:
-diff --git a/Lib/site.py b/Lib/site.py
-index 3c8584b..2e47052 100644
---- a/Lib/site.py
-+++ b/Lib/site.py
-@@ -304,12 +304,16 @@ def getsitepackages(prefixes=None):
- seen.add(prefix)
-
- if os.sep == '/':
-+ sitepackages.append(os.path.join(prefix, "lib64",
-+ "python" + sys.version[:3],
-+ "site-packages"))
- sitepackages.append(os.path.join(prefix, "lib",
- "python" + sys.version[:3],
- "site-packages"))
- sitepackages.append(os.path.join(prefix, "lib",
"site-python"))
- else:
- sitepackages.append(prefix)
-+ sitepackages.append(os.path.join(prefix, "lib64",
"site-packages"))
- sitepackages.append(os.path.join(prefix, "lib",
"site-packages"))
- if sys.platform == "darwin":
- # for framework builds *only* we add the standard Apple
-diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py
-index dbf7767..dba45c7 100644
---- a/Lib/sysconfig.py
-+++ b/Lib/sysconfig.py
-@@ -20,10 +20,10 @@ __all__ = [
-
- _INSTALL_SCHEMES = {
- 'posix_prefix': {
-- 'stdlib': '{installed_base}/lib/python{py_version_short}',
-- 'platstdlib': '{platbase}/lib/python{py_version_short}',
-+ 'stdlib': '{installed_base}/lib64/python{py_version_short}',
-+ 'platstdlib': '{platbase}/lib64/python{py_version_short}',
- 'purelib': '{base}/lib/python{py_version_short}/site-packages',
-- 'platlib':
'{platbase}/lib/python{py_version_short}/site-packages',
-+ 'platlib':
'{platbase}/lib64/python{py_version_short}/site-packages',
- 'include':
- '{installed_base}/include/python{py_version_short}{abiflags}',
- 'platinclude':
-@@ -61,10 +61,10 @@ _INSTALL_SCHEMES = {
- 'data': '{userbase}',
- },
- 'posix_user': {
-- 'stdlib': '{userbase}/lib/python{py_version_short}',
-- 'platstdlib': '{userbase}/lib/python{py_version_short}',
-+ 'stdlib': '{userbase}/lib64/python{py_version_short}',
-+ 'platstdlib': '{userbase}/lib64/python{py_version_short}',
- 'purelib':
'{userbase}/lib/python{py_version_short}/site-packages',
-- 'platlib':
'{userbase}/lib/python{py_version_short}/site-packages',
-+ 'platlib':
'{userbase}/lib64/python{py_version_short}/site-packages',
- 'include': '{userbase}/include/python{py_version_short}',
- 'scripts': '{userbase}/bin',
- 'data': '{userbase}',
-diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py
-index f71cf73..28b5bb9 100644
---- a/Lib/test/test_site.py
-+++ b/Lib/test/test_site.py
-@@ -243,12 +243,15 @@ class HelperFunctionsTests(unittest.TestCase):
- self.assertEqual(dirs[2], wanted)
- elif os.sep == '/':
- # OS X non-framwework builds, Linux, FreeBSD, etc
-- self.assertEqual(len(dirs), 2)
-- wanted = os.path.join('xoxo', 'lib', 'python' +
sys.version[:3],
-+ self.assertEqual(len(dirs), 3)
-+ wanted = os.path.join('xoxo', 'lib64', 'python' +
sys.version[:3],
- 'site-packages')
- self.assertEqual(dirs[0], wanted)
-- wanted = os.path.join('xoxo', 'lib', 'site-python')
-+ wanted = os.path.join('xoxo', 'lib', 'python' +
sys.version[:3],
-+ 'site-packages')
- self.assertEqual(dirs[1], wanted)
-+ wanted = os.path.join('xoxo', 'lib', 'site-python')
-+ self.assertEqual(dirs[2], wanted)
- else:
- # other platforms
- self.assertEqual(len(dirs), 2)
-diff --git a/Makefile.pre.in b/Makefile.pre.in
-index e19fc00..9a2538b 100644
---- a/Makefile.pre.in
-+++ b/Makefile.pre.in
-@@ -120,7 +120,7 @@ LIBDIR= @libdir@
- MANDIR= @mandir@
- INCLUDEDIR= @includedir@
- CONFINCLUDEDIR= $(exec_prefix)/include
--SCRIPTDIR= $(prefix)/lib
-+SCRIPTDIR= $(prefix)/lib64
- ABIFLAGS= @ABIFLAGS@
-
- # Detailed destination directories
-diff --git a/Modules/getpath.c b/Modules/getpath.c
-index 13e3817..a31ab0c 100644
---- a/Modules/getpath.c
-+++ b/Modules/getpath.c
-@@ -118,8 +118,8 @@
- #endif
-
- #ifndef PYTHONPATH
--#define PYTHONPATH PREFIX "/lib/python" VERSION ":" \
-- EXEC_PREFIX "/lib/python" VERSION "/lib-dynload"
-+#define PYTHONPATH PREFIX "/lib64/python" VERSION ":" \
-+ EXEC_PREFIX "/lib64/python" VERSION "/lib-dynload"
- #endif
-
- #ifndef LANDMARK
-@@ -494,7 +494,7 @@ calculate_path(void)
- _pythonpath = _Py_char2wchar(PYTHONPATH, NULL);
- _prefix = _Py_char2wchar(PREFIX, NULL);
- _exec_prefix = _Py_char2wchar(EXEC_PREFIX, NULL);
-- lib_python = _Py_char2wchar("lib/python" VERSION, NULL);
-+ lib_python = _Py_char2wchar("lib64/python" VERSION, NULL);
-
- if (!_pythonpath || !_prefix || !_exec_prefix || !lib_python) {
- Py_FatalError(
-@@ -683,7 +683,7 @@ calculate_path(void)
- }
- else
- wcsncpy(zip_path, _prefix, MAXPATHLEN);
-- joinpath(zip_path, L"lib/python00.zip");
-+ joinpath(zip_path, L"lib64/python00.zip");
- bufsz = wcslen(zip_path); /* Replace "00" with version */
- zip_path[bufsz - 6] = VERSION[0];
- zip_path[bufsz - 5] = VERSION[2];
-@@ -695,7 +695,7 @@ calculate_path(void)
- fprintf(stderr,
- "Could not find platform dependent libraries
<exec_prefix>\n");
- wcsncpy(exec_prefix, _exec_prefix, MAXPATHLEN);
-- joinpath(exec_prefix, L"lib/lib-dynload");
-+ joinpath(exec_prefix, L"lib64/lib-dynload");
- }
- /* If we found EXEC_PREFIX do *not* reduce it! (Yet.) */
-
-diff --git a/configure b/configure
-index 7b91f91..9e830ed 100755
---- a/configure
-+++ b/configure
-@@ -14030,7 +14030,7 @@ LDVERSION='$(VERSION)$(ABIFLAGS)'
- $as_echo "$LDVERSION" >&6; }
-
-
--LIBPL='$(prefix)'"/lib/python${VERSION}/config-${LDVERSION}"
-+LIBPL='$(prefix)'"/lib64/python${VERSION}/config-${LDVERSION}"
-
-
- # Check whether right shifting a negative integer extends the sign bit
-diff --git a/configure.ac b/configure.ac
-index 3394d84..1321c93 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -4115,7 +4115,7 @@ AC_MSG_RESULT($LDVERSION)
-
- dnl define LIBPL after ABIFLAGS and LDVERSION is defined.
- AC_SUBST(PY_ENABLE_SHARED)
--LIBPL='$(prefix)'"/lib/python${VERSION}/config-${LDVERSION}"
-+LIBPL='$(prefix)'"/lib64/python${VERSION}/config-${LDVERSION}"
- AC_SUBST(LIBPL)
-
- # Check whether right shifting a negative integer extends the sign bit
-diff --git a/setup.py b/setup.py
-index 2779658..55e0bb8 100644
---- a/setup.py
-+++ b/setup.py
-@@ -451,7 +451,7 @@ class PyBuildExt(build_ext):
- # directories (i.e. '.' and 'Include') must be first. See
issue
- # 10520.
- if not cross_compiling:
-- add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
-+ add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib64')
- add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
- # only change this for cross builds for 3.3, issues on Mageia
- if cross_compiling:
-@@ -730,11 +730,11 @@ class PyBuildExt(build_ext):
- elif curses_library:
- readline_libs.append(curses_library)
- elif self.compiler.find_library_file(lib_dirs +
-- ['/usr/lib/termcap'],
-+ ['/usr/lib64/termcap'],
- 'termcap'):
- readline_libs.append('termcap')
- exts.append( Extension('readline', ['readline.c'],
-- library_dirs=['/usr/lib/termcap'],
-+ library_dirs=['/usr/lib64/termcap'],
- extra_link_args=readline_extra_link_args,
- libraries=readline_libs) )
- else:
-@@ -771,8 +771,8 @@ class PyBuildExt(build_ext):
- if krb5_h:
- ssl_incs += krb5_h
- ssl_libs = find_library_file(self.compiler, 'ssl',lib_dirs,
-- ['/usr/local/ssl/lib',
-- '/usr/contrib/ssl/lib/'
-+ ['/usr/local/ssl/lib64',
-+ '/usr/contrib/ssl/lib64/'
- ] )
-
- if (ssl_incs is not None and
diff --git a/00104-lib64-fix-for-test_install.patch
b/00104-lib64-fix-for-test_install.patch
deleted file mode 100644
index 7852bf6..0000000
--- a/00104-lib64-fix-for-test_install.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- Python-2.7.2/Lib/distutils/tests/test_install.py.lib64 2011-09-08 17:51:57.851405376
-0400
-+++ Python-2.7.2/Lib/distutils/tests/test_install.py 2011-09-08 18:40:46.754205096 -0400
-@@ -41,8 +41,9 @@ class InstallTestCase(support.TempdirMan
- self.assertEqual(got, expected)
-
- libdir = os.path.join(destination, "lib", "python")
-+ platlibdir = os.path.join(destination, "lib64", "python")
- check_path(cmd.install_lib, libdir)
-- check_path(cmd.install_platlib, libdir)
-+ check_path(cmd.install_platlib, platlibdir)
- check_path(cmd.install_purelib, libdir)
- check_path(cmd.install_headers,
- os.path.join(destination, "include", "python",
"foopkg"))
diff --git a/00111-no-static-lib.patch b/00111-no-static-lib.patch
deleted file mode 100644
index bd1bc40..0000000
--- a/00111-no-static-lib.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-diff -up cpython-59223da36dec/Makefile.pre.in.no-static-lib
cpython-59223da36dec/Makefile.pre.in
---- cpython-59223da36dec/Makefile.pre.in.no-static-lib 2012-08-07 16:43:43.296466422
-0400
-+++ cpython-59223da36dec/Makefile.pre.in 2012-08-07 16:44:13.299464371 -0400
-@@ -464,7 +464,7 @@ coverage:
- $(RUNSHARED) $(PYTHON_FOR_BUILD) ./Tools/clinic/clinic.py --make
-
- # Build the interpreter
--$(BUILDPYTHON): Modules/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY)
-+$(BUILDPYTHON): Modules/python.o $(LDLIBRARY) $(PY3LIBRARY)
- $(LINKCC) $(PY_LDFLAGS) $(LINKFORSHARED) -o $@ Modules/python.o $(BLDLIBRARY) $(LIBS)
$(MODLIBS) $(SYSLIBS) $(LDLAST)
-
- platform: $(BUILDPYTHON) pybuilddir.txt
-@@ -480,18 +480,6 @@ sharedmods: $(BUILDPYTHON) $(SYSCONFIGDA
- _TCLTK_INCLUDES='$(TCLTK_INCLUDES)' _TCLTK_LIBS='$(TCLTK_LIBS)' \
- $(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build
-
--# Build static library
--# avoid long command lines, same as LIBRARY_OBJS
--$(LIBRARY): $(LIBRARY_OBJS)
-- -rm -f $@
-- $(AR) $(ARFLAGS) $@ Modules/getbuildinfo.o
-- $(AR) $(ARFLAGS) $@ $(PARSER_OBJS)
-- $(AR) $(ARFLAGS) $@ $(OBJECT_OBJS)
-- $(AR) $(ARFLAGS) $@ $(PYTHON_OBJS) Python/frozen.o
-- $(AR) $(ARFLAGS) $@ $(MODULE_OBJS) $(SIGNAL_OBJS)
-- $(AR) $(ARFLAGS) $@ $(MODOBJS)
-- $(RANLIB) $@
--
- libpython$(LDVERSION).so: $(LIBRARY_OBJS)
- if test $(INSTSONAME) != $(LDLIBRARY); then \
- $(BLDSHARED) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS)
$(LIBC) $(LIBM) $(LDLAST); \
-@@ -581,7 +569,7 @@ Modules/Setup: $(srcdir)/Modules/Setup.d
- echo "-----------------------------------------------"; \
- fi
-
--Modules/_testembed: Modules/_testembed.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY)
-+Modules/_testembed: Modules/_testembed.o $(LDLIBRARY) $(PY3LIBRARY)
- $(LINKCC) $(PY_LDFLAGS) $(LINKFORSHARED) -o $@ Modules/_testembed.o $(BLDLIBRARY)
$(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
-
- ############################################################################
-@@ -1155,18 +1143,6 @@ libainstall: all python-config
- else true; \
- fi; \
- done
-- @if test -d $(LIBRARY); then :; else \
-- if test "$(PYTHONFRAMEWORKDIR)" = no-framework; then \
-- if test "$(SHLIB_SUFFIX)" = .dll; then \
-- $(INSTALL_DATA) $(LDLIBRARY) $(DESTDIR)$(LIBPL) ; \
-- else \
-- $(INSTALL_DATA) $(LIBRARY) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \
-- $(RANLIB) $(DESTDIR)$(LIBPL)/$(LIBRARY) ; \
-- fi; \
-- else \
-- echo Skip install of $(LIBRARY) - use make frameworkinstall; \
-- fi; \
-- fi
- $(INSTALL_DATA) Modules/config.c $(DESTDIR)$(LIBPL)/config.c
- $(INSTALL_DATA) Modules/python.o $(DESTDIR)$(LIBPL)/python.o
- $(INSTALL_DATA) $(srcdir)/Modules/config.c.in $(DESTDIR)$(LIBPL)/config.c.in
diff --git a/00113-more-configuration-flags.patch b/00113-more-configuration-flags.patch
deleted file mode 100644
index 1067af1..0000000
--- a/00113-more-configuration-flags.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-diff -up Python-3.3.0b1/configure.ac.more-configuration-flags
Python-3.3.0b1/configure.ac
---- Python-3.3.0b1/configure.ac.more-configuration-flags 2012-07-20 13:25:33.232864839
-0400
-+++ Python-3.3.0b1/configure.ac 2012-07-20 13:25:33.314863815 -0400
-@@ -2585,6 +2585,30 @@ else AC_MSG_RESULT(no)
- fi],
- [AC_MSG_RESULT(no)])
-
-+AC_MSG_CHECKING(for --with-count-allocs)
-+AC_ARG_WITH(count-allocs,
-+[ --with(out)count-allocs enable/disable per-type instance accounting], [
-+if test "$withval" != no
-+then
-+ AC_DEFINE(COUNT_ALLOCS, 1,
-+ [Define to keep records of the number of instances of each type])
-+ AC_MSG_RESULT(yes)
-+else AC_MSG_RESULT(no)
-+fi],
-+[AC_MSG_RESULT(no)])
-+
-+AC_MSG_CHECKING(for --with-call-profile)
-+AC_ARG_WITH(call-profile,
-+[ --with(out)-call-profile enable/disable statistics on function call invocation], [
-+if test "$withval" != no
-+then
-+ AC_DEFINE(CALL_PROFILE, 1,
-+ [Define to keep records on function call invocation])
-+ AC_MSG_RESULT(yes)
-+else AC_MSG_RESULT(no)
-+fi],
-+[AC_MSG_RESULT(no)])
-+
- # Check for Python-specific malloc support
- AC_MSG_CHECKING(for --with-pymalloc)
- AC_ARG_WITH(pymalloc,
-diff -up Python-3.3.0b1/pyconfig.h.in.more-configuration-flags
Python-3.3.0b1/pyconfig.h.in
---- Python-3.3.0b1/pyconfig.h.in.more-configuration-flags 2012-07-20 13:25:33.000000000
-0400
-+++ Python-3.3.0b1/pyconfig.h.in 2012-07-20 13:26:02.826494869 -0400
-@@ -12,6 +12,12 @@
- support for AIX C++ shared extension modules. */
- #undef AIX_GENUINE_CPLUSPLUS
-
-+/* Define to keep records on function call invocation */
-+#undef CALL_PROFILE
-+
-+/* Define to keep records of the number of instances of each type */
-+#undef COUNT_ALLOCS
-+
- /* Define if C doubles are 64-bit IEEE 754 binary format, stored in ARM
- mixed-endian order (byte order 45670123) */
- #undef DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754
diff --git a/00125-less-verbose-COUNT_ALLOCS.patch
b/00125-less-verbose-COUNT_ALLOCS.patch
deleted file mode 100644
index 8e441a2..0000000
--- a/00125-less-verbose-COUNT_ALLOCS.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-diff -up Python-2.7/Python/pythonrun.c.less-verbose-COUNT_ALLOCS
Python-2.7/Python/pythonrun.c
---- Python-2.7/Python/pythonrun.c.less-verbose-COUNT_ALLOCS 2010-08-17 14:49:33.321913909
-0400
-+++ Python-2.7/Python/pythonrun.c 2010-08-17 14:54:48.750910403 -0400
-@@ -470,7 +470,15 @@ Py_Finalize(void)
-
- /* Debugging stuff */
- #ifdef COUNT_ALLOCS
-- dump_counts(stdout);
-+ /* This is a downstream Fedora modification.
-+ The upstream default with COUNT_ALLOCS is to always dump the counts to
-+ stdout on exit. For our debug builds its useful to have the info from
-+ COUNT_ALLOCS available, but the stdout info here gets in the way, so
-+ we make it optional, wrapping it in an environment variable (modelled
-+ on the other PYTHONDUMP* env variables):
-+ */
-+ if (Py_GETENV("PYTHONDUMPCOUNTS"))
-+ dump_counts(stdout);
- #endif
- /* dump hash stats */
- _PyHash_Fini();
diff --git a/00131-disable-tests-in-test_io.patch b/00131-disable-tests-in-test_io.patch
deleted file mode 100644
index d81a2d0..0000000
--- a/00131-disable-tests-in-test_io.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -up Python-2.7.2/Lib/test/test_io.py.disable-tests-in-test_io
Python-2.7.2/Lib/test/test_io.py
---- Python-2.7.2/Lib/test/test_io.py.disable-tests-in-test_io 2011-09-01
14:18:45.963304089 -0400
-+++ Python-2.7.2/Lib/test/test_io.py 2011-09-01 15:08:53.796098413 -0400
-@@ -2669,6 +2669,7 @@ class SignalsTest(unittest.TestCase):
- self.check_interrupted_read_retry(lambda x: x,
- mode="r")
-
-+ @unittest.skip('rhbz#732998')
- @unittest.skipUnless(threading, 'Threading required for this test.')
- def check_interrupted_write_retry(self, item, **fdopen_kwargs):
- """Check that a buffered write, when it gets interrupted (either
diff --git a/00132-add-rpmbuild-hooks-to-unittest.patch
b/00132-add-rpmbuild-hooks-to-unittest.patch
deleted file mode 100644
index 20930ac..0000000
--- a/00132-add-rpmbuild-hooks-to-unittest.patch
+++ /dev/null
@@ -1,68 +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,6 +102,43 @@ 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
-+
-+def _expectedFailureInRpmBuild(func):
-+ """
-+ Non-standard/downstream-only decorator for marking a specific unit test
-+ as expected to fail 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.
-+ """
-+ @functools.wraps(func)
-+ def wrapper(*args, **kwargs):
-+ if 'WITHIN_PYTHON_RPM_BUILD' in os.environ:
-+ try:
-+ func(*args, **kwargs)
-+ except Exception:
-+ raise _ExpectedFailure(sys.exc_info())
-+ raise _UnexpectedSuccess
-+ else:
-+ # Call directly:
-+ func(*args, **kwargs)
-+ return wrapper
-+
- class _AssertRaisesBaseContext(_BaseTestCaseContext):
-
- def __init__(self, expected, test_case, callable_obj=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, _expectedFailureInRpmBuild)
- from .suite import BaseTestSuite, TestSuite
- from .loader import (TestLoader, defaultTestLoader, makeSuite, getTestCaseNames,
- findTestCases)
diff --git a/00134-fix-COUNT_ALLOCS-failure-in-test_sys.patch
b/00134-fix-COUNT_ALLOCS-failure-in-test_sys.patch
deleted file mode 100644
index afd8685..0000000
--- a/00134-fix-COUNT_ALLOCS-failure-in-test_sys.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -up Python-3.3.0b2/Lib/test/test_sys.py.fix-COUNT_ALLOCS-failure-in-test_sys
Python-3.3.0b2/Lib/test/test_sys.py
---- Python-3.3.0b2/Lib/test/test_sys.py.fix-COUNT_ALLOCS-failure-in-test_sys 2012-08-11
02:54:16.000000000 -0400
-+++ Python-3.3.0b2/Lib/test/test_sys.py 2012-08-13 14:50:15.253720597 -0400
-@@ -835,12 +835,17 @@ class SizeofTest(unittest.TestCase):
- # type
- # static type: PyTypeObject
- s = vsize('P2n15Pl4Pn9Pn11PIP')
-+ # COUNT_ALLOCS adds a further 3 Py_ssize_t and 2 pointers:
-+ if hasattr(sys, 'getcounts'):
-+ s += struct.calcsize('3P2P')
- check(int, s)
- # (PyTypeObject + PyNumberMethods + PyMappingMethods +
- # PySequenceMethods + PyBufferProcs + 4P)
- s = vsize('P2n15Pl4Pn9Pn11PIP') + struct.calcsize('34P 3P 10P 2P
4P')
- # Separate block for PyDictKeysObject with 4 entries
- s += struct.calcsize("2nPn") + 4*struct.calcsize("n2P")
-+ if hasattr(sys, 'getcounts'):
-+ s += struct.calcsize('3P2P')
- # class
- class newstyleclass(object): pass
- check(newstyleclass, s)
diff --git a/00135-fix-test-within-test_weakref-in-debug-build.patch
b/00135-fix-test-within-test_weakref-in-debug-build.patch
deleted file mode 100644
index 6ed7801..0000000
--- a/00135-fix-test-within-test_weakref-in-debug-build.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-diff -up Python-3.2b2/Lib/test/test_weakref.py.test-weakref-COUNT_ALLOCS_fix
Python-3.2b2/Lib/test/test_weakref.py
---- Python-3.2b2/Lib/test/test_weakref.py.test-weakref-COUNT_ALLOCS_fix 2010-12-28
20:33:46.963364990 -0500
-+++ Python-3.2b2/Lib/test/test_weakref.py 2010-12-28 20:35:44.115935248 -0500
-@@ -583,9 +583,10 @@ class ReferencesTestCase(TestBase):
- # been cleared without their callbacks executing. OTOH, the weakref
- # to C is bound to a function local (wr), and wasn't trash, so that
- # callback should have been invoked when C went away.
-- self.assertEqual(alist, ["C went away"])
-- # The remaining weakref should be dead now (its callback ran).
-- self.assertEqual(wr(), None)
-+ if not hasattr(sys, 'getcounts'):
-+ self.assertEqual(alist, ["C went away"])
-+ # The remaining weakref should be dead now (its callback ran).
-+ self.assertEqual(wr(), None)
-
- del alist[:]
- gc.collect()
diff --git a/00137-skip-distutils-tests-that-fail-in-rpmbuild.patch
b/00137-skip-distutils-tests-that-fail-in-rpmbuild.patch
deleted file mode 100644
index 0457093..0000000
--- a/00137-skip-distutils-tests-that-fail-in-rpmbuild.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up
Python-3.2.2/Lib/distutils/tests/test_bdist_rpm.py.skip-distutils-tests-that-fail-in-rpmbuild
Python-3.2.2/Lib/distutils/tests/test_bdist_rpm.py
----
Python-3.2.2/Lib/distutils/tests/test_bdist_rpm.py.skip-distutils-tests-that-fail-in-rpmbuild 2011-09-03
12:16:40.000000000 -0400
-+++ Python-3.2.2/Lib/distutils/tests/test_bdist_rpm.py 2011-09-10 05:04:56.328852558
-0400
-@@ -23,6 +23,7 @@ setup(name='foo', version='0.1', py_modu
-
- """
-
-+(a)unittest._skipInRpmBuild("don't try to nest one rpm build inside another rpm
build")
- class BuildRpmTestCase(support.TempdirManager,
- support.EnvironGuard,
- support.LoggingSilencer,
-diff -up
Python-3.2.2/Lib/distutils/tests/test_build_ext.py.skip-distutils-tests-that-fail-in-rpmbuild
Python-3.2.2/Lib/distutils/tests/test_build_ext.py
diff --git a/00139-skip-test_float-known-failure-on-arm.patch
b/00139-skip-test_float-known-failure-on-arm.patch
deleted file mode 100644
index 9d0bfad..0000000
--- a/00139-skip-test_float-known-failure-on-arm.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -up Python-2.7.2/Lib/test/test_float.py.skip-test_float-known-failure-on-arm
Python-2.7.2/Lib/test/test_float.py
---- Python-2.7.2/Lib/test/test_float.py.skip-test_float-known-failure-on-arm 2011-09-08
19:34:09.000986128 -0400
-+++ Python-2.7.2/Lib/test/test_float.py 2011-09-08 19:34:57.969982779 -0400
-@@ -1072,6 +1072,7 @@ class HexFloatTestCase(unittest.TestCase
- self.identical(got, expected)
-
-
-+ @unittest.skip('Known failure on ARM:
http://bugs.python.org/issue8265')
- def test_from_hex(self):
- MIN = self.MIN;
- MAX = self.MAX;
diff --git a/00141-fix-tests_with_COUNT_ALLOCS.patch
b/00141-fix-tests_with_COUNT_ALLOCS.patch
deleted file mode 100644
index 7193a8d..0000000
--- a/00141-fix-tests_with_COUNT_ALLOCS.patch
+++ /dev/null
@@ -1,113 +0,0 @@
-diff -r e245b0d7209b Lib/test/test_gc.py
---- a/Lib/test/test_gc.py Sun Oct 20 02:01:29 2013 -0700
-+++ b/Lib/test/test_gc.py Fri Nov 08 13:25:29 2013 +0100
-@@ -127,10 +127,16 @@
- del a
- self.assertNotEqual(gc.collect(), 0)
- del B, C
-- self.assertNotEqual(gc.collect(), 0)
-+ if hasattr(sys, 'getcounts'):
-+ self.assertEqual(gc.collect(), 0)
-+ else:
-+ self.assertNotEqual(gc.collect(), 0)
- A.a = A()
- del A
-- self.assertNotEqual(gc.collect(), 0)
-+ if hasattr(sys, 'getcounts'):
-+ self.assertEqual(gc.collect(), 0)
-+ else:
-+ self.assertNotEqual(gc.collect(), 0)
- self.assertEqual(gc.collect(), 0)
-
- def test_method(self):
-@@ -618,6 +624,8 @@
- stderr = run_command(code % "gc.DEBUG_SAVEALL")
- self.assertNotIn(b"uncollectable objects at shutdown", stderr)
-
-+ @unittest.skipIf(hasattr(sys, 'getcounts'),
-+ 'types are immortal if COUNT_ALLOCS is used')
- def test_gc_main_module_at_shutdown(self):
- # Create a reference cycle through the __main__ module and check
- # it gets collected at interpreter shutdown.
-@@ -632,6 +640,8 @@
- rc, out, err = assert_python_ok('-c', code)
- self.assertEqual(out.strip(), b'__del__ called')
-
-+ @unittest.skipIf(hasattr(sys, 'getcounts'),
-+ 'types are immortal if COUNT_ALLOCS is used')
- def test_gc_ordinary_module_at_shutdown(self):
- # Same as above, but with a non-__main__ module.
- with temp_dir() as script_dir:
-diff -r e245b0d7209b Lib/test/test_module.py
---- a/Lib/test/test_module.py Sun Oct 20 02:01:29 2013 -0700
-+++ b/Lib/test/test_module.py Fri Nov 08 13:25:29 2013 +0100
-@@ -81,6 +81,8 @@
- gc_collect()
- self.assertEqual(f().__dict__["bar"], 4)
-
-+ @unittest.skipIf(hasattr(sys, 'getcounts'),
-+ 'types are immortal if COUNT_ALLOCS is used')
- def test_clear_dict_in_ref_cycle(self):
- destroyed = []
- m = ModuleType("foo")
-@@ -96,6 +98,8 @@
- gc_collect()
- self.assertEqual(destroyed, [1])
-
-+ @unittest.skipIf(hasattr(sys, 'getcounts'),
-+ 'types are immortal if COUNT_ALLOCS is used')
- def test_weakref(self):
- m = ModuleType("foo")
- wr = weakref.ref(m)
-@@ -190,6 +194,8 @@
- self.assertEqual(r[-len(ends_with):], ends_with,
- '{!r} does not end with {!r}'.format(r, ends_with))
-
-+ @unittest.skipIf(hasattr(sys, 'getcounts'),
-+ 'skipping since COUNT_ALLOCS was used, see issue19527')
- def test_module_finalization_at_shutdown(self):
- # Module globals and builtins should still be available during shutdown
- rc, out, err = assert_python_ok("-c", "from test import
final_a")
---- a/Lib/test/test_io.py.orig 2014-01-09 14:43:44.000000000 +0100
-+++ b/Lib/test/test_io.py 2014-01-09 14:50:30.839597351 +0100
-@@ -2611,6 +2611,8 @@
- """.format(iomod=iomod, kwargs=kwargs)
- return assert_python_ok("-c", code)
-
-+ @unittest.skipIf(hasattr(sys, 'getrefcount'),
-+ 'types are immortal if COUNT_ALLOCS is used')
- def test_create_at_shutdown_without_encoding(self):
- rc, out, err = self._check_create_at_shutdown()
- if err:
-@@ -2621,6 +2623,8 @@
- else:
- self.assertEqual("ok", out.decode().strip())
-
-+ @unittest.skipIf(hasattr(sys, 'getrefcount'),
-+ 'types are immortal if COUNT_ALLOCS is used')
- def test_create_at_shutdown_with_encoding(self):
- rc, out, err = self._check_create_at_shutdown(encoding='utf-8',
- errors='strict')
---- a/Lib/test/test_logging.py.orig 2014-01-09 14:53:07.016388198 +0100
-+++ b/Lib/test/test_logging.py 2014-01-09 14:54:25.654282973 +0100
-@@ -3398,6 +3398,8 @@
- logging.setLoggerClass(logging.Logger)
- self.assertEqual(logging.getLoggerClass(), logging.Logger)
-
-+ @unittest.skipIf(hasattr(sys, 'getcounts'),
-+ 'types are immortal if COUNT_ALLOCS is used')
- def test_logging_at_shutdown(self):
- # Issue #20037
- code = """if 1:
-
---- a/Lib/test/test_warnings.py.orig 2014-01-09 15:10:12.454997100 +0100
-+++ b/Lib/test/test_warnings.py 2014-01-09 15:11:14.028913478 +0100
-@@ -780,6 +780,8 @@
- assert_python_ok('-c', 'pass', '-W',
'always', PYTHONPATH=cwd)
-
- class FinalizationTest(unittest.TestCase):
-+ @unittest.skipIf(hasattr(sys, 'getcounts'),
-+ 'types are immortal if COUNT_ALLOCS is used')
- def test_finalization(self):
- # Issue #19421: warnings.warn() should not crash
- # during Python finalization
diff --git a/00143-tsc-on-ppc.patch b/00143-tsc-on-ppc.patch
deleted file mode 100644
index 7d3e876..0000000
--- a/00143-tsc-on-ppc.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-diff -up Python-2.7.2/Python/ceval.c.tsc-on-ppc Python-2.7.2/Python/ceval.c
---- Python-2.7.2/Python/ceval.c.tsc-on-ppc 2011-08-23 14:59:48.051300849 -0400
-+++ Python-2.7.2/Python/ceval.c 2011-08-23 15:33:25.412162902 -0400
-@@ -37,24 +37,42 @@ typedef unsigned long long uint64;
- */
- #if defined(__ppc__) || defined (__powerpc__)
-
--#define READ_TIMESTAMP(var) ppc_getcounter(&var)
-+#if defined( __powerpc64__) || defined(__LP64__)
-+/* 64-bit PowerPC */
-+#define READ_TIMESTAMP(var) ppc64_getcounter(&var)
-+static void
-+ppc64_getcounter(uint64 *v)
-+{
-+ /* On 64-bit PowerPC we can read the 64-bit timebase directly into a
-+ 64-bit register */
-+ uint64 timebase;
-+#ifdef _ARCH_PWR4
-+ asm volatile ("mfspr %0,268" : "=r" (timebase));
-+#else
-+ asm volatile ("mftb %0" : "=r" (timebase));
-+#endif
-+ *v = timebase;
-+}
-+
-+#else
-+/* 32-bit PowerPC */
-+#define READ_TIMESTAMP(var) ppc32_getcounter(&var)
-
- static void
--ppc_getcounter(uint64 *v)
-+ppc32_getcounter(uint64 *v)
- {
-- unsigned long tbu, tb, tbu2;
-+ union { long long ll; long ii[2]; } u;
-+ long tmp;
-
- loop:
-- asm volatile ("mftbu %0" : "=r" (tbu) );
-- asm volatile ("mftb %0" : "=r" (tb) );
-- asm volatile ("mftbu %0" : "=r" (tbu2));
-- if (__builtin_expect(tbu != tbu2, 0)) goto loop;
--
-- /* The slightly peculiar way of writing the next lines is
-- compiled better by GCC than any other way I tried. */
-- ((long*)(v))[0] = tbu;
-- ((long*)(v))[1] = tb;
-+ asm volatile ("mftbu %0" : "=r" (u.ii[0]) );
-+ asm volatile ("mftb %0" : "=r" (u.ii[1]) );
-+ asm volatile ("mftbu %0" : "=r" (tmp));
-+ if (__builtin_expect(u.ii[0] != tmp, 0)) goto loop;
-+
-+ *v = u.ll;
- }
-+#endif /* powerpc 32/64 bit */
-
- #elif defined(__i386__)
-
diff --git a/00146-hashlib-fips.patch b/00146-hashlib-fips.patch
deleted file mode 100644
index 3d92c34..0000000
--- a/00146-hashlib-fips.patch
+++ /dev/null
@@ -1,637 +0,0 @@
---- Python-3.4.0b1/Lib/hashlib.py.hashlib-fips 2013-11-24 21:36:54.000000000 +0100
-+++ Python-3.4.0b1/Lib/hashlib.py 2013-11-27 11:45:17.073617547 +0100
-@@ -23,6 +23,16 @@
- Choose your hash function wisely. Some have known collision weaknesses.
- sha384 and sha512 will be slow on 32 bit platforms.
-
-+If the underlying implementation supports "FIPS mode", and this is enabled,
it
-+may restrict the available hashes to only those that are compliant with FIPS
-+regulations. For example, it may deny the use of MD5, on the grounds that this
-+is not secure for uses such as authentication, system integrity checking, or
-+digital signatures. If you need to use such a hash for non-security purposes
-+(such as indexing into a data structure for speed), you can override the keyword
-+argument "usedforsecurity" from True to False to signify that your code is
not
-+relying on the hash for security purposes, and this will allow the hash to be
-+usable even in FIPS mode.
-+
- Hash objects have these methods:
- - update(arg): Update the hash object with the bytes in arg. Repeated calls
- are equivalent to a single call with the concatenation of all
-@@ -63,6 +73,19 @@
- __all__ = __always_supported + ('new', 'algorithms_guaranteed',
- 'algorithms_available', 'pbkdf2_hmac')
-
-+import functools
-+def __ignore_usedforsecurity(func):
-+ """Used for sha3_* functions. Until OpenSSL implements them, we want
-+ to use them from Python _sha3 module, but we want them to accept
-+ usedforsecurity argument too."""
-+ # TODO: remove this function when OpenSSL implements sha3
-+ @functools.wraps(func)
-+ def inner(*args, **kwargs):
-+ if 'usedforsecurity' in kwargs:
-+ kwargs.pop('usedforsecurity')
-+ return func(*args, **kwargs)
-+ return inner
-+
-
- __builtin_constructor_cache = {}
-
-@@ -108,34 +131,41 @@
- f = getattr(_hashlib, 'openssl_' + name)
- # Allow the C module to raise ValueError. The function will be
- # defined but the hash not actually available thanks to OpenSSL.
-- f()
-+ # We pass "usedforsecurity=False" to disable FIPS-based restrictions:
-+ # at this stage we're merely seeing if the function is callable,
-+ # rather than using it for actual work.
-+ f(usedforsecurity=False)
- # Use the C function directly (very fast)
- return f
- except (AttributeError, ValueError):
-+ # TODO: We want to just raise here when OpenSSL implements sha3
-+ # because we want to make sure that Fedora uses everything from OpenSSL
- return __get_builtin_constructor(name)
-
-
--def __py_new(name, data=b''):
-- """new(name, data=b'') - Return a new hashing object using
the named algorithm;
-- optionally initialized with data (which must be bytes).
-+def __py_new(name, data=b'', usedforsecurity=True):
-+ """new(name, data=b'', usedforsecurity=True) - Return a new
hashing object using
-+ the named algorithm; optionally initialized with data (which must be bytes).
-+ The 'usedforsecurity' keyword argument does nothing, and is for
compatibilty
-+ with the OpenSSL implementation
- """
- return __get_builtin_constructor(name)(data)
-
-
--def __hash_new(name, data=b''):
-- """new(name, data=b'') - Return a new hashing object using
the named algorithm;
-- optionally initialized with data (which must be bytes).
-+def __hash_new(name, data=b'', usedforsecurity=True):
-+ """new(name, data=b'', usedforsecurity=True) - Return a new
hashing object using
-+ the named algorithm; optionally initialized with data (which must be bytes).
-+
-+ Override 'usedforsecurity' to False when using for non-security purposes in
-+ a FIPS environment
- """
- try:
-- return _hashlib.new(name, data)
-+ return _hashlib.new(name, data, usedforsecurity)
- except ValueError:
-- # If the _hashlib module (OpenSSL) doesn't support the named
-- # hash, try using our builtin implementations.
-- # This allows for SHA224/256 and SHA384/512 support even though
-- # the OpenSSL library prior to 0.9.8 doesn't provide them.
-+ # TODO: We want to just raise here when OpenSSL implements sha3
-+ # because we want to make sure that Fedora uses everything from OpenSSL
- return __get_builtin_constructor(name)(data)
-
--
- try:
- import _hashlib
- new = __hash_new
-@@ -215,7 +245,10 @@
- # try them all, some may not work due to the OpenSSL
- # version not supporting that algorithm.
- try:
-- globals()[__func_name] = __get_hash(__func_name)
-+ func = __get_hash(__func_name)
-+ if 'sha3_' in __func_name:
-+ func = __ignore_usedforsecurity(func)
-+ globals()[__func_name] = func
- except ValueError:
- import logging
- logging.exception('code for hash %s was not found.', __func_name)
-@@ -223,3 +256,4 @@
- # Cleanup locals()
- del __always_supported, __func_name, __get_hash
- del __py_new, __hash_new, __get_openssl_constructor
-+del __ignore_usedforsecurity
---- Python-3.4.0b1/Lib/test/test_hashlib.py 2013-11-27 11:55:42.769601363 +0100
-+++ Python-3.4.0b1/Lib/test/test_hashlib.py 2013-11-28 09:33:03.929008508 +0100
-@@ -24,7 +24,22 @@
- COMPILED_WITH_PYDEBUG = hasattr(sys, 'gettotalrefcount')
-
- c_hashlib = import_fresh_module('hashlib', fresh=['_hashlib'])
--py_hashlib = import_fresh_module('hashlib', blocked=['_hashlib'])
-+# skipped on Fedora, since we always use OpenSSL implementation
-+# py_hashlib = import_fresh_module('hashlib', blocked=['_hashlib'])
-+
-+def openssl_enforces_fips():
-+ # Use the "openssl" command (if present) to try to determine if the local
-+ # OpenSSL is configured to enforce FIPS
-+ from subprocess import Popen, PIPE
-+ try:
-+ p = Popen(['openssl', 'md5'],
-+ stdin=PIPE, stdout=PIPE, stderr=PIPE)
-+ except OSError:
-+ # "openssl" command not found
-+ return False
-+ stdout, stderr = p.communicate(input=b'abc')
-+ return b'unknown cipher' in stderr
-+OPENSSL_ENFORCES_FIPS = openssl_enforces_fips()
-
- def hexstr(s):
- assert isinstance(s, bytes), repr(s)
-@@ -34,6 +49,16 @@
- r += h[(i >> 4) & 0xF] + h[i & 0xF]
- return r
-
-+# hashlib and _hashlib-based functions support a "usedforsecurity" keyword
-+# argument, and FIPS mode requires that it be used overridden with a False
-+# value for these selftests to work. Other cryptographic code within Python
-+# doesn't support this keyword.
-+# Modify a function to one in which "usedforsecurity=False" is added to the
-+# keyword arguments:
-+def suppress_fips(f):
-+ def g(*args, **kwargs):
-+ return f(*args, usedforsecurity=False, **kwargs)
-+ return g
-
- class HashLibTestCase(unittest.TestCase):
- supported_hash_names = ( 'md5', 'MD5', 'sha1',
'SHA1',
-@@ -66,11 +91,11 @@
- # For each algorithm, test the direct constructor and the use
- # of hashlib.new given the algorithm name.
- for algorithm, constructors in self.constructors_to_test.items():
-- constructors.add(getattr(hashlib, algorithm))
-+ constructors.add(suppress_fips(getattr(hashlib, algorithm)))
- def _test_algorithm_via_hashlib_new(data=None, _alg=algorithm):
- if data is None:
-- return hashlib.new(_alg)
-- return hashlib.new(_alg, data)
-+ return suppress_fips(hashlib.new)(_alg)
-+ return suppress_fips(hashlib.new)(_alg, data)
- constructors.add(_test_algorithm_via_hashlib_new)
-
- _hashlib = self._conditional_import_module('_hashlib')
-@@ -82,26 +107,12 @@
- for algorithm, constructors in self.constructors_to_test.items():
- constructor = getattr(_hashlib, 'openssl_'+algorithm, None)
- if constructor:
-- constructors.add(constructor)
-+ constructors.add(suppress_fips(constructor))
-
- def add_builtin_constructor(name):
- constructor = getattr(hashlib, "__get_builtin_constructor")(name)
- self.constructors_to_test[name].add(constructor)
-
-- _md5 = self._conditional_import_module('_md5')
-- if _md5:
-- add_builtin_constructor('md5')
-- _sha1 = self._conditional_import_module('_sha1')
-- if _sha1:
-- add_builtin_constructor('sha1')
-- _sha256 = self._conditional_import_module('_sha256')
-- if _sha256:
-- add_builtin_constructor('sha224')
-- add_builtin_constructor('sha256')
-- _sha512 = self._conditional_import_module('_sha512')
-- if _sha512:
-- add_builtin_constructor('sha384')
-- add_builtin_constructor('sha512')
-
- super(HashLibTestCase, self).__init__(*args, **kwargs)
-
-@@ -157,9 +169,6 @@
- else:
- del sys.modules['_md5']
- self.assertRaises(TypeError, get_builtin_constructor, 3)
-- constructor = get_builtin_constructor('md5')
-- self.assertIs(constructor, _md5.md5)
-- self.assertEqual(sorted(builtin_constructor_cache), ['MD5',
'md5'])
-
- def test_hexdigest(self):
- for cons in self.hash_constructors:
-@@ -558,6 +567,65 @@
-
- self.assertEqual(expected_hash, hasher.hexdigest())
-
-+ def test_issue9146(self):
-+ # Ensure that various ways to use "MD5" from "hashlib"
don't segfault:
-+ m = hashlib.md5(usedforsecurity=False)
-+ m.update(b'abc\n')
-+ self.assertEquals(m.hexdigest(), "0bee89b07a248e27c83fc3d5951213c1")
-+
-+ m = hashlib.new('md5', usedforsecurity=False)
-+ m.update(b'abc\n')
-+ self.assertEquals(m.hexdigest(), "0bee89b07a248e27c83fc3d5951213c1")
-+
-+ m = hashlib.md5(b'abc\n', usedforsecurity=False)
-+ self.assertEquals(m.hexdigest(), "0bee89b07a248e27c83fc3d5951213c1")
-+
-+ m = hashlib.new('md5', b'abc\n', usedforsecurity=False)
-+ self.assertEquals(m.hexdigest(), "0bee89b07a248e27c83fc3d5951213c1")
-+
-+ @unittest.skipUnless(OPENSSL_ENFORCES_FIPS,
-+ 'FIPS enforcement required for this test.')
-+ def test_hashlib_fips_mode(self):
-+ # Ensure that we raise a ValueError on vanilla attempts to use MD5
-+ # in hashlib in a FIPS-enforced setting:
-+ with self.assertRaisesRegexp(ValueError, '.*unknown cipher'):
-+ m = hashlib.md5()
-+
-+ if not self._conditional_import_module('_md5'):
-+ with self.assertRaisesRegexp(ValueError, '.*unknown cipher'):
-+ m = hashlib.new('md5')
-+
-+ @unittest.skipUnless(OPENSSL_ENFORCES_FIPS,
-+ 'FIPS enforcement required for this test.')
-+ def test_hashopenssl_fips_mode(self):
-+ # Verify the _hashlib module's handling of md5:
-+ _hashlib = self._conditional_import_module('_hashlib')
-+ if _hashlib:
-+ assert hasattr(_hashlib, 'openssl_md5')
-+
-+ # Ensure that _hashlib raises a ValueError on vanilla attempts to
-+ # use MD5 in a FIPS-enforced setting:
-+ with self.assertRaisesRegexp(ValueError, '.*unknown cipher'):
-+ m = _hashlib.openssl_md5()
-+ with self.assertRaisesRegexp(ValueError, '.*unknown cipher'):
-+ m = _hashlib.new('md5')
-+
-+ # Ensure that in such a setting we can whitelist a callsite with
-+ # usedforsecurity=False and have it succeed:
-+ m = _hashlib.openssl_md5(usedforsecurity=False)
-+ m.update(b'abc\n')
-+ self.assertEquals(m.hexdigest(),
"0bee89b07a248e27c83fc3d5951213c1")
-+
-+ m = _hashlib.new('md5', usedforsecurity=False)
-+ m.update(b'abc\n')
-+ self.assertEquals(m.hexdigest(),
"0bee89b07a248e27c83fc3d5951213c1")
-+
-+ m = _hashlib.openssl_md5(b'abc\n', usedforsecurity=False)
-+ self.assertEquals(m.hexdigest(),
"0bee89b07a248e27c83fc3d5951213c1")
-+
-+ m = _hashlib.new('md5', b'abc\n', usedforsecurity=False)
-+ self.assertEquals(m.hexdigest(),
"0bee89b07a248e27c83fc3d5951213c1")
-+
-
- class KDFTests(unittest.TestCase):
-
-@@ -639,6 +707,7 @@
- with self.assertRaisesRegex(ValueError, 'unsupported hash type'):
- pbkdf2('unknown', b'pass', b'salt', 1)
-
-+ @unittest.skip('skipped on Fedora, as we always use OpenSSL pbkdf2_hmac')
- def test_pbkdf2_hmac_py(self):
- self._test_pbkdf2_hmac(py_hashlib.pbkdf2_hmac)
-
---- Python-3.4.0b1/Modules/_hashopenssl.c.hashlib-fips 2013-11-24 21:36:56.000000000
+0100
-+++ Python-3.4.0b1/Modules/_hashopenssl.c 2013-11-27 12:01:57.443537463 +0100
-@@ -19,6 +19,8 @@
-
-
- /* EVP is the preferred interface to hashing in OpenSSL */
-+#include <openssl/ssl.h>
-+#include <openssl/err.h>
- #include <openssl/evp.h>
- #include <openssl/hmac.h>
- /* We use the object interface to discover what hashes OpenSSL supports. */
-@@ -48,11 +50,19 @@
-
- static PyTypeObject EVPtype;
-
-+/* Struct to hold all the cached information we need on a specific algorithm.
-+ We have one of these per algorithm */
-+typedef struct {
-+ PyObject *name_obj;
-+ EVP_MD_CTX ctxs[2];
-+ /* ctx_ptrs will point to ctxs unless an error occurred, when it will
-+ be NULL: */
-+ EVP_MD_CTX *ctx_ptrs[2];
-+ PyObject *error_msgs[2];
-+} EVPCachedInfo;
-
--#define DEFINE_CONSTS_FOR_NEW(Name) \
-- static PyObject *CONST_ ## Name ## _name_obj = NULL; \
-- static EVP_MD_CTX CONST_new_ ## Name ## _ctx; \
-- static EVP_MD_CTX *CONST_new_ ## Name ## _ctx_p = NULL;
-+#define DEFINE_CONSTS_FOR_NEW(Name) \
-+ static EVPCachedInfo cached_info_ ##Name;
-
- DEFINE_CONSTS_FOR_NEW(md5)
- DEFINE_CONSTS_FOR_NEW(sha1)
-@@ -97,6 +107,48 @@
- }
- }
-
-+static void
-+mc_ctx_init(EVP_MD_CTX *ctx, int usedforsecurity)
-+{
-+ EVP_MD_CTX_init(ctx);
-+
-+ /*
-+ If the user has declared that this digest is being used in a
-+ non-security role (e.g. indexing into a data structure), set
-+ the exception flag for openssl to allow it
-+ */
-+ if (!usedforsecurity) {
-+#ifdef EVP_MD_CTX_FLAG_NON_FIPS_ALLOW
-+ EVP_MD_CTX_set_flags(ctx,
-+ EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);
-+#endif
-+ }
-+}
-+
-+/* Get an error msg for the last error as a PyObject */
-+static PyObject *
-+error_msg_for_last_error(void)
-+{
-+ char *errstr;
-+
-+ errstr = ERR_error_string(ERR_peek_last_error(), NULL);
-+ ERR_clear_error();
-+
-+ return PyUnicode_FromString(errstr); /* Can be NULL */
-+}
-+
-+static void
-+set_evp_exception(void)
-+{
-+ char *errstr;
-+
-+ errstr = ERR_error_string(ERR_peek_last_error(), NULL);
-+ ERR_clear_error();
-+
-+ PyErr_SetString(PyExc_ValueError, errstr);
-+}
-+
-+
- /* Internal methods for a hash object */
-
- static void
-@@ -281,15 +333,16 @@
- static int
- EVP_tp_init(EVPobject *self, PyObject *args, PyObject *kwds)
- {
-- static char *kwlist[] = {"name", "string", NULL};
-+ static char *kwlist[] = {"name", "string",
"usedforsecurity", NULL};
- PyObject *name_obj = NULL;
- PyObject *data_obj = NULL;
-+ int usedforsecurity = 1;
- Py_buffer view;
- char *nameStr;
- const EVP_MD *digest;
-
-- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:HASH", kwlist,
-- &name_obj, &data_obj)) {
-+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:HASH", kwlist,
-+ &name_obj, &data_obj,
&usedforsecurity)) {
- return -1;
- }
-
-@@ -310,7 +363,12 @@
- PyBuffer_Release(&view);
- return -1;
- }
-- EVP_DigestInit(&self->ctx, digest);
-+ mc_ctx_init(&self->ctx, usedforsecurity);
-+ if (!EVP_DigestInit_ex(&self->ctx, digest, NULL)) {
-+ set_evp_exception();
-+ PyBuffer_Release(&view);
-+ return -1;
-+ }
-
- self->name = name_obj;
- Py_INCREF(self->name);
-@@ -394,7 +452,8 @@
- static PyObject *
- EVPnew(PyObject *name_obj,
- const EVP_MD *digest, const EVP_MD_CTX *initial_ctx,
-- const unsigned char *cp, Py_ssize_t len)
-+ const unsigned char *cp, Py_ssize_t len,
-+ int usedforsecurity)
- {
- EVPobject *self;
-
-@@ -409,7 +468,12 @@
- if (initial_ctx) {
- EVP_MD_CTX_copy(&self->ctx, initial_ctx);
- } else {
-- EVP_DigestInit(&self->ctx, digest);
-+ mc_ctx_init(&self->ctx, usedforsecurity);
-+ if (!EVP_DigestInit_ex(&self->ctx, digest, NULL)) {
-+ set_evp_exception();
-+ Py_DECREF(self);
-+ return NULL;
-+ }
- }
-
- if (cp && len) {
-@@ -433,21 +497,29 @@
- An optional string argument may be provided and will be\n\
- automatically hashed.\n\
- \n\
--The MD5 and SHA1 algorithms are always supported.\n");
-+The MD5 and SHA1 algorithms are always supported.\n\
-+\n\
-+An optional \"usedforsecurity=True\" keyword argument is provided for use
in\n\
-+environments that enforce FIPS-based restrictions. Some implementations of\n\
-+OpenSSL can be configured to prevent the usage of non-secure algorithms (such\n\
-+as MD5). If you have a non-security use for these algorithms (e.g. a hash\n\
-+table), you can override this argument by marking the callsite as\n\
-+\"usedforsecurity=False\".");
-
- static PyObject *
- EVP_new(PyObject *self, PyObject *args, PyObject *kwdict)
- {
-- static char *kwlist[] = {"name", "string", NULL};
-+ static char *kwlist[] = {"name", "string",
"usedforsecurity", NULL};
- PyObject *name_obj = NULL;
- PyObject *data_obj = NULL;
-+ int usedforsecurity = 1;
- Py_buffer view = { 0 };
- PyObject *ret_obj;
- char *name;
- const EVP_MD *digest;
-
-- if (!PyArg_ParseTupleAndKeywords(args, kwdict, "O|O:new", kwlist,
-- &name_obj, &data_obj)) {
-+ if (!PyArg_ParseTupleAndKeywords(args, kwdict, "O|Oi:new", kwlist,
-+ &name_obj, &data_obj,
&usedforsecurity)) {
- return NULL;
- }
-
-@@ -461,7 +533,8 @@
-
- digest = EVP_get_digestbyname(name);
-
-- ret_obj = EVPnew(name_obj, digest, NULL, (unsigned char*)view.buf, view.len);
-+ ret_obj = EVPnew(name_obj, digest, NULL, (unsigned char*)view.buf, view.len,
-+ usedforsecurity);
-
- if (data_obj)
- PyBuffer_Release(&view);
-@@ -742,57 +815,115 @@
-
-
- /*
-- * This macro generates constructor function definitions for specific
-- * hash algorithms. These constructors are much faster than calling
-- * the generic one passing it a python string and are noticably
-- * faster than calling a python new() wrapper. Thats important for
-+ * This macro and function generates a family of constructor function
-+ * definitions for specific hash algorithms. These constructors are much
-+ * faster than calling the generic one passing it a python string and are
-+ * noticably faster than calling a python new() wrapper. That's important for
- * code that wants to make hashes of a bunch of small strings.
- */
- #define GEN_CONSTRUCTOR(NAME) \
- static PyObject * \
-- EVP_new_ ## NAME (PyObject *self, PyObject *args) \
-+ EVP_new_ ## NAME (PyObject *self, PyObject *args, PyObject *kwdict) \
- { \
-- PyObject *data_obj = NULL; \
-- Py_buffer view = { 0 }; \
-- PyObject *ret_obj; \
-- \
-- if (!PyArg_ParseTuple(args, "|O:" #NAME , &data_obj)) { \
-- return NULL; \
-- } \
-- \
-- if (data_obj) \
-- GET_BUFFER_VIEW_OR_ERROUT(data_obj, &view); \
-- \
-- ret_obj = EVPnew( \
-- CONST_ ## NAME ## _name_obj, \
-- NULL, \
-- CONST_new_ ## NAME ## _ctx_p, \
-- (unsigned char*)view.buf, \
-- view.len); \
-- \
-- if (data_obj) \
-- PyBuffer_Release(&view); \
-- return ret_obj; \
-+ return implement_specific_EVP_new(self, args, kwdict, \
-+ "|Oi:" #NAME, \
-+ &cached_info_ ## NAME ); \
-+ }
-+
-+static PyObject *
-+implement_specific_EVP_new(PyObject *self, PyObject *args, PyObject *kwdict,
-+ const char *format,
-+ EVPCachedInfo *cached_info)
-+{
-+ static char *kwlist[] = {"string", "usedforsecurity", NULL};
-+ PyObject *data_obj = NULL;
-+ Py_buffer view = { 0 };
-+ int usedforsecurity = 1;
-+ int idx;
-+ PyObject *ret_obj = NULL;
-+
-+ assert(cached_info);
-+
-+ if (!PyArg_ParseTupleAndKeywords(args, kwdict, format, kwlist,
-+ &data_obj, &usedforsecurity)) {
-+ return NULL;
-+ }
-+
-+ if (data_obj)
-+ GET_BUFFER_VIEW_OR_ERROUT(data_obj, &view);
-+
-+ idx = usedforsecurity ? 1 : 0;
-+
-+ /*
-+ * If an error occurred during creation of the global content, the ctx_ptr
-+ * will be NULL, and the error_msg will hopefully be non-NULL:
-+ */
-+ if (cached_info->ctx_ptrs[idx]) {
-+ /* We successfully initialized this context; copy it: */
-+ ret_obj = EVPnew(cached_info->name_obj,
-+ NULL,
-+ cached_info->ctx_ptrs[idx],
-+ (unsigned char*)view.buf, view.len,
-+ usedforsecurity);
-+ } else {
-+ /* Some kind of error happened initializing the global context for
-+ this (digest, usedforsecurity) pair.
-+ Raise an exception with the saved error message: */
-+ if (cached_info->error_msgs[idx]) {
-+ PyErr_SetObject(PyExc_ValueError, cached_info->error_msgs[idx]);
-+ } else {
-+ PyErr_SetString(PyExc_ValueError, "Error initializing hash");
-+ }
- }
-
-+ if (data_obj)
-+ PyBuffer_Release(&view);
-+
-+ return ret_obj;
-+}
-+
- /* a PyMethodDef structure for the constructor */
- #define CONSTRUCTOR_METH_DEF(NAME) \
-- {"openssl_" #NAME, (PyCFunction)EVP_new_ ## NAME, METH_VARARGS, \
-+ {"openssl_" #NAME, (PyCFunction)EVP_new_ ## NAME, \
-+ METH_VARARGS|METH_KEYWORDS, \
- PyDoc_STR("Returns a " #NAME \
- " hash object; optionally initialized with a string") \
- }
-
--/* used in the init function to setup a constructor: initialize OpenSSL
-- constructor constants if they haven't been initialized already. */
--#define INIT_CONSTRUCTOR_CONSTANTS(NAME) do { \
-- if (CONST_ ## NAME ## _name_obj == NULL) { \
-- CONST_ ## NAME ## _name_obj = PyUnicode_FromString(#NAME); \
-- if (EVP_get_digestbyname(#NAME)) { \
-- CONST_new_ ## NAME ## _ctx_p = &CONST_new_ ## NAME ## _ctx; \
-- EVP_DigestInit(CONST_new_ ## NAME ## _ctx_p, EVP_get_digestbyname(#NAME));
\
-- } \
-- } \
-+/*
-+ Macro/function pair to set up the constructors.
-+
-+ Try to initialize a context for each hash twice, once with
-+ EVP_MD_CTX_FLAG_NON_FIPS_ALLOW and once without.
-+
-+ Any that have errors during initialization will end up with a NULL ctx_ptrs
-+ entry, and err_msgs will be set (unless we're very low on memory)
-+*/
-+#define INIT_CONSTRUCTOR_CONSTANTS(NAME) do { \
-+ init_constructor_constant(&cached_info_ ## NAME, #NAME); \
- } while (0);
-+static void
-+init_constructor_constant(EVPCachedInfo *cached_info, const char *name)
-+{
-+ assert(cached_info);
-+ cached_info->name_obj = PyUnicode_FromString(name);
-+ if (EVP_get_digestbyname(name)) {
-+ int i;
-+ for (i=0; i<2; i++) {
-+ mc_ctx_init(&cached_info->ctxs[i], i);
-+ if (EVP_DigestInit_ex(&cached_info->ctxs[i],
-+ EVP_get_digestbyname(name), NULL)) {
-+ /* Success: */
-+ cached_info->ctx_ptrs[i] = &cached_info->ctxs[i];
-+ } else {
-+ /* Failure: */
-+ cached_info->ctx_ptrs[i] = NULL;
-+ cached_info->error_msgs[i] = error_msg_for_last_error();
-+ }
-+ }
-+ }
-+}
-+
-
- GEN_CONSTRUCTOR(md5)
- GEN_CONSTRUCTOR(sha1)
-@@ -843,13 +974,10 @@
- {
- PyObject *m, *openssl_md_meth_names;
-
-- OpenSSL_add_all_digests();
-- ERR_load_crypto_strings();
-+ SSL_load_error_strings();
-+ SSL_library_init();
-
-- /* TODO build EVP_functions openssl_* entries dynamically based
-- * on what hashes are supported rather than listing many
-- * but having some be unsupported. Only init appropriate
-- * constants. */
-+ OpenSSL_add_all_digests();
-
- Py_TYPE(&EVPtype) = &PyType_Type;
- if (PyType_Ready(&EVPtype) < 0)
diff --git a/00150-disable-rAssertAlmostEqual-cmath-on-ppc.patch
b/00150-disable-rAssertAlmostEqual-cmath-on-ppc.patch
deleted file mode 100644
index 73b6356..0000000
--- a/00150-disable-rAssertAlmostEqual-cmath-on-ppc.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -up Python-3.2.2/Lib/test/test_cmath.py.ppc Python-3.2.2/Lib/test/test_cmath.py
---- Python-3.2.2/Lib/test/test_cmath.py.ppc 2011-12-07 23:43:55.000000000 +0100
-+++ Python-3.2.2/Lib/test/test_cmath.py 2011-12-07 23:49:44.000000000 +0100
-@@ -95,6 +95,7 @@ class CMathTests(unittest.TestCase):
- self.assertFloatIdentical(x.real, y.real)
- self.assertFloatIdentical(x.imag, y.imag)
-
-+ @unittest.skip('Known failure on PPC: glibc bug
https://bugzilla.redhat.com/show_bug.cgi?id=750811')
- def rAssertAlmostEqual(self, a, b, rel_err = 2e-15, abs_err = 5e-323,
- msg=None):
- """Fail if the two floating-point numbers are not almost equal.
diff --git a/00155-avoid-ctypes-thunks.patch b/00155-avoid-ctypes-thunks.patch
deleted file mode 100644
index f03890e..0000000
--- a/00155-avoid-ctypes-thunks.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-diff -up Python-3.2.3/Lib/ctypes/__init__.py.rhbz814391
Python-3.2.3/Lib/ctypes/__init__.py
---- Python-3.2.3/Lib/ctypes/__init__.py.rhbz814391 2012-04-20 15:12:49.017867692 -0400
-+++ Python-3.2.3/Lib/ctypes/__init__.py 2012-04-20 15:15:09.501111408 -0400
-@@ -275,11 +275,6 @@ def _reset_cache():
- # _SimpleCData.c_char_p_from_param
- POINTER(c_char).from_param = c_char_p.from_param
- _pointer_type_cache[None] = c_void_p
-- # XXX for whatever reasons, creating the first instance of a callback
-- # function is needed for the unittests on Win64 to succeed. This MAY
-- # be a compiler bug, since the problem occurs only when _ctypes is
-- # compiled with the MS SDK compiler. Or an uninitialized variable?
-- CFUNCTYPE(c_int)(lambda: None)
-
- def create_unicode_buffer(init, size=None):
- """create_unicode_buffer(aString) -> character array
diff --git a/00157-uid-gid-overflows.patch b/00157-uid-gid-overflows.patch
deleted file mode 100644
index 43bd394..0000000
--- a/00157-uid-gid-overflows.patch
+++ /dev/null
@@ -1,62 +0,0 @@
---- Python-3.4.0b1/Lib/test/test_os.py.orig 2013-11-27 12:07:32.368411798 +0100
-+++ Python-3.4.0b1/Lib/test/test_os.py 2013-11-27 12:12:11.220265174 +0100
-@@ -1319,30 +1319,36 @@
- def test_setuid(self):
- if os.getuid() != 0:
- self.assertRaises(OSError, os.setuid, 0)
-+ self.assertRaises(TypeError, os.setuid, 'not an int')
- self.assertRaises(OverflowError, os.setuid, 1<<32)
-
- @unittest.skipUnless(hasattr(os, 'setgid'), 'test needs
os.setgid()')
- def test_setgid(self):
- if os.getuid() != 0 and not HAVE_WHEEL_GROUP:
- self.assertRaises(OSError, os.setgid, 0)
-+ self.assertRaises(TypeError, os.setgid, 'not an int')
- self.assertRaises(OverflowError, os.setgid, 1<<32)
-
- @unittest.skipUnless(hasattr(os, 'seteuid'), 'test needs
os.seteuid()')
- def test_seteuid(self):
- if os.getuid() != 0:
- self.assertRaises(OSError, os.seteuid, 0)
-+ self.assertRaises(TypeError, os.seteuid, 'not an int')
- self.assertRaises(OverflowError, os.seteuid, 1<<32)
-
- @unittest.skipUnless(hasattr(os, 'setegid'), 'test needs
os.setegid()')
- def test_setegid(self):
- if os.getuid() != 0 and not HAVE_WHEEL_GROUP:
- self.assertRaises(OSError, os.setegid, 0)
-+ self.assertRaises(TypeError, os.setegid, 'not an int')
- self.assertRaises(OverflowError, os.setegid, 1<<32)
-
- @unittest.skipUnless(hasattr(os, 'setreuid'), 'test needs
os.setreuid()')
- def test_setreuid(self):
- if os.getuid() != 0:
- self.assertRaises(OSError, os.setreuid, 0, 0)
-+ self.assertRaises(TypeError, os.setreuid, 'not an int', 0)
-+ self.assertRaises(TypeError, os.setreuid, 0, 'not an int')
- self.assertRaises(OverflowError, os.setreuid, 1<<32, 0)
- self.assertRaises(OverflowError, os.setreuid, 0, 1<<32)
-
-@@ -1358,6 +1364,8 @@
- def test_setregid(self):
- if os.getuid() != 0 and not HAVE_WHEEL_GROUP:
- self.assertRaises(OSError, os.setregid, 0, 0)
-+ self.assertRaises(TypeError, os.setregid, 'not an int', 0)
-+ self.assertRaises(TypeError, os.setregid, 0, 'not an int')
- self.assertRaises(OverflowError, os.setregid, 1<<32, 0)
- self.assertRaises(OverflowError, os.setregid, 0, 1<<32)
-
---- Python-3.4.0b1/Lib/test/test_pwd.py.orig 2013-11-24 21:36:55.000000000 +0100
-+++ Python-3.4.0b1/Lib/test/test_pwd.py 2013-11-27 12:07:32.369411798 +0100
-@@ -89,9 +89,9 @@
- # In some cases, byuids isn't a complete list of all users in the
- # system, so if we try to pick a value not in byuids (via a perturbing
- # loop, say), pwd.getpwuid() might still be able to find data for that
-- # uid. Using sys.maxint may provoke the same problems, but hopefully
-+ # uid. Using 2**32 - 2 may provoke the same problems, but hopefully
- # it will be a more repeatable failure.
-- fakeuid = sys.maxsize
-+ fakeuid = 2**32 - 2
- self.assertNotIn(fakeuid, byuids)
- self.assertRaises(KeyError, pwd.getpwuid, fakeuid)
-
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/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/00164-disable-interrupted_write-tests-on-ppc.patch
b/00164-disable-interrupted_write-tests-on-ppc.patch
deleted file mode 100644
index 5641b4b..0000000
--- a/00164-disable-interrupted_write-tests-on-ppc.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-diff -up Python-3.4.2/Lib/test/test_exceptions.py.ppc
Python-3.4.2/Lib/test/test_exceptions.py
---- Python-3.4.2/Lib/test/test_exceptions.py.ppc 2014-10-08 04:18:13.000000000 -0400
-+++ Python-3.4.2/Lib/test/test_exceptions.py 2015-01-12 05:56:15.922833055 -0500
-@@ -429,6 +429,7 @@ class ExceptionTests(unittest.TestCase):
- self.assertIsNone(e.__context__)
- self.assertIsNone(e.__cause__)
-
-+ @unittest.skip('rhbz#846849')
- def testChainingDescriptors(self):
- try:
- raise Exception()
-diff -up Python-3.4.2/Lib/test/test_io.py.ppc Python-3.4.2/Lib/test/test_io.py
---- Python-3.4.2/Lib/test/test_io.py.ppc 2015-01-12 05:56:15.922833055 -0500
-+++ Python-3.4.2/Lib/test/test_io.py 2015-01-12 05:58:23.482833055 -0500
-@@ -3296,12 +3296,15 @@ class SignalsTest(unittest.TestCase):
- if e.errno != errno.EBADF:
- raise
-
-+ @unittest.skip('rhbz#846849')
- def test_interrupted_write_unbuffered(self):
- self.check_interrupted_write(b"xy", b"xy",
mode="wb", buffering=0)
-
-+ @unittest.skip('rhbz#846849')
- def test_interrupted_write_buffered(self):
- self.check_interrupted_write(b"xy", b"xy",
mode="wb")
-
-+ @unittest.skip('rhbz#846849')
- # Issue #22331: The test hangs on FreeBSD 7.2
- @support.requires_freebsd_version(8)
- def test_interrupted_write_text(self):
-diff -up Python-3.4.2/Lib/test/test_raise.py.ppc Python-3.4.2/Lib/test/test_raise.py
---- Python-3.4.2/Lib/test/test_raise.py.ppc 2014-10-08 04:18:14.000000000 -0400
-+++ Python-3.4.2/Lib/test/test_raise.py 2015-01-12 05:56:15.922833055 -0500
-@@ -151,6 +151,7 @@ class TestRaise(unittest.TestCase):
-
- class TestCause(unittest.TestCase):
-
-+ @unittest.skip('rhbz#846849')
- def testCauseSyntax(self):
- try:
- try:
-diff -up Python-3.4.2/Lib/test/test_traceback.py.ppc
Python-3.4.2/Lib/test/test_traceback.py
---- Python-3.4.2/Lib/test/test_traceback.py.ppc 2014-10-08 04:18:14.000000000 -0400
-+++ Python-3.4.2/Lib/test/test_traceback.py 2015-01-12 05:56:15.922833055 -0500
-@@ -314,6 +314,7 @@ class BaseExceptionReportingTests:
- self.check_zero_div(blocks[0])
- self.assertIn('inner_raise() # Marker', blocks[2])
-
-+ @unittest.skip('rhbz#846849')
- def test_context_suppression(self):
- try:
- try:
diff --git a/00170-gc-assertions.patch b/00170-gc-assertions.patch
deleted file mode 100644
index 1144cc2..0000000
--- a/00170-gc-assertions.patch
+++ /dev/null
@@ -1,325 +0,0 @@
-Index: Include/object.h
-===================================================================
---- Include/object.h (revision 87911)
-+++ Include/object.h (working copy)
-@@ -914,6 +914,49 @@
- _PyObject_DebugTypeStats(FILE *out);
- #endif /* ifndef Py_LIMITED_API */
-
-+/*
-+ Define a pair of assertion macros.
-+
-+ These work like the regular C assert(), in that they will abort the
-+ process with a message on stderr if the given condition fails to hold,
-+ but compile away to nothing if NDEBUG is defined.
-+
-+ However, before aborting, Python will also try to call _PyObject_Dump() on
-+ the given object. This may be of use when investigating bugs in which a
-+ particular object is corrupt (e.g. buggy a tp_visit method in an extension
-+ module breaking the garbage collector), to help locate the broken objects.
-+
-+ The WITH_MSG variant allows you to supply an additional message that Python
-+ will attempt to print to stderr, after the object dump.
-+*/
-+#ifdef NDEBUG
-+/* No debugging: compile away the assertions: */
-+#define PyObject_ASSERT_WITH_MSG(obj, expr, msg) ((void)0)
-+#else
-+/* With debugging: generate checks: */
-+#define PyObject_ASSERT_WITH_MSG(obj, expr, msg) \
-+ ((expr) \
-+ ? (void)(0) \
-+ : _PyObject_AssertFailed((obj), \
-+ (msg), \
-+ (__STRING(expr)), \
-+ (__FILE__), \
-+ (__LINE__), \
-+ (__PRETTY_FUNCTION__)))
-+#endif
-+
-+#define PyObject_ASSERT(obj, expr) \
-+ PyObject_ASSERT_WITH_MSG(obj, expr, NULL)
-+
-+/*
-+ Declare and define the entrypoint even when NDEBUG is defined, to avoid
-+ causing compiler/linker errors when building extensions without NDEBUG
-+ against a Python built with NDEBUG defined
-+*/
-+PyAPI_FUNC(void) _PyObject_AssertFailed(PyObject *, const char *,
-+ const char *, const char *, int,
-+ const char *);
-+
- #ifdef __cplusplus
- }
- #endif
-Index: Objects/object.c
-===================================================================
---- Objects/object.c (revision 87911)
-+++ Objects/object.c (working copy)
-@@ -1899,6 +1899,35 @@
- }
- }
-
-+PyAPI_FUNC(void)
-+_PyObject_AssertFailed(PyObject *obj, const char *msg, const char *expr,
-+ const char *file, int line, const char *function)
-+{
-+ fprintf(stderr,
-+ "%s:%d: %s: Assertion \"%s\" failed.\n",
-+ file, line, function, expr);
-+ if (msg) {
-+ fprintf(stderr, "%s\n", msg);
-+ }
-+
-+ fflush(stderr);
-+
-+ if (obj) {
-+ /* This might succeed or fail, but we're about to abort, so at least
-+ try to provide any extra info we can: */
-+ _PyObject_Dump(obj);
-+ }
-+ else {
-+ fprintf(stderr, "NULL object\n");
-+ }
-+
-+ fflush(stdout);
-+ fflush(stderr);
-+
-+ /* Terminate the process: */
-+ abort();
-+}
-+
- #ifndef Py_TRACE_REFS
- /* For Py_LIMITED_API, we need an out-of-line version of _Py_Dealloc.
- Define this here, so we can undefine the macro. */
-Index: Lib/test/test_gc.py
-===================================================================
---- Lib/test/test_gc.py (revision 87911)
-+++ Lib/test/test_gc.py (working copy)
-@@ -1,6 +1,6 @@
- import unittest
- from test.support import (verbose, refcount_test, run_unittest,
-- strip_python_stderr, cpython_only)
-+ strip_python_stderr, cpython_only, import_module)
- from test.script_helper import assert_python_ok, make_script, temp_dir
-
- import sys
-@@ -512,6 +512,48 @@
- self.assertEqual(len(gc.garbage), 0)
-
-
-+ def test_refcount_errors(self):
-+ self.preclean()
-+ # Verify the "handling" of objects with broken refcounts
-+ import_module("ctypes") #skip if not supported
-+
-+ import subprocess
-+ code = '''if 1:
-+ a = []
-+ b = [a]
-+
-+ # Simulate the refcount of "a" being too low (compared to the
-+ # references held on it by live data), but keeping it above zero
-+ # (to avoid deallocating it):
-+ import ctypes
-+ ctypes.pythonapi.Py_DecRef(ctypes.py_object(a))
-+
-+ # The garbage collector should now have a fatal error when it reaches
-+ # the broken object:
-+ import gc
-+ gc.collect()
-+ '''
-+ p = subprocess.Popen([sys.executable, "-c", code],
-+ stdout=subprocess.PIPE,
-+ stderr=subprocess.PIPE)
-+ stdout, stderr = p.communicate()
-+ p.stdout.close()
-+ p.stderr.close()
-+ # Verify that stderr has a useful error message:
-+ self.assertRegex(stderr,
-+ b'Modules/gcmodule.c:[0-9]+: visit_decref: Assertion
"\(\(gc\)->gc.gc_refs >> \(1\)\) != 0" failed.')
-+ self.assertRegex(stderr,
-+ b'refcount was too small')
-+ self.assertRegex(stderr,
-+ b'object : \[\]')
-+ self.assertRegex(stderr,
-+ b'type : list')
-+ self.assertRegex(stderr,
-+ b'refcount: 1')
-+ self.assertRegex(stderr,
-+ b'address : 0x[0-9a-f]+')
-+
-+
- class GCTogglingTests(unittest.TestCase):
- def setUp(self):
- gc.enable()
-diff -up Modules/gcmodule.c.orig2 Modules/gcmodule.c
---- Modules/gcmodule.c.orig2 2014-12-08 10:54:14.251742911 +0100
-+++ Modules/gcmodule.c 2014-12-08 10:52:45.674771917 +0100
-@@ -341,7 +341,8 @@ update_refs(PyGC_Head *containers)
- {
- PyGC_Head *gc = containers->gc.gc_next;
- for (; gc != containers; gc = gc->gc.gc_next) {
-- assert(_PyGCHead_REFS(gc) == GC_REACHABLE);
-+ PyObject_ASSERT(FROM_GC(gc),
-+ _PyGCHead_REFS(gc) == GC_REACHABLE);
- _PyGCHead_SET_REFS(gc, Py_REFCNT(FROM_GC(gc)));
- /* Python's cyclic gc should never see an incoming refcount
- * of 0: if something decref'ed to 0, it should have been
-@@ -361,7 +362,8 @@ update_refs(PyGC_Head *containers)
- * so serious that maybe this should be a release-build
- * check instead of an assert?
- */
-- assert(_PyGCHead_REFS(gc) != 0);
-+ PyObject_ASSERT(FROM_GC(gc),
-+ _PyGCHead_REFS(gc) != 0);
- }
- }
-
-@@ -376,7 +378,9 @@ visit_decref(PyObject *op, void *data)
- * generation being collected, which can be recognized
- * because only they have positive gc_refs.
- */
-- assert(_PyGCHead_REFS(gc) != 0); /* else refcount was too small */
-+ PyObject_ASSERT_WITH_MSG(FROM_GC(gc),
-+ _PyGCHead_REFS(gc) != 0,
-+ "refcount was too small"); /* else refcount was too
small */
- if (_PyGCHead_REFS(gc) > 0)
- _PyGCHead_DECREF(gc);
- }
-@@ -436,9 +440,10 @@ visit_reachable(PyObject *op, PyGC_Head
- * If gc_refs == GC_UNTRACKED, it must be ignored.
- */
- else {
-- assert(gc_refs > 0
-- || gc_refs == GC_REACHABLE
-- || gc_refs == GC_UNTRACKED);
-+ PyObject_ASSERT(FROM_GC(gc),
-+ gc_refs > 0
-+ || gc_refs == GC_REACHABLE
-+ || gc_refs == GC_UNTRACKED);
- }
- }
- return 0;
-@@ -480,7 +485,7 @@ move_unreachable(PyGC_Head *young, PyGC_
- */
- PyObject *op = FROM_GC(gc);
- traverseproc traverse = Py_TYPE(op)->tp_traverse;
-- assert(_PyGCHead_REFS(gc) > 0);
-+ PyObject_ASSERT(op, _PyGCHead_REFS(gc) > 0);
- _PyGCHead_SET_REFS(gc, GC_REACHABLE);
- (void) traverse(op,
- (visitproc)visit_reachable,
-@@ -543,7 +548,7 @@ move_legacy_finalizers(PyGC_Head *unreac
- for (gc = unreachable->gc.gc_next; gc != unreachable; gc = next) {
- PyObject *op = FROM_GC(gc);
-
-- assert(IS_TENTATIVELY_UNREACHABLE(op));
-+ PyObject_ASSERT(op, IS_TENTATIVELY_UNREACHABLE(op));
- next = gc->gc.gc_next;
-
- if (has_legacy_finalizer(op)) {
-@@ -619,7 +624,7 @@ handle_weakrefs(PyGC_Head *unreachable,
- PyWeakReference **wrlist;
-
- op = FROM_GC(gc);
-- assert(IS_TENTATIVELY_UNREACHABLE(op));
-+ PyObject_ASSERT(op, IS_TENTATIVELY_UNREACHABLE(op));
- next = gc->gc.gc_next;
-
- if (! PyType_SUPPORTS_WEAKREFS(Py_TYPE(op)))
-@@ -640,9 +645,9 @@ handle_weakrefs(PyGC_Head *unreachable,
- * the callback pointer intact. Obscure: it also
- * changes *wrlist.
- */
-- assert(wr->wr_object == op);
-+ PyObject_ASSERT(wr->wr_object, wr->wr_object == op);
- _PyWeakref_ClearRef(wr);
-- assert(wr->wr_object == Py_None);
-+ PyObject_ASSERT(wr->wr_object, wr->wr_object == Py_None);
- if (wr->wr_callback == NULL)
- continue; /* no callback */
-
-@@ -676,7 +681,7 @@ handle_weakrefs(PyGC_Head *unreachable,
- */
- if (IS_TENTATIVELY_UNREACHABLE(wr))
- continue;
-- assert(IS_REACHABLE(wr));
-+ PyObject_ASSERT(op, IS_REACHABLE(wr));
-
- /* Create a new reference so that wr can't go away
- * before we can process it again.
-@@ -685,7 +690,8 @@ handle_weakrefs(PyGC_Head *unreachable,
-
- /* Move wr to wrcb_to_call, for the next pass. */
- wrasgc = AS_GC(wr);
-- assert(wrasgc != next); /* wrasgc is reachable, but
-+ PyObject_ASSERT(op, wrasgc != next);
-+ /* wrasgc is reachable, but
- next isn't, so they can't
- be the same */
- gc_list_move(wrasgc, &wrcb_to_call);
-@@ -701,11 +707,11 @@ handle_weakrefs(PyGC_Head *unreachable,
-
- gc = wrcb_to_call.gc.gc_next;
- op = FROM_GC(gc);
-- assert(IS_REACHABLE(op));
-- assert(PyWeakref_Check(op));
-+ PyObject_ASSERT(op, IS_REACHABLE(op));
-+ PyObject_ASSERT(op, PyWeakref_Check(op));
- wr = (PyWeakReference *)op;
- callback = wr->wr_callback;
-- assert(callback != NULL);
-+ PyObject_ASSERT(op, callback != NULL);
-
- /* copy-paste of weakrefobject.c's handle_callback() */
- temp = PyObject_CallFunctionObjArgs(callback, wr, NULL);
-@@ -822,12 +828,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)));
-- assert(_PyGCHead_REFS(gc) != 0);
-+ PyObject_ASSERT(FROM_GC(gc),
-+ _PyGCHead_REFS(gc) != 0);
- }
- subtract_refs(collectable);
- for (gc = collectable->gc.gc_next; gc != collectable;
- gc = gc->gc.gc_next) {
-- assert(_PyGCHead_REFS(gc) >= 0);
-+ PyObject_ASSERT(FROM_GC(gc),
-+ _PyGCHead_REFS(gc) >= 0);
- if (_PyGCHead_REFS(gc) != 0)
- return -1;
- }
-diff -up Lib/test/test_gc.py.old Lib/test/test_gc.py
---- Lib/test/test_gc.py.old 2014-12-10 11:19:33.503982288 +0100
-+++ Lib/test/test_gc.py 2014-12-10 11:21:13.220021364 +0100
-@@ -49,6 +49,8 @@ class GC_Detector(object):
- # gc collects it.
- self.wr = weakref.ref(C1055820(666), it_happened)
-
-+BUILD_WITH_NDEBUG = ('-DNDEBUG' in
sysconfig.get_config_vars()['PY_CFLAGS'])
-+
- @with_tp_del
- class Uncollectable(object):
- """Create a reference cycle with multiple __del__ methods.
-@@ -854,6 +856,8 @@ class GCCallbackTests(unittest.TestCase)
- self.assertEqual(len(gc.garbage), 0)
-
-
-+ @unittest.skipIf(BUILD_WITH_NDEBUG,
-+ 'built with -NDEBUG')
- def test_refcount_errors(self):
- self.preclean()
- # Verify the "handling" of objects with broken refcounts
-diff -up Lib/test/test_gc.py.old Lib/test/test_gc.py
---- Lib/test/test_gc.py.old 2014-12-10 12:50:58.252121318 +0100
-+++ Lib/test/test_gc.py 2014-12-10 12:51:08.594266653 +0100
-@@ -4,6 +4,7 @@ from test.support import (verbose, refco
- from test.script_helper import assert_python_ok, make_script, temp_dir
-
- import sys
-+import sysconfig
- import time
- import gc
- import weakref
diff --git a/00173-workaround-ENOPROTOOPT-in-bind_port.patch
b/00173-workaround-ENOPROTOOPT-in-bind_port.patch
deleted file mode 100644
index 8d8b0bc..0000000
--- a/00173-workaround-ENOPROTOOPT-in-bind_port.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- Python-3.4.0b1/Lib/test/support/__init__.py.orig 2013-11-27 12:14:26.507216624 +0100
-+++ Python-3.4.0b1/Lib/test/support/__init__.py 2013-11-27 12:17:01.490805587 +0100
-@@ -593,7 +593,8 @@
- if sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR) == 1:
- raise TestFailed("tests should never set the SO_REUSEADDR "
\
- "socket option on TCP/IP sockets!")
-- if hasattr(socket, 'SO_REUSEPORT'):
-+ if hasattr(socket, 'SO_REUSEPORT') \
-+ and 'WITHIN_PYTHON_RPM_BUILD' not in os.environ: # rhbz#913732
- try:
- if sock.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT) == 1:
- raise TestFailed("tests should never set the SO_REUSEPORT
" \
diff --git a/00178-dont-duplicate-flags-in-sysconfig.patch
b/00178-dont-duplicate-flags-in-sysconfig.patch
deleted file mode 100644
index fc49b30..0000000
--- a/00178-dont-duplicate-flags-in-sysconfig.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-diff -r 39b9b05c3085 Lib/distutils/sysconfig.py
---- a/Lib/distutils/sysconfig.py Wed Apr 10 00:27:23 2013 +0200
-+++ b/Lib/distutils/sysconfig.py Wed Apr 10 10:14:18 2013 +0200
-@@ -362,7 +362,10 @@
- done[n] = item = ""
- if found:
- after = value[m.end():]
-- value = value[:m.start()] + item + after
-+ value = value[:m.start()]
-+ if item.strip() not in value:
-+ value += item
-+ value += after
- if "$" in after:
- notdone[name] = value
- else:
-diff -r 39b9b05c3085 Lib/sysconfig.py
---- a/Lib/sysconfig.py Wed Apr 10 00:27:23 2013 +0200
-+++ b/Lib/sysconfig.py Wed Apr 10 10:14:18 2013 +0200
-@@ -296,7 +296,10 @@
-
- if found:
- after = value[m.end():]
-- value = value[:m.start()] + item + after
-+ value = value[:m.start()]
-+ if item.strip() not in value:
-+ value += item
-+ value += after
- if "$" in after:
- notdone[name] = value
- else:
diff --git a/00179-dont-raise-error-on-gdb-corrupted-frames-in-backtrace.patch
b/00179-dont-raise-error-on-gdb-corrupted-frames-in-backtrace.patch
deleted file mode 100644
index 2112730..0000000
--- a/00179-dont-raise-error-on-gdb-corrupted-frames-in-backtrace.patch
+++ /dev/null
@@ -1,48 +0,0 @@
---- a/Tools/gdb/libpython.py 2013-04-06 03:41:58.000000000 -0400
-+++ b/Tools/gdb/libpython.py 2013-04-24 03:51:04.720540343 -0400
-@@ -274,6 +274,9 @@
- self.tp_name = tp_name
- self.address = address
-
-+ def __len__(self):
-+ return len(repr(self))
-+
- def __repr__(self):
- # For the NULL pointer, we have no way of knowing a type, so
- # special-case it as per
-@@ -881,6 +884,8 @@
- filename = self.filename()
- try:
- f = open(os_fsencode(filename), 'r')
-+ except TypeError: # filename is FakeRepr
-+ return None
- except IOError:
- return None
- with f:
-@@ -1523,9 +1528,12 @@
-
- def print_summary(self):
- if self.is_evalframeex():
-- pyop = self.get_pyop()
-- if pyop:
-+ try:
-+ pyop = self.get_pyop()
- line = pyop.get_truncated_repr(MAX_OUTPUT_LEN)
-+ except:
-+ pyop = None
-+ if pyop:
- write_unicode(sys.stdout, '#%i %s\n' % (self.get_index(),
line))
- if not pyop.is_optimized_out():
- line = pyop.current_line()
-@@ -1542,7 +1550,10 @@
-
- def print_traceback(self):
- if self.is_evalframeex():
-- pyop = self.get_pyop()
-+ try:
-+ pyop = self.get_pyop()
-+ except:
-+ pyop = None
- if pyop:
- pyop.print_traceback()
- if not pyop.is_optimized_out():
diff --git a/00180-python-add-support-for-ppc64p7.patch
b/00180-python-add-support-for-ppc64p7.patch
deleted file mode 100644
index 022944a..0000000
--- a/00180-python-add-support-for-ppc64p7.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -r de35eae9048a config.sub
---- a/config.sub Wed Apr 24 23:33:20 2013 +0200
-+++ b/config.sub Thu Apr 25 08:51:00 2013 +0200
-@@ -1008,7 +1008,7 @@
- ;;
- ppc64) basic_machine=powerpc64-unknown
- ;;
-- ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
-+ ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed
's/^[^-]*-//'`
- ;;
- ppc64le | powerpc64little | ppc64-le | powerpc64-little)
- basic_machine=powerpc64le-unknown
diff --git a/00184-ctypes-should-build-with-libffi-multilib-wrapper.patch
b/00184-ctypes-should-build-with-libffi-multilib-wrapper.patch
deleted file mode 100644
index e224fc6..0000000
--- a/00184-ctypes-should-build-with-libffi-multilib-wrapper.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- Python-3.3.2/setup.py.orig 2013-07-01 15:23:24.377711044 +0200
-+++ Python-3.3.2/setup.py 2013-07-01 15:23:34.094676496 +0200
-@@ -1882,7 +1882,8 @@
- if not line:
- ffi_inc = None
- break
-- if line.startswith('#define LIBFFI_H'):
-+ if line.startswith('#define LIBFFI_H') or \
-+ line.startswith('#define ffi_wrapper_h'):
- break
- ffi_lib = None
- if ffi_inc is not None:
diff --git a/00186-dont-raise-from-py_compile.patch
b/00186-dont-raise-from-py_compile.patch
deleted file mode 100644
index 25c4a9d..0000000
--- a/00186-dont-raise-from-py_compile.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -r 7fa3e824a4ee Lib/test/test_py_compile.py
---- a/Lib/test/test_py_compile.py Tue Oct 29 22:25:06 2013 -0400
-+++ b/Lib/test/test_py_compile.py Wed Oct 30 11:08:31 2013 +0100
-@@ -54,6 +54,10 @@
- self.assertTrue(os.path.exists(self.pyc_path))
- self.assertFalse(os.path.exists(self.cache_path))
-
-+ def test_bad_coding(self):
-+ bad_coding = os.path.join(os.path.dirname(__file__), 'bad_coding2.py')
-+ self.assertIsNone(py_compile.compile(bad_coding, doraise=False))
-+
- def test_relative_path(self):
- py_compile.compile(os.path.relpath(self.source_path),
- os.path.relpath(self.pyc_path))
diff --git a/00188-fix-lib2to3-tests-when-hashlib-doesnt-compile-properly.patch
b/00188-fix-lib2to3-tests-when-hashlib-doesnt-compile-properly.patch
deleted file mode 100644
index 90af30d..0000000
--- a/00188-fix-lib2to3-tests-when-hashlib-doesnt-compile-properly.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -r 28c04e954bb6 Lib/lib2to3/main.py
---- a/Lib/lib2to3/main.py Tue Oct 29 22:25:55 2013 -0400
-+++ b/Lib/lib2to3/main.py Wed Nov 06 14:33:07 2013 +0100
-@@ -213,6 +213,7 @@
-
- # Set up logging handler
- level = logging.DEBUG if options.verbose else logging.INFO
-+ logging.root.handlers = []
- logging.basicConfig(format='%(name)s: %(message)s', level=level)
- logger = logging.getLogger('lib2to3.main')
-
diff --git a/00189-use-rpm-wheels.patch b/00189-use-rpm-wheels.patch
deleted file mode 100644
index c9daa94..0000000
--- a/00189-use-rpm-wheels.patch
+++ /dev/null
@@ -1,67 +0,0 @@
-diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py
-index 25c5567..2553524 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 = "28.8.0"
-
--_PIP_VERSION = "9.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")
-
- # pip currently requires ssl support, so we try to provide a nicer
- # error message when that is missing (
http://bugs.python.org/issue19744)
-@@ -37,8 +48,13 @@ def _run_pip(args, additional_paths=None):
- sys.path = additional_paths + sys.path
-
- # Install the bundled software
-- import pip
-- pip.main(args)
-+ try:
-+ # pip 10
-+ from pip._internal import main
-+ except ImportError:
-+ # pip 9
-+ from pip import main
-+ main(args)
-
-
- def version():
-@@ -93,12 +109,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/00196-test-gdb-match-addr-before-builtin.patch
b/00196-test-gdb-match-addr-before-builtin.patch
deleted file mode 100644
index dc40c82..0000000
--- a/00196-test-gdb-match-addr-before-builtin.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-Subject: python3.test gdb match addr before builtin
-From: Michel Normand <normand(a)linux.vnet.ibm.com>
-
-For ppc64le archi and python3... and gdb... versions
-the test_gdb.py need a change of re.match to handle address before the builtin_id word.
-Of course there is no error if this substring is not present.
-===
-...
-#0 0x00003fffb7dd0898 in builtin_id (self=<module at remote 0x3fffb7901440>,
v=<unknown at remote 0x3fffb7f68910>) at
/builddir/build/BUILD/Python-3.3.2/Python/bltinmodule.c:966
-....xxxxxxxxxxxxxxxxxxxxxx <= added regexp
-===
-
-Signed-off-by: Michel Normand <normand(a)linux.vnet.ibm.com>
----
- Lib/test/test_gdb.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: Python-3.3.2/Lib/test/test_gdb.py
-===================================================================
---- Python-3.3.2.orig/Lib/test/test_gdb.py
-+++ Python-3.3.2/Lib/test/test_gdb.py
-@@ -230,7 +230,7 @@ class DebuggerTests(unittest.TestCase):
- # gdb can insert additional '\n' and space characters in various places
- # in its output, depending on the width of the terminal it's connected
- # to (using its "wrap_here" function)
-- m =
re.match('.*#0\s+builtin_id\s+\(self\=.*,\s+v=\s*(.*?)\)\s+at\s+\S*Python/bltinmodule.c.*',
-+ m = re.match('.*#0\s+(?:
0x[0-9a-f]+\s+in\s+)?builtin_id\s+\(self\=.*,\s+v=\s*(.*?)\)\s+at\s+\S*Python/bltinmodule.c.*',
- gdb_output, re.DOTALL)
- if not m:
- self.fail('Unexpected gdb output: %r\n%s' % (gdb_output,
gdb_output))
diff --git a/00200-gettext-plural-fix.patch b/00200-gettext-plural-fix.patch
deleted file mode 100644
index 93b817b..0000000
--- a/00200-gettext-plural-fix.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -up Python-2.5.1/Lib/gettext.py.plural Python-2.5.1/Lib/gettext.py
---- Python-2.5.1/Lib/gettext.py.plural 2007-09-10 11:38:57.000000000 -0400
-+++ Python-2.5.1/Lib/gettext.py 2007-09-10 11:39:00.000000000 -0400
-@@ -299,6 +299,8 @@ class GNUTranslations(NullTranslations):
- item = b_item.decode().strip()
- if not item:
- continue
-+ if item.startswith("#"):
-+ continue
- if ':' in item:
- k, v = item.split(':', 1)
- k = k.strip().lower()
diff --git a/00201-fix-memory-leak-in-gdbm.patch b/00201-fix-memory-leak-in-gdbm.patch
deleted file mode 100644
index 48839d5..0000000
--- a/00201-fix-memory-leak-in-gdbm.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- Modules/_gdbmmodule.c.orig 2013-07-08 14:54:27.803790151 +0200
-+++ Modules/_gdbmmodule.c 2013-07-08 14:55:25.006672443 +0200
-@@ -106,6 +106,7 @@
- if(okey.dsize) free(okey.dptr);
- okey=key;
- }
-+ if(okey.dsize) free(okey.dptr);
- dp->di_size = size;
- }
- return dp->di_size;
diff --git a/00203-disable-threading-test-koji.patch
b/00203-disable-threading-test-koji.patch
deleted file mode 100644
index 70010fb..0000000
--- a/00203-disable-threading-test-koji.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -up Python-3.4.3/Lib/test/test_threading.py.mstuchli
Python-3.4.3/Lib/test/test_threading.py
---- Python-3.4.3/Lib/test/test_threading.py.mstuchli 2015-03-10 10:00:42.917355215 +0100
-+++ Python-3.4.3/Lib/test/test_threading.py 2015-03-10 10:00:47.735373842 +0100
-@@ -988,6 +988,7 @@ class ThreadingExceptionTests(BaseTestCa
- self.assertIn("ZeroDivisionError", err)
- self.assertNotIn("Unhandled exception", err)
-
-+ @unittest.skip('Fails in Koji due to mishandled signals')
- def test_print_exception_stderr_is_none_1(self):
- script = r"""if True:
- import sys
diff --git a/00250-getentropy.patch b/00250-getentropy.patch
deleted file mode 100644
index e80b7a6..0000000
--- a/00250-getentropy.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-diff --git a/Python/random.c b/Python/random.c
-index af3d0bd..5451815 100644
---- a/Python/random.c
-+++ b/Python/random.c
-@@ -68,8 +68,15 @@ win32_urandom(unsigned char *buffer, Py_ssize_t size, int raise)
- }
-
- /* Issue #25003: Don' use getentropy() on Solaris (available since
-- * Solaris 11.3), it is blocking whereas os.urandom() should not block. */
--#elif defined(HAVE_GETENTROPY) && !defined(sun)
-+ Solaris 11.3), it is blocking whereas os.urandom() should not block.
-+
-+ Issue #29188: Don't use getentropy() on Linux since the glibc 2.24
-+ implements it with the getrandom() syscall which can fail with ENOSYS,
-+ and this error is not supported in py_getentropy() and getrandom() is called
-+ with flags=0 which blocks until system urandom is initialized, which is not
-+ the desired behaviour to seed the Python hash secret nor for os.urandom():
-+ see the PEP 524 which was only implemented in Python 3.6. */
-+#elif defined(HAVE_GETENTROPY) && !defined(sun) && !defined(linux)
- #define PY_GETENTROPY 1
-
- /* Fill buffer with size pseudo-random bytes generated by getentropy().
diff --git a/00273-skip-float-test.patch b/00273-skip-float-test.patch
deleted file mode 100644
index 4658731..0000000
--- a/00273-skip-float-test.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/Lib/test/test_float.py b/Lib/test/test_float.py
-index 24fe128..d7dd939 100644
---- a/Lib/test/test_float.py
-+++ b/Lib/test/test_float.py
-@@ -107,7 +107,7 @@ class GeneralFloatCases(unittest.TestCase):
- else:
- self.fail("Expected int(%r) to raise a ValueError", s)
-
--
-+ @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/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 6af7665..0000000
--- a/00290-cryptmodule-Include-crypt.h-for-declaration-of-crypt.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-diff -U3 -r Python-3.4.8-orig/configure Python-3.4.8/configure
---- Python-3.4.8-orig/configure 2018-02-13 11:08:48.126741021 +0100
-+++ Python-3.4.8/configure 2018-02-13 11:32:32.579790986 +0100
-@@ -7006,7 +7006,7 @@
-
- fi
-
--for ac_header in asm/types.h conio.h direct.h dlfcn.h errno.h \
-+for ac_header in 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 stdint.h stropts.h termios.h \
-diff -U3 -r Python-3.4.8-orig/configure.ac Python-3.4.8/configure.ac
---- Python-3.4.8-orig/configure.ac 2018-02-13 11:08:48.060740742 +0100
-+++ Python-3.4.8/configure.ac 2018-02-13 11:09:59.208039082 +0100
-@@ -1563,7 +1563,7 @@
-
- # 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 stdint.h stropts.h termios.h \
-diff -U3 -r Python-3.4.8-orig/Include/Python.h Python-3.4.8/Include/Python.h
---- Python-3.4.8-orig/Include/Python.h 2018-02-05 00:40:38.000000000 +0100
-+++ Python-3.4.8/Include/Python.h 2018-02-13 11:09:40.689963273 +0100
-@@ -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 -U3 -r Python-3.4.8-orig/Modules/_cryptmodule.c Python-3.4.8/Modules/_cryptmodule.c
---- Python-3.4.8-orig/Modules/_cryptmodule.c 2018-02-05 00:40:38.000000000 +0100
-+++ Python-3.4.8/Modules/_cryptmodule.c 2018-02-13 12:00:51.636164978 +0100
-@@ -69,7 +69,8 @@
- {
- /* On some platforms (AtheOS) crypt returns NULL for an invalid
- salt. Return None in that case. XXX Maybe raise an exception? */
-- return Py_BuildValue("s", crypt(word, salt));
-+ char *result = crypt(word, salt);
-+ return Py_BuildValue("s", result);
- }
-
-
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/00320-CVE-2019-10160.patch b/00320-CVE-2019-10160.patch
deleted file mode 100644
index cf7d5db..0000000
--- a/00320-CVE-2019-10160.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py
-index 77c2007..c6c54b0 100644
---- a/Lib/test/test_urlparse.py
-+++ b/Lib/test/test_urlparse.py
-@@ -885,6 +885,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 243f470..da3a40c 100644
---- a/Lib/urllib/parse.py
-+++ b/Lib/urllib/parse.py
-@@ -322,13 +322,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/00321-python34-openssl-1.1.1.patch b/00321-python34-openssl-1.1.1.patch
deleted file mode 100644
index 8278103..0000000
--- a/00321-python34-openssl-1.1.1.patch
+++ /dev/null
@@ -1,816 +0,0 @@
-From 55ffb704cc17d41ddf8f34aac3de5f218cd43dee Mon Sep 17 00:00:00 2001
-From: Christian Heimes <christian(a)python.org>
-Date: Mon, 5 Sep 2016 23:19:05 +0200
-Subject: [PATCH] bpo-26470: Port ssl and hashlib module to OpenSSL 1.1.0.
-
-Backport notes
-
-* Don't add PROTOCOL_TLS
-* Ignore documentation changes
-
-(cherry picked from commit 598894ff48e9c1171cb2ec1c798235826a75c7e0)
-
-diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
-index e36a309..401cc2f 100644
---- a/Lib/test/test_ssl.py
-+++ b/Lib/test/test_ssl.py
-@@ -23,6 +23,8 @@ ssl = support.import_module("ssl")
-
- PROTOCOLS = sorted(ssl._PROTOCOL_NAMES)
- HOST = support.HOST
-+IS_LIBRESSL = ssl.OPENSSL_VERSION.startswith('LibreSSL')
-+
-
- def data_file(*name):
- return os.path.join(os.path.dirname(__file__), *name)
-@@ -318,9 +320,9 @@ class BasicSocketTests(unittest.TestCase):
- self.assertGreaterEqual(status, 0)
- self.assertLessEqual(status, 15)
- # Version string as returned by {Open,Libre}SSL, the format might change
-- if "LibreSSL" in s:
-- self.assertTrue(s.startswith("LibreSSL {:d}.{:d}".format(major,
minor)),
-- (s, t))
-+ if IS_LIBRESSL:
-+ self.assertTrue(s.startswith("LibreSSL {:d}".format(major)),
-+ (s, t, hex(n)))
- else:
- self.assertTrue(s.startswith("OpenSSL
{:d}.{:d}.{:d}".format(major, minor, fix)),
- (s, t))
-@@ -698,15 +700,15 @@ class ContextTests(unittest.TestCase):
- def test_options(self):
- ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
- # OP_ALL | OP_NO_SSLv2 | OP_NO_SSLv3 is the default value
-- self.assertEqual(ssl.OP_ALL | ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3,
-- ctx.options)
-+ default = (ssl.OP_ALL | ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3)
-+ if not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (1, 1, 0):
-+ default |= ssl.OP_NO_COMPRESSION
-+ self.assertEqual(default, ctx.options)
- ctx.options |= ssl.OP_NO_TLSv1
-- self.assertEqual(ssl.OP_ALL | ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3 |
ssl.OP_NO_TLSv1,
-- ctx.options)
-+ self.assertEqual(default | ssl.OP_NO_TLSv1, ctx.options)
- if can_clear_options():
-- ctx.options = (ctx.options & ~ssl.OP_NO_SSLv2) | ssl.OP_NO_TLSv1
-- self.assertEqual(ssl.OP_ALL | ssl.OP_NO_TLSv1 | ssl.OP_NO_SSLv3,
-- ctx.options)
-+ ctx.options = (ctx.options & ~ssl.OP_NO_TLSv1)
-+ self.assertEqual(default, ctx.options)
- ctx.options = 0
- # Ubuntu has OP_NO_SSLv3 forced on by default
- self.assertEqual(0, ctx.options & ~ssl.OP_NO_SSLv3)
-@@ -1042,6 +1044,7 @@ class ContextTests(unittest.TestCase):
- self.assertRaises(TypeError, ctx.load_default_certs, 'SERVER_AUTH')
-
- @unittest.skipIf(sys.platform == "win32", "not-Windows
specific")
-+ @unittest.skipIf(IS_LIBRESSL, "LibreSSL doesn't support env vars")
- def test_load_default_certs_env(self):
- ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
- with support.EnvironmentVarGuard() as env:
-diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c
-index f494e77..6387c3f 100644
---- a/Modules/_hashopenssl.c
-+++ b/Modules/_hashopenssl.c
-@@ -38,10 +38,22 @@
- #define _OPENSSL_SUPPORTS_SHA2
- #endif
-
-+#if (OPENSSL_VERSION_NUMBER < 0x10100000L) || defined(LIBRESSL_VERSION_NUMBER)
-+/* OpenSSL < 1.1.0 */
-+#define EVP_MD_CTX_new EVP_MD_CTX_create
-+#define EVP_MD_CTX_free EVP_MD_CTX_destroy
-+#define HAS_FAST_PKCS5_PBKDF2_HMAC 0
-+#include <openssl/hmac.h>
-+#else
-+/* OpenSSL >= 1.1.0 */
-+#define HAS_FAST_PKCS5_PBKDF2_HMAC 1
-+#endif
-+
-+
- typedef struct {
- PyObject_HEAD
- PyObject *name; /* name of this hash algorithm */
-- EVP_MD_CTX ctx; /* OpenSSL message digest context */
-+ EVP_MD_CTX *ctx; /* OpenSSL message digest context */
- #ifdef WITH_THREAD
- PyThread_type_lock lock; /* OpenSSL context lock */
- #endif
-@@ -54,10 +66,10 @@ static PyTypeObject EVPtype;
- We have one of these per algorithm */
- typedef struct {
- PyObject *name_obj;
-- EVP_MD_CTX ctxs[2];
-+ EVP_MD_CTX* ctxs[2];
- /* ctx_ptrs will point to ctxs unless an error occurred, when it will
- be NULL: */
-- EVP_MD_CTX *ctx_ptrs[2];
-+ int initialized[2];
- PyObject *error_msgs[2];
- } EVPCachedInfo;
-
-@@ -74,18 +86,57 @@ DEFINE_CONSTS_FOR_NEW(sha512)
- #endif
-
-
-+/* LCOV_EXCL_START */
-+static PyObject *
-+_setException(PyObject *exc)
-+{
-+ unsigned long errcode;
-+ const char *lib, *func, *reason;
-+
-+ errcode = ERR_peek_last_error();
-+ if (!errcode) {
-+ PyErr_SetString(exc, "unknown reasons");
-+ return NULL;
-+ }
-+ ERR_clear_error();
-+
-+ lib = ERR_lib_error_string(errcode);
-+ func = ERR_func_error_string(errcode);
-+ reason = ERR_reason_error_string(errcode);
-+
-+ if (lib && func) {
-+ PyErr_Format(exc, "[%s: %s] %s", lib, func, reason);
-+ }
-+ else if (lib) {
-+ PyErr_Format(exc, "[%s] %s", lib, reason);
-+ }
-+ else {
-+ PyErr_SetString(exc, reason);
-+ }
-+ return NULL;
-+}
-+/* LCOV_EXCL_STOP */
-+
- static EVPobject *
- newEVPobject(PyObject *name)
- {
- EVPobject *retval = (EVPobject *)PyObject_New(EVPobject, &EVPtype);
-+ if (retval == NULL) {
-+ return NULL;
-+ }
-
- /* save the name for .name to return */
-- if (retval != NULL) {
-- Py_INCREF(name);
-- retval->name = name;
-+ Py_INCREF(name);
-+ retval->name = name;
- #ifdef WITH_THREAD
-- retval->lock = NULL;
-+ retval->lock = NULL;
- #endif
-+
-+ retval->ctx = EVP_MD_CTX_new();
-+ if (retval->ctx == NULL) {
-+ Py_DECREF(retval);
-+ PyErr_NoMemory();
-+ return NULL;
- }
-
- return retval;
-@@ -101,7 +152,7 @@ EVP_hash(EVPobject *self, const void *vp, Py_ssize_t len)
- process = MUNCH_SIZE;
- else
- process = Py_SAFE_DOWNCAST(len, Py_ssize_t, unsigned int);
-- EVP_DigestUpdate(&self->ctx, (const void*)cp, process);
-+ EVP_DigestUpdate(self->ctx, (const void*)cp, process);
- len -= process;
- cp += process;
- }
-@@ -158,16 +209,19 @@ EVP_dealloc(EVPobject *self)
- if (self->lock != NULL)
- PyThread_free_lock(self->lock);
- #endif
-- EVP_MD_CTX_cleanup(&self->ctx);
-+ EVP_MD_CTX_free(self->ctx);
- Py_XDECREF(self->name);
- PyObject_Del(self);
- }
-
--static void locked_EVP_MD_CTX_copy(EVP_MD_CTX *new_ctx_p, EVPobject *self)
-+static int
-+locked_EVP_MD_CTX_copy(EVP_MD_CTX *new_ctx_p, EVPobject *self)
- {
-+ int result;
- ENTER_HASHLIB(self);
-- EVP_MD_CTX_copy(new_ctx_p, &self->ctx);
-+ result = EVP_MD_CTX_copy(new_ctx_p, self->ctx);
- LEAVE_HASHLIB(self);
-+ return result;
- }
-
- /* External methods for a hash object */
-@@ -183,7 +237,9 @@ EVP_copy(EVPobject *self, PyObject *unused)
- if ( (newobj = newEVPobject(self->name))==NULL)
- return NULL;
-
-- locked_EVP_MD_CTX_copy(&newobj->ctx, self);
-+ if (!locked_EVP_MD_CTX_copy(newobj->ctx, self)) {
-+ return _setException(PyExc_ValueError);
-+ }
- return (PyObject *)newobj;
- }
-
-@@ -194,16 +250,24 @@ static PyObject *
- EVP_digest(EVPobject *self, PyObject *unused)
- {
- unsigned char digest[EVP_MAX_MD_SIZE];
-- EVP_MD_CTX temp_ctx;
-+ EVP_MD_CTX *temp_ctx;
- PyObject *retval;
- unsigned int digest_size;
-
-- locked_EVP_MD_CTX_copy(&temp_ctx, self);
-- digest_size = EVP_MD_CTX_size(&temp_ctx);
-- EVP_DigestFinal(&temp_ctx, digest, NULL);
-+ temp_ctx = EVP_MD_CTX_new();
-+ if (temp_ctx == NULL) {
-+ PyErr_NoMemory();
-+ return NULL;
-+ }
-+
-+ if (!locked_EVP_MD_CTX_copy(temp_ctx, self)) {
-+ return _setException(PyExc_ValueError);
-+ }
-+ digest_size = EVP_MD_CTX_size(temp_ctx);
-+ EVP_DigestFinal(temp_ctx, digest, NULL);
-
- retval = PyBytes_FromStringAndSize((const char *)digest, digest_size);
-- EVP_MD_CTX_cleanup(&temp_ctx);
-+ EVP_MD_CTX_free(temp_ctx);
- return retval;
- }
-
-@@ -214,17 +278,25 @@ static PyObject *
- EVP_hexdigest(EVPobject *self, PyObject *unused)
- {
- unsigned char digest[EVP_MAX_MD_SIZE];
-- EVP_MD_CTX temp_ctx;
-+ EVP_MD_CTX *temp_ctx;
- PyObject *retval;
- char *hex_digest;
- unsigned int i, j, digest_size;
-
-+ temp_ctx = EVP_MD_CTX_new();
-+ if (temp_ctx == NULL) {
-+ PyErr_NoMemory();
-+ return NULL;
-+ }
-+
- /* Get the raw (binary) digest value */
-- locked_EVP_MD_CTX_copy(&temp_ctx, self);
-- digest_size = EVP_MD_CTX_size(&temp_ctx);
-- EVP_DigestFinal(&temp_ctx, digest, NULL);
-+ if (!locked_EVP_MD_CTX_copy(temp_ctx, self)) {
-+ return _setException(PyExc_ValueError);
-+ }
-+ digest_size = EVP_MD_CTX_size(temp_ctx);
-+ EVP_DigestFinal(temp_ctx, digest, NULL);
-
-- EVP_MD_CTX_cleanup(&temp_ctx);
-+ EVP_MD_CTX_free(temp_ctx);
-
- /* Allocate a new buffer */
- hex_digest = PyMem_Malloc(digest_size * 2 + 1);
-@@ -293,7 +365,7 @@ static PyObject *
- EVP_get_block_size(EVPobject *self, void *closure)
- {
- long block_size;
-- block_size = EVP_MD_CTX_block_size(&self->ctx);
-+ block_size = EVP_MD_CTX_block_size(self->ctx);
- return PyLong_FromLong(block_size);
- }
-
-@@ -301,7 +373,7 @@ static PyObject *
- EVP_get_digest_size(EVPobject *self, void *closure)
- {
- long size;
-- size = EVP_MD_CTX_size(&self->ctx);
-+ size = EVP_MD_CTX_size(self->ctx);
- return PyLong_FromLong(size);
- }
-
-@@ -363,8 +435,8 @@ EVP_tp_init(EVPobject *self, PyObject *args, PyObject *kwds)
- PyBuffer_Release(&view);
- return -1;
- }
-- mc_ctx_init(&self->ctx, usedforsecurity);
-- if (!EVP_DigestInit_ex(&self->ctx, digest, NULL)) {
-+ mc_ctx_init(self->ctx, usedforsecurity);
-+ if (!EVP_DigestInit_ex(self->ctx, digest, NULL)) {
- set_evp_exception();
- PyBuffer_Release(&view);
- return -1;
-@@ -466,10 +538,10 @@ EVPnew(PyObject *name_obj,
- return NULL;
-
- if (initial_ctx) {
-- EVP_MD_CTX_copy(&self->ctx, initial_ctx);
-+ EVP_MD_CTX_copy(self->ctx, initial_ctx);
- } else {
-- mc_ctx_init(&self->ctx, usedforsecurity);
-- if (!EVP_DigestInit_ex(&self->ctx, digest, NULL)) {
-+ mc_ctx_init(self->ctx, usedforsecurity);
-+ if (!EVP_DigestInit_ex(self->ctx, digest, NULL)) {
- set_evp_exception();
- Py_DECREF(self);
- return NULL;
-@@ -548,6 +620,7 @@ EVP_new(PyObject *self, PyObject *args, PyObject *kwdict)
-
- #define PY_PBKDF2_HMAC 1
-
-+#if !HAS_FAST_PKCS5_PBKDF2_HMAC
- /* Improved implementation of PKCS5_PBKDF2_HMAC()
- *
- * PKCS5_PBKDF2_HMAC_fast() hashes the password exactly one time instead of
-@@ -629,37 +702,8 @@ PKCS5_PBKDF2_HMAC_fast(const char *pass, int passlen,
- HMAC_CTX_cleanup(&hctx_tpl);
- return 1;
- }
-+#endif
-
--/* LCOV_EXCL_START */
--static PyObject *
--_setException(PyObject *exc)
--{
-- unsigned long errcode;
-- const char *lib, *func, *reason;
--
-- errcode = ERR_peek_last_error();
-- if (!errcode) {
-- PyErr_SetString(exc, "unknown reasons");
-- return NULL;
-- }
-- ERR_clear_error();
--
-- lib = ERR_lib_error_string(errcode);
-- func = ERR_func_error_string(errcode);
-- reason = ERR_reason_error_string(errcode);
--
-- if (lib && func) {
-- PyErr_Format(exc, "[%s: %s] %s", lib, func, reason);
-- }
-- else if (lib) {
-- PyErr_Format(exc, "[%s] %s", lib, reason);
-- }
-- else {
-- PyErr_SetString(exc, reason);
-- }
-- return NULL;
--}
--/* LCOV_EXCL_STOP */
-
- PyDoc_STRVAR(pbkdf2_hmac__doc__,
- "pbkdf2_hmac(hash_name, password, salt, iterations, dklen=None) -> key\n\
-@@ -741,10 +785,17 @@ pbkdf2_hmac(PyObject *self, PyObject *args, PyObject *kwdict)
- key = PyBytes_AS_STRING(key_obj);
-
- Py_BEGIN_ALLOW_THREADS
-+#if HAS_FAST_PKCS5_PBKDF2_HMAC
-+ retval = PKCS5_PBKDF2_HMAC((char*)password.buf, (int)password.len,
-+ (unsigned char *)salt.buf, (int)salt.len,
-+ iterations, digest, dklen,
-+ (unsigned char *)key);
-+#else
- retval = PKCS5_PBKDF2_HMAC_fast((char*)password.buf, (int)password.len,
- (unsigned char *)salt.buf, (int)salt.len,
- iterations, digest, dklen,
- (unsigned char *)key);
-+#endif
- Py_END_ALLOW_THREADS
-
- if (!retval) {
-@@ -860,11 +911,11 @@ implement_specific_EVP_new(PyObject *self, PyObject *args, PyObject
*kwdict,
- * If an error occurred during creation of the global content, the ctx_ptr
- * will be NULL, and the error_msg will hopefully be non-NULL:
- */
-- if (cached_info->ctx_ptrs[idx]) {
-+ if (cached_info->initialized[idx]) {
- /* We successfully initialized this context; copy it: */
- ret_obj = EVPnew(cached_info->name_obj,
- NULL,
-- cached_info->ctx_ptrs[idx],
-+ cached_info->ctxs[idx],
- (unsigned char*)view.buf, view.len,
- usedforsecurity);
- } else {
-@@ -897,14 +948,11 @@ implement_specific_EVP_new(PyObject *self, PyObject *args, PyObject
*kwdict,
-
- Try to initialize a context for each hash twice, once with
- EVP_MD_CTX_FLAG_NON_FIPS_ALLOW and once without.
--
-- Any that have errors during initialization will end up with a NULL ctx_ptrs
-- entry, and err_msgs will be set (unless we're very low on memory)
-+
-+ Any that have errors during initialization will end up with initialized[i]
-+ set to 0 and err_msgs being set.
- */
--#define INIT_CONSTRUCTOR_CONSTANTS(NAME) do { \
-- init_constructor_constant(&cached_info_ ## NAME, #NAME); \
--} while (0);
--static void
-+static int
- init_constructor_constant(EVPCachedInfo *cached_info, const char *name)
- {
- assert(cached_info);
-@@ -912,18 +960,25 @@ init_constructor_constant(EVPCachedInfo *cached_info, const char
*name)
- if (EVP_get_digestbyname(name)) {
- int i;
- for (i=0; i<2; i++) {
-- mc_ctx_init(&cached_info->ctxs[i], i);
-- if (EVP_DigestInit_ex(&cached_info->ctxs[i],
-- EVP_get_digestbyname(name), NULL)) {
-+ cached_info->ctxs[i] = EVP_MD_CTX_new();
-+ if (cached_info->ctxs[i] == NULL) {
-+ PyErr_NoMemory();
-+ return -1;
-+ }
-+
-+ mc_ctx_init(cached_info->ctxs[i], i);
-+ if (EVP_DigestInit(cached_info->ctxs[i],
-+ EVP_get_digestbyname(name))) {
- /* Success: */
-- cached_info->ctx_ptrs[i] = &cached_info->ctxs[i];
-+ cached_info->initialized[i] = 1;
- } else {
- /* Failure: */
-- cached_info->ctx_ptrs[i] = NULL;
-- cached_info->error_msgs[i] = error_msg_for_last_error();
-+ cached_info->error_msgs[i] = error_msg_for_last_error();
-+ cached_info->initialized[i] = 0;
- }
- }
- }
-+ return 0;
- }
-
-
-@@ -1002,6 +1057,13 @@ PyInit__hashlib(void)
- Py_INCREF((PyObject *)&EVPtype);
- PyModule_AddObject(m, "HASH", (PyObject *)&EVPtype);
-
-+#define INIT_CONSTRUCTOR_CONSTANTS(NAME) \
-+ do { \
-+ if (init_constructor_constant(&cached_info_ ## NAME, #NAME) < 0) { \
-+ return NULL; \
-+ } \
-+ } while (0);
-+
- /* these constants are used by the convenience constructors */
- INIT_CONSTRUCTOR_CONSTANTS(md5);
- INIT_CONSTRUCTOR_CONSTANTS(sha1);
-diff --git a/Modules/_ssl.c b/Modules/_ssl.c
-index 0ff9d55..c94cdc3 100644
---- a/Modules/_ssl.c
-+++ b/Modules/_ssl.c
-@@ -55,6 +55,14 @@ static PySocketModule_APIObject PySocketModule;
- #include <sys/poll.h>
- #endif
-
-+/* Don't warn about deprecated functions */
-+#ifdef __GNUC__
-+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-+#endif
-+#ifdef __clang__
-+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-+#endif
-+
- /* Include OpenSSL header files */
- #include "openssl/rsa.h"
- #include "openssl/crypto.h"
-@@ -90,6 +98,10 @@ struct py_ssl_library_code {
- /* Include generated data (error codes) */
- #include "_ssl_data.h"
-
-+#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) &&
!defined(LIBRESSL_VERSION_NUMBER)
-+# define OPENSSL_VERSION_1_1 1
-+#endif
-+
- /* Openssl comes with TLSv1.1 and TLSv1.2 between 1.0.0h and 1.0.1
-
http://www.openssl.org/news/changelog.html
- */
-@@ -108,6 +120,72 @@ struct py_ssl_library_code {
- # define HAVE_SNI 0
- #endif
-
-+#ifdef TLSEXT_TYPE_application_layer_protocol_negotiation
-+# define HAVE_ALPN
-+#endif
-+
-+#ifndef INVALID_SOCKET /* MS defines this */
-+#define INVALID_SOCKET (-1)
-+#endif
-+
-+#ifdef OPENSSL_VERSION_1_1
-+/* OpenSSL 1.1.0+ */
-+#ifndef OPENSSL_NO_SSL2
-+#define OPENSSL_NO_SSL2
-+#endif
-+#else /* OpenSSL < 1.1.0 */
-+#if defined(WITH_THREAD)
-+#define HAVE_OPENSSL_CRYPTO_LOCK
-+#endif
-+
-+static int X509_NAME_ENTRY_set(const X509_NAME_ENTRY *ne)
-+{
-+ return ne->set;
-+}
-+
-+#ifndef OPENSSL_NO_COMP
-+static int COMP_get_type(const COMP_METHOD *meth)
-+{
-+ return meth->type;
-+}
-+
-+static const char *COMP_get_name(const COMP_METHOD *meth)
-+{
-+ return meth->name;
-+}
-+#endif
-+
-+static pem_password_cb *SSL_CTX_get_default_passwd_cb(SSL_CTX *ctx)
-+{
-+ return ctx->default_passwd_callback;
-+}
-+
-+static void *SSL_CTX_get_default_passwd_cb_userdata(SSL_CTX *ctx)
-+{
-+ return ctx->default_passwd_callback_userdata;
-+}
-+
-+static int X509_OBJECT_get_type(X509_OBJECT *x)
-+{
-+ return x->type;
-+}
-+
-+static X509 *X509_OBJECT_get0_X509(X509_OBJECT *x)
-+{
-+ return x->data.x509;
-+}
-+
-+static STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(X509_STORE *store) {
-+ return store->objs;
-+}
-+
-+static X509_VERIFY_PARAM *X509_STORE_get0_param(X509_STORE *store)
-+{
-+ return store->param;
-+}
-+#endif /* OpenSSL < 1.1.0 or LibreSSL */
-+
-+
- enum py_ssl_error {
- /* these mirror ssl.h */
- PY_SSL_ERROR_NONE,
-@@ -691,7 +769,7 @@ _create_tuple_for_X509_NAME (X509_NAME *xname)
-
- /* check to see if we've gotten to a new RDN */
- if (rdn_level >= 0) {
-- if (rdn_level != entry->set) {
-+ if (rdn_level != X509_NAME_ENTRY_set(entry)) {
- /* yes, new RDN */
- /* add old RDN to DN */
- rdnt = PyList_AsTuple(rdn);
-@@ -708,7 +786,7 @@ _create_tuple_for_X509_NAME (X509_NAME *xname)
- goto fail0;
- }
- }
-- rdn_level = entry->set;
-+ rdn_level = X509_NAME_ENTRY_set(entry);
-
- /* now add this attribute to the current RDN */
- name = X509_NAME_ENTRY_get_object(entry);
-@@ -811,18 +889,18 @@ _get_peer_alt_names (X509 *certificate) {
- goto fail;
- }
-
-- p = ext->value->data;
-+ p = X509_EXTENSION_get_data(ext)->data;
- if (method->it)
- names = (GENERAL_NAMES*)
- (ASN1_item_d2i(NULL,
- &p,
-- ext->value->length,
-+ X509_EXTENSION_get_data(ext)->length,
- ASN1_ITEM_ptr(method->it)));
- else
- names = (GENERAL_NAMES*)
- (method->d2i(NULL,
- &p,
-- ext->value->length));
-+ X509_EXTENSION_get_data(ext)->length));
-
- for(j = 0; j < sk_GENERAL_NAME_num(names); j++) {
- /* get a rendering of each name in the set of names */
-@@ -1033,13 +1111,11 @@ _get_crl_dp(X509 *certificate) {
- int i, j;
- PyObject *lst, *res = NULL;
-
--#if OPENSSL_VERSION_NUMBER < 0x10001000L
-- dps = X509_get_ext_d2i(certificate, NID_crl_distribution_points, NULL, NULL);
--#else
-+#if OPENSSL_VERSION_NUMBER >= 0x10001000L
- /* Calls x509v3_cache_extensions and sets up crldp */
- X509_check_ca(certificate);
-- dps = certificate->crldp;
- #endif
-+ dps = X509_get_ext_d2i(certificate, NID_crl_distribution_points, NULL, NULL);
-
- if (dps == NULL)
- return Py_None;
-@@ -1431,9 +1507,9 @@ static PyObject *PySSL_compression(PySSLSocket *self) {
- if (self->ssl == NULL)
- Py_RETURN_NONE;
- comp_method = SSL_get_current_compression(self->ssl);
-- if (comp_method == NULL || comp_method->type == NID_undef)
-+ if (comp_method == NULL || COMP_get_type(comp_method) == NID_undef)
- Py_RETURN_NONE;
-- short_name = OBJ_nid2sn(comp_method->type);
-+ short_name = COMP_get_name(comp_method);
- if (short_name == NULL)
- Py_RETURN_NONE;
- return PyUnicode_DecodeFSDefault(short_name);
-@@ -2051,8 +2127,9 @@ context_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
- #ifndef OPENSSL_NO_ECDH
- /* Allow automatic ECDH curve selection (on OpenSSL 1.0.2+), or use
- prime256v1 by default. This is Apache mod_ssl's initialization
-- policy, so we should be safe. */
--#if defined(SSL_CTX_set_ecdh_auto)
-+ policy, so we should be safe. OpenSSL 1.1 has it enabled by default.
-+ */
-+#if defined(SSL_CTX_set_ecdh_auto) && !defined(OPENSSL_VERSION_1_1)
- SSL_CTX_set_ecdh_auto(self->ctx, 1);
- #else
- {
-@@ -2263,10 +2340,12 @@ static PyObject *
- get_verify_flags(PySSLContext *self, void *c)
- {
- X509_STORE *store;
-+ X509_VERIFY_PARAM *param;
- unsigned long flags;
-
- store = SSL_CTX_get_cert_store(self->ctx);
-- flags = X509_VERIFY_PARAM_get_flags(store->param);
-+ param = X509_STORE_get0_param(store);
-+ flags = X509_VERIFY_PARAM_get_flags(param);
- return PyLong_FromUnsignedLong(flags);
- }
-
-@@ -2274,22 +2353,24 @@ static int
- set_verify_flags(PySSLContext *self, PyObject *arg, void *c)
- {
- X509_STORE *store;
-+ X509_VERIFY_PARAM *param;
- unsigned long new_flags, flags, set, clear;
-
- if (!PyArg_Parse(arg, "k", &new_flags))
- return -1;
- store = SSL_CTX_get_cert_store(self->ctx);
-- flags = X509_VERIFY_PARAM_get_flags(store->param);
-+ param = X509_STORE_get0_param(store);
-+ flags = X509_VERIFY_PARAM_get_flags(param);
- clear = flags & ~new_flags;
- set = ~flags & new_flags;
- if (clear) {
-- if (!X509_VERIFY_PARAM_clear_flags(store->param, clear)) {
-+ if (!X509_VERIFY_PARAM_clear_flags(param, clear)) {
- _setSSLError(NULL, 0, __FILE__, __LINE__);
- return -1;
- }
- }
- if (set) {
-- if (!X509_VERIFY_PARAM_set_flags(store->param, set)) {
-+ if (!X509_VERIFY_PARAM_set_flags(param, set)) {
- _setSSLError(NULL, 0, __FILE__, __LINE__);
- return -1;
- }
-@@ -2459,8 +2540,8 @@ load_cert_chain(PySSLContext *self, PyObject *args, PyObject
*kwds)
- char *kwlist[] = {"certfile", "keyfile", "password",
NULL};
- PyObject *certfile, *keyfile = NULL, *password = NULL;
- PyObject *certfile_bytes = NULL, *keyfile_bytes = NULL;
-- pem_password_cb *orig_passwd_cb = self->ctx->default_passwd_callback;
-- void *orig_passwd_userdata = self->ctx->default_passwd_callback_userdata;
-+ pem_password_cb *orig_passwd_cb = SSL_CTX_get_default_passwd_cb(self->ctx);
-+ void *orig_passwd_userdata = SSL_CTX_get_default_passwd_cb_userdata(self->ctx);
- _PySSLPasswordInfo pw_info = { NULL, NULL, NULL, 0, 0 };
- int r;
-
-@@ -2591,8 +2672,9 @@ _add_ca_certs(PySSLContext *self, void *data, Py_ssize_t len,
- cert = d2i_X509_bio(biobuf, NULL);
- } else {
- cert = PEM_read_bio_X509(biobuf, NULL,
-- self->ctx->default_passwd_callback,
--
self->ctx->default_passwd_callback_userdata);
-+ SSL_CTX_get_default_passwd_cb(self->ctx),
-+
SSL_CTX_get_default_passwd_cb_userdata(self->ctx)
-+ );
- }
- if (cert == NULL) {
- break;
-@@ -3040,25 +3122,24 @@ static PyObject *
- cert_store_stats(PySSLContext *self)
- {
- X509_STORE *store;
-+ STACK_OF(X509_OBJECT) *objs;
- X509_OBJECT *obj;
-- int x509 = 0, crl = 0, pkey = 0, ca = 0, i;
-+ int x509 = 0, crl = 0, ca = 0, i;
-
- store = SSL_CTX_get_cert_store(self->ctx);
-- for (i = 0; i < sk_X509_OBJECT_num(store->objs); i++) {
-- obj = sk_X509_OBJECT_value(store->objs, i);
-- switch (obj->type) {
-+ objs = X509_STORE_get0_objects(store);
-+ for (i = 0; i < sk_X509_OBJECT_num(objs); i++) {
-+ obj = sk_X509_OBJECT_value(objs, i);
-+ switch (X509_OBJECT_get_type(obj)) {
- case X509_LU_X509:
- x509++;
-- if (X509_check_ca(obj->data.x509)) {
-+ if (X509_check_ca(X509_OBJECT_get0_X509(obj))) {
- ca++;
- }
- break;
- case X509_LU_CRL:
- crl++;
- break;
-- case X509_LU_PKEY:
-- pkey++;
-- break;
- default:
- /* Ignore X509_LU_FAIL, X509_LU_RETRY, X509_LU_PKEY.
- * As far as I can tell they are internal states and never
-@@ -3083,6 +3164,7 @@ get_ca_certs(PySSLContext *self, PyObject *args, PyObject *kwds)
- {
- char *kwlist[] = {"binary_form", NULL};
- X509_STORE *store;
-+ STACK_OF(X509_OBJECT) *objs;
- PyObject *ci = NULL, *rlist = NULL;
- int i;
- int binary_mode = 0;
-@@ -3097,17 +3179,18 @@ get_ca_certs(PySSLContext *self, PyObject *args, PyObject *kwds)
- }
-
- store = SSL_CTX_get_cert_store(self->ctx);
-- for (i = 0; i < sk_X509_OBJECT_num(store->objs); i++) {
-+ objs = X509_STORE_get0_objects(store);
-+ for (i = 0; i < sk_X509_OBJECT_num(objs); i++) {
- X509_OBJECT *obj;
- X509 *cert;
-
-- obj = sk_X509_OBJECT_value(store->objs, i);
-- if (obj->type != X509_LU_X509) {
-+ obj = sk_X509_OBJECT_value(objs, i);
-+ if (X509_OBJECT_get_type(obj) != X509_LU_X509) {
- /* not a x509 cert */
- continue;
- }
- /* CA for any purpose */
-- cert = obj->data.x509;
-+ cert = X509_OBJECT_get0_X509(obj);
- if (!X509_check_ca(cert)) {
- continue;
- }
-@@ -3780,10 +3863,12 @@ static PyMethodDef PySSL_methods[] = {
- };
-
-
--#ifdef WITH_THREAD
-+#ifdef HAVE_OPENSSL_CRYPTO_LOCK
-
- /* an implementation of OpenSSL threading operations in terms
-- of the Python C thread library */
-+ * of the Python C thread library
-+ * Only used up to 1.0.2. OpenSSL 1.1.0+ has its own locking code.
-+ */
-
- static PyThread_type_lock *_ssl_locks = NULL;
-
-@@ -3864,7 +3949,7 @@ static int _setup_ssl_threads(void) {
- return 1;
- }
-
--#endif /* def HAVE_THREAD */
-+#endif /* HAVE_OPENSSL_CRYPTO_LOCK for WITH_THREAD && OpenSSL < 1.1.0 */
-
- PyDoc_STRVAR(module_doc,
- "Implementation module for SSL socket operations. See the socket module\n\
-@@ -3931,11 +4016,16 @@ PyInit__ssl(void)
- SSL_load_error_strings();
- SSL_library_init();
- #ifdef WITH_THREAD
-+#ifdef HAVE_OPENSSL_CRYPTO_LOCK
- /* note that this will start threading if not already started */
- if (!_setup_ssl_threads()) {
- return NULL;
- }
-+#elif OPENSSL_VERSION_1_1 && defined(OPENSSL_THREADS)
-+ /* OpenSSL 1.1.0 builtin thread support is enabled */
-+ _ssl_locks_count++;
- #endif
-+#endif /* WITH_THREAD */
- OpenSSL_add_all_algorithms();
-
- /* Add symbols to module dict */
diff --git a/00322-test_ssl-skip-openssl111.patch b/00322-test_ssl-skip-openssl111.patch
deleted file mode 100644
index 59d6d1c..0000000
--- a/00322-test_ssl-skip-openssl111.patch
+++ /dev/null
@@ -1,67 +0,0 @@
-bpo-36576: Skip test_ssl and test_asyncio tests failing with OpenSSL 1.1.1
-
-Some test_ssl and test_asyncio are written for OpenSSL 1.0 and TLS
-1.0, but fail with OpenSSL 1.1.1 and TLS 1.3.
-
-Fixing these needs require to backport new ssl flags like
-ssl.OP_NO_TLSv1_3 or ssl.OP_NO_COMPRESSION which cannot be done in a
-minor 3.5.x release. Moreover, it is not really worth it: the code
-works fine, issues are in the tests.
-
-Backport of:
https://github.com/python/cpython/pull/12694
-
-Resolves: rhbz#1685609
-
-diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py
-index 6373618..3db3707 100644
---- a/Lib/test/test_asyncio/test_events.py
-+++ b/Lib/test/test_asyncio/test_events.py
-@@ -33,6 +33,12 @@ except ImportError:
- from asyncio import test_support as support
-
-
-+if ssl is not None:
-+ IS_OPENSSL_1_1_1 = ssl.OPENSSL_VERSION_INFO >= (1, 1, 1)
-+else:
-+ IS_OPENSSL_1_1_1 = False
-+
-+
- def data_file(filename):
- if hasattr(support, 'TEST_HOME_DIR'):
- fullname = os.path.join(support.TEST_HOME_DIR, filename)
-@@ -1049,6 +1055,7 @@ class EventLoopTestsMixin:
- self.test_create_unix_server_ssl_verify_failed()
-
- @unittest.skipIf(ssl is None, 'No ssl module')
-+ @unittest.skipIf(IS_OPENSSL_1_1_1, "bpo-36576: fail on OpenSSL 1.1.1")
- def test_create_server_ssl_match_failed(self):
- proto = MyProto(loop=self.loop)
- server, host, port = self._make_ssl_server(
-diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
-index 401cc2f..8edf055 100644
---- a/Lib/test/test_ssl.py
-+++ b/Lib/test/test_ssl.py
-@@ -24,6 +24,7 @@ ssl = support.import_module("ssl")
- PROTOCOLS = sorted(ssl._PROTOCOL_NAMES)
- HOST = support.HOST
- IS_LIBRESSL = ssl.OPENSSL_VERSION.startswith('LibreSSL')
-+IS_OPENSSL_1_1_1 = not IS_LIBRESSL and ssl.OPENSSL_VERSION_INFO >= (1, 1, 1)
-
-
- def data_file(*name):
-@@ -697,6 +698,7 @@ class ContextTests(unittest.TestCase):
- ctx.set_ciphers("^$:,;?*'dorothyx")
-
- @skip_if_broken_ubuntu_ssl
-+ @unittest.skipIf(IS_OPENSSL_1_1_1, "bpo-36576: fail on OpenSSL 1.1.1")
- def test_options(self):
- ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
- # OP_ALL | OP_NO_SSLv2 | OP_NO_SSLv3 is the default value
-@@ -2655,6 +2657,7 @@ else:
- self.assertIn("no shared cipher", str(server.conn_errors[0]))
-
- @unittest.skipUnless(ssl.HAS_ECDH, "test requires ECDH-enabled
OpenSSL")
-+ @unittest.skipIf(IS_OPENSSL_1_1_1, "bpo-36576: fail on OpenSSL
1.1.1")
- def test_default_ecdh_curve(self):
- # Issue #21015: elliptic curve-based Diffie Hellman key exchange
- # should be enabled by default on SSL contexts.
diff --git a/00332-CVE-2019-16056.patch b/00332-CVE-2019-16056.patch
deleted file mode 100644
index 4e3cd12..0000000
--- a/00332-CVE-2019-16056.patch
+++ /dev/null
@@ -1,95 +0,0 @@
-diff --git a/Lib/email/_header_value_parser.py b/Lib/email/_header_value_parser.py
-index 37a9fbcbb67d..facc208fde12 100644
---- a/Lib/email/_header_value_parser.py
-+++ b/Lib/email/_header_value_parser.py
-@@ -1964,6 +1964,8 @@ def get_domain(value):
- token, value = get_dot_atom(value)
- except errors.HeaderParseError:
- token, value = get_atom(value)
-+ if value and value[0] == '@':
-+ raise errors.HeaderParseError('Invalid Domain')
- if leader is not None:
- token[:0] = [leader]
- domain.append(token)
-diff --git a/Lib/email/_parseaddr.py b/Lib/email/_parseaddr.py
-index cdfa3729adc7..41ff6f8c000d 100644
---- a/Lib/email/_parseaddr.py
-+++ b/Lib/email/_parseaddr.py
-@@ -379,7 +379,12 @@ def getaddrspec(self):
- aslist.append('@')
- self.pos += 1
- self.gotonext()
-- return EMPTYSTRING.join(aslist) + self.getdomain()
-+ domain = self.getdomain()
-+ if not domain:
-+ # Invalid domain, return an empty address instead of returning a
-+ # local part to denote failed parsing.
-+ return EMPTYSTRING
-+ return EMPTYSTRING.join(aslist) + domain
-
- def getdomain(self):
- """Get the complete domain name from an
address."""
-@@ -394,6 +399,10 @@ def getdomain(self):
- elif self.field[self.pos] == '.':
- self.pos += 1
- sdlist.append('.')
-+ elif self.field[self.pos] == '@':
-+ # bpo-34155: Don't parse domains with two `@` like
-+ # `a@malicious.org(a)important.com`.
-+ return EMPTYSTRING
- elif self.field[self.pos] in self.atomends:
- break
- else:
-diff --git a/Lib/test/test_email/test__header_value_parser.py
b/Lib/test/test_email/test__header_value_parser.py
-index b1e7dff2405d..8ae617a6bd58 100644
---- a/Lib/test/test_email/test__header_value_parser.py
-+++ b/Lib/test/test_email/test__header_value_parser.py
-@@ -1418,6 +1418,16 @@ def test_get_addr_spec_dot_atom(self):
- self.assertEqual(addr_spec.domain, 'example.com')
- self.assertEqual(addr_spec.addr_spec, 'star.a.star(a)example.com')
-
-+ def test_get_addr_spec_multiple_domains(self):
-+ with self.assertRaises(errors.HeaderParseError):
-+ parser.get_addr_spec('star@a.star(a)example.com')
-+
-+ with self.assertRaises(errors.HeaderParseError):
-+ parser.get_addr_spec('star@a(a)example.com')
-+
-+ with self.assertRaises(errors.HeaderParseError):
-+ parser.get_addr_spec('star@172.17.0.1(a)example.com')
-+
- # get_obs_route
-
- def test_get_obs_route_simple(self):
-diff --git a/Lib/test/test_email/test_email.py b/Lib/test/test_email/test_email.py
-index 9b86a2aee9ac..d4c3447e63d0 100644
---- a/Lib/test/test_email/test_email.py
-+++ b/Lib/test/test_email/test_email.py
-@@ -3015,6 +3015,20 @@ def test_parseaddr_empty(self):
- self.assertEqual(utils.parseaddr('<>'), ('', ''))
- self.assertEqual(utils.formataddr(utils.parseaddr('<>')),
'')
-
-+ def test_parseaddr_multiple_domains(self):
-+ self.assertEqual(
-+ utils.parseaddr('a@b@c'),
-+ ('', '')
-+ )
-+ self.assertEqual(
-+ utils.parseaddr('a@b.c(a)c'),
-+ ('', '')
-+ )
-+ self.assertEqual(
-+ utils.parseaddr('a@172.17.0.1(a)c'),
-+ ('', '')
-+ )
-+
- def test_noquote_dump(self):
- self.assertEqual(
- utils.formataddr(('A Silly Person', 'person(a)dom.ain')),
-diff --git a/Misc/NEWS.d/next/Security/2019-05-04-13-33-37.bpo-34155.MJll68.rst
b/Misc/NEWS.d/next/Security/2019-05-04-13-33-37.bpo-34155.MJll68.rst
-new file mode 100644
-index 000000000000..50292e29ed1d
---- /dev/null
-+++ b/Misc/NEWS.d/next/Security/2019-05-04-13-33-37.bpo-34155.MJll68.rst
-@@ -0,0 +1 @@
-+Fix parsing of invalid email addresses with more than one ``@`` (e.g. a@b(a)c.com.) to not
return the part before 2nd ``@`` as valid email address. Patch by maxking & jpic.
diff --git a/00343-faulthandler-gcc10.patch b/00343-faulthandler-gcc10.patch
deleted file mode 100644
index daec72a..0000000
--- a/00343-faulthandler-gcc10.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-commit 5044c889dfced2f43e2cccb673d889a4882f6b3b
-Author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
-Date: Wed Dec 4 12:29:22 2019 -0800
-
- bpo-38965: Fix faulthandler._stack_overflow() on GCC 10 (GH-17467)
-
- Use the "volatile" keyword to prevent tail call optimization
- on any compiler, rather than relying on compiler specific pragma.
- (cherry picked from commit 8b787964e0a647caa0558b7c29ae501470d727d9)
-
- Co-authored-by: Victor Stinner <vstinner(a)python.org>
-
-commit ac827edc493d3ac3f5b9b0cc353df1d4b418a9aa
-Author: Victor Stinner <vstinner(a)redhat.com>
-Date: Wed Aug 14 23:35:27 2019 +0200
-
- bpo-21131: Fix faulthandler.register(chain=True) stack (GH-15276)
-
- faulthandler now allocates a dedicated stack of SIGSTKSZ*2 bytes,
- instead of just SIGSTKSZ bytes. Calling the previous signal handler
- in faulthandler signal handler uses more than SIGSTKSZ bytes of stack
- memory on some platforms.
-
-diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c
-index 1493f8d..6da354a 100644
---- a/Modules/faulthandler.c
-+++ b/Modules/faulthandler.c
-@@ -911,18 +911,15 @@ faulthandler_fatal_error_py(PyObject *self, PyObject *args)
- }
-
- #if defined(HAVE_SIGALTSTACK) && defined(HAVE_SIGACTION)
--#ifdef __INTEL_COMPILER
-- /* Issue #23654: Turn off ICC's tail call optimization for the
-- * stack_overflow generator. ICC turns the recursive tail call into
-- * a loop. */
--# pragma intel optimization_level 0
--#endif
- static
- Py_uintptr_t
- stack_overflow(Py_uintptr_t min_sp, Py_uintptr_t max_sp, size_t *depth)
- {
-- /* allocate 4096 bytes on the stack at each call */
-- unsigned char buffer[4096];
-+ /* Allocate (at least) 4096 bytes on the stack at each call.
-+
-+ bpo-23654, bpo-38965: use volatile keyword to prevent tail call
-+ optimization. */
-+ volatile unsigned char buffer[4096];
- Py_uintptr_t sp = (Py_uintptr_t)&buffer;
- *depth += 1;
- if (sp < min_sp || max_sp < sp)
-@@ -1112,7 +1109,11 @@ int _PyFaulthandler_Init(void)
- * be able to allocate memory on the stack, even on a stack overflow. If it
- * fails, ignore the error. */
- stack.ss_flags = 0;
-- stack.ss_size = SIGSTKSZ;
-+ /* bpo-21131: allocate dedicated stack of SIGSTKSZ*2 bytes, instead of just
-+ SIGSTKSZ bytes. Calling the previous signal handler in faulthandler
-+ signal handler uses more than SIGSTKSZ bytes of stack memory on some
-+ platforms. */
-+ stack.ss_size = SIGSTKSZ * 2;
- stack.ss_sp = PyMem_Malloc(stack.ss_size);
- if (stack.ss_sp != NULL) {
- err = sigaltstack(&stack, NULL);
diff --git a/05000-autotool-intermediates.patch b/05000-autotool-intermediates.patch
deleted file mode 100644
index 903cbf0..0000000
--- a/05000-autotool-intermediates.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-diff -up ./configure.autotool-intermediates ./configure
---- ./configure.autotool-intermediates 2013-04-09 14:52:49.831773426 +0200
-+++ ./configure 2013-04-09 14:52:53.204765347 +0200
-@@ -802,6 +802,8 @@ with_thread
- enable_ipv6
- with_doc_strings
- with_tsc
-+with_count_allocs
-+with_call_profile
- with_pymalloc
- with_valgrind
- with_systemtap
-@@ -1479,6 +1481,8 @@ Optional Packages:
- deprecated; use --with(out)-threads
- --with(out)-doc-strings disable/enable documentation strings
- --with(out)-tsc enable/disable timestamp counter profile
-+ --with(out)count-allocs enable/disable per-type instance accounting
-+ --with(out)-call-profile enable/disable statistics on function call invocation
- --with(out)-pymalloc disable/enable specialized mallocs
- --with-valgrind Enable Valgrind support
- --with(out)-systemtap disable/enable SystemTap support
-@@ -10117,6 +10121,50 @@ $as_echo "#define WITH_TSC 1" >>confdefs
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
- $as_echo "yes" >&6; }
-+else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-count-allocs"
>&5
-+$as_echo_n "checking for --with-count-allocs... " >&6; }
-+
-+# Check whether --with-count-allocs was given.
-+if test "${with_count_allocs+set}" = set; then :
-+ withval=$with_count_allocs;
-+if test "$withval" != no
-+then
-+
-+$as_echo "#define COUNT_ALLOCS 1" >>confdefs.h
-+
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-+$as_echo "yes" >&6; }
-+else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+else
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for --with-call-profile"
>&5
-+$as_echo_n "checking for --with-call-profile... " >&6; }
-+
-+# Check whether --with-call-profile was given.
-+if test "${with_call_profile+set}" = set; then :
-+ withval=$with_call_profile;
-+if test "$withval" != no
-+then
-+
-+$as_echo "#define CALL_PROFILE 1" >>confdefs.h
-+
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-+$as_echo "yes" >&6; }
- else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
- $as_echo "no" >&6; }
- fi
diff --git a/Python-3.1.1-rpath.patch b/Python-3.1.1-rpath.patch
deleted file mode 100644
index 1493af2..0000000
--- a/Python-3.1.1-rpath.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-diff -up Python-3.1.1/Lib/distutils/unixccompiler.py.rpath
Python-3.1.1/Lib/distutils/unixccompiler.py
---- Python-3.1.1/Lib/distutils/unixccompiler.py.rpath 2009-09-04 17:29:34.000000000
-0400
-+++ Python-3.1.1/Lib/distutils/unixccompiler.py 2009-09-04 17:49:54.000000000 -0400
-@@ -141,6 +141,16 @@ class UnixCCompiler(CCompiler):
- if sys.platform == "cygwin":
- exe_extension = ".exe"
-
-+ def _fix_lib_args(self, libraries, library_dirs, runtime_library_dirs):
-+ """Remove standard library path from rpath"""
-+ libraries, library_dirs, runtime_library_dirs = super(
-+ self.__class__, self)._fix_lib_args(libraries, library_dirs,
-+ runtime_library_dirs)
-+ libdir = sysconfig.get_config_var('LIBDIR')
-+ if runtime_library_dirs and (libdir in runtime_library_dirs):
-+ runtime_library_dirs.remove(libdir)
-+ return libraries, library_dirs, runtime_library_dirs
-+
- def preprocess(self, source, output_file=None, macros=None,
- include_dirs=None, extra_preargs=None, extra_postargs=None):
- fixed_args = self._fix_compile_args(None, macros, include_dirs)
diff --git a/check-pyc-and-pyo-timestamps.py b/check-pyc-and-pyo-timestamps.py
deleted file mode 100644
index 5fd11cc..0000000
--- a/check-pyc-and-pyo-timestamps.py
+++ /dev/null
@@ -1,50 +0,0 @@
-"""Checks if all *.pyc and *.pyo files have later mtime than their *.py
files."""
-
-import imp
-import os
-import sys
-
-# list of test and other files that we expect not to have bytecode
-not_compiled = [
- '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_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: imp.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/dead.package b/dead.package
new file mode 100644
index 0000000..1de3e4b
--- /dev/null
+++ b/dead.package
@@ -0,0 +1 @@
+https://fedoraproject.org/wiki/Changes/RetirePython34
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/macros.pybytecompile3.4 b/macros.pybytecompile3.4
deleted file mode 100644
index a8b79b2..0000000
--- a/macros.pybytecompile3.4
+++ /dev/null
@@ -1,12 +0,0 @@
-# Note that the path could itself be a python file, or a directory
-
-# Python's compile_all module only works on directories, and requires a max
-# recursion depth
-
-%py_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:]]' || :\
-%{nil}
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-arm-skip-failing-fragile-test.patch
b/python3-arm-skip-failing-fragile-test.patch
deleted file mode 100644
index 3c2fa09..0000000
--- a/python3-arm-skip-failing-fragile-test.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- Python-3.3.2/Lib/test/test_gdb.py.orig 2013-07-26 09:52:15.533852708 -0500
-+++ Python-3.3.2/Lib/test/test_gdb.py 2013-07-26 15:07:53.733623014 -0500
-@@ -729,8 +729,7 @@
- foo\(1, 2, 3\)
- ''')
-
-- @unittest.skipUnless(_thread,
-- "Python was compiled without thread support")
-+ @unittest.skip('Known failure on ARM:
https://bugzilla.redhat.com/show_bug.cgi?id=986713')
- def test_threads(self):
- 'Verify that "py-bt" indicates threads that are waiting for the
GIL'
- cmd = '''
diff --git a/python34.spec b/python34.spec
deleted file mode 100644
index d0eeaf4..0000000
--- a/python34.spec
+++ /dev/null
@@ -1,1390 +0,0 @@
-# ======================================================
-# Conditionals and other variables controlling the build
-# ======================================================
-
-%global pybasever 3.4
-
-# pybasever without the dot:
-%global pyshortver 34
-
-%global pylibdir %{_libdir}/python%{pybasever}
-%global dynload_dir %{pylibdir}/lib-dynload
-
-# SOABI is defined in the upstream configure.in from Python-3.2a2 onwards,
-# for PEP 3149:
-#
http://www.python.org/dev/peps/pep-3149/
-
-# ("configure.in" became "configure.ac" in Python 3.3 onwards, and
in
-# backports)
-
-# ABIFLAGS, LDVERSION and SOABI are in the upstream Makefile
-# With Python 3.3, we lose the "u" suffix due to PEP 393
-%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}
-%global SOABI_debug cpython-%{pyshortver}%{ABIFLAGS_debug}
-
-# All bytecode files are now in a __pycache__ subdirectory, with a name
-# reflecting the version of the bytecode (to permit sharing of python libraries
-# between different runtimes)
-# See
http://www.python.org/dev/peps/pep-3147/
-# For example,
-# foo/bar.py
-# now has bytecode at:
-# foo/__pycache__/bar.cpython-34.pyc
-# foo/__pycache__/bar.cpython-34.pyo
-%global bytecode_suffixes .cpython-34.py?
-
-# 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}
-
-%global with_debug_build 0
-
-%global with_gdb_hooks 1
-
-%global with_systemtap 1
-
-# some arches don't have valgrind so we need to disable its support on them
-%ifarch %{valgrind_arches}
-%global with_valgrind 1
-%else
-%global with_valgrind 0
-%endif
-
-%global with_gdbm 1
-
-# Change from yes to no to turn this off
-%global with_computed_gotos yes
-
-# Turn this to 0 to turn off the "check" phase:
-%global run_selftest_suite 1
-
-# 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
-
-# We need to get a newer configure generated out of configure.in for the following
-# patches:
-# patch 55 (systemtap)
-# patch 113 (more config flags)
-#
-# For patch 55 (systemtap), we need to get a new header for configure to use
-#
-# configure.in requires autoconf-2.65, but the version in Fedora is currently
-# autoconf-2.66
-#
-# For now, we'll generate a patch to the generated configure script and
-# pyconfig.h.in on a machine that has a local copy of autoconf 2.65
-#
-# Instructions on obtaining such a copy can be seen at
-#
http://bugs.python.org/issue7997
-#
-# To make it easy to regenerate the patch, this specfile can be run in two
-# ways:
-# (i) regenerate_autotooling_patch 0 : the normal approach: prep the
-# source tree using a pre-generated patch to the "configure" script, and do a
-# full build
-# (ii) regenerate_autotooling_patch 1 : intended to be run on a developer's
-# workstation: prep the source tree without patching configure, then rerun a
-# local copy of autoconf-2.65, regenerate the patch, then exit, without doing
-# the rest of the build
-%global regenerate_autotooling_patch 0
-
-
-# ==================
-# Top-level metadata
-# ==================
-Summary: Version 3.4 of the Python programming language
-Name: python%{pyshortver}
-%global general_version %{pybasever}.10
-#global prerel ...
-%global upstream_version %{general_version}%{?prerel}
-Version: %{general_version}%{?prerel:~%{prerel}}
-Release: 11%{?dist}
-License: Python
-
-# Whether to use RPM build wheels from the python-{pip,setuptools}-wheel package
-# Uses upstream bundled prebuilt wheels otherwise
-# Python 3.4 is not supported in pip 19.2+!
-%bcond_with rpmwheels
-
-# =======================
-# Build-time requirements
-# =======================
-
-# (keep this list alphabetized)
-
-BuildRequires: autoconf
-BuildRequires: bluez-libs-devel
-BuildRequires: bzip2
-BuildRequires: bzip2-devel
-
-# expat 2.1.0 added the symbol XML_SetHashSalt without bumping SONAME. We use
-# it (in pyexpat) in order to enable the fix in Python-3.2.3 for CVE-2012-0876:
-BuildRequires: expat-devel >= 2.1.0
-
-BuildRequires: findutils
-BuildRequires: gcc-c++
-%if %{with_gdbm}
-BuildRequires: gdbm-devel
-%endif
-BuildRequires: glibc-all-langpacks
-BuildRequires: glibc-devel
-BuildRequires: gmp-devel
-BuildRequires: libffi-devel
-BuildRequires: libGL-devel
-BuildRequires: libX11-devel
-BuildRequires: ncurses-devel
-# workaround
http://bugs.python.org/issue19804 (test_uuid requires ifconfig)
-BuildRequires: net-tools
-BuildRequires: openssl-devel
-BuildRequires: pkgconfig
-BuildRequires: readline-devel
-BuildRequires: sqlite-devel
-
-%if 0%{?with_systemtap}
-BuildRequires: systemtap-sdt-devel
-# (this introduces a dependency on "python", in that systemtap-sdt-devel's
-# /usr/bin/dtrace is a python 2 script)
-%global tapsetdir /usr/share/systemtap/tapset
-%endif # with_systemtap
-
-BuildRequires: tar
-BuildRequires: tcl-devel
-BuildRequires: tix-devel
-BuildRequires: tk-devel
-
-%if 0%{?with_valgrind}
-BuildRequires: valgrind-devel
-%endif
-
-BuildRequires: xz-devel
-BuildRequires: zlib-devel
-
-Requires: expat >= 2.1.0
-# Python 3 built with glibc >= 2.24.90-26 needs to require it (rhbz#1410644).
-Requires: glibc%{?_isa} >= 2.24.90-26
-BuildRequires: python-rpm-macros
-
-%if %{with rpmwheels}
-BuildRequires: python-setuptools-wheel
-BuildRequires: python-pip-wheel
-%endif
-
-# People might want to dnf install pythonX.Y instead of pythonXY
-Provides: python%{pybasever} = %{version}-%{release}
-
-# =======================
-# Source code and patches
-# =======================
-
-Source:
http://www.python.org/ftp/python/%{general_version}/Python-%{upstream_ver...
-
-# 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}
-
-# 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
-Source8: check-pyc-and-pyo-timestamps.py
-
-# Fixup distutils/unixccompiler.py to remove standard library path from rpath:
-# Was Patch0 in ivazquez' python3000 specfile:
-Patch1: Python-3.1.1-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
-
-Patch102: 00102-lib64.patch
-
-# 00104 #
-# Only used when "%{_lib}" == "lib64"
-# Another lib64 fix, for distutils/tests/test_install.py; not upstream:
-Patch104: 00104-lib64-fix-for-test_install.patch
-
-# 00111 #
-# Patch the Makefile.pre.in so that the generated Makefile doesn't try to build
-# a libpythonMAJOR.MINOR.a (bug 550692):
-# Downstream only: not appropriate for upstream
-Patch111: 00111-no-static-lib.patch
-
-# 00113 #
-# Add configure-time support for the COUNT_ALLOCS and CALL_PROFILE options
-# described at
http://svn.python.org/projects/python/trunk/Misc/SpecialBuilds.txt
-# so that if they are enabled, they will be in that build's pyconfig.h, so that
-# extension modules will reliably use them
-# Not yet sent upstream
-Patch113: 00113-more-configuration-flags.patch
-
-# 00125 #
-# COUNT_ALLOCS is useful for debugging, but the upstream behaviour of always
-# emitting debug info to stdout on exit is too verbose and makes it harder to
-# use the debug build. Add a "PYTHONDUMPCOUNTS" environment variable which
-# must be set to enable the output on exit
-# Not yet sent upstream
-Patch125: 00125-less-verbose-COUNT_ALLOCS.patch
-
-# 00131 #
-# The four tests in test_io built on top of check_interrupted_write_retry
-# fail when built in Koji, for ppc and ppc64; for some reason, the SIGALRM
-# handlers are never called, and the call to write runs to completion
-# (rhbz#732998)
-Patch131: 00131-disable-tests-in-test_io.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
-
-# 00134 #
-# Fix a failure in test_sys.py when configured with COUNT_ALLOCS enabled
-# Not yet sent upstream
-Patch134: 00134-fix-COUNT_ALLOCS-failure-in-test_sys.patch
-
-# 00135 #
-# test_weakref's test_callback_in_cycle_resurrection doesn't work with
-# COUNT_ALLOCS, as the metrics keep "C" alive. Work around this for our
-# debug build:
-# Not yet sent upstream
-Patch135: 00135-fix-test-within-test_weakref-in-debug-build.patch
-
-# 00137 #
-# Some tests within distutils fail when run in an rpmbuild:
-Patch137: 00137-skip-distutils-tests-that-fail-in-rpmbuild.patch
-
-# 00139 #
-# ARM-specific: skip known failure in test_float:
-#
http://bugs.python.org/issue8265 (rhbz#706253)
-Patch139: 00139-skip-test_float-known-failure-on-arm.patch
-
-# ideally short lived patch disabling a test thats fragile on different arches
-Patch140: python3-arm-skip-failing-fragile-test.patch
-
-# 00141 #
-# Fix tests for case when tests for case when configured with
-# COUNT_ALLOCS (debug build):
http://bugs.python.org/issue19527
-# Applies to: test_gc, test_module, test_io, test_logging, test_warnings,
-# test_threading
-Patch141: 00141-fix-tests_with_COUNT_ALLOCS.patch
-
-# 00143 #
-# Fix the --with-tsc option on ppc64, and rework it on 32-bit ppc to avoid
-# aliasing violations (rhbz#698726)
-# Sent upstream as
http://bugs.python.org/issue12872
-Patch143: 00143-tsc-on-ppc.patch
-
-# 00146 #
-# Support OpenSSL FIPS mode (e.g. when OPENSSL_FORCE_FIPS_MODE=1 is set)
-# - handle failures from OpenSSL (e.g. on attempts to use MD5 in a
-# FIPS-enforcing environment)
-# - add a new "usedforsecurity" keyword argument to the various digest
-# algorithms in hashlib so that you can whitelist a callsite with
-# "usedforsecurity=False"
-# (sent upstream for python 3 as
http://bugs.python.org/issue9216 ; see RHEL6
-# python patch 119)
-# - enforce usage of the _hashlib implementation: don't fall back to the _md5
-# and _sha* modules (leading to clearer error messages if fips selftests
-# fail)
-# - don't build the _md5 and _sha* modules; rely on the _hashlib implementation
-# of hashlib
-# (rhbz#563986)
-# Note: Up to Python 3.4.0.b1, upstream had their own implementation of what
-# they assumed would become sha3. This patch was adapted to give it the
-# usedforsecurity argument, even though it did nothing (OpenSSL didn't have
-# sha3 implementation at that time).In 3.4.0.b2, sha3 implementation was reverted
-# (see
http://bugs.python.org/issue16113), but the alterations were left in the
-# patch, since they may be useful again if upstream decides to rerevert sha3
-# implementation and OpenSSL still doesn't support it. For now, they're
harmless.
-Patch146: 00146-hashlib-fips.patch
-
-# 00150 #
-# temporarily disable rAssertAlmostEqual in test_cmath on PPC (bz #750811)
-# caused by a glibc bug. This patch can be removed when we have a glibc with
-# the patch mentioned here:
-#
http://sourceware.org/bugzilla/show_bug.cgi?id=13472
-Patch150: 00150-disable-rAssertAlmostEqual-cmath-on-ppc.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 (rhbz#814391)
-Patch155: 00155-avoid-ctypes-thunks.patch
-
-# 00157 #
-# Update uid/gid handling throughout the standard library: uid_t and gid_t are
-# unsigned 32-bit values, but existing code often passed them through C long
-# values, which are signed 32-bit values on 32-bit architectures, leading to
-# negative int objects for uid/gid values >= 2^31 on 32-bit architectures.
-#
-# Introduce _PyObject_FromUid/Gid to convert uid_t/gid_t values to python
-# objects, using int objects where the value will fit (long objects otherwise),
-# and _PyArg_ParseUid/Gid to convert int/long to uid_t/gid_t, with -1 allowed
-# as a special case (since this is given special meaning by the chown syscall)
-#
-# Update standard library to use this throughout for uid/gid values, so that
-# very large uid/gid values are round-trippable, and -1 remains usable.
-# (rhbz#697470)
-Patch157: 00157-uid-gid-overflows.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
-
-# 0164 #
-# some tests in test._io interrupted_write-* fail on PPC (rhbz#846849)
-# testChainingDescriptors test in test_exceptions fails on PPc, too (rhbz#846849)
-# disable those tests so that rebuilds on PPC can continue
-Patch164: 00164-disable-interrupted_write-tests-on-ppc.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)
-# Backported to 2.7 from a patch I sent upstream for py3k
-#
http://bugs.python.org/issue9263 (rhbz#614680)
-# hiding the proposed new macros/functions within gcmodule.c to avoid exposing
-# them within the extension API.
-# (rhbz#850013
-Patch170: 00170-gc-assertions.patch
-
-# 00173 #
-# Workaround for ENOPROTOOPT seen in Koji withi test.support.bind_port()
-# (rhbz#913732)
-Patch173: 00173-workaround-ENOPROTOOPT-in-bind_port.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
-
-# 00179 #
-# Workaround for
https://bugzilla.redhat.com/show_bug.cgi?id=951802
-# Reported upstream in
http://bugs.python.org/issue17737
-# This patch basically looks at every frame and if it is somehow corrupted,
-# it just stops printing the traceback - it doesn't fix the actual bug.
-# This bug seems to only affect ARM.
-# Doesn't seem to affect Python 2 AFAICS.
-Patch179: 00179-dont-raise-error-on-gdb-corrupted-frames-in-backtrace.patch
-
-# 00180 #
-# Enable building on ppc64p7
-# Not appropriate for upstream, Fedora-specific naming
-Patch180: 00180-python-add-support-for-ppc64p7.patch
-
-# 00184 #
-# Fix for
https://bugzilla.redhat.com/show_bug.cgi?id=979696
-# Fixes build of ctypes against libffi with multilib wrapper
-# Python recognizes ffi.h only if it contains "#define LIBFFI_H",
-# but the wrapper doesn't contain that, which makes the build fail
-# We patch this by also accepting "#define ffi_wrapper_h"
-Patch184: 00184-ctypes-should-build-with-libffi-multilib-wrapper.patch
-
-# 00186 #
-# Fix for
https://bugzilla.redhat.com/show_bug.cgi?id=1023607
-# Previously, this fixed a problem where some *.py files were not being
-# bytecompiled properly during build. This was result of py_compile.compile
-# raising exception when trying to convert test file with bad encoding, and
-# thus not continuing bytecompilation for other files.
-# This was fixed upstream, but the test hasn't been merged yet, so we keep it
-Patch186: 00186-dont-raise-from-py_compile.patch
-
-# 00188 #
-# Downstream only patch that should be removed when we compile all guaranteed
-# hashlib algorithms properly. The problem is this:
-# - during tests, test_hashlib is imported and executed before test_lib2to3
-# - if at least one hash function has failed, trying to import it triggers an
-# exception that is being caught and exception is logged:
-#
http://hg.python.org/cpython/file/2de806c8b070/Lib/hashlib.py#l217
-# - logging the exception makes logging module run basicConfig
-# - when lib2to3 tests are run again, lib2to3 runs basicConfig again, which
-# doesn't do anything, because it was run previously
-# (logging.root.handlers != []), which means that the default setup
-# (most importantly logging level) is not overriden. That means that a test
-# relying on this will fail (test_filename_changing_on_output_single_dir)
-Patch188: 00188-fix-lib2to3-tests-when-hashlib-doesnt-compile-properly.patch
-
-# 00189 #
-# Instead of bundled wheels, use our RPM packaged wheels from
-# /usr/share/python-wheels
-Patch189: 00189-use-rpm-wheels.patch
-
-# Tests requiring SIGHUP to work don't work in Koji
-# see rhbz#1088233
-Patch194: temporarily-disable-tests-requiring-SIGHUP.patch
-
-# 00196
-#
-# Fix test_gdb failure on ppc64le
-Patch196: 00196-test-gdb-match-addr-before-builtin.patch
-
-# 00200 #
-# Fix for gettext plural form headers (lines that begin with "#")
-# Note: Backported from scl
-Patch200: 00200-gettext-plural-fix.patch
-
-# 00201 #
-# Fixes memory leak in gdbm module (rhbz#977308)
-# This was upstreamed as a part of bigger patch, but for our purposes
-# this is ok:
http://bugs.python.org/issue18404
-# Note: Backported from scl
-Patch201: 00201-fix-memory-leak-in-gdbm.patch
-
-# test_threading fails in koji dues to it's handling of signals
-Patch203: 00203-disable-threading-test-koji.patch
-
-# 00250 #
-# After glibc-2.24.90, Python 3 failed to start on EL7 kernel
-# rhbz#1410175:
https://bugzilla.redhat.com/show_bug.cgi?id=1410175
-#
http://bugs.python.org/issue29157
-# Using the patch for python 2 as it is closer to the logic used
-# for random.c in Python 3.4
-#
https://hg.python.org/cpython/rev/13a39142c047
-Patch250: 00250-getentropy.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
-
-# 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
-
-# 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
-
-# 00320 #
-# Security fix for CVE-2019-10160: Information Disclosure due to urlsplit improper NFKC
normalization
-# Fixed upstream for later branches:
https://bugs.python.org/issue36742
-# Resolves:
https://bugzilla.redhat.com/show_bug.cgi?id=1718867
-Patch320: 00320-CVE-2019-10160.patch
-
-# 00321 #
-# OpenSSL 1.1.1 support for Python 3.4
-#
https://bugzilla.redhat.com/show_bug.cgi?id=1685612
-# Rejected upstream
https://github.com/python/cpython/pull/12211
-# and Python 3.4 reached end-of-life.
-Patch321: 00321-python34-openssl-1.1.1.patch
-
-# 00322 #
-# Skip test_ssl and test_asyncio tests failing with OpenSSL 1.1.1
-#
https://bugzilla.redhat.com/show_bug.cgi?id=1685609
-Patch322: 00322-test_ssl-skip-openssl111.patch
-
-# 00332 #
-# Fix CVE-2019-16056: Don't parse email addresses containing
-# multiple '@' characters.
-# Fixed upstream and backported from the 3.5 branch:
-#
https://bugs.python.org/issue34155
-# Resolves:
https://bugzilla.redhat.com/show_bug.cgi?id=1750457
-Patch332: 00332-CVE-2019-16056.patch
-
-# 00343 #
-# bpo-38965: Fix faulthandler._stack_overflow() on GCC 10
-# Fixed upstream and backported from the 3.7 branch:
-#
https://bugs.python.org/issue38965
-#
https://github.com/python/cpython/commit/f4a21d3b239bf4f4e4e2a8a5936b9b04...
-Patch343: 00343-faulthandler-gcc10.patch
-
-# (New patches go here ^^^)
-#
-# When adding new patches to "python" and "python3" in Fedora 17
onwards,
-# please try to keep the patch numbers in-sync between the two specfiles:
-#
-# - use the same patch number across both specfiles for conceptually-equivalent
-# fixes, ideally with the same name
-#
-# - when a patch is relevant to both specfiles, use the same introductory
-# comment in both specfiles where possible (to improve "diff" output when
-# comparing them)
-#
-# - when a patch is only relevant for one of the two specfiles, leave a gap
-# in the patch numbering in the other specfile, adding a comment when
-# omitting a patch, both in the manifest section here, and in the "prep"
-# phase below
-#
-# Hopefully this will make it easier to ensure that all relevant fixes are
-# applied to both versions.
-
-# This is the generated patch to "configure"; see the description of
-# %{regenerate_autotooling_patch}
-# above:
-Patch5000: 05000-autotool-intermediates.patch
-
-
-# ======================================================
-# Additional metadata, and subpackages
-# ======================================================
-
-URL:
http://www.python.org/
-
-# We don't want to provide this
-# No package in Fedora shall ever depend on 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(python3dist(setuptools)) = 28.8.0
-Provides: bundled(python3dist(packaging)) = 16.7
-Provides: bundled(python3dist(pyparsing)) = 2.1.10
-Provides: bundled(python3dist(six)) = 1.10.0
-Provides: bundled(python3dist(appdirs)) = 1.4.0
-
-Provides: bundled(python3dist(pip)) = 9.0.1
-Provides: bundled(python3dist(appdirs)) = 1.4.0
-Provides: bundled(python3dist(distlib)) = 0.2.4
-Provides: bundled(python3dist(distro)) = 1.0.1
-Provides: bundled(python3dist(html5lib)) = 1.0~b10
-Provides: bundled(python3dist(six)) = 1.10.0
-Provides: bundled(python3dist(colorama)) = 0.3.7
-Provides: bundled(python3dist(requests)) = 2.11.1
-Provides: bundled(python3dist(CacheControl)) = 0.11.7
-Provides: bundled(python3dist(lockfile)) = 0.12.2
-Provides: bundled(python3dist(progress)) = 1.2
-Provides: bundled(python3dist(packaging)) = 16.8
-Provides: bundled(python3dist(pyparsing)) = 2.1.10
-Provides: bundled(python3dist(retrying)) = 1.3.3
-Provides: bundled(python3dist(webencodings)) = 0.5
-%endif
-
-%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.
-
-
-# ======================================================
-# The prep phase of the build:
-# ======================================================
-
-%prep
-%setup -q -n Python-%{upstream_version}
-
-%if 0%{?with_systemtap}
-# Provide an example of usage of the tapset:
-cp -a %{SOURCE6} .
-cp -a %{SOURCE7} .
-%endif # with_systemtap
-
-# Ensure that we're using the system copy of various libraries, rather than
-# copies shipped by upstream in the tarball:
-# Remove embedded copy of expat:
-rm -r Modules/expat || exit 1
-
-# Remove embedded copy of libffi:
-for SUBDIR in darwin libffi libffi_arm_wince libffi_msvc libffi_osx ; do
- rm -r Modules/_ctypes/$SUBDIR || exit 1 ;
-done
-
-# Remove embedded copy of zlib:
-rm -r Modules/zlib || exit 1
-
-# Don't build upstream Python's implementation of these crypto algorithms;
-# instead rely on _hashlib and OpenSSL.
-#
-# For example, in our builds hashlib.md5 is implemented within _hashlib via
-# OpenSSL (and thus respects FIPS mode), and does not fall back to _md5
-# TODO: there seems to be no OpenSSL support in Python for sha3 so far
-# when it is there, also remove _sha3/ dir
-for f in md5module.c sha1module.c sha256module.c sha512module.c; do
- rm Modules/$f
-done
-
-#
-# Apply patches:
-#
-%patch1 -p1
-# 3: upstream as of Python 3.3.1
-
-%if 0%{?with_systemtap}
-%patch55 -p1 -b .systemtap
-%endif
-
-%if "%{_lib}" == "lib64"
-%patch102 -p1
-%patch104 -p1
-%endif
-
-
-%patch111 -p1
-%patch113 -p1
-
-%patch125 -p1 -b .less-verbose-COUNT_ALLOCS
-
-%ifarch ppc %{power64}
-%patch131 -p1
-%endif
-
-%patch132 -p1
-%patch134 -p1
-%patch135 -p1
-%patch137 -p1
-
-%ifarch %{arm}
-%patch139 -p1
-%patch140 -p1
-%endif
-
-%patch141 -p1
-%patch143 -p1 -b .tsc-on-ppc
-%patch146 -p1
-
-%ifarch ppc %{power64}
-%patch150 -p1
-%endif
-
-%patch155 -p1
-%patch157 -p1
-%patch160 -p1
-%patch163 -p1
-
-%ifarch ppc %{power64}
-%patch164 -p1
-%endif
-
-%patch173 -p1
-%patch178 -p1
-%patch179 -p1
-%patch180 -p1
-%patch184 -p1
-%patch186 -p1
-%patch188 -p1
-
-%if %{with rpmwheels}
-%patch189 -p1
-rm Lib/ensurepip/_bundled/*.whl
-rmdir Lib/ensurepip/_bundled
-%endif
-
-%patch194 -p1
-%patch196 -p1
-%patch203 -p1
-%patch250 -p1
-%patch273 -p1
-%patch290 -p1
-%patch315 -p1
-%patch320 -p1
-%patch321 -p1
-%patch322 -p1
-%patch332 -p1
-%patch343 -p1
-
-# Currently (2010-01-15),
http://docs.python.org/library is for 2.6, and there
-# are many differences between 2.6 and the Python 3 library.
-#
-# Fix up the URLs within pydoc to point at the documentation for this
-# MAJOR.MINOR version:
-#
-sed --in-place \
-
--expression="s|http://docs.python.org/library|http://docs.python.org/%{pybasever}/library|g"
\
- Lib/pydoc.py || exit 1
-
-%if ! 0%{regenerate_autotooling_patch}
-# Normally we apply the patch to "configure"
-# We don't apply the patch if we're working towards regenerating it
-%patch5000 -p0 -b .autotool-intermediates
-%endif
-
-# ======================================================
-# Configuring and building the code:
-# ======================================================
-
-%build
-topdir=$(pwd)
-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 `pkg-config --libs-only-L openssl`"
-
-%if 0%{regenerate_autotooling_patch}
-# If enabled, this code regenerates the patch to "configure", using a
-# local copy of autoconf-2.65, then exits the build
-#
-# The following assumes that the copy is installed to ~/autoconf-2.65/bin
-# as per these instructions:
-#
http://bugs.python.org/issue7997
-
-for f in pyconfig.h.in configure ; do
- cp $f $f.autotool-intermediates ;
-done
-
-# Rerun the autotools:
-autoreconf
-
-# Regenerate the patch:
-gendiff . .autotool-intermediates > %{PATCH5000}
-
-
-# Exit the build
-exit 1
-%endif
-
-# Define a function, for how to perform a "build" of python for a given
-# configuration:
-BuildPython() {
- ConfName=$1
- BinaryName=$2
- SymlinkName=$3
- ExtraConfigArgs=$4
- PathFixWithThisBinary=$5
- MoreCFlags=$6
-
- ConfDir=build/$ConfName
-
- echo STARTING: BUILD OF PYTHON FOR CONFIGURATION: $ConfName - %{_bindir}/$BinaryName
- mkdir -p $ConfDir
-
- pushd $ConfDir
-
- # Use the freshly created "configure" script, but in the directory two
above:
- %global _configure $topdir/configure
-
-%configure \
- --enable-ipv6 \
- --enable-shared \
- --with-computed-gotos=%{with_computed_gotos} \
- --with-dbmliborder=gdbm:ndbm:bdb \
- --with-system-expat \
- --with-system-ffi \
- --enable-loadable-sqlite-extensions \
-%if 0%{?with_systemtap}
- --with-systemtap \
-%endif
-%if 0%{?with_valgrind}
- --with-valgrind \
-%endif
- $ExtraConfigArgs \
- %{nil}
-
- # Set EXTRA_CFLAGS to our CFLAGS (rather than overriding OPT, as we've done
- # in the past).
- # This should fix a problem with --with-valgrind where it adds
- # -DDYNAMIC_ANNOTATIONS_ENABLED=1
- # to OPT which must be passed to all compilation units in the build,
- # otherwise leading to linker errors, e.g.
- # missing symbol AnnotateRWLockDestroy
- #
- # Invoke the build:
- make EXTRA_CFLAGS="$CFLAGS $MoreCFlags" %{?_smp_mflags}
-
- popd
- echo FINISHED: BUILD OF PYTHON FOR CONFIGURATION: $ConfDir
-}
-
-# Use "BuildPython" to support building with different configurations:
-
-%if 0%{?with_debug_build}
-BuildPython debug \
- python-debug \
- python%{pybasever}-debug \
-%ifarch %{ix86} x86_64 ppc %{power64}
- "--with-pydebug --with-tsc --with-count-allocs --with-call-profile
--without-ensurepip" \
-%else
- "--with-pydebug --with-count-allocs --with-call-profile --without-ensurepip"
\
-%endif
- false \
- -O0
-%endif # with_debug_build
-
-BuildPython optimized \
- python \
- python%{pybasever} \
- "--without-ensurepip" \
- true
-
-# ======================================================
-# Installing the built code:
-# ======================================================
-
-%install
-topdir=$(pwd)
-rm -fr %{buildroot}
-mkdir -p %{buildroot}%{_prefix} %{buildroot}%{_mandir}
-
-InstallPython() {
-
- ConfName=$1
- PyInstSoName=$2
- MoreCFlags=$3
-
- ConfDir=build/$ConfName
-
- echo STARTING: INSTALL OF PYTHON FOR CONFIGURATION: $ConfName
- mkdir -p $ConfDir
-
- pushd $ConfDir
-
-make install DESTDIR=%{buildroot} INSTALL="install -p"
EXTRA_CFLAGS="$MoreCFlags"
-
- popd
-
- # 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, in this case Python 2.7)
- #
- # gdb-archer looks for them in the same path as the ELF file, with a -gdb.py suffix.
- # We put them in the debuginfo package by installing them to e.g.:
- # /usr/lib/debug/usr/lib/libpython3.2.so.1.0.debug-gdb.py
- #
- # See
https://fedoraproject.org/wiki/Features/EasierPythonDebugging for more
- # information
- #
- # Copy up the gdb hooks into place; the python file will be autoloaded by gdb
- # when visiting libpython.so, provided that the python file is installed to the
- # same path as the library (or its .debug file) plus a "-gdb.py" suffix,
e.g:
- # /usr/lib/debug/usr/lib64/libpython3.2.so.1.0.debug-gdb.py
- # (note that the debug path is /usr/lib/debug for both 32/64 bit)
- #
- # Initially I tried:
- # /usr/lib/libpython3.1.so.1.0-gdb.py
- # but doing so generated noise when ldconfig was rerun (rhbz:562980)
- #
-%if 0%{?with_gdb_hooks}
- DirHoldingGdbPy=%{_prefix}/lib/debug/%{_libdir}
- PathOfGdbPy=$DirHoldingGdbPy/$PyInstSoName.debug-gdb.py
-
- mkdir -p %{buildroot}$DirHoldingGdbPy
- cp Tools/gdb/libpython.py %{buildroot}$PathOfGdbPy
-%endif # with_gdb_hooks
-
- echo FINISHED: INSTALL OF PYTHON FOR CONFIGURATION: $ConfName
-}
-
-# Use "InstallPython" to support building with different configurations:
-
-# Install the "debug" build first, so that we can move some files aside
-%if 0%{?with_debug_build}
-InstallPython debug \
- %{py_INSTSONAME_debug} \
- -O0
-%endif # with_debug_build
-
-# Now the optimized build:
-InstallPython optimized \
- %{py_INSTSONAME_optimized}
-
-install -d -m 0755 ${RPM_BUILD_ROOT}%{pylibdir}/site-packages/__pycache__
-
-# Documentation tools
-install -m755 -d %{buildroot}%{pylibdir}/Doc
-cp -ar Doc/tools %{buildroot}%{pylibdir}/Doc/
-
-# Fix for bug #136654
-rm -f %{buildroot}%{pylibdir}/email/test/data/audiotest.au
%{buildroot}%{pylibdir}/test/audiotest.au
-
-%if "%{_lib}" == "lib64"
-install -d -m 0755
%{buildroot}/%{_prefix}/lib/python%{pybasever}/site-packages/__pycache__
-%endif
-
-# Make python3-devel multilib-ready (bug #192747, #139911)
-%global _pyconfig32_h pyconfig-32.h
-%global _pyconfig64_h pyconfig-64.h
-
-%ifarch %{power64} s390x x86_64 ia64 alpha sparc64 aarch64
-%global _pyconfig_h %{_pyconfig64_h}
-%else
-%global _pyconfig_h %{_pyconfig32_h}
-%endif
-
-# ABIFLAGS, LDVERSION and SOABI are in the upstream Makefile
-%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}
-%global SOABI_debug cpython-%{pyshortver}%{ABIFLAGS_debug}
-
-%if 0%{?with_debug_build}
-%global PyIncludeDirs python%{LDVERSION_optimized} python%{LDVERSION_debug}
-
-%else
-%global PyIncludeDirs python%{LDVERSION_optimized}
-%endif
-
-for PyIncludeDir in %{PyIncludeDirs} ; do
- mv %{buildroot}%{_includedir}/$PyIncludeDir/pyconfig.h \
- %{buildroot}%{_includedir}/$PyIncludeDir/%{_pyconfig_h}
- cat > %{buildroot}%{_includedir}/$PyIncludeDir/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
-done
-
-# Fix for bug 201434: make sure distutils looks at the right pyconfig.h file
-# 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 (bug 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
-
-# Switch all shebangs to refer to the specific Python version.
-LD_LIBRARY_PATH=./build/optimized ./build/optimized/python \
- Tools/scripts/pathfix.py \
- -i "%{_bindir}/python%{pybasever}" -p \
- %{buildroot} \
- %{?with_gdb_hooks:%{buildroot}$DirHoldingGdbPy/*.py}
-
-# 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 {} \; \) \)
-
-# Remove tests for tools, we don't ship those
-rm -rf %{buildroot}%{pylibdir}/test/test_tools
-
-# .xpm and .xbm files should not be executable:
-find %{buildroot} \
- \( -name \*.xbm -o -name \*.xpm -o -name \*.xpm.1 \) \
- -exec chmod a-x {} \;
-
-# Remove executable flag from files that shouldn't have it:
-chmod a-x \
- %{buildroot}%{pylibdir}/distutils/tests/Setup.sample
-
-# 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 {} \;
-# Junk, no point in putting in -test sub-pkg
-rm -f ${RPM_BUILD_ROOT}/%{pylibdir}/idlelib/testcode.py*
-
-# Get rid of stray patch file from buildroot:
-rm -f %{buildroot}%{pylibdir}/test/test_imp.py.apply-our-changes-to-expected-shebang #
from patch 4
-
-# Fix end-of-line encodings:
-find %{buildroot}/ -name \*.py -exec sed -i 's/\r//' {} \;
-
-# Fix an encoding:
-iconv -f iso8859-1 -t utf-8 %{buildroot}/%{pylibdir}/Demo/rpc/README > README.conv
&& mv -f README.conv %{buildroot}/%{pylibdir}/Demo/rpc/README
-
-# Note that
-# %{pylibdir}/Demo/distutils/test2to3/setup.py
-# is in iso-8859-1 encoding, and that this is deliberate; this is test data
-# for the 2to3 tool, and one of the functions of the 2to3 tool is to fixup
-# character encodings within python source code
-
-# Do bytecompilation with the newly installed interpreter.
-# This is similar to the script in macros.pybytecompile
-# compile *.pyo
-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]) for f in
sys.argv[1:]]' || :
-# 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=0) for f
in sys.argv[1:]]' || :
-
-# Fixup permissions for shared libraries from non-standard 555 to standard 755:
-find %{buildroot} \
- -perm 555 -exec chmod 755 {} \;
-
-# Install macros for rpm:
-mkdir -p %{buildroot}/%{_rpmconfigdir}/macros.d/
-install -m 644 %{SOURCE3} %{buildroot}/%{_rpmconfigdir}/macros.d/
-
-# Ensure that the curses module was linked against libncursesw.so, rather than
-# libncurses.so (bug 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
-
-#
-# Systemtap hooks:
-#
-%if 0%{?with_systemtap}
-# Install a tapset for this libpython into tapsetdir, fixing up the path to the
-# library:
-mkdir -p %{buildroot}%{tapsetdir}
-%ifarch %{power64} s390x x86_64 ia64 alpha sparc64 aarch64
-%global libpython_stp_optimized libpython%{pybasever}-64.stp
-%global libpython_stp_debug libpython%{pybasever}-debug-64.stp
-%else
-%global libpython_stp_optimized libpython%{pybasever}-32.stp
-%global libpython_stp_debug libpython%{pybasever}-debug-32.stp
-%endif
-
-sed \
- -e "s|LIBRARY_PATH|%{_libdir}/%{py_INSTSONAME_optimized}|" \
- %{_sourcedir}/libpython.stp \
- > %{buildroot}%{tapsetdir}/%{libpython_stp_optimized}
-
-%if 0%{?with_debug_build}
-# In Python 3, python3 and python3-debug don't point to the same binary,
-# so we have to replace "python3" with "python3-debug" to get
systemtap
-# working with debug build
-sed \
- -e "s|LIBRARY_PATH|%{_libdir}/%{py_INSTSONAME_debug}|" \
- -e 's|"python3"|"python3-debug"|' \
- %{_sourcedir}/libpython.stp \
- > %{buildroot}%{tapsetdir}/%{libpython_stp_debug}
-%endif # with_debug_build
-
-%endif # with_systemtap
-
-# Rename the script that differs on different arches to arch specific name
-mv %{buildroot}%{_bindir}/python%{LDVERSION_optimized}-{,`uname -m`-}config
-echo -e '#!/bin/sh\nexec `dirname $0`/python%{LDVERSION_optimized}-`uname -m`-config
"$@"' > \
- %{buildroot}%{_bindir}/python%{LDVERSION_optimized}-config
-echo '[ $? -eq 127 ] && echo "Could not find
python%{LDVERSION_optimized}-`uname -m`-config. Look around to see available arches."
>&2' >> \
- %{buildroot}%{_bindir}/python%{LDVERSION_optimized}-config
- chmod +x %{buildroot}%{_bindir}/python%{LDVERSION_optimized}-config
-
-# Remove stuff that would conflict with python3 package
-mv %{buildroot}%{_bindir}/python{3,%{pyshortver}}
-rm %{buildroot}%{_bindir}/*3 # also matches 2to3
-rm %{buildroot}%{_bindir}/python3-*
-rm %{buildroot}%{_bindir}/pyvenv
-rm %{buildroot}%{_libdir}/libpython3.so
-rm %{buildroot}%{_mandir}/man1/python3.1*
-rm %{buildroot}%{_libdir}/pkgconfig/python3.pc
-
-# ======================================================
-# Running the upstream test suite
-# ======================================================
-
-%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}
-
-
-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
- # test_buffer fails with Decimal on ppc64le,
- # see
https://bugzilla.redhat.com/show_bug.cgi?id=1544833
- # test_with_pip doesn't work with new pip on 3.4, there is deprecation warning
- WITHIN_PYTHON_RPM_BUILD= \
- LD_LIBRARY_PATH=$ConfDir $ConfDir/python -m test.regrtest \
- --verbose --findleaks \
- -x test_distutils \
- %ifarch ppc64le aarch64
- -x test_faulthandler \
- %endif
- %ifarch %{power64} s390 s390x armv7hl aarch64
- -x test_gdb \
- %endif
- -x test_venv \
-
- echo FINISHED: CHECKING OF PYTHON FOR CONFIGURATION: $ConfName
-
-}
-
-%if 0%{run_selftest_suite}
-
-# Check each of the configurations:
-%if 0%{?with_debug_build}
-CheckPython debug
-%endif # with_debug_build
-CheckPython optimized
-
-%endif # run_selftest_suite
-
-
-%files
-%doc README
-%doc Misc/README.valgrind Misc/valgrind-python.supp Misc/gdbinit
-%license %{pylibdir}/LICENSE.txt
-
-%{_bindir}/pydoc%{pybasever}
-%{_bindir}/python%{pybasever}
-%{_bindir}/python%{pyshortver}
-%{_bindir}/python%{pybasever}m
-%{_bindir}/pyvenv-%{pybasever}
-%{_mandir}/*/*
-
-%{pylibdir}/
-
-%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
-
-%{_libdir}/%{py_INSTSONAME_optimized}
-%if 0%{?with_systemtap}
-%dir %(dirname %{tapsetdir})
-%dir %{tapsetdir}
-%{tapsetdir}/%{libpython_stp_optimized}
-%doc systemtap-example.stp pyfuntop.stp
-%endif
-
-%{_includedir}/python%{LDVERSION_optimized}/
-
-%{_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
-%exclude %{_rpmconfigdir}/macros.d/macros.pybytecompile%{pybasever}
-
-%{_bindir}/2to3-%{pybasever}
-%{_bindir}/idle%{pybasever}
-
-#
https://bugzilla.redhat.com/show_bug.cgi?id=1476593
-%exclude
/usr/lib/debug%{_libdir}/__pycache__/libpython%{pybasever}m.so.1.0.debug-gdb.cpython-%{pyshortver}.py*
-%exclude /usr/lib/debug%{_libdir}/libpython%{pybasever}m.so.1.0.debug-gdb.py
-
-%if 0%{?with_debug_build}
-%{_bindir}/python%{LDVERSION_debug}
-
-%{_libdir}/%{py_INSTSONAME_debug}
-%if 0%{?with_systemtap}
-%{tapsetdir}/%{libpython_stp_debug}
-%endif
-
-%{_includedir}/python%{LDVERSION_debug}
-%{_bindir}/python%{LDVERSION_debug}-config
-%{_libdir}/libpython%{LDVERSION_debug}.so
-%{_libdir}/libpython%{LDVERSION_debug}.so.1.0
-%{_libdir}/pkgconfig/python-%{LDVERSION_debug}.pc
-
-%endif # with_debug_build
-
-
-# ======================================================
-# Finally, the changelog:
-# ======================================================
-
-%changelog
-* Wed Jul 29 2020 Fedora Release Engineering <releng(a)fedoraproject.org> -
3.4.10-11
-- Rebuilt for
https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
-
-* Mon Mar 30 2020 Tomas Hrnciar <thrnciar(a)redhat.com> - 3.4.10-10
-- Add missing provides for packages bundled in bundled pip/setuptools (rhbz#1775574)
-
-* Thu Feb 13 2020 Victor Stinner <vstinner(a)python.org> - 3.4.10-9
-- Fix test_faulthandler for GCC 10 (rhbz#1799090)
-- Fix also faulthandler.register(chain=True) stack.
-
-* Thu Jan 30 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.4.10-8
-- Rebuilt for
https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
-
-* Mon Sep 09 2019 Charalampos Stratakis <cstratak(a)redhat.com> - 3.4.10-7
-- Fix CVE-2019-16056 (rhbz#1750457)
-
-* Thu Sep 05 2019 Charalampos Stratakis <cstratak(a)redhat.com> - 3.4.10-6
-- Fix CVE-2019-10160 (rhbz#1718867)
-
-* Wed Aug 28 2019 Miro Hrončok <mhroncok(a)redhat.com> - 3.4.10-5
-- Use bundled wheels, prepare for pip 19.2+
-
-* Sat Aug 10 2019 Miro Hrončok <mhroncok(a)redhat.com> - 3.4.10-4
-- Build against OpenSSL 1.1.x, not 1.0.x
-
-* Wed Jul 31 2019 Victor Stinner <vstinner(a)redhat.com> - 3.4.10-3
-- Add OpenSSL 1.1.1 support (rhbz#1685612)
-
-* Fri Jul 26 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.4.10-2
-- Rebuilt for
https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
-
-* Tue Mar 19 2019 Miro Hrončok <mhroncok(a)redhat.com> - 3.4.10-1
-- Update to 3.4.10
-
-* Tue Mar 05 2019 Miro Hrončok <mhroncok(a)redhat.com> - 3.4.10~rc1-1
-- Update to 3.4.10rc1
-
-* Sun Feb 17 2019 Igor Gnatenko <ignatenkobrain(a)fedoraproject.org> - 3.4.9-8
-- Rebuild for readline 8.0
-
-* Sat Feb 02 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.4.9-7
-- Rebuilt for
https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
-
-* Mon Jan 14 2019 Björn Esser <besser82(a)fedoraproject.org> - 3.4.9-6
-- Rebuilt for libcrypt.so.2 (#1666033)
-
-* Fri Jan 11 2019 Björn Esser <besser82(a)fedoraproject.org> - 3.4.9-5
-- Add missing semicolon in patch 00290
-
-* Mon Sep 24 2018 Miro Hrončok <mhroncok(a)redhat.com> - 3.4.9-4
-- Security fix for CVE-2018-14647 (#1631822)
-
-* Tue Aug 21 2018 Miro Hrončok <mhroncok(a)redhat.com> - 3.4.9-3
-- Use RPM built wheels of pip and setuptools in ensurepip instead of bundled ones
-
-* Wed Aug 08 2018 Miro Hrončok <mhroncok(a)redhat.com> - 3.4.9-2
-- Fix bundled pip/setuptools versions
-
-* Sun Aug 05 2018 Miro Hrončok <mhroncok(a)redhat.com> - 3.4.9-1
-- Rebased to 3.4.9
-
-* Sat Jul 14 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.4.8-4
-- Rebuilt for
https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
-
-* Tue Apr 24 2018 Miro Hrončok <mhroncok(a)redhat.com> - 3.4.8-3
-- Fix multiprocessing regression on newer glibcs
-- Enable test_multiprocessing_fork(server) and _spawn again
-Resolves: rhbz#1569933
-
-* Fri Apr 20 2018 Miro Hrončok <mhroncok(a)redhat.com> - 3.4.8-2
-- Do not ship the Tools directory
-- Skip test_multiprocessing_fork(server) and _spawn for now
-
-* Tue Feb 13 2018 Petr Viktorin <pviktori(a)redhat.com> - 3.4.8-1
-- Update to 3.4.8 bugfix release
-- Add patch 00290 to fix build with libxcrypt
-- Disable test_buffer on ppc64le
-
-* Fri Feb 09 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.4.7-4
-- Rebuilt for
https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
-
-* Sat Jan 20 2018 Björn Esser <besser82(a)fedoraproject.org> - 3.4.7-3
-- Rebuilt for switch to libxcrypt
-
-* Fri Dec 08 2017 Miro Hrončok <mhroncok(a)redhat.com> - 3.4.7-2
-- Fix for CVE-2017-1000158
-- rhbz#1519601:
https://bugzilla.redhat.com/show_bug.cgi?id=1519601
-
-* Thu Nov 02 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.4.7-1
-- Update to 3.4.7
-
-* Mon Aug 14 2017 David "Sanqui" Labský <dlabsky(a)redhat.com> - 3.4.5-8
-- Drop unused db4-devel dependency
-
-* Thu Aug 03 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.4.5-7
-- Rebuilt for
https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
-
-* Thu Jul 27 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.4.5-6
-- Rebuilt for
https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
-
-* Sat Feb 11 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 3.4.5-5
-- Rebuilt for
https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
-
-* Thu Jan 12 2017 Igor Gnatenko <ignatenko(a)redhat.com> - 3.4.5-4
-- Rebuild for readline 7.x
-
-* Tue Jan 10 2017 Charalampos Stratakis <cstratak(a)redhat.com> - 3.4.5-3
-- Require glibc >= 2.24.90-26 (rhbz#1410644)
-- Don't blow up on EL7 kernel (random generator) (rhbz#1410175, rhbz#1410187)
-
-* Fri Oct 21 2016 Miro Hrončok <mhroncok(a)redhat.com> - 3.4.5-2
-- Reword the description
-- On Fedora 26+, BR compat-openssl10-devel
-
-* Thu Sep 22 2016 Miro Hrončok <mhroncok(a)redhat.com> - 3.4.5-1
-- Updated to 3.4.5
-
-* Thu Aug 11 2016 Miro Hrončok <mhroncok(a)redhat.com> - 3.4.3-11
-- Imported from F23
diff --git a/sources b/sources
deleted file mode 100644
index fae40ce..0000000
--- a/sources
+++ /dev/null
@@ -1 +0,0 @@
-SHA512 (Python-3.4.10.tar.xz) =
d5d27d68049b61f135e21b12a800dbd4fc521d6935de178de6e2e88a989cda511d3c8fead90d14e38d2db0e528a74b22674e0da01c51ff4fad7d335ec6c3dbbc
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);
-}
diff --git a/temporarily-disable-tests-requiring-SIGHUP.patch
b/temporarily-disable-tests-requiring-SIGHUP.patch
deleted file mode 100644
index 30ceb94..0000000
--- a/temporarily-disable-tests-requiring-SIGHUP.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-diff -up Python-3.4.0/Lib/test/test_asyncio/test_events.py.orig
Python-3.4.0/Lib/test/test_asyncio/test_events.py
---- Python-3.4.0/Lib/test/test_asyncio/test_events.py.orig 2014-04-15 13:18:49.696215288
+0200
-+++ Python-3.4.0/Lib/test/test_asyncio/test_events.py 2014-04-15 13:18:56.104258453
+0200
-@@ -1528,7 +1528,7 @@ class SubprocessTestsMixin:
- self.check_terminated(proto.returncode)
- transp.close()
-
-- @unittest.skipIf(sys.platform == 'win32', "Don't have
SIGHUP")
-+ @unittest.skipIf(True, "Temporarily skipped (rhbz#1088233)")
- def test_subprocess_send_signal(self):
- prog = os.path.join(os.path.dirname(__file__), 'echo.py')
-
-
-diff -up Python-3.4.0/Lib/test/test_asyncio/test_subprocess.py.orig
Python-3.4.0/Lib/test/test_asyncio/test_subprocess.py
---- Python-3.4.0/Lib/test/test_asyncio/test_subprocess.py.orig 2014-04-17
12:03:32.777827520 +0200
-+++ Python-3.4.0/Lib/test/test_asyncio/test_subprocess.py 2014-04-17 12:04:37.614210481
+0200
-@@ -108,7 +108,7 @@ class SubprocessMixin:
- else:
- self.assertEqual(-signal.SIGTERM, returncode)
-
-- @unittest.skipIf(sys.platform == 'win32', "Don't have
SIGHUP")
-+ @unittest.skipIf(True, "Temporarily skipped (rhbz#1088233)")
- def test_send_signal(self):
- code = 'import time; print("sleeping", flush=True);
time.sleep(3600)'
- args = [sys.executable, '-c', code]
diff --git a/tests/tests.yml b/tests/tests.yml
deleted file mode 100644
index 00f51c7..0000000
--- a/tests/tests.yml
+++ /dev/null
@@ -1,17 +0,0 @@
----
-- 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.4 ./venv.sh
- required_packages:
- - gcc
- - python3-tox
- - python34