Compare commits

...

41 Commits
master ... f26

Author SHA1 Message Date
Charalampos Stratakis 111d8abb6c Update to 3.6.5
Rebased patches: 102, 111, 262

Removed patches due to being upstreamed:
264, 298

Update pip version to 9.0.3
2018-04-04 12:53:18 +02:00
Miro Hrončok 8e08331a37 Fix shebangs of the GDB hooks
Also, use -p (preserve timestamp) and -n (don't create backup files)
with pathfix.py.

Resolves https://bugzilla.redhat.com/show_bug.cgi?id=1560295
2018-04-04 12:53:18 +02:00
Miro Hrončok d647195bcb rpmlintrc: Filter macro-in-comment %{_pyconfig(32|64)_h} 2018-04-04 12:53:18 +02:00
Miro Hrončok e99f00f29d Fix broken macro invocation and broken building of C Python extensions
Revert "Use %% for actual % in spec"

This reverts commit 90512a5a1b.

Resolves https://bugzilla.redhat.com/show_bug.cgi?id=1560103
2018-04-04 12:53:18 +02:00
Miro Hrončok 66a03df063 rpmlintrc: Do not filter library-without-ldconfig-post on F < 28 2018-04-04 12:53:11 +02:00
Miro Hrončok 9518239d87 Add rpmlintrc file
Filter all the errors and warnings. This allows us to actually read the rpmlint
output to get new information. From now on, we can rely on this information
when pushing updates.

Resolves https://bugzilla.redhat.com/show_bug.cgi?id=1548683

Backport of https://src.fedoraproject.org/rpms/python37/pull-request/10
2018-03-29 17:43:30 +02:00
Miro Hrončok 8b019d678b Use %% for actual % in spec
rpmlint reports this as macro in comment, however it was left here, because it
is not macro and not comment. On the other hand, % shall be escaped using %%.
All this needs to blow is somebody defining a macro called _pyconfig64_h.
2018-03-29 17:43:00 +02:00
Miro Hrončok f21dd01d2a Add -n option for pathfix.py (#1546990) 2018-03-29 16:40:16 +02:00
Miro Hrončok 58a18acd4d Fix the py_byte_compile macro to work on Python 2
See https://bugzilla.redhat.com/show_bug.cgi?id=1484993

Inspired by Terje Røsten's workaround from that bugzilla
2018-03-29 16:39:07 +02:00
Charalampos Stratakis 22a5417452 Do not send IP addresses in SNI TLS extension 2018-03-13 17:04:30 +01:00
Charalampos Stratakis ffd80345f3 Restore the PyExc_RecursionErrorInst public symbol 2018-01-23 17:25:20 +01:00
Charalampos Stratakis f15b8971d4 Update to version 3.6.4
Rebased patches: 189, 262

Dropped patches due to being upstreamed: 277, 279
2018-01-15 17:23:51 +01:00
Charalampos Stratakis 6e6da4af17 Apply the patch 279 correctly. 2017-10-09 13:23:12 +02:00
Charalampos Stratakis 1001aba943 Fix memory corruption due to allocator mix (rhbz#1498207) 2017-10-09 13:14:50 +02:00
Charalampos Stratakis ac4ce3facf Update to Python 3.6.3
Patches 270, 271, 272 were removed as they have been upstreamed.

Patch 277 was added to fix two hanging tests from test_subprocess.

Added gdb at the build dependencies, since gdb is not anymore in the
buildroot, and that made test_gdb to be skipped.
2017-10-06 13:43:16 +02:00
Miro Hrončok 8be884894c Make the -devel package require redhat-rpm-config
https://bugzilla.redhat.com/show_bug.cgi?id=1217376
https://bugzilla.redhat.com/show_bug.cgi?id=1496757
https://bugzilla.redhat.com/show_bug.cgi?id=1218294

Later should be changed to a specific subpackage.
2017-10-02 18:07:01 +02:00
Iryna Shcherbina d87ca42573 Include -g in LDFLAGS sent to the linker (rhbz#1483222)
Include -g flag for both compilation and linking so that the debugging
information is correctly generated.
2017-09-21 18:34:39 +02:00
Michal Cyprian 09ce861b30 Use python3 style of calling super() without arguments in rpath patch 2017-09-21 18:26:11 +02:00
Tomas Orsava 8db5ee258f Add a warning about updating python3-docs 2017-09-21 18:20:48 +02:00
Michal Cyprian 783f35b7f8 Revert "Add --executable option to install.py command"
This enhancement is currently not needed and it can possibly
collide with `pip --editable`option

Reverts commit ef5c6fe479.
2017-08-11 13:13:06 +02:00
Iryna Shcherbina 16b657d7d6 Fix the "urllib FTP protocol stream injection" vulnerability (rhbz#1478916) 2017-08-07 18:43:45 +02:00
Tomas Orsava 8227c33d21 Dropped BuildRequires on db4-devel
- it was useful for Python 2 (module bsddb), however, no longer needod for
  Python 3
- Tested building Python 3 with and without the dependency, all tests pass and
  filelists of resulting RPMs are identical
2017-08-01 17:04:01 +02:00
Charalampos Stratakis b9f2533095 Make sure that we get the default signal handler for test_asyncio,
The parent process may have decided to ignore SIGHUP, and signal handlers
are inherited which can cause the test to hang in koji.
2017-07-25 18:05:48 +02:00
Charalampos Stratakis 44e2147189 Replace the "--verbose" flag with "-wW" when invoking the test
suite, so that the tests are run in non-verbose mode by default and
failed tests are rerun in verbose mode.

Also add the "--slowest" flag when invoking the test suite to
list the ten slowest tests at the end of the test run.
2017-07-20 18:01:26 +02:00
Charalampos Stratakis 05e1bafe57 Remove unused patches 2017-07-19 14:26:09 +02:00
Charalampos Stratakis 8ff39725bf Update the PEP 538 backport 2017-07-19 13:13:11 +02:00
Charalampos Stratakis 11f038e300 Update to Python 3.6.2
Rebased patch 180.

Dropped patches 249, 258, 269 as they have been upstreamed.
2017-07-19 13:12:01 +02:00
Charalampos Stratakis fc4e993391 Provide additional reference for patch 252 2017-06-28 15:49:10 +02:00
Charalampos Stratakis 28f0c0c422 Update to the latest implementation of PEP 538.
Remove patch 261 as it was only required for the previous implementation
of PEP 538.
2017-06-27 15:45:33 +02:00
Charalampos Stratakis 8b94f726d7 Fix test_alpn_protocols from test_ssl 2017-06-24 20:37:14 +02:00
Charalampos Stratakis 1d013eb47b setuptools from version 36.0.0 rebundled its dependencies so we don't have to
require them in order for rewheel to work, so dropping patch 260 as well.
2017-06-24 20:35:54 +02:00
Charalampos Stratakis 63656420a3 Fix conditional macro 2017-05-09 17:07:04 +02:00
Charalampos Stratakis 368ff01e1e Added patch for fixing recompilation of Python when using common
build commands and the --enable-optimizations flag.

Enable profile guided optimizations for x86_64 and i686 architectures
2017-05-09 17:06:57 +02:00
Charalampos Stratakis e890527e80 Update to a newer implementation of PEP 538 2017-05-09 17:06:51 +02:00
Charalampos Stratakis ec7e3db6a1 Change description, to reflect that python3 is now the default Python
Also enhance verbosity for the descriptions of subpackages
2017-05-09 17:06:46 +02:00
Charalampos Stratakis 8fbcd4d716 Update PEP 538 to the latest upstream implementation 2017-05-06 23:29:01 +02:00
Charalampos Stratakis 5845251a7e system-python-libs subpackage was shipping some windows executables
which are used as templates, for creating windows installers for python
modules. These executables are moved to the devel subpackage.

Resolves: rhbz#1426257
2017-04-19 13:50:11 +02:00
Charalampos Stratakis ccd228fc23 Enable link time optimizations 2017-04-19 13:49:56 +02:00
Tomas Orsava e44cd6a31b Merge branch 'master' into f26 2017-04-13 16:30:44 +02:00
Tomas Orsava 8a619e5ede Merge branch 'master' into f26 2017-04-03 15:22:57 +02:00
Tomas Orsava 5bd040bde9 Fix syntax error in %py_byte_compile macro (rhbz#1433569) 2017-03-21 14:51:06 +01:00
21 changed files with 1166 additions and 763 deletions

View File

@ -96,7 +96,7 @@ index f698927..bc977b5 100644
@@ -248,8 +248,8 @@ class HelperFunctionsTests(unittest.TestCase):
self.assertEqual(dirs[1], wanted)
elif os.sep == '/':
# OS X non-framwework builds, Linux, FreeBSD, etc
# OS X non-framework builds, Linux, FreeBSD, etc
- self.assertEqual(len(dirs), 1)
- wanted = os.path.join('xoxo', 'lib',
+ self.assertEqual(len(dirs), 2)

View File

@ -1,9 +1,9 @@
diff --git a/Makefile.pre.in b/Makefile.pre.in
index 70e5927..04c8e3d 100644
index 4b093e3..1088435 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -556,7 +556,7 @@ clinic: $(BUILDPYTHON) $(srcdir)/Modules/_blake2/blake2s_impl.c
$(RUNSHARED) $(PYTHON_FOR_BUILD) ./Tools/clinic/clinic.py --make
@@ -543,7 +543,7 @@ clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c
$(PYTHON_FOR_REGEN) ./Tools/clinic/clinic.py --make
# Build the interpreter
-$(BUILDPYTHON): Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY)
@ -11,7 +11,7 @@ index 70e5927..04c8e3d 100644
$(LINKCC) $(PY_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
platform: $(BUILDPYTHON) pybuilddir.txt
@@ -601,18 +601,6 @@ sharedmods: $(BUILDPYTHON) pybuilddir.txt Modules/_math.o
@@ -588,18 +588,6 @@ sharedmods: $(BUILDPYTHON) pybuilddir.txt Modules/_math.o
$(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build
@ -30,7 +30,7 @@ index 70e5927..04c8e3d 100644
libpython$(LDVERSION).so: $(LIBRARY_OBJS)
if test $(INSTSONAME) != $(LDLIBRARY); then \
$(BLDSHARED) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \
@@ -702,7 +690,7 @@ Modules/Setup: $(srcdir)/Modules/Setup.dist
@@ -689,7 +677,7 @@ Modules/Setup: $(srcdir)/Modules/Setup.dist
echo "-----------------------------------------------"; \
fi
@ -39,7 +39,7 @@ index 70e5927..04c8e3d 100644
$(LINKCC) $(PY_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/_testembed.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
############################################################################
@@ -1382,18 +1370,6 @@ libainstall: all python-config
@@ -1425,18 +1413,6 @@ libainstall: @DEF_MAKE_RULE@ python-config
else true; \
fi; \
done

View File

@ -1,12 +1,13 @@
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 @@
diff --git a/config.sub b/config.sub
index 40ea5df..932128b 100755
--- a/config.sub
+++ b/config.sub
@@ -1045,7 +1045,7 @@ case $basic_machine in
;;
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)
ppc64le | powerpc64little)
basic_machine=powerpc64le-unknown

View File

@ -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:

View File

@ -1,6 +1,7 @@
diff -Nur Python-3.4.1/Lib/ensurepip/__init__.py Python-3.4.1-rewheel/Lib/ensurepip/__init__.py
--- Python-3.4.1/Lib/ensurepip/__init__.py 2014-08-21 10:49:30.792695824 +0200
+++ Python-3.4.1-rewheel/Lib/ensurepip/__init__.py 2014-08-21 10:10:41.958341726 +0200
diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py
index d69e09f..5cb12df 100644
--- a/Lib/ensurepip/__init__.py
+++ b/Lib/ensurepip/__init__.py
@@ -1,8 +1,10 @@
import os
import os.path
@ -12,16 +13,16 @@ diff -Nur Python-3.4.1/Lib/ensurepip/__init__.py Python-3.4.1-rewheel/Lib/ensure
__all__ = ["version", "bootstrap"]
@@ -38,6 +40,8 @@
@@ -25,6 +27,8 @@ def _run_pip(args, additional_paths=None):
# Install the bundled software
import pip
+ if args[0] in ["install", "list", "wheel"]:
+ args.append('--pre')
pip.main(args)
return pip.main(args)
@@ -87,20 +91,39 @@
@@ -88,20 +92,39 @@ def _bootstrap(*, root=None, upgrade=False, user=False,
# omit pip and easy_install
os.environ["ENSUREPIP_OPTIONS"] = "install"
@ -72,8 +73,8 @@ diff -Nur Python-3.4.1/Lib/ensurepip/__init__.py Python-3.4.1-rewheel/Lib/ensure
# Construct the arguments to be passed to the pip command
args = ["install", "--no-index", "--find-links", tmpdir]
diff -Nur Python-3.4.1/Lib/ensurepip/rewheel/__init__.py Python-3.4.1-rewheel/Lib/ensurepip/rewheel/__init__.py
--- Python-3.4.1/Lib/ensurepip/rewheel/__init__.py 1970-01-01 01:00:00.000000000 +0100
+++ Python-3.4.1-rewheel/Lib/ensurepip/rewheel/__init__.py 2014-08-21 10:11:22.560320121 +0200
--- Python-3.4.1/Lib/ensurepip/rewheel/__init__.py 1970-01-01 01:00:00.000000000 +0100
+++ Python-3.4.1-rewheel/Lib/ensurepip/rewheel/__init__.py 2014-08-21 10:11:22.560320121 +0200
@@ -0,0 +1,143 @@
+import argparse
+import codecs
@ -219,8 +220,8 @@ diff -Nur Python-3.4.1/Lib/ensurepip/rewheel/__init__.py Python-3.4.1-rewheel/Li
+ pass # bad RECORD or empty line
+ return to_write, to_omit
diff -Nur Python-3.4.1/Makefile.pre.in Python-3.4.1-rewheel/Makefile.pre.in
--- Python-3.4.1/Makefile.pre.in 2014-08-21 10:49:31.512695040 +0200
+++ Python-3.4.1-rewheel/Makefile.pre.in 2014-08-21 10:10:41.961341722 +0200
--- Python-3.4.1/Makefile.pre.in 2014-08-21 10:49:31.512695040 +0200
+++ Python-3.4.1-rewheel/Makefile.pre.in 2014-08-21 10:10:41.961341722 +0200
@@ -1145,7 +1145,7 @@
test/test_asyncio \
collections concurrent concurrent/futures encodings \

View File

@ -1,30 +0,0 @@
Subject: python3.test gdb match addr before builtin
From: Michel Normand <normand@linux.vnet.ibm.com>
For ppc64le archi and python3... and gdb... versions
the test_gdb.py need a change of re.match to handle address before the builtin_id word.
Of course there is no error if this substring is not present.
===
...
#0 0x00003fffb7dd0898 in builtin_id (self=<module at remote 0x3fffb7901440>, v=<unknown at remote 0x3fffb7f68910>) at /builddir/build/BUILD/Python-3.3.2/Python/bltinmodule.c:966
....xxxxxxxxxxxxxxxxxxxxxx <= added regexp
===
Signed-off-by: Michel Normand <normand@linux.vnet.ibm.com>
---
Lib/test/test_gdb.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Index: Python-3.3.2/Lib/test/test_gdb.py
===================================================================
--- Python-3.3.2.orig/Lib/test/test_gdb.py
+++ Python-3.3.2/Lib/test/test_gdb.py
@@ -230,7 +230,7 @@ class DebuggerTests(unittest.TestCase):
# gdb can insert additional '\n' and space characters in various places
# in its output, depending on the width of the terminal it's connected
# to (using its "wrap_here" function)
- m = re.match('.*#0\s+builtin_id\s+\(self\=.*,\s+v=\s*(.*?)\)\s+at\s+\S*Python/bltinmodule.c.*',
+ m = re.match('.*#0\s+(?: 0x[0-9a-f]+\s+in\s+)?builtin_id\s+\(self\=.*,\s+v=\s*(.*?)\)\s+at\s+\S*Python/bltinmodule.c.*',
gdb_output, re.DOTALL)
if not m:
self.fail('Unexpected gdb output: %r\n%s' % (gdb_output, gdb_output))

View File

@ -1,12 +0,0 @@
diff --git a/Makefile.pre.in b/Makefile.pre.in
index 28df0e1..42f811c 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -867,6 +867,7 @@ Python/frozen.o: Python/importlib.h Python/importlib_external.h
# follow our naming conventions. dtrace(1) uses the output filename to generate
# an include guard, so we can't use a pipeline to transform its output.
Include/pydtrace_probes.h: $(srcdir)/Include/pydtrace.d
+ @$(MKDIR_P) Include
$(DTRACE) $(DFLAGS) -o $@ -h -s $<
: sed in-place edit with POSIX-only tools
sed 's/PYTHON_/PyDTrace_/' $@ > $@.tmp

View File

@ -1,45 +0,0 @@
diff --git a/Lib/distutils/cmd.py b/Lib/distutils/cmd.py
index c89d5ef..dd61621 100644
--- a/Lib/distutils/cmd.py
+++ b/Lib/distutils/cmd.py
@@ -296,7 +296,8 @@ class Command:
finalized command object.
"""
cmd_obj = self.distribution.get_command_obj(command, create)
- cmd_obj.ensure_finalized()
+ if cmd_obj is not None:
+ cmd_obj.ensure_finalized()
return cmd_obj
# XXX rename to 'get_reinitialized_command()'? (should do the
diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py
index 8174192..30ca739 100644
--- a/Lib/distutils/command/install.py
+++ b/Lib/distutils/command/install.py
@@ -122,6 +122,8 @@ class install(Command):
"force installation (overwrite any existing files)"),
('skip-build', None,
"skip rebuilding everything (for testing/debugging)"),
+ ('executable=', 'e',
+ "specify final destination interpreter path (install.py)"),
# Where to install documentation (eventually!)
#('doc-format=', None, "format of documentation to generate"),
@@ -194,6 +196,7 @@ class install(Command):
# directory not in sys.path.
self.force = 0
self.skip_build = 0
+ self.executable = None
self.warn_dir = 1
# These are only here as a conduit from the 'build' command to the
@@ -365,6 +368,9 @@ class install(Command):
('build_base', 'build_base'),
('build_lib', 'build_lib'))
+ if self.executable is None:
+ self.executable = os.path.normpath(sys.executable)
+
# Punt on doc directories for now -- after all, we're punting on
# documentation completely!

View File

@ -1,12 +0,0 @@
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
index 8992a01..74170f4 100644
--- a/Lib/test/test_socket.py
+++ b/Lib/test/test_socket.py
@@ -5458,6 +5458,7 @@ class LinuxKernelCryptoAPI(unittest.TestCase):
self.assertEqual(dec, msg * multiplier)
@support.requires_linux_version(4, 3) # see test_aes_cbc
+ @unittest.skip('Failure on Kernel 4.9+')
def test_aead_aes_gcm(self):
key = bytes.fromhex('c939cc13397c1d37de6ae0e1cb7c423c')
iv = bytes.fromhex('b3d8cc017cbb89b39e0f67e2')

View File

@ -1,183 +0,0 @@
diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py
index 9f5d151..4dfa8a1 100644
--- a/Lib/ensurepip/__init__.py
+++ b/Lib/ensurepip/__init__.py
@@ -8,13 +8,25 @@ import tempfile
__all__ = ["version", "bootstrap"]
-_SETUPTOOLS_VERSION = "28.8.0"
+_SETUPTOOLS_VERSION = "34.2.0"
_PIP_VERSION = "9.0.1"
+_SIX_VERSION = "1.10.0"
+
+_APPDIRS_VERSION = "1.4.0"
+
+_PACKAGING_VERSION = "16.8"
+
+_PYPARSING_VERSION = "2.1.10"
+
_PROJECTS = [
- ("setuptools", _SETUPTOOLS_VERSION),
- ("pip", _PIP_VERSION),
+ ("setuptools", _SETUPTOOLS_VERSION),
+ ("pip", _PIP_VERSION),
+ ("six", _SIX_VERSION),
+ ("appdirs", _APPDIRS_VERSION),
+ ("packaging", _PACKAGING_VERSION),
+ ("pyparsing", _PYPARSING_VERSION)
]
diff --git a/Lib/test/test_ensurepip.py b/Lib/test/test_ensurepip.py
index 9b04c18..23664c4 100644
--- a/Lib/test/test_ensurepip.py
+++ b/Lib/test/test_ensurepip.py
@@ -40,13 +40,14 @@ class TestBootstrap(EnsurepipMixin, unittest.TestCase):
self.run_pip.assert_called_once_with(
[
"install", "--no-index", "--find-links",
- unittest.mock.ANY, "setuptools", "pip",
+ unittest.mock.ANY,
+ "setuptools", "pip", "six", "appdirs", "packaging", "pyparsing",
],
unittest.mock.ANY,
)
additional_paths = self.run_pip.call_args[0][1]
- self.assertEqual(len(additional_paths), 2)
+ self.assertEqual(len(additional_paths), 6)
def test_bootstrapping_with_root(self):
ensurepip.bootstrap(root="/foo/bar/")
@@ -55,7 +56,7 @@ class TestBootstrap(EnsurepipMixin, unittest.TestCase):
[
"install", "--no-index", "--find-links",
unittest.mock.ANY, "--root", "/foo/bar/",
- "setuptools", "pip",
+ "setuptools", "pip", "six", "appdirs", "packaging", "pyparsing",
],
unittest.mock.ANY,
)
@@ -66,7 +67,8 @@ class TestBootstrap(EnsurepipMixin, unittest.TestCase):
self.run_pip.assert_called_once_with(
[
"install", "--no-index", "--find-links",
- unittest.mock.ANY, "--user", "setuptools", "pip",
+ unittest.mock.ANY, "--user",
+ "setuptools", "pip", "six", "appdirs", "packaging", "pyparsing",
],
unittest.mock.ANY,
)
@@ -77,7 +79,8 @@ class TestBootstrap(EnsurepipMixin, unittest.TestCase):
self.run_pip.assert_called_once_with(
[
"install", "--no-index", "--find-links",
- unittest.mock.ANY, "--upgrade", "setuptools", "pip",
+ unittest.mock.ANY, "--upgrade",
+ "setuptools", "pip", "six", "appdirs", "packaging", "pyparsing",
],
unittest.mock.ANY,
)
@@ -88,7 +91,8 @@ class TestBootstrap(EnsurepipMixin, unittest.TestCase):
self.run_pip.assert_called_once_with(
[
"install", "--no-index", "--find-links",
- unittest.mock.ANY, "-v", "setuptools", "pip",
+ unittest.mock.ANY, "-v",
+ "setuptools", "pip", "six", "appdirs", "packaging", "pyparsing",
],
unittest.mock.ANY,
)
@@ -99,7 +103,8 @@ class TestBootstrap(EnsurepipMixin, unittest.TestCase):
self.run_pip.assert_called_once_with(
[
"install", "--no-index", "--find-links",
- unittest.mock.ANY, "-vv", "setuptools", "pip",
+ unittest.mock.ANY, "-vv",
+ "setuptools", "pip", "six", "appdirs", "packaging", "pyparsing",
],
unittest.mock.ANY,
)
@@ -110,7 +115,8 @@ class TestBootstrap(EnsurepipMixin, unittest.TestCase):
self.run_pip.assert_called_once_with(
[
"install", "--no-index", "--find-links",
- unittest.mock.ANY, "-vvv", "setuptools", "pip",
+ unittest.mock.ANY, "-vvv",
+ "setuptools", "pip", "six", "appdirs", "packaging", "pyparsing",
],
unittest.mock.ANY,
)
@@ -186,8 +192,8 @@ class TestUninstall(EnsurepipMixin, unittest.TestCase):
self.run_pip.assert_called_once_with(
[
- "uninstall", "-y", "--disable-pip-version-check", "pip",
- "setuptools",
+ "uninstall", "-y", "--disable-pip-version-check",
+ "pyparsing", "packaging", "appdirs", "six", "pip", "setuptools",
]
)
@@ -197,8 +203,8 @@ class TestUninstall(EnsurepipMixin, unittest.TestCase):
self.run_pip.assert_called_once_with(
[
- "uninstall", "-y", "--disable-pip-version-check", "-v", "pip",
- "setuptools",
+ "uninstall", "-y", "--disable-pip-version-check", "-v",
+ "pyparsing", "packaging", "appdirs", "six", "pip", "setuptools",
]
)
@@ -208,8 +214,8 @@ class TestUninstall(EnsurepipMixin, unittest.TestCase):
self.run_pip.assert_called_once_with(
[
- "uninstall", "-y", "--disable-pip-version-check", "-vv", "pip",
- "setuptools",
+ "uninstall", "-y", "--disable-pip-version-check", "-vv",
+ "pyparsing", "packaging", "appdirs", "six", "pip", "setuptools",
]
)
@@ -220,7 +226,7 @@ class TestUninstall(EnsurepipMixin, unittest.TestCase):
self.run_pip.assert_called_once_with(
[
"uninstall", "-y", "--disable-pip-version-check", "-vvv",
- "pip", "setuptools",
+ "pyparsing", "packaging", "appdirs", "six", "pip", "setuptools",
]
)
@@ -260,13 +266,14 @@ class TestBootstrappingMainFunction(EnsurepipMixin, unittest.TestCase):
self.run_pip.assert_called_once_with(
[
"install", "--no-index", "--find-links",
- unittest.mock.ANY, "setuptools", "pip",
+ unittest.mock.ANY,
+ "setuptools", "pip", "six", "appdirs", "packaging", "pyparsing",
],
unittest.mock.ANY,
)
additional_paths = self.run_pip.call_args[0][1]
- self.assertEqual(len(additional_paths), 2)
+ self.assertEqual(len(additional_paths), 6)
class TestUninstallationMainFunction(EnsurepipMixin, unittest.TestCase):
@@ -284,8 +291,8 @@ class TestUninstallationMainFunction(EnsurepipMixin, unittest.TestCase):
self.run_pip.assert_called_once_with(
[
- "uninstall", "-y", "--disable-pip-version-check", "pip",
- "setuptools",
+ "uninstall", "-y", "--disable-pip-version-check", "pyparsing", "packaging",
+ "appdirs", "six", "pip", "setuptools",
]
)

View File

@ -1,104 +0,0 @@
diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py
index 6c3625d..2a53f3d 100644
--- a/Lib/test/test_capi.py
+++ b/Lib/test/test_capi.py
@@ -385,7 +385,7 @@ class EmbeddingTests(unittest.TestCase):
def test_subinterps(self):
# This is just a "don't crash" test
- out, err = self.run_embedded_interpreter()
+ out, err = self.run_embedded_interpreter("repeated_init_and_subinterpreters")
if support.verbose:
print()
print(out)
diff --git a/Programs/_testembed.c b/Programs/_testembed.c
index 3968399..a68d4fa 100644
--- a/Programs/_testembed.c
+++ b/Programs/_testembed.c
@@ -33,7 +33,7 @@ static void print_subinterp(void)
);
}
-static void test_repeated_init_and_subinterpreters(void)
+static int test_repeated_init_and_subinterpreters(void)
{
PyThreadState *mainstate, *substate;
#ifdef WITH_THREAD
@@ -70,6 +70,7 @@ static void test_repeated_init_and_subinterpreters(void)
PyEval_RestoreThread(mainstate);
Py_Finalize();
}
+ return 0;
}
/*****************************************************
@@ -103,7 +104,7 @@ static void check_stdio_details(const char *encoding, const char * errors)
Py_Finalize();
}
-static void test_forced_io_encoding(void)
+static int test_forced_io_encoding(void)
{
/* Check various combinations */
printf("--- Use defaults ---\n");
@@ -122,19 +123,51 @@ static void test_forced_io_encoding(void)
printf("Unexpected success calling Py_SetStandardStreamEncoding");
}
Py_Finalize();
+ return 0;
}
-/* Different embedding tests */
-int main(int argc, char *argv[])
+/* *********************************************************
+ * List of test cases and the function that implements it.
+ *
+ * Names are compared case-sensitively with the first
+ * argument. If no match is found, or no first argument was
+ * provided, the names of all test cases are printed and
+ * the exit code will be -1.
+ *
+ * The int returned from test functions is used as the exit
+ * code, and test_capi treats all non-zero exit codes as a
+ * failed test.
+ *********************************************************/
+struct TestCase
{
+ const char *name;
+ int (*func)(void);
+};
+
+static struct TestCase TestCases[] = {
+ { "forced_io_encoding", test_forced_io_encoding },
+ { "repeated_init_and_subinterpreters", test_repeated_init_and_subinterpreters },
+ { NULL, NULL }
+};
- /* TODO: Check the argument string to allow for more test cases */
+int main(int argc, char *argv[])
+{
if (argc > 1) {
- /* For now: assume "forced_io_encoding */
- test_forced_io_encoding();
- } else {
- /* Run the original embedding test case by default */
- test_repeated_init_and_subinterpreters();
+ for (struct TestCase *tc = TestCases; tc && tc->name; tc++) {
+ if (strcmp(argv[1], tc->name) == 0)
+ return (*tc->func)();
+ }
}
- return 0;
+
+ /* No match found, or no test name provided, so display usage */
+ printf("Python " PY_VERSION " _testembed executable for embedded interpreter tests\n"
+ "Normally executed via 'EmbeddingTests' in Lib/test/test_capi.py\n\n"
+ "Usage: %s TESTNAME\n\nAll available tests:\n", argv[0]);
+ for (struct TestCase *tc = TestCases; tc && tc->name; tc++) {
+ printf(" %s\n", tc->name);
+ }
+
+ /* Non-zero exit code will cause test_capi.py tests to fail.
+ This is intentional. */
+ return -1;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,12 +0,0 @@
diff --git a/Lib/ctypes/test/test_structures.py b/Lib/ctypes/test/test_structures.py
index 3eded77..ad7859a 100644
--- a/Lib/ctypes/test/test_structures.py
+++ b/Lib/ctypes/test/test_structures.py
@@ -392,6 +392,7 @@ class StructureTestCase(unittest.TestCase):
(1, 0, 0, 0, 0, 0))
self.assertRaises(TypeError, lambda: Z(1, 2, 3, 4, 5, 6, 7))
+ @unittest.skip('Fails on aarch64: http://bugs.python.org/issue29804')
def test_pass_by_value(self):
# This should mirror the structure in Modules/_ctypes/_ctypes_test.c
class X(Structure):

View File

@ -0,0 +1,106 @@
diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst
index 847b50140a6..570dc3ed6fe 100644
--- a/Doc/whatsnew/3.6.rst
+++ b/Doc/whatsnew/3.6.rst
@@ -1852,10 +1852,10 @@ Build and C API Changes
* The :c:func:`PyUnicode_FSConverter` and :c:func:`PyUnicode_FSDecoder`
functions will now accept :term:`path-like objects <path-like object>`.
-* The ``PyExc_RecursionErrorInst`` singleton that was part of the public API
- has been removed as its members being never cleared may cause a segfault
- during finalization of the interpreter. Contributed by Xavier de Gaye in
- :issue:`22898` and :issue:`30697`.
+* The ``PyExc_RecursionErrorInst`` singleton is not used anymore as its members
+ being never cleared may cause a segfault during finalization of the
+ interpreter. Contributed by Xavier de Gaye in :issue:`22898` and
+ :issue:`30697`.
Other Improvements
diff --git a/Include/pyerrors.h b/Include/pyerrors.h
index c28c1373f82..8c1dbc5047b 100644
--- a/Include/pyerrors.h
+++ b/Include/pyerrors.h
@@ -219,6 +219,8 @@ PyAPI_DATA(PyObject *) PyExc_IOError;
PyAPI_DATA(PyObject *) PyExc_WindowsError;
#endif
+PyAPI_DATA(PyObject *) PyExc_RecursionErrorInst;
+
/* Predefined warning categories */
PyAPI_DATA(PyObject *) PyExc_Warning;
PyAPI_DATA(PyObject *) PyExc_UserWarning;
diff --git a/Misc/NEWS.d/next/C API/2017-12-20-15-23-06.bpo-30697.v9FmgG.rst b/Misc/NEWS.d/next/C API/2017-12-20-15-23-06.bpo-30697.v9FmgG.rst
new file mode 100644
index 00000000000..28f74ad4f30
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2017-12-20-15-23-06.bpo-30697.v9FmgG.rst
@@ -0,0 +1 @@
+Restore PyExc_RecursionErrorInst in 3.6
diff --git a/Objects/exceptions.c b/Objects/exceptions.c
index df4899372a5..271e293e325 100644
--- a/Objects/exceptions.c
+++ b/Objects/exceptions.c
@@ -2430,6 +2430,12 @@ SimpleExtendsException(PyExc_Warning, ResourceWarning,
+/* Pre-computed RecursionError instance for when recursion depth is reached.
+ Meant to be used when normalizing the exception for exceeding the recursion
+ depth will cause its own infinite recursion.
+*/
+PyObject *PyExc_RecursionErrorInst = NULL;
+
#define PRE_INIT(TYPE) \
if (!(_PyExc_ ## TYPE.tp_flags & Py_TPFLAGS_READY)) { \
if (PyType_Ready(&_PyExc_ ## TYPE) < 0) \
@@ -2691,11 +2697,37 @@ _PyExc_Init(PyObject *bltinmod)
ADD_ERRNO(TimeoutError, ETIMEDOUT);
preallocate_memerrors();
+
+ if (!PyExc_RecursionErrorInst) {
+ PyExc_RecursionErrorInst = BaseException_new(&_PyExc_RecursionError, NULL, NULL);
+ if (!PyExc_RecursionErrorInst)
+ Py_FatalError("Cannot pre-allocate RecursionError instance for "
+ "recursion errors");
+ else {
+ PyBaseExceptionObject *err_inst =
+ (PyBaseExceptionObject *)PyExc_RecursionErrorInst;
+ PyObject *args_tuple;
+ PyObject *exc_message;
+ exc_message = PyUnicode_FromString("maximum recursion depth exceeded");
+ if (!exc_message)
+ Py_FatalError("cannot allocate argument for RecursionError "
+ "pre-allocation");
+ args_tuple = PyTuple_Pack(1, exc_message);
+ if (!args_tuple)
+ Py_FatalError("cannot allocate tuple for RecursionError "
+ "pre-allocation");
+ Py_DECREF(exc_message);
+ if (BaseException_init(err_inst, args_tuple, NULL))
+ Py_FatalError("init of pre-allocated RecursionError failed");
+ Py_DECREF(args_tuple);
+ }
+ }
}
void
_PyExc_Fini(void)
{
+ Py_CLEAR(PyExc_RecursionErrorInst);
free_preallocated_memerrors();
Py_CLEAR(errnomap);
}
diff --git a/PC/python3.def b/PC/python3.def
index 4fc4a6814ee..ff70718fc37 100644
--- a/PC/python3.def
+++ b/PC/python3.def
@@ -224,6 +224,7 @@ EXPORTS
PyExc_PermissionError=python36.PyExc_PermissionError DATA
PyExc_ProcessLookupError=python36.PyExc_ProcessLookupError DATA
PyExc_RecursionError=python36.PyExc_RecursionError DATA
+ PyExc_RecursionErrorInst=python36.PyExc_RecursionErrorInst DATA
PyExc_ReferenceError=python36.PyExc_ReferenceError DATA
PyExc_ResourceWarning=python36.PyExc_ResourceWarning DATA
PyExc_RuntimeError=python36.PyExc_RuntimeError DATA

View File

@ -0,0 +1,104 @@
From 5affd5c29eb1493cb31ef3cfdde15538ac134689 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
Date: Tue, 13 Mar 2018 10:56:43 +0100
Subject: [PATCH] bpo-32885: Tools/scripts/pathfix.py: Add -n option for no
backup~ (#5772)
Creating backup files with ~ suffix can be undesirable in some environment,
such as when building RPM packages. Instead of requiring the user to remove
those files manually, option -n was added, that simply disables this feature.
-n was selected because 2to3 has the same option with this behavior.
---
Misc/ACKS | 1 +
.../2018-02-20-12-16-47.bpo-32885.dL5x7C.rst | 2 ++
Tools/scripts/pathfix.py | 28 +++++++++++++++-------
3 files changed, 23 insertions(+), 8 deletions(-)
create mode 100644 Misc/NEWS.d/next/Tools-Demos/2018-02-20-12-16-47.bpo-32885.dL5x7C.rst
diff --git a/Misc/ACKS b/Misc/ACKS
index d8179c8b03ab..d752d8a35434 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -687,6 +687,7 @@ Ken Howard
Brad Howes
Mike Hoy
Ben Hoyt
+Miro Hrončok
Chiu-Hsiang Hsu
Chih-Hao Huang
Christian Hudon
diff --git a/Misc/NEWS.d/next/Tools-Demos/2018-02-20-12-16-47.bpo-32885.dL5x7C.rst b/Misc/NEWS.d/next/Tools-Demos/2018-02-20-12-16-47.bpo-32885.dL5x7C.rst
new file mode 100644
index 000000000000..e003e1d84fd0
--- /dev/null
+++ b/Misc/NEWS.d/next/Tools-Demos/2018-02-20-12-16-47.bpo-32885.dL5x7C.rst
@@ -0,0 +1,2 @@
+Add an ``-n`` flag for ``Tools/scripts/pathfix.py`` to disbale automatic
+backup creation (files with ``~`` suffix).
diff --git a/Tools/scripts/pathfix.py b/Tools/scripts/pathfix.py
index 562bbc737812..c5bf984306a3 100755
--- a/Tools/scripts/pathfix.py
+++ b/Tools/scripts/pathfix.py
@@ -7,8 +7,9 @@
# Directories are searched recursively for files whose name looks
# like a python module.
# Symbolic links are always ignored (except as explicit directory
-# arguments). Of course, the original file is kept as a back-up
-# (with a "~" attached to its name).
+# arguments).
+# The original file is kept as a back-up (with a "~" attached to its name),
+# -n flag can be used to disable this.
#
# Undoubtedly you can do this using find and sed or perl, but this is
# a nice example of Python code that recurses down a directory tree
@@ -31,14 +32,17 @@
new_interpreter = None
preserve_timestamps = False
+create_backup = True
+
def main():
global new_interpreter
global preserve_timestamps
- usage = ('usage: %s -i /interpreter -p file-or-directory ...\n' %
+ global create_backup
+ usage = ('usage: %s -i /interpreter -p -n file-or-directory ...\n' %
sys.argv[0])
try:
- opts, args = getopt.getopt(sys.argv[1:], 'i:p')
+ opts, args = getopt.getopt(sys.argv[1:], 'i:pn')
except getopt.error as msg:
err(str(msg) + '\n')
err(usage)
@@ -48,6 +52,8 @@ def main():
new_interpreter = a.encode()
if o == '-p':
preserve_timestamps = True
+ if o == '-n':
+ create_backup = False
if not new_interpreter or not new_interpreter.startswith(b'/') or \
not args:
err('-i option or file-or-directory missing\n')
@@ -134,10 +140,16 @@ def fix(filename):
except OSError as msg:
err('%s: warning: chmod failed (%r)\n' % (tempname, msg))
# Then make a backup of the original file as filename~
- try:
- os.rename(filename, filename + '~')
- except OSError as msg:
- err('%s: warning: backup failed (%r)\n' % (filename, msg))
+ if create_backup:
+ try:
+ os.rename(filename, filename + '~')
+ except OSError as msg:
+ err('%s: warning: backup failed (%r)\n' % (filename, msg))
+ else:
+ try:
+ os.remove(filename)
+ except OSError as msg:
+ err('%s: warning: removing failed (%r)\n' % (filename, msg))
# Now move the temp file to the original file
try:
os.rename(tempname, filename)

View File

@ -1,15 +1,14 @@
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):
@@ -141,6 +141,15 @@ 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)
+ libraries, library_dirs, runtime_library_dirs = super()._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)

View File

@ -3,8 +3,23 @@
# Python's compile_all module only works on directories, and requires a max
# recursion depth
# Note that the py_byte_compile macro should work for python2 as well
# Which unfortunately makes the definition more complicated than it should be
# The condition should be reversed once /usr/bin/python is python3!
%py_byte_compile()\
python_binary="%1"\
bytecode_compilation_path="%2"\
find $bytecode_compilation_path -type f -a -name "*.py" -print0 | xargs -0 $python_binary -O -c 'import py_compile, sys; [py_compile.compile(f, dfile=f.partition("$RPM_BUILD_ROOT")[2], optimize=opt) for opt in range(2) for f in sys.argv[1:]]' || :\
py2_byte_compile () {\
python_binary="%1"\
bytecode_compilation_path="%2"\
find $bytecode_compilation_path -type f -a -name "*.py" -print0 | xargs -0 $python_binary -c 'import py_compile, sys; [py_compile.compile(f, dfile=f.partition("$RPM_BUILD_ROOT")[2]) for f in sys.argv[1:]]' || :\
find $bytecode_compilation_path -type f -a -name "*.py" -print0 | xargs -0 $python_binary -O -c 'import py_compile, sys; [py_compile.compile(f, dfile=f.partition("$RPM_BUILD_ROOT")[2]) for f in sys.argv[1:]]' || :\
}\
\
py3_byte_compile () {\
python_binary="%1"\
bytecode_compilation_path="%2"\
find $bytecode_compilation_path -type f -a -name "*.py" -print0 | xargs -0 $python_binary -O -c 'import py_compile, sys; [py_compile.compile(f, dfile=f.partition("$RPM_BUILD_ROOT")[2], optimize=opt) for opt in range(2) for f in sys.argv[1:]]' || :\
}\
\
[[ "%1" == *python3* ]] || py2_byte_compile "%1" "%2" && py3_byte_compile "%1" "%2" \
%{nil}

64
python3.rpmlintrc Normal file
View File

@ -0,0 +1,64 @@
# KNOWN BUGS:
# https://bugzilla.redhat.com/show_bug.cgi?id=1489816
addFilter(r'crypto-policy-non-compliance-openssl')
# TESTS:
addFilter(r'(zero-length|pem-certificate|uncompressed-zip) /usr/lib(64)?/python3.\d/test')
# OTHER DELIBERATES:
# chroot function
addFilter(r'missing-call-to-chdir-with-chroot')
# intentionally unversioned and selfobsoleted
addFilter(r'unversioned-explicit-obsoletes python')
addFilter(r'self-obsoletion python3\d obsoletes python3\d')
# intentionally hardcoded
addFilter(r'hardcoded-library-path in %{_prefix}/lib/(debug/%{_libdir}|python%{pybasever})')
# we have non binary stuff, python files
addFilter(r'only-non-binary-in-usr-lib')
# some devel files that are deliberately needed
addFilter(r'devel-file-in-non-devel-package /usr/include/python3\.\dm/pyconfig-(32|64)\.h')
addFilter(r'devel-file-in-non-devel-package /usr/lib64/python3\.\d/distutils/tests/xxmodule\.c')
# SORRY, NOT SORRY:
# manual pages
addFilter(r'no-manual-page-for-binary (idle|pydoc|pyvenv|2to3|python3-debug|pathfix\.py)')
addFilter(r'no-manual-page-for-binary python3.*-config$')
addFilter(r'no-manual-page-for-binary python3.\dd?m$')
# missing documentation from subpackages
addFilter(r'^python3\d?-(debug|tkinter|test|idle)\.[^:]+: (E|W): no-documentation')
# platform python is obsoleted, but not provided
addFilter(r'obsolete-not-provided platform-python')
# RPMLINT IMPERFECTIONS:
# ifarch applied patches are OK
# https://fedoraproject.org/wiki/Packaging:Guidelines#Architecture_Support
addFilter(r'%ifarch-applied-patch')
# debugsource
addFilter(r'^python3\d?-debugsource\.[^:]+: (E|W): no-documentation')
# debuginfo
addFilter(r'^python3\d?-debuginfo\.[^:]+: (E|W): useless-provides debuginfo\(build-id\)')
# debug package contains devel and non-devel files
addFilter(r'python3\d?-debug.[^:]+: (E|W): (non-)?devel-file-in-(non-)?devel-package')
# this goes to other subpackage, hence not actually dangling, the read error is bogus
addFilter(r'dangling-relative-symlink /usr/lib(64)?/pkgconfig/python-3\.\ddm\.pc python-3\.\d\.pc')
addFilter(r'read-error /usr/lib(64)?/pkgconfig/python-3\.\ddm\.pc \[Errno 2\]')
# we need this macro to evaluate, even if the line starts with #
addFilter(r'macro-in-comment %\{_pyconfig(32|64)_h\}')
# SPELLING ERRORS
addFilter(r'spelling-error .* en_US (bytecode|pyc|filename|tkinter|namespaces|pytest) ')

View File

@ -122,8 +122,10 @@
# ==================
Summary: Version 3 of the Python programming language aka Python 3000
Name: python3
Version: %{pybasever}.1
Release: 3%{?dist}
# WARNING When rebasing to a new Python version,
# remember to update the python3-docs package as well
Version: %{pybasever}.5
Release: 1%{?dist}
License: Python
Group: Development/Languages
@ -138,7 +140,6 @@ BuildRequires: autoconf
BuildRequires: bluez-libs-devel
BuildRequires: bzip2
BuildRequires: bzip2-devel
BuildRequires: db4-devel >= 4.7
# 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:
@ -163,6 +164,7 @@ BuildRequires: readline-devel
BuildRequires: sqlite-devel
BuildRequires: desktop-file-utils
BuildRequires: libappstream-glib
BuildRequires: gdb
BuildRequires: systemtap-sdt-devel
BuildRequires: systemtap-devel
@ -184,10 +186,6 @@ BuildRequires: zlib-devel
%if 0%{?with_rewheel}
BuildRequires: python3-setuptools
BuildRequires: python3-six
BuildRequires: python3-pyparsing
BuildRequires: python3-appdirs
BuildRequires: python3-packaging
BuildRequires: python3-pip
%endif
@ -405,37 +403,6 @@ Patch206: 00206-remove-hf-from-arm-triplet.patch
# Fedora needs the default mips64-linux-gnu
Patch243: 00243-fix-mips64-triplet.patch
# 00249 #
# Fix builds using the --with-dtrace flag as the rpmbuild
# of python is an out of tree build
# Not yet fixed upstream: http://bugs.python.org/issue28787
Patch249: 00249-fix-out-of-tree-dtrace-builds.patch
# 00252
# Add executable option to install.py command to make it work for
# scripts specified as an entry_points
Patch252: 00252-add-executable-option.patch
# 00258 #
# Kernel 4.9 introduced some changes to its crypto API
# making test_aead_aes_gcm fail, so skipping the test for now
# Reported upstream: http://bugs.python.org/issue29324
Patch258: 00258-fix-test_aead_aes_gcm.patch
# 00260 #
# setuptools from version 34.0.0 and onwards, unbundled its dependencies
# and started requiring them so when rewheel mode is enabled we will have
# to BuildRequire the new dependencies, in order for the virtualenv's to work properly
# setuptools change: https://setuptools.readthedocs.io/en/latest/history.html#v34-0-0
# Reported upstream: http://bugs.python.org/issue29523
# https://github.com/python/cpython/pull/67
Patch260: 00260-require-setuptools-dependencies.patch
# 00261 #
# Use proper command line parsing in _testembed
# Fixed upstream: http://bugs.python.org/issue24932
Patch261: 00261-use-proper-command-line-parsing-in-_testembed.patch
# 00262 #
# Backport of PEP 538: Coercing the legacy C locale to a UTF-8 based locale
# https://www.python.org/dev/peps/pep-0538/
@ -443,6 +410,18 @@ Patch261: 00261-use-proper-command-line-parsing-in-_testembed.patch
# Original proposal: https://bugzilla.redhat.com/show_bug.cgi?id=1404918
Patch262: 00262-pep538_coerce_legacy_c_locale.patch
# 00292 #
# Restore the public PyExc_RecursionErrorInst symbol that was removed
# from the 3.6.4 release upstream.
# Reported upstream: https://bugs.python.org/issue30697
Patch292: 00292-restore-PyExc_RecursionErrorInst-symbol.patch
# 00301 #
# Tools/scripts/pathfix.py: Add -n option for no backup~
# See: https://bugzilla.redhat.com/show_bug.cgi?id=1546990
# Fixed upstream: https://bugs.python.org/issue32885
Patch301: 00301-pathfix-add-n-option-for-no-backup.patch
# (New patches go here ^^^)
#
# When adding new patches to "python" and "python3" in Fedora, EL, etc.,
@ -452,14 +431,6 @@ Patch262: 00262-pep538_coerce_legacy_c_locale.patch
#
# https://fedoraproject.org/wiki/SIGs/Python/PythonPatches
# 00264 #
# test_pass_by_value was added in Python 3.6.1 and on aarch64
# it is catching an error that was there, but wasn't tested before.
# Therefore skipping the test on aarch64 until fixed upstream.
# Reported upstream: http://bugs.python.org/issue29804
Patch264: 00264-skip-test-failing-on-aarch64.patch
# add correct arch for ppc64/ppc64le
# it should be ppc64le-linux-gnu/ppc64-linux-gnu instead powerpc64le-linux-gnu/powerpc64-linux-gnu
Patch5001: python3-powerppc-arch.patch
@ -491,13 +462,24 @@ Requires: python3-pip
%endif
%description
Python 3 is a new version of the language that is incompatible with the 2.x
line of releases. The language is mostly the same, but many details, especially
how built-in objects like dictionaries and strings work, have changed
considerably, and a lot of deprecated features have finally been removed.
Python is an interpreted, interactive, object-oriented programming
language often compared to Tcl, Perl, Scheme or Java. Python includes
modules, classes, exceptions, very high level dynamic data types
and dynamic typing. Python supports interfaces to many system calls and
libraries, as well as to various windowing systems (X11, Motif, Tk,
Mac and MFC).
Programmers can write new built-in modules for Python in C or C++.
Python can be used as an extension language for applications that
need a programmable interface.
Note that documentation for Python is provided in the python3-docs package.
This package provides the "python3" executable; most of the actual
implementation is within the "python3-libs" and "system-python-libs" packages.
%package libs
Summary: Python 3 runtime libraries
Summary: Python runtime libraries
Group: Development/Libraries
# For Modularity purpose we need not to include the dist-tag int he dependency
%if %(d="%{?dist}"; [ "${d#module-base-runtime-}x" != "${d}x" ] && echo 1 || echo 0)
@ -515,7 +497,10 @@ Provides: python3-enum34 = 1.0.4-5%{?dist}
Obsoletes: python3-enum34 < 1.0.4-5%{?dist}
%description libs
This package contains files used to embed Python 3 into applications.
This package contains runtime libraries for use by Python:
- the libpython dynamic library, for use by applications that embed Python as
a scripting language, and by the main "python3" executable
- the Python standard library
%package -n system-python
Summary: System Python executable
@ -542,39 +527,53 @@ Requires: glibc%{?_isa} >= 2.24.90-26
This package contains files used to embed System Python into applications.
%package devel
Summary: Libraries and header files needed for Python 3 development
Summary: Libraries and header files needed for Python development
Group: Development/Libraries
Requires: %{name} = %{version}-%{release}
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
BuildRequires: python-rpm-macros
Requires: python-rpm-macros
Requires: python3-rpm-macros
# https://bugzilla.redhat.com/show_bug.cgi?id=1217376
# https://bugzilla.redhat.com/show_bug.cgi?id=1496757
# https://bugzilla.redhat.com/show_bug.cgi?id=1218294
# TODO change to a specific subpackage once available (#1218294)
Requires: redhat-rpm-config
Conflicts: %{name} < %{version}-%{release}
%description devel
This package contains libraries and header files used to build applications
with and native libraries for Python 3
The Python programming language's interpreter can be extended with
dynamically loaded extensions and can be embedded in other programs.
This package contains the header files and libraries needed to do
these types of tasks.
Install python3-devel if you want to develop Python extensions. The
python3 package will also need to be installed. You'll probably also
want to install the python3-docs package, which contains Python
documentation.
%package tools
Summary: A collection of tools included with Python 3
Summary: A collection of tools included with Python
Group: Development/Tools
Requires: %{name} = %{version}-%{release}
Requires: %{name}-tkinter = %{version}-%{release}
%description tools
This package contains several tools included with Python 3
This package contains several tools included with Python
%package tkinter
Summary: A GUI toolkit for Python 3
Summary: A GUI toolkit for Python
Group: Development/Languages
Requires: %{name} = %{version}-%{release}
%description tkinter
The Tkinter (Tk interface) program is an graphical user interface for
The Tkinter (Tk interface) program is a graphical user interface for
the Python scripting language.
%package test
Summary: The test modules from the main python 3 package
Summary: The test modules from the main python3 package
Group: Development/Languages
Requires: %{name} = %{version}-%{release}
Requires: %{name}-tools = %{version}-%{release}
@ -585,11 +584,11 @@ These are in a separate package to save space, as they are almost never used
in production.
You might want to install the python3-test package if you're developing
python 3 code that uses more than just unittest and/or test_support.py.
python code that uses more than just unittest and/or test_support.py.
%if 0%{?with_debug_build}
%package debug
Summary: Debug version of the Python 3 runtime
Summary: Debug version of the Python runtime
Group: Applications/System
# The debug build is an all-in-one package version of the regular build, and
@ -603,20 +602,20 @@ Requires: %{name}-tkinter%{?_isa} = %{version}-%{release}
Requires: %{name}-tools%{?_isa} = %{version}-%{release}
%description debug
python3-debug provides a version of the Python 3 runtime with numerous debugging
python3-debug provides a version of the Python runtime with numerous debugging
features enabled, aimed at advanced Python users, such as developers of Python
extension modules.
This version uses more memory and will be slower than the regular Python 3 build,
This version uses more memory and will be slower than the regular Python build,
but is useful for tracking down reference-counting issues, and other bugs.
The bytecodes are unchanged, so that .pyc files are compatible between the two
versions of Python 3, but the debugging features mean that C/C++ extension
versions of Python, but the debugging features mean that C/C++ extension
modules are ABI-incompatible with those built for the standard runtime.
It shares installation directories with the standard Python 3 runtime, so that
.py and .pyc files can be shared. All compiled extension modules gain a "_d"
suffix ("foo_d.so" rather than "foo.so") so that each Python 3 implementation
It shares installation directories with the standard Python runtime, so that
.py and .pyc files can be shared. All compiled extension modules gain a "_d"
suffix ("foo_d.so" rather than "foo.so") so that each Python implementation
can load its own extensions.
%endif # with_debug_build
@ -655,7 +654,7 @@ rm -r Modules/zlib || exit 1
#done
%if 0%{with_rewheel}
%global pip_version 9.0.1
%global pip_version 9.0.3
sed -r -i s/'_PIP_VERSION = "[0-9.]+"'/'_PIP_VERSION = "%{pip_version}"'/ Lib/ensurepip/__init__.py
%endif
@ -693,16 +692,9 @@ sed -r -i s/'_PIP_VERSION = "[0-9.]+"'/'_PIP_VERSION = "%{pip_version}"'/ Lib/en
%patch205 -p1
%patch206 -p1
%patch243 -p1
%patch249 -p1
%patch252 -p1
%patch258 -p1
%patch260 -p1
%patch261 -p1
%patch262 -p1
%ifarch aarch64
%patch264 -p1
%endif
%patch292 -p1
%patch301 -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.
@ -728,7 +720,7 @@ 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`"
export LDFLAGS="$RPM_LD_FLAGS -g `pkg-config --libs-only-L openssl`"
# Define a function, for how to perform a "build" of python for a given
@ -760,6 +752,7 @@ BuildPython() {
--with-system-ffi \
--enable-loadable-sqlite-extensions \
--with-dtrace \
--with-lto \
%if 0%{?with_systemtap}
--with-systemtap \
%endif
@ -802,7 +795,11 @@ BuildPython debug \
BuildPython optimized \
python \
python%{pybasever} \
%ifarch %{ix86} x86_64
"--without-ensurepip --enable-optimizations" \
%else
"--without-ensurepip" \
%endif
true
# ======================================================
@ -972,8 +969,9 @@ sed -i -e "s/'pyconfig.h'/'%{_pyconfig_h}'/" \
# 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}" \
%{buildroot}
-i "%{_bindir}/python%{pybasever}" -pn \
%{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:
@ -1155,7 +1153,7 @@ CheckPython() {
# aarch64, see upstream bug http://bugs.python.org/issue21131
WITHIN_PYTHON_RPM_BUILD= \
LD_LIBRARY_PATH=$ConfDir $ConfDir/python -m test.regrtest \
--verbose --findleaks \
-wW --slowest --findleaks \
-x test_distutils \
%ifarch ppc64le aarch64
-x test_faulthandler \
@ -1402,7 +1400,7 @@ fi
%{pylibdir}/distutils/__pycache__/*%{bytecode_suffixes}
%{pylibdir}/distutils/README
%{pylibdir}/distutils/command
%exclude %{pylibdir}/distutils/command/wininst-*.exe
%dir %{pylibdir}/email/
%dir %{pylibdir}/email/__pycache__/
@ -1467,6 +1465,7 @@ fi
%defattr(-,root,root)
%{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/*
%exclude %{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/Makefile
%{pylibdir}/distutils/command/wininst-*.exe
%{_includedir}/python%{LDVERSION_optimized}/*.h
%exclude %{_includedir}/python%{LDVERSION_optimized}/%{_pyconfig_h}
%doc Misc/README.valgrind Misc/valgrind-python.supp Misc/gdbinit
@ -1657,6 +1656,91 @@ fi
# ======================================================
%changelog
* Thu Mar 29 2018 Charalampos Stratakis <cstratak@redhat.com> - 3.6.5-1
- Update to 3.6.5
* Sat Mar 24 2018 Miro Hrončok <mhroncok@redhat.com> - 3.6.4-6
- Fix broken macro invocation and broken building of C Python extensions
Resolves: rhbz#1560103
* Fri Mar 16 2018 Miro Hrončok <mhroncok@redhat.com> - 3.6.4-5
- Add -n option for pathfix.py
Resolves: rhbz#1546990
* Thu Mar 15 2018 Miro Hrončok <mhroncok@redhat.com> - 3.6.4-4
- Fix the py_byte_compile macro to work on Python 2
- Remove the pybytecompile macro file from the flat package
Resolves: rhbz#1484993
* Tue Mar 13 2018 Charalampos Stratakis <cstratak@redhat.com> - 3.6.4-3
- Do not send IP addresses in SNI TLS extension
* Tue Jan 23 2018 Charalampos Stratakis <cstratak@redhat.com> - 3.6.4-2
- Restore the PyExc_RecursionErrorInst public symbol
* Mon Jan 15 2018 Charalampos Stratakis <cstratak@redhat.com> - 3.6.4-1
- Update to version 3.6.4
* Mon Oct 09 2017 Charalampos Stratakis <cstratak@redhat.com> - 3.6.3-2
- Fix memory corruption due to allocator mix
Resolves: rhbz#1498207
* Fri Oct 06 2017 Charalampos Stratakis <cstratak@redhat.com> - 3.6.3-1
- Update to Python 3.6.3
* Fri Sep 29 2017 Miro Hrončok <mhroncok@redhat.com> - 3.6.2-8
- Make the -devel package require redhat-rpm-config
Resolves: rhbz#1496757
* Wed Sep 06 2017 Iryna Shcherbina <ishcherb@redhat.com> - 3.6.2-7
- Include `-g` in the flags sent to the linker (LDFLAGS)
Resolves: rhbz#1483222
* Mon Aug 28 2017 Michal Cyprian <mcyprian@redhat.com> - 3.6.2-6
- Use python3 style of calling super() without arguments in rpath
patch to prevent recursion in UnixCCompiler subclasses
Resolves: rhbz#1458122
* Fri Aug 11 2017 Michal Cyprian <mcyprian@redhat.com> - 3.6.2-5
- Revert "Add --executable option to install.py command"
This enhancement is currently not needed and it can possibly
collide with `pip --editable`option
* Mon Aug 07 2017 Iryna Shcherbina <ishcherb@redhat.com> - 3.6.2-4
- Fix the "urllib FTP protocol stream injection" vulnerability
Resolves: rhbz#1478916
* Tue Aug 01 2017 Tomas Orsava <torsava@redhat.com> - 3.6.2-3
- Dropped BuildRequires on db4-devel which was useful for Python 2 (module
bsddb), however, no longer needod for Python 3
- Tested building Python 3 with and without the dependency, all tests pass and
filelists of resulting RPMs are identical
* Tue Jul 25 2017 Charalampos Stratakis <cstratak@redhat.com> - 3.6.2-2
- Make test_asyncio to not depend on the current SIGHUP signal handler.
* Tue Jul 18 2017 Charalampos Stratakis <cstratak@redhat.com> - 3.6.2-1
- Update to Python 3.6.2
* Tue Jun 27 2017 Charalampos Stratakis <cstratak@redhat.com> - 3.6.1-8
- Update to the latest upstream implementation of PEP 538
* Fri Jun 23 2017 Charalampos Stratakis <cstratak@redhat.com> - 3.6.1-7
- Fix test_alpn_protocols from test_ssl
- Do not require rebundled setuptools dependencies
* Tue May 09 2017 Charalampos Stratakis <cstratak@redhat.com> - 3.6.1-6
- Enable profile guided optimizations for x86_64 and i686 architectures
- Update to a newer implementation of PEP 538
- Update description to reflect that Python 3 is now the default Python
* Fri May 05 2017 Charalampos Stratakis <cstratak@redhat.com> - 3.6.1-5
- Update PEP 538 to the latest upstream implementation
* Tue Apr 18 2017 Charalampos Stratakis <cstratak@redhat.com> - 3.6.1-4
- Enable link time optimizations
- Move windows executables to the devel subpackage (rhbz#1426257)
* Thu Apr 13 2017 Tomas Orsava <torsava@redhat.com> - 3.6.1-3
- Rename python3.Xdm-config script from -debug to be arch specific
Resolves: rhbz#1179073
@ -1664,16 +1748,16 @@ Resolves: rhbz#1179073
* Wed Apr 05 2017 Charalampos Stratakis <cstratak@redhat.com> - 3.6.1-2
- Install the Makefile in its proper location (rhbz#1438219)
* Wed Mar 22 2017 Iryna Shcherbina <ishcherb@redhat.com> - 3.6.1-1
* Mon Apr 03 2017 Iryna Shcherbina <ishcherb@redhat.com> - 3.6.1-1
- Update to version 3.6.1 final
* Tue Mar 21 2017 Tomas Orsava <torsava@redhat.com> - 3.6.1-0.2.rc1
- Fix syntax error in %%py_byte_compile macro (rhbz#1433569)
* Thu Mar 16 2017 Iryna Shcherbina <ishcherb@redaht.com> - 3.6.1-0.1.rc1
* Mon Apr 03 2017 Iryna Shcherbina <ishcherb@redaht.com> - 3.6.1-0.1.rc1
- Update to Python 3.6.1 release candidate 1
- Add patch 264 to skip a known test failure on aarch64
* Tue Mar 21 2017 Tomas Orsava <torsava@redhat.com> - 3.6.0-22
- Fix syntax error in %%py_byte_compile macro (rhbz#1433569)
* Fri Mar 10 2017 Charalampos Stratakis <cstratak@redhat.com> - 3.6.0-21
- Use proper command line parsing in _testembed
- Backport of PEP 538: Coercing the legacy C locale to a UTF-8 based locale

View File

@ -1 +1 @@
SHA512 (Python-3.6.1.tar.xz) = 8605fb7019386fec227d4b06d06f00ae500a8a89df289bfe6141bb56196c75483a60cc0ee553930742b31cefce68add5ccf226e0f27b7b915f5026d597e1ac29
SHA512 (Python-3.6.5.tar.xz) = 6b26fcd296b9bd8e67861eff10d14db7507711ddba947288d16d6def53135c39326b7f969c04bb2b2993f924d9e7ad3f5c5282a3915760bc0885cf0a8ea5eb51

View File

@ -1,25 +0,0 @@
diff -up Python-3.4.0/Lib/test/test_asyncio/test_events.py.orig Python-3.4.0/Lib/test/test_asyncio/test_events.py
--- Python-3.4.0/Lib/test/test_asyncio/test_events.py.orig 2014-04-15 13:18:49.696215288 +0200
+++ Python-3.4.0/Lib/test/test_asyncio/test_events.py 2014-04-15 13:18:56.104258453 +0200
@@ -1528,7 +1528,7 @@ class SubprocessTestsMixin:
self.check_terminated(proto.returncode)
transp.close()
- @unittest.skipIf(sys.platform == 'win32', "Don't have SIGHUP")
+ @unittest.skipIf(True, "Temporarily skipped (rhbz#1088233)")
def test_subprocess_send_signal(self):
prog = os.path.join(os.path.dirname(__file__), 'echo.py')
diff -up Python-3.4.0/Lib/test/test_asyncio/test_subprocess.py.orig Python-3.4.0/Lib/test/test_asyncio/test_subprocess.py
--- Python-3.4.0/Lib/test/test_asyncio/test_subprocess.py.orig 2014-04-17 12:03:32.777827520 +0200
+++ Python-3.4.0/Lib/test/test_asyncio/test_subprocess.py 2014-04-17 12:04:37.614210481 +0200
@@ -108,7 +108,7 @@ class SubprocessMixin:
else:
self.assertEqual(-signal.SIGTERM, returncode)
- @unittest.skipIf(sys.platform == 'win32', "Don't have SIGHUP")
+ @unittest.skipIf(True, "Temporarily skipped (rhbz#1088233)")
def test_send_signal(self):
code = 'import time; print("sleeping", flush=True); time.sleep(3600)'
args = [sys.executable, '-c', code]