Compare commits
41 Commits
Author | SHA1 | Date |
---|---|---|
|
111d8abb6c | |
|
8e08331a37 | |
|
d647195bcb | |
|
e99f00f29d | |
|
66a03df063 | |
|
9518239d87 | |
|
8b019d678b | |
|
f21dd01d2a | |
|
58a18acd4d | |
|
22a5417452 | |
|
ffd80345f3 | |
|
f15b8971d4 | |
|
6e6da4af17 | |
|
1001aba943 | |
|
ac4ce3facf | |
|
8be884894c | |
|
d87ca42573 | |
|
09ce861b30 | |
|
8db5ee258f | |
|
783f35b7f8 | |
|
16b657d7d6 | |
|
8227c33d21 | |
|
b9f2533095 | |
|
44e2147189 | |
|
05e1bafe57 | |
|
8ff39725bf | |
|
11f038e300 | |
|
fc4e993391 | |
|
28f0c0c422 | |
|
8b94f726d7 | |
|
1d013eb47b | |
|
63656420a3 | |
|
368ff01e1e | |
|
e890527e80 | |
|
ec7e3db6a1 | |
|
8fbcd4d716 | |
|
5845251a7e | |
|
ccd228fc23 | |
|
e44cd6a31b | |
|
8a619e5ede | |
|
5bd040bde9 |
|
@ -96,7 +96,7 @@ index f698927..bc977b5 100644
|
||||||
@@ -248,8 +248,8 @@ class HelperFunctionsTests(unittest.TestCase):
|
@@ -248,8 +248,8 @@ class HelperFunctionsTests(unittest.TestCase):
|
||||||
self.assertEqual(dirs[1], wanted)
|
self.assertEqual(dirs[1], wanted)
|
||||||
elif os.sep == '/':
|
elif os.sep == '/':
|
||||||
# OS X non-framwework builds, Linux, FreeBSD, etc
|
# OS X non-framework builds, Linux, FreeBSD, etc
|
||||||
- self.assertEqual(len(dirs), 1)
|
- self.assertEqual(len(dirs), 1)
|
||||||
- wanted = os.path.join('xoxo', 'lib',
|
- wanted = os.path.join('xoxo', 'lib',
|
||||||
+ self.assertEqual(len(dirs), 2)
|
+ self.assertEqual(len(dirs), 2)
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
diff --git a/Makefile.pre.in b/Makefile.pre.in
|
diff --git a/Makefile.pre.in b/Makefile.pre.in
|
||||||
index 70e5927..04c8e3d 100644
|
index 4b093e3..1088435 100644
|
||||||
--- a/Makefile.pre.in
|
--- a/Makefile.pre.in
|
||||||
+++ b/Makefile.pre.in
|
+++ b/Makefile.pre.in
|
||||||
@@ -556,7 +556,7 @@ clinic: $(BUILDPYTHON) $(srcdir)/Modules/_blake2/blake2s_impl.c
|
@@ -543,7 +543,7 @@ clinic: check-clean-src $(srcdir)/Modules/_blake2/blake2s_impl.c
|
||||||
$(RUNSHARED) $(PYTHON_FOR_BUILD) ./Tools/clinic/clinic.py --make
|
$(PYTHON_FOR_REGEN) ./Tools/clinic/clinic.py --make
|
||||||
|
|
||||||
# Build the interpreter
|
# Build the interpreter
|
||||||
-$(BUILDPYTHON): Programs/python.o $(LIBRARY) $(LDLIBRARY) $(PY3LIBRARY)
|
-$(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)
|
$(LINKCC) $(PY_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/python.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
|
||||||
|
|
||||||
platform: $(BUILDPYTHON) pybuilddir.txt
|
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
|
$(PYTHON_FOR_BUILD) $(srcdir)/setup.py $$quiet build
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ index 70e5927..04c8e3d 100644
|
||||||
libpython$(LDVERSION).so: $(LIBRARY_OBJS)
|
libpython$(LDVERSION).so: $(LIBRARY_OBJS)
|
||||||
if test $(INSTSONAME) != $(LDLIBRARY); then \
|
if test $(INSTSONAME) != $(LDLIBRARY); then \
|
||||||
$(BLDSHARED) -Wl,-h$(INSTSONAME) -o $(INSTSONAME) $(LIBRARY_OBJS) $(MODLIBS) $(SHLIBS) $(LIBC) $(LIBM) $(LDLAST); \
|
$(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 "-----------------------------------------------"; \
|
echo "-----------------------------------------------"; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ index 70e5927..04c8e3d 100644
|
||||||
$(LINKCC) $(PY_LDFLAGS) $(LINKFORSHARED) -o $@ Programs/_testembed.o $(BLDLIBRARY) $(LIBS) $(MODLIBS) $(SYSLIBS) $(LDLAST)
|
$(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; \
|
else true; \
|
||||||
fi; \
|
fi; \
|
||||||
done
|
done
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
diff -r de35eae9048a config.sub
|
diff --git a/config.sub b/config.sub
|
||||||
--- a/config.sub Wed Apr 24 23:33:20 2013 +0200
|
index 40ea5df..932128b 100755
|
||||||
+++ b/config.sub Thu Apr 25 08:51:00 2013 +0200
|
--- a/config.sub
|
||||||
@@ -1008,7 +1008,7 @@
|
+++ b/config.sub
|
||||||
|
@@ -1045,7 +1045,7 @@ case $basic_machine in
|
||||||
;;
|
;;
|
||||||
ppc64) basic_machine=powerpc64-unknown
|
ppc64) basic_machine=powerpc64-unknown
|
||||||
;;
|
;;
|
||||||
- ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
|
- ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
+ ppc64-* | ppc64p7-*) 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
|
basic_machine=powerpc64le-unknown
|
||||||
|
|
|
@ -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:
|
|
|
@ -1,6 +1,7 @@
|
||||||
diff -Nur Python-3.4.1/Lib/ensurepip/__init__.py Python-3.4.1-rewheel/Lib/ensurepip/__init__.py
|
diff --git a/Lib/ensurepip/__init__.py b/Lib/ensurepip/__init__.py
|
||||||
--- Python-3.4.1/Lib/ensurepip/__init__.py 2014-08-21 10:49:30.792695824 +0200
|
index d69e09f..5cb12df 100644
|
||||||
+++ Python-3.4.1-rewheel/Lib/ensurepip/__init__.py 2014-08-21 10:10:41.958341726 +0200
|
--- a/Lib/ensurepip/__init__.py
|
||||||
|
+++ b/Lib/ensurepip/__init__.py
|
||||||
@@ -1,8 +1,10 @@
|
@@ -1,8 +1,10 @@
|
||||||
import os
|
import os
|
||||||
import os.path
|
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"]
|
__all__ = ["version", "bootstrap"]
|
||||||
@@ -38,6 +40,8 @@
|
@@ -25,6 +27,8 @@ def _run_pip(args, additional_paths=None):
|
||||||
|
|
||||||
# Install the bundled software
|
# Install the bundled software
|
||||||
import pip
|
import pip
|
||||||
+ if args[0] in ["install", "list", "wheel"]:
|
+ if args[0] in ["install", "list", "wheel"]:
|
||||||
+ args.append('--pre')
|
+ 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
|
# omit pip and easy_install
|
||||||
os.environ["ENSUREPIP_OPTIONS"] = "install"
|
os.environ["ENSUREPIP_OPTIONS"] = "install"
|
||||||
|
|
||||||
|
|
|
@ -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))
|
|
|
@ -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
|
|
|
@ -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!
|
|
||||||
|
|
|
@ -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')
|
|
|
@ -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",
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
|
@ -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
|
@ -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):
|
|
|
@ -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
|
|
@ -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)
|
|
@ -1,15 +1,14 @@
|
||||||
diff -up Python-3.1.1/Lib/distutils/unixccompiler.py.rpath Python-3.1.1/Lib/distutils/unixccompiler.py
|
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.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
|
+++ 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":
|
if sys.platform == "cygwin":
|
||||||
exe_extension = ".exe"
|
exe_extension = ".exe"
|
||||||
|
|
||||||
+ def _fix_lib_args(self, libraries, library_dirs, runtime_library_dirs):
|
+ def _fix_lib_args(self, libraries, library_dirs, runtime_library_dirs):
|
||||||
+ """Remove standard library path from rpath"""
|
+ """Remove standard library path from rpath"""
|
||||||
+ libraries, library_dirs, runtime_library_dirs = super(
|
+ libraries, library_dirs, runtime_library_dirs = super()._fix_lib_args(
|
||||||
+ self.__class__, self)._fix_lib_args(libraries, library_dirs,
|
+ libraries, library_dirs, runtime_library_dirs)
|
||||||
+ runtime_library_dirs)
|
|
||||||
+ libdir = sysconfig.get_config_var('LIBDIR')
|
+ libdir = sysconfig.get_config_var('LIBDIR')
|
||||||
+ if runtime_library_dirs and (libdir in runtime_library_dirs):
|
+ if runtime_library_dirs and (libdir in runtime_library_dirs):
|
||||||
+ runtime_library_dirs.remove(libdir)
|
+ runtime_library_dirs.remove(libdir)
|
||||||
|
|
|
@ -3,8 +3,23 @@
|
||||||
# Python's compile_all module only works on directories, and requires a max
|
# Python's compile_all module only works on directories, and requires a max
|
||||||
# recursion depth
|
# 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()\
|
%py_byte_compile()\
|
||||||
|
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"\
|
python_binary="%1"\
|
||||||
bytecode_compilation_path="%2"\
|
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:]]' || :\
|
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}
|
%{nil}
|
||||||
|
|
|
@ -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) ')
|
256
python3.spec
256
python3.spec
|
@ -122,8 +122,10 @@
|
||||||
# ==================
|
# ==================
|
||||||
Summary: Version 3 of the Python programming language aka Python 3000
|
Summary: Version 3 of the Python programming language aka Python 3000
|
||||||
Name: python3
|
Name: python3
|
||||||
Version: %{pybasever}.1
|
# WARNING When rebasing to a new Python version,
|
||||||
Release: 3%{?dist}
|
# remember to update the python3-docs package as well
|
||||||
|
Version: %{pybasever}.5
|
||||||
|
Release: 1%{?dist}
|
||||||
License: Python
|
License: Python
|
||||||
Group: Development/Languages
|
Group: Development/Languages
|
||||||
|
|
||||||
|
@ -138,7 +140,6 @@ BuildRequires: autoconf
|
||||||
BuildRequires: bluez-libs-devel
|
BuildRequires: bluez-libs-devel
|
||||||
BuildRequires: bzip2
|
BuildRequires: bzip2
|
||||||
BuildRequires: bzip2-devel
|
BuildRequires: bzip2-devel
|
||||||
BuildRequires: db4-devel >= 4.7
|
|
||||||
|
|
||||||
# expat 2.1.0 added the symbol XML_SetHashSalt without bumping SONAME. We use
|
# 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:
|
# 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: sqlite-devel
|
||||||
BuildRequires: desktop-file-utils
|
BuildRequires: desktop-file-utils
|
||||||
BuildRequires: libappstream-glib
|
BuildRequires: libappstream-glib
|
||||||
|
BuildRequires: gdb
|
||||||
|
|
||||||
BuildRequires: systemtap-sdt-devel
|
BuildRequires: systemtap-sdt-devel
|
||||||
BuildRequires: systemtap-devel
|
BuildRequires: systemtap-devel
|
||||||
|
@ -184,10 +186,6 @@ BuildRequires: zlib-devel
|
||||||
|
|
||||||
%if 0%{?with_rewheel}
|
%if 0%{?with_rewheel}
|
||||||
BuildRequires: python3-setuptools
|
BuildRequires: python3-setuptools
|
||||||
BuildRequires: python3-six
|
|
||||||
BuildRequires: python3-pyparsing
|
|
||||||
BuildRequires: python3-appdirs
|
|
||||||
BuildRequires: python3-packaging
|
|
||||||
BuildRequires: python3-pip
|
BuildRequires: python3-pip
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
@ -405,37 +403,6 @@ Patch206: 00206-remove-hf-from-arm-triplet.patch
|
||||||
# Fedora needs the default mips64-linux-gnu
|
# Fedora needs the default mips64-linux-gnu
|
||||||
Patch243: 00243-fix-mips64-triplet.patch
|
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 #
|
# 00262 #
|
||||||
# Backport of PEP 538: Coercing the legacy C locale to a UTF-8 based locale
|
# Backport of PEP 538: Coercing the legacy C locale to a UTF-8 based locale
|
||||||
# https://www.python.org/dev/peps/pep-0538/
|
# 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
|
# Original proposal: https://bugzilla.redhat.com/show_bug.cgi?id=1404918
|
||||||
Patch262: 00262-pep538_coerce_legacy_c_locale.patch
|
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 ^^^)
|
# (New patches go here ^^^)
|
||||||
#
|
#
|
||||||
# When adding new patches to "python" and "python3" in Fedora, EL, etc.,
|
# 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
|
# 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
|
# add correct arch for ppc64/ppc64le
|
||||||
# it should be ppc64le-linux-gnu/ppc64-linux-gnu instead powerpc64le-linux-gnu/powerpc64-linux-gnu
|
# it should be ppc64le-linux-gnu/ppc64-linux-gnu instead powerpc64le-linux-gnu/powerpc64-linux-gnu
|
||||||
Patch5001: python3-powerppc-arch.patch
|
Patch5001: python3-powerppc-arch.patch
|
||||||
|
@ -491,13 +462,24 @@ Requires: python3-pip
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%description
|
%description
|
||||||
Python 3 is a new version of the language that is incompatible with the 2.x
|
Python is an interpreted, interactive, object-oriented programming
|
||||||
line of releases. The language is mostly the same, but many details, especially
|
language often compared to Tcl, Perl, Scheme or Java. Python includes
|
||||||
how built-in objects like dictionaries and strings work, have changed
|
modules, classes, exceptions, very high level dynamic data types
|
||||||
considerably, and a lot of deprecated features have finally been removed.
|
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
|
%package libs
|
||||||
Summary: Python 3 runtime libraries
|
Summary: Python runtime libraries
|
||||||
Group: Development/Libraries
|
Group: Development/Libraries
|
||||||
# For Modularity purpose we need not to include the dist-tag int he dependency
|
# 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)
|
%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}
|
Obsoletes: python3-enum34 < 1.0.4-5%{?dist}
|
||||||
|
|
||||||
%description libs
|
%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
|
%package -n system-python
|
||||||
Summary: System Python executable
|
Summary: System Python executable
|
||||||
|
@ -542,35 +527,49 @@ Requires: glibc%{?_isa} >= 2.24.90-26
|
||||||
This package contains files used to embed System Python into applications.
|
This package contains files used to embed System Python into applications.
|
||||||
|
|
||||||
%package devel
|
%package devel
|
||||||
Summary: Libraries and header files needed for Python 3 development
|
Summary: Libraries and header files needed for Python development
|
||||||
Group: Development/Libraries
|
Group: Development/Libraries
|
||||||
Requires: %{name} = %{version}-%{release}
|
Requires: %{name} = %{version}-%{release}
|
||||||
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
|
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
|
||||||
BuildRequires: python-rpm-macros
|
BuildRequires: python-rpm-macros
|
||||||
Requires: python-rpm-macros
|
Requires: python-rpm-macros
|
||||||
Requires: python3-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}
|
Conflicts: %{name} < %{version}-%{release}
|
||||||
|
|
||||||
%description devel
|
%description devel
|
||||||
This package contains libraries and header files used to build applications
|
The Python programming language's interpreter can be extended with
|
||||||
with and native libraries for Python 3
|
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
|
%package tools
|
||||||
Summary: A collection of tools included with Python 3
|
Summary: A collection of tools included with Python
|
||||||
Group: Development/Tools
|
Group: Development/Tools
|
||||||
Requires: %{name} = %{version}-%{release}
|
Requires: %{name} = %{version}-%{release}
|
||||||
Requires: %{name}-tkinter = %{version}-%{release}
|
Requires: %{name}-tkinter = %{version}-%{release}
|
||||||
|
|
||||||
%description tools
|
%description tools
|
||||||
This package contains several tools included with Python 3
|
This package contains several tools included with Python
|
||||||
|
|
||||||
%package tkinter
|
%package tkinter
|
||||||
Summary: A GUI toolkit for Python 3
|
Summary: A GUI toolkit for Python
|
||||||
Group: Development/Languages
|
Group: Development/Languages
|
||||||
Requires: %{name} = %{version}-%{release}
|
Requires: %{name} = %{version}-%{release}
|
||||||
|
|
||||||
%description tkinter
|
%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.
|
the Python scripting language.
|
||||||
|
|
||||||
%package test
|
%package test
|
||||||
|
@ -585,11 +584,11 @@ These are in a separate package to save space, as they are almost never used
|
||||||
in production.
|
in production.
|
||||||
|
|
||||||
You might want to install the python3-test package if you're developing
|
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}
|
%if 0%{?with_debug_build}
|
||||||
%package debug
|
%package debug
|
||||||
Summary: Debug version of the Python 3 runtime
|
Summary: Debug version of the Python runtime
|
||||||
Group: Applications/System
|
Group: Applications/System
|
||||||
|
|
||||||
# The debug build is an all-in-one package version of the regular build, and
|
# 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}
|
Requires: %{name}-tools%{?_isa} = %{version}-%{release}
|
||||||
|
|
||||||
%description debug
|
%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
|
features enabled, aimed at advanced Python users, such as developers of Python
|
||||||
extension modules.
|
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.
|
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
|
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.
|
modules are ABI-incompatible with those built for the standard runtime.
|
||||||
|
|
||||||
It shares installation directories with the standard Python 3 runtime, so that
|
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"
|
.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
|
suffix ("foo_d.so" rather than "foo.so") so that each Python implementation
|
||||||
can load its own extensions.
|
can load its own extensions.
|
||||||
%endif # with_debug_build
|
%endif # with_debug_build
|
||||||
|
|
||||||
|
@ -655,7 +654,7 @@ rm -r Modules/zlib || exit 1
|
||||||
#done
|
#done
|
||||||
|
|
||||||
%if 0%{with_rewheel}
|
%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
|
sed -r -i s/'_PIP_VERSION = "[0-9.]+"'/'_PIP_VERSION = "%{pip_version}"'/ Lib/ensurepip/__init__.py
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
@ -693,16 +692,9 @@ sed -r -i s/'_PIP_VERSION = "[0-9.]+"'/'_PIP_VERSION = "%{pip_version}"'/ Lib/en
|
||||||
%patch205 -p1
|
%patch205 -p1
|
||||||
%patch206 -p1
|
%patch206 -p1
|
||||||
%patch243 -p1
|
%patch243 -p1
|
||||||
%patch249 -p1
|
|
||||||
%patch252 -p1
|
|
||||||
%patch258 -p1
|
|
||||||
%patch260 -p1
|
|
||||||
%patch261 -p1
|
|
||||||
%patch262 -p1
|
%patch262 -p1
|
||||||
|
%patch292 -p1
|
||||||
%ifarch aarch64
|
%patch301 -p1
|
||||||
%patch264 -p1
|
|
||||||
%endif
|
|
||||||
|
|
||||||
# Currently (2010-01-15), http://docs.python.org/library is for 2.6, and there
|
# 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.
|
# 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 OPT="$RPM_OPT_FLAGS -D_GNU_SOURCE -fPIC -fwrapv"
|
||||||
export LINKCC="gcc"
|
export LINKCC="gcc"
|
||||||
export CFLAGS="$CFLAGS `pkg-config --cflags openssl`"
|
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
|
# Define a function, for how to perform a "build" of python for a given
|
||||||
|
@ -760,6 +752,7 @@ BuildPython() {
|
||||||
--with-system-ffi \
|
--with-system-ffi \
|
||||||
--enable-loadable-sqlite-extensions \
|
--enable-loadable-sqlite-extensions \
|
||||||
--with-dtrace \
|
--with-dtrace \
|
||||||
|
--with-lto \
|
||||||
%if 0%{?with_systemtap}
|
%if 0%{?with_systemtap}
|
||||||
--with-systemtap \
|
--with-systemtap \
|
||||||
%endif
|
%endif
|
||||||
|
@ -802,7 +795,11 @@ BuildPython debug \
|
||||||
BuildPython optimized \
|
BuildPython optimized \
|
||||||
python \
|
python \
|
||||||
python%{pybasever} \
|
python%{pybasever} \
|
||||||
|
%ifarch %{ix86} x86_64
|
||||||
|
"--without-ensurepip --enable-optimizations" \
|
||||||
|
%else
|
||||||
"--without-ensurepip" \
|
"--without-ensurepip" \
|
||||||
|
%endif
|
||||||
true
|
true
|
||||||
|
|
||||||
# ======================================================
|
# ======================================================
|
||||||
|
@ -972,8 +969,9 @@ sed -i -e "s/'pyconfig.h'/'%{_pyconfig_h}'/" \
|
||||||
# Switch all shebangs to refer to the specific Python version.
|
# Switch all shebangs to refer to the specific Python version.
|
||||||
LD_LIBRARY_PATH=./build/optimized ./build/optimized/python \
|
LD_LIBRARY_PATH=./build/optimized ./build/optimized/python \
|
||||||
Tools/scripts/pathfix.py \
|
Tools/scripts/pathfix.py \
|
||||||
-i "%{_bindir}/python%{pybasever}" \
|
-i "%{_bindir}/python%{pybasever}" -pn \
|
||||||
%{buildroot}
|
%{buildroot} \
|
||||||
|
%{?with_gdb_hooks:%{buildroot}$DirHoldingGdbPy/*.py}
|
||||||
|
|
||||||
# Remove shebang lines from .py files that aren't executable, and
|
# Remove shebang lines from .py files that aren't executable, and
|
||||||
# remove executability from .py files that don't have a shebang line:
|
# 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
|
# aarch64, see upstream bug http://bugs.python.org/issue21131
|
||||||
WITHIN_PYTHON_RPM_BUILD= \
|
WITHIN_PYTHON_RPM_BUILD= \
|
||||||
LD_LIBRARY_PATH=$ConfDir $ConfDir/python -m test.regrtest \
|
LD_LIBRARY_PATH=$ConfDir $ConfDir/python -m test.regrtest \
|
||||||
--verbose --findleaks \
|
-wW --slowest --findleaks \
|
||||||
-x test_distutils \
|
-x test_distutils \
|
||||||
%ifarch ppc64le aarch64
|
%ifarch ppc64le aarch64
|
||||||
-x test_faulthandler \
|
-x test_faulthandler \
|
||||||
|
@ -1402,7 +1400,7 @@ fi
|
||||||
%{pylibdir}/distutils/__pycache__/*%{bytecode_suffixes}
|
%{pylibdir}/distutils/__pycache__/*%{bytecode_suffixes}
|
||||||
%{pylibdir}/distutils/README
|
%{pylibdir}/distutils/README
|
||||||
%{pylibdir}/distutils/command
|
%{pylibdir}/distutils/command
|
||||||
|
%exclude %{pylibdir}/distutils/command/wininst-*.exe
|
||||||
|
|
||||||
%dir %{pylibdir}/email/
|
%dir %{pylibdir}/email/
|
||||||
%dir %{pylibdir}/email/__pycache__/
|
%dir %{pylibdir}/email/__pycache__/
|
||||||
|
@ -1467,6 +1465,7 @@ fi
|
||||||
%defattr(-,root,root)
|
%defattr(-,root,root)
|
||||||
%{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/*
|
%{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/*
|
||||||
%exclude %{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/Makefile
|
%exclude %{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/Makefile
|
||||||
|
%{pylibdir}/distutils/command/wininst-*.exe
|
||||||
%{_includedir}/python%{LDVERSION_optimized}/*.h
|
%{_includedir}/python%{LDVERSION_optimized}/*.h
|
||||||
%exclude %{_includedir}/python%{LDVERSION_optimized}/%{_pyconfig_h}
|
%exclude %{_includedir}/python%{LDVERSION_optimized}/%{_pyconfig_h}
|
||||||
%doc Misc/README.valgrind Misc/valgrind-python.supp Misc/gdbinit
|
%doc Misc/README.valgrind Misc/valgrind-python.supp Misc/gdbinit
|
||||||
|
@ -1657,6 +1656,91 @@ fi
|
||||||
# ======================================================
|
# ======================================================
|
||||||
|
|
||||||
%changelog
|
%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
|
* Thu Apr 13 2017 Tomas Orsava <torsava@redhat.com> - 3.6.1-3
|
||||||
- Rename python3.Xdm-config script from -debug to be arch specific
|
- Rename python3.Xdm-config script from -debug to be arch specific
|
||||||
Resolves: rhbz#1179073
|
Resolves: rhbz#1179073
|
||||||
|
@ -1664,16 +1748,16 @@ Resolves: rhbz#1179073
|
||||||
* Wed Apr 05 2017 Charalampos Stratakis <cstratak@redhat.com> - 3.6.1-2
|
* Wed Apr 05 2017 Charalampos Stratakis <cstratak@redhat.com> - 3.6.1-2
|
||||||
- Install the Makefile in its proper location (rhbz#1438219)
|
- 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
|
- Update to version 3.6.1 final
|
||||||
|
|
||||||
* Tue Mar 21 2017 Tomas Orsava <torsava@redhat.com> - 3.6.1-0.2.rc1
|
* Mon Apr 03 2017 Iryna Shcherbina <ishcherb@redaht.com> - 3.6.1-0.1.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
|
|
||||||
- Update to Python 3.6.1 release candidate 1
|
- Update to Python 3.6.1 release candidate 1
|
||||||
- Add patch 264 to skip a known test failure on aarch64
|
- 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
|
* Fri Mar 10 2017 Charalampos Stratakis <cstratak@redhat.com> - 3.6.0-21
|
||||||
- Use proper command line parsing in _testembed
|
- Use proper command line parsing in _testembed
|
||||||
- Backport of PEP 538: Coercing the legacy C locale to a UTF-8 based locale
|
- Backport of PEP 538: Coercing the legacy C locale to a UTF-8 based locale
|
||||||
|
|
2
sources
2
sources
|
@ -1 +1 @@
|
||||||
SHA512 (Python-3.6.1.tar.xz) = 8605fb7019386fec227d4b06d06f00ae500a8a89df289bfe6141bb56196c75483a60cc0ee553930742b31cefce68add5ccf226e0f27b7b915f5026d597e1ac29
|
SHA512 (Python-3.6.5.tar.xz) = 6b26fcd296b9bd8e67861eff10d14db7507711ddba947288d16d6def53135c39326b7f969c04bb2b2993f924d9e7ad3f5c5282a3915760bc0885cf0a8ea5eb51
|
||||||
|
|
|
@ -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]
|
|
Loading…
Reference in New Issue