First alpha build of PyPy 3.3
This commit is contained in:
parent
092bdc18b3
commit
343676a899
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
||||
/pypy3-2.4.0-src.tar.bz2
|
||||
/pypy3.3-v5.2.0-alpha1-src.tar.bz2
|
||||
|
13
001-nevertty.patch
Normal file
13
001-nevertty.patch
Normal file
@ -0,0 +1,13 @@
|
||||
diff --git a/rpython/tool/ansi_print.py b/rpython/tool/ansi_print.py
|
||||
index bfa40be..29dd332 100644
|
||||
--- a/rpython/tool/ansi_print.py
|
||||
+++ b/rpython/tool/ansi_print.py
|
||||
@@ -7,7 +7,7 @@ from py.io import ansi_print
|
||||
from rpython.tool.ansi_mandelbrot import Driver
|
||||
|
||||
|
||||
-isatty = getattr(sys.stderr, 'isatty', lambda: False)
|
||||
+isatty = lambda: False
|
||||
mandelbrot_driver = Driver()
|
||||
wrote_dot = False # global shared state
|
||||
|
@ -1,7 +1,8 @@
|
||||
diff -rup pypy-pypy-f66246c46ca3/rpython/translator/platform/__init__.py pypy-pypy-f66246c46ca3/rpython/translator/platform/__init__.py
|
||||
--- pypy-pypy-f66246c46ca3/rpython/translator/platform/__init__.py 2013-05-27 10:35:37.680237338 +0200
|
||||
+++ pypy-pypy-f66246c46ca3/rpython/translator/platform/__init__.py 2013-05-27 10:41:04.113098738 +0200
|
||||
@@ -138,6 +138,8 @@ class Platform(object):
|
||||
diff --git a/rpython/translator/platform/__init__.py b/rpython/translator/platform/__init__.py
|
||||
index 051668b..6e59acc 100644
|
||||
--- a/rpython/translator/platform/__init__.py
|
||||
+++ b/rpython/translator/platform/__init__.py
|
||||
@@ -140,6 +140,8 @@ class Platform(object):
|
||||
self._handle_error(returncode, stdout, stderr, outname)
|
||||
|
||||
def _handle_error(self, returncode, stdout, stderr, outname):
|
||||
|
@ -1,12 +1,24 @@
|
||||
diff -rup pypy-pypy-f66246c46ca3/lib_pypy/_pypy_interact.py pypy-pypy-f66246c46ca3/lib_pypy/_pypy_interact.py
|
||||
--- pypy-pypy-f66246c46ca3/lib_pypy/_pypy_interact.py 2013-05-27 10:35:37.612236951 +0200
|
||||
+++ pypy-pypy-f66246c46ca3/lib_pypy/_pypy_interact.py 2013-05-27 10:37:25.602852747 +0200
|
||||
@@ -4,7 +4,7 @@ import sys
|
||||
irc_header = "And now for something completely different"
|
||||
|
||||
|
||||
-def interactive_console(mainmodule=None, quiet=False):
|
||||
+def interactive_console(mainmodule=None, quiet=True):
|
||||
# set sys.{ps1,ps2} just before invoking the interactive interpreter. This
|
||||
# mimics what CPython does in pythonrun.c
|
||||
if not hasattr(sys, 'ps1'):
|
||||
diff --git a/lib_pypy/_pypy_interact.py b/lib_pypy/_pypy_interact.py
|
||||
index 9542f54..5e44fb4 100644
|
||||
--- a/lib_pypy/_pypy_interact.py
|
||||
+++ b/lib_pypy/_pypy_interact.py
|
||||
@@ -13,19 +13,6 @@ def interactive_console(mainmodule=None, quiet=False):
|
||||
sys.ps1 = '>>>> '
|
||||
if not hasattr(sys, 'ps2'):
|
||||
sys.ps2 = '.... '
|
||||
- #
|
||||
- if not quiet:
|
||||
- try:
|
||||
- from _pypy_irc_topic import some_topic
|
||||
- text = "%s: ``%s''" % ( irc_header, some_topic())
|
||||
- while len(text) >= 80:
|
||||
- i = text[:80].rfind(' ')
|
||||
- print(text[:i])
|
||||
- text = text[i+1:]
|
||||
- print(text)
|
||||
- except ImportError:
|
||||
- pass
|
||||
- #
|
||||
run_interactive = run_simple_interactive_console
|
||||
try:
|
||||
if not os.isatty(sys.stdin.fileno()):
|
||||
|
@ -1,179 +0,0 @@
|
||||
diff --git a/rpython/jit/metainterp/blackhole.py b/rpython/jit/metainterp/blackhole.py
|
||||
index 9b14943..b9d1c4c 100644
|
||||
--- a/rpython/jit/metainterp/blackhole.py
|
||||
+++ b/rpython/jit/metainterp/blackhole.py
|
||||
@@ -1052,35 +1052,45 @@ class BlackholeInterpreter(object):
|
||||
|
||||
@arguments("cpu", "i", "R", "d", returns="i")
|
||||
def bhimpl_residual_call_r_i(cpu, func, args_r, calldescr):
|
||||
+ workaround2200.active = True
|
||||
return cpu.bh_call_i(func, None, args_r, None, calldescr)
|
||||
@arguments("cpu", "i", "R", "d", returns="r")
|
||||
def bhimpl_residual_call_r_r(cpu, func, args_r, calldescr):
|
||||
+ workaround2200.active = True
|
||||
return cpu.bh_call_r(func, None, args_r, None, calldescr)
|
||||
@arguments("cpu", "i", "R", "d")
|
||||
def bhimpl_residual_call_r_v(cpu, func, args_r, calldescr):
|
||||
+ workaround2200.active = True
|
||||
return cpu.bh_call_v(func, None, args_r, None, calldescr)
|
||||
|
||||
@arguments("cpu", "i", "I", "R", "d", returns="i")
|
||||
def bhimpl_residual_call_ir_i(cpu, func, args_i, args_r, calldescr):
|
||||
+ workaround2200.active = True
|
||||
return cpu.bh_call_i(func, args_i, args_r, None, calldescr)
|
||||
@arguments("cpu", "i", "I", "R", "d", returns="r")
|
||||
def bhimpl_residual_call_ir_r(cpu, func, args_i, args_r, calldescr):
|
||||
+ workaround2200.active = True
|
||||
return cpu.bh_call_r(func, args_i, args_r, None, calldescr)
|
||||
@arguments("cpu", "i", "I", "R", "d")
|
||||
def bhimpl_residual_call_ir_v(cpu, func, args_i, args_r, calldescr):
|
||||
+ workaround2200.active = True
|
||||
return cpu.bh_call_v(func, args_i, args_r, None, calldescr)
|
||||
|
||||
@arguments("cpu", "i", "I", "R", "F", "d", returns="i")
|
||||
def bhimpl_residual_call_irf_i(cpu, func, args_i,args_r,args_f,calldescr):
|
||||
+ workaround2200.active = True
|
||||
return cpu.bh_call_i(func, args_i, args_r, args_f, calldescr)
|
||||
@arguments("cpu", "i", "I", "R", "F", "d", returns="r")
|
||||
def bhimpl_residual_call_irf_r(cpu, func, args_i,args_r,args_f,calldescr):
|
||||
+ workaround2200.active = True
|
||||
return cpu.bh_call_r(func, args_i, args_r, args_f, calldescr)
|
||||
@arguments("cpu", "i", "I", "R", "F", "d", returns="f")
|
||||
def bhimpl_residual_call_irf_f(cpu, func, args_i,args_r,args_f,calldescr):
|
||||
+ workaround2200.active = True
|
||||
return cpu.bh_call_f(func, args_i, args_r, args_f, calldescr)
|
||||
@arguments("cpu", "i", "I", "R", "F", "d")
|
||||
def bhimpl_residual_call_irf_v(cpu, func, args_i,args_r,args_f,calldescr):
|
||||
+ workaround2200.active = True
|
||||
return cpu.bh_call_v(func, args_i, args_r, args_f, calldescr)
|
||||
|
||||
# conditional calls - note that they cannot return stuff
|
||||
@@ -1108,44 +1118,54 @@ class BlackholeInterpreter(object):
|
||||
|
||||
@arguments("cpu", "j", "R", returns="i")
|
||||
def bhimpl_inline_call_r_i(cpu, jitcode, args_r):
|
||||
+ workaround2200.active = True
|
||||
return cpu.bh_call_i(jitcode.get_fnaddr_as_int(),
|
||||
None, args_r, None, jitcode.calldescr)
|
||||
@arguments("cpu", "j", "R", returns="r")
|
||||
def bhimpl_inline_call_r_r(cpu, jitcode, args_r):
|
||||
+ workaround2200.active = True
|
||||
return cpu.bh_call_r(jitcode.get_fnaddr_as_int(),
|
||||
None, args_r, None, jitcode.calldescr)
|
||||
@arguments("cpu", "j", "R")
|
||||
def bhimpl_inline_call_r_v(cpu, jitcode, args_r):
|
||||
+ workaround2200.active = True
|
||||
return cpu.bh_call_v(jitcode.get_fnaddr_as_int(),
|
||||
None, args_r, None, jitcode.calldescr)
|
||||
|
||||
@arguments("cpu", "j", "I", "R", returns="i")
|
||||
def bhimpl_inline_call_ir_i(cpu, jitcode, args_i, args_r):
|
||||
+ workaround2200.active = True
|
||||
return cpu.bh_call_i(jitcode.get_fnaddr_as_int(),
|
||||
args_i, args_r, None, jitcode.calldescr)
|
||||
@arguments("cpu", "j", "I", "R", returns="r")
|
||||
def bhimpl_inline_call_ir_r(cpu, jitcode, args_i, args_r):
|
||||
+ workaround2200.active = True
|
||||
return cpu.bh_call_r(jitcode.get_fnaddr_as_int(),
|
||||
args_i, args_r, None, jitcode.calldescr)
|
||||
@arguments("cpu", "j", "I", "R")
|
||||
def bhimpl_inline_call_ir_v(cpu, jitcode, args_i, args_r):
|
||||
+ workaround2200.active = True
|
||||
return cpu.bh_call_v(jitcode.get_fnaddr_as_int(),
|
||||
args_i, args_r, None, jitcode.calldescr)
|
||||
|
||||
@arguments("cpu", "j", "I", "R", "F", returns="i")
|
||||
def bhimpl_inline_call_irf_i(cpu, jitcode, args_i, args_r, args_f):
|
||||
+ workaround2200.active = True
|
||||
return cpu.bh_call_i(jitcode.get_fnaddr_as_int(),
|
||||
args_i, args_r, args_f, jitcode.calldescr)
|
||||
@arguments("cpu", "j", "I", "R", "F", returns="r")
|
||||
def bhimpl_inline_call_irf_r(cpu, jitcode, args_i, args_r, args_f):
|
||||
+ workaround2200.active = True
|
||||
return cpu.bh_call_r(jitcode.get_fnaddr_as_int(),
|
||||
args_i, args_r, args_f, jitcode.calldescr)
|
||||
@arguments("cpu", "j", "I", "R", "F", returns="f")
|
||||
def bhimpl_inline_call_irf_f(cpu, jitcode, args_i, args_r, args_f):
|
||||
+ workaround2200.active = True
|
||||
return cpu.bh_call_f(jitcode.get_fnaddr_as_int(),
|
||||
args_i, args_r, args_f, jitcode.calldescr)
|
||||
@arguments("cpu", "j", "I", "R", "F")
|
||||
def bhimpl_inline_call_irf_v(cpu, jitcode, args_i, args_r, args_f):
|
||||
+ workaround2200.active = True
|
||||
return cpu.bh_call_v(jitcode.get_fnaddr_as_int(),
|
||||
args_i, args_r, args_f, jitcode.calldescr)
|
||||
|
||||
@@ -1438,6 +1458,8 @@ class BlackholeInterpreter(object):
|
||||
if not self.nextblackholeinterp:
|
||||
self._exit_frame_with_exception(current_exc)
|
||||
return current_exc
|
||||
+ finally:
|
||||
+ workaround2200.active = False
|
||||
#
|
||||
# pass the frame's return value to the caller
|
||||
caller = self.nextblackholeinterp
|
||||
@@ -1656,3 +1678,10 @@ def convert_and_run_from_pyjitpl(metainterp, raising_exception=False):
|
||||
current_exc = lltype.nullptr(rclass.OBJECTPTR.TO)
|
||||
#
|
||||
_run_forever(firstbh, current_exc)
|
||||
+
|
||||
+# ____________________________________________________________
|
||||
+
|
||||
+class WorkaroundIssue2200(object):
|
||||
+ pass
|
||||
+workaround2200 = WorkaroundIssue2200()
|
||||
+workaround2200.active = False
|
||||
diff --git a/rpython/jit/metainterp/test/test_ajit.py b/rpython/jit/metainterp/test/test_ajit.py
|
||||
index ad81456..c820185 100644
|
||||
--- a/rpython/jit/metainterp/test/test_ajit.py
|
||||
+++ b/rpython/jit/metainterp/test/test_ajit.py
|
||||
@@ -4044,3 +4044,30 @@ class TestLLtype(BaseLLtypeTests, LLJitMixin):
|
||||
res = self.interp_operations(f, [17])
|
||||
assert res == 42
|
||||
self.check_operations_history(guard_true=1, guard_false=0)
|
||||
+
|
||||
+ def test_issue2200_recursion(self):
|
||||
+ # Reproduces issue #2200. This test contains no recursion,
|
||||
+ # but due to an unlikely combination of factors it ends up
|
||||
+ # creating an RPython-level recursion, one per loop iteration.
|
||||
+ # The recursion is: blackhole interp from the failing guard ->
|
||||
+ # does the call to enter() as a normal call -> enter() runs
|
||||
+ # can_enter_jit() as if we're interpreted -> we enter the JIT
|
||||
+ # again from the start of the loop -> the guard fails again
|
||||
+ # during the next iteration -> blackhole interp. All arrows
|
||||
+ # in the previous sentence are one or more levels of RPython
|
||||
+ # function calls.
|
||||
+ driver = JitDriver(greens=[], reds=["i"])
|
||||
+ def enter(i):
|
||||
+ driver.can_enter_jit(i=i)
|
||||
+ def f():
|
||||
+ set_param(None, 'trace_eagerness', 999999)
|
||||
+ i = 0
|
||||
+ while True:
|
||||
+ driver.jit_merge_point(i=i)
|
||||
+ i += 1
|
||||
+ if i >= 300:
|
||||
+ return i
|
||||
+ promote(i + 1) # a failing guard
|
||||
+ enter(i)
|
||||
+
|
||||
+ self.meta_interp(f, [])
|
||||
diff --git a/rpython/jit/metainterp/warmstate.py b/rpython/jit/metainterp/warmstate.py
|
||||
index 805933e..ca47f03 100644
|
||||
--- a/rpython/jit/metainterp/warmstate.py
|
||||
+++ b/rpython/jit/metainterp/warmstate.py
|
||||
@@ -405,6 +405,14 @@ class WarmEnterState(object):
|
||||
bound_reached(hash, None, *args)
|
||||
return
|
||||
|
||||
+ # Workaround for issue #2200, maybe temporary. This is not
|
||||
+ # a proper fix, but only a hack that should work well enough
|
||||
+ # for PyPy's main jitdriver... See test_issue2200_recursion
|
||||
+ from rpython.jit.metainterp.blackhole import workaround2200
|
||||
+ if workaround2200.active:
|
||||
+ workaround2200.active = False
|
||||
+ return
|
||||
+
|
||||
# Here, we have found 'cell'.
|
||||
#
|
||||
if cell.flags & (JC_TRACING | JC_TEMPORARY):
|
@ -1,6 +1,6 @@
|
||||
From 9092f6266c3054befff053aa943632856cedbdba Mon Sep 17 00:00:00 2001
|
||||
From 4c0f6a6fe6c71009ab4a6b3716e70af021e04904 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
|
||||
Date: Fri, 1 Jul 2016 11:42:53 +0200
|
||||
Date: Sat, 2 Jul 2016 20:18:12 +0200
|
||||
Subject: [PATCH] Raise an error when STARTTLS fails
|
||||
|
||||
CVE-2016-0772 python: smtplib StartTLS stripping attack
|
||||
@ -15,10 +15,10 @@ Based on an upstream change by Benjamin Peterson <benjamin@python.org>
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/lib-python/3/smtplib.py b/lib-python/3/smtplib.py
|
||||
index 679e478..1aacfaf 100644
|
||||
index 57f181b..5656cc6 100755
|
||||
--- a/lib-python/3/smtplib.py
|
||||
+++ b/lib-python/3/smtplib.py
|
||||
@@ -666,6 +666,11 @@ class SMTP:
|
||||
@@ -680,6 +680,11 @@ class SMTP:
|
||||
self.ehlo_resp = None
|
||||
self.esmtp_features = {}
|
||||
self.does_esmtp = 0
|
||||
|
@ -1,6 +1,6 @@
|
||||
From 82dc922c7c4771ef789f5b395f54a603c693b05e Mon Sep 17 00:00:00 2001
|
||||
From 9a8db191cf8a3557a24e91081bf434d581b98c5a Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
|
||||
Date: Fri, 1 Jul 2016 13:08:55 +0200
|
||||
Date: Sat, 2 Jul 2016 20:20:58 +0200
|
||||
Subject: [PATCH] Disabled HTTP header injections in http.client.
|
||||
|
||||
CVE-2016-5699 python: http protocol steam injection attack
|
||||
@ -16,7 +16,7 @@ Based on an upstream change by Demian Brecht and Serhiy Storchaka
|
||||
2 files changed, 94 insertions(+)
|
||||
|
||||
diff --git a/lib-python/3/http/client.py b/lib-python/3/http/client.py
|
||||
index 5466d06..1d215d8 100644
|
||||
index e05c84d..476d6c8 100644
|
||||
--- a/lib-python/3/http/client.py
|
||||
+++ b/lib-python/3/http/client.py
|
||||
@@ -70,6 +70,7 @@ import email.parser
|
||||
@ -27,9 +27,9 @@ index 5466d06..1d215d8 100644
|
||||
import socket
|
||||
import collections
|
||||
from urllib.parse import urlsplit
|
||||
@@ -207,6 +208,34 @@ MAXAMOUNT = 1048576
|
||||
# maximal line length when calling readline().
|
||||
_MAXLINE = 65536
|
||||
@@ -217,6 +218,34 @@ _MAXLINE = 65536
|
||||
_MAXHEADERS = 100
|
||||
|
||||
|
||||
+# Header name/value ABNF (http://tools.ietf.org/html/rfc7230#section-3.2)
|
||||
+#
|
||||
@ -62,7 +62,7 @@ index 5466d06..1d215d8 100644
|
||||
class HTTPMessage(email.message.Message):
|
||||
# XXX The only usage of this method is in
|
||||
# http.server.CGIHTTPRequestHandler. Maybe move the code there so
|
||||
@@ -953,12 +982,20 @@ class HTTPConnection:
|
||||
@@ -1035,12 +1064,20 @@ class HTTPConnection:
|
||||
|
||||
if hasattr(header, 'encode'):
|
||||
header = header.encode('ascii')
|
||||
@ -73,7 +73,7 @@ index 5466d06..1d215d8 100644
|
||||
values = list(values)
|
||||
for i, one_value in enumerate(values):
|
||||
if hasattr(one_value, 'encode'):
|
||||
values[i] = one_value.encode('latin1')
|
||||
values[i] = one_value.encode('latin-1')
|
||||
elif isinstance(one_value, int):
|
||||
values[i] = str(one_value).encode('ascii')
|
||||
+
|
||||
@ -84,12 +84,12 @@ index 5466d06..1d215d8 100644
|
||||
header = header + b': ' + value
|
||||
self._output(header)
|
||||
diff --git a/lib-python/3/test/test_httplib.py b/lib-python/3/test/test_httplib.py
|
||||
index 420302c..31d3bd0 100644
|
||||
index c8ded92..fd71bea 100644
|
||||
--- a/lib-python/3/test/test_httplib.py
|
||||
+++ b/lib-python/3/test/test_httplib.py
|
||||
@@ -134,6 +134,33 @@ class HeaderTests(TestCase):
|
||||
conn.putheader('Content-length', 42)
|
||||
self.assertTrue(b'Content-length: 42' in conn._buffer)
|
||||
self.assertIn(b'Content-length: 42', conn._buffer)
|
||||
|
||||
+ conn.putheader('Foo', ' bar ')
|
||||
+ self.assertIn(b'Foo: bar ', conn._buffer)
|
||||
|
@ -1,12 +0,0 @@
|
||||
diff -rup pypy-pypy-f66246c46ca3/rpython/tool/ansi_print.py pypy-pypy-f66246c46ca3/rpython/tool/ansi_print.py
|
||||
--- pypy-pypy-f66246c46ca3/rpython/tool/ansi_print.py 2013-05-27 10:35:37.648237156 +0200
|
||||
+++ pypy-pypy-f66246c46ca3/rpython/tool/ansi_print.py 2013-05-28 10:15:58.200426205 +0200
|
||||
@@ -25,7 +25,7 @@ class AnsiLog:
|
||||
self.kw_to_color = self.KW_TO_COLOR.copy()
|
||||
self.kw_to_color.update(kw_to_color)
|
||||
self.file = file
|
||||
- self.fancy = True
|
||||
+ self.fancy = False
|
||||
self.isatty = getattr(sys.stderr, 'isatty', lambda: False)
|
||||
if self.fancy and self.isatty():
|
||||
self.mandelbrot_driver = Driver()
|
148
pypy3.spec
148
pypy3.spec
@ -1,6 +1,6 @@
|
||||
Name: pypy3
|
||||
Version: 2.4.0
|
||||
Release: 6%{?dist}
|
||||
Version: 5.2.0
|
||||
Release: 0.1.alpha1%{?dist}
|
||||
Summary: Python 3 implementation with a Just-In-Time compiler
|
||||
|
||||
Group: Development/Languages
|
||||
@ -116,7 +116,7 @@ URL: http://pypy.org/
|
||||
# Easy way to turn off the selftests:
|
||||
%global run_selftests 1
|
||||
|
||||
%global pypyprefix %{_libdir}/%{name}-%{version}
|
||||
%global pypyprefix %{_libdir}/pypy3-%{version}
|
||||
%global pylibver 3
|
||||
|
||||
# We refer to this subdir of the source tree in a few places during the build:
|
||||
@ -129,17 +129,17 @@ URL: http://pypy.org/
|
||||
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
|
||||
|
||||
# Source and patches:
|
||||
Source0: https://bitbucket.org/pypy/pypy/downloads/%{name}-%{version}-src.tar.bz2
|
||||
Source0: https://bitbucket.org/pypy/pypy/downloads/pypy3.3-v5.2.0-alpha1-src.tar.bz2
|
||||
|
||||
# Supply various useful RPM macros for building python modules against pypy:
|
||||
# __pypy, pypy_sitelib, pypy_sitearch
|
||||
Source2: macros.%{name}
|
||||
Source2: macros.pypy3
|
||||
|
||||
# By default, if built at a tty, the translation process renders a Mandelbrot
|
||||
# set to indicate progress.
|
||||
# This obscures useful messages, and may waste CPU cycles, so suppress it, and
|
||||
# merely render dots:
|
||||
Patch0: pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
|
||||
Patch0: 001-nevertty.patch
|
||||
|
||||
# Patch pypy.translator.platform so that stdout from "make" etc gets logged,
|
||||
# rather than just stderr, so that the command-line invocations of the compiler
|
||||
@ -152,9 +152,6 @@ Patch1: 006-always-log-stdout.patch
|
||||
# community that won't make sense outside of it). [Sorry to be a killjoy]
|
||||
Patch2: 007-remove-startup-message.patch
|
||||
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1307889
|
||||
# https://bitbucket.org/pypy/pypy/commits/c4c54cb69aba
|
||||
Patch3: 008-maximum-recursion-depth.patch
|
||||
|
||||
# CVE-2016-0772 python: smtplib StartTLS stripping attack
|
||||
# rhbz#1303647: https://bugzilla.redhat.com/show_bug.cgi?id=1303647
|
||||
@ -180,7 +177,7 @@ Patch5: 010-disabled-HTTP-header-injections-in-http.client.patch
|
||||
|
||||
# Note, pypy3 is built with pypy2, so no dependency cycle
|
||||
|
||||
%global use_self_when_building 1
|
||||
%global use_self_when_building 0
|
||||
%if 0%{use_self_when_building}
|
||||
# pypy3 can only be build with pypy2
|
||||
BuildRequires: pypy
|
||||
@ -205,6 +202,8 @@ BuildRequires: bzip2-devel
|
||||
BuildRequires: ncurses-devel
|
||||
BuildRequires: expat-devel
|
||||
BuildRequires: openssl-devel
|
||||
BuildRequires: gdbm-devel
|
||||
BuildRequires: xz-devel
|
||||
%ifnarch s390
|
||||
BuildRequires: valgrind-devel
|
||||
%endif
|
||||
@ -234,7 +233,7 @@ BuildRequires: emacs
|
||||
BuildRequires: git
|
||||
|
||||
# Metadata for the core package (the JIT build):
|
||||
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
|
||||
Requires: pypy3-libs%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description
|
||||
PyPy's implementation of Python 3, featuring a Just-In-Time compiler on some CPU
|
||||
@ -266,7 +265,7 @@ Libraries required by the various PyPy implementations of Python 3.
|
||||
%package devel
|
||||
Group: Development/Languages
|
||||
Summary: Development tools for working with PyPy3
|
||||
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||
Requires: pypy3%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description devel
|
||||
Header files for building C extension modules against PyPy3
|
||||
@ -276,13 +275,13 @@ Header files for building C extension modules against PyPy3
|
||||
%package stackless
|
||||
Group: Development/Languages
|
||||
Summary: Stackless Python interpreter built using PyPy3
|
||||
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
|
||||
Requires: pypy3-libs%{?_isa} = %{version}-%{release}
|
||||
%description stackless
|
||||
Build of PyPy3 with support for micro-threads for massive concurrency
|
||||
%endif
|
||||
|
||||
%prep
|
||||
%autosetup -n %{name}-%{version}-src -p1 -S git
|
||||
%autosetup -n pypy3.3-v5.2.0-alpha1-src -p1 -S git
|
||||
|
||||
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
|
||||
find -name "*.py" -exec \
|
||||
@ -304,20 +303,6 @@ find lib-python/%{pylibver} -name "*.py" -exec \
|
||||
"{}" \
|
||||
\;
|
||||
|
||||
# Hacky fix to allow the curses module to build on x86_64; otherwise we get:
|
||||
# cffi.ffiplatform.VerificationError: anonymous MEVENT: wrong total size
|
||||
# (we have 24, but C compiler says 20)
|
||||
# https://github.com/archlinuxcn/repo/commit/560a75090333b6de8a1de960acac5e624b444ee1
|
||||
%ifarch x86_64
|
||||
_type=unsigned
|
||||
%else
|
||||
_type=uint32_t
|
||||
%endif
|
||||
|
||||
sed -i -e "s/typedef unsigned long mmask_t/typedef $_type mmask_t/" \
|
||||
-e "s/typedef unsigned long chtype/typedef $_type chtype/" \
|
||||
lib_pypy/_curses.py
|
||||
|
||||
%build
|
||||
|
||||
BuildPyPy() {
|
||||
@ -379,8 +364,7 @@ BuildPyPy() {
|
||||
# of root pointers:
|
||||
%global gcrootfinder_options --gcrootfinder=shadowstack
|
||||
|
||||
# Prevent memory exhaustion
|
||||
export CFLAGS=$(echo "$RPM_OPT_FLAGS" | sed -e 's/-g//')
|
||||
export CFLAGS=$(echo "$RPM_OPT_FLAGS")
|
||||
|
||||
%else
|
||||
# Go with the default, which is "asmgcc"
|
||||
@ -399,7 +383,7 @@ BuildPyPy() {
|
||||
# For now, filter our CFLAGS of everything that could be conflicting with
|
||||
# pypy. Need to check these and reenable ones that are okay later.
|
||||
# Filed as https://bugzilla.redhat.com/show_bug.cgi?id=666966
|
||||
export CFLAGS=$(echo "$RPM_OPT_FLAGS" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=2//' -e 's/-fexceptions//' -e 's/-fstack-protector//' -e 's/--param=ssp-buffer-size=4//' -e 's/-O2//' -e 's/-fasynchronous-unwind-tables//' -e 's/-march=i686//' -e 's/-mtune=atom//' -e 's/-g//')
|
||||
export CFLAGS=$(echo "$RPM_OPT_FLAGS" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=2//' -e 's/-fexceptions//' -e 's/-fstack-protector//' -e 's/--param=ssp-buffer-size=4//' -e 's/-O2//' -e 's/-fasynchronous-unwind-tables//' -e 's/-march=i686//' -e 's/-mtune=atom//')
|
||||
|
||||
%endif
|
||||
|
||||
@ -425,7 +409,6 @@ BuildPyPy() {
|
||||
PYPY_USESSION_DIR=$(pwd) \
|
||||
PYPY_USESSION_BASENAME=$ExeName \
|
||||
$INTERP ../../rpython/bin/rpython \
|
||||
--output=$ExeName \
|
||||
%{gcrootfinder_options} \
|
||||
$Options \
|
||||
targetpypystandalone
|
||||
@ -442,7 +425,7 @@ BuildPyPy() {
|
||||
}
|
||||
|
||||
BuildPyPy \
|
||||
%{name} \
|
||||
pypy3 \
|
||||
%if 0%{with_jit}
|
||||
"-Ojit" \
|
||||
%else
|
||||
@ -452,7 +435,7 @@ BuildPyPy \
|
||||
|
||||
%if 0%{with_stackless}
|
||||
BuildPyPy \
|
||||
%{name}-stackless \
|
||||
pypy3-stackless \
|
||||
"--stackless"
|
||||
%endif
|
||||
|
||||
@ -498,36 +481,11 @@ InstallPyPy() {
|
||||
mkdir -p %{buildroot}/%{_bindir}
|
||||
mkdir -p %{buildroot}/%{pypyprefix}
|
||||
|
||||
InstallPyPy %{name}
|
||||
|
||||
%if 0%{with_stackless}
|
||||
InstallPyPy %{name}-stackless
|
||||
%endif
|
||||
# Run installing script, archive-name %{name}-%{version} in %{buildroot}/%{_libdir} == %{pypyprefix}
|
||||
%{bootstrap_python_interp} pypy/tool/release/package.py --archive-name %{name}-%{version} --builddir %{buildroot}/%{_libdir}
|
||||
|
||||
|
||||
# Install the various support libraries as described at:
|
||||
# http://codespeak.net/pypy/dist/pypy/doc/getting-started-python.html#installation
|
||||
# which refers to a "PREFIX" found relative to the location of the binary.
|
||||
# Given that the pypy binaries will be in /usr/bin, PREFIX can be
|
||||
# "../share/pypy-1.2" relative to that directory, i.e. /usr/share/pypy-1.2
|
||||
#
|
||||
# Running "strace" on a built binary indicates that it searches within
|
||||
# PREFIX/lib-python/modified-2.5.2
|
||||
# not
|
||||
# PREFIX/lib-python/modified.2.5.2
|
||||
# as given on the above page, i.e. it uses '-' not '.'
|
||||
|
||||
cp -a lib-python %{buildroot}/%{pypyprefix}
|
||||
|
||||
cp -a lib_pypy %{buildroot}/%{pypyprefix}
|
||||
|
||||
# Remove a text file that documents which selftests fail on Win32:
|
||||
rm %{buildroot}/%{pypyprefix}/lib-python/win32-failures.txt
|
||||
|
||||
# Remove a text file containing upstream's recipe for syncing stdlib in
|
||||
# their hg repository with cpython's:
|
||||
rm %{buildroot}/%{pypyprefix}/lib-python/stdlib-upgrade.txt
|
||||
|
||||
# Remove shebang lines from .py files that aren't executable, and
|
||||
# remove executability from .py files that don't have a shebang line:
|
||||
find \
|
||||
@ -546,6 +504,8 @@ find \
|
||||
|
||||
mkdir -p %{buildroot}/%{pypyprefix}/site-packages
|
||||
|
||||
ln -s %{pypyprefix}/bin/pypy3 %{buildroot}/%{_bindir}/pypy3
|
||||
ln -s %{pypyprefix}/bin/pypy3.3 %{buildroot}/%{_bindir}/pypy3.3
|
||||
|
||||
# pypy uses .pyc files by default (--objspace-usepycfiles), but has a slightly
|
||||
# different bytecode format to CPython. It doesn't use .pyo files: the -O flag
|
||||
@ -604,16 +564,16 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
|
||||
# Note that some of the test files deliberately contain syntax errors, so
|
||||
# we pass 0 for the second argument ("errors_terminate"):
|
||||
/usr/lib/rpm/brp-python-bytecompile \
|
||||
%{buildroot}/%{_bindir}/%{name} \
|
||||
%{buildroot}%{pypyprefix}/bin/pypy3 \
|
||||
0
|
||||
|
||||
%{buildroot}/%{pypyprefix}/%{name} -c 'import _tkinter'
|
||||
%{buildroot}/%{pypyprefix}/%{name} -c 'import tkinter'
|
||||
%{buildroot}/%{pypyprefix}/%{name} -c 'import _sqlite3'
|
||||
%{buildroot}/%{pypyprefix}/%{name} -c 'import _curses'
|
||||
%{buildroot}/%{pypyprefix}/%{name} -c 'import curses'
|
||||
%{buildroot}/%{pypyprefix}/%{name} -c 'import syslog'
|
||||
%{buildroot}/%{pypyprefix}/%{name} -c 'from _sqlite3 import *'
|
||||
%{buildroot}%{pypyprefix}/bin/pypy3 -c 'import _tkinter'
|
||||
%{buildroot}%{pypyprefix}/bin/pypy3 -c 'import tkinter'
|
||||
%{buildroot}%{pypyprefix}/bin/pypy3 -c 'import _sqlite3'
|
||||
%{buildroot}%{pypyprefix}/bin/pypy3 -c 'import _curses'
|
||||
%{buildroot}%{pypyprefix}/bin/pypy3 -c 'import curses'
|
||||
%{buildroot}%{pypyprefix}/bin/pypy3 -c 'import syslog'
|
||||
%{buildroot}%{pypyprefix}/bin/pypy3 -c 'from _sqlite3 import *'
|
||||
|
||||
# Header files for C extension modules.
|
||||
# Upstream's packaging process (pypy/tool/release/package.py)
|
||||
@ -626,8 +586,8 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
|
||||
# it's not yet clear to me how upstream plan to deal with the C extension
|
||||
# interface going forward, so let's just mimic upstream for now.
|
||||
%global pypy_include_dir %{pypyprefix}/include
|
||||
mkdir -p %{buildroot}/%{pypy_include_dir}
|
||||
cp include/*.h %{buildroot}/%{pypy_include_dir}
|
||||
mkdir -p %{buildroot}%{pypy_include_dir}
|
||||
rm -f %{buildroot}%{pypy_include_dir}/README
|
||||
|
||||
|
||||
# Capture the RPython source code files from the build within the debuginfo
|
||||
@ -677,16 +637,18 @@ find \
|
||||
# Install the JIT trace mode for Emacs:
|
||||
%if %{with_emacs}
|
||||
mkdir -p %{buildroot}/%{_emacs_sitelispdir}
|
||||
cp -a rpython/jit/tool/pypytrace-mode.el %{buildroot}/%{_emacs_sitelispdir}/%{name}trace-mode.el
|
||||
cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/%{name}trace-mode.elc
|
||||
cp -a rpython/jit/tool/pypytrace-mode.el %{buildroot}/%{_emacs_sitelispdir}/pypy3trace-mode.el
|
||||
cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/pypy3trace-mode.elc
|
||||
%endif
|
||||
|
||||
# Install macros for rpm:
|
||||
mkdir -p %{buildroot}/%{_rpmconfigdir}/macros.d
|
||||
install -m 644 %{SOURCE2} %{buildroot}/%{_rpmconfigdir}/macros.d
|
||||
|
||||
# Remove build script from the package
|
||||
rm %{buildroot}/%{pypyprefix}/lib_pypy/ctypes_config_cache/rebuild.py
|
||||
# Remove files we don't want:
|
||||
rm -f %{buildroot}%{_libdir}//pypy3-5.2.0.tar.bz2
|
||||
rm -f %{buildroot}%{pypyprefix}/LICENSE
|
||||
rm -f %{buildroot}%{pypyprefix}/README.rst
|
||||
|
||||
%check
|
||||
topdir=$(pwd)
|
||||
@ -807,10 +769,10 @@ CheckPyPy() {
|
||||
#pypy/goal/pypy pypy/test_all.py --resultlog=pypyjit_new.log
|
||||
|
||||
%if %{run_selftests}
|
||||
CheckPyPy %{name}
|
||||
CheckPyPy pypy-c
|
||||
|
||||
%if 0%{with_stackless}
|
||||
CheckPyPy %{name}-stackless
|
||||
CheckPyPy pypy3-stackless
|
||||
%endif
|
||||
|
||||
%endif # run_selftests
|
||||
@ -826,37 +788,39 @@ CheckPyPy %{name}-stackless
|
||||
|
||||
%dir %{pypyprefix}
|
||||
%dir %{pypyprefix}/lib-python
|
||||
%{pypyprefix}/lib-python/stdlib-version.txt
|
||||
%{pypyprefix}/lib-python/%{pylibver}/
|
||||
%{pypyprefix}/lib-python/conftest.py*
|
||||
%{pypyprefix}/lib_pypy/
|
||||
%{pypyprefix}/site-packages/
|
||||
%if %{with_emacs}
|
||||
%{_emacs_sitelispdir}/%{name}trace-mode.el
|
||||
%{_emacs_sitelispdir}/%{name}trace-mode.elc
|
||||
%{_emacs_sitelispdir}/pypy3trace-mode.el
|
||||
%{_emacs_sitelispdir}/pypy3trace-mode.elc
|
||||
%endif
|
||||
|
||||
%files
|
||||
%license LICENSE
|
||||
%doc README.rst
|
||||
%{_bindir}/%{name}
|
||||
%{pypyprefix}/%{name}
|
||||
%{_bindir}/pypy3
|
||||
%{_bindir}/pypy3.3
|
||||
%{pypyprefix}/bin/
|
||||
|
||||
%files devel
|
||||
%dir %{pypy_include_dir}
|
||||
%{pypy_include_dir}/*.h
|
||||
%{_rpmconfigdir}/macros.d/macros.%{name}
|
||||
%{_rpmconfigdir}/macros.d/macros.pypy3
|
||||
|
||||
%if 0%{with_stackless}
|
||||
%files stackless
|
||||
%license LICENSE
|
||||
%doc README.rst
|
||||
%{_bindir}/%{name}-stackless
|
||||
%{_bindir}/pypy-stackless
|
||||
%endif
|
||||
|
||||
|
||||
%changelog
|
||||
* Fri Jul 01 2016 Miro Hrončok <mhroncok@redhat.com> - 2.4.0-6
|
||||
* Sat Jul 02 2016 Miro Hrončok <mhroncok@redhat.com> - 5.2.0-0.1.alpha1
|
||||
- First alpha build of PyPy 3.3
|
||||
|
||||
* Fri Jul 01 2016 Miro Hrončok <mhroncok@redhat.com> - 2.4.0-3
|
||||
- Fix for: CVE-2016-0772 python: smtplib StartTLS stripping attack
|
||||
- Raise an error when STARTTLS fails
|
||||
- rhbz#1303647: https://bugzilla.redhat.com/show_bug.cgi?id=1303647
|
||||
@ -867,18 +831,6 @@ CheckPyPy %{name}-stackless
|
||||
- rhbz#1351687: https://bugzilla.redhat.com/show_bug.cgi?id=1351687
|
||||
- Fixed upstream: https://hg.python.org/cpython/rev/bf3e1c9b80e9
|
||||
|
||||
* Fri May 13 2016 Miro Hrončok <mhroncok@redhat.com> - 2.4.0-5
|
||||
- Fix FTBFS (#1307889)
|
||||
- Add patch to fix maximum recursion depth error during build
|
||||
- Don't use -g flag to prevent memory exhaustion
|
||||
- Add fix form Arch Linux to prevent VerificationError during the build
|
||||
|
||||
* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 2.4.0-4
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
|
||||
|
||||
* Tue Aug 04 2015 Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> - 2.4.0-3
|
||||
- Bump release to rebuild with new execstack
|
||||
|
||||
* Thu Jun 18 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.4.0-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user