From 343676a8999d3e5b141b58ec6c9d8e167304ed9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Fri, 8 Jul 2016 14:38:18 +0200 Subject: [PATCH] First alpha build of PyPy 3.3 --- .gitignore | 1 + 001-nevertty.patch | 13 ++ 006-always-log-stdout.patch | 9 +- 007-remove-startup-message.patch | 36 ++-- 008-maximum-recursion-depth.patch | 179 ------------------ 009-raise-an-error-when-STARTTLS-fails.patch | 8 +- ...TTP-header-injections-in-http.client.patch | 20 +- ...ress-mandelbrot-set-during-tty-build.patch | 12 -- pypy3.spec | 148 +++++---------- sources | 2 +- 10 files changed, 108 insertions(+), 320 deletions(-) create mode 100644 001-nevertty.patch delete mode 100644 008-maximum-recursion-depth.patch delete mode 100644 pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch diff --git a/.gitignore b/.gitignore index c9f3d9d..60f26ec 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /pypy3-2.4.0-src.tar.bz2 +/pypy3.3-v5.2.0-alpha1-src.tar.bz2 diff --git a/001-nevertty.patch b/001-nevertty.patch new file mode 100644 index 0000000..b1db988 --- /dev/null +++ b/001-nevertty.patch @@ -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 + diff --git a/006-always-log-stdout.patch b/006-always-log-stdout.patch index 5d49335..0635200 100644 --- a/006-always-log-stdout.patch +++ b/006-always-log-stdout.patch @@ -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): diff --git a/007-remove-startup-message.patch b/007-remove-startup-message.patch index 2ff9068..9654d1c 100644 --- a/007-remove-startup-message.patch +++ b/007-remove-startup-message.patch @@ -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()): diff --git a/008-maximum-recursion-depth.patch b/008-maximum-recursion-depth.patch deleted file mode 100644 index 6d3d157..0000000 --- a/008-maximum-recursion-depth.patch +++ /dev/null @@ -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): diff --git a/009-raise-an-error-when-STARTTLS-fails.patch b/009-raise-an-error-when-STARTTLS-fails.patch index ba1cc53..58ceb01 100644 --- a/009-raise-an-error-when-STARTTLS-fails.patch +++ b/009-raise-an-error-when-STARTTLS-fails.patch @@ -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?= -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 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 diff --git a/010-disabled-HTTP-header-injections-in-http.client.patch b/010-disabled-HTTP-header-injections-in-http.client.patch index 10591d5..bed386c 100644 --- a/010-disabled-HTTP-header-injections-in-http.client.patch +++ b/010-disabled-HTTP-header-injections-in-http.client.patch @@ -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?= -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) diff --git a/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch b/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch deleted file mode 100644 index c97eaf3..0000000 --- a/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch +++ /dev/null @@ -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() diff --git a/pypy3.spec b/pypy3.spec index 5666e56..67819c7 100644 --- a/pypy3.spec +++ b/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 - 2.4.0-6 +* Sat Jul 02 2016 Miro Hrončok - 5.2.0-0.1.alpha1 +- First alpha build of PyPy 3.3 + +* Fri Jul 01 2016 Miro Hrončok - 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 - 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 - 2.4.0-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Tue Aug 04 2015 Zbigniew Jędrzejewski-Szmek - 2.4.0-3 -- Bump release to rebuild with new execstack - * Thu Jun 18 2015 Fedora Release Engineering - 2.4.0-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild diff --git a/sources b/sources index e4d98b7..0e4fa7b 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -96ba72916114d16904e12562b5d84e51 pypy3-2.4.0-src.tar.bz2 +e4bbd6fe42481a17f705611d76914eda pypy3.3-v5.2.0-alpha1-src.tar.bz2