diff --git a/.gitignore b/.gitignore deleted file mode 100644 index b5624b7..0000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.tar.xz diff --git a/00055-systemtap.patch b/00055-systemtap.patch deleted file mode 100644 index db899a3..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: - webservers.rst - argparse.rst - ipaddress.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 -+ -+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): => in :1 -+ # 5 python(8274): <= in :1 -+ with ErrorDumper(out, err): -+ self.assertIn(b'=> in :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('=> in %s:5' % pythonfile, out_utf8) -+ self.assertIn(' => 文字化け in %s:5' % pythonfile, out_utf8) -+ self.assertIn(' <= 文字化け in %s:7' % pythonfile, out_utf8) -+ self.assertIn('<= 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('=> 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('<= 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/formatter_unicode.o: $(srcdir)/Python/formatter_unicode.c \ - $(BYTESTR_DEPS) -@@ -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 - -+#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(); - 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/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 e89602a..0000000 --- a/00111-no-static-lib.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 978a0a1f9ddfc658fd190df4df5e6c0733af604e Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= -Date: Thu, 25 Aug 2016 14:20:24 +0200 -Subject: [PATCH] No static lib - ---- - Makefile.pre.in | 28 ++-------------------------- - 1 file changed, 2 insertions(+), 26 deletions(-) - -diff --git a/Makefile.pre.in b/Makefile.pre.in -index 71d85c0..0a20e5a 100644 ---- a/Makefile.pre.in -+++ b/Makefile.pre.in -@@ -476,7 +476,7 @@ coverage: - - - # 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 -@@ -501,18 +501,6 @@ sharedmods: $(BUILDPYTHON) pybuilddir.txt - _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); \ -@@ -602,7 +590,7 @@ Modules/Setup: $(srcdir)/Modules/Setup.dist - 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) - - ############################################################################ -@@ -1209,18 +1197,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 --- -2.9.0 - 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/00114-statvfs-f_flag-constants.patch b/00114-statvfs-f_flag-constants.patch deleted file mode 100644 index af0d780..0000000 --- a/00114-statvfs-f_flag-constants.patch +++ /dev/null @@ -1,39 +0,0 @@ -diff -up Python-3.3.0b1/Modules/posixmodule.c.statvfs-f_flag-constants Python-3.3.0b1/Modules/posixmodule.c ---- Python-3.3.0b1/Modules/posixmodule.c.statvfs-f_flag-constants 2012-06-26 16:19:54.000000000 -0400 -+++ Python-3.3.0b1/Modules/posixmodule.c 2012-07-20 13:39:18.595546387 -0400 -@@ -11665,6 +11665,35 @@ all_ins(PyObject *d) - if (ins(d, "ST_NOSUID", (long)ST_NOSUID)) return -1; - #endif /* ST_NOSUID */ - -+ /* GNU extensions */ -+#ifdef ST_NODEV -+ if (ins(d, "ST_NODEV", (long)ST_NODEV)) return -1; -+#endif /* ST_NODEV */ -+#ifdef ST_NOEXEC -+ if (ins(d, "ST_NOEXEC", (long)ST_NOEXEC)) return -1; -+#endif /* ST_NOEXEC */ -+#ifdef ST_SYNCHRONOUS -+ if (ins(d, "ST_SYNCHRONOUS", (long)ST_SYNCHRONOUS)) return -1; -+#endif /* ST_SYNCHRONOUS */ -+#ifdef ST_MANDLOCK -+ if (ins(d, "ST_MANDLOCK", (long)ST_MANDLOCK)) return -1; -+#endif /* ST_MANDLOCK */ -+#ifdef ST_WRITE -+ if (ins(d, "ST_WRITE", (long)ST_WRITE)) return -1; -+#endif /* ST_WRITE */ -+#ifdef ST_APPEND -+ if (ins(d, "ST_APPEND", (long)ST_APPEND)) return -1; -+#endif /* ST_APPEND */ -+#ifdef ST_NOATIME -+ if (ins(d, "ST_NOATIME", (long)ST_NOATIME)) return -1; -+#endif /* ST_NOATIME */ -+#ifdef ST_NODIRATIME -+ if (ins(d, "ST_NODIRATIME", (long)ST_NODIRATIME)) return -1; -+#endif /* ST_NODIRATIME */ -+#ifdef ST_RELATIME -+ if (ins(d, "ST_RELATIME", (long)ST_RELATIME)) return -1; -+#endif /* ST_RELATIME */ -+ - /* FreeBSD sendfile() constants */ - #ifdef SF_NODISKIO - if (ins(d, "SF_NODISKIO", (long)SF_NODISKIO)) return -1; diff --git a/00125-less-verbose-COUNT_ALLOCS.patch b/00125-less-verbose-COUNT_ALLOCS.patch deleted file mode 100644 index 8cef015..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 - - PRINT_TOTAL_REFS(); 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 fdfbab8..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 pprint - import re - import warnings -@@ -101,6 +102,43 @@ def expectedFailure(func): - return wrapper - - -+# 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(object): - - 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 087705c..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('P2n15Pl4Pn9Pn11PI') -+ # 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('P2n15Pl4Pn9Pn11PI') + 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 8a6bc46..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 - - """ - -+@unittest._skipInRpmBuild("don't try to nest one rpm build inside another rpm build") - class BuildRpmTestCase(support.TempdirManager, - support.LoggingSilencer, - unittest.TestCase): -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-test_gc_with_COUNT_ALLOCS.patch b/00141-fix-test_gc_with_COUNT_ALLOCS.patch deleted file mode 100644 index 337e39e..0000000 --- a/00141-fix-test_gc_with_COUNT_ALLOCS.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff -up Python-3.2b2/Lib/test/test_gc.py.fix-test-gc-COUNT_ALLOCS Python-3.2b2/Lib/test/test_gc.py ---- Python-3.2b2/Lib/test/test_gc.py.fix-test-gc-COUNT_ALLOCS 2010-12-28 20:39:40.779059772 -0500 -+++ Python-3.2b2/Lib/test/test_gc.py 2010-12-28 20:41:15.890940017 -0500 -@@ -102,10 +102,16 @@ class GCTests(unittest.TestCase): - 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): diff --git a/00142-skip-failing-pty-tests-in-rpmbuild.patch b/00142-skip-failing-pty-tests-in-rpmbuild.patch deleted file mode 100644 index 4ed2a2b..0000000 --- a/00142-skip-failing-pty-tests-in-rpmbuild.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 45756fdbe5f78eaca9192fc90010eac79b6b24e5 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= -Date: Thu, 25 Aug 2016 14:29:27 +0200 -Subject: [PATCH] Skip failing PTY tests in rpmbuild - ---- - Lib/test/test_openpty.py | 1 + - Lib/test/test_pty.py | 1 + - 2 files changed, 2 insertions(+) - -diff --git a/Lib/test/test_openpty.py b/Lib/test/test_openpty.py -index 6384370..8cf3df4 100644 ---- a/Lib/test/test_openpty.py -+++ b/Lib/test/test_openpty.py -@@ -8,6 +8,7 @@ if not hasattr(os, "openpty"): - - - class OpenptyTest(unittest.TestCase): -+ @unittest._skipInRpmBuild('sometimes fails in Koji, possibly due to a mock issue (rhbz#714627)') - def test(self): - master, slave = os.openpty() - self.addCleanup(os.close, master) -diff --git a/Lib/test/test_pty.py b/Lib/test/test_pty.py -index 29297f8..772bfcc 100644 ---- a/Lib/test/test_pty.py -+++ b/Lib/test/test_pty.py -@@ -111,6 +111,7 @@ class PtyTest(unittest.TestCase): - os.close(master_fd) - - -+ @unittest._skipInRpmBuild('sometimes fails in Koji, possibly due to a mock issue (rhbz#714627)') - def test_fork(self): - debug("calling pty.fork()") - pid, master_fd = pty.fork() --- -2.9.0 - diff --git a/00143-tsc-on-ppc.patch b/00143-tsc-on-ppc.patch deleted file mode 100644 index 447c6e3..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) - { -- register 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/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/00153-fix-test_gdb-noise.patch b/00153-fix-test_gdb-noise.patch deleted file mode 100644 index 50a0917..0000000 --- a/00153-fix-test_gdb-noise.patch +++ /dev/null @@ -1,31 +0,0 @@ ---- Lib/test/test_gdb.py.old 2012-04-11 21:04:01.367073855 -0400 -+++ Lib/test/test_gdb.py 2012-04-12 08:52:58.320288761 -0400 -@@ -96,6 +96,15 @@ class DebuggerTests(unittest.TestCase): - # Generate a list of commands in gdb's language: - commands = ['set breakpoint pending yes', - 'break %s' % breakpoint, -+ -+ # GDB as of Fedora 17 onwards can distinguish between the -+ # value of a variable at entry vs current value: -+ # http://sourceware.org/gdb/onlinedocs/gdb/Variables.html -+ # which leads to the selftests failing with errors like this: -+ # AssertionError: 'v@entry=()' != '()' -+ # Disable this: -+ 'set print entry-values no', -+ - 'run'] - if cmds_after_breakpoint: - commands += cmds_after_breakpoint ---- Lib/test/test_gdb.py.old 2012-04-11 21:04:01.367073855 -0400 -+++ Lib/test/test_gdb.py 2012-04-12 08:52:58.320288761 -0400 -@@ -144,6 +153,10 @@ - 'Do you need "set solib-search-path" or ' - '"set sysroot"?', - ) -+ ignore_patterns += ('warning: Unable to open', -+ 'Missing separate debuginfo for', -+ 'Try: yum --disablerepo=', -+ 'Undefined set print command') - for line in errlines: - if not line.startswith(ignore_patterns): - unexpected_errlines.append(line) 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/00156-gdb-autoload-safepath.patch b/00156-gdb-autoload-safepath.patch deleted file mode 100644 index ac2aa40..0000000 --- a/00156-gdb-autoload-safepath.patch +++ /dev/null @@ -1,52 +0,0 @@ -diff -up Python-3.2.3/Lib/test/test_gdb.py.gdb-autoload-safepath Python-3.2.3/Lib/test/test_gdb.py ---- Python-3.2.3/Lib/test/test_gdb.py.gdb-autoload-safepath 2012-04-30 17:16:24.092706954 -0400 -+++ Python-3.2.3/Lib/test/test_gdb.py 2012-04-30 17:17:13.275703592 -0400 -@@ -46,6 +46,19 @@ def gdb_has_frame_select(): - - HAS_PYUP_PYDOWN = gdb_has_frame_select() - -+def gdb_has_autoload_safepath(): -+ # Recent GDBs will only auto-load scripts from certain safe -+ # locations, so we will need to turn off this protection. -+ # However, if the GDB doesn't have it, then the following -+ # command will generate noise on stderr (rhbz#817072): -+ cmd = "--eval-command=set auto-load safe-path /" -+ p = subprocess.Popen(["gdb", "--batch", cmd], -+ stderr=subprocess.PIPE) -+ _, stderr = p.communicate() -+ return b'"on" or "off" expected.' not in stderr -+ -+HAS_AUTOLOAD_SAFEPATH = gdb_has_autoload_safepath() -+ - BREAKPOINT_FN='builtin_id' - - class DebuggerTests(unittest.TestCase): -@@ -106,15 +119,28 @@ class DebuggerTests(unittest.TestCase): - 'set print entry-values no', - - 'run'] -+ -+ if HAS_AUTOLOAD_SAFEPATH: -+ # Recent GDBs will only auto-load scripts from certain safe -+ # locations. -+ # Where necessary, turn off this protection to ensure that -+ # our -gdb.py script can be loaded - but not on earlier gdb builds -+ # as this would generate noise on stderr (rhbz#817072): -+ init_commands = ['set auto-load safe-path /'] -+ else: -+ init_commands = [] -+ - if cmds_after_breakpoint: - commands += cmds_after_breakpoint - else: - commands += ['backtrace'] - -+ # print init_commands - # print commands - - # Use "commands" to generate the arguments with which to invoke "gdb": - args = ["gdb", "--batch"] -+ args += ['--init-eval-command=%s' % cmd for cmd in init_commands] - args += ['--eval-command=%s' % cmd for cmd in commands] - args += ["--args", - sys.executable] diff --git a/00157-uid-gid-overflows.patch b/00157-uid-gid-overflows.patch deleted file mode 100644 index d9993a6..0000000 --- a/00157-uid-gid-overflows.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 0436437c5cebda586a99f092428f6d6de687765b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= -Date: Thu, 25 Aug 2016 14:42:19 +0200 -Subject: [PATCH] UID GID overflows - ---- - Lib/test/test_os.py | 8 ++++++++ - Lib/test/test_pwd.py | 4 ++-- - 2 files changed, 10 insertions(+), 2 deletions(-) - -diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py -index 56309bf..b7cea2b 100644 ---- a/Lib/test/test_os.py -+++ b/Lib/test/test_os.py -@@ -1287,30 +1287,36 @@ class PosixUidGidTests(unittest.TestCase): - def test_setuid(self): - if os.getuid() != 0: - self.assertRaises(os.error, 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(os.error, 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(os.error, 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(os.error, 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(os.error, 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) - -@@ -1318,6 +1324,8 @@ class PosixUidGidTests(unittest.TestCase): - def test_setregid(self): - if os.getuid() != 0 and not HAVE_WHEEL_GROUP: - self.assertRaises(os.error, 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) - -diff --git a/Lib/test/test_pwd.py b/Lib/test/test_pwd.py -index 37a1bcb..0f61100 100644 ---- a/Lib/test/test_pwd.py -+++ b/Lib/test/test_pwd.py -@@ -94,9 +94,9 @@ class PwdTest(unittest.TestCase): - # 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) - --- -2.9.0 - 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 0db8092..0000000 --- a/00164-disable-interrupted_write-tests-on-ppc.patch +++ /dev/null @@ -1,52 +0,0 @@ -diff -up Python-3.3.0b1/Lib/test/test_exceptions.py.846849 Python-3.3.0b1/Lib/test/test_exceptions.py ---- Python-3.3.0b1/Lib/test/test_exceptions.py.846849 2012-06-26 22:19:47.000000000 +0200 -+++ Python-3.3.0b1/Lib/test/test_exceptions.py 2012-08-13 17:41:28.845403486 +0200 -@@ -401,6 +401,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.3.0b1/Lib/test/test_io.py.846849 Python-3.3.0b1/Lib/test/test_io.py ---- Python-3.3.0b1/Lib/test/test_io.py.846849 2012-06-26 22:19:48.000000000 +0200 -+++ Python-3.3.0b1/Lib/test/test_io.py 2012-08-13 17:41:28.846403451 +0200 -@@ -2938,12 +2938,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') - def test_interrupted_write_text(self): - self.check_interrupted_write("xy", b"xy", mode="w", encoding="ascii") - -diff -up Python-3.3.0b1/Lib/test/test_raise.py.846849 Python-3.3.0b1/Lib/test/test_raise.py ---- Python-3.3.0b1/Lib/test/test_raise.py.846849 2012-08-13 17:42:16.719714213 +0200 -+++ Python-3.3.0b1/Lib/test/test_raise.py 2012-08-13 17:43:02.544097272 +0200 -@@ -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.3.0b1/Lib/test/test_traceback.py.846849 Python-3.3.0b1/Lib/test/test_traceback.py ---- Python-3.3.0b1/Lib/test/test_traceback.py.846849 2012-08-13 17:44:19.714374275 +0200 -+++ Python-3.3.0b1/Lib/test/test_traceback.py 2012-08-13 17:44:43.515534435 +0200 -@@ -246,6 +246,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/00173-workaround-ENOPROTOOPT-in-bind_port.patch b/00173-workaround-ENOPROTOOPT-in-bind_port.patch deleted file mode 100644 index 545676a..0000000 --- a/00173-workaround-ENOPROTOOPT-in-bind_port.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 57c8fc09f1d574919c5e0bf398c92344b07d4a50 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= -Date: Thu, 25 Aug 2016 14:47:10 +0200 -Subject: [PATCH] Workaround ENOPROTOOPT in bind_port - ---- - Lib/test/support/__init__.py | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py -index 5c03f54..56fd7e6 100644 ---- a/Lib/test/support/__init__.py -+++ b/Lib/test/support/__init__.py -@@ -568,7 +568,8 @@ def bind_port(sock, host=HOST): - 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 " \ --- -2.9.0 - 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 1e7fb06..0000000 --- a/00186-dont-raise-from-py_compile.patch +++ /dev/null @@ -1,41 +0,0 @@ -diff -r 7fa3e824a4ee Lib/py_compile.py ---- a/Lib/py_compile.py Tue Oct 29 22:25:06 2013 -0400 -+++ b/Lib/py_compile.py Wed Oct 30 11:08:31 2013 +0100 -@@ -108,15 +108,15 @@ - byte-compile all installed files (or all files in selected - directories). - """ -- with tokenize.open(file) as f: -- try: -- st = os.fstat(f.fileno()) -- except AttributeError: -- st = os.stat(file) -- timestamp = int(st.st_mtime) -- size = st.st_size & 0xFFFFFFFF -- codestring = f.read() - try: -+ with tokenize.open(file) as f: -+ try: -+ st = os.fstat(f.fileno()) -+ except AttributeError: -+ st = os.stat(file) -+ timestamp = int(st.st_mtime) -+ size = st.st_size & 0xFFFFFFFF -+ codestring = f.read() - codeobject = builtins.compile(codestring, dfile or file, 'exec', - optimize=optimize) - except Exception as err: -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_main(): - support.run_unittest(PyCompileTests) - diff --git a/00194-json-add-boundary-check.patch b/00194-json-add-boundary-check.patch deleted file mode 100644 index 157ca0b..0000000 --- a/00194-json-add-boundary-check.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 1071d9d2fd99c18585fa630ea7f45b34a824278f Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= -Date: Thu, 25 Aug 2016 18:36:13 +0200 -Subject: [PATCH] JSON add boundary check - ---- - Modules/_json.c | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/Modules/_json.c b/Modules/_json.c -index 4bc585d..fdbf3d9 100644 ---- a/Modules/_json.c -+++ b/Modules/_json.c -@@ -979,7 +979,10 @@ scan_once_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ssize_ - PyErr_SetString(PyExc_ValueError, "idx cannot be negative"); - return NULL; - } -- if (idx >= length) { -+ if (idx < 0) -+ /* Compatibility with Python version. */ -+ idx += length; -+ if (idx < 0 || idx >= length) { - PyErr_SetNone(PyExc_StopIteration); - return NULL; - } --- -2.9.0 - diff --git a/00244-skip-ssl-tests.patch b/00244-skip-ssl-tests.patch deleted file mode 100644 index ebb2dc5..0000000 --- a/00244-skip-ssl-tests.patch +++ /dev/null @@ -1,48 +0,0 @@ -diff --git a/Lib/test/test_ftplib.py b/Lib/test/test_ftplib.py -index 6c95c49..9884b76 100644 ---- a/Lib/test/test_ftplib.py -+++ b/Lib/test/test_ftplib.py -@@ -3,6 +3,7 @@ - # Modified by Giampaolo Rodola' to test FTP class, IPv6 and TLS - # environment - -+import unittest - import ftplib - import asyncore - import asynchat -@@ -885,6 +886,7 @@ class TestTLS_FTPClass(TestCase): - self.client.auth() - self.assertRaises(ValueError, self.client.auth) - -+ @unittest._skipInRpmBuild("Known failure in modern Fedoras, SSL is broken in 3.3") - def test_auth_ssl(self): - try: - self.client.ssl_version = ssl.PROTOCOL_SSLv3 -diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py -index bd1f761..807a985 100644 ---- a/Lib/test/test_ssl.py -+++ b/Lib/test/test_ssl.py -@@ -532,6 +532,7 @@ class ContextTests(unittest.TestCase): - ctx.set_ciphers("^$:,;?*'dorothyx") - - @skip_if_broken_ubuntu_ssl -+ @unittest._skipInRpmBuild("Known failure in modern Fedoras, SSL is broken in 3.3") - def test_options(self): - ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1) - # OP_ALL | OP_NO_SSLv2 is the default value -@@ -1602,6 +1603,7 @@ else: - client_options=ssl.OP_NO_TLSv1) - - @skip_if_broken_ubuntu_ssl -+ @unittest._skipInRpmBuild("Known failure in modern Fedoras, SSL is broken in 3.3") - def test_protocol_sslv23(self): - """Connecting to an SSLv23 server with various client options""" - if support.verbose: -@@ -1638,6 +1640,7 @@ else: - - - @skip_if_broken_ubuntu_ssl -+ @unittest._skipInRpmBuild("Known failure in modern Fedoras, SSL is broken in 3.3") - def test_protocol_sslv3(self): - """Connecting to an SSLv3 server with various client options""" - if support.verbose: diff --git a/00245-skip-stack-overflow-test.patch b/00245-skip-stack-overflow-test.patch deleted file mode 100644 index 2233026..0000000 --- a/00245-skip-stack-overflow-test.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/Lib/test/test_faulthandler.py b/Lib/test/test_faulthandler.py -index 770e70c..96d3c6c 100644 ---- a/Lib/test/test_faulthandler.py -+++ b/Lib/test/test_faulthandler.py -@@ -183,6 +183,7 @@ faulthandler._fatal_error(b'xyz') - "OpenBSD if Python is compiled with pthread") - @unittest.skipIf(not hasattr(faulthandler, '_stack_overflow'), - 'need faulthandler._stack_overflow()') -+ @unittest._skipInRpmBuild("Hangs forever in rpmbuild on 64 bits") - def test_stack_overflow(self): - self.check_fatal_error(""" - import faulthandler 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/00286-pystring-decodeescape-integer-overflow.patch b/00286-pystring-decodeescape-integer-overflow.patch deleted file mode 100644 index 8c22f3c..0000000 --- a/00286-pystring-decodeescape-integer-overflow.patch +++ /dev/null @@ -1,25 +0,0 @@ -From c3c9db89273fabc62ea1b48389d9a3000c1c03ae Mon Sep 17 00:00:00 2001 -From: Jay Bosamiya -Date: Sun, 18 Jun 2017 22:11:03 +0530 -Subject: [PATCH] [2.7] bpo-30657: Check & prevent integer overflow in - PyString_DecodeEscape (#2174) - -diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c -index 77dd45e..9b29dc3 100644 ---- a/Objects/bytesobject.c -+++ b/Objects/bytesobject.c -@@ -970,7 +970,13 @@ PyObject *PyBytes_DecodeEscape(const char *s, - char *p, *buf; - const char *end; - PyObject *v; -- Py_ssize_t newlen = recode_encoding ? 4*len:len; -+ Py_ssize_t newlen; -+ /* Check for integer overflow */ -+ if (recode_encoding && (len > PY_SSIZE_T_MAX / 4)) { -+ PyErr_SetString(PyExc_OverflowError, "string is too large"); -+ return NULL; -+ } -+ newlen = recode_encoding ? 4*len:len; - v = PyBytes_FromStringAndSize((char *)NULL, newlen); - if (v == NULL) - return NULL; diff --git a/00302-fix-multiprocessing-regression-on-newer-glibcs.patch b/00302-fix-multiprocessing-regression-on-newer-glibcs.patch deleted file mode 100644 index 965792a..0000000 --- a/00302-fix-multiprocessing-regression-on-newer-glibcs.patch +++ /dev/null @@ -1,55 +0,0 @@ -From a3febe3cba14b89885f42ca2f0224096a52885f6 Mon Sep 17 00:00:00 2001 -From: Antoine Pitrou -Date: Mon, 23 Apr 2018 13:19:42 +0200 -Subject: [PATCH] bpo-33329: Fix multiprocessing regression on newer glibcs - -Starting with glibc 2.27.9000-xxx, sigaddset() can return EINVAL for some -reserved signal numbers between 1 and NSIG. The `range(1, NSIG)` idiom -is commonly used to select all signals for blocking with `pthread_sigmask`. -So we ignore the sigaddset() return value until we expose sigfillset() -to provide a better idiom. ---- - .../next/Library/2018-04-23-13-21-39.bpo-33329.lQ-Eod.rst | 1 + - Modules/signalmodule.c | 14 ++++++++------ - 2 files changed, 9 insertions(+), 6 deletions(-) - create mode 100644 Misc/NEWS.d/next/Library/2018-04-23-13-21-39.bpo-33329.lQ-Eod.rst - -diff --git a/Misc/NEWS.d/next/Library/2018-04-23-13-21-39.bpo-33329.lQ-Eod.rst b/Misc/NEWS.d/next/Library/2018-04-23-13-21-39.bpo-33329.lQ-Eod.rst -new file mode 100644 -index 000000000000..d1a4e56d04b9 ---- /dev/null -+++ b/Misc/NEWS.d/next/Library/2018-04-23-13-21-39.bpo-33329.lQ-Eod.rst -@@ -0,0 +1 @@ -+Fix multiprocessing regression on newer glibcs -diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c -index 791616014384..35fd87e2d1e7 100644 ---- a/Modules/signalmodule.c -+++ b/Modules/signalmodule.c -@@ -819,7 +819,6 @@ iterable_to_sigset(PyObject *iterable, sigset_t *mask) - int result = -1; - PyObject *iterator, *item; - long signum; -- int err; - - sigemptyset(mask); - -@@ -841,11 +840,14 @@ iterable_to_sigset(PyObject *iterable, sigset_t *mask) - Py_DECREF(item); - if (signum == -1 && PyErr_Occurred()) - goto error; -- if (0 < signum && signum < NSIG) -- err = sigaddset(mask, (int)signum); -- else -- err = 1; -- if (err) { -+ if (0 < signum && signum < NSIG) { -+ /* bpo-33329: ignore sigaddset() return value as it can fail -+ * for some reserved signals, but we want the `range(1, NSIG)` -+ * idiom to allow selecting all valid signals. -+ */ -+ (void) sigaddset(mask, (int)signum); -+ } -+ else { - PyErr_Format(PyExc_ValueError, - "signal number %ld out of range", signum); - goto error; diff --git a/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 7900e5d..0000000 --- a/check-pyc-and-pyo-timestamps.py +++ /dev/null @@ -1,49 +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_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/config.py b/config.py deleted file mode 100644 index bdb7c1a..0000000 --- a/config.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/python3.3m -# -*- python -*- - -import sys -import subprocess -ver = sys.version[:3] -arch = subprocess.check_output('uname -m'.split()).decode("utf-8").rstrip() -call = ['python{ver}m-{arch}-config'.format(ver=ver, arch=arch)] + sys.argv[1:] -retval = subprocess.call(call) -if retval == 127: - print('Could not find python{ver}m-{arch}-config. Look around to see available arches.'.format(ver=ver, arch=arch), file=sys.stderr) diff --git a/dead.package b/dead.package new file mode 100644 index 0000000..357128f --- /dev/null +++ b/dead.package @@ -0,0 +1 @@ +See https://lists.fedoraproject.org/archives/list/python-devel@lists.fedoraproject.org/message/VTOQDUSGTMGOZOJHK4Y6GNVVLHA36QEC/ 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.pybytecompile b/macros.pybytecompile deleted file mode 100644 index a8b79b2..0000000 --- a/macros.pybytecompile +++ /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/macros.python3 b/macros.python3 deleted file mode 100644 index d6d913c..0000000 --- a/macros.python3 +++ /dev/null @@ -1,5 +0,0 @@ -%__python3 /usr/bin/python3 -%python3_sitelib %(%{__python3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") -%python3_sitearch %(%{__python3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))") -%python3_version %(%{__python3} -c "import sys; sys.stdout.write(sys.version[:3])") -%py3dir %{_builddir}/python3-%{name}-%{version}-%{release} 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/python-3.2.1-fix-test-subprocess-with-nonreadable-path-dir.patch b/python-3.2.1-fix-test-subprocess-with-nonreadable-path-dir.patch deleted file mode 100644 index 6f43c72..0000000 --- a/python-3.2.1-fix-test-subprocess-with-nonreadable-path-dir.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up Python-3.2.1/Lib/test/test_subprocess.py.non-readable-path Python-3.2.1/Lib/test/test_subprocess.py ---- Python-3.2.1/Lib/test/test_subprocess.py.non-readable-path 2011-07-09 02:58:51.000000000 -0400 -+++ Python-3.2.1/Lib/test/test_subprocess.py 2011-07-11 11:34:16.284426005 -0400 -@@ -618,7 +618,7 @@ class ProcessTestCase(BaseTestCase): - for i in range(1024): - # Windows raises IOError. Others raise OSError. - with self.assertRaises(EnvironmentError) as c: -- subprocess.Popen(['nonexisting_i_hope'], -+ subprocess.Popen(['/usr/bin/nonexisting_i_hope'], - stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - # ignore errors that indicate the command was not found diff --git a/python-3.3.0b1-lib64.patch b/python-3.3.0b1-lib64.patch deleted file mode 100644 index 5ae03aa..0000000 --- a/python-3.3.0b1-lib64.patch +++ /dev/null @@ -1,200 +0,0 @@ -diff -up cpython-59223da36dec/Lib/distutils/command/install.py.lib64 cpython-59223da36dec/Lib/distutils/command/install.py ---- cpython-59223da36dec/Lib/distutils/command/install.py.lib64 2012-08-07 06:10:57.000000000 -0400 -+++ cpython-59223da36dec/Lib/distutils/command/install.py 2012-08-07 16:41:00.573477549 -0400 -@@ -45,14 +45,14 @@ else: - 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 -up cpython-59223da36dec/Lib/distutils/sysconfig.py.lib64 cpython-59223da36dec/Lib/distutils/sysconfig.py ---- cpython-59223da36dec/Lib/distutils/sysconfig.py.lib64 2012-08-07 06:10:57.000000000 -0400 -+++ cpython-59223da36dec/Lib/distutils/sysconfig.py 2012-08-07 16:41:00.573477549 -0400 -@@ -139,8 +139,12 @@ def get_python_lib(plat_specific=0, stan - 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 -up cpython-59223da36dec/Lib/site.py.lib64 cpython-59223da36dec/Lib/site.py ---- cpython-59223da36dec/Lib/site.py.lib64 2012-08-07 06:10:57.000000000 -0400 -+++ cpython-59223da36dec/Lib/site.py 2012-08-07 16:41:00.573477549 -0400 -@@ -303,12 +303,16 @@ def getsitepackages(prefixes=None): - if sys.platform in ('os2emx', 'riscos'): - sitepackages.append(os.path.join(prefix, "Lib", "site-packages")) - elif 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 -up cpython-59223da36dec/Lib/sysconfig.py.lib64 cpython-59223da36dec/Lib/sysconfig.py ---- cpython-59223da36dec/Lib/sysconfig.py.lib64 2012-08-07 06:10:57.000000000 -0400 -+++ cpython-59223da36dec/Lib/sysconfig.py 2012-08-07 16:41:00.574477549 -0400 -@@ -21,10 +21,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': -@@ -81,10 +81,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 -up cpython-59223da36dec/Lib/test/test_site.py.lib64 cpython-59223da36dec/Lib/test/test_site.py ---- cpython-59223da36dec/Lib/test/test_site.py.lib64 2012-08-07 06:10:57.000000000 -0400 -+++ cpython-59223da36dec/Lib/test/test_site.py 2012-08-07 16:41:00.574477549 -0400 -@@ -239,12 +239,15 @@ class HelperFunctionsTests(unittest.Test - 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 -up cpython-59223da36dec/Makefile.pre.in.lib64 cpython-59223da36dec/Makefile.pre.in ---- cpython-59223da36dec/Makefile.pre.in.lib64 2012-08-07 16:41:00.557477550 -0400 -+++ cpython-59223da36dec/Makefile.pre.in 2012-08-07 16:41:00.575477549 -0400 -@@ -108,7 +108,7 @@ LIBDIR= @libdir@ - MANDIR= @mandir@ - INCLUDEDIR= @includedir@ - CONFINCLUDEDIR= $(exec_prefix)/include --SCRIPTDIR= $(prefix)/lib -+SCRIPTDIR= $(prefix)/lib64 - ABIFLAGS= @ABIFLAGS@ - - # Detailed destination directories -diff -up cpython-59223da36dec/Modules/getpath.c.lib64 cpython-59223da36dec/Modules/getpath.c ---- cpython-59223da36dec/Modules/getpath.c.lib64 2012-08-07 06:10:57.000000000 -0400 -+++ cpython-59223da36dec/Modules/getpath.c 2012-08-07 16:41:00.575477549 -0400 -@@ -122,8 +122,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 -@@ -135,7 +135,7 @@ static wchar_t exec_prefix[MAXPATHLEN+1] - static wchar_t progpath[MAXPATHLEN+1]; - static wchar_t *module_search_path = NULL; - static int module_search_path_malloced = 0; --static wchar_t *lib_python = L"lib/python" VERSION; -+static wchar_t *lib_python = L"lib64/python" VERSION; - - static void - reduce(wchar_t *dir) -@@ -677,7 +677,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]; -@@ -687,7 +687,7 @@ calculate_path(void) - fprintf(stderr, - "Could not find platform dependent libraries \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 -up cpython-59223da36dec/setup.py.lib64 cpython-59223da36dec/setup.py ---- cpython-59223da36dec/setup.py.lib64 2012-08-07 06:10:57.000000000 -0400 -+++ cpython-59223da36dec/setup.py 2012-08-07 16:41:32.153475390 -0400 -@@ -438,7 +438,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: -@@ -708,11 +708,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: -@@ -749,8 +749,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/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/python33.spec b/python33.spec deleted file mode 100644 index 828920b..0000000 --- a/python33.spec +++ /dev/null @@ -1,1476 +0,0 @@ -# ====================================================== -# Conditionals and other variables controlling the build -# ====================================================== - -%global pybasever 3.3 - -# pybasever without the dot: -%global pyshortver 33 - -%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-33.pyc -# foo/__pycache__/bar.cpython-33.pyo -%global bytecode_suffixes .cpython-33.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 %{ix86} x86_64 ppc %{power64} s390x %{arm} -%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 %{pybasever} of the Python programming language -Name: python%{pyshortver} -Version: %{pybasever}.7 -Release: 7%{?dist} -License: Python -Group: Development/Languages - - -# ======================= -# 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-devel -BuildRequires: gmp-devel -BuildRequires: libffi-devel -BuildRequires: libGL-devel -BuildRequires: libX11-devel -BuildRequires: ncurses-devel -BuildRequires: pkgconfig -BuildRequires: readline-devel -BuildRequires: sqlite-devel - -%if 0%{?fedora} >= 26 -BuildRequires: compat-openssl10-devel -%else -BuildRequires: openssl-devel -%endif - -%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 - -# ======================= -# Source code and patches -# ======================= - -Source: http://www.python.org/ftp/python/%{version}/Python-%{version}.tar.xz - -# Supply various useful macros for building python 3 modules: -# __python3, python3_sitelib, python3_sitearch -Source2: macros.python3 - -# 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 - -# 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 - -# Python wrapper arounf pythonXXm-config to be able to keep python3-devel multiarch -Source9: config.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 - -# Some tests were removed due to audiotest.au not being packaged. This was -# however added to the archive in 3.3.1, so we no longer delete the tests. -# Patch3: 00003-remove-mimeaudio-tests.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: python-3.3.0b1-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 - -# 00112 # -# Patch112: python-2.7rc1-debug-build.patch: this is not relevant to Python 3, -# for 3.2 onwards - -# 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 - -# 00114 # -# Add flags for statvfs.f_flag to the constant list in posixmodule (i.e. "os") -# (rhbz:553020); partially upstream as http://bugs.python.org/issue7647 -# Not yet sent upstream -Patch114: 00114-statvfs-f_flag-constants.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 - -# In my koji builds, /root/bin is in the PATH for some reason -# This leads to test_subprocess.py failing, due to "test_leaking_fds_on_error" -# trying every dir in PATH for "nonexisting_i_hope", which leads to it raising -# OSError: [Errno 13] Permission denied -# when it tries to read /root/bin, rather than raising "No such file" -# -# Work around this by specifying an absolute path for the non-existant -# executable -# Not yet sent upstream -Patch129: python-3.2.1-fix-test-subprocess-with-nonreadable-path-dir.patch - -# 00130 # -# Python 2's: -# Patch130: python-2.7.2-add-extension-suffix-to-python-config.patch -# is not relevant to Python 3 (for 3.2 onwards) - -# 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 - -# 00133 # -# 00133-skip-test_dl.patch is not relevant for python3: the "dl" module no -# longer exists - -# 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 - -# 00136 # -# Patch136: 00136-skip-tests-of-seeking-stdin-in-rpmbuild.patch does not seem -# to be needed by python3 - -# 00137 # -# Some tests within distutils fail when run in an rpmbuild: -Patch137: 00137-skip-distutils-tests-that-fail-in-rpmbuild.patch - -# 00138 # -# Patch138: 00138-fix-distutils-tests-in-debug-build.patch is not relevant for -# python3 - -# 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 - -# Patch140: 00140-skip-test_ctypes-known-failure-on-sparc.patch does not appear -# to be relevant for python3 - -# 00141 # -# Fix test_gc's test_newinstance case when configured with COUNT_ALLOCS: -# Not yet sent upstream -Patch141: 00141-fix-test_gc_with_COUNT_ALLOCS.patch - -# 00142 # -# Some pty tests fail when run in mock (rhbz#714627): -Patch142: 00142-skip-failing-pty-tests-in-rpmbuild.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 - -# 00144 # -# (Optionally) disable the gdbm module: -# python.spec's -# Patch144: 00144-no-gdbm.patch -# is not needed in python3.spec - -# 00145 # -# python.spec's -# Patch145: 00145-force-sys-platform-to-be-linux2.patch -# is upstream for Python 3 as of 3.2.2 - -# 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) -# I don't like this patch :) (no FIPS support for python33) -# Patch146: 00146-hashlib-fips.patch - -# 00147 # -# Add a sys._debugmallocstats() function -# Sent upstream as http://bugs.python.org/issue14785 -# Upstream as of Python 3.3.0 -# Patch147: 00147-add-debug-malloc-stats.patch - -# 00148 # -# Upstream as of Python 3.2.3: -# Patch148: 00148-gdbm-1.9-magic-values.patch - -# 00149 # -# Upstream as of Python 3.2.3: -# Patch149: 00149-backport-issue11254-pycache-bytecompilation-fix.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 - -# 00151 # -# python.spec had: -# Patch151: 00151-fork-deadlock.patch - -# 00152 # -# Fix a regex in test_gdb so that it doesn't choke when gdb provides a full -# path to Python/bltinmodule.c: -# Committed upstream as 77824:abcd29c9a791 as part of fix for -# http://bugs.python.org/issue12605 -# Patch152: 00152-fix-test-gdb-regex.patch - -# 00153 # -# Strip out lines of the form "warning: Unable to open ..." from gdb's stderr -# when running test_gdb.py; also cope with change to gdb in F17 onwards in -# which values are printed as "v@entry" rather than just "v": -# Not yet sent upstream -Patch153: 00153-fix-test_gdb-noise.patch - -# 00154 # -# python3.spec on f15 has: -# Patch154: 00154-skip-urllib-test-requiring-working-DNS.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 - -# 00156 # -# Recent builds of gdb will only auto-load scripts from certain safe -# locations. Turn off this protection when running test_gdb in the selftest -# suite to ensure that it can load our -gdb.py script (rhbz#817072): -# Not yet sent upstream -Patch156: 00156-gdb-autoload-safepath.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 - -# 00158 # -# Upstream as of Python 3.3.1 - -# 00159 # -# Patch159: 00159-correct-libdb-include-path.patch -# in python.spec -# TODO: python3 status? - -# 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 - -# 00161 # -# (Was only needed for Python 3.3.0b1) - -# 00162 # -# (Was only needed for Python 3.3.0b1) - -# 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 - -# 00165 # -# python.spec has: -# Patch165: 00165-crypt-module-salt-backport.patch -# which is a backport from 3.3 and thus not relevant to "python3" - -# 00166 # -# Patch166: 00166-fix-fake-repr-in-gdb-hooks.patch -# in python.spec -# TODO: python3 status? - -# 00167 # -# Patch167: 00167-disable-stack-navigation-tests-when-optimized-in-test_gdb.patch -# in python.spec -# TODO: python3 status? - -# 00168 # -# Patch168: 00168-distutils-cflags.patch -# in python.spec -# TODO: python3 status? - -# 00169 # -# Patch169: 00169-avoid-implicit-usage-of-md5-in-multiprocessing.patch -# in python.spec -# TODO: python3 status? - -# 00170 # -# Patch170: 00170-gc-assertions.patch -# in python.spec -# TODO: python3 status? - -# 00171 # -# python.spec had: -# Patch171: 00171-raise-correct-exception-when-dev-urandom-is-missing.patch -# TODO: python3 status? - -# 00172 # -# python.spec had: -# Patch172: 00172-use-poll-for-multiprocessing-socket-connection.patch -# TODO: python3 status? - -# 00173 # -# Workaround for ENOPROTOOPT seen in Koji withi test.support.bind_port() -# (rhbz#913732) -Patch173: 00173-workaround-ENOPROTOOPT-in-bind_port.patch - -# 00174 # -# Patch174: 00174-fix-for-usr-move.patch -# TODO: python3 status? - -# 00175 # -# Upstream as of Python 3.3.2 -# Patch175: 00175-fix-configure-Wformat.patch - -# 00176 # -# Fixed upstream as of Python 3.3.1 -# Patch176: 00176-upstream-issue16754-so-extension.patch - -# 00177 # -# Patch for potential unicode error when determining OS release names -# http://bugs.python.org/issue17429 -# (rhbz#922149) -# Does not affect python2 (python2 uses a byte string so it doesn't need to decode) -# Upstream as Python 3.3.6 -# Patch177: 00177-platform-unicode.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 - -# 00181 # -# python.spec has -# Patch181: 00181-allow-arbitrary-timeout-in-condition-wait.patch -# Does not affect python3 - -# 00182 # -# Fixed upstream as of Python 3.3.2 -# Patch182: 00182-fix-test_gdb-test_threads.patch - -# 00183 # -# Upstream fix for CVE-2013-2099 (ssl.match_hostname DOS) -# http://bugs.python.org/issue17980 -# http://hg.python.org/cpython/rev/c627638753e2 -# Upstream as of 3.3.6 -# Patch183: 00183-cve-2013-2099-fix-ssl-match_hostname-dos.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 - -# 00185 # -# Fix for CVE-2013-4238 -- -# SSL module fails to handle NULL bytes inside subjectAltNames general names -# http://bugs.python.org/issue18709 -# rhbz#996399 -# Upstream as of 3.3.6 -# Patch185: 00185-CVE-2013-4238-hostname-check-bypass-in-SSL-module.patch - -# 00186 # -# Fix for https://bugzilla.redhat.com/show_bug.cgi?id=1023607 -# Fixes the problem of some *.py files 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. -Patch186: 00186-dont-raise-from-py_compile.patch - -# 00187 # -# Fix for rhbz#1023742 -# Change behavior of ssl.match_hostname() to follow RFC 6125 -# See http://bugs.python.org/issue17997#msg194950 for more. -# Upstream as of 3.3.6 -# Patch187: 00187-change-match_hostname-to-follow-RFC-6125.patch - -# 00190 # -# -# Fix tests with SQLite >= 3.8.4 -# http://bugs.python.org/issue20901 -# http://hg.python.org/cpython/rev/4d626a9df062 -# Upstream as of 3.3.6 -# Patch190: 00190-fix-tests-with-sqlite-3.8.4.patch - -# 00192 # -# -# Fixing buffer overflow (upstream patch) -# rhbz#1062375 -# Upstream as Python 3.3.6 -# Patch192: 00192-buffer-overflow.patch - -# 00193 -# -# Skip correct number of *.pyc file bytes in ModuleFinder.load_module -# rhbz#1060338 -# http://bugs.python.org/issue20778 -# Upstream as Python 3.3.6 -# Patch193: 00193-skip-correct-num-of-pycfile-bytes-in-modulefinder.patch - -# 00194 -# -# JSON module could read arbitrary process memory -# rhbz#1112293 -Patch194: 00194-json-add-boundary-check.patch - -# 00197 -# -# The CGIHTTPServer Python module did not properly handle URL-encoded -# path separators in URLs. This may have enabled attackers to disclose a CGI -# script's source code or execute arbitrary scripts in the server's -# document root. -# Upstream as Python 3.3.6 -# Patch197: 00197-fix-CVE-2014-4650.patch - -# 00198 -# -# Fix CVE-2013-7338: malformed ZIP files could cause 100% CPU usage -# https://hg.python.org/cpython/rev/79ea4ce431b1 -# Upstream as Python 3.3.6 -# Patch198: 00198-fix-CVE-2013-7338.patch - -# 00199 -# -# Fix CVE-2014-2667: os.makedirs(exist_ok=True) is not thread-safe in Python 3.x -# https://hg.python.org/cpython/rev/c24dd53ab4b9 -# Upstream as Python 3.3.6 -# Patch199: 00199-fix-CVE-2014-2667.patch - -# 00244 # -# Skip some SSL related tests, SSL is just broken in 3.3 -# python33 will not try to fix that -Patch244: 00244-skip-ssl-tests.patch - -# 00245 # -# Skip stack overflow test that hangs in rpmbuild -# python33 will not try to fix that -Patch245: 00245-skip-stack-overflow-test.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 - -# 00286 # -# CVE-2017-1000158 -# Check & prevent integer overflow in PyString_DecodeEscape -# Fixed upstream: https://bugs.python.org/issue30657 -Patch286: 00286-pystring-decodeescape-integer-overflow.patch - -# 00302 # -# Fix multiprocessing regression on newer glibcs -# See: https://bugzilla.redhat.com/show_bug.cgi?id=1569933 -# and: https://bugs.python.org/issue33329 -Patch302: 00302-fix-multiprocessing-regression-on-newer-glibcs.patch - -# (New patches go here ^^^) -# -# When adding new patches to "python" and "python3" in Fedora 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\\..$ - - -%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-%{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 -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 -# 112: not for python3 -%patch113 -p1 -%patch114 -p1 - -%patch125 -p1 -b .less-verbose-COUNT_ALLOCS - -%patch129 -p1 - -%ifarch ppc %{power64} -%patch131 -p1 -%endif - -%patch132 -p1 -# 00133: not for python3 -%patch134 -p1 -%patch135 -p1 -# 00136: not for python3 -%patch137 -p1 -# 00138: not for python3 -%ifarch %{arm} -%patch139 -p1 -%patch140 -p1 -%endif -# 00140: not for python3 -%patch141 -p1 -%patch142 -p1 -%patch143 -p1 -b .tsc-on-ppc -# 00144: not for python3 -# 00145: not for python3 -# 00146: not for python33 -# 00147: upstream as of Python 3.3.0 -# 00148: upstream as of Python 3.2.3 -# 00149: upstream as of Python 3.2.3 -%ifarch ppc %{power64} -%patch150 -p1 -%endif -# 00151: not for python3 -# 00152: upstream as of Python 3.3.0b2 -%patch153 -p0 -# 00154: not for this branch -%patch155 -p1 -%patch156 -p1 -%patch157 -p1 -#00158: FIXME -#00159: FIXME -%patch160 -p1 -# 00161: was only needed for Python 3.3.0b1 -# 00162: was only needed for Python 3.3.0b1 -%patch163 -p1 -%ifarch ppc %{power64} -%patch164 -p1 -%endif -#00165: TODO -#00166: TODO -#00167: TODO -#00168: TODO -#00169: TODO -#00170: TODO -#00171: TODO -#00172: TODO -%patch173 -p1 -#00174: TODO -# 00175: upstream as of Python 3.3.2 -# 00176: upstream as of Python 3.3.1 -#00177: upstream as of Python 3.3.6 -%patch178 -p1 -%patch179 -p1 -%patch180 -p1 -# 00181: not for python3 -# 00182: upstream as of Python 3.3.2 -# 00183: upstream as of Python 3.3.6 -%patch184 -p1 -# 00185: upstream as of Python 3.3.6 -%patch186 -p1 -# 00187: upstream as of Python 3.3.6 -# 00190: upstream as of Python 3.3.6 -# 00192: upstream as of Python 3.3.6 -# 00193: upstream as of Python 3.3.6 -%patch194 -p1 -# 00197: upstream as of Python 3.3.6 -# 00198: upstream as of Python 3.3.6 -# 00199: upstream as of Python 3.3.6 -%patch244 -p1 - -%ifnarch %{ix86} -# apply the patch for not ix86 arches, as it fails on _64 and arm -%patch245 -p1 -%endif - -%patch273 -p1 -%patch286 -p1 -%patch302 -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 - - 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" %{?_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" \ -%else - "--with-pydebug --with-count-allocs --with-call-profile" \ -%endif - false -%endif # with_debug_build - -BuildPython optimized \ - python \ - python%{pybasever} \ - "" \ - true - -# ====================================================== -# Installing the built code: -# ====================================================== - -%install -topdir=$(pwd) -rm -fr %{buildroot} -mkdir -p %{buildroot}%{_prefix} %{buildroot}%{_mandir} - -InstallPython() { - - ConfName=$1 - PyInstSoName=$2 - - ConfDir=build/$ConfName - - echo STARTING: INSTALL OF PYTHON FOR CONFIGURATION: $ConfName - mkdir -p $ConfDir - - pushd $ConfDir - -make install DESTDIR=%{buildroot} INSTALL="install -p" - - 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} -%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}/usr/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 - -#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 {} \; -rm -f %{buildroot}%{pylibdir}/LICENSE.txt -# 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}/%{_sysconfdir}/rpm -install -m 644 %{SOURCE2} %{buildroot}/%{_sysconfdir}/rpm -install -m 644 %{SOURCE3} %{buildroot}/%{_sysconfdir}/rpm - -# 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 -cp %{SOURCE9} %{buildroot}%{_bindir}/python%{LDVERSION_optimized}-config -chmod +x %{buildroot}%{_bindir}/python%{LDVERSION_optimized}-config - -# Remove stuff that would conflict with python3 package -rm %{buildroot}%{_bindir}/2to3 -mv %{buildroot}%{_bindir}/python{3,%{pyshortver}} -rm %{buildroot}%{_bindir}/pydoc3 -rm %{buildroot}%{_bindir}/idle3 -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_buffer fails with Decimal on ppc64le, - # see https://bugzilla.redhat.com/show_bug.cgi?id=1561011 - WITHIN_PYTHON_RPM_BUILD= \ - LD_LIBRARY_PATH=$ConfDir $ConfDir/python -m test.regrtest \ - --verbose --findleaks \ - %ifarch ppc64le - -x test_buffer \ - %endif - - 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 - - -# ====================================================== -# Scriptlets -# ====================================================== - -%post -p /sbin/ldconfig - -%postun -p /sbin/ldconfig - - - -%files -%defattr(-, root, root) -%doc LICENSE README -%doc Misc/README.valgrind Misc/valgrind-python.supp Misc/gdbinit - -%{_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 %{_sysconfdir}/rpm/* - -%{_bindir}/2to3-%{pybasever} -%{_bindir}/idle%{pybasever} - -# https://bugzilla.redhat.com/show_bug.cgi?id=1476593 -%exclude /usr/lib/debug%{_libdir}/__pycache__/libpython3.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 -* Tue Apr 24 2018 Miro Hrončok - 3.3.7-7 -- Fix multiprocessing regression on newer glibcs -Resolves: rhbz#1569933 - -* Sat Mar 31 2018 Miro Hrončok - 3.3.7-6 -- Do not ship the Tools directory - -* Tue Mar 27 2018 Miro Hrončok - 3.3.7-5 -- Disable test_buffer on ppc64le (rhbz#1561011) - -* Fri Feb 09 2018 Fedora Release Engineering - 3.3.7-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Sat Jan 20 2018 Björn Esser - 3.3.7-3 -- Rebuilt for switch to libxcrypt - -* Fri Dec 08 2017 Miro Hrončok - 3.3.7-2 -- Fix for CVE-2017-1000158 -- rhbz#1519605: https://bugzilla.redhat.com/show_bug.cgi?id=1519605 - -* Mon Nov 06 2017 Charalampos Stratakis - 3.3.7-1 -- Update to 3.3.7 - -* Mon Aug 14 2017 David "Sanqui" Labský - 3.3.6-7 -- Drop unused db4-devel dependency - -* Thu Aug 03 2017 Fedora Release Engineering - 3.3.6-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild - -* Thu Jul 27 2017 Fedora Release Engineering - 3.3.6-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Sat Feb 11 2017 Fedora Release Engineering - 3.3.6-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Thu Jan 12 2017 Igor Gnatenko - 3.3.6-3 -- Rebuild for readline 7.x - -* Fri Oct 21 2016 Miro Hrončok - 3.3.6-2 -- Reword the description -- On Fedora 26+, BR compat-openssl10-devel - -* Thu Aug 25 2016 Miro Hrončok - 3.3.6-1 -- Import from Fedora 20 -- Rebase to 3.3.6 diff --git a/sources b/sources deleted file mode 100644 index 5328976..0000000 --- a/sources +++ /dev/null @@ -1 +0,0 @@ -SHA512 (Python-3.3.7.tar.xz) = 018cc7dbdceeec5bd074fdad90faa544e86f9ab7e43f91a809ad78511b64cb7741b0f99808d6b27fc4c87d2a770b4da1f6383ce831c44c9e574407922dff8437 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); -}