Architecture specific change in rpms/icecat.git
by githook-noreply@fedoraproject.org
The package rpms/icecat.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/icecat.git/commit/?id=5a92d6a1230....
Change:
-ExcludeArch: ppc64le
Thanks.
Full change:
============
commit 563533b6cd9b2b9eebad5e47ae096a77d15a2dfe
Author: Antonio Trande <sagitter(a)fedoraproject.org>
Date: Wed Aug 11 19:32:12 2021 +0200
Fix Source0 tag
diff --git a/icecat.spec b/icecat.spec
index 61996e9..4a6dc5d 100644
--- a/icecat.spec
+++ b/icecat.spec
@@ -4,7 +4,7 @@
# Set new source-code build version
# This tag indicates a new rebuild for Fedora
-%global redhat_ver .rh3
+%global redhat_ver rh3
#%%global pre_tag .test
%global pre_tag %{nil}
@@ -94,7 +94,7 @@
Name: icecat
Version: 78.13.0
-Release: 2%{redhat_ver}%{?pre_tag}%{?dist}
+Release: 2.%{redhat_ver}%{?pre_tag}%{?dist}
Summary: GNU version of Firefox browser
# Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included
commit 520bb3f8e1a62b26b5d5b675121500471fc1125c
Author: Antonio Trande <sagitter(a)fedoraproject.org>
Date: Wed Aug 11 19:24:49 2021 +0200
Fix Release tag
diff --git a/icecat.spec b/icecat.spec
index 43c1789..61996e9 100644
--- a/icecat.spec
+++ b/icecat.spec
@@ -4,7 +4,7 @@
# Set new source-code build version
# This tag indicates a new rebuild for Fedora
-%global redhat_ver rh3
+%global redhat_ver .rh3
#%%global pre_tag .test
%global pre_tag %{nil}
commit 5a92d6a1230fc94f95de5de0c296434d616819f0
Author: Antonio Trande <sagitter(a)fedoraproject.org>
Date: Wed Aug 11 19:21:39 2021 +0200
Enable build on PPC64le
diff --git a/icecat.spec b/icecat.spec
index 16e1b89..43c1789 100644
--- a/icecat.spec
+++ b/icecat.spec
@@ -1,6 +1,3 @@
-# Temporarily disabled, filed as rhbz#1932204
-ExcludeArch: ppc64le
-
### Naming ###
# Set to true if it's going to be submitted as update
%global release_build 1
@@ -97,7 +94,7 @@ ExcludeArch: ppc64le
Name: icecat
Version: 78.13.0
-Release: 1%{redhat_ver}%{?pre_tag}%{?dist}
+Release: 2%{redhat_ver}%{?pre_tag}%{?dist}
Summary: GNU version of Firefox browser
# Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included
@@ -879,6 +876,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop
%{_datadir}/applications/%{name}-wayland.desktop
%changelog
+* Wed Aug 11 2021 Antonio Trande <sagitter(a)fedoraproject.org> - 78.13.0-2.rh3
+- Enable build on PPC64le
+
* Tue Aug 10 2021 Antonio Trande <sagitter(a)fedoraproject.org> - 78.13.0-1.rh3
- Release 78.13.0
2 years, 10 months
Architecture specific change in rpms/icecat.git
by githook-noreply@fedoraproject.org
The package rpms/icecat.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/icecat.git/commit/?id=5a92d6a1230....
Change:
-ExcludeArch: ppc64le
Thanks.
Full change:
============
commit 563533b6cd9b2b9eebad5e47ae096a77d15a2dfe
Author: Antonio Trande <sagitter(a)fedoraproject.org>
Date: Wed Aug 11 19:32:12 2021 +0200
Fix Source0 tag
diff --git a/icecat.spec b/icecat.spec
index 61996e9..4a6dc5d 100644
--- a/icecat.spec
+++ b/icecat.spec
@@ -4,7 +4,7 @@
# Set new source-code build version
# This tag indicates a new rebuild for Fedora
-%global redhat_ver .rh3
+%global redhat_ver rh3
#%%global pre_tag .test
%global pre_tag %{nil}
@@ -94,7 +94,7 @@
Name: icecat
Version: 78.13.0
-Release: 2%{redhat_ver}%{?pre_tag}%{?dist}
+Release: 2.%{redhat_ver}%{?pre_tag}%{?dist}
Summary: GNU version of Firefox browser
# Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included
commit 520bb3f8e1a62b26b5d5b675121500471fc1125c
Author: Antonio Trande <sagitter(a)fedoraproject.org>
Date: Wed Aug 11 19:24:49 2021 +0200
Fix Release tag
diff --git a/icecat.spec b/icecat.spec
index 43c1789..61996e9 100644
--- a/icecat.spec
+++ b/icecat.spec
@@ -4,7 +4,7 @@
# Set new source-code build version
# This tag indicates a new rebuild for Fedora
-%global redhat_ver rh3
+%global redhat_ver .rh3
#%%global pre_tag .test
%global pre_tag %{nil}
commit 5a92d6a1230fc94f95de5de0c296434d616819f0
Author: Antonio Trande <sagitter(a)fedoraproject.org>
Date: Wed Aug 11 19:21:39 2021 +0200
Enable build on PPC64le
diff --git a/icecat.spec b/icecat.spec
index 16e1b89..43c1789 100644
--- a/icecat.spec
+++ b/icecat.spec
@@ -1,6 +1,3 @@
-# Temporarily disabled, filed as rhbz#1932204
-ExcludeArch: ppc64le
-
### Naming ###
# Set to true if it's going to be submitted as update
%global release_build 1
@@ -97,7 +94,7 @@ ExcludeArch: ppc64le
Name: icecat
Version: 78.13.0
-Release: 1%{redhat_ver}%{?pre_tag}%{?dist}
+Release: 2%{redhat_ver}%{?pre_tag}%{?dist}
Summary: GNU version of Firefox browser
# Tri-licensing scheme for Gnuzilla/IceCat in parentheses, and licenses for the extensions included
@@ -879,6 +876,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop
%{_datadir}/applications/%{name}-wayland.desktop
%changelog
+* Wed Aug 11 2021 Antonio Trande <sagitter(a)fedoraproject.org> - 78.13.0-2.rh3
+- Enable build on PPC64le
+
* Tue Aug 10 2021 Antonio Trande <sagitter(a)fedoraproject.org> - 78.13.0-1.rh3
- Release 78.13.0
2 years, 10 months
Architecture specific change in rpms/libyang2.git
by githook-noreply@fedoraproject.org
The package rpms/libyang2.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/libyang2.git/commit/?id=c708be5c6....
Change:
-%ifarch %{arm} ppc64le
Thanks.
Full change:
============
commit c708be5c62872efd4dde7c78b7de7ced9c94c097
Author: Jakub Ružička <jakub.ruzicka(a)nic.cz>
Date: Wed Aug 11 14:44:53 2021 +0000
Retire in favor of original libyang package
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 330f861..0000000
--- a/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/libyang-2.0.7.tar.gz
diff --git a/README.md b/README.md
deleted file mode 100644
index 88f59a4..0000000
--- a/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# libyang2
-
-The libyang2 package
diff --git a/dead.package b/dead.package
new file mode 100644
index 0000000..6e4e933
--- /dev/null
+++ b/dead.package
@@ -0,0 +1 @@
+Retire in favor of original libyang package
diff --git a/libyang2.spec b/libyang2.spec
deleted file mode 100644
index ce3fb2a..0000000
--- a/libyang2.spec
+++ /dev/null
@@ -1,110 +0,0 @@
-# valgrind finds invalid writes in libcmocka on arm and power
-# see bug #1699304 for more information
-%ifarch %{arm} ppc64le
-%global run_valgrind_tests OFF
-%else
-%global run_valgrind_tests ON
-%endif
-
-# use arch-independent builddir (fixes docs build)
-%global _vpath_builddir %{_vendor}-%{_target_os}-build
-
-# library soname major version
-%global somajor 2
-
-Name: libyang2
-Version: 2.0.7
-Release: 2%{?dist}
-Summary: YANG data modeling language library
-License: BSD
-URL: https://github.com/CESNET/libyang
-Source: %{url}/archive/v%{version}/libyang-%{version}.tar.gz
-
-BuildRequires: cmake
-BuildRequires: doxygen
-BuildRequires: gcc
-BuildRequires: cmake(cmocka) >= 1.0.0
-BuildRequires: make
-BuildRequires: pkgconfig(libpcre2-8) >= 10.21
-BuildRequires: valgrind
-
-%package tools
-Summary: YANG validator tools
-Requires: %{name}%{?_isa} = %{version}-%{release}
-Provides: libyang-tools = %{version}-%{release}
-Obsoletes: libyang-tools < 2
-
-%package devel
-Summary: Development files for libyang2
-Requires: %{name}%{?_isa} = %{version}-%{release}
-# conflict with legacy libyang-devel (v1)
-Conflicts: libyang-devel
-
-%package devel-doc
-Summary: Documentation of libyang API
-Requires: %{name}-devel = %{version}-%{release}
-BuildArch: noarch
-# conflict with legacy libyang-devel-doc (v1)
-Conflicts: libyang-devel-doc
-
-%description
-YANG data modeling language parser and toolkit
-written (and providing API) in C.
-
-%description tools
-YANG validator tools.
-
-%description devel
-Headers of libyang library.
-
-%description devel-doc
-Documentation of libyang API.
-
-%prep
-%autosetup -p1 -n libyang-%{version}
-
-%build
-%cmake \
- -DCMAKE_BUILD_TYPE:String="RelWithDebInfo" \
- -DENABLE_VALGRIND_TESTS=%{run_valgrind_tests}
-
-%cmake_build
-
-# Build documentation
-%cmake_build --target doc
-
-%check
-%ctest
-
-%install
-%cmake_install
-
-mkdir -m0755 -p %{buildroot}/%{_docdir}/libyang
-cp -a doc/html %{buildroot}/%{_docdir}/libyang/html
-
-%files
-%license LICENSE
-%{_libdir}/libyang.so.%{somajor}{,.*}
-
-%files tools
-%{_bindir}/yanglint
-%{_bindir}/yangre
-%{_mandir}/man1/yanglint.1*
-
-%files devel
-%dir %{_includedir}/libyang/
-%{_includedir}/libyang/*.h
-%{_libdir}/libyang.so
-%{_libdir}/pkgconfig/libyang.pc
-
-%files devel-doc
-%{_docdir}/libyang/
-
-
-%changelog
-* Tue Jul 27 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 2.0.7-2
-- Second attempt - Rebuilt for
- https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
-
-* Thu Jul 22 2021 Jakub Ružička <jakub.ruzicka(a)nic.cz> - 2.0.7-1
-- Initial Fedora package (rhbz#1982306)
diff --git a/sources b/sources
deleted file mode 100644
index fb24c18..0000000
--- a/sources
+++ /dev/null
@@ -1 +0,0 @@
-SHA512 (libyang-2.0.7.tar.gz) = edb1d8d372b25ed820fa312e0dc96d4af7c8cd5ddeb785964de73f64774062ea7a5586bb27e2039ad24189d4a2ba04268921ca86e82423fc48647d1d10a2a0a7
2 years, 10 months
Architecture specific change in rpms/pypy3.7.git
by githook-noreply@fedoraproject.org
The package rpms/pypy3.7.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=5aa1d86125...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=faa7ffb044...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=083ef4d302...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=f27d32f530...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=9d0ffbc9d5...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=82dcbae232...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=720aa9bae8...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=a6780ec435...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=b929faae35...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=9107198269...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=ad0d37c683...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=6b002d36f3...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=693a83b0c2...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=817c77d554...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=347fb465b0...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=343676a899...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=4a3038ff56...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=43ee778526...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=a0374180ff...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=d39359a3af...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=f756cfcb34....
Change:
+%ifarch %{ix86} x86_64 %{arm} %{power64} s390x aarch64
-%ifarch %{power64}
-ExcludeArch: %{power64}
+ExcludeArch: %{power64}
+ExcludeArch: aarch64 %{power64}
+%ifarch %{power64}
-%ifnarch aarch64 ppc64le
+%ifarch %{ix86} x86_64 %{arm} %{power64} s390x
+%ifarch s390 s390x
+%ifarch %{ix86} x86_64 %{arm}
+ExcludeArch: aarch64
+ExcludeArch: aarch64 armv7hl s390 s390x
+ExcludeArch: aarch64 s390 s390x
+ExcludeArch: aarch64 s390 s390x ppc64le ppc64
+ExcludeArch: aarch64 s390 s390x
-%ifarch x86_64
+%ifarch x86_64
+%ifnarch aarch64 ppc64le
+%ifnarch s390
+%ifarch %{ix86} x86_64 ppc ppc64 s390x
+%ifarch %{ix86} x86_64
Thanks.
Full change:
============
commit 27985bbcb8631a6af65c76bde080577242960df5
Author: Tomas Hrnciar <thrnciar(a)redhat.com>
Date: Tue Aug 10 13:38:40 2021 +0200
Add bcond main_pypy3 to differentiate whether package is main pypy
package or not
diff --git a/pypy3.7.spec b/pypy3.7.spec
index a660404..33e04c9 100644
--- a/pypy3.7.spec
+++ b/pypy3.7.spec
@@ -126,6 +126,12 @@ URL: http://pypy.org/
# We refer to this subdir of the source tree in a few places during the build:
%global goal_dir pypy/goal
+%if 0%{?fedora} >= 35
+%bcond_without main_pypy3
+%else
+%bcond_with main_pypy3
+%endif
+
# Source and patches:
Source0: https://downloads.python.org/pypy/pypy%{pyversion}-v%{version}-src.tar.bz2
@@ -237,10 +243,12 @@ BuildRequires: python-pip-wheel
# Metadata for the core package (the JIT build):
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
+%if %{with main_pypy3}
Provides: %{name}(abi) = %{basever}
Provides: pypy3 = %{version}-%{release}
Provides: pypy3%{?_isa} = %{version}-%{release}
Obsoletes: pypy3 < 7.3.4-4
+%endif
%description
PyPy's implementation of Python 3, featuring a Just-In-Time compiler on some CPU
@@ -264,9 +272,11 @@ Summary: Run-time libraries used by PyPy implementations of Python 3
Requires: emacs-filesystem >= %{_emacs_version}
%endif
+%if %{with main_pypy3}
Provides: pypy3-libs = %{version}-%{release}
Provides: pypy3-libs%{?_isa} = %{version}-%{release}
Obsoletes: pypy3-libs < 7.3.4-4
+%endif
%if %{with rpmwheels}
Requires: python-setuptools-wheel
@@ -299,9 +309,11 @@ Libraries required by the various PyPy implementations of Python 3.
Summary: Development tools for working with PyPy3
Requires: pypy%{pyversion}%{?_isa} = %{version}-%{release}
+%if %{with main_pypy3}
Provides: pypy3-devel = %{version}-%{release}
Provides: pypy3-devel%{?_isa} = %{version}-%{release}
Obsoletes: pypy3-devel < 7.3.4-4
+%endif
%description devel
Header files for building C extension modules against PyPy3
@@ -537,7 +549,9 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
execstack --clear-execstack %{buildroot}/%{pypyprefix}/bin/pypy3
ln -s %{pypyprefix}/bin/pypy%{pyversion} %{buildroot}%{_bindir}/pypy%{pyversion}
+%if %{with main_pypy3}
ln -s pypy%{pyversion} %{buildroot}%{_bindir}/pypy3
+%endif
# 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
@@ -662,12 +676,14 @@ 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}/pypy3trace-mode.el
-cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/pypy3trace-mode.elc
+cp -a rpython/jit/tool/pypytrace-mode.el %{buildroot}/%{_emacs_sitelispdir}/pypy%{pyversion}trace-mode.el
+cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/pypy%{pyversion}trace-mode.elc
%endif
+%if %{with main_pypy3}
# Install macros for rpm:
install -m0644 -p -D -t %{buildroot}/%{_rpmconfigdir}/macros.d %{SOURCE2}
+%endif
# Remove files we don't want:
rm -f %{buildroot}%{_libdir}/%{name}.tar.bz2 \
@@ -828,8 +844,8 @@ CheckPyPy pypy3-c
%license %{pypyprefix}/lib_pypy/*/LICENSE
%{pypyprefix}/site-packages/
%if %{with_emacs}
-%{_emacs_sitelispdir}/pypy3trace-mode.el
-%{_emacs_sitelispdir}/pypy3trace-mode.elc
+%{_emacs_sitelispdir}/pypy%{pyversion}trace-mode.el
+%{_emacs_sitelispdir}/pypy%{pyversion}trace-mode.elc
%endif
%files
commit 86f73ef2399e7e79e12a312bc017a25e51d949df
Author: Tomas Hrnciar <thrnciar(a)redhat.com>
Date: Mon Aug 9 12:52:43 2021 +0200
Removes pypy-stackless as it is not needed anymore
diff --git a/pypy3.7.spec b/pypy3.7.spec
index 9133480..a660404 100644
--- a/pypy3.7.spec
+++ b/pypy3.7.spec
@@ -78,19 +78,6 @@ URL: http://pypy.org/
# [Timer] compile_c --- 273.9 s
# [Timer] ===========================================
# [Timer] Total: --- 3572.0 s
-#
-#
-# A build of pypy-stackless on i686 took about 87 mins:
-# [Timer] Timings:
-# [Timer] annotate --- 584.2 s
-# [Timer] rtype_lltype --- 777.3 s
-# [Timer] backendopt_lltype --- 365.9 s
-# [Timer] stackcheckinsertion_lltype --- 39.3 s
-# [Timer] database_c --- 1089.6 s
-# [Timer] source_c --- 1868.6 s
-# [Timer] compile_c --- 490.4 s
-# [Timer] ===========================================
-# [Timer] Total: --- 5215.3 s
# We will build a "pypy" binary.
@@ -116,9 +103,6 @@ URL: http://pypy.org/
%global with_jit 0
%endif
-# Should we build a "pypy-stackless" binary?
-%global with_stackless 0
-
# Should we build the emacs JIT-viewing mode?
%if 0%{?rhel} == 6
%global with_emacs 0
@@ -323,19 +307,6 @@ Obsoletes: pypy3-devel < 7.3.4-4
Header files for building C extension modules against PyPy3
-%if 0%{with_stackless}
-%package stackless
-Summary: Stackless Python interpreter built using PyPy3
-Requires: pypy3-libs%{?_isa} = %{version}-%{release}
-
-Provides: pypy3-stackless = %{version}-%{release}
-Provides: pypy3-stackless%{?_isa} = %{version}-%{release}
-Obsoletes: pypy3-stackless < 7.3.4-4
-
-%description stackless
-Build of PyPy3 with support for micro-threads for massive concurrency
-%endif
-
%prep
%autosetup -n pypy%{pyversion}-v%{version}-src -p1 -S git
@@ -522,12 +493,6 @@ BuildPyPy \
%endif
%{nil}
-%if 0%{with_stackless}
-BuildPyPy \
- pypy3-stackless \
- "--stackless"
-%endif
-
%if %{with_emacs}
%{_emacs_bytecompile} rpython/jit/tool/pypytrace-mode.el
%endif
@@ -845,11 +810,6 @@ CheckPyPy() {
%if %{run_selftests}
CheckPyPy pypy3-c
-
-%if 0%{with_stackless}
-CheckPyPy pypy3-stackless
-%endif
-
%endif # run_selftests
# Because there's a bunch of binary subpackages and creating
@@ -887,12 +847,6 @@ CheckPyPy pypy3-stackless
%{_rpmconfigdir}/macros.d/macros.pypy3
%endif
-%if 0%{with_stackless}
-%files stackless
-%doc README.rst
-%{_bindir}/pypy-stackless
-%endif
-
%changelog
* Mon Aug 09 2021 Tomas Hrnciar <thrnciar(a)redhat.com> - 7.3.4-4
commit b8466c1e8afa8093205b6100a27540f753b5c9d9
Author: Tomas Hrnciar <thrnciar(a)redhat.com>
Date: Mon Aug 9 12:45:19 2021 +0200
Rename pypy3 to pypy3.7
diff --git a/pypy3.spec b/pypy3.7.spec
similarity index 97%
rename from pypy3.spec
rename to pypy3.7.spec
index 2bd5917..9133480 100644
--- a/pypy3.spec
+++ b/pypy3.7.spec
@@ -1,8 +1,8 @@
%global basever 7.3
-Name: pypy3
-Version: %{basever}.4
%global pyversion 3.7
-Release: 3%{?dist}
+Name: pypy%{pyversion}
+Version: %{basever}.4
+Release: 4%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# PyPy is MIT
@@ -136,7 +136,7 @@ URL: http://pypy.org/
# Easy way to turn off the selftests:
%global run_selftests 1
-%global pypyprefix %{_libdir}/pypy3-%{basever}
+%global pypyprefix %{_libdir}/pypy%{pyversion}
%global pylibver 3
# We refer to this subdir of the source tree in a few places during the build:
@@ -254,8 +254,9 @@ BuildRequires: python-pip-wheel
# Metadata for the core package (the JIT build):
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
Provides: %{name}(abi) = %{basever}
-Provides: pypy%{pyversion} = %{version}-%{release}
-Provides: pypy%{pyversion}%{?_isa} = %{version}-%{release}
+Provides: pypy3 = %{version}-%{release}
+Provides: pypy3%{?_isa} = %{version}-%{release}
+Obsoletes: pypy3 < 7.3.4-4
%description
PyPy's implementation of Python 3, featuring a Just-In-Time compiler on some CPU
@@ -279,8 +280,9 @@ Summary: Run-time libraries used by PyPy implementations of Python 3
Requires: emacs-filesystem >= %{_emacs_version}
%endif
-Provides: pypy%{pyversion}-libs = %{version}-%{release}
-Provides: pypy%{pyversion}-libs%{?_isa} = %{version}-%{release}
+Provides: pypy3-libs = %{version}-%{release}
+Provides: pypy3-libs%{?_isa} = %{version}-%{release}
+Obsoletes: pypy3-libs < 7.3.4-4
%if %{with rpmwheels}
Requires: python-setuptools-wheel
@@ -311,10 +313,11 @@ Libraries required by the various PyPy implementations of Python 3.
%package devel
Summary: Development tools for working with PyPy3
-Requires: pypy3%{?_isa} = %{version}-%{release}
+Requires: pypy%{pyversion}%{?_isa} = %{version}-%{release}
-Provides: pypy%{pyversion}-devel = %{version}-%{release}
-Provides: pypy%{pyversion}-devel%{?_isa} = %{version}-%{release}
+Provides: pypy3-devel = %{version}-%{release}
+Provides: pypy3-devel%{?_isa} = %{version}-%{release}
+Obsoletes: pypy3-devel < 7.3.4-4
%description devel
Header files for building C extension modules against PyPy3
@@ -325,8 +328,9 @@ Header files for building C extension modules against PyPy3
Summary: Stackless Python interpreter built using PyPy3
Requires: pypy3-libs%{?_isa} = %{version}-%{release}
-Provides: pypy%{pyversion}-stackless = %{version}-%{release}
-Provides: pypy%{pyversion}-stackless%{?_isa} = %{version}-%{release}
+Provides: pypy3-stackless = %{version}-%{release}
+Provides: pypy3-stackless%{?_isa} = %{version}-%{release}
+Obsoletes: pypy3-stackless < 7.3.4-4
%description stackless
Build of PyPy3 with support for micro-threads for massive concurrency
@@ -534,8 +538,8 @@ mkdir -p %{buildroot}/%{_bindir}
mkdir -p %{buildroot}/%{pypyprefix}
-# Run installing script, archive-name %{name}-%{basever} in %{buildroot}/%{_libdir} == %{pypyprefix}
-%{bootstrap_python_interp} pypy/tool/release/package.py --archive-name %{name}-%{basever} --builddir %{buildroot}/%{_libdir} --no-embedded-dependencies
+# Run installing script, archive-name pypy%{pyversion} in %{buildroot}/%{_libdir} == %{pypyprefix}
+%{bootstrap_python_interp} pypy/tool/release/package.py --archive-name pypy%{pyversion} --builddir %{buildroot}/%{_libdir} --no-embedded-dependencies
# Remove shebang lines from .py files that aren't executable, and
@@ -701,7 +705,7 @@ cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/pyp
install -m0644 -p -D -t %{buildroot}/%{_rpmconfigdir}/macros.d %{SOURCE2}
# Remove files we don't want:
-rm -f %{buildroot}%{_libdir}/%{name}-%{basever}.tar.bz2 \
+rm -f %{buildroot}%{_libdir}/%{name}.tar.bz2 \
%{buildroot}%{pypyprefix}/README.rst
# wtf? This is probably masking some bigger problem, but let's do this for now
@@ -840,10 +844,10 @@ CheckPyPy() {
#pypy/goal/pypy pypy/test_all.py --resultlog=pypyjit_new.log
%if %{run_selftests}
-CheckPyPy %{name}-c
+CheckPyPy pypy3-c
%if 0%{with_stackless}
-CheckPyPy %{name}-stackless
+CheckPyPy pypy3-stackless
%endif
%endif # run_selftests
@@ -870,16 +874,18 @@ CheckPyPy %{name}-stackless
%files
%doc README.rst
+%if %{with main_pypy3}
%{_bindir}/pypy3
+%endif
%{_bindir}/pypy%{pyversion}
%{pypyprefix}/bin/
-%exclude %{_libdir}/%{name}-%{version}.tar.bz2
-
%files devel
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
+%if %{with main_pypy3}
%{_rpmconfigdir}/macros.d/macros.pypy3
+%endif
%if 0%{with_stackless}
%files stackless
@@ -889,6 +895,10 @@ CheckPyPy %{name}-stackless
%changelog
+* Mon Aug 09 2021 Tomas Hrnciar <thrnciar(a)redhat.com> - 7.3.4-4
+- Rename pypy3 to pypy3.7
+- pypy-stackless was removed
+
* Fri Jul 23 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.4-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
diff --git a/tests/tests.yml b/tests/tests.yml
index 827cb90..5242663 100644
--- a/tests/tests.yml
+++ b/tests/tests.yml
@@ -10,8 +10,8 @@
tests:
- smoke:
dir: python/smoke
- run: PYTHON=pypy3 VERSION=3.7 ./venv.sh
+ run: PYTHON=pypy3.7 VERSION=3.7 ./venv.sh
required_packages:
- gcc
- python3-tox
- - pypy3-devel
+ - pypy3.7-devel
commit 716f2f638d30f78656b784f42dd633aac492804e
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Fri Jul 23 04:30:08 2021 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index 3b11f44..2bd5917 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.4
%global pyversion 3.7
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# PyPy is MIT
@@ -889,6 +889,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri Jul 23 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.4-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
+
* Wed Jul 21 2021 Tomas Hrnciar <thrnciar(a)redhat.com> - 7.3.4-2
- Replace removed /usr/lib/rpm/brp-python-bytecompile with %%py_byte_compile macros
- Fixes: rhbz#1976656
commit e90c1b5d85ebcaed6e89cf8bf6b2327210769370
Author: Tomas Hrnciar <thrnciar(a)redhat.com>
Date: Wed Jul 21 16:19:29 2021 +0200
Replace removed /usr/lib/rpm/brp-python-bytecompile with %%py_byte_compile macros
diff --git a/pypy3.spec b/pypy3.spec
index 025102c..3b11f44 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.4
%global pyversion 3.7
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# PyPy is MIT
@@ -143,10 +143,6 @@ URL: http://pypy.org/
%global goal_dir pypy/goal
-# Turn off the brp-python-bytecompile postprocessing script
-# We manually invoke it later on, using the freshly built pypy binary
-%global __brp_python_bytecompile %{nil}
-
# Source and patches:
Source0: https://downloads.python.org/pypy/pypy%{pyversion}-v%{version}-src.tar.bz2
@@ -221,6 +217,9 @@ BuildRequires: expat-devel
BuildRequires: openssl-devel
BuildRequires: gdbm-devel
BuildRequires: xz-devel
+
+BuildRequires: python-rpm-macros
+
%ifnarch s390
BuildRequires: valgrind-devel
%endif
@@ -617,19 +616,12 @@ ln -s pypy%{pyversion} %{buildroot}%{_bindir}/pypy3
# Bytecompile all of the .py files we ship, using our pypy binary, giving us
-# .pyc files for pypy. The script actually does the work twice (passing in -O
-# the second time) but it's simplest to reuse that script.
-#
-# The script has special-casing for .py files below
-# /usr/lib{64}/python[0-9].[0-9]
-# but given that we're installing into a different path, the supplied "default"
-# implementation gets used instead.
+# .pyc files for pypy.
#
# 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}%{pypyprefix}/bin/pypy3 \
- 0
+# we are running it in subshell, to be able to ignore the failures and not to terminate the build.
+(%{py_byte_compile %{buildroot}%{pypyprefix}/bin/pypy3 %{buildroot}%{pypyprefix}}) || :
+
%{buildroot}%{pypyprefix}/bin/pypy3 -c 'import _tkinter'
%{buildroot}%{pypyprefix}/bin/pypy3 -c 'import tkinter'
@@ -897,6 +889,10 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed Jul 21 2021 Tomas Hrnciar <thrnciar(a)redhat.com> - 7.3.4-2
+- Replace removed /usr/lib/rpm/brp-python-bytecompile with %%py_byte_compile macros
+- Fixes: rhbz#1976656
+
* Tue May 25 2021 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.4-1
- Update to 7.3.4
- pypy3 is now Python 3.7
commit f24f8ff0ada28610e3a6801d602c3effea640fe5
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri May 21 01:35:55 2021 +0200
Update to 7.3.4, PyPy3.7
diff --git a/.gitignore b/.gitignore
index 849f483..c4b4267 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,4 @@
/pypy3.6-v7.2.0-src.tar.bz2
/pypy3.6-v7.3.0-src.tar.bz2
/pypy3.6-v7.3.1-src.tar.bz2
+/pypy3.7-v7.3.4-src.tar.bz2
diff --git a/011-no-faulthandler.patch b/011-no-faulthandler.patch
index e093956..c0dd76b 100644
--- a/011-no-faulthandler.patch
+++ b/011-no-faulthandler.patch
@@ -30,7 +30,7 @@ index faa1ba7..2edadc9 100644
"PIPE_MAX_SIZE", "verbose", "max_memuse", "use_resources", "failfast",
@@ -2231,7 +2235,8 @@ def start_threads(threads, unlock=None):
finally:
- started = [t for t in started if t.isAlive()]
+ started = [t for t in started if t.is_alive()]
if started:
- faulthandler.dump_traceback(sys.stdout)
+ if faulthandler is not None:
diff --git a/189-use-rpm-wheels.patch b/189-use-rpm-wheels.patch
index 0032ba9..8fd8a55 100644
--- a/189-use-rpm-wheels.patch
+++ b/189-use-rpm-wheels.patch
@@ -1,25 +1,21 @@
diff --git a/lib-python/3/ensurepip/__init__.py b/lib-python/3/ensurepip/__init__.py
-index 6b35b3d..97fc83b 100644
+index 94d40b0..9135b80 100644
--- a/lib-python/3/ensurepip/__init__.py
+++ b/lib-python/3/ensurepip/__init__.py
-@@ -1,16 +1,34 @@
+@@ -1,3 +1,5 @@
+import distutils.version
+import glob
import os
import os.path
import pkgutil
- import sys
-+import runpy
- import tempfile
-
-
+@@ -9,9 +11,24 @@ import tempfile
__all__ = ["version", "bootstrap"]
-
-
--_SETUPTOOLS_VERSION = "44.0.0"
+
+
+-_SETUPTOOLS_VERSION = "47.1.0"
+_WHEEL_DIR = "/usr/share/python-wheels/"
-
--_PIP_VERSION = "20.0.2"
+
+-_PIP_VERSION = "20.1.1"
+_wheels = {}
+
+def _get_most_recent_wheel_version(pkg):
@@ -36,36 +32,14 @@ index 6b35b3d..97fc83b 100644
+_SETUPTOOLS_VERSION = _get_most_recent_wheel_version("setuptools")
+
+_PIP_VERSION = _get_most_recent_wheel_version("pip")
-
+
_PROJECTS = [
- ("setuptools", _SETUPTOOLS_VERSION),
-@@ -23,10 +41,18 @@ def _run_pip(args, additional_paths=None):
- if additional_paths is not None:
- sys.path = additional_paths + sys.path
-
-- # Install the bundled software
-- import pip._internal.cli.main
-- return pip._internal.cli.main.main(args)
-+ # Invoke pip as if it's the main module, and catch the exit.
-+ backup_argv = sys.argv[:]
-+ sys.argv[1:] = args
-+ try:
-+ # run_module() alters sys.modules and sys.argv, but restores them at exit
-+ runpy.run_module("pip", run_name="__main__", alter_sys=True)
-+ except SystemExit as exc:
-+ return exc.code
-+ finally:
-+ sys.argv[:] = backup_argv
-
-+ raise SystemError("pip did not exit, this should never happen")
-
- def version():
- """
-@@ -93,13 +119,10 @@ def _bootstrap(*, root=None, upgrade=False, user=False,
+ ("setuptools", _SETUPTOOLS_VERSION, "py3"),
+@@ -103,13 +120,10 @@ def _bootstrap(*, root=None, upgrade=False, user=False,
# additional paths that need added to sys.path
additional_paths = []
- for project, version in _PROJECTS:
-- wheel_name = "{}-{}-py2.py3-none-any.whl".format(project, version)
+ for project, version, py_tag in _PROJECTS:
+- wheel_name = "{}-{}-{}-none-any.whl".format(project, version, py_tag)
- whl = pkgutil.get_data(
- "ensurepip",
- "_bundled/{}".format(wheel_name),
diff --git a/pypy3.spec b/pypy3.spec
index 7b4d004..025102c 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,8 +1,8 @@
%global basever 7.3
Name: pypy3
-Version: %{basever}.1
-%global pyversion 3.6
-Release: 6%{?dist}
+Version: %{basever}.4
+%global pyversion 3.7
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# PyPy is MIT
@@ -25,7 +25,9 @@ URL: http://pypy.org/
# with the packaged version.
# The version information can be found at lib_pypy/_libmpdec/mpdecimal.h
# defined as MPD_VERSION.
-%global libmpdec_version 2.4.1
+# See https://foss.heptapod.net/pypy/pypy/-/issues/3024
+# With PyPy 7.3.4, the decimal module is not compiled
+#%%global libmpdec_version 2.4.1
# Whether to use RPM build wheels from the python-{pip,setuptools}-wheel package
# Uses upstream bundled prebuilt wheels otherwise
@@ -146,7 +148,7 @@ URL: http://pypy.org/
%global __brp_python_bytecompile %{nil}
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/downloads/pypy%{pyversion}-v%{version}-sr...
+Source0: https://downloads.python.org/pypy/pypy%{pyversion}-v%{version}-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -285,13 +287,15 @@ Provides: pypy%{pyversion}-libs%{?_isa} = %{version}-%{release}
Requires: python-setuptools-wheel
Requires: python-pip-wheel
%else
-Provides: bundled(python3dist(pip)) = 20.0.2
-Provides: bundled(python3dist(setuptools)) = 44.0.0
+Provides: bundled(python3dist(pip)) = 20.1.1
+Provides: bundled(python3dist(setuptools)) = 47.1.0
%endif
# Provides for the bundled libmpdec
+%{?libmpdec_version:
Provides: bundled(mpdecimal) = %{libmpdec_version}
Provides: bundled(libmpdec) = %{libmpdec_version}
+}
# Find the version in lib_pypy/cffi/_pycparser/__init__.py
Provides: bundled(python3dist(pycparser)) = 2.20
@@ -341,8 +345,8 @@ rm lib-python/3/ensurepip/_bundled/*.whl
rmdir lib-python/3/ensurepip/_bundled
%else
# we don't want to ship the old ones anyway
-rm lib-python/3/ensurepip/_bundled/pip-8.1.2-*
-rm lib-python/3/ensurepip/_bundled/setuptools-21.2.1-*
+rm lib-python/3/ensurepip/_bundled/pip-20.0*
+rm lib-python/3/ensurepip/_bundled/setuptools-44*
%endif
@@ -532,7 +536,7 @@ mkdir -p %{buildroot}/%{pypyprefix}
# Run installing script, archive-name %{name}-%{basever} in %{buildroot}/%{_libdir} == %{pypyprefix}
-%{bootstrap_python_interp} pypy/tool/release/package.py --archive-name %{name}-%{basever} --builddir %{buildroot}/%{_libdir}
+%{bootstrap_python_interp} pypy/tool/release/package.py --archive-name %{name}-%{basever} --builddir %{buildroot}/%{_libdir} --no-embedded-dependencies
# Remove shebang lines from .py files that aren't executable, and
@@ -564,7 +568,6 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
# approach is to postprocess the ELF file:
execstack --clear-execstack %{buildroot}/%{pypyprefix}/bin/pypy3
-ln -s ./pypy3 %{buildroot}%{pypyprefix}/bin/pypy%{pyversion}
ln -s %{pypyprefix}/bin/pypy%{pyversion} %{buildroot}%{_bindir}/pypy%{pyversion}
ln -s pypy%{pyversion} %{buildroot}%{_bindir}/pypy3
@@ -720,11 +723,12 @@ rm -f %{buildroot}%{pypyprefix}/bin/libpypy3-c.so.debug
%check
+%{?libmpdec_version:
# Verify that the bundled libmpdec version python was compiled with, is the same version we have virtual
# provides for in the SPEC.
test "$(%{goal_dir}/pypy3-c -c 'import decimal; print(decimal.__libmpdec_version__.decode("ascii"))')" = \
"%{libmpdec_version}"
-
+}
topdir=$(pwd)
@@ -893,6 +897,11 @@ CheckPyPy %{name}-stackless
%changelog
+* Tue May 25 2021 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.4-1
+- Update to 7.3.4
+- pypy3 is now Python 3.7
+- Fixes rhbz#1961933
+
* Tue May 25 2021 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.1-6
- Provide missing bundled library information
diff --git a/sources b/sources
index 0b7b357..60e1bdc 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3.6-v7.3.1-src.tar.bz2) = f8e32aae7f01225e0e4d6763eaac40fc02dffc3d0b6a30f22d422147f9be4f3290ea78160a912ffae311dea3d503eb31a7a4f3999d3b541fbccd93d1cef4ca56
+SHA512 (pypy3.7-v7.3.4-src.tar.bz2) = c570d34f284f41dcd8dd909216c69831dd83b8501423c7635a4fe506fb16fd3705cf87975a664735e52d0b805a0432267d611a993437d17aac3defe4b9ea4401
diff --git a/tests/tests.yml b/tests/tests.yml
index c3a91f3..827cb90 100644
--- a/tests/tests.yml
+++ b/tests/tests.yml
@@ -10,7 +10,7 @@
tests:
- smoke:
dir: python/smoke
- run: PYTHON=pypy3 VERSION=3.6 ./venv.sh
+ run: PYTHON=pypy3 VERSION=3.7 ./venv.sh
required_packages:
- gcc
- python3-tox
commit f592f0db6a04e430152a0909b3471683c0c95849
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue May 25 22:05:10 2021 +0200
Provide missing bundled library information
diff --git a/pypy3.spec b/pypy3.spec
index 2184360..7b4d004 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,14 +2,20 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.6
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
+# PyPy is MIT
+# Python standard library is Python
+# pypy/module/unicodedata is UCD
+# Bundled pycparser is is BSD
+# Bundled pycparser.ply is BSD
+# Bundled bits from cryptography are ASL 2.0 or BSD
# LGPL and another free license we'd need to ask spot about are present in some
# java jars that we're not building with atm (in fact, we're deleting them
# before building). If we restore those we'll have to work out the new
# licensing terms
-License: MIT and Python and UCD
+License: MIT and Python and UCD and BSD and (ASL 2.0 or BSD)
URL: http://pypy.org/
# High-level configuration of the build:
@@ -279,14 +285,23 @@ Provides: pypy%{pyversion}-libs%{?_isa} = %{version}-%{release}
Requires: python-setuptools-wheel
Requires: python-pip-wheel
%else
-Provides: bundled(python3-pip) = 20.0.2
-Provides: bundled(python3-setuptools) = 44.0.0
+Provides: bundled(python3dist(pip)) = 20.0.2
+Provides: bundled(python3dist(setuptools)) = 44.0.0
%endif
# Provides for the bundled libmpdec
Provides: bundled(mpdecimal) = %{libmpdec_version}
Provides: bundled(libmpdec) = %{libmpdec_version}
+# Find the version in lib_pypy/cffi/_pycparser/__init__.py
+Provides: bundled(python3dist(pycparser)) = 2.20
+
+# Find the version in lib_pypy/cffi/_pycparser/ply/__init__.py
+Provides: bundled(python3dist(ply)) = 3.9
+
+# Find the version in lib_pypy/_cffi_ssl/cryptography/__about__.py
+Provides: bundled(python3dist(cryptography)) = 2.7
+
%description libs
Libraries required by the various PyPy implementations of Python 3.
@@ -878,6 +893,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Tue May 25 2021 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.1-6
+- Provide missing bundled library information
+
* Wed May 19 2021 Charalampos Stratakis <cstratak(a)redhat.com> - 7.3.1-5
- Add virtual provides for the bundled libmpdec (rhbz#1943359)
commit a45f4e982edfb10e5ec9dae376ba282d6030e88e
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Thu May 20 00:10:33 2021 +0200
Add virtual provides for the bundled libmpdec (rhbz#1943359)
diff --git a/pypy3.spec b/pypy3.spec
index 57590db..2184360 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.6
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -14,6 +14,13 @@ URL: http://pypy.org/
# High-level configuration of the build:
+# libmpdec (mpdecimal package in Fedora) is tightly coupled with the
+# decimal module. We keep it bundled as to avoid incompatibilities
+# with the packaged version.
+# The version information can be found at lib_pypy/_libmpdec/mpdecimal.h
+# defined as MPD_VERSION.
+%global libmpdec_version 2.4.1
+
# Whether to use RPM build wheels from the python-{pip,setuptools}-wheel package
# Uses upstream bundled prebuilt wheels otherwise
%bcond_without rpmwheels
@@ -276,6 +283,10 @@ Provides: bundled(python3-pip) = 20.0.2
Provides: bundled(python3-setuptools) = 44.0.0
%endif
+# Provides for the bundled libmpdec
+Provides: bundled(mpdecimal) = %{libmpdec_version}
+Provides: bundled(libmpdec) = %{libmpdec_version}
+
%description libs
Libraries required by the various PyPy implementations of Python 3.
@@ -693,6 +704,13 @@ rm -f %{buildroot}%{pypyprefix}/bin/libpypy3-c.so.debug
%check
+
+# Verify that the bundled libmpdec version python was compiled with, is the same version we have virtual
+# provides for in the SPEC.
+test "$(%{goal_dir}/pypy3-c -c 'import decimal; print(decimal.__libmpdec_version__.decode("ascii"))')" = \
+ "%{libmpdec_version}"
+
+
topdir=$(pwd)
SkipTest() {
@@ -860,6 +878,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed May 19 2021 Charalampos Stratakis <cstratak(a)redhat.com> - 7.3.1-5
+- Add virtual provides for the bundled libmpdec (rhbz#1943359)
+
* Wed Jan 27 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.1-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
commit 10fe1a9ce92d4e78add6f3b961d0600a9e72fe51
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Thu May 20 00:09:06 2021 +0200
Temporary workaround for missing %apply_patch in RPM 4.17 alpha
diff --git a/pypy3.spec b/pypy3.spec
index 79848ea..57590db 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -306,6 +306,8 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%prep
%autosetup -n pypy%{pyversion}-v%{version}-src -p1 -S git
+# Temporary workaround for https://bugzilla.redhat.com/show_bug.cgi?id=1954999
+%{?!apply_patch:%define apply_patch(qp:m:) {%__apply_patch %**}}
%if %{with rpmwheels}
%apply_patch -m %(basename %{SOURCE189}) %{SOURCE189}
commit 7e40fae162577d96896fe74dc35072e5ee3e8ea3
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Wed Jan 27 08:56:57 2021 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index fd45393..79848ea 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.6
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -858,6 +858,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed Jan 27 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.1-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
* Sat Aug 01 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.1-3
- Second attempt - Rebuilt for
https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
commit 2db1dabba5dce3ef2b86a0432eb42488e0be3bda
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Sat Aug 1 07:17:17 2020 +0000
- Second attempt - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index ad7423f..fd45393 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.6
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -858,6 +858,10 @@ CheckPyPy %{name}-stackless
%changelog
+* Sat Aug 01 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.1-3
+- Second attempt - Rebuilt for
+ https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
* Tue Jul 28 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
commit a68c6873ebaceff0dbddeec347b44f1ea70df1f7
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Tue Jul 28 23:22:44 2020 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index ebca79e..ad7423f 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.6
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -858,6 +858,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Tue Jul 28 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
* Wed Apr 15 2020 Tomas Hrnciar <thrnciar(a)redhat.com> - 7.3.1-1
- Update to 7.3.1
commit 598f61d5f284c0a353b971350aedf5dd710ddf50
Author: Tomas Hrnciar <thrnciar(a)redhat.com>
Date: Mon Apr 20 13:08:30 2020 +0200
Update to 7.3.1
diff --git a/.gitignore b/.gitignore
index 9058264..849f483 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,4 @@
/pypy3.6-v7.1.1-src.tar.bz2
/pypy3.6-v7.2.0-src.tar.bz2
/pypy3.6-v7.3.0-src.tar.bz2
+/pypy3.6-v7.3.1-src.tar.bz2
diff --git a/189-use-rpm-wheels.patch b/189-use-rpm-wheels.patch
index c84b0cb..0032ba9 100644
--- a/189-use-rpm-wheels.patch
+++ b/189-use-rpm-wheels.patch
@@ -1,24 +1,25 @@
diff --git a/lib-python/3/ensurepip/__init__.py b/lib-python/3/ensurepip/__init__.py
-index 7a0d3ee..2c9d676 100644
+index 6b35b3d..97fc83b 100644
--- a/lib-python/3/ensurepip/__init__.py
+++ b/lib-python/3/ensurepip/__init__.py
-@@ -1,6 +1,7 @@
+@@ -1,16 +1,34 @@
+import distutils.version
+import glob
import os
import os.path
--import pkgutil
+ import pkgutil
import sys
++import runpy
import tempfile
-
-@@ -8,9 +9,24 @@ import tempfile
+
+
__all__ = ["version", "bootstrap"]
-
-
--_SETUPTOOLS_VERSION = "41.2.0"
+
+
+-_SETUPTOOLS_VERSION = "44.0.0"
+_WHEEL_DIR = "/usr/share/python-wheels/"
-
--_PIP_VERSION = "19.2.3"
+
+-_PIP_VERSION = "20.0.2"
+_wheels = {}
+
+def _get_most_recent_wheel_version(pkg):
@@ -35,10 +36,32 @@ index 7a0d3ee..2c9d676 100644
+_SETUPTOOLS_VERSION = _get_most_recent_wheel_version("setuptools")
+
+_PIP_VERSION = _get_most_recent_wheel_version("pip")
-
+
_PROJECTS = [
("setuptools", _SETUPTOOLS_VERSION),
-@@ -93,13 +109,10 @@ def _bootstrap(*, root=None, upgrade=False, user=False,
+@@ -23,10 +41,18 @@ def _run_pip(args, additional_paths=None):
+ if additional_paths is not None:
+ sys.path = additional_paths + sys.path
+
+- # Install the bundled software
+- import pip._internal.cli.main
+- return pip._internal.cli.main.main(args)
++ # Invoke pip as if it's the main module, and catch the exit.
++ backup_argv = sys.argv[:]
++ sys.argv[1:] = args
++ try:
++ # run_module() alters sys.modules and sys.argv, but restores them at exit
++ runpy.run_module("pip", run_name="__main__", alter_sys=True)
++ except SystemExit as exc:
++ return exc.code
++ finally:
++ sys.argv[:] = backup_argv
+
++ raise SystemError("pip did not exit, this should never happen")
+
+ def version():
+ """
+@@ -93,13 +119,10 @@ def _bootstrap(*, root=None, upgrade=False, user=False,
# additional paths that need added to sys.path
additional_paths = []
for project, version in _PROJECTS:
@@ -53,6 +76,6 @@ index 7a0d3ee..2c9d676 100644
+ with open(os.path.join(_WHEEL_DIR, wheel_name), "rb") as sfp:
+ with open(os.path.join(tmpdir, wheel_name), "wb") as fp:
+ fp.write(sfp.read())
-
+
additional_paths.append(os.path.join(tmpdir, wheel_name))
-
+
diff --git a/pypy3.spec b/pypy3.spec
index 63edae4..ebca79e 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,8 +1,8 @@
%global basever 7.3
Name: pypy3
-Version: %{basever}.0
+Version: %{basever}.1
%global pyversion 3.6
-Release: 3%{?dist}
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -14,11 +14,6 @@ URL: http://pypy.org/
# High-level configuration of the build:
-# Build with -fcommon
-# https://bugzilla.redhat.com/show_bug.cgi?id=1796821
-# https://bitbucket.org/pypy/pypy/issues/3163
-%define _legacy_common_support 1
-
# Whether to use RPM build wheels from the python-{pip,setuptools}-wheel package
# Uses upstream bundled prebuilt wheels otherwise
%bcond_without rpmwheels
@@ -277,8 +272,8 @@ Provides: pypy%{pyversion}-libs%{?_isa} = %{version}-%{release}
Requires: python-setuptools-wheel
Requires: python-pip-wheel
%else
-Provides: bundled(python3-pip) = 9.0.1
-Provides: bundled(python3-setuptools) = 28.8.0
+Provides: bundled(python3-pip) = 20.0.2
+Provides: bundled(python3-setuptools) = 44.0.0
%endif
%description libs
@@ -863,6 +858,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed Apr 15 2020 Tomas Hrnciar <thrnciar(a)redhat.com> - 7.3.1-1
+- Update to 7.3.1
+
* Wed Feb 12 2020 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.0-3
- Update the ensurepip module to work with setuptools >= 45
diff --git a/sources b/sources
index 2bd7601..0b7b357 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3.6-v7.3.0-src.tar.bz2) = 313a4254262dd8d8b995a50bddbc360cfb67add0818e51a3e9ce25bda6a9b639e9fea8efe7da6adda76dff0a86a364544a13faa516e51b9ea6c25ec99223b435
+SHA512 (pypy3.6-v7.3.1-src.tar.bz2) = f8e32aae7f01225e0e4d6763eaac40fc02dffc3d0b6a30f22d422147f9be4f3290ea78160a912ffae311dea3d503eb31a7a4f3999d3b541fbccd93d1cef4ca56
commit 2032d986801b3a542282dd6341b01ce5cfe7e347
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Feb 12 13:30:25 2020 +0100
Update the ensurepip module to work with setuptools >= 45
setuptools 45.x is Python 3 only and changed the name of the wheel
diff --git a/189-use-rpm-wheels.patch b/189-use-rpm-wheels.patch
index 9441309..c84b0cb 100644
--- a/189-use-rpm-wheels.patch
+++ b/189-use-rpm-wheels.patch
@@ -1,8 +1,8 @@
diff --git a/lib-python/3/ensurepip/__init__.py b/lib-python/3/ensurepip/__init__.py
-index 9f5d151..8b81155 100644
+index 7a0d3ee..2c9d676 100644
--- a/lib-python/3/ensurepip/__init__.py
+++ b/lib-python/3/ensurepip/__init__.py
-@@ -1,16 +1,27 @@
+@@ -1,6 +1,7 @@
+import distutils.version
+import glob
import os
@@ -11,20 +11,25 @@ index 9f5d151..8b81155 100644
import sys
import tempfile
-
+@@ -8,9 +9,24 @@ import tempfile
__all__ = ["version", "bootstrap"]
-+_WHEEL_DIR = "/usr/share/python-wheels/"
-_SETUPTOOLS_VERSION = "41.2.0"
++_WHEEL_DIR = "/usr/share/python-wheels/"
-_PIP_VERSION = "19.2.3"
++_wheels = {}
++
+def _get_most_recent_wheel_version(pkg):
+ prefix = os.path.join(_WHEEL_DIR, "{}-".format(pkg))
-+ suffix = "-py2.py3-none-any.whl"
-+ pattern = "{}*{}".format(prefix, suffix)
-+ versions = (p[len(prefix):-len(suffix)] for p in glob.glob(pattern))
-+ return str(max(versions, key=distutils.version.LooseVersion))
++ _wheels[pkg] = {}
++ for suffix in "-py2.py3-none-any.whl", "-py3-none-any.whl":
++ pattern = "{}*{}".format(prefix, suffix)
++ for path in glob.glob(pattern):
++ version_str = path[len(prefix):-len(suffix)]
++ _wheels[pkg][version_str] = os.path.basename(path)
++ return str(max(_wheels[pkg], key=distutils.version.LooseVersion))
+
+
+_SETUPTOOLS_VERSION = _get_most_recent_wheel_version("setuptools")
@@ -33,16 +38,18 @@ index 9f5d151..8b81155 100644
_PROJECTS = [
("setuptools", _SETUPTOOLS_VERSION),
-@@ -79,12 +95,9 @@ def bootstrap(*, root=None, upgrade=False, user=False,
+@@ -93,13 +109,10 @@ def _bootstrap(*, root=None, upgrade=False, user=False,
+ # additional paths that need added to sys.path
additional_paths = []
for project, version in _PROJECTS:
- wheel_name = "{}-{}-py2.py3-none-any.whl".format(project, version)
+- wheel_name = "{}-{}-py2.py3-none-any.whl".format(project, version)
- whl = pkgutil.get_data(
- "ensurepip",
- "_bundled/{}".format(wheel_name),
- )
- with open(os.path.join(tmpdir, wheel_name), "wb") as fp:
- fp.write(whl)
++ wheel_name = _wheels[project][version]
+ with open(os.path.join(_WHEEL_DIR, wheel_name), "rb") as sfp:
+ with open(os.path.join(tmpdir, wheel_name), "wb") as fp:
+ fp.write(sfp.read())
diff --git a/pypy3.spec b/pypy3.spec
index e17f3a4..63edae4 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.6
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -863,6 +863,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed Feb 12 2020 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.0-3
+- Update the ensurepip module to work with setuptools >= 45
+
* Thu Jan 30 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
commit 64a5625b90ea9129c1a509ef184c67c97b5699ae
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Feb 12 20:01:06 2020 +0100
Build with -fcommon
diff --git a/pypy3.spec b/pypy3.spec
index a30e912..e17f3a4 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -14,6 +14,11 @@ URL: http://pypy.org/
# High-level configuration of the build:
+# Build with -fcommon
+# https://bugzilla.redhat.com/show_bug.cgi?id=1796821
+# https://bitbucket.org/pypy/pypy/issues/3163
+%define _legacy_common_support 1
+
# Whether to use RPM build wheels from the python-{pip,setuptools}-wheel package
# Uses upstream bundled prebuilt wheels otherwise
%bcond_without rpmwheels
commit 1dceae177ceb5daa5cfc82db2a6afa9a3d3b37d2
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Thu Jan 30 10:15:13 2020 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index 7257616..a30e912 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.6
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -858,6 +858,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Thu Jan 30 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
* Sat Dec 28 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.0-1
- Update to 7.3.0
commit 41c6994849a04d82eb969a306751bf35afe90735
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sat Dec 28 11:22:21 2019 +0100
Update to 7.3.0
diff --git a/.gitignore b/.gitignore
index 4b53676..9058264 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,4 @@
/pypy3.5-v7.0.0-src.tar.bz2
/pypy3.6-v7.1.1-src.tar.bz2
/pypy3.6-v7.2.0-src.tar.bz2
+/pypy3.6-v7.3.0-src.tar.bz2
diff --git a/189-use-rpm-wheels.patch b/189-use-rpm-wheels.patch
index 4a62d57..9441309 100644
--- a/189-use-rpm-wheels.patch
+++ b/189-use-rpm-wheels.patch
@@ -16,9 +16,9 @@ index 9f5d151..8b81155 100644
+_WHEEL_DIR = "/usr/share/python-wheels/"
--_SETUPTOOLS_VERSION = "40.6.2"
+-_SETUPTOOLS_VERSION = "41.2.0"
--_PIP_VERSION = "18.1"
+-_PIP_VERSION = "19.2.3"
+def _get_most_recent_wheel_version(pkg):
+ prefix = os.path.join(_WHEEL_DIR, "{}-".format(pkg))
+ suffix = "-py2.py3-none-any.whl"
diff --git a/d81c769a235307f6671a8fa916f48d6896cbb823.patch b/d81c769a235307f6671a8fa916f48d6896cbb823.patch
deleted file mode 100644
index 8debd29..0000000
--- a/d81c769a235307f6671a8fa916f48d6896cbb823.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-# HG changeset patch
-# User Armin Rigo <arigo(a)tunes.org>
-# Date 1571380165 -7200
-# Node ID d81c769a235307f6671a8fa916f48d6896cbb823
-# Parent f27546b858f97bfa286a891e1474579759028784
-Arguably, clarify the logic. The real motivation is a gcc bug, see issue #3086
-
-diff --git a/rpython/jit/backend/aarch64/opassembler.py b/rpython/jit/backend/aarch64/opassembler.py
---- a/rpython/jit/backend/aarch64/opassembler.py
-+++ b/rpython/jit/backend/aarch64/opassembler.py
-@@ -808,9 +808,7 @@
- # Inline a series of STR operations, starting at 'dstaddr_loc'.
- #
- self.mc.gen_load_int(r.ip0.value, 0)
-- i = 0
-- adjustment = 0
-- needs_adjustment = itemsize < 8 and (startbyte % 8)
-+ i = dst_i = 0
- total_size = size_box.getint()
- while i < total_size:
- sz = itemsize
-@@ -818,19 +816,19 @@
- next_group += 8
- if next_group <= total_size:
- sz = 8
-+ if dst_i % 8: # unaligned?
-+ self.mc.ADD_ri(dstaddr_loc.value, dstaddr_loc.value, dst_i)
-+ dst_i = 0
- if sz == 8:
-- if needs_adjustment:
-- self.mc.ADD_ri(dstaddr_loc.value, dstaddr_loc.value, i)
-- adjustment = -i
-- needs_adjustment = False
-- self.mc.STR_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
-+ self.mc.STR_ri(r.ip0.value, dstaddr_loc.value, dst_i)
- elif sz == 4:
-- self.mc.STRW_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
-+ self.mc.STRW_ri(r.ip0.value, dstaddr_loc.value, dst_i)
- elif sz == 2:
-- self.mc.STRH_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
-+ self.mc.STRH_ri(r.ip0.value, dstaddr_loc.value, dst_i)
- else:
-- self.mc.STRB_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
-+ self.mc.STRB_ri(r.ip0.value, dstaddr_loc.value, dst_i)
- i += sz
-+ dst_i += sz
-
- else:
- if isinstance(size_box, ConstInt):
diff --git a/pypy3.spec b/pypy3.spec
index 785179e..7257616 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,8 +1,8 @@
-%global basever 7.2
+%global basever 7.3
Name: pypy3
Version: %{basever}.0
%global pyversion 3.6
-Release: 2%{?dist}
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -164,9 +164,6 @@ Patch9: 009-add-libxcrypt-support.patch
# It seems ppc64 has no faulthandler
Patch11: 011-no-faulthandler.patch
-# https://bitbucket.org/pypy/pypy/issues/3086
-Patch12: d81c769a235307f6671a8fa916f48d6896cbb823.patch
-
# Instead of bundled wheels, use our RPM packaged wheels from
# /usr/share/python-wheels
# We conditionally apply this, but we use autosetup, so we use Source here
@@ -861,6 +858,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Sat Dec 28 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.0-1
+- Update to 7.3.0
+
* Wed Oct 23 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.2.0-2
- Enable JIT on aarch64
diff --git a/sources b/sources
index 25bbbb3..2bd7601 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3.6-v7.2.0-src.tar.bz2) = bcbb53062a473d504bcc082cf6286f6169c83d1f38d22c4d7c4e46ddc32bca9d91e71194637e6650db5bec02b29fe262b22fe236d627b6bc3e6e0c59c66c07cc
+SHA512 (pypy3.6-v7.3.0-src.tar.bz2) = 313a4254262dd8d8b995a50bddbc360cfb67add0818e51a3e9ce25bda6a9b639e9fea8efe7da6adda76dff0a86a364544a13faa516e51b9ea6c25ec99223b435
commit 5aa1d86125bbb751ef5edc25907f659c20d31797
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Oct 23 17:03:00 2019 +0200
Enable JIT on aarch64, add upstream workaround
diff --git a/d81c769a235307f6671a8fa916f48d6896cbb823.patch b/d81c769a235307f6671a8fa916f48d6896cbb823.patch
new file mode 100644
index 0000000..8debd29
--- /dev/null
+++ b/d81c769a235307f6671a8fa916f48d6896cbb823.patch
@@ -0,0 +1,49 @@
+# HG changeset patch
+# User Armin Rigo <arigo(a)tunes.org>
+# Date 1571380165 -7200
+# Node ID d81c769a235307f6671a8fa916f48d6896cbb823
+# Parent f27546b858f97bfa286a891e1474579759028784
+Arguably, clarify the logic. The real motivation is a gcc bug, see issue #3086
+
+diff --git a/rpython/jit/backend/aarch64/opassembler.py b/rpython/jit/backend/aarch64/opassembler.py
+--- a/rpython/jit/backend/aarch64/opassembler.py
++++ b/rpython/jit/backend/aarch64/opassembler.py
+@@ -808,9 +808,7 @@
+ # Inline a series of STR operations, starting at 'dstaddr_loc'.
+ #
+ self.mc.gen_load_int(r.ip0.value, 0)
+- i = 0
+- adjustment = 0
+- needs_adjustment = itemsize < 8 and (startbyte % 8)
++ i = dst_i = 0
+ total_size = size_box.getint()
+ while i < total_size:
+ sz = itemsize
+@@ -818,19 +816,19 @@
+ next_group += 8
+ if next_group <= total_size:
+ sz = 8
++ if dst_i % 8: # unaligned?
++ self.mc.ADD_ri(dstaddr_loc.value, dstaddr_loc.value, dst_i)
++ dst_i = 0
+ if sz == 8:
+- if needs_adjustment:
+- self.mc.ADD_ri(dstaddr_loc.value, dstaddr_loc.value, i)
+- adjustment = -i
+- needs_adjustment = False
+- self.mc.STR_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
++ self.mc.STR_ri(r.ip0.value, dstaddr_loc.value, dst_i)
+ elif sz == 4:
+- self.mc.STRW_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
++ self.mc.STRW_ri(r.ip0.value, dstaddr_loc.value, dst_i)
+ elif sz == 2:
+- self.mc.STRH_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
++ self.mc.STRH_ri(r.ip0.value, dstaddr_loc.value, dst_i)
+ else:
+- self.mc.STRB_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
++ self.mc.STRB_ri(r.ip0.value, dstaddr_loc.value, dst_i)
+ i += sz
++ dst_i += sz
+
+ else:
+ if isinstance(size_box, ConstInt):
diff --git a/pypy3.spec b/pypy3.spec
index 70caacc..785179e 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.6
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -95,8 +95,7 @@ URL: http://pypy.org/
# it on the other archs. The resulting binary will typically be slower than
# CPython for the latter case.
-# aarch64: https://bitbucket.org/pypy/pypy/issues/3086
-%ifarch %{ix86} x86_64 %{arm} %{power64} s390x
+%ifarch %{ix86} x86_64 %{arm} %{power64} s390x aarch64
%global with_jit 1
%else
%global with_jit 0
@@ -165,6 +164,9 @@ Patch9: 009-add-libxcrypt-support.patch
# It seems ppc64 has no faulthandler
Patch11: 011-no-faulthandler.patch
+# https://bitbucket.org/pypy/pypy/issues/3086
+Patch12: d81c769a235307f6671a8fa916f48d6896cbb823.patch
+
# Instead of bundled wheels, use our RPM packaged wheels from
# /usr/share/python-wheels
# We conditionally apply this, but we use autosetup, so we use Source here
@@ -859,6 +861,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed Oct 23 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.2.0-2
+- Enable JIT on aarch64
+
* Mon Oct 14 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.2.0-1
- Update to 7.2.0 (#1757707)
- Enable aarch64 (without JIT)
commit faa7ffb044605fcf1d807ada72eeb88ccf4181a1
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sat Oct 19 00:41:56 2019 +0200
Build everything with pypy, but fix the cpython build w/out pycparser
diff --git a/pypy3.spec b/pypy3.spec
index 0ab7125..70caacc 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -179,25 +179,15 @@ Source189: 189-use-rpm-wheels.patch
# and avoid a cycle in the build-time dependency graph:
# Note, pypy3 is built with pypy2, so no dependency cycle
-%ifarch %{power64}
-# the build is unreliable with pypy+power, getting random failures
-# so better have a bit slower build than having to build until it pass
-%global use_self_when_building 0
-%else
%global use_self_when_building 1
-%endif
-
%if 0%{use_self_when_building}
# pypy3 can only be build with pypy2
BuildRequires: pypy2
-# no pypy-pycparser available ATM
%global bootstrap_python_interp pypy2
%else
-
-
# pypy3 can only be build with python2
-BuildRequires: python2-devel
-BuildRequires: python2-pycparser
+# exception to use Python 2: https://pagure.io/fesco/issue/2130
+BuildRequires: python27
%global bootstrap_python_interp python2
%endif
@@ -356,6 +346,11 @@ rm lib-python/3/idlelib/idle.bat
sed -i -r 's/\$\(LDFLAGSEXTRA\)/& -fuse-ld=gold/' ./rpython/translator/platform/posix.py
%endif
+%if ! 0%{use_self_when_building}
+ # use the pycparser from PyPy even on CPython
+ ln -s lib_pypy/cffi/_pycparser pycparser
+%endif
+
%build
%ifarch s390 s390x
# pypy3 requires z10 at least
commit 8d646e7dd1de54fcf25b0d37ccc3b087b8e7554e
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Oct 18 19:02:40 2019 +0200
Fix %{pypy3_version} for PyPy 3.10
diff --git a/macros.pypy3 b/macros.pypy3
index f138a39..d11474b 100644
--- a/macros.pypy3
+++ b/macros.pypy3
@@ -1,5 +1,5 @@
%__pypy3 /usr/bin/pypy3
%pypy3_sitelib %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
%pypy3_sitearch %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")
-%pypy3_version %(%{__pypy3} -c "import sys; sys.stdout.write(sys.version[:3])")
+%pypy3_version %(%{__pypy3} -c "import sys; sys.stdout.write('{0.major}.{0.minor}'.format(sys.version_info))")
%pypy3_pypy_version %(%{__pypy3} -c "import sys; sys.stdout.write('{}.{}'.format(sys.pypy_version_info.major, sys.pypy_version_info.minor))")
commit 083ef4d302f9f87e71603a93650baea2929ab127
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Thu Oct 17 20:29:42 2019 +0200
Enable power64 (with JIT)
diff --git a/pypy3.spec b/pypy3.spec
index e7f3045..0ab7125 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -12,9 +12,6 @@ Summary: Python 3 implementation with a Just-In-Time compiler
License: MIT and Python and UCD
URL: http://pypy.org/
-# ppc64: Broken on F29+ https://bugzilla.redhat.com/show_bug.cgi?id=1619601
-ExcludeArch: %{power64}
-
# High-level configuration of the build:
# Whether to use RPM build wheels from the python-{pip,setuptools}-wheel package
@@ -870,6 +867,7 @@ CheckPyPy %{name}-stackless
* Mon Oct 14 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.2.0-1
- Update to 7.2.0 (#1757707)
- Enable aarch64 (without JIT)
+- Enable power64 (with JIT)
* Fri Jul 26 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.1.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
commit f27d32f53000b43d7e821e764b9b8a073e0c8e58
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Oct 15 02:03:21 2019 +0200
Enable aarch64 without JIT
See https://bitbucket.org/pypy/pypy/issues/3086
diff --git a/pypy3.spec b/pypy3.spec
index cf46f81..e7f3045 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -12,9 +12,8 @@ Summary: Python 3 implementation with a Just-In-Time compiler
License: MIT and Python and UCD
URL: http://pypy.org/
-# aarch64: Not available yet
# ppc64: Broken on F29+ https://bugzilla.redhat.com/show_bug.cgi?id=1619601
-ExcludeArch: aarch64 %{power64}
+ExcludeArch: %{power64}
# High-level configuration of the build:
@@ -99,6 +98,7 @@ ExcludeArch: aarch64 %{power64}
# it on the other archs. The resulting binary will typically be slower than
# CPython for the latter case.
+# aarch64: https://bitbucket.org/pypy/pypy/issues/3086
%ifarch %{ix86} x86_64 %{arm} %{power64} s390x
%global with_jit 1
%else
@@ -869,6 +869,7 @@ CheckPyPy %{name}-stackless
%changelog
* Mon Oct 14 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.2.0-1
- Update to 7.2.0 (#1757707)
+- Enable aarch64 (without JIT)
* Fri Jul 26 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.1.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
commit 2f53e9f20a92cd7efc8798ba5d6766812eaea195
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon Oct 14 20:40:57 2019 +0200
Update to 7.2.0
diff --git a/.gitignore b/.gitignore
index 910808c..4b53676 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,4 @@
/pypy3-v6.0.0-src.tar.bz2
/pypy3.5-v7.0.0-src.tar.bz2
/pypy3.6-v7.1.1-src.tar.bz2
+/pypy3.6-v7.2.0-src.tar.bz2
diff --git a/011-no-faulthandler.patch b/011-no-faulthandler.patch
index 9d7165d..e093956 100644
--- a/011-no-faulthandler.patch
+++ b/011-no-faulthandler.patch
@@ -5,18 +5,18 @@ Date: Wed Mar 29 04:31:55 2017 +0200
011-no-faulthandler.patch
diff --git a/lib-python/3/test/support/__init__.py b/lib-python/3/test/support/__init__.py
-index 5d7f308..4424637 100644
+index faa1ba7..2edadc9 100644
--- a/lib-python/3/test/support/__init__.py
+++ b/lib-python/3/test/support/__init__.py
-@@ -6,7 +6,6 @@ if __name__ != 'test.support':
- import collections.abc
+@@ -7,7 +7,6 @@ import collections.abc
import contextlib
+ import datetime
import errno
-import faulthandler
import fnmatch
import functools
import gc
-@@ -65,6 +64,11 @@ try:
+@@ -70,6 +69,11 @@ try:
except ImportError:
resource = None
@@ -28,7 +28,7 @@ index 5d7f308..4424637 100644
__all__ = [
# globals
"PIPE_MAX_SIZE", "verbose", "max_memuse", "use_resources", "failfast",
-@@ -2060,7 +2064,8 @@ def start_threads(threads, unlock=None):
+@@ -2231,7 +2235,8 @@ def start_threads(threads, unlock=None):
finally:
started = [t for t in started if t.isAlive()]
if started:
diff --git a/189-use-rpm-wheels.patch b/189-use-rpm-wheels.patch
index eb8b10e..4a62d57 100644
--- a/189-use-rpm-wheels.patch
+++ b/189-use-rpm-wheels.patch
@@ -16,9 +16,9 @@ index 9f5d151..8b81155 100644
+_WHEEL_DIR = "/usr/share/python-wheels/"
--_SETUPTOOLS_VERSION = "28.8.0"
+-_SETUPTOOLS_VERSION = "40.6.2"
--_PIP_VERSION = "9.0.1"
+-_PIP_VERSION = "18.1"
+def _get_most_recent_wheel_version(pkg):
+ prefix = os.path.join(_WHEEL_DIR, "{}-".format(pkg))
+ suffix = "-py2.py3-none-any.whl"
@@ -33,22 +33,6 @@ index 9f5d151..8b81155 100644
_PROJECTS = [
("setuptools", _SETUPTOOLS_VERSION),
-@@ -24,8 +35,13 @@ def _run_pip(args, additional_paths=None):
- sys.path = additional_paths + sys.path
-
- # Install the bundled software
-- import pip
-- pip.main(args)
-+ try:
-+ # pip 10
-+ from pip._internal import main
-+ except ImportError:
-+ # pip 9
-+ from pip import main
-+ main(args)
-
-
- def version():
@@ -79,12 +95,9 @@ def bootstrap(*, root=None, upgrade=False, user=False,
additional_paths = []
for project, version in _PROJECTS:
diff --git a/pypy3.spec b/pypy3.spec
index 225a1f3..cf46f81 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,8 +1,8 @@
-%global basever 7.1
+%global basever 7.2
Name: pypy3
-Version: %{basever}.1
+Version: %{basever}.0
%global pyversion 3.6
-Release: 2%{?dist}
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -867,6 +867,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Mon Oct 14 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.2.0-1
+- Update to 7.2.0 (#1757707)
+
* Fri Jul 26 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.1.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
diff --git a/sources b/sources
index aa4e777..25bbbb3 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3.6-v7.1.1-src.tar.bz2) = 17e78f9c7080d597a6283d8e8247d1ca78f09a14ff221db8c3d90d255b5befc73102b317ca34a80979e544d5ee72f3e5e649f89d185a085f4cc15012da4d0473
+SHA512 (pypy3.6-v7.2.0-src.tar.bz2) = bcbb53062a473d504bcc082cf6286f6169c83d1f38d22c4d7c4e46ddc32bca9d91e71194637e6650db5bec02b29fe262b22fe236d627b6bc3e6e0c59c66c07cc
commit 707f9490c0c9ae2b3cac2b0c6e9503888c5efad0
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Fri Jul 26 11:47:24 2019 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index b781dfb..225a1f3 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.6
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -867,6 +867,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri Jul 26 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.1.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
* Fri May 24 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.1.1-1
- Update to 7.1.1 (#1689198)
- pypy3 is now Python 3.6
commit 7fc9514b60f515a33dc339d19b94a21dd9943232
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Jul 12 14:48:12 2019 +0200
Keep the LICENSE file in lib/pythonX.Y dir
Virtualenv tries to copy it.
See https://github.com/pypa/virtualenv/issues/1352
Virtualenv ~16.6 warns:
No LICENSE.txt / LICENSE found in source
Technically, it is probably possible to install the package without
%license files, but that would simply resort to the previous noncritical
behavior.
This fix is not critical and hence it doesn't bump release, for easier
backporting to all our Python packages.
diff --git a/pypy3.spec b/pypy3.spec
index 1f45c89..b781dfb 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -688,7 +688,6 @@ install -m0644 -p -D -t %{buildroot}/%{_rpmconfigdir}/macros.d %{SOURCE2}
# Remove files we don't want:
rm -f %{buildroot}%{_libdir}/%{name}-%{basever}.tar.bz2 \
- %{buildroot}%{pypyprefix}/LICENSE \
%{buildroot}%{pypyprefix}/README.rst
# wtf? This is probably masking some bigger problem, but let's do this for now
@@ -828,18 +827,19 @@ CheckPyPy %{name}-stackless
%endif # run_selftests
# Because there's a bunch of binary subpackages and creating
-# /usr/share/licenses/pypy3-this and /usr/share/licenses/pypy3-that
+# /usr/share/doc/pypy3-this and /usr/share/doc/pypy3-that
# is just confusing for the user.
%global _docdir_fmt %{name}
%files libs
-%license LICENSE
%doc README.rst
%dir %{pypyprefix}
%dir %{pypyprefix}/lib-python
+%license %{pypyprefix}/LICENSE
%{pypyprefix}/lib-python/%{pylibver}/
%{pypyprefix}/lib_pypy/
+%license %{pypyprefix}/lib_pypy/*/LICENSE
%{pypyprefix}/site-packages/
%if %{with_emacs}
%{_emacs_sitelispdir}/pypy3trace-mode.el
@@ -847,7 +847,6 @@ CheckPyPy %{name}-stackless
%endif
%files
-%license LICENSE
%doc README.rst
%{_bindir}/pypy3
%{_bindir}/pypy%{pyversion}
@@ -862,7 +861,6 @@ CheckPyPy %{name}-stackless
%if 0%{with_stackless}
%files stackless
-%license LICENSE
%doc README.rst
%{_bindir}/pypy-stackless
%endif
commit cac755a96a589f8c15a50ed6ac9d121e336de51c
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri May 24 10:29:13 2019 +0200
Update to 7.1.1, pypy3 is now Python 3.6
https://bugzilla.redhat.com/show_bug.cgi?id=1689198
diff --git a/.gitignore b/.gitignore
index 1361620..910808c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@
/pypy3-v5.10.1-src.tar.bz2
/pypy3-v6.0.0-src.tar.bz2
/pypy3.5-v7.0.0-src.tar.bz2
+/pypy3.6-v7.1.1-src.tar.bz2
diff --git a/011-no-faulthandler.patch b/011-no-faulthandler.patch
index f96d232..9d7165d 100644
--- a/011-no-faulthandler.patch
+++ b/011-no-faulthandler.patch
@@ -4,60 +4,6 @@ Date: Wed Mar 29 04:31:55 2017 +0200
011-no-faulthandler.patch
-diff --git a/lib-python/3/test/regrtest.py b/lib-python/3/test/regrtest.py
-index c1d85f6..3d3072c 100755
---- a/lib-python/3/test/regrtest.py
-+++ b/lib-python/3/test/regrtest.py
-@@ -124,7 +124,6 @@ import importlib
-
- import argparse
- import builtins
--import faulthandler
- import io
- import json
- import locale
-@@ -152,7 +151,10 @@ try:
- import _multiprocessing, multiprocessing.process
- except ImportError:
- multiprocessing = None
--
-+try:
-+ import faulthandler
-+except ImportError:
-+ faulthandler = None
-
- # Some times __path__ and __file__ are not absolute (e.g. while running from
- # Lib/) and, if we change the CWD to run the tests in a temporary dir, some
-@@ -486,17 +488,18 @@ def main(tests=None, **kwargs):
- directly to set the values that would normally be set by flags
- on the command line.
- """
-- # Display the Python traceback on fatal errors (e.g. segfault)
-- faulthandler.enable(all_threads=True)
--
-- # Display the Python traceback on SIGALRM or SIGUSR1 signal
-- signals = []
-- if hasattr(signal, 'SIGALRM'):
-- signals.append(signal.SIGALRM)
-- if hasattr(signal, 'SIGUSR1'):
-- signals.append(signal.SIGUSR1)
-- for signum in signals:
-- faulthandler.register(signum, chain=True)
-+ if faulthandler:
-+ # Display the Python traceback on fatal errors (e.g. segfault)
-+ faulthandler.enable(all_threads=True)
-+
-+ # Display the Python traceback on SIGALRM or SIGUSR1 signal
-+ signals = []
-+ if hasattr(signal, 'SIGALRM'):
-+ signals.append(signal.SIGALRM)
-+ if hasattr(signal, 'SIGUSR1'):
-+ signals.append(signal.SIGUSR1)
-+ for signum in signals:
-+ faulthandler.register(signum, chain=True)
-
- replace_stdout()
-
diff --git a/lib-python/3/test/support/__init__.py b/lib-python/3/test/support/__init__.py
index 5d7f308..4424637 100644
--- a/lib-python/3/test/support/__init__.py
diff --git a/189-use-rpm-wheels.patch b/189-use-rpm-wheels.patch
index 2caefe2..eb8b10e 100644
--- a/189-use-rpm-wheels.patch
+++ b/189-use-rpm-wheels.patch
@@ -1,5 +1,5 @@
diff --git a/lib-python/3/ensurepip/__init__.py b/lib-python/3/ensurepip/__init__.py
-index 25c5567..6d8d09c 100644
+index 9f5d151..8b81155 100644
--- a/lib-python/3/ensurepip/__init__.py
+++ b/lib-python/3/ensurepip/__init__.py
@@ -1,16 +1,27 @@
@@ -31,9 +31,9 @@ index 25c5567..6d8d09c 100644
+
+_PIP_VERSION = _get_most_recent_wheel_version("pip")
- # pip currently requires ssl support, so we try to provide a nicer
- # error message when that is missing (http://bugs.python.org/issue19744)
-@@ -37,8 +48,13 @@ def _run_pip(args, additional_paths=None):
+ _PROJECTS = [
+ ("setuptools", _SETUPTOOLS_VERSION),
+@@ -24,8 +35,13 @@ def _run_pip(args, additional_paths=None):
sys.path = additional_paths + sys.path
# Install the bundled software
@@ -49,7 +49,7 @@ index 25c5567..6d8d09c 100644
def version():
-@@ -93,12 +109,9 @@ def bootstrap(*, root=None, upgrade=False, user=False,
+@@ -79,12 +95,9 @@ def bootstrap(*, root=None, upgrade=False, user=False,
additional_paths = []
for project, version in _PROJECTS:
wheel_name = "{}-{}-py2.py3-none-any.whl".format(project, version)
diff --git a/pypy3.spec b/pypy3.spec
index 201a8ac..1f45c89 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,8 +1,8 @@
-%global basever 7.0
+%global basever 7.1
Name: pypy3
-Version: %{basever}.0
-%global pyversion 3.5
-Release: 2%{?dist}
+Version: %{basever}.1
+%global pyversion 3.6
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -134,8 +134,7 @@ ExcludeArch: aarch64 %{power64}
# Turn off the brp-python-bytecompile postprocessing script
# We manually invoke it later on, using the freshly built pypy binary
-%global __os_install_post \
- %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
+%global __brp_python_bytecompile %{nil}
# Source and patches:
Source0: https://bitbucket.org/pypy/pypy/downloads/pypy%{pyversion}-v%{version}-sr...
@@ -321,13 +320,6 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%prep
%autosetup -n pypy%{pyversion}-v%{version}-src -p1 -S git
-# While this is 7.0.0, it has 7.1.0-alpha0 listed inside
-# We sed it out to avoid user confusion
-sed -i 's/7\.1\.0/7.0.0/' pypy/doc/conf.py
-sed -i 's/7\.1\.0-alpha0/7.0.0/g' pypy/module/cpyext/include/patchlevel.h pypy/doc/how-to-release.rst
-sed -i 's/0x07010000/0x07000000/' pypy/module/cpyext/include/patchlevel.h
-sed -i 's/7, 1, 0, "alpha"/7, 0, 0, "final"/' pypy/module/sys/version.py
-
%if %{with rpmwheels}
%apply_patch -m %(basename %{SOURCE189}) %{SOURCE189}
@@ -737,7 +729,7 @@ CheckPyPy() {
# Use regrtest to explicitly list all tests:
( ./$ExeName -c \
- "from test.regrtest import findtests; print('\n'.join(findtests()))"
+ "from test.libregrtest.runtest import findtests; print('\n'.join(findtests()))"
) > testnames.txt
# Skip some tests:
@@ -877,6 +869,10 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri May 24 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.1.1-1
+- Update to 7.1.1 (#1689198)
+- pypy3 is now Python 3.6
+
* Thu May 16 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.0.0-2
- Show the version as 7.0.0
diff --git a/sources b/sources
index 294934f..aa4e777 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3.5-v7.0.0-src.tar.bz2) = 3facac26e06e254cbf244841824b35ec211859123f6ba9f095dc980292c10d9cf1d11de62cc6372cf77e92ee1cd2358bbd794b3ff25cb7172e1b21c02c8ce6c2
+SHA512 (pypy3.6-v7.1.1-src.tar.bz2) = 17e78f9c7080d597a6283d8e8247d1ca78f09a14ff221db8c3d90d255b5befc73102b317ca34a80979e544d5ee72f3e5e649f89d185a085f4cc15012da4d0473
diff --git a/tests/tests.yml b/tests/tests.yml
index ce6f13f..c3a91f3 100644
--- a/tests/tests.yml
+++ b/tests/tests.yml
@@ -10,7 +10,7 @@
tests:
- smoke:
dir: python/smoke
- run: PYTHON=pypy3 VERSION=3.5 ./venv.sh
+ run: PYTHON=pypy3 VERSION=3.6 ./venv.sh
required_packages:
- gcc
- python3-tox
commit 3e4b7200d351e351effedb134c8a2adaab71201e
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri May 17 00:56:47 2019 +0200
Show the version as 7.0.0
While this is 7.0.0, it has 7.1.0-alpha0 listed inside,
we sed it out to avoid user confusion.
diff --git a/pypy3.spec b/pypy3.spec
index 6c452df..201a8ac 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.5
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -321,6 +321,14 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%prep
%autosetup -n pypy%{pyversion}-v%{version}-src -p1 -S git
+# While this is 7.0.0, it has 7.1.0-alpha0 listed inside
+# We sed it out to avoid user confusion
+sed -i 's/7\.1\.0/7.0.0/' pypy/doc/conf.py
+sed -i 's/7\.1\.0-alpha0/7.0.0/g' pypy/module/cpyext/include/patchlevel.h pypy/doc/how-to-release.rst
+sed -i 's/0x07010000/0x07000000/' pypy/module/cpyext/include/patchlevel.h
+sed -i 's/7, 1, 0, "alpha"/7, 0, 0, "final"/' pypy/module/sys/version.py
+
+
%if %{with rpmwheels}
%apply_patch -m %(basename %{SOURCE189}) %{SOURCE189}
rm lib-python/3/ensurepip/_bundled/*.whl
@@ -869,6 +877,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Thu May 16 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.0.0-2
+- Show the version as 7.0.0
+
* Thu Feb 28 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.0.0-1
- Update to 7.0.0 (#1673127)
commit 124d766f70858e217aac1b9c297c4c313ccf95df
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Mar 1 00:06:59 2019 +0100
Update to 7.0.0 (#1673127)
diff --git a/.gitignore b/.gitignore
index 2025c8c..1361620 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@
/pypy3-v5.10.0-src.tar.bz2
/pypy3-v5.10.1-src.tar.bz2
/pypy3-v6.0.0-src.tar.bz2
+/pypy3.5-v7.0.0-src.tar.bz2
diff --git a/009-add-libxcrypt-support.patch b/009-add-libxcrypt-support.patch
index ec17216..f3c9a7d 100644
--- a/009-add-libxcrypt-support.patch
+++ b/009-add-libxcrypt-support.patch
@@ -1,13 +1,13 @@
diff --git a/pypy/module/crypt/interp_crypt.py b/pypy/module/crypt/interp_crypt.py
-index d227b6a..da969e6 100644
+index bd13f6f..1022c9e 100644
--- a/pypy/module/crypt/interp_crypt.py
+++ b/pypy/module/crypt/interp_crypt.py
-@@ -6,7 +6,7 @@ import sys
- if sys.platform.startswith('darwin'):
- eci = ExternalCompilationInfo()
+@@ -9,7 +9,7 @@ elif sys.platform.startswith('linux'):
+ # crypt() is defined only in crypt.h on some Linux variants (eg. Fedora 28)
+ eci = ExternalCompilationInfo(libraries=['crypt'], includes=["crypt.h"])
else:
- eci = ExternalCompilationInfo(libraries=['crypt'])
+ eci = ExternalCompilationInfo(libraries=['crypt'], includes=['crypt.h'])
c_crypt = rffi.llexternal('crypt', [rffi.CCHARP, rffi.CCHARP], rffi.CCHARP,
compilation_info=eci, releasegil=False)
-
+
diff --git a/302-fix-multiprocessing-regression-on-newer-glibcs.patch b/302-fix-multiprocessing-regression-on-newer-glibcs.patch
deleted file mode 100644
index db723a8..0000000
--- a/302-fix-multiprocessing-regression-on-newer-glibcs.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-# HG changeset patch
-# User Miro Hrončok <miro(a)hroncok.cz>
-# Date 1524655710 -7200
-# Wed Apr 25 13:28:30 2018 +0200
-# Branch issue33329
-# Node ID 6501fdc3a80fa2bc3b8c70bfaf94a31c3b3432c0
-# Parent a07f07034d281bec8c776f9e1ee7c5b9aea74007
-Fix multiprocessing regression on newer glibcs
-
-Starting with glibc 2.27.9000-xxx, sigaddset() can return EINVAL for some
-reserved signal numbers between 1 and NSIG. The `range(1, NSIG)` idiom
-is commonly used to select all signals for blocking with `pthread_sigmask`.
-So we ignore the sigaddset() return value until we expose sigfillset()
-to provide a better idiom.
-
-Co-authored-by: Antoine Pitrou <antoine(a)python.org>
-
-diff -r a07f07034d28 -r 6501fdc3a80f pypy/module/signal/interp_signal.py
---- a/pypy/module/signal/interp_signal.py Tue Apr 24 10:00:00 2018 +0200
-+++ b/pypy/module/signal/interp_signal.py Wed Apr 25 13:28:30 2018 +0200
-@@ -379,10 +379,10 @@
- for w_signum in space.unpackiterable(self.w_signals):
- signum = space.int_w(w_signum)
- check_signum_in_range(space, signum)
-- err = c_sigaddset(self.mask, signum)
-- if err:
-- raise oefmt(space.w_ValueError,
-- "signal number %d out of range", signum)
-+ # bpo-33329: ignore c_sigaddset() return value as it can fail
-+ # for some reserved signals, but we want the `range(1, NSIG)`
-+ # idiom to allow selecting all valid signals.
-+ c_sigaddset(self.mask, signum)
- return self.mask
-
- def __exit__(self, *args):
diff --git a/pypy3.spec b/pypy3.spec
index 00494e3..6c452df 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,8 +1,8 @@
-%global basever 6.0
+%global basever 7.0
Name: pypy3
Version: %{basever}.0
%global pyversion 3.5
-Release: 5%{?dist}
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -138,7 +138,7 @@ ExcludeArch: aarch64 %{power64}
%(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/pypy3-v%{version}-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy%{pyversion}-v%{version}-sr...
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -174,12 +174,6 @@ Patch11: 011-no-faulthandler.patch
# We conditionally apply this, but we use autosetup, so we use Source here
Source189: 189-use-rpm-wheels.patch
-# Fix multiprocessing regression on newer glibcs
-# See: https://bugzilla.redhat.com/show_bug.cgi?id=1569933
-# and: https://bugs.python.org/issue33329
-# and: https://bitbucket.org/pypy/pypy/pull-requests/607
-Patch302: 302-fix-multiprocessing-regression-on-newer-glibcs.patch
-
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
@@ -224,18 +218,13 @@ BuildRequires: zlib-devel
BuildRequires: bzip2-devel
BuildRequires: ncurses-devel
BuildRequires: expat-devel
+BuildRequires: openssl-devel
BuildRequires: gdbm-devel
BuildRequires: xz-devel
%ifnarch s390
BuildRequires: valgrind-devel
%endif
-%if 0%{?fedora} >= 26
-BuildRequires: compat-openssl10-devel
-%else
-BuildRequires: openssl-devel
-%endif
-
%if %{run_selftests}
# Used by the selftests, though not by the build:
BuildRequires: gc-devel
@@ -266,6 +255,8 @@ BuildRequires: python-pip-wheel
# Metadata for the core package (the JIT build):
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
Provides: %{name}(abi) = %{basever}
+Provides: pypy%{pyversion} = %{version}-%{release}
+Provides: pypy%{pyversion}%{?_isa} = %{version}-%{release}
%description
PyPy's implementation of Python 3, featuring a Just-In-Time compiler on some CPU
@@ -289,6 +280,9 @@ Summary: Run-time libraries used by PyPy implementations of Python 3
Requires: emacs-filesystem >= %{_emacs_version}
%endif
+Provides: pypy%{pyversion}-libs = %{version}-%{release}
+Provides: pypy%{pyversion}-libs%{?_isa} = %{version}-%{release}
+
%if %{with rpmwheels}
Requires: python-setuptools-wheel
Requires: python-pip-wheel
@@ -305,6 +299,9 @@ Libraries required by the various PyPy implementations of Python 3.
Summary: Development tools for working with PyPy3
Requires: pypy3%{?_isa} = %{version}-%{release}
+Provides: pypy%{pyversion}-devel = %{version}-%{release}
+Provides: pypy%{pyversion}-devel%{?_isa} = %{version}-%{release}
+
%description devel
Header files for building C extension modules against PyPy3
@@ -313,12 +310,16 @@ Header files for building C extension modules against PyPy3
%package stackless
Summary: Stackless Python interpreter built using PyPy3
Requires: pypy3-libs%{?_isa} = %{version}-%{release}
+
+Provides: pypy%{pyversion}-stackless = %{version}-%{release}
+Provides: pypy%{pyversion}-stackless%{?_isa} = %{version}-%{release}
+
%description stackless
Build of PyPy3 with support for micro-threads for massive concurrency
%endif
%prep
-%autosetup -n pypy3-v%{version}-src -p1 -S git
+%autosetup -n pypy%{pyversion}-v%{version}-src -p1 -S git
%if %{with rpmwheels}
%apply_patch -m %(basename %{SOURCE189}) %{SOURCE189}
@@ -868,6 +869,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Thu Feb 28 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.0.0-1
+- Update to 7.0.0 (#1673127)
+
* Sat Feb 02 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 6.0.0-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
diff --git a/sources b/sources
index 2a76651..294934f 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3-v6.0.0-src.tar.bz2) = ea406c4dd1837a6ab13026de01330790f3c18f6e2bfb83e8553e52acf78b43dfb559ce75c2d91395055c771db359356c8183ed950da6f01a21bf09128935af5e
+SHA512 (pypy3.5-v7.0.0-src.tar.bz2) = 3facac26e06e254cbf244841824b35ec211859123f6ba9f095dc980292c10d9cf1d11de62cc6372cf77e92ee1cd2358bbd794b3ff25cb7172e1b21c02c8ce6c2
commit 9d9b0859329520bcb7159023c03f12d2807d39da
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Sat Feb 2 05:16:48 2019 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index 5f5203b..00494e3 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.5
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -868,6 +868,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Sat Feb 02 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 6.0.0-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
* Mon Jan 14 2019 Björn Esser <besser82(a)fedoraproject.org> - 6.0.0-4
- Rebuilt for libcrypt.so.2 (#1666033)
commit f8cbccf6e2a244ea2a453c8913e7e1afa23819e8
Author: Björn Esser <besser82(a)fedoraproject.org>
Date: Mon Jan 14 19:14:13 2019 +0100
Rebuilt for libcrypt.so.2 (#1666033)
diff --git a/pypy3.spec b/pypy3.spec
index 7fc7257..5f5203b 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.5
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -868,6 +868,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Mon Jan 14 2019 Björn Esser <besser82(a)fedoraproject.org> - 6.0.0-4
+- Rebuilt for libcrypt.so.2 (#1666033)
+
* Tue Aug 21 2018 Miro Hrončok <mhroncok(a)redhat.com> - 6.0.0-3
- Use RPM packaged wheels
commit e0becb7cbf6a7549fab9d9a40299888ceae794fe
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Jul 20 12:37:22 2018 +0200
Enable basic venv smoke test in the CI
diff --git a/tests/tests.yml b/tests/tests.yml
new file mode 100644
index 0000000..ce6f13f
--- /dev/null
+++ b/tests/tests.yml
@@ -0,0 +1,17 @@
+---
+- hosts: localhost
+ roles:
+ - role: standard-test-basic
+ tags:
+ - classic
+ repositories:
+ - repo: "https://src.fedoraproject.org/tests/python.git"
+ dest: "python"
+ tests:
+ - smoke:
+ dir: python/smoke
+ run: PYTHON=pypy3 VERSION=3.5 ./venv.sh
+ required_packages:
+ - gcc
+ - python3-tox
+ - pypy3-devel
commit 6f8b7baed90a92dcbd3bed71bf98fa1c073bec3a
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Aug 21 12:10:46 2018 +0200
Use RPM packaged wheels
diff --git a/189-use-rpm-wheels.patch b/189-use-rpm-wheels.patch
new file mode 100644
index 0000000..2caefe2
--- /dev/null
+++ b/189-use-rpm-wheels.patch
@@ -0,0 +1,67 @@
+diff --git a/lib-python/3/ensurepip/__init__.py b/lib-python/3/ensurepip/__init__.py
+index 25c5567..6d8d09c 100644
+--- a/lib-python/3/ensurepip/__init__.py
++++ b/lib-python/3/ensurepip/__init__.py
+@@ -1,16 +1,27 @@
++import distutils.version
++import glob
+ import os
+ import os.path
+-import pkgutil
+ import sys
+ import tempfile
+
+
+ __all__ = ["version", "bootstrap"]
+
++_WHEEL_DIR = "/usr/share/python-wheels/"
+
+-_SETUPTOOLS_VERSION = "28.8.0"
+
+-_PIP_VERSION = "9.0.1"
++def _get_most_recent_wheel_version(pkg):
++ prefix = os.path.join(_WHEEL_DIR, "{}-".format(pkg))
++ suffix = "-py2.py3-none-any.whl"
++ pattern = "{}*{}".format(prefix, suffix)
++ versions = (p[len(prefix):-len(suffix)] for p in glob.glob(pattern))
++ return str(max(versions, key=distutils.version.LooseVersion))
++
++
++_SETUPTOOLS_VERSION = _get_most_recent_wheel_version("setuptools")
++
++_PIP_VERSION = _get_most_recent_wheel_version("pip")
+
+ # pip currently requires ssl support, so we try to provide a nicer
+ # error message when that is missing (http://bugs.python.org/issue19744)
+@@ -37,8 +48,13 @@ def _run_pip(args, additional_paths=None):
+ sys.path = additional_paths + sys.path
+
+ # Install the bundled software
+- import pip
+- pip.main(args)
++ try:
++ # pip 10
++ from pip._internal import main
++ except ImportError:
++ # pip 9
++ from pip import main
++ main(args)
+
+
+ def version():
+@@ -93,12 +109,9 @@ def bootstrap(*, root=None, upgrade=False, user=False,
+ additional_paths = []
+ for project, version in _PROJECTS:
+ wheel_name = "{}-{}-py2.py3-none-any.whl".format(project, version)
+- whl = pkgutil.get_data(
+- "ensurepip",
+- "_bundled/{}".format(wheel_name),
+- )
+- with open(os.path.join(tmpdir, wheel_name), "wb") as fp:
+- fp.write(whl)
++ with open(os.path.join(_WHEEL_DIR, wheel_name), "rb") as sfp:
++ with open(os.path.join(tmpdir, wheel_name), "wb") as fp:
++ fp.write(sfp.read())
+
+ additional_paths.append(os.path.join(tmpdir, wheel_name))
+
diff --git a/pypy3.spec b/pypy3.spec
index 7193654..7fc7257 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.5
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -18,6 +18,10 @@ ExcludeArch: aarch64 %{power64}
# High-level configuration of the build:
+# Whether to use RPM build wheels from the python-{pip,setuptools}-wheel package
+# Uses upstream bundled prebuilt wheels otherwise
+%bcond_without rpmwheels
+
# PyPy consists of an implementation of an interpreter (with JIT compilation)
# for the full Python language written in a high-level language, leaving many
# of the implementation details as "pluggable" policies.
@@ -165,6 +169,11 @@ Patch9: 009-add-libxcrypt-support.patch
# It seems ppc64 has no faulthandler
Patch11: 011-no-faulthandler.patch
+# Instead of bundled wheels, use our RPM packaged wheels from
+# /usr/share/python-wheels
+# We conditionally apply this, but we use autosetup, so we use Source here
+Source189: 189-use-rpm-wheels.patch
+
# Fix multiprocessing regression on newer glibcs
# See: https://bugzilla.redhat.com/show_bug.cgi?id=1569933
# and: https://bugs.python.org/issue33329
@@ -249,6 +258,11 @@ BuildRequires: emacs
# For %%autosetup -S git
BuildRequires: %{_bindir}/git
+%if %{with rpmwheels}
+BuildRequires: python-setuptools-wheel
+BuildRequires: python-pip-wheel
+%endif
+
# Metadata for the core package (the JIT build):
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
Provides: %{name}(abi) = %{basever}
@@ -275,6 +289,14 @@ Summary: Run-time libraries used by PyPy implementations of Python 3
Requires: emacs-filesystem >= %{_emacs_version}
%endif
+%if %{with rpmwheels}
+Requires: python-setuptools-wheel
+Requires: python-pip-wheel
+%else
+Provides: bundled(python3-pip) = 9.0.1
+Provides: bundled(python3-setuptools) = 28.8.0
+%endif
+
%description libs
Libraries required by the various PyPy implementations of Python 3.
@@ -298,6 +320,17 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%prep
%autosetup -n pypy3-v%{version}-src -p1 -S git
+%if %{with rpmwheels}
+%apply_patch -m %(basename %{SOURCE189}) %{SOURCE189}
+rm lib-python/3/ensurepip/_bundled/*.whl
+rmdir lib-python/3/ensurepip/_bundled
+%else
+# we don't want to ship the old ones anyway
+rm lib-python/3/ensurepip/_bundled/pip-8.1.2-*
+rm lib-python/3/ensurepip/_bundled/setuptools-21.2.1-*
+%endif
+
+
# Replace /usr/local/bin/python or /usr/bin/env python shebangs with /usr/bin/python2 or pypy2:
find -name "*.py" -exec \
sed \
@@ -835,6 +868,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Tue Aug 21 2018 Miro Hrončok <mhroncok(a)redhat.com> - 6.0.0-3
+- Use RPM packaged wheels
+
* Fri Jul 13 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 6.0.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
commit 9d0ffbc9d5d861af1635230e55a86c7bc77438b7
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Aug 21 11:48:21 2018 +0200
Poor ppc64(le), it just doesn't build :(
diff --git a/pypy3.spec b/pypy3.spec
index ccbd579..7193654 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -12,8 +12,9 @@ Summary: Python 3 implementation with a Just-In-Time compiler
License: MIT and Python and UCD
URL: http://pypy.org/
-# Not available yet
-ExcludeArch: aarch64
+# aarch64: Not available yet
+# ppc64: Broken on F29+ https://bugzilla.redhat.com/show_bug.cgi?id=1619601
+ExcludeArch: aarch64 %{power64}
# High-level configuration of the build:
commit e47185bc51db6ff0d04546479b77bdfe84b586c2
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sun Jul 15 16:25:45 2018 +0200
Drop RHEL5 conditional
diff --git a/pypy3.spec b/pypy3.spec
index 2e1edb6..ccbd579 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -104,7 +104,7 @@ ExcludeArch: aarch64
%global with_stackless 0
# Should we build the emacs JIT-viewing mode?
-%if 0%{?rhel} == 5 || 0%{?rhel} == 6
+%if 0%{?rhel} == 6
%global with_emacs 0
%else
%global with_emacs 1
commit 3f667ce3366f6971e86aa07783bbc2a370043c5a
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sun Jul 15 16:23:25 2018 +0200
BR gcc
diff --git a/pypy3.spec b/pypy3.spec
index fb1ac73..2e1edb6 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -202,6 +202,8 @@ BuildRequires: python2-pycparser
%endif
+BuildRequires: gcc
+
BuildRequires: libffi-devel
BuildRequires: tcl-devel
BuildRequires: tk-devel
commit f7ac519b1ef348af1d5b57d089f2d7b2109388f6
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Fri Jul 13 23:12:32 2018 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index b1add4a..fb1ac73 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.5
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -832,6 +832,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri Jul 13 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 6.0.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
* Wed Apr 25 2018 Miro Hrončok <mhroncok(a)redhat.com> - 6.0.0-1
- Fix failing taskotron check
- New release 6.0.0 (#1571489)
commit 18c888e5f5972bd6391a59f77794b317c359cec1
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Apr 25 14:20:20 2018 +0200
New release 6.0.0 (#1571489)
Fix multiprocessing regression on newer glibcs (#1569933)
diff --git a/.gitignore b/.gitignore
index 67b6ee0..2025c8c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@
/pypy3-v5.9.0-src.tar.bz2
/pypy3-v5.10.0-src.tar.bz2
/pypy3-v5.10.1-src.tar.bz2
+/pypy3-v6.0.0-src.tar.bz2
diff --git a/302-fix-multiprocessing-regression-on-newer-glibcs.patch b/302-fix-multiprocessing-regression-on-newer-glibcs.patch
new file mode 100644
index 0000000..db723a8
--- /dev/null
+++ b/302-fix-multiprocessing-regression-on-newer-glibcs.patch
@@ -0,0 +1,35 @@
+# HG changeset patch
+# User Miro Hrončok <miro(a)hroncok.cz>
+# Date 1524655710 -7200
+# Wed Apr 25 13:28:30 2018 +0200
+# Branch issue33329
+# Node ID 6501fdc3a80fa2bc3b8c70bfaf94a31c3b3432c0
+# Parent a07f07034d281bec8c776f9e1ee7c5b9aea74007
+Fix multiprocessing regression on newer glibcs
+
+Starting with glibc 2.27.9000-xxx, sigaddset() can return EINVAL for some
+reserved signal numbers between 1 and NSIG. The `range(1, NSIG)` idiom
+is commonly used to select all signals for blocking with `pthread_sigmask`.
+So we ignore the sigaddset() return value until we expose sigfillset()
+to provide a better idiom.
+
+Co-authored-by: Antoine Pitrou <antoine(a)python.org>
+
+diff -r a07f07034d28 -r 6501fdc3a80f pypy/module/signal/interp_signal.py
+--- a/pypy/module/signal/interp_signal.py Tue Apr 24 10:00:00 2018 +0200
++++ b/pypy/module/signal/interp_signal.py Wed Apr 25 13:28:30 2018 +0200
+@@ -379,10 +379,10 @@
+ for w_signum in space.unpackiterable(self.w_signals):
+ signum = space.int_w(w_signum)
+ check_signum_in_range(space, signum)
+- err = c_sigaddset(self.mask, signum)
+- if err:
+- raise oefmt(space.w_ValueError,
+- "signal number %d out of range", signum)
++ # bpo-33329: ignore c_sigaddset() return value as it can fail
++ # for some reserved signals, but we want the `range(1, NSIG)`
++ # idiom to allow selecting all valid signals.
++ c_sigaddset(self.mask, signum)
+ return self.mask
+
+ def __exit__(self, *args):
diff --git a/pypy3.spec b/pypy3.spec
index a14b96d..b1add4a 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,8 +1,8 @@
-%global basever 5.10
+%global basever 6.0
Name: pypy3
-Version: %{basever}.1
+Version: %{basever}.0
%global pyversion 3.5
-Release: 8%{?dist}
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -164,6 +164,12 @@ Patch9: 009-add-libxcrypt-support.patch
# It seems ppc64 has no faulthandler
Patch11: 011-no-faulthandler.patch
+# Fix multiprocessing regression on newer glibcs
+# See: https://bugzilla.redhat.com/show_bug.cgi?id=1569933
+# and: https://bugs.python.org/issue33329
+# and: https://bitbucket.org/pypy/pypy/pull-requests/607
+Patch302: 302-fix-multiprocessing-regression-on-newer-glibcs.patch
+
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
@@ -826,8 +832,10 @@ CheckPyPy %{name}-stackless
%changelog
-* Sat Apr 14 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-8
+* Wed Apr 25 2018 Miro Hrončok <mhroncok(a)redhat.com> - 6.0.0-1
- Fix failing taskotron check
+- New release 6.0.0 (#1571489)
+- Fix multiprocessing regression on newer glibcs (#1569933)
* Wed Apr 11 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-7
- Provide pypy3(abi) = 5.10
diff --git a/sources b/sources
index afb3c83..2a76651 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3-v5.10.1-src.tar.bz2) = 91b0ed25130bdbb46d5e577136b5fe63d5162917dcc2d0b69f5cac2a283ece9d0bfd3c7c8dc61ff391e0550fa1603326f6edeb2df3159d71617fefe6c07439f5
+SHA512 (pypy3-v6.0.0-src.tar.bz2) = ea406c4dd1837a6ab13026de01330790f3c18f6e2bfb83e8553e52acf78b43dfb559ce75c2d91395055c771db359356c8183ed950da6f01a21bf09128935af5e
commit b70eb98951063c00fb114a91f935d8991ca0e927
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sun Apr 15 00:25:48 2018 +0200
Remove Windows bat file
diff --git a/pypy3.spec b/pypy3.spec
index 0aa26f8..a14b96d 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -309,6 +309,9 @@ find lib-python/%{pylibver} lib_pypy -name "*.py" -exec \
"{}" \
\;
+# Not needed on Linux
+rm lib-python/3/idlelib/idle.bat
+
%ifarch %{ix86} x86_64 %{arm}
sed -i -r 's/\$\(LDFLAGSEXTRA\)/& -fuse-ld=gold/' ./rpython/translator/platform/posix.py
%endif
commit 1b41795b2f455df4a5773c050253c26279595ba7
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sat Apr 14 10:55:05 2018 +0200
Fix shebangs (reported mangled by taskotron)
diff --git a/pypy3.spec b/pypy3.spec
index bf093ac..0aa26f8 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.5
-Release: 7%{?dist}
+Release: 8%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -185,14 +185,14 @@ Patch11: 011-no-faulthandler.patch
# pypy3 can only be build with pypy2
BuildRequires: pypy2
# no pypy-pycparser available ATM
-%global bootstrap_python_interp pypy
+%global bootstrap_python_interp pypy2
%else
# pypy3 can only be build with python2
BuildRequires: python2-devel
BuildRequires: python2-pycparser
-%global bootstrap_python_interp python
+%global bootstrap_python_interp python2
%endif
@@ -289,10 +289,10 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%prep
%autosetup -n pypy3-v%{version}-src -p1 -S git
-# Replace /usr/local/bin/python shebangs with /usr/bin/python:
+# Replace /usr/local/bin/python or /usr/bin/env python shebangs with /usr/bin/python2 or pypy2:
find -name "*.py" -exec \
sed \
- -i -e "s|/usr/local/bin/python|/usr/bin/python|" \
+ -i -r -e "s@/usr/(local/)?bin/(env )?python(2|3)?@/usr/bin/%{bootstrap_python_interp}@" \
"{}" \
\;
@@ -303,9 +303,9 @@ for f in rpython/translator/goal/bpnn.py ; do
chmod a-x $f
done
-# Replace all lib-python python shebangs with pypy
-find lib-python/%{pylibver} -name "*.py" -exec \
- sed -r -i '1s|^#!\s*/usr/bin.*python.*|#!/usr/bin/%{name}|' \
+# Replace all lib-python and lib_pypy python shebangs with pypy3 (those will be shipped with pypy3-libs)
+find lib-python/%{pylibver} lib_pypy -name "*.py" -exec \
+ sed -r -i '1s@^#!\s*/usr/bin.*(python|pypy).*(a)#!/usr/bin/%{name}@' \
"{}" \
\;
@@ -823,6 +823,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Sat Apr 14 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-8
+- Fix failing taskotron check
+
* Wed Apr 11 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-7
- Provide pypy3(abi) = 5.10
commit cac18deee0e00c9ee8b4fce8d4507796a1561298
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Thu Apr 12 00:23:12 2018 +0200
Provide pypy3(abi) = 5.10
diff --git a/pypy3.spec b/pypy3.spec
index 196243f..bf093ac 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.5
-Release: 6%{?dist}
+Release: 7%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -241,7 +241,8 @@ BuildRequires: emacs
BuildRequires: %{_bindir}/git
# Metadata for the core package (the JIT build):
-Requires: pypy3-libs%{?_isa} = %{version}-%{release}
+Requires: %{name}-libs%{?_isa} = %{version}-%{release}
+Provides: %{name}(abi) = %{basever}
%description
PyPy's implementation of Python 3, featuring a Just-In-Time compiler on some CPU
@@ -822,6 +823,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed Apr 11 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-7
+- Provide pypy3(abi) = 5.10
+
* Wed Apr 11 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-6
- RPM macros improvements
commit fe844b70bdc354e3d454bb43ed578f3b4898bac7
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Apr 11 12:09:36 2018 +0200
Add macro with pypy version (aka 5.10, not 3.5)
diff --git a/macros.pypy3 b/macros.pypy3
index 796b872..f138a39 100644
--- a/macros.pypy3
+++ b/macros.pypy3
@@ -2,3 +2,4 @@
%pypy3_sitelib %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
%pypy3_sitearch %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")
%pypy3_version %(%{__pypy3} -c "import sys; sys.stdout.write(sys.version[:3])")
+%pypy3_pypy_version %(%{__pypy3} -c "import sys; sys.stdout.write('{}.{}'.format(sys.pypy_version_info.major, sys.pypy_version_info.minor))")
diff --git a/pypy3.spec b/pypy3.spec
index 958f998..196243f 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.5
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -822,6 +822,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed Apr 11 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-6
+- RPM macros improvements
+
* Tue Apr 10 2018 Michal Cyprian <mcyprian(a)redhat.com> - 5.10.1-5
- Remove the rightmost version number from the path
- rhbz#1516885: https://bugzilla.redhat.com/show_bug.cgi?id=1516885
commit df12619f2b234a4f954e7e043fdac5d0f4701d7b
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Apr 11 12:06:37 2018 +0200
Remove %pypy3dir definition, it is useless
diff --git a/macros.pypy3 b/macros.pypy3
index ef1f600..796b872 100644
--- a/macros.pypy3
+++ b/macros.pypy3
@@ -2,4 +2,3 @@
%pypy3_sitelib %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
%pypy3_sitearch %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")
%pypy3_version %(%{__pypy3} -c "import sys; sys.stdout.write(sys.version[:3])")
-%pypy3dir %{_builddir}/pypy3-%{name}-%{version}-%{release}
commit cf5da9288bd0e56d5b0e203cee650cc39f2e3e85
Author: Michal Cyprian <m.cyprian(a)gmail.com>
Date: Wed Apr 11 01:31:31 2018 +0200
Remove the rightmost version number from the path
diff --git a/pypy3.spec b/pypy3.spec
index 22092d4..958f998 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,7 +1,8 @@
+%global basever 5.10
Name: pypy3
-Version: 5.10.1
+Version: %{basever}.1
%global pyversion 3.5
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -119,7 +120,7 @@ ExcludeArch: aarch64
# Easy way to turn off the selftests:
%global run_selftests 1
-%global pypyprefix %{_libdir}/pypy3-%{version}
+%global pypyprefix %{_libdir}/pypy3-%{basever}
%global pylibver 3
# We refer to this subdir of the source tree in a few places during the build:
@@ -464,8 +465,8 @@ mkdir -p %{buildroot}/%{_bindir}
mkdir -p %{buildroot}/%{pypyprefix}
-# 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}
+# Run installing script, archive-name %{name}-%{basever} in %{buildroot}/%{_libdir} == %{pypyprefix}
+%{bootstrap_python_interp} pypy/tool/release/package.py --archive-name %{name}-%{basever} --builddir %{buildroot}/%{_libdir}
# Remove shebang lines from .py files that aren't executable, and
@@ -639,7 +640,7 @@ cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/pyp
install -m0644 -p -D -t %{buildroot}/%{_rpmconfigdir}/macros.d %{SOURCE2}
# Remove files we don't want:
-rm -f %{buildroot}%{_libdir}/pypy3-5.2.0.tar.bz2 \
+rm -f %{buildroot}%{_libdir}/%{name}-%{basever}.tar.bz2 \
%{buildroot}%{pypyprefix}/LICENSE \
%{buildroot}%{pypyprefix}/README.rst
@@ -821,6 +822,10 @@ CheckPyPy %{name}-stackless
%changelog
+* Tue Apr 10 2018 Michal Cyprian <mcyprian(a)redhat.com> - 5.10.1-5
+- Remove the rightmost version number from the path
+- rhbz#1516885: https://bugzilla.redhat.com/show_bug.cgi?id=1516885
+
* Thu Mar 29 2018 Michal Cyprian <mcyprian(a)redhat.com> - 5.10.1-4
- Add patch for libxcrypt
commit c54059a679944400a51e891b164e564befa14cbb
Author: Michal Cyprian <m.cyprian(a)gmail.com>
Date: Thu Mar 29 21:24:14 2018 +0200
Add patch for libxcrypt
diff --git a/009-add-libxcrypt-support.patch b/009-add-libxcrypt-support.patch
new file mode 100644
index 0000000..ec17216
--- /dev/null
+++ b/009-add-libxcrypt-support.patch
@@ -0,0 +1,13 @@
+diff --git a/pypy/module/crypt/interp_crypt.py b/pypy/module/crypt/interp_crypt.py
+index d227b6a..da969e6 100644
+--- a/pypy/module/crypt/interp_crypt.py
++++ b/pypy/module/crypt/interp_crypt.py
+@@ -6,7 +6,7 @@ import sys
+ if sys.platform.startswith('darwin'):
+ eci = ExternalCompilationInfo()
+ else:
+- eci = ExternalCompilationInfo(libraries=['crypt'])
++ eci = ExternalCompilationInfo(libraries=['crypt'], includes=['crypt.h'])
+ c_crypt = rffi.llexternal('crypt', [rffi.CCHARP, rffi.CCHARP], rffi.CCHARP,
+ compilation_info=eci, releasegil=False)
+
diff --git a/pypy3.spec b/pypy3.spec
index 2ed9d59..22092d4 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,7 +1,7 @@
Name: pypy3
Version: 5.10.1
%global pyversion 3.5
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -155,6 +155,11 @@ Patch6: 006-always-log-stdout.patch
# community that won't make sense outside of it). [Sorry to be a killjoy]
Patch7: 007-remove-startup-message.patch
+# Glibc's libcrypt was replaced with libxcrypt in f28, crypt.h header has
+# to be added to privent compilation error.
+# https://fedoraproject.org/wiki/Changes/Replace_glibc_libcrypt_with_libxcrypt
+Patch9: 009-add-libxcrypt-support.patch
+
# It seems ppc64 has no faulthandler
Patch11: 011-no-faulthandler.patch
@@ -816,6 +821,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Thu Mar 29 2018 Michal Cyprian <mcyprian(a)redhat.com> - 5.10.1-4
+- Add patch for libxcrypt
+
* Fri Feb 09 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.10.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
commit 664896a6c60437d635c7b940c30ec541d0e94f87
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Fri Feb 9 06:17:45 2018 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index 5a9fcba..2ed9d59 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,7 +1,7 @@
Name: pypy3
Version: 5.10.1
%global pyversion 3.5
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -816,6 +816,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri Feb 09 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.10.1-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
* Sat Jan 20 2018 Björn Esser <besser82(a)fedoraproject.org> - 5.10.1-2
- Rebuilt for switch to libxcrypt
commit 43f3327530097638befd17ecc0d7054493cc45b9
Author: Björn Esser <besser82(a)fedoraproject.org>
Date: Sat Jan 20 23:07:39 2018 +0100
Rebuilt for switch to libxcrypt
diff --git a/pypy3.spec b/pypy3.spec
index 76aed7c..5a9fcba 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,7 +1,7 @@
Name: pypy3
Version: 5.10.1
%global pyversion 3.5
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -816,6 +816,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Sat Jan 20 2018 Björn Esser <besser82(a)fedoraproject.org> - 5.10.1-2
+- Rebuilt for switch to libxcrypt
+
* Fri Jan 12 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-1
- Update to 5.10.1 (#1533689)
- Removed two upstreamed patches
commit 8b06f1af625208abd6fd0fa5817f8df53e824916
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Jan 19 16:19:55 2018 +0100
Only BR /usr/bin/git, it should be enough for autosetup
diff --git a/pypy3.spec b/pypy3.spec
index db72cad..76aed7c 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -232,7 +232,7 @@ BuildRequires: emacs
%endif
# For %%autosetup -S git
-BuildRequires: git
+BuildRequires: %{_bindir}/git
# Metadata for the core package (the JIT build):
Requires: pypy3-libs%{?_isa} = %{version}-%{release}
commit 93cd7d04ccff833ff161ec02c1fbfb2d940fca9e
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Jan 12 10:01:38 2018 +0100
Update to 5.10.1 (#1533689)
diff --git a/.gitignore b/.gitignore
index 40caefb..67b6ee0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@
/pypy3-v5.7.0-src.tar.bz2
/pypy3-v5.9.0-src.tar.bz2
/pypy3-v5.10.0-src.tar.bz2
+/pypy3-v5.10.1-src.tar.bz2
diff --git a/012-time-sleep-i686-overflow.patch b/012-time-sleep-i686-overflow.patch
deleted file mode 100644
index 7dc6cf3..0000000
--- a/012-time-sleep-i686-overflow.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-# HG changeset patch
-# User Ronan Lamy <ronan.lamy(a)gmail.com>
-# Date 1514473067 -3600
-# Branch py3.5
-# Node ID f145d85043878194d7eee33b2049063843e032d8
-# Parent d7d2710e65359e1e8d69e82612cb96f2f3921de7
-Fix issue #2717
-
-diff --git a/pypy/interpreter/test/test_timeutils.py b/pypy/interpreter/test/test_timeutils.py
-new file mode 100644
-index 0000000..873b2b4
---- /dev/null
-+++ b/pypy/interpreter/test/test_timeutils.py
-@@ -0,0 +1,13 @@
-+import pytest
-+from rpython.rlib.rarithmetic import r_longlong
-+from pypy.interpreter.error import OperationError
-+from pypy.interpreter.timeutils import timestamp_w
-+
-+def test_timestamp_w(space):
-+ w_1_year = space.newint(365 * 24 * 3600)
-+ result = timestamp_w(space, w_1_year)
-+ assert isinstance(result, r_longlong)
-+ assert result // 10 ** 9 == space.int_w(w_1_year)
-+ w_millenium = space.mul(w_1_year, space.newint(1000))
-+ with pytest.raises(OperationError): # timestamps overflow after ~300 years
-+ timestamp_w(space, w_millenium)
-diff --git a/pypy/interpreter/timeutils.py b/pypy/interpreter/timeutils.py
-index 336426b..7918dc8 100644
---- a/pypy/interpreter/timeutils.py
-+++ b/pypy/interpreter/timeutils.py
-@@ -3,7 +3,7 @@ Access to the time module's high-resolution monotonic clock
- """
- import math
- from rpython.rlib.rarithmetic import (
-- r_longlong, ovfcheck, ovfcheck_float_to_longlong)
-+ r_longlong, ovfcheck_float_to_longlong)
- from pypy.interpreter.error import oefmt
-
- SECS_TO_NS = 10 ** 9
-@@ -28,10 +28,10 @@ def timestamp_w(space, w_secs):
- raise oefmt(space.w_OverflowError,
- "timestamp %R too large to convert to C _PyTime_t", w_secs)
- else:
-- sec = space.int_w(w_secs)
- try:
-- result = ovfcheck(sec * SECS_TO_NS)
-+ sec = space.bigint_w(w_secs).tolonglong()
-+ result = sec * r_longlong(SECS_TO_NS)
- except OverflowError:
- raise oefmt(space.w_OverflowError,
-- "timestamp too large to convert to C _PyTime_t")
-- return r_longlong(result)
-+ "timestamp %R too large to convert to C _PyTime_t", w_secs)
-+ return result
diff --git a/013-fix-typeerror.patch b/013-fix-typeerror.patch
deleted file mode 100644
index 86b0650..0000000
--- a/013-fix-typeerror.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-# HG changeset patch
-# User Miro Hrončok <miro(a)hroncok.cz>
-# Date 1514415016 0
-# Branch hroncok/fix-typeerror-str-does-not-support-the-b-1514414905375
-# Node ID 0551d04959425ea4a8ff7e87a5d357d03936cde0
-# Parent a4194a67868fa916074416e96456d07d52b1a1a1
-Fix: TypeError: 'str' does not support the buffer interface
-
-Fixes https://bitbucket.org/pypy/pypy/issues/2718
-
-diff --git a/lib_pypy/pyrepl/unix_console.py b/lib_pypy/pyrepl/unix_console.py
---- a/lib_pypy/pyrepl/unix_console.py
-+++ b/lib_pypy/pyrepl/unix_console.py
-@@ -500,7 +500,7 @@
- os.write(self.output_fd, fmt[:x])
- fmt = fmt[y:]
- delay = int(m.group(1))
-- if '*' in m.group(2):
-+ if b'*' in m.group(2):
- delay *= self.height
- if self._pad:
- nchars = (bps*delay)/1000
diff --git a/pypy3.spec b/pypy3.spec
index dc1aa8e..db72cad 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,7 +1,7 @@
Name: pypy3
-Version: 5.10.0
+Version: 5.10.1
%global pyversion 3.5
-Release: 3%{?dist}
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -158,12 +158,6 @@ Patch7: 007-remove-startup-message.patch
# It seems ppc64 has no faulthandler
Patch11: 011-no-faulthandler.patch
-# https://bitbucket.org/pypy/pypy/issues/2717
-Patch12: 012-time-sleep-i686-overflow.patch
-
-# https://bitbucket.org/pypy/pypy/issues/2718
-Patch13: 013-fix-typeerror.patch
-
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
@@ -822,6 +816,10 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri Jan 12 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-1
+- Update to 5.10.1 (#1533689)
+- Removed two upstreamed patches
+
* Fri Dec 29 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-3
- Remove never used InstallPyPy function
- Actually call execstack as originally intended
diff --git a/sources b/sources
index d9f03a4..afb3c83 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3-v5.10.0-src.tar.bz2) = 69a373c18dbad9dd617f994ad885c8d8975f0c484ba9dd547e6e892c9a3030a43e9e3ee668aee5f4969403883de1311cef97a0a5e5701921172ee6c2119b771b
+SHA512 (pypy3-v5.10.1-src.tar.bz2) = 91b0ed25130bdbb46d5e577136b5fe63d5162917dcc2d0b69f5cac2a283ece9d0bfd3c7c8dc61ff391e0550fa1603326f6edeb2df3159d71617fefe6c07439f5
commit 82dcbae2321eac8b49b7e987dfe170bdd2e19c56
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Dec 29 19:50:56 2017 +0100
On power, use cpython2 to build pypy3
diff --git a/pypy3.spec b/pypy3.spec
index 50ecfc0..dc1aa8e 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -171,10 +171,16 @@ Patch13: 013-fix-typeerror.patch
#
# Turn it off with this boolean, to revert back to rebuilding using CPython
# and avoid a cycle in the build-time dependency graph:
-
# Note, pypy3 is built with pypy2, so no dependency cycle
+%ifarch %{power64}
+# the build is unreliable with pypy+power, getting random failures
+# so better have a bit slower build than having to build until it pass
+%global use_self_when_building 0
+%else
%global use_self_when_building 1
+%endif
+
%if 0%{use_self_when_building}
# pypy3 can only be build with pypy2
BuildRequires: pypy2
@@ -821,6 +827,7 @@ CheckPyPy %{name}-stackless
- Actually call execstack as originally intended
- Use execstack on all arches (it's available now)
- Don't ship the debug binaries
+- On power, use cpython2 to build pypy3
* Thu Dec 28 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-2
- Fixed upstream issues #2717 and #2718 (re-enable test_socket)
commit 720aa9bae8b7478b99bcb277238fcae6cca364d9
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Dec 29 14:12:06 2017 +0100
Remove the debug builds (the package was ~350 MB)
Also:
- Remove never used InstallPyPy function
- Actually call execstack as originally intended
- Use execstack on all arches (it's available now)
diff --git a/pypy3.spec b/pypy3.spec
index 218ec39..50ecfc0 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,7 +1,7 @@
Name: pypy3
Version: 5.10.0
%global pyversion 3.5
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -224,10 +224,7 @@ BuildRequires: /usr/bin/free
BuildRequires: perl-interpreter
%endif
-# No prelink on these arches
-%ifnarch aarch64 ppc64le
BuildRequires: /usr/bin/execstack
-%endif
# For byte-compiling the JIT-viewing mode:
%if %{with_emacs}
@@ -458,39 +455,6 @@ BuildPyPy \
%install
-# Install the various executables:
-
-InstallPyPy() {
- ExeName=$1
-
- # To ensure compatibility with virtualenv, pypy finds its libraries
- # relative to itself; this happens within
- # pypy/translator/goal/app_main.py:get_library_path
- # which calls sys.pypy_initial_path(dirname) on the dir containing
- # the executable, with symlinks resolved.
- #
- # Hence we make /usr/bin/pypy be a symlink to the real binary, which we
- # place within /usr/lib[64]/pypy-1.* as pypy
- #
- # This ought to enable our pypy build to work with virtualenv
- # (rhbz#742641)
- install -m 755 %{goal_dir}/$ExeName %{buildroot}/%{pypyprefix}/$ExeName
- ln -s %{pypyprefix}/$ExeName %{buildroot}/%{_bindir}
-
- # The generated machine code doesn't need an executable stack, but
- # one of the assembler files (gcmaptable.s) doesn't have the necessary
- # metadata to inform gcc of that, and thus gcc pessimistically assumes
- # that the built binary does need an executable stack.
- #
- # Reported upstream as: https://codespeak.net/issue/pypy-dev/issue610
- #
- # I tried various approaches involving fixing the build, but the simplest
- # approach is to postprocess the ELF file:
-%ifnarch aarch64 ppc64le
- execstack --clear-execstack %{buildroot}/%{pypyprefix}/$ExeName
-%endif
-}
-
mkdir -p %{buildroot}/%{_bindir}
mkdir -p %{buildroot}/%{pypyprefix}
@@ -517,6 +481,17 @@ find \
mkdir -p %{buildroot}/%{pypyprefix}/site-packages
+# The generated machine code doesn't need an executable stack, but
+# one of the assembler files (gcmaptable.s) doesn't have the necessary
+# metadata to inform gcc of that, and thus gcc pessimistically assumes
+# that the built binary does need an executable stack.
+#
+# Reported upstream as: https://codespeak.net/issue/pypy-dev/issue610
+#
+# I tried various approaches involving fixing the build, but the simplest
+# approach is to postprocess the ELF file:
+execstack --clear-execstack %{buildroot}/%{pypyprefix}/bin/pypy3
+
ln -s ./pypy3 %{buildroot}%{pypyprefix}/bin/pypy%{pyversion}
ln -s %{pypyprefix}/bin/pypy%{pyversion} %{buildroot}%{_bindir}/pypy%{pyversion}
ln -s pypy%{pyversion} %{buildroot}%{_bindir}/pypy3
@@ -666,6 +641,12 @@ rm -f %{buildroot}%{_libdir}/pypy3-5.2.0.tar.bz2 \
# wtf? This is probably masking some bigger problem, but let's do this for now
mv -v lib-python/3/test/regrtest.py-new lib-python/3/test/regrtest.py || :
+# since 5.10.0, the debug binaries are built and shipped, making the
+# pypy3 package ~350 MiB. let's remove them here for now and TODO figure out why
+rm -f %{buildroot}%{pypyprefix}/bin/pypy3.debug
+rm -f %{buildroot}%{pypyprefix}/bin/libpypy3-c.so.debug
+
+
%check
topdir=$(pwd)
@@ -835,6 +816,12 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri Dec 29 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-3
+- Remove never used InstallPyPy function
+- Actually call execstack as originally intended
+- Use execstack on all arches (it's available now)
+- Don't ship the debug binaries
+
* Thu Dec 28 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-2
- Fixed upstream issues #2717 and #2718 (re-enable test_socket)
- Use pypy2 when building (it's faster and works this time)
commit 9c955b3defcb09be770be0be46c3761fc0185d0b
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Thu Dec 28 17:47:00 2017 +0100
Use pypy2 when building
(it's faster and works this time)
diff --git a/pypy3.spec b/pypy3.spec
index dc8c53d..218ec39 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -174,7 +174,7 @@ Patch13: 013-fix-typeerror.patch
# Note, pypy3 is built with pypy2, so no dependency cycle
-%global use_self_when_building 0
+%global use_self_when_building 1
%if 0%{use_self_when_building}
# pypy3 can only be build with pypy2
BuildRequires: pypy2
@@ -837,6 +837,7 @@ CheckPyPy %{name}-stackless
%changelog
* Thu Dec 28 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-2
- Fixed upstream issues #2717 and #2718 (re-enable test_socket)
+- Use pypy2 when building (it's faster and works this time)
* Mon Dec 25 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-1
- Update to 5.10 (#1528841)
commit e858e84bf97e61dd4d1a72466862ac6cb8e57296
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Thu Dec 28 17:45:36 2017 +0100
Fixed upstream issues #2717 and #2718 (re-enable test_socket)
diff --git a/012-time-sleep-i686-overflow.patch b/012-time-sleep-i686-overflow.patch
new file mode 100644
index 0000000..7dc6cf3
--- /dev/null
+++ b/012-time-sleep-i686-overflow.patch
@@ -0,0 +1,55 @@
+# HG changeset patch
+# User Ronan Lamy <ronan.lamy(a)gmail.com>
+# Date 1514473067 -3600
+# Branch py3.5
+# Node ID f145d85043878194d7eee33b2049063843e032d8
+# Parent d7d2710e65359e1e8d69e82612cb96f2f3921de7
+Fix issue #2717
+
+diff --git a/pypy/interpreter/test/test_timeutils.py b/pypy/interpreter/test/test_timeutils.py
+new file mode 100644
+index 0000000..873b2b4
+--- /dev/null
++++ b/pypy/interpreter/test/test_timeutils.py
+@@ -0,0 +1,13 @@
++import pytest
++from rpython.rlib.rarithmetic import r_longlong
++from pypy.interpreter.error import OperationError
++from pypy.interpreter.timeutils import timestamp_w
++
++def test_timestamp_w(space):
++ w_1_year = space.newint(365 * 24 * 3600)
++ result = timestamp_w(space, w_1_year)
++ assert isinstance(result, r_longlong)
++ assert result // 10 ** 9 == space.int_w(w_1_year)
++ w_millenium = space.mul(w_1_year, space.newint(1000))
++ with pytest.raises(OperationError): # timestamps overflow after ~300 years
++ timestamp_w(space, w_millenium)
+diff --git a/pypy/interpreter/timeutils.py b/pypy/interpreter/timeutils.py
+index 336426b..7918dc8 100644
+--- a/pypy/interpreter/timeutils.py
++++ b/pypy/interpreter/timeutils.py
+@@ -3,7 +3,7 @@ Access to the time module's high-resolution monotonic clock
+ """
+ import math
+ from rpython.rlib.rarithmetic import (
+- r_longlong, ovfcheck, ovfcheck_float_to_longlong)
++ r_longlong, ovfcheck_float_to_longlong)
+ from pypy.interpreter.error import oefmt
+
+ SECS_TO_NS = 10 ** 9
+@@ -28,10 +28,10 @@ def timestamp_w(space, w_secs):
+ raise oefmt(space.w_OverflowError,
+ "timestamp %R too large to convert to C _PyTime_t", w_secs)
+ else:
+- sec = space.int_w(w_secs)
+ try:
+- result = ovfcheck(sec * SECS_TO_NS)
++ sec = space.bigint_w(w_secs).tolonglong()
++ result = sec * r_longlong(SECS_TO_NS)
+ except OverflowError:
+ raise oefmt(space.w_OverflowError,
+- "timestamp too large to convert to C _PyTime_t")
+- return r_longlong(result)
++ "timestamp %R too large to convert to C _PyTime_t", w_secs)
++ return result
diff --git a/013-fix-typeerror.patch b/013-fix-typeerror.patch
new file mode 100644
index 0000000..86b0650
--- /dev/null
+++ b/013-fix-typeerror.patch
@@ -0,0 +1,22 @@
+# HG changeset patch
+# User Miro Hrončok <miro(a)hroncok.cz>
+# Date 1514415016 0
+# Branch hroncok/fix-typeerror-str-does-not-support-the-b-1514414905375
+# Node ID 0551d04959425ea4a8ff7e87a5d357d03936cde0
+# Parent a4194a67868fa916074416e96456d07d52b1a1a1
+Fix: TypeError: 'str' does not support the buffer interface
+
+Fixes https://bitbucket.org/pypy/pypy/issues/2718
+
+diff --git a/lib_pypy/pyrepl/unix_console.py b/lib_pypy/pyrepl/unix_console.py
+--- a/lib_pypy/pyrepl/unix_console.py
++++ b/lib_pypy/pyrepl/unix_console.py
+@@ -500,7 +500,7 @@
+ os.write(self.output_fd, fmt[:x])
+ fmt = fmt[y:]
+ delay = int(m.group(1))
+- if '*' in m.group(2):
++ if b'*' in m.group(2):
+ delay *= self.height
+ if self._pad:
+ nchars = (bps*delay)/1000
diff --git a/pypy3.spec b/pypy3.spec
index 6843000..dc8c53d 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,7 +1,7 @@
Name: pypy3
Version: 5.10.0
%global pyversion 3.5
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -158,6 +158,12 @@ Patch7: 007-remove-startup-message.patch
# It seems ppc64 has no faulthandler
Patch11: 011-no-faulthandler.patch
+# https://bitbucket.org/pypy/pypy/issues/2717
+Patch12: 012-time-sleep-i686-overflow.patch
+
+# https://bitbucket.org/pypy/pypy/issues/2718
+Patch13: 013-fix-typeerror.patch
+
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
@@ -711,12 +717,6 @@ CheckPyPy() {
# test_multiprocessing, so skip it for now:
SkipTest test_multiprocessing
- # the timeout tests are hanging on i686
- # see https://bitbucket.org/pypy/pypy/issues/2717
- %ifarch %{ix86}
- SkipTest test_socket
- %endif
-
echo "== Test names =="
cat testnames.txt
echo "================="
@@ -835,6 +835,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Thu Dec 28 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-2
+- Fixed upstream issues #2717 and #2718 (re-enable test_socket)
+
* Mon Dec 25 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-1
- Update to 5.10 (#1528841)
- Use pypy2 and python2-pycparser (note the twos)
commit 27657069ff6fedfdeedc1770738261f4662213bd
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Dec 27 15:58:25 2017 +0100
Temporarily skip test_socket on ix86
diff --git a/pypy3.spec b/pypy3.spec
index 24d9504..6843000 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -711,6 +711,12 @@ CheckPyPy() {
# test_multiprocessing, so skip it for now:
SkipTest test_multiprocessing
+ # the timeout tests are hanging on i686
+ # see https://bitbucket.org/pypy/pypy/issues/2717
+ %ifarch %{ix86}
+ SkipTest test_socket
+ %endif
+
echo "== Test names =="
cat testnames.txt
echo "================="
@@ -833,6 +839,7 @@ CheckPyPy %{name}-stackless
- Update to 5.10 (#1528841)
- Use pypy2 and python2-pycparser (note the twos)
- Enable JIT on power and s390x
+- Temporarily skip test_socket on ix86
* Fri Oct 20 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.9.0-1
- Update to 5.9 (#1504427)
commit a6780ec4355a7d2691bf8441b76b77186fb1b22d
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Dec 27 15:57:17 2017 +0100
Enable JIT on power and s390x
diff --git a/pypy3.spec b/pypy3.spec
index cb0d323..24d9504 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -93,7 +93,7 @@ ExcludeArch: aarch64
# it on the other archs. The resulting binary will typically be slower than
# CPython for the latter case.
-%ifarch %{ix86} x86_64 %{arm}
+%ifarch %{ix86} x86_64 %{arm} %{power64} s390x
%global with_jit 1
%else
%global with_jit 0
@@ -832,6 +832,7 @@ CheckPyPy %{name}-stackless
* Mon Dec 25 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-1
- Update to 5.10 (#1528841)
- Use pypy2 and python2-pycparser (note the twos)
+- Enable JIT on power and s390x
* Fri Oct 20 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.9.0-1
- Update to 5.9 (#1504427)
commit 2b72df539cd5d8839277452408071a8200689b29
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Dec 26 11:56:15 2017 +0100
Update to 5.10 (#1528841)
diff --git a/.gitignore b/.gitignore
index 602e7b0..40caefb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@
/pypy3.3-v5.5.0-alpha-src.tar.bz2
/pypy3-v5.7.0-src.tar.bz2
/pypy3-v5.9.0-src.tar.bz2
+/pypy3-v5.10.0-src.tar.bz2
diff --git a/pypy3.spec b/pypy3.spec
index 9e9d37a..cb0d323 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,5 +1,5 @@
Name: pypy3
-Version: 5.9.0
+Version: 5.10.0
%global pyversion 3.5
Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
@@ -171,7 +171,7 @@ Patch11: 011-no-faulthandler.patch
%global use_self_when_building 0
%if 0%{use_self_when_building}
# pypy3 can only be build with pypy2
-BuildRequires: pypy
+BuildRequires: pypy2
# no pypy-pycparser available ATM
%global bootstrap_python_interp pypy
%else
@@ -179,7 +179,7 @@ BuildRequires: pypy
# pypy3 can only be build with python2
BuildRequires: python2-devel
-BuildRequires: python-pycparser
+BuildRequires: python2-pycparser
%global bootstrap_python_interp python
%endif
@@ -829,6 +829,10 @@ CheckPyPy %{name}-stackless
%changelog
+* Mon Dec 25 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-1
+- Update to 5.10 (#1528841)
+- Use pypy2 and python2-pycparser (note the twos)
+
* Fri Oct 20 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.9.0-1
- Update to 5.9 (#1504427)
- Remove merged patches
diff --git a/sources b/sources
index 728ee37..d9f03a4 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3-v5.9.0-src.tar.bz2) = 3d5384d644fdd1bc8b95f5747dbd1771ae06eb2cfc7b57be359b8bf40177676afd097620d0cb9d9000c40d8cce075cfa6bfd92de987d3dd927c04d7d595dc5bd
+SHA512 (pypy3-v5.10.0-src.tar.bz2) = 69a373c18dbad9dd617f994ad885c8d8975f0c484ba9dd547e6e892c9a3030a43e9e3ee668aee5f4969403883de1311cef97a0a5e5701921172ee6c2119b771b
commit 6eb88b178404d837b4ff02920550faaacb5cd92e
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Oct 20 20:31:31 2017 +0200
Update to 5.9 (#1504427)
diff --git a/.gitignore b/.gitignore
index 3fcf7b6..602e7b0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
/pypy3-2.4.0-src.tar.bz2
/pypy3.3-v5.2.0-alpha1-src.tar.bz2
/pypy3.3-v5.5.0-alpha-src.tar.bz2
+/pypy3-v5.7.0-src.tar.bz2
+/pypy3-v5.9.0-src.tar.bz2
diff --git a/009-raise-an-error-when-STARTTLS-fails.patch b/009-raise-an-error-when-STARTTLS-fails.patch
deleted file mode 100644
index 58ceb01..0000000
--- a/009-raise-an-error-when-STARTTLS-fails.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 4c0f6a6fe6c71009ab4a6b3716e70af021e04904 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro(a)hroncok.cz>
-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
-rhbz#1303647: https://bugzilla.redhat.com/show_bug.cgi?id=1303647
-rhbz#1351680: https://bugzilla.redhat.com/show_bug.cgi?id=1351680
-
-Based on an upstream change by Benjamin Peterson <benjamin(a)python.org>
-- in changeset 101887:d590114c2394 3.4
-- https://hg.python.org/cpython/rev/d590114c2394
----
- lib-python/3/smtplib.py | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/lib-python/3/smtplib.py b/lib-python/3/smtplib.py
-index 57f181b..5656cc6 100755
---- a/lib-python/3/smtplib.py
-+++ b/lib-python/3/smtplib.py
-@@ -680,6 +680,11 @@ class SMTP:
- self.ehlo_resp = None
- self.esmtp_features = {}
- self.does_esmtp = 0
-+ else:
-+ # RFC 3207:
-+ # 501 Syntax error (no parameters allowed)
-+ # 454 TLS not available due to temporary reason
-+ raise SMTPResponseException(resp, reply)
- return (resp, reply)
-
- def sendmail(self, from_addr, to_addrs, msg, mail_options=[],
---
-2.9.0
-
diff --git a/010-disabled-HTTP-header-injections-in-http.client.patch b/010-disabled-HTTP-header-injections-in-http.client.patch
deleted file mode 100644
index bed386c..0000000
--- a/010-disabled-HTTP-header-injections-in-http.client.patch
+++ /dev/null
@@ -1,163 +0,0 @@
-From 9a8db191cf8a3557a24e91081bf434d581b98c5a Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro(a)hroncok.cz>
-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
-rhbz#1303699: https://bugzilla.redhat.com/show_bug.cgi?id=1303699
-rhbz#1351687: https://bugzilla.redhat.com/show_bug.cgi?id=1351687
-
-Based on an upstream change by Demian Brecht and Serhiy Storchaka
-- in changeset 94952:bf3e1c9b80e9 3.4
-- https://hg.python.org/cpython/rev/bf3e1c9b80e9
----
- lib-python/3/http/client.py | 37 +++++++++++++++++++++++++
- lib-python/3/test/test_httplib.py | 57 +++++++++++++++++++++++++++++++++++++++
- 2 files changed, 94 insertions(+)
-
-diff --git a/lib-python/3/http/client.py b/lib-python/3/http/client.py
-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
- import email.message
- import io
- import os
-+import re
- import socket
- import collections
- from urllib.parse import urlsplit
-@@ -217,6 +218,34 @@ _MAXLINE = 65536
- _MAXHEADERS = 100
-
-
-+# Header name/value ABNF (http://tools.ietf.org/html/rfc7230#section-3.2)
-+#
-+# VCHAR = %x21-7E
-+# obs-text = %x80-FF
-+# header-field = field-name ":" OWS field-value OWS
-+# field-name = token
-+# field-value = *( field-content / obs-fold )
-+# field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
-+# field-vchar = VCHAR / obs-text
-+#
-+# obs-fold = CRLF 1*( SP / HTAB )
-+# ; obsolete line folding
-+# ; see Section 3.2.4
-+
-+# token = 1*tchar
-+#
-+# tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*"
-+# / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~"
-+# / DIGIT / ALPHA
-+# ; any VCHAR, except delimiters
-+#
-+# VCHAR defined in http://tools.ietf.org/html/rfc5234#appendix-B.1
-+
-+# the patterns for both name and value are more leniant than RFC
-+# definitions to allow for backwards compatibility
-+_is_legal_header_name = re.compile(b'^[^:\s][^:\r\n]*$').match
-+_is_illegal_header_value = re.compile(b'\n(?![ \t])|\r(?![ \t\n])').search
-+
- class HTTPMessage(email.message.Message):
- # XXX The only usage of this method is in
- # http.server.CGIHTTPRequestHandler. Maybe move the code there so
-@@ -1035,12 +1064,20 @@ class HTTPConnection:
-
- if hasattr(header, 'encode'):
- header = header.encode('ascii')
-+
-+ if not _is_legal_header_name(header):
-+ raise ValueError('Invalid header name %r' % (header,))
-+
- values = list(values)
- for i, one_value in enumerate(values):
- if hasattr(one_value, 'encode'):
- values[i] = one_value.encode('latin-1')
- elif isinstance(one_value, int):
- values[i] = str(one_value).encode('ascii')
-+
-+ if _is_illegal_header_value(values[i]):
-+ raise ValueError('Invalid header value %r' % (values[i],))
-+
- value = b'\r\n\t'.join(values)
- 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 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.assertIn(b'Content-length: 42', conn._buffer)
-
-+ conn.putheader('Foo', ' bar ')
-+ self.assertIn(b'Foo: bar ', conn._buffer)
-+ conn.putheader('Bar', '\tbaz\t')
-+ self.assertIn(b'Bar: \tbaz\t', conn._buffer)
-+ conn.putheader('Authorization', 'Bearer mytoken')
-+ self.assertIn(b'Authorization: Bearer mytoken', conn._buffer)
-+ conn.putheader('IterHeader', 'IterA', 'IterB')
-+ self.assertIn(b'IterHeader: IterA\r\n\tIterB', conn._buffer)
-+ conn.putheader('LatinHeader', b'\xFF')
-+ self.assertIn(b'LatinHeader: \xFF', conn._buffer)
-+ conn.putheader('Utf8Header', b'\xc3\x80')
-+ self.assertIn(b'Utf8Header: \xc3\x80', conn._buffer)
-+ conn.putheader('C1-Control', b'next\x85line')
-+ self.assertIn(b'C1-Control: next\x85line', conn._buffer)
-+ conn.putheader('Embedded-Fold-Space', 'is\r\n allowed')
-+ self.assertIn(b'Embedded-Fold-Space: is\r\n allowed', conn._buffer)
-+ conn.putheader('Embedded-Fold-Tab', 'is\r\n\tallowed')
-+ self.assertIn(b'Embedded-Fold-Tab: is\r\n\tallowed', conn._buffer)
-+ conn.putheader('Key Space', 'value')
-+ self.assertIn(b'Key Space: value', conn._buffer)
-+ conn.putheader('KeySpace ', 'value')
-+ self.assertIn(b'KeySpace : value', conn._buffer)
-+ conn.putheader(b'Nonbreak\xa0Space', 'value')
-+ self.assertIn(b'Nonbreak\xa0Space: value', conn._buffer)
-+ conn.putheader(b'\xa0NonbreakSpace', 'value')
-+ self.assertIn(b'\xa0NonbreakSpace: value', conn._buffer)
-+
- def test_ipv6host_header(self):
- # Default host header on IPv6 transaction should wrapped by [] if
- # its actual IPv6 address
-@@ -153,6 +180,36 @@ class HeaderTests(TestCase):
- conn.request('GET', '/foo')
- self.assertTrue(sock.data.startswith(expected))
-
-+ def test_invalid_headers(self):
-+ conn = client.HTTPConnection('example.com')
-+ conn.sock = FakeSocket('')
-+ conn.putrequest('GET', '/')
-+
-+ # http://tools.ietf.org/html/rfc7230#section-3.2.4, whitespace is no
-+ # longer allowed in header names
-+ cases = (
-+ (b'Invalid\r\nName', b'ValidValue'),
-+ (b'Invalid\rName', b'ValidValue'),
-+ (b'Invalid\nName', b'ValidValue'),
-+ (b'\r\nInvalidName', b'ValidValue'),
-+ (b'\rInvalidName', b'ValidValue'),
-+ (b'\nInvalidName', b'ValidValue'),
-+ (b' InvalidName', b'ValidValue'),
-+ (b'\tInvalidName', b'ValidValue'),
-+ (b'Invalid:Name', b'ValidValue'),
-+ (b':InvalidName', b'ValidValue'),
-+ (b'ValidName', b'Invalid\r\nValue'),
-+ (b'ValidName', b'Invalid\rValue'),
-+ (b'ValidName', b'Invalid\nValue'),
-+ (b'ValidName', b'InvalidValue\r\n'),
-+ (b'ValidName', b'InvalidValue\r'),
-+ (b'ValidName', b'InvalidValue\n'),
-+ )
-+ for name, value in cases:
-+ with self.subTest((name, value)):
-+ with self.assertRaisesRegex(ValueError, 'Invalid header'):
-+ conn.putheader(name, value)
-+
-
- class BasicTest(TestCase):
- def test_status_lines(self):
---
-2.9.0
-
diff --git a/011-no-faulthandler.patch b/011-no-faulthandler.patch
index f0154eb..f96d232 100644
--- a/011-no-faulthandler.patch
+++ b/011-no-faulthandler.patch
@@ -1,30 +1,37 @@
-diff --git pypy3-v5.5.0-src/lib-python/3/test/regrtest.py pypy3-v5.5.0-src/lib-python/3/test/regrtest.py-new
-index 8d18a9297a..e99322ebe1 100755
---- pypy3-v5.5.0-src/lib-python/3/test/regrtest.py
-+++ pypy3-v5.5.0-src/lib-python/3/test/regrtest.py-new
-@@ -169,7 +169,6 @@ option '-uall,-gui'.
- import importlib
+commit ea4d6a12548eea7ce0424feea13a499fb7085e96
+Author: rpm-build <rpm-build>
+Date: Wed Mar 29 04:31:55 2017 +0200
+
+ 011-no-faulthandler.patch
+
+diff --git a/lib-python/3/test/regrtest.py b/lib-python/3/test/regrtest.py
+index c1d85f6..3d3072c 100755
+--- a/lib-python/3/test/regrtest.py
++++ b/lib-python/3/test/regrtest.py
+@@ -124,7 +124,6 @@ import importlib
+ import argparse
import builtins
-import faulthandler
- import getopt
import io
import json
-@@ -197,6 +196,10 @@ try:
- import multiprocessing.process
+ import locale
+@@ -152,7 +151,10 @@ try:
+ import _multiprocessing, multiprocessing.process
except ImportError:
multiprocessing = None
+-
+try:
+ import faulthandler
+except ImportError:
+ faulthandler = None
-
# Some times __path__ and __file__ are not absolute (e.g. while running from
-@@ -283,17 +286,18 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
+ # Lib/) and, if we change the CWD to run the tests in a temporary dir, some
+@@ -486,17 +488,18 @@ def main(tests=None, **kwargs):
+ directly to set the values that would normally be set by flags
on the command line.
"""
-
- # Display the Python traceback on fatal errors (e.g. segfault)
- faulthandler.enable(all_threads=True)
-
@@ -51,3 +58,37 @@ index 8d18a9297a..e99322ebe1 100755
replace_stdout()
+diff --git a/lib-python/3/test/support/__init__.py b/lib-python/3/test/support/__init__.py
+index 5d7f308..4424637 100644
+--- a/lib-python/3/test/support/__init__.py
++++ b/lib-python/3/test/support/__init__.py
+@@ -6,7 +6,6 @@ if __name__ != 'test.support':
+ import collections.abc
+ import contextlib
+ import errno
+-import faulthandler
+ import fnmatch
+ import functools
+ import gc
+@@ -65,6 +64,11 @@ try:
+ except ImportError:
+ resource = None
+
++try:
++ import faulthandler
++except ImportError:
++ faulthandler = None
++
+ __all__ = [
+ # globals
+ "PIPE_MAX_SIZE", "verbose", "max_memuse", "use_resources", "failfast",
+@@ -2060,7 +2064,8 @@ def start_threads(threads, unlock=None):
+ finally:
+ started = [t for t in started if t.isAlive()]
+ if started:
+- faulthandler.dump_traceback(sys.stdout)
++ if faulthandler is not None:
++ faulthandler.dump_traceback(sys.stdout)
+ raise AssertionError('Unable to join %d threads' % len(started))
+
+ @contextlib.contextmanager
diff --git a/pypy3.spec b/pypy3.spec
index f878bb2..9e9d37a 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,7 @@
Name: pypy3
-Version: 5.5.0
-Release: 6%{?dist}
+Version: 5.9.0
+%global pyversion 3.5
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -131,7 +132,7 @@ ExcludeArch: aarch64
%(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/pypy3.3-v%{version}-alpha-src.t...
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy3-v%{version}-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -141,36 +142,21 @@ Source2: macros.pypy3
# set to indicate progress.
# This obscures useful messages, and may waste CPU cycles, so suppress it, and
# merely render dots:
-Patch0: 001-nevertty.patch
+Patch1: 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
# and linker are captured:
-Patch1: 006-always-log-stdout.patch
+Patch6: 006-always-log-stdout.patch
# Disable the printing of a quote from IRC on startup (these are stored in
# ROT13 form in lib_pypy/_pypy_irc_topic.py). Some are cute, but some could
# cause confusion for end-users (and many are in-jokes within the PyPy
# community that won't make sense outside of it). [Sorry to be a killjoy]
-Patch2: 007-remove-startup-message.patch
-
-
-# CVE-2016-0772 python: smtplib StartTLS stripping attack
-# rhbz#1303647: https://bugzilla.redhat.com/show_bug.cgi?id=1303647
-# rhbz#1351680: https://bugzilla.redhat.com/show_bug.cgi?id=1351680
-# FIXED UPSTREAM: https://hg.python.org/cpython/rev/d590114c2394
-# Raise an error when STARTTLS fails
-Patch4: 009-raise-an-error-when-STARTTLS-fails.patch
-
-# CVE-2016-5699 python: http protocol steam injection attack
-# rhbz#1303699: https://bugzilla.redhat.com/show_bug.cgi?id=1303699
-# rhbz#1351687: https://bugzilla.redhat.com/show_bug.cgi?id=1351687
-# FIXED UPSTREAM: https://hg.python.org/cpython/rev/bf3e1c9b80e9
-# Disabled HTTP header injections in http.client
-Patch5: 010-disabled-HTTP-header-injections-in-http.client.patch
+Patch7: 007-remove-startup-message.patch
# It seems ppc64 has no faulthandler
-Patch6: 011-no-faulthandler.patch
+Patch11: 011-no-faulthandler.patch
# Build-time requirements:
@@ -186,12 +172,14 @@ Patch6: 011-no-faulthandler.patch
%if 0%{use_self_when_building}
# pypy3 can only be build with pypy2
BuildRequires: pypy
+# no pypy-pycparser available ATM
%global bootstrap_python_interp pypy
%else
# pypy3 can only be build with python2
BuildRequires: python2-devel
+BuildRequires: python-pycparser
%global bootstrap_python_interp python
%endif
@@ -523,8 +511,9 @@ find \
mkdir -p %{buildroot}/%{pypyprefix}/site-packages
-ln -s %{pypyprefix}/bin/pypy3.3 %{buildroot}/%{_bindir}/pypy3.3
-ln -s pypy3.3 %{buildroot}/%{_bindir}/pypy3
+ln -s ./pypy3 %{buildroot}%{pypyprefix}/bin/pypy%{pyversion}
+ln -s %{pypyprefix}/bin/pypy%{pyversion} %{buildroot}%{_bindir}/pypy%{pyversion}
+ln -s pypy%{pyversion} %{buildroot}%{_bindir}/pypy3
# 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
@@ -790,10 +779,10 @@ CheckPyPy() {
#pypy/goal/pypy pypy/test_all.py --resultlog=pypyjit_new.log
%if %{run_selftests}
-CheckPyPy pypy-c
+CheckPyPy %{name}-c
%if 0%{with_stackless}
-CheckPyPy pypy3-stackless
+CheckPyPy %{name}-stackless
%endif
%endif # run_selftests
@@ -821,7 +810,7 @@ CheckPyPy pypy3-stackless
%license LICENSE
%doc README.rst
%{_bindir}/pypy3
-%{_bindir}/pypy3.3
+%{_bindir}/pypy%{pyversion}
%{pypyprefix}/bin/
%exclude %{_libdir}/%{name}-%{version}.tar.bz2
@@ -840,6 +829,13 @@ CheckPyPy pypy3-stackless
%changelog
+* Fri Oct 20 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.9.0-1
+- Update to 5.9 (#1504427)
+- Remove merged patches
+- Reindex the patches to match the filenames
+- Rebase the faulthandler Patch11
+- BR python-pycparser
+
* Thu Aug 03 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.5.0-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
diff --git a/sources b/sources
index 5155d51..728ee37 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-536008fd7b17af8878915393fc1ecfc3 pypy3.3-v5.5.0-alpha-src.tar.bz2
+SHA512 (pypy3-v5.9.0-src.tar.bz2) = 3d5384d644fdd1bc8b95f5747dbd1771ae06eb2cfc7b57be359b8bf40177676afd097620d0cb9d9000c40d8cce075cfa6bfd92de987d3dd927c04d7d595dc5bd
commit 79816c5293727d3eb45debfb1ba42e5bc8b3db29
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Thu Aug 3 06:35:52 2017 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
diff --git a/pypy3.spec b/pypy3.spec
index 6997965..f878bb2 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 5.5.0
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -840,6 +840,9 @@ CheckPyPy pypy3-stackless
%changelog
+* Thu Aug 03 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.5.0-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
+
* Thu Jul 27 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.5.0-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
commit aebba1447fc82a76bc6e7102083198e340d076bd
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Thu Jul 27 09:23:17 2017 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
diff --git a/pypy3.spec b/pypy3.spec
index 73f75d3..6997965 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 5.5.0
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -840,6 +840,9 @@ CheckPyPy pypy3-stackless
%changelog
+* Thu Jul 27 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.5.0-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
* Sat Feb 11 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.5.0-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
commit 717803cfa0815090a04163482c395a46dced8f02
Author: Petr Písař <ppisar(a)redhat.com>
Date: Wed Jul 12 14:43:49 2017 +0200
perl dependency renamed to perl-interpreter <https://fedoraproject.org/wiki/Changes/perl_Package_to_Install_Core_Modules>
diff --git a/pypy3.spec b/pypy3.spec
index c74d495..73f75d3 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -227,7 +227,7 @@ BuildRequires: time
BuildRequires: /usr/bin/free
# For use in the selftests, for imposing a per-test timeout:
-BuildRequires: perl
+BuildRequires: perl-interpreter
%endif
# No prelink on these arches
commit 51ae82f0cce74a6fb047e40d45173c75bffc41f9
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Sat Feb 11 08:09:09 2017 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
diff --git a/pypy3.spec b/pypy3.spec
index 5598133..c74d495 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 5.5.0
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -840,6 +840,9 @@ CheckPyPy pypy3-stackless
%changelog
+* Sat Feb 11 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.5.0-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
* Sun Nov 13 2016 Dan Horák <dan[at]danny.cz> - 5.5.0-3
- set z10 as the base CPU for s390(x) build
commit b929faae35b08942da1a1d1d994b26e3400f48c3
Author: Dan Horák <dan(a)danny.cz>
Date: Sun Nov 13 09:22:11 2016 +0100
- set z10 as the base CPU for s390(x) build
diff --git a/pypy3.spec b/pypy3.spec
index 903acb9..5598133 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 5.5.0
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -316,6 +316,11 @@ find lib-python/%{pylibver} -name "*.py" -exec \
%endif
%build
+%ifarch s390 s390x
+# pypy3 requires z10 at least
+%global optflags %(echo %{optflags} | sed 's/-march=z9-109 /-march=z10 /')
+%endif
+
# Top memory usage is about 4.5GB on arm7hf
free
@@ -835,6 +840,9 @@ CheckPyPy pypy3-stackless
%changelog
+* Sun Nov 13 2016 Dan Horák <dan[at]danny.cz> - 5.5.0-3
+- set z10 as the base CPU for s390(x) build
+
* Sat Nov 12 2016 Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl> - 5.5.0-2
- Also build on arm and s390*
commit 404c37f2ddb3343127726d561cd86b1a6488cd7f
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Sat Nov 12 09:29:11 2016 -0500
Restore renaming of pypytrace-mode to pypy3trace-mode
diff --git a/pypy3.spec b/pypy3.spec
index 837273b..903acb9 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -650,8 +650,9 @@ find \
# Install the JIT trace mode for Emacs:
%if %{with_emacs}
-install -m0644 -p -D -t %{buildroot}/%{_emacs_sitelispdir} \
- rpython/jit/tool/pypytrace-mode.{el,elc}
+mkdir -p %{buildroot}/%{_emacs_sitelispdir}
+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:
commit 91071982692c6dd8da9894e3180cd7bb5b4d290e
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Sat Nov 12 08:10:01 2016 -0500
It turns out ppc has no gold
So use gold on arm/i686/amd64 only.
diff --git a/pypy3.spec b/pypy3.spec
index 16d5f46..837273b 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -311,7 +311,9 @@ find lib-python/%{pylibver} -name "*.py" -exec \
"{}" \
\;
-sed -i -r 's/\$\(LDFLAGSEXTRA\)/& -fuse-ld=gold/' ./rpython/translator/platform/posix.py
+%ifarch %{ix86} x86_64 %{arm}
+ sed -i -r 's/\$\(LDFLAGSEXTRA\)/& -fuse-ld=gold/' ./rpython/translator/platform/posix.py
+%endif
%build
# Top memory usage is about 4.5GB on arm7hf
commit ad0d37c683891eaf084a84e4a9f2205ce3c5585b
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Sat Nov 12 06:51:54 2016 -0500
Also build on arm and s390*
diff --git a/pypy3.spec b/pypy3.spec
index b6e6d0b..16d5f46 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 5.5.0
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -11,7 +11,7 @@ License: MIT and Python and UCD
URL: http://pypy.org/
# Not available yet
-ExcludeArch: aarch64 armv7hl s390 s390x
+ExcludeArch: aarch64
# High-level configuration of the build:
@@ -311,7 +311,10 @@ find lib-python/%{pylibver} -name "*.py" -exec \
"{}" \
\;
+sed -i -r 's/\$\(LDFLAGSEXTRA\)/& -fuse-ld=gold/' ./rpython/translator/platform/posix.py
+
%build
+# Top memory usage is about 4.5GB on arm7hf
free
BuildPyPy() {
@@ -829,6 +832,9 @@ CheckPyPy pypy3-stackless
%changelog
+* Sat Nov 12 2016 Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl> - 5.5.0-2
+- Also build on arm and s390*
+
* Sat Oct 15 2016 Miro Hrončok <mhroncok(a)redhat.com> - 5.5.0-1
- PyPy 3.3 5.5.0
- On Fedora 26+, BR compat-openssl10-devel
commit 37fe95796cc55f2af8290bf78c32226b2ac09fc3
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Sat Nov 12 06:51:35 2016 -0500
Make the spec file a tiny bit shorter
diff --git a/pypy3.spec b/pypy3.spec
index 0245be9..b6e6d0b 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -260,7 +260,6 @@ CPU architecture.
%package libs
-Group: Development/Languages
Summary: Run-time libraries used by PyPy implementations of Python 3
# We supply an emacs mode for the JIT viewer.
@@ -274,7 +273,6 @@ Libraries required by the various PyPy implementations of Python 3.
%package devel
-Group: Development/Languages
Summary: Development tools for working with PyPy3
Requires: pypy3%{?_isa} = %{version}-%{release}
@@ -284,7 +282,6 @@ Header files for building C extension modules against PyPy3
%if 0%{with_stackless}
%package stackless
-Group: Development/Languages
Summary: Stackless Python interpreter built using PyPy3
Requires: pypy3-libs%{?_isa} = %{version}-%{release}
%description stackless
@@ -516,8 +513,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
+ln -s pypy3.3 %{buildroot}/%{_bindir}/pypy3
# 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
@@ -648,19 +645,17 @@ 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}/pypy3trace-mode.el
-cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/pypy3trace-mode.elc
+install -m0644 -p -D -t %{buildroot}/%{_emacs_sitelispdir} \
+ rpython/jit/tool/pypytrace-mode.{el,elc}
%endif
# Install macros for rpm:
-mkdir -p %{buildroot}/%{_rpmconfigdir}/macros.d
-install -m 644 %{SOURCE2} %{buildroot}/%{_rpmconfigdir}/macros.d
+install -m0644 -p -D -t %{buildroot}/%{_rpmconfigdir}/macros.d %{SOURCE2}
# 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
+rm -f %{buildroot}%{_libdir}/pypy3-5.2.0.tar.bz2 \
+ %{buildroot}%{pypyprefix}/LICENSE \
+ %{buildroot}%{pypyprefix}/README.rst
# wtf? This is probably masking some bigger problem, but let's do this for now
mv -v lib-python/3/test/regrtest.py-new lib-python/3/test/regrtest.py || :
commit 6b002d36f3cb6a967ccf98fb1e66330fdd7dda09
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Tue Nov 8 15:32:20 2016 -0500
Also exclude armv7hl
Build generates a lot of warnings and errors, and fails despite having
4GB RAM + 4GB swap available. The error is
/usr/bin/ld: failed to set dynamic section sizes: Memory exhausted
collect2: error: ld returned 1 exit status
but this might be caused by the earlier errors.
diff --git a/pypy3.spec b/pypy3.spec
index d6bb1dd..0245be9 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -3,7 +3,6 @@ Version: 5.5.0
Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
-Group: Development/Languages
# LGPL and another free license we'd need to ask spot about are present in some
# java jars that we're not building with atm (in fact, we're deleting them
# before building). If we restore those we'll have to work out the new
@@ -12,7 +11,7 @@ License: MIT and Python and UCD
URL: http://pypy.org/
# Not available yet
-ExcludeArch: aarch64 s390 s390x
+ExcludeArch: aarch64 armv7hl s390 s390x
# High-level configuration of the build:
commit 0b4deeff51596dd2f8ec1b9ced18caa60f6ddaa0
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Tue Nov 8 07:57:41 2016 -0500
Add BR for free
diff --git a/pypy3.spec b/pypy3.spec
index 3c5f5c5..d6bb1dd 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -225,6 +225,7 @@ BuildRequires: gc-devel
# For use in the selftests, for recording stats:
BuildRequires: time
+BuildRequires: /usr/bin/free
# For use in the selftests, for imposing a per-test timeout:
BuildRequires: perl
commit 56984a45242e2ed09394b206e3cda14aef15fafa
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Tue Nov 8 07:50:10 2016 -0500
Print the amount of available memory
diff --git a/pypy3.spec b/pypy3.spec
index 934a434..3c5f5c5 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -315,6 +315,7 @@ find lib-python/%{pylibver} -name "*.py" -exec \
\;
%build
+free
BuildPyPy() {
ExeName=$1
commit 693a83b0c291b9c876f08bdc5e81c6718bf71929
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Mon Nov 7 23:43:54 2016 -0500
Add a hack to fix tests, and restore building on ppc*
I didn't test ppc64le yet, but at least ppc64 builds fine with the kludge.
diff --git a/pypy3.spec b/pypy3.spec
index 0c266d0..934a434 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -12,7 +12,7 @@ License: MIT and Python and UCD
URL: http://pypy.org/
# Not available yet
-ExcludeArch: aarch64 s390 s390x ppc64le ppc64
+ExcludeArch: aarch64 s390 s390x
# High-level configuration of the build:
@@ -661,6 +661,9 @@ rm -f %{buildroot}%{_libdir}//pypy3-5.2.0.tar.bz2
rm -f %{buildroot}%{pypyprefix}/LICENSE
rm -f %{buildroot}%{pypyprefix}/README.rst
+# wtf? This is probably masking some bigger problem, but let's do this for now
+mv -v lib-python/3/test/regrtest.py-new lib-python/3/test/regrtest.py || :
+
%check
topdir=$(pwd)
commit 817c77d554b6dd380fd335a29c43dce88ba052a5
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Thu Nov 3 18:42:18 2016 -0400
Also exclude ppc64*
The tests are failing (looks like pypy wasn't tested on ppc64 at all),
and I cannot solve this without access to the hardware.
diff --git a/pypy3.spec b/pypy3.spec
index d826142..0c266d0 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -12,7 +12,7 @@ License: MIT and Python and UCD
URL: http://pypy.org/
# Not available yet
-ExcludeArch: aarch64 s390 s390x
+ExcludeArch: aarch64 s390 s390x ppc64le ppc64
# High-level configuration of the build:
commit aa6a9d04d6a20b99222a9e8db25a1e669ccc7eb4
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Thu Nov 3 14:49:28 2016 -0400
PPC64 has no faulthandler
diff --git a/011-no-faulthandler.patch b/011-no-faulthandler.patch
new file mode 100644
index 0000000..f0154eb
--- /dev/null
+++ b/011-no-faulthandler.patch
@@ -0,0 +1,53 @@
+diff --git pypy3-v5.5.0-src/lib-python/3/test/regrtest.py pypy3-v5.5.0-src/lib-python/3/test/regrtest.py-new
+index 8d18a9297a..e99322ebe1 100755
+--- pypy3-v5.5.0-src/lib-python/3/test/regrtest.py
++++ pypy3-v5.5.0-src/lib-python/3/test/regrtest.py-new
+@@ -169,7 +169,6 @@ option '-uall,-gui'.
+ import importlib
+
+ import builtins
+-import faulthandler
+ import getopt
+ import io
+ import json
+@@ -197,6 +196,10 @@ try:
+ import multiprocessing.process
+ except ImportError:
+ multiprocessing = None
++try:
++ import faulthandler
++except ImportError:
++ faulthandler = None
+
+
+ # Some times __path__ and __file__ are not absolute (e.g. while running from
+@@ -283,17 +286,18 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
+ on the command line.
+ """
+
+- # Display the Python traceback on fatal errors (e.g. segfault)
+- faulthandler.enable(all_threads=True)
+-
+- # Display the Python traceback on SIGALRM or SIGUSR1 signal
+- signals = []
+- if hasattr(signal, 'SIGALRM'):
+- signals.append(signal.SIGALRM)
+- if hasattr(signal, 'SIGUSR1'):
+- signals.append(signal.SIGUSR1)
+- for signum in signals:
+- faulthandler.register(signum, chain=True)
++ if faulthandler:
++ # Display the Python traceback on fatal errors (e.g. segfault)
++ faulthandler.enable(all_threads=True)
++
++ # Display the Python traceback on SIGALRM or SIGUSR1 signal
++ signals = []
++ if hasattr(signal, 'SIGALRM'):
++ signals.append(signal.SIGALRM)
++ if hasattr(signal, 'SIGUSR1'):
++ signals.append(signal.SIGUSR1)
++ for signum in signals:
++ faulthandler.register(signum, chain=True)
+
+ replace_stdout()
+
diff --git a/pypy3.spec b/pypy3.spec
index ea45edf..d826142 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -170,6 +170,9 @@ Patch4: 009-raise-an-error-when-STARTTLS-fails.patch
# Disabled HTTP header injections in http.client
Patch5: 010-disabled-HTTP-header-injections-in-http.client.patch
+# It seems ppc64 has no faulthandler
+Patch6: 011-no-faulthandler.patch
+
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
commit 347fb465b0fc7717f6e6b171b895c0c01f6d77a3
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sat Oct 22 14:52:20 2016 +0200
Exclude not available arches
diff --git a/pypy3.spec b/pypy3.spec
index 8652182..ea45edf 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -11,6 +11,9 @@ Group: Development/Languages
License: MIT and Python and UCD
URL: http://pypy.org/
+# Not available yet
+ExcludeArch: aarch64 s390 s390x
+
# High-level configuration of the build:
# PyPy consists of an implementation of an interpreter (with JIT compilation)
commit c12d8bfa0bbfd60c56c641dbe8d522681f3d35cf
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sat Oct 22 14:17:55 2016 +0200
Sources for 347975d
diff --git a/.gitignore b/.gitignore
index 60f26ec..3fcf7b6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
/pypy3-2.4.0-src.tar.bz2
/pypy3.3-v5.2.0-alpha1-src.tar.bz2
+/pypy3.3-v5.5.0-alpha-src.tar.bz2
diff --git a/sources b/sources
index 0e4fa7b..5155d51 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-e4bbd6fe42481a17f705611d76914eda pypy3.3-v5.2.0-alpha1-src.tar.bz2
+536008fd7b17af8878915393fc1ecfc3 pypy3.3-v5.5.0-alpha-src.tar.bz2
commit 347975dbf4523b2a8636ff70c59a5b537b9b4375
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sat Oct 22 14:11:41 2016 +0200
PyPy 3.3 5.5.0
diff --git a/pypy3.spec b/pypy3.spec
index 67819c7..8652182 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
-Version: 5.2.0
-Release: 0.1.alpha1%{?dist}
+Version: 5.5.0
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -129,7 +129,7 @@ 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/pypy3.3-v5.2.0-alpha1-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy3.3-v%{version}-alpha-src.t...
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -201,13 +201,18 @@ BuildRequires: zlib-devel
BuildRequires: bzip2-devel
BuildRequires: ncurses-devel
BuildRequires: expat-devel
-BuildRequires: openssl-devel
BuildRequires: gdbm-devel
BuildRequires: xz-devel
%ifnarch s390
BuildRequires: valgrind-devel
%endif
+%if 0%{?fedora} >= 26
+BuildRequires: compat-openssl10-devel
+%else
+BuildRequires: openssl-devel
+%endif
+
%if %{run_selftests}
# Used by the selftests, though not by the build:
BuildRequires: gc-devel
@@ -281,7 +286,7 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%endif
%prep
-%autosetup -n pypy3.3-v5.2.0-alpha1-src -p1 -S git
+%autosetup -n pypy3-v%{version}-src -p1 -S git
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
@@ -803,6 +808,8 @@ CheckPyPy pypy3-stackless
%{_bindir}/pypy3.3
%{pypyprefix}/bin/
+%exclude %{_libdir}/%{name}-%{version}.tar.bz2
+
%files devel
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
@@ -817,6 +824,10 @@ CheckPyPy pypy3-stackless
%changelog
+* Sat Oct 15 2016 Miro Hrončok <mhroncok(a)redhat.com> - 5.5.0-1
+- PyPy 3.3 5.5.0
+- On Fedora 26+, BR compat-openssl10-devel
+
* Sat Jul 02 2016 Miro Hrončok <mhroncok(a)redhat.com> - 5.2.0-0.1.alpha1
- First alpha build of PyPy 3.3
commit 343676a8999d3e5b141b58ec6c9d8e167304ed9f
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Jul 8 14:38:18 2016 +0200
First alpha build of PyPy 3.3
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?= <miro(a)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(a)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
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?= <miro(a)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)
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/560a75090333b6de8a1de960acac5e...
-%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,35 +481,10 @@ InstallPyPy() {
mkdir -p %{buildroot}/%{_bindir}
mkdir -p %{buildroot}/%{pypyprefix}
-InstallPyPy %{name}
-
-%if 0%{with_stackless}
-InstallPyPy %{name}-stackless
-%endif
-
-# Install the various support libraries as described at:
-# http://codespeak.net/pypy/dist/pypy/doc/getting-started-python.html#insta...
-# 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 '.'
+# 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}
-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:
@@ -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(a)redhat.com> - 2.4.0-6
+* Sat Jul 02 2016 Miro Hrončok <mhroncok(a)redhat.com> - 5.2.0-0.1.alpha1
+- First alpha build of PyPy 3.3
+
+* Fri Jul 01 2016 Miro Hrončok <mhroncok(a)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(a)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(a)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(a)in.waw.pl> - 2.4.0-3
-- Bump release to rebuild with new execstack
-
* Thu Jun 18 2015 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 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
commit 092bdc18b3bd62174ce8db6323a5a1f59d080fd9
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Jul 1 15:59:13 2016 +0200
Fix for CVE-2016-0772 and CVE-2016-5699
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
- rhbz#1351680: https://bugzilla.redhat.com/show_bug.cgi?id=1351680
- Fixed upstream: https://hg.python.org/cpython/rev/d590114c2394
Fix for: CVE-2016-5699 python: http protocol steam injection attack
- rhbz#1303699: https://bugzilla.redhat.com/show_bug.cgi?id=1303699
- rhbz#1351687: https://bugzilla.redhat.com/show_bug.cgi?id=1351687
- Fixed upstream: https://hg.python.org/cpython/rev/bf3e1c9b80e9
diff --git a/009-raise-an-error-when-STARTTLS-fails.patch b/009-raise-an-error-when-STARTTLS-fails.patch
new file mode 100644
index 0000000..ba1cc53
--- /dev/null
+++ b/009-raise-an-error-when-STARTTLS-fails.patch
@@ -0,0 +1,35 @@
+From 9092f6266c3054befff053aa943632856cedbdba Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro(a)hroncok.cz>
+Date: Fri, 1 Jul 2016 11:42:53 +0200
+Subject: [PATCH] Raise an error when STARTTLS fails
+
+CVE-2016-0772 python: smtplib StartTLS stripping attack
+rhbz#1303647: https://bugzilla.redhat.com/show_bug.cgi?id=1303647
+rhbz#1351680: https://bugzilla.redhat.com/show_bug.cgi?id=1351680
+
+Based on an upstream change by Benjamin Peterson <benjamin(a)python.org>
+- in changeset 101887:d590114c2394 3.4
+- https://hg.python.org/cpython/rev/d590114c2394
+---
+ lib-python/3/smtplib.py | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/lib-python/3/smtplib.py b/lib-python/3/smtplib.py
+index 679e478..1aacfaf 100644
+--- a/lib-python/3/smtplib.py
++++ b/lib-python/3/smtplib.py
+@@ -666,6 +666,11 @@ class SMTP:
+ self.ehlo_resp = None
+ self.esmtp_features = {}
+ self.does_esmtp = 0
++ else:
++ # RFC 3207:
++ # 501 Syntax error (no parameters allowed)
++ # 454 TLS not available due to temporary reason
++ raise SMTPResponseException(resp, reply)
+ return (resp, reply)
+
+ def sendmail(self, from_addr, to_addrs, msg, mail_options=[],
+--
+2.9.0
+
diff --git a/010-disabled-HTTP-header-injections-in-http.client.patch b/010-disabled-HTTP-header-injections-in-http.client.patch
new file mode 100644
index 0000000..10591d5
--- /dev/null
+++ b/010-disabled-HTTP-header-injections-in-http.client.patch
@@ -0,0 +1,163 @@
+From 82dc922c7c4771ef789f5b395f54a603c693b05e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro(a)hroncok.cz>
+Date: Fri, 1 Jul 2016 13:08:55 +0200
+Subject: [PATCH] Disabled HTTP header injections in http.client.
+
+CVE-2016-5699 python: http protocol steam injection attack
+rhbz#1303699: https://bugzilla.redhat.com/show_bug.cgi?id=1303699
+rhbz#1351687: https://bugzilla.redhat.com/show_bug.cgi?id=1351687
+
+Based on an upstream change by Demian Brecht and Serhiy Storchaka
+- in changeset 94952:bf3e1c9b80e9 3.4
+- https://hg.python.org/cpython/rev/bf3e1c9b80e9
+---
+ lib-python/3/http/client.py | 37 +++++++++++++++++++++++++
+ lib-python/3/test/test_httplib.py | 57 +++++++++++++++++++++++++++++++++++++++
+ 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
+--- a/lib-python/3/http/client.py
++++ b/lib-python/3/http/client.py
+@@ -70,6 +70,7 @@ import email.parser
+ import email.message
+ import io
+ import os
++import re
+ import socket
+ import collections
+ from urllib.parse import urlsplit
+@@ -207,6 +208,34 @@ MAXAMOUNT = 1048576
+ # maximal line length when calling readline().
+ _MAXLINE = 65536
+
++# Header name/value ABNF (http://tools.ietf.org/html/rfc7230#section-3.2)
++#
++# VCHAR = %x21-7E
++# obs-text = %x80-FF
++# header-field = field-name ":" OWS field-value OWS
++# field-name = token
++# field-value = *( field-content / obs-fold )
++# field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
++# field-vchar = VCHAR / obs-text
++#
++# obs-fold = CRLF 1*( SP / HTAB )
++# ; obsolete line folding
++# ; see Section 3.2.4
++
++# token = 1*tchar
++#
++# tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*"
++# / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~"
++# / DIGIT / ALPHA
++# ; any VCHAR, except delimiters
++#
++# VCHAR defined in http://tools.ietf.org/html/rfc5234#appendix-B.1
++
++# the patterns for both name and value are more leniant than RFC
++# definitions to allow for backwards compatibility
++_is_legal_header_name = re.compile(b'^[^:\s][^:\r\n]*$').match
++_is_illegal_header_value = re.compile(b'\n(?![ \t])|\r(?![ \t\n])').search
++
+ 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:
+
+ if hasattr(header, 'encode'):
+ header = header.encode('ascii')
++
++ if not _is_legal_header_name(header):
++ raise ValueError('Invalid header name %r' % (header,))
++
+ values = list(values)
+ for i, one_value in enumerate(values):
+ if hasattr(one_value, 'encode'):
+ values[i] = one_value.encode('latin1')
+ elif isinstance(one_value, int):
+ values[i] = str(one_value).encode('ascii')
++
++ if _is_illegal_header_value(values[i]):
++ raise ValueError('Invalid header value %r' % (values[i],))
++
+ value = b'\r\n\t'.join(values)
+ 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
+--- 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)
+
++ conn.putheader('Foo', ' bar ')
++ self.assertIn(b'Foo: bar ', conn._buffer)
++ conn.putheader('Bar', '\tbaz\t')
++ self.assertIn(b'Bar: \tbaz\t', conn._buffer)
++ conn.putheader('Authorization', 'Bearer mytoken')
++ self.assertIn(b'Authorization: Bearer mytoken', conn._buffer)
++ conn.putheader('IterHeader', 'IterA', 'IterB')
++ self.assertIn(b'IterHeader: IterA\r\n\tIterB', conn._buffer)
++ conn.putheader('LatinHeader', b'\xFF')
++ self.assertIn(b'LatinHeader: \xFF', conn._buffer)
++ conn.putheader('Utf8Header', b'\xc3\x80')
++ self.assertIn(b'Utf8Header: \xc3\x80', conn._buffer)
++ conn.putheader('C1-Control', b'next\x85line')
++ self.assertIn(b'C1-Control: next\x85line', conn._buffer)
++ conn.putheader('Embedded-Fold-Space', 'is\r\n allowed')
++ self.assertIn(b'Embedded-Fold-Space: is\r\n allowed', conn._buffer)
++ conn.putheader('Embedded-Fold-Tab', 'is\r\n\tallowed')
++ self.assertIn(b'Embedded-Fold-Tab: is\r\n\tallowed', conn._buffer)
++ conn.putheader('Key Space', 'value')
++ self.assertIn(b'Key Space: value', conn._buffer)
++ conn.putheader('KeySpace ', 'value')
++ self.assertIn(b'KeySpace : value', conn._buffer)
++ conn.putheader(b'Nonbreak\xa0Space', 'value')
++ self.assertIn(b'Nonbreak\xa0Space: value', conn._buffer)
++ conn.putheader(b'\xa0NonbreakSpace', 'value')
++ self.assertIn(b'\xa0NonbreakSpace: value', conn._buffer)
++
+ def test_ipv6host_header(self):
+ # Default host header on IPv6 transaction should wrapped by [] if
+ # its actual IPv6 address
+@@ -153,6 +180,36 @@ class HeaderTests(TestCase):
+ conn.request('GET', '/foo')
+ self.assertTrue(sock.data.startswith(expected))
+
++ def test_invalid_headers(self):
++ conn = client.HTTPConnection('example.com')
++ conn.sock = FakeSocket('')
++ conn.putrequest('GET', '/')
++
++ # http://tools.ietf.org/html/rfc7230#section-3.2.4, whitespace is no
++ # longer allowed in header names
++ cases = (
++ (b'Invalid\r\nName', b'ValidValue'),
++ (b'Invalid\rName', b'ValidValue'),
++ (b'Invalid\nName', b'ValidValue'),
++ (b'\r\nInvalidName', b'ValidValue'),
++ (b'\rInvalidName', b'ValidValue'),
++ (b'\nInvalidName', b'ValidValue'),
++ (b' InvalidName', b'ValidValue'),
++ (b'\tInvalidName', b'ValidValue'),
++ (b'Invalid:Name', b'ValidValue'),
++ (b':InvalidName', b'ValidValue'),
++ (b'ValidName', b'Invalid\r\nValue'),
++ (b'ValidName', b'Invalid\rValue'),
++ (b'ValidName', b'Invalid\nValue'),
++ (b'ValidName', b'InvalidValue\r\n'),
++ (b'ValidName', b'InvalidValue\r'),
++ (b'ValidName', b'InvalidValue\n'),
++ )
++ for name, value in cases:
++ with self.subTest((name, value)):
++ with self.assertRaisesRegex(ValueError, 'Invalid header'):
++ conn.putheader(name, value)
++
+
+ class BasicTest(TestCase):
+ def test_status_lines(self):
+--
+2.9.0
+
diff --git a/pypy3.spec b/pypy3.spec
index e31b4d4..5666e56 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 2.4.0
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -156,6 +156,20 @@ Patch2: 007-remove-startup-message.patch
# 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
+# rhbz#1351680: https://bugzilla.redhat.com/show_bug.cgi?id=1351680
+# FIXED UPSTREAM: https://hg.python.org/cpython/rev/d590114c2394
+# Raise an error when STARTTLS fails
+Patch4: 009-raise-an-error-when-STARTTLS-fails.patch
+
+# CVE-2016-5699 python: http protocol steam injection attack
+# rhbz#1303699: https://bugzilla.redhat.com/show_bug.cgi?id=1303699
+# rhbz#1351687: https://bugzilla.redhat.com/show_bug.cgi?id=1351687
+# FIXED UPSTREAM: https://hg.python.org/cpython/rev/bf3e1c9b80e9
+# Disabled HTTP header injections in http.client
+Patch5: 010-disabled-HTTP-header-injections-in-http.client.patch
+
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
@@ -842,6 +856,17 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri Jul 01 2016 Miro Hrončok <mhroncok(a)redhat.com> - 2.4.0-6
+- 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
+- rhbz#1351680: https://bugzilla.redhat.com/show_bug.cgi?id=1351680
+- Fixed upstream: https://hg.python.org/cpython/rev/d590114c2394
+- Fix for: CVE-2016-5699 python: http protocol steam injection attack
+- rhbz#1303699: https://bugzilla.redhat.com/show_bug.cgi?id=1303699
+- 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(a)redhat.com> - 2.4.0-5
- Fix FTBFS (#1307889)
- Add patch to fix maximum recursion depth error during build
commit 4a3038ff5634b498b5afbf2552eeec9ae5d6e03b
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri May 13 02:07:16 2016 +0200
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
diff --git a/008-maximum-recursion-depth.patch b/008-maximum-recursion-depth.patch
new file mode 100644
index 0000000..6d3d157
--- /dev/null
+++ b/008-maximum-recursion-depth.patch
@@ -0,0 +1,179 @@
+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/pypy3.spec b/pypy3.spec
index 53c2241..e31b4d4 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 2.4.0
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -152,6 +152,9 @@ 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
# Build-time requirements:
@@ -287,6 +290,20 @@ 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/560a75090333b6de8a1de960acac5e...
+%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() {
@@ -348,7 +365,8 @@ BuildPyPy() {
# of root pointers:
%global gcrootfinder_options --gcrootfinder=shadowstack
- export CFLAGS=$(echo "$RPM_OPT_FLAGS")
+ # Prevent memory exhaustion
+ export CFLAGS=$(echo "$RPM_OPT_FLAGS" | sed -e 's/-g//')
%else
# Go with the default, which is "asmgcc"
@@ -367,7 +385,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//')
+ 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//')
%endif
@@ -824,6 +842,12 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri May 13 2016 Miro Hrončok <mhroncok(a)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(a)fedoraproject.org> - 2.4.0-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
commit 37de776457faff9eeedd146ed613f098a688d9cf
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Thu Feb 4 18:47:53 2016 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
diff --git a/pypy3.spec b/pypy3.spec
index 04952a9..53c2241 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 2.4.0
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -824,6 +824,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Thu Feb 04 2016 Fedora Release Engineering <releng(a)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(a)in.waw.pl> - 2.4.0-3
- Bump release to rebuild with new execstack
commit ffbf97517e896aea68cb51cb99a36e5bf95422e8
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Tue Aug 4 11:50:06 2015 -0400
Bump release to rebuild with new execstack
diff --git a/pypy3.spec b/pypy3.spec
index afc59f7..04952a9 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 2.4.0
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -824,6 +824,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Tue Aug 04 2015 Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl> - 2.4.0-3
+- Bump release to rebuild with new execstack
+
* Thu Jun 18 2015 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.4.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
commit a039768e93ec1249319bb9b49149c6981717b0ab
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Thu Jun 18 18:15:59 2015 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
diff --git a/pypy3.spec b/pypy3.spec
index fbacd83..afc59f7 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 2.4.0
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -824,6 +824,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Thu Jun 18 2015 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.4.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
+
* Wed Sep 10 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.4.0-1
- Update to 2.4.0
commit a7f7d048aa94963f46c11bea18071aef0fb8c954
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Thu Jun 11 11:40:02 2015 +0200
Sync with pypy
diff --git a/pypy3.spec b/pypy3.spec
index 6e6bd46..fbacd83 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -116,7 +116,7 @@ URL: http://pypy.org/
# Easy way to turn off the selftests:
%global run_selftests 1
-%global pypyprefix %{_libdir}/pypy3-%{version}
+%global pypyprefix %{_libdir}/%{name}-%{version}
%global pylibver 3
# We refer to this subdir of the source tree in a few places during the build:
@@ -129,11 +129,11 @@ 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/pypy3-2.4.0-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/%{name}-%{version}-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
-Source2: macros.pypy3
+Source2: macros.%{name}
# By default, if built at a tty, the translation process renders a Mandelbrot
# set to indicate progress.
@@ -217,7 +217,7 @@ BuildRequires: emacs
BuildRequires: git
# Metadata for the core package (the JIT build):
-Requires: pypy3-libs%{?_isa} = %{version}-%{release}
+Requires: %{name}-libs%{?_isa} = %{version}-%{release}
%description
PyPy's implementation of Python 3, featuring a Just-In-Time compiler on some CPU
@@ -249,7 +249,7 @@ Libraries required by the various PyPy implementations of Python 3.
%package devel
Group: Development/Languages
Summary: Development tools for working with PyPy3
-Requires: pypy3%{?_isa} = %{version}-%{release}
+Requires: %{name}%{?_isa} = %{version}-%{release}
%description devel
Header files for building C extension modules against PyPy3
@@ -259,13 +259,13 @@ Header files for building C extension modules against PyPy3
%package stackless
Group: Development/Languages
Summary: Stackless Python interpreter built using PyPy3
-Requires: pypy3-libs%{?_isa} = %{version}-%{release}
+Requires: %{name}-libs%{?_isa} = %{version}-%{release}
%description stackless
Build of PyPy3 with support for micro-threads for massive concurrency
%endif
%prep
-%autosetup -n pypy3-2.4.0-src -p1 -S git
+%autosetup -n %{name}-%{version}-src -p1 -S git
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
@@ -410,7 +410,7 @@ BuildPyPy() {
}
BuildPyPy \
- pypy3 \
+ %{name} \
%if 0%{with_jit}
"-Ojit" \
%else
@@ -420,7 +420,7 @@ BuildPyPy \
%if 0%{with_stackless}
BuildPyPy \
- pypy3-stackless \
+ %{name}-stackless \
"--stackless"
%endif
@@ -466,10 +466,10 @@ InstallPyPy() {
mkdir -p %{buildroot}/%{_bindir}
mkdir -p %{buildroot}/%{pypyprefix}
-InstallPyPy pypy3
+InstallPyPy %{name}
%if 0%{with_stackless}
-InstallPyPy pypy3-stackless
+InstallPyPy %{name}-stackless
%endif
@@ -572,16 +572,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}/pypy3 \
+ %{buildroot}/%{_bindir}/%{name} \
0
-%{buildroot}/%{pypyprefix}/pypy3 -c 'import _tkinter'
-%{buildroot}/%{pypyprefix}/pypy3 -c 'import tkinter'
-%{buildroot}/%{pypyprefix}/pypy3 -c 'import _sqlite3'
-%{buildroot}/%{pypyprefix}/pypy3 -c 'import _curses'
-%{buildroot}/%{pypyprefix}/pypy3 -c 'import curses'
-%{buildroot}/%{pypyprefix}/pypy3 -c 'import syslog'
-%{buildroot}/%{pypyprefix}/pypy3 -c 'from _sqlite3 import *'
+%{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 *'
# Header files for C extension modules.
# Upstream's packaging process (pypy/tool/release/package.py)
@@ -645,8 +645,8 @@ 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}/pypy3trace-mode.el
-cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/pypy3trace-mode.elc
+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
%endif
# Install macros for rpm:
@@ -775,10 +775,10 @@ CheckPyPy() {
#pypy/goal/pypy pypy/test_all.py --resultlog=pypyjit_new.log
%if %{run_selftests}
-CheckPyPy pypy3
+CheckPyPy %{name}
%if 0%{with_stackless}
-CheckPyPy pypy3-stackless
+CheckPyPy %{name}-stackless
%endif
%endif # run_selftests
@@ -800,26 +800,26 @@ CheckPyPy pypy3-stackless
%{pypyprefix}/lib_pypy/
%{pypyprefix}/site-packages/
%if %{with_emacs}
-%{_emacs_sitelispdir}/pypy3trace-mode.el
-%{_emacs_sitelispdir}/pypy3trace-mode.elc
+%{_emacs_sitelispdir}/%{name}trace-mode.el
+%{_emacs_sitelispdir}/%{name}trace-mode.elc
%endif
%files
%license LICENSE
%doc README.rst
-%{_bindir}/pypy3
-%{pypyprefix}/pypy3
+%{_bindir}/%{name}
+%{pypyprefix}/%{name}
%files devel
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
-%{_rpmconfigdir}/macros.d/macros.pypy3
+%{_rpmconfigdir}/macros.d/macros.%{name}
%if 0%{with_stackless}
%files stackless
%license LICENSE
%doc README.rst
-%{_bindir}/pypy-stackless
+%{_bindir}/%{name}-stackless
%endif
commit 908d523efb68df54d872af8a8c6324e0f8f7f106
Merge: ff9537b 5f5775a
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sun May 10 16:16:10 2015 +0200
Merge with pypy + package review (#1215732) history
commit 5f5775aa52401c7c7261d2e610fa796420e51b9d
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sun May 10 16:04:51 2015 +0200
Remove unused patches
diff --git a/008-fix-dynamic-symbols-script.patch b/008-fix-dynamic-symbols-script.patch
deleted file mode 100644
index 5b1d551..0000000
--- a/008-fix-dynamic-symbols-script.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-diff --git a/pypy/translator/platform/posix.py b/pypy/translator/platform/posix.py
---- a/pypy/translator/platform/posix.py
-+++ b/pypy/translator/platform/posix.py
-@@ -48,8 +48,10 @@
- response_file = self._make_response_file("dynamic-symbols-")
- f = response_file.open("w")
- f.write("{\n")
-+ f.write(" global:\n")
- for sym in eci.export_symbols:
-- f.write("%s;\n" % (sym,))
-+ f.write(" %s;\n" % (sym,))
-+ f.write(" local:*;\n")
- f.write("};")
- f.close()
-
diff --git a/config.patch b/config.patch
deleted file mode 100644
index bf81d7d..0000000
--- a/config.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-diff -rup pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py
---- pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py 2013-05-27 10:35:37.679237332 +0200
-+++ pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py 2013-05-27 10:47:41.506354482 +0200
-@@ -32,19 +32,20 @@ class BaseLinux(BasePosix):
- return self._pkg_config("libffi", "--libs-only-L",
- ['/usr/lib/libffi'])
-
-- def library_dirs_for_libffi_a(self):
-- # places where we need to look for libffi.a
-- # XXX obscuuure! only look for libffi.a if run with translate.py
-- if 'translate' in sys.modules:
-- if sys.maxint > 2**32:
-- host = 'x86_64'
-- else:
-- host = 'x86'
-- return self.library_dirs_for_libffi() + [
-- '/usr/lib',
-- '/usr/lib/%s-linux-gnu/' % host]
-- else:
-- return []
-+ #Fedora, at least, has the shared version but not the static:
-+ #def library_dirs_for_libffi_a(self):
-+ # # places where we need to look for libffi.a
-+ # # XXX obscuuure! only look for libffi.a if run with translate.py
-+ # if 'translate' in sys.modules:
-+ # if sys.maxint > 2**32:
-+ # host = 'x86_64'
-+ # else:
-+ # host = 'x86'
-+ # return self.library_dirs_for_libffi() + [
-+ # '/usr/lib',
-+ # '/usr/lib/%s-linux-gnu/' % host]
-+ # else:
-+ # return []
-
-
- class Linux(BaseLinux):
diff --git a/more-readable-c-code.patch b/more-readable-c-code.patch
deleted file mode 100644
index 92d340f..0000000
--- a/more-readable-c-code.patch
+++ /dev/null
@@ -1,693 +0,0 @@
-diff -up pypy-pypy-release-1.7/pypy/interpreter/pycode.py.more-readable-c-code pypy-pypy-release-1.7/pypy/interpreter/pycode.py
---- pypy-pypy-release-1.7/pypy/interpreter/pycode.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/interpreter/pycode.py 2011-11-21 16:16:15.673463780 -0500
-@@ -13,6 +13,7 @@ from pypy.interpreter.gateway import Non
- from pypy.interpreter.astcompiler.consts import (
- CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS, CO_NESTED,
- CO_GENERATOR, CO_CONTAINSGLOBALS)
-+from pypy.interpreter.pytraceback import offset2lineno
- from pypy.rlib.rarithmetic import intmask
- from pypy.rlib.debug import make_sure_not_resized
- from pypy.rlib import jit
-@@ -81,6 +82,7 @@ class PyCode(eval.Code):
- self.hidden_applevel = hidden_applevel
- self.magic = magic
- self._signature = cpython_code_signature(self)
-+ self._cached_source = None
- self._initialize()
-
- def _initialize(self):
-@@ -397,3 +399,23 @@ class PyCode(eval.Code):
-
- def repr(self, space):
- return space.wrap(self.get_repr())
-+
-+ def get_linenum_for_offset(self, offset):
-+ # Given a bytecode offset, return a 1-based index into the lines of the
-+ # source code
-+ return offset2lineno(self, offset)
-+
-+ def _ensure_source(self):
-+ # Lazily grab the source lines into self._cached_source (or raise
-+ # an IOError)
-+ if not self._cached_source:
-+ f = open(self.co_filename, 'r')
-+ source = [line.rstrip() for line in f.readlines()]
-+ f.close()
-+ self._cached_source = source
-+
-+ def get_source_text(self, linenum):
-+ # Given a 1-based index, get the corresponding line of source code (or
-+ # raise an IOError)
-+ self._ensure_source()
-+ return self._cached_source[linenum - 1]
-diff -up pypy-pypy-release-1.7/pypy/objspace/flow/model.py.more-readable-c-code pypy-pypy-release-1.7/pypy/objspace/flow/model.py
---- pypy-pypy-release-1.7/pypy/objspace/flow/model.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/objspace/flow/model.py 2011-11-21 16:15:36.599466455 -0500
-@@ -31,6 +31,120 @@ from pypy.tool.identity_dict import iden
-
- __metaclass__ = type
-
-+class SourceLoc(object):
-+ # A srcloc is a specific location within the RPython source code,
-+ # intended for human display
-+ __slots__ = ('code', # code object
-+ 'linenum' # 1-based index, as displayed to a user
-+ )
-+ def __init__(self, code, linenum):
-+ self.code = code
-+ self.linenum = linenum
-+
-+ def get_text(self):
-+ # Get the actual source text of this line
-+ return self.code.get_source_text(self.linenum)
-+
-+ def __eq__(self, other):
-+ return self.code == other.code and self.linenum == other.linenum
-+
-+ def __ne__(self, other):
-+ if other:
-+ return self.code != other.code or self.linenum != other.linenum
-+ else:
-+ return True
-+
-+class CodeLoc(object):
-+ # A codeloc is a specific location within the RPython bytecode
-+ __slots__ = ('code', # code object
-+ 'offset' # int index into bytecode, or -1
-+ )
-+
-+ def __init__(self, code, offset):
-+ self.code = code
-+ self.offset = offset
-+
-+ def __str__(self):
-+ if self.offset >= 0:
-+ return "%s@%d" % (self.code.co_name, self.offset)
-+ else:
-+ return ""
-+
-+ def __ne__(self, other):
-+ if other:
-+ return self.code != other.code or self.offset != other.offset
-+ else:
-+ return True
-+
-+ def __cmp__(self, other):
-+ # Partial ordering, for those locations that have an offset:
-+ if other:
-+ if self.offset >= 0 and other.offset >= 0:
-+ return self.offset - other.offset
-+ return 0
-+
-+ def get_source_loc(self):
-+ # Convert to a SourceLoc:
-+ return SourceLoc(self.code, self.code.get_linenum_for_offset(self.offset))
-+
-+class OperationLoc(object):
-+ # An oploc is the location within the RPython source code of a given
-+ # operation
-+ #
-+ # This is a list consisting of CodeLoc instances, some of which may be None
-+ #
-+ # For the simple case, this is list of length 1 with a single CodeLoc
-+ #
-+ # For an operation inside an inlined callsite, we have a list of length 2:
-+ # [codeloc of callsite,
-+ # codeloc of operation within inlined body]
-+ #
-+ # For more interesting inlined cases, we have a chain of source locations:
-+ # [codeloc of callsite,
-+ # codeloc of inner callsite,
-+ # ... ,
-+ # codeloc of innermost inlined callsite,
-+ # codeloc of operation within inlined body]
-+ #
-+
-+ __slots__ = ('codelocs', )
-+
-+ def __init__(self, codelocs):
-+ self.codelocs = codelocs
-+
-+ def __str__(self):
-+ return '[' + ' > '.join(str(codeloc) for codeloc in self.codelocs) + ']'
-+
-+ def __cmp__(self, other):
-+ return cmp(self.codelocs, other.codelocs)
-+
-+def block_comparator(blk0, blk1):
-+ '''
-+ Sort function for blocks, putting them in an ordering that attempts to
-+ maximize readability of the generated C code
-+ '''
-+ # print 'comparing %r and %r' % (blk0, blk1)
-+ # Put the start/end block at the top/bottom:
-+ if blk0.isstartblock:
-+ return -1
-+
-+ if blk1.isstartblock:
-+ return 1
-+
-+ # Order blocks by the offset, where present:
-+ if blk0.operations:
-+ if blk1.operations:
-+ return cmp(blk0.operations[0].oploc, blk1.operations[0].oploc)
-+ else:
-+ return -1
-+ else:
-+ if blk1.operations:
-+ return 1
-+ else:
-+ return 0
-+
-+def edge_comparator(edge0, edge1):
-+ return block_comparator(edge0.target, edge1.target)
-
- class FunctionGraph(object):
- __slots__ = ['startblock', 'returnblock', 'exceptblock', '__dict__']
-@@ -94,6 +208,21 @@ class FunctionGraph(object):
- seen[block] = True
- stack += block.exits[::-1]
-
-+ def iterblocks_by_source(self):
-+ # Try to preserve logical source ordering in the blocks
-+ block = self.startblock
-+ yield block
-+ seen = {block: True}
-+ stack = list(block.exits[::-1])
-+ stack.sort(edge_comparator)
-+ while stack:
-+ block = stack.pop().target
-+ if block not in seen:
-+ yield block
-+ seen[block] = True
-+ stack += block.exits[::-1]
-+ stack.sort(edge_comparator)
-+
- def iterlinks(self):
- block = self.startblock
- seen = {block: True}
-@@ -183,14 +312,14 @@ class Block(object):
- self.exits = [] # list of Link(s)
-
- def at(self):
-- if self.operations and self.operations[0].offset >= 0:
-- return "@%d" % self.operations[0].offset
-+ if self.operations:
-+ return str(self.operations[0].oploc)
- else:
- return ""
-
- def __str__(self):
- if self.operations:
-- txt = "block@%d" % self.operations[0].offset
-+ txt = "block%s" % self.operations[0].oploc
- else:
- if (not self.exits) and len(self.inputargs) == 1:
- txt = "return block"
-@@ -245,6 +374,21 @@ class Block(object):
- from pypy.translator.tool.graphpage import try_show
- try_show(self)
-
-+ def isreturnblock(self):
-+ return (not self.operations) and (not self.exits) and len(self.inputargs) == 1
-+
-+ def get_base_label(self, blocknum):
-+ # Generate a more friendly C label for this block
-+ if self.operations:
-+ txt = "block"
-+ elif (not self.exits) and len(self.inputargs) == 1:
-+ txt = "return_block"
-+ elif (not self.exits) and len(self.inputargs) == 2:
-+ txt = "raise_block"
-+ else:
-+ txt = "codeless_block"
-+ return '%s%d' % (txt, blocknum)
-+
-
- class Variable(object):
- __slots__ = ["_name", "_nr", "concretetype"]
-@@ -331,13 +475,15 @@ class WrapException(Exception):
-
-
- class SpaceOperation(object):
-- __slots__ = "opname args result offset".split()
-+ __slots__ = "opname args result oploc".split()
-
-- def __init__(self, opname, args, result, offset=-1):
-+ def __init__(self, opname, args, result, oploc=None):
- self.opname = intern(opname) # operation name
- self.args = list(args) # mixed list of var/const
- self.result = result # either Variable or Constant instance
-- self.offset = offset # offset in code string
-+ if oploc is None:
-+ oploc = OperationLoc([None])
-+ self.oploc = oploc
-
- def __eq__(self, other):
- return (self.__class__ is other.__class__ and
-@@ -352,8 +498,9 @@ class SpaceOperation(object):
- return hash((self.opname,tuple(self.args),self.result))
-
- def __repr__(self):
-- return "%r = %s(%s)" % (self.result, self.opname,
-- ", ".join(map(repr, self.args)))
-+ return "%r = %s(%s) (%s)" % (self.result, self.opname,
-+ ", ".join(map(repr, self.args)),
-+ self.oploc)
-
- class Atom(object):
- def __init__(self, name):
-@@ -427,8 +574,7 @@ def copygraph(graph, shallow=False, varm
- for op in oplist:
- copyop = SpaceOperation(op.opname,
- [copyvar(v) for v in op.args],
-- copyvar(op.result), op.offset)
-- #copyop.offset = op.offset
-+ copyvar(op.result), op.oploc)
- result.append(copyop)
- return result
- newblock.operations = copyoplist(block.operations)
-diff -up pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py.more-readable-c-code pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py
---- pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py 2011-11-21 16:15:36.600466455 -0500
-@@ -315,7 +315,9 @@ class FlowObjSpace(ObjSpace):
- def do_operation(self, name, *args_w):
- spaceop = SpaceOperation(name, args_w, Variable())
- if hasattr(self, 'executioncontext'): # not here during bootstrapping
-- spaceop.offset = self.executioncontext.crnt_offset
-+ codeloc = CodeLoc(self.executioncontext.code,
-+ self.executioncontext.crnt_offset)
-+ spaceop.oploc = OperationLoc([codeloc])
- self.executioncontext.recorder.append(spaceop)
- return spaceop.result
-
-diff -up pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py.more-readable-c-code pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py
---- pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py 2011-11-21 16:15:36.600466455 -0500
-@@ -119,3 +119,25 @@ def test_variable():
- assert v2.renamed
- assert v2.name.startswith("foobar_") and v2.name != v.name
- assert v2.name.split('_', 1)[1].isdigit()
-+
-+def test_source_locations():
-+ # Invent some random offsets into the code:
-+ co = sample_function.__code__
-+ codelocA = CodeLoc(co, 42)
-+ codelocB = CodeLoc(co, 87)
-+
-+ assert str(codelocA) == 'sample_function@42'
-+ assert str(codelocB) == 'sample_function@87'
-+
-+ assert cmp(codelocA, codelocB) < 0
-+ assert cmp(codelocB, codelocA) > 0
-+
-+ oplocA = OperationLoc([codelocA])
-+ oplocB = OperationLoc([codelocB])
-+
-+ assert str(oplocA) == '[sample_function@42]'
-+ assert str(oplocB) == '[sample_function@87]'
-+
-+ assert cmp(oplocA, oplocB) < 0
-+ assert cmp(oplocB, oplocA) > 0
-+
-diff -up pypy-pypy-release-1.7/pypy/rpython/rtyper.py.more-readable-c-code pypy-pypy-release-1.7/pypy/rpython/rtyper.py
---- pypy-pypy-release-1.7/pypy/rpython/rtyper.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/rpython/rtyper.py 2011-11-21 16:15:36.601466455 -0500
-@@ -800,7 +800,7 @@ class HighLevelOp(object):
- return vars
-
- def genop(self, opname, args_v, resulttype=None):
-- return self.llops.genop(opname, args_v, resulttype)
-+ return self.llops.genop(opname, args_v, resulttype, self.spaceop.oploc)
-
- def gendirectcall(self, ll_function, *args_v):
- return self.llops.gendirectcall(ll_function, *args_v)
-@@ -935,7 +935,7 @@ class LowLevelOpList(list):
- v.concretetype))
- return v
-
-- def genop(self, opname, args_v, resulttype=None):
-+ def genop(self, opname, args_v, resulttype=None, oploc=None):
- try:
- for v in args_v:
- v.concretetype
-@@ -944,7 +944,7 @@ class LowLevelOpList(list):
- " and pass its result to genop(),"
- " never hop.args_v directly.")
- vresult = Variable()
-- self.append(SpaceOperation(opname, args_v, vresult))
-+ self.append(SpaceOperation(opname, args_v, vresult, oploc))
- if resulttype is None:
- vresult.concretetype = Void
- return None
-diff -up pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py
---- pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py 2011-11-21 16:15:36.601466455 -0500
-@@ -4,6 +4,7 @@ from pypy.translator.simplify import get
- from pypy.translator.unsimplify import copyvar
- from pypy.objspace.flow.model import Variable, Constant, Block, Link
- from pypy.objspace.flow.model import SpaceOperation, c_last_exception
-+from pypy.objspace.flow.model import OperationLoc
- from pypy.objspace.flow.model import FunctionGraph
- from pypy.objspace.flow.model import mkentrymap, checkgraph
- from pypy.annotation import model as annmodel
-@@ -231,6 +232,7 @@ class BaseInliner(object):
- self.varmap = {}
- self._copied_blocks = {}
- self.op = block.operations[index_operation]
-+ self.callsite_oploc = self.op.oploc
- self.graph_to_inline = self.get_graph_from_op(self.op)
- self.exception_guarded = False
- if (block.exitswitch == c_last_exception and
-@@ -290,7 +292,9 @@ class BaseInliner(object):
-
- def copy_operation(self, op):
- args = [self.get_new_name(arg) for arg in op.args]
-- result = SpaceOperation(op.opname, args, self.get_new_name(op.result))
-+ new_oploc = OperationLoc(self.callsite_oploc.codelocs[:] + op.oploc.codelocs[:])
-+ result = SpaceOperation(op.opname, args, self.get_new_name(op.result),
-+ new_oploc)
- return result
-
- def copy_block(self, block):
-diff -up pypy-pypy-release-1.7/pypy/translator/c/funcgen.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/c/funcgen.py
---- pypy-pypy-release-1.7/pypy/translator/c/funcgen.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/c/funcgen.py 2011-11-21 16:15:36.602466455 -0500
-@@ -1,4 +1,6 @@
- import sys
-+import inspect
-+import dis
- from pypy.translator.c.support import USESLOTS # set to False if necessary while refactoring
- from pypy.translator.c.support import cdecl
- from pypy.translator.c.support import llvalue_from_constant, gen_assignments
-@@ -22,6 +24,38 @@ LOCALVAR = 'l_%s'
-
- KEEP_INLINED_GRAPHS = False
-
-+def block_comparator(blk0, blk1):
-+ '''
-+ Sort function for blocks, putting them in an ordering that attempts to
-+ maximize readability of the generated C code
-+ '''
-+ # print 'comparing %r and %r' % (blk0, blk1)
-+ # Put the start/end block at the top/bottom:
-+ if blk0.isstartblock:
-+ return -1
-+
-+ if blk1.isstartblock:
-+ return 1
-+
-+ # Order blocks by the offset, where present:
-+ if blk0.operations:
-+ if blk1.operations:
-+ return cmp(blk0.operations[0].oploc, blk1.operations[0].oploc)
-+ else:
-+ return -1
-+ else:
-+ if blk1.operations:
-+ return 1
-+ else:
-+ return 0
-+
-+def escape_c_comments(py_src):
-+ # Escape C comments within RPython source, to avoid generating bogus
-+ # comments in our generated C source:
-+ py_src = py_src.replace('/*', '')
-+ py_src = py_src.replace('*/', '')
-+ return py_src
-+
- class FunctionCodeGenerator(object):
- """
- Collects information about a function which we have to generate
-@@ -207,14 +241,57 @@ class FunctionCodeGenerator(object):
-
- def cfunction_body(self):
- graph = self.graph
-- yield 'goto block0;' # to avoid a warning "this label is not used"
-+ # Try to print python source code:
-+ if hasattr(graph, 'func'):
-+ filename = inspect.getfile(graph.func)
-+ #yield '/* name: %r */' % filename
-+ try:
-+ src, startline = inspect.getsourcelines(graph.func)
-+ except IOError:
-+ pass # No source found
-+ except IndexError:
-+ pass # Bulletproofing
-+ else:
-+ yield '/* Python source %r' % filename
-+ for i, line in enumerate(src):
-+ line = line.rstrip()
-+ line = escape_c_comments(line)
-+ # FuncNode.funcgen_implementation treats lines ending in ':'
-+ # as C blocks, which messes up the formatting.
-+ # Work around this:
-+ if line.endswith(':'):
-+ line += ' '
-+ yield ' * %4d : %s' % (startline + i, line)
-+ yield ' */'
-+
-+ label = graph.startblock.get_base_label(self.blocknum[graph.startblock])
-+ yield 'goto %s;' % label # to avoid a warning "this label is not used"
-+
-+ # Sort the blocks into a (hopefully) readable order:
-+ blocks = list(graph.iterblocks_by_source())
-+ blocks.sort(block_comparator)
-
- # generate the body of each block
-- for block in graph.iterblocks():
-+ for block in blocks:
-+ cursrcloc = None
- myblocknum = self.blocknum[block]
- yield ''
-- yield 'block%d:' % myblocknum
-+ yield '%s:' % block.get_base_label(myblocknum)
-+ #yield "/* repr(block): %r */" % (block, )
-+ #yield "/* type(block): %r */" % (type(block), )
- for i, op in enumerate(block.operations):
-+ #yield "/* type(op): %r */" % (type(op), )
-+ #yield "/* op.oploc: %s */" % (op.oploc, )
-+ codeloc = op.oploc.codelocs[-1]
-+ if codeloc:
-+ srcloc = codeloc.get_source_loc()
-+ if srcloc != cursrcloc:
-+ try:
-+ yield "/* %s:%d : %s */" % (codeloc.code.co_name, srcloc.linenum, escape_c_comments(srcloc.get_text()))
-+ cursrcloc = srcloc
-+ except IOError:
-+ pass
-+
- for line in self.gen_op(op):
- yield line
- if len(block.exits) == 0:
-@@ -306,7 +383,7 @@ class FunctionCodeGenerator(object):
- assignments.append((a2typename, dest, src))
- for line in gen_assignments(assignments):
- yield line
-- label = 'block%d' % self.blocknum[link.target]
-+ label = link.target.get_base_label(self.blocknum[link.target])
- if link.target in self.innerloops:
- loop = self.innerloops[link.target]
- if link is loop.links[-1]: # link that ends a loop
-diff -up pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py
---- pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py 2011-11-21 16:15:36.602466455 -0500
-@@ -1,4 +1,5 @@
- import autopath, sys, os, py
-+import re
- from pypy.rpython.lltypesystem.lltype import *
- from pypy.annotation import model as annmodel
- from pypy.translator.translator import TranslationContext
-@@ -532,3 +533,130 @@ def test_inhibit_tail_call():
- else:
- assert 0, "the call was not found in the C source"
- assert 'PYPY_INHIBIT_TAIL_CALL();' in lines[i+1]
-+
-+def get_generated_c_source(fn, types):
-+ # Return a (optimized fn, c source code, c source filename) 3-tuple
-+ t = Translation(fn)
-+ t.annotate(types)
-+ c_filename_path = t.source_c()
-+ h = c_filename_path.open()
-+ src = h.read()
-+ h.close()
-+ c_fn = t.compile_c()
-+ return (c_fn, src, c_filename_path)
-+
-+def extract_c_function(c_src, fname):
-+ # Extract the source for a given C function out of a the given src string
-+ # Makes assumptions about the layout of the source
-+ pattern = '^(.+) \**%s\(.*\) {$' % fname
-+ within_fn = False
-+ result = ''
-+ for line in c_src.splitlines():
-+ if within_fn:
-+ result += line + '\n'
-+ if line.startswith('}'):
-+ return result
-+ else:
-+ m = re.match(pattern, line)
-+ if m:
-+ within_fn = True
-+ result += line + '\n'
-+ return result
-+
-+
-+
-+def test_generated_c_source():
-+ # Verify that generate C source "looks good"
-+ # We'll use is_perfect_number, as it contains a loop and a conditional
-+
-+ # Generate C source code
-+ from pypy.translator.test.snippet import is_perfect_number
-+ c_fn, c_src, c_filename_path = get_generated_c_source(is_perfect_number,
-+ [int])
-+
-+ # Locate the C source for the type-specialized function:
-+ c_fn_src = extract_c_function(c_src, 'pypy_g_is_perfect_number')
-+
-+ # Verify that the C source contains embedded comments containing the lines
-+ # of the python source:
-+ expected_comment_lines = [
-+ '/* is_perfect_number:31 : while div < n: */',
-+ '/* is_perfect_number:32 : if n % div == 0: */',
-+ '/* is_perfect_number:33 : sum += div */',
-+ '/* is_perfect_number:34 : div += 1 */',
-+ '/* is_perfect_number:35 : return n == sum */']
-+ for exp_line in expected_comment_lines:
-+ assert exp_line in c_fn_src
-+
-+ # Verify that the lines occur in the correct order
-+ # ...we do this by filtering the function's generated C source to just
-+ # those lines containing our comments (and dropping whitespace):
-+ lines = c_fn_src.splitlines()
-+ lines = [line.strip()
-+ for line in lines
-+ if '/* is_perfect_number:' in line]
-+
-+ # ...we should now have exact equality: the ordering should be as expected,
-+ # and each comment should appear exactly once:
-+ assert lines == expected_comment_lines
-+
-+ # Ensure that the generated C function does the right thing:
-+ assert c_fn(5) == False
-+ assert c_fn(6) == True
-+ assert c_fn(7) == False
-+
-+ assert c_fn(5.0) == False
-+ assert c_fn(6.0) == True
-+ assert c_fn(7.0) == False
-+
-+ assert c_fn(5L) == False
-+ assert c_fn(6L) == True
-+ assert c_fn(7L) == False
-+
-+ try:
-+ c_fn('hello world')
-+ except:
-+ pass
-+ else:
-+ raise 'Was expected exception'
-+
-+def test_escaping_c_comments():
-+ # Ensure that c comments within RPython code get escaped when we generate
-+ # our .c code (to avoid generating bogus C)
-+ # See e.g. pypy.module.cpyext.dictobject's PyDict_Next, which has a
-+ # docstring embedding a C comment
-+ def c_style_comment(a, b):
-+ '''Here is a C-style comment within an RPython docstring:
-+ /* hello world */
-+ '''
-+ # and here's one in a string literal:
-+ return '/* hello world a:%s b:%s */' % (a, b)
-+
-+ def cplusplus_style_comment(a, b):
-+ '''Here is a C++-style comment within an RPython docstring:
-+ // hello world
-+ '''
-+ # and here are some in string literals, and one as the floor division
-+ # operator:
-+ return '// hello world: a // b = %s' % (a // b)
-+
-+ for fn_name, exp_output in [('c_style_comment',
-+ '/* hello world a:6 b:3 */'),
-+ ('cplusplus_style_comment',
-+ '// hello world: a // b = 2')]:
-+ fn = locals()[fn_name]
-+
-+ c_fn, c_src, c_filename_path = get_generated_c_source(fn, [int, int])
-+ # If the above survived, then the C compiler managed to handle
-+ # the generated C code
-+
-+ # Verify that the generated code works (i.e. that we didn't
-+ # accidentally change the meaning):
-+ assert c_fn(6, 3) == exp_output
-+
-+ # Ensure that at least part of the docstrings made it into the C
-+ # code:
-+ c_fn_src = extract_c_function(c_src, 'pypy_g_' + fn_name)
-+ assert 'Here is a ' in c_fn_src
-+ assert 'style comment within an RPython docstring' in c_fn_src
-+
-diff -up pypy-pypy-release-1.7/pypy/translator/driver.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/driver.py
---- pypy-pypy-release-1.7/pypy/translator/driver.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/driver.py 2011-11-21 16:15:36.603466455 -0500
-@@ -535,6 +535,7 @@ class TranslationDriver(SimpleTaskEngine
- dstname = self.compute_exe_name() + '.staticdata.info'
- shutil.copy(str(fname), str(dstname))
- self.log.info('Static data info written to %s' % dstname)
-+ return c_source_filename
-
- #
- task_source_c = taskdef(task_source_c, ['database_c'], "Generating c source")
-diff -up pypy-pypy-release-1.7/pypy/translator/gensupp.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/gensupp.py
---- pypy-pypy-release-1.7/pypy/translator/gensupp.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/gensupp.py 2011-11-21 16:15:36.603466455 -0500
-@@ -14,8 +14,8 @@ def ordered_blocks(graph):
- allblocks = []
- for block in graph.iterblocks():
- # first we order by offset in the code string
-- if block.operations:
-- ofs = block.operations[0].offset
-+ if block.operations and block.operations[0].oploc.codelocs[0]:
-+ ofs = block.operations[0].oploc.codelocs[0].offset
- else:
- ofs = sys.maxint
- # then we order by input variable name or value
-diff -up pypy-pypy-release-1.7/pypy/translator/interactive.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/interactive.py
---- pypy-pypy-release-1.7/pypy/translator/interactive.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/interactive.py 2011-11-21 16:15:36.604466454 -0500
-@@ -138,7 +138,7 @@ class Translation(object):
- def source_c(self, argtypes=None, **kwds):
- self.update_options(argtypes, kwds)
- self.ensure_backend('c')
-- self.driver.source_c()
-+ return self.driver.source_c()
-
- def source_cl(self, argtypes=None, **kwds):
- self.update_options(argtypes, kwds)
-diff -up pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py
---- pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py 2011-11-21 16:15:36.604466454 -0500
-@@ -59,6 +59,8 @@ def new_wrapper(func, translator, newnam
- # "return result"
- block = Block(wrapper_inputargs)
- wgraph = FunctionGraph('pyfn_' + (newname or func.func_name), block)
-+ if hasattr(graph, 'func'):
-+ wgraph.func = graph.func
- translator.update_call_graph(wgraph, graph, object())
- translator.graphs.append(wgraph)
- block.operations[:] = newops
-diff -up pypy-pypy-release-1.7/pypy/translator/simplify.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/simplify.py
---- pypy-pypy-release-1.7/pypy/translator/simplify.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/simplify.py 2011-11-21 16:15:36.605466454 -0500
-@@ -292,7 +292,7 @@ def join_blocks(graph):
- return renaming.get(v, v)
- def rename_op(op):
- args = [rename(a) for a in op.args]
-- op = SpaceOperation(op.opname, args, rename(op.result), op.offset)
-+ op = SpaceOperation(op.opname, args, rename(op.result), op.oploc)
- # special case...
- if op.opname == 'indirect_call':
- if isinstance(op.args[0], Constant):
diff --git a/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch b/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
deleted file mode 100644
index 2391f32..0000000
--- a/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -rup pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py
---- pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py 2013-05-27 10:35:37.762237806 +0200
-+++ pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py 2013-05-28 10:13:03.182536196 +0200
-@@ -587,7 +587,7 @@ class ProcessTestCase(BaseTestCase):
- for i in range(1024):
- # Windows raises IOError. Others raise OSError.
- with self.assertRaises(EnvironmentError) as c:
-- subprocess.Popen(['nonexisting_i_hope'],
-+ subprocess.Popen(['/usr/bin/nonexisting_i_hope'],
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- # ignore errors that indicate the command was not found
commit ff9537b3ed920fc031a5b18ab8b27efd0a194202
Author: Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org>
Date: Fri May 8 17:05:34 2015 +0000
Initial setup of the repo
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e69de29
diff --git a/sources b/sources
new file mode 100644
index 0000000..e69de29
commit 36afc7f79102c83960c3d6bf8f4a8620554c0137
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue May 5 18:32:38 2015 +0200
Replace all lib-python python shebangs with pypy
diff --git a/pypy3.spec b/pypy3.spec
index edbfd2f..6e6bd46 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -281,6 +281,11 @@ for f in rpython/translator/goal/bpnn.py ; do
chmod a-x $f
done
+# Replace all lib-python python shebangs with pypy
+find lib-python/%{pylibver} -name "*.py" -exec \
+ sed -r -i '1s|^#!\s*/usr/bin.*python.*|#!/usr/bin/%{name}|' \
+ "{}" \
+ \;
%build
commit 976314ef808d7b7dbe2bc8961a5de2deae1cdc9f
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon May 4 12:49:51 2015 +0200
Build with pypy
diff --git a/pypy3.spec b/pypy3.spec
index 218ce3e..edbfd2f 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -161,7 +161,9 @@ Patch2: 007-remove-startup-message.patch
# Turn it off with this boolean, to revert back to rebuilding using CPython
# and avoid a cycle in the build-time dependency graph:
-%global use_self_when_building 0
+# Note, pypy3 is built with pypy2, so no dependency cycle
+
+%global use_self_when_building 1
%if 0%{use_self_when_building}
# pypy3 can only be build with pypy2
BuildRequires: pypy
commit 980f988cc4d495d359155cf3c1d12b2dfc81a08f
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon May 4 12:48:44 2015 +0200
BR git for %autosetup -S git
diff --git a/pypy3.spec b/pypy3.spec
index 77ffa2d..218ce3e 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -211,6 +211,8 @@ BuildRequires: /usr/bin/execstack
BuildRequires: emacs
%endif
+# For %%autosetup -S git
+BuildRequires: git
# Metadata for the core package (the JIT build):
Requires: pypy3-libs%{?_isa} = %{version}-%{release}
commit 819b9f5595c2ac93d1a8a693a647a006f2c9bbc0
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon May 4 12:47:32 2015 +0200
Use %global instead of %define
diff --git a/pypy3.spec b/pypy3.spec
index e992b00..77ffa2d 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -337,14 +337,14 @@ BuildPyPy() {
# This is the most portable option, and avoids a reliance on non-guaranteed
# behaviors within GCC's code generator: use an explicitly-maintained stack
# of root pointers:
- %define gcrootfinder_options --gcrootfinder=shadowstack
+ %global gcrootfinder_options --gcrootfinder=shadowstack
export CFLAGS=$(echo "$RPM_OPT_FLAGS")
%else
# Go with the default, which is "asmgcc"
- %define gcrootfinder_options %{nil}
+ %global gcrootfinder_options %{nil}
# https://bugzilla.redhat.com/show_bug.cgi?id=588941#c18
# The generated Makefile compiles the .c files into assembler (.s), rather
commit 524d40e5a2091088f5a28f16c996b757acbeb06b
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Apr 28 20:05:42 2015 +0200
Remove build script from the package
diff --git a/pypy3.spec b/pypy3.spec
index 3b40c9a..e992b00 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -644,6 +644,9 @@ cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/pyp
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
+
%check
topdir=$(pwd)
commit cfca1560fdf042a07e2f7108eafc072b93f2617c
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Apr 28 20:01:21 2015 +0200
Use git in %autosetup to avoid .orig files
diff --git a/pypy3.spec b/pypy3.spec
index 2f9ed15..3b40c9a 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -261,7 +261,7 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%endif
%prep
-%autosetup -n pypy3-2.4.0-src -p1
+%autosetup -n pypy3-2.4.0-src -p1 -S git
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
commit 1120251a081f3a611d8d3f742b184985833e9998
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Apr 28 19:58:39 2015 +0200
Change python-devel to python2-devel
diff --git a/pypy3.spec b/pypy3.spec
index 0c5b340..2f9ed15 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -170,7 +170,7 @@ BuildRequires: pypy
# pypy3 can only be build with python2
-BuildRequires: python-devel
+BuildRequires: python2-devel
%global bootstrap_python_interp python
%endif
commit a7610e26e5c7a0bbaa8a7810daa04a625ae357af
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Apr 28 19:51:45 2015 +0200
Don't mark RPM macros in /etc as %config
diff --git a/pypy3.spec b/pypy3.spec
index d9e54fd..0c5b340 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -801,7 +801,7 @@ CheckPyPy pypy3-stackless
%files devel
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
-%config(noreplace) %{_rpmconfigdir}/macros.d/macros.pypy3
+%{_rpmconfigdir}/macros.d/macros.pypy3
%if 0%{with_stackless}
%files stackless
commit 7e82938b0f41850371be195e7be814fedd889d08
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon Apr 27 18:35:23 2015 +0200
Share the docdir across subpackages
diff --git a/pypy3.spec b/pypy3.spec
index 85a2dfc..d9e54fd 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -771,6 +771,10 @@ CheckPyPy pypy3-stackless
%endif # run_selftests
+# Because there's a bunch of binary subpackages and creating
+# /usr/share/licenses/pypy3-this and /usr/share/licenses/pypy3-that
+# is just confusing for the user.
+%global _docdir_fmt %{name}
%files libs
%license LICENSE
commit 1842b1b13e95edfcea412981ed8f4cbe3e7a8383
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon Apr 27 18:26:21 2015 +0200
Require pypy3-libs with %{?_isa}
diff --git a/pypy3.spec b/pypy3.spec
index 93e53f0..85a2dfc 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -213,7 +213,7 @@ BuildRequires: emacs
# Metadata for the core package (the JIT build):
-Requires: pypy3-libs = %{version}-%{release}
+Requires: pypy3-libs%{?_isa} = %{version}-%{release}
%description
PyPy's implementation of Python 3, featuring a Just-In-Time compiler on some CPU
@@ -245,7 +245,7 @@ Libraries required by the various PyPy implementations of Python 3.
%package devel
Group: Development/Languages
Summary: Development tools for working with PyPy3
-Requires: pypy3 = %{version}-%{release}
+Requires: pypy3%{?_isa} = %{version}-%{release}
%description devel
Header files for building C extension modules against PyPy3
@@ -255,7 +255,7 @@ Header files for building C extension modules against PyPy3
%package stackless
Group: Development/Languages
Summary: Stackless Python interpreter built using PyPy3
-Requires: pypy3-libs = %{version}-%{release}
+Requires: pypy3-libs%{?_isa} = %{version}-%{release}
%description stackless
Build of PyPy3 with support for micro-threads for massive concurrency
%endif
commit 7e5676a0456e5e3c711d481fe1e949c0448975ec
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon Apr 27 18:24:57 2015 +0200
Use %autosetup
diff --git a/pypy3.spec b/pypy3.spec
index 99c2a31..93e53f0 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -261,10 +261,7 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%endif
%prep
-%setup -q -n pypy3-2.4.0-src
-%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
-%patch1 -p1
-%patch2 -p1
+%autosetup -n pypy3-2.4.0-src -p1
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
commit e7218e672da6a8e5c553080c36c8e72087e55817
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon Apr 27 18:16:19 2015 +0200
Use %license
diff --git a/pypy3.spec b/pypy3.spec
index 5bee793..99c2a31 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -776,7 +776,8 @@ CheckPyPy pypy3-stackless
%files libs
-%doc LICENSE README.rst
+%license LICENSE
+%doc README.rst
%dir %{pypyprefix}
%dir %{pypyprefix}/lib-python
@@ -791,7 +792,8 @@ CheckPyPy pypy3-stackless
%endif
%files
-%doc LICENSE README.rst
+%license LICENSE
+%doc README.rst
%{_bindir}/pypy3
%{pypyprefix}/pypy3
@@ -802,7 +804,8 @@ CheckPyPy pypy3-stackless
%if 0%{with_stackless}
%files stackless
-%doc LICENSE README.rst
+%license LICENSE
+%doc README.rst
%{_bindir}/pypy-stackless
%endif
commit 146960e8a0ae6b7d82f10d6a2c24e60cf3eadd59
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon Apr 27 18:15:27 2015 +0200
Removed deprecated statements
diff --git a/pypy3.spec b/pypy3.spec
index 95ee959..5bee793 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -10,7 +10,6 @@ Group: Development/Languages
# licensing terms
License: MIT and Python and UCD
URL: http://pypy.org/
-BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# High-level configuration of the build:
@@ -425,8 +424,6 @@ BuildPyPy \
%install
-rm -rf $RPM_BUILD_ROOT
-
# Install the various executables:
InstallPyPy() {
@@ -778,12 +775,7 @@ CheckPyPy pypy3-stackless
%endif # run_selftests
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-
%files libs
-%defattr(-,root,root,-)
%doc LICENSE README.rst
%dir %{pypyprefix}
@@ -799,20 +791,17 @@ rm -rf $RPM_BUILD_ROOT
%endif
%files
-%defattr(-,root,root,-)
%doc LICENSE README.rst
%{_bindir}/pypy3
%{pypyprefix}/pypy3
%files devel
-%defattr(-,root,root,-)
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
%config(noreplace) %{_rpmconfigdir}/macros.d/macros.pypy3
%if 0%{with_stackless}
%files stackless
-%defattr(-,root,root,-)
%doc LICENSE README.rst
%{_bindir}/pypy-stackless
%endif
commit 26c3863db65451cb67c67cd4e72a826698ef7bdf
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sat Apr 25 00:48:59 2015 +0200
Change pypy2 spec to pypy3
diff --git a/.gitignore b/.gitignore
index a61aa79..c9f3d9d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,14 +1 @@
-/pypy-1.4.1-src.tar.bz2
-/pypy-1.5-src.tar.bz2
-/release-1.6.tar.bz2
-/release-1.7.tar.bz2
-/release-1.8.tar.bz2
-/release-1.9.tar.bz2
-/release-2.0-beta-1.tar.bz2
-/release-2.0.2.tar.bz2
-/release-2.1.0.tar.bz2
-/pypy-2.2-src.tar.bz2
-/pypy-2.2.1-src.tar.bz2
-/pypy-2.3-src.tar.bz2
-/release-2.3.1.tar.bz2
-/pypy-2.4.0-src.tar.bz2
+/pypy3-2.4.0-src.tar.bz2
diff --git a/macros.pypy b/macros.pypy
deleted file mode 100644
index 5f40b6f..0000000
--- a/macros.pypy
+++ /dev/null
@@ -1,5 +0,0 @@
-%__pypy /usr/bin/pypy
-%pypy_sitelib %(%{__pypy} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
-%pypy_sitearch %(%{__pypy} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")
-%pypy_version %(%{__pypy} -c "import sys; sys.stdout.write(sys.version[:3])")
-%pypydir %{_builddir}/pypy-%{name}-%{version}-%{release}
diff --git a/macros.pypy3 b/macros.pypy3
new file mode 100644
index 0000000..ef1f600
--- /dev/null
+++ b/macros.pypy3
@@ -0,0 +1,5 @@
+%__pypy3 /usr/bin/pypy3
+%pypy3_sitelib %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
+%pypy3_sitearch %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")
+%pypy3_version %(%{__pypy3} -c "import sys; sys.stdout.write(sys.version[:3])")
+%pypy3dir %{_builddir}/pypy3-%{name}-%{version}-%{release}
diff --git a/pypy.spec b/pypy3.spec
similarity index 94%
rename from pypy.spec
rename to pypy3.spec
index 4a3e56c..95ee959 100644
--- a/pypy.spec
+++ b/pypy3.spec
@@ -1,7 +1,7 @@
-Name: pypy
+Name: pypy3
Version: 2.4.0
Release: 1%{?dist}
-Summary: Python implementation with a Just-In-Time compiler
+Summary: Python 3 implementation with a Just-In-Time compiler
Group: Development/Languages
# LGPL and another free license we'd need to ask spot about are present in some
@@ -117,8 +117,8 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# Easy way to turn off the selftests:
%global run_selftests 1
-%global pypyprefix %{_libdir}/pypy-%{version}
-%global pylibver 2.7
+%global pypyprefix %{_libdir}/pypy3-%{version}
+%global pylibver 3
# We refer to this subdir of the source tree in a few places during the build:
%global goal_dir pypy/goal
@@ -130,11 +130,11 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(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/pypy-2.4.0-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy3-2.4.0-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
-Source2: macros.pypy
+Source2: macros.pypy3
# By default, if built at a tty, the translation process renders a Mandelbrot
# set to indicate progress.
@@ -164,19 +164,15 @@ Patch2: 007-remove-startup-message.patch
%global use_self_when_building 0
%if 0%{use_self_when_building}
+# pypy3 can only be build with pypy2
BuildRequires: pypy
%global bootstrap_python_interp pypy
%else
-# Python 2.6 or later is needed, so on RHEL5 (2.4) we need to use the alternate
-# python26 rpm:
-%if 0%{?rhel} == 5
-BuildRequires: python26-devel
-%global bootstrap_python_interp python26
-%else
+
+# pypy3 can only be build with python2
BuildRequires: python-devel
%global bootstrap_python_interp python
-%endif
%endif
@@ -218,10 +214,10 @@ BuildRequires: emacs
# Metadata for the core package (the JIT build):
-Requires: pypy-libs = %{version}-%{release}
+Requires: pypy3-libs = %{version}-%{release}
%description
-PyPy's implementation of Python, featuring a Just-In-Time compiler on some CPU
+PyPy's implementation of Python 3, featuring a Just-In-Time compiler on some CPU
architectures, and various optimized implementations of the standard types
(strings, dictionaries, etc)
@@ -235,7 +231,7 @@ CPU architecture.
%package libs
Group: Development/Languages
-Summary: Run-time libraries used by PyPy implementations of Python
+Summary: Run-time libraries used by PyPy implementations of Python 3
# We supply an emacs mode for the JIT viewer.
# (This doesn't bring in all of emacs, just the directory structure)
@@ -244,39 +240,29 @@ Requires: emacs-filesystem >= %{_emacs_version}
%endif
%description libs
-Libraries required by the various PyPy implementations of Python.
+Libraries required by the various PyPy implementations of Python 3.
%package devel
Group: Development/Languages
-Summary: Development tools for working with PyPy
-Requires: pypy = %{version}-%{release}
+Summary: Development tools for working with PyPy3
+Requires: pypy3 = %{version}-%{release}
%description devel
-Header files for building C extension modules against PyPy
+Header files for building C extension modules against PyPy3
%if 0%{with_stackless}
%package stackless
Group: Development/Languages
-Summary: Stackless Python interpreter built using PyPy
-Requires: pypy-libs = %{version}-%{release}
+Summary: Stackless Python interpreter built using PyPy3
+Requires: pypy3-libs = %{version}-%{release}
%description stackless
-Build of PyPy with support for micro-threads for massive concurrency
+Build of PyPy3 with support for micro-threads for massive concurrency
%endif
-%if 0%{with_stackless}
-%package stackless
-Group: Development/Languages
-Summary: Stackless Python interpreter built using PyPy
-Requires: pypy-libs = %{version}-%{release}
-%description stackless
-Build of PyPy with support for micro-threads for massive concurrency
-%endif
-
-
%prep
-%setup -q -n pypy-2.4.0-src
+%setup -q -n pypy3-2.4.0-src
%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
%patch1 -p1
%patch2 -p1
@@ -295,8 +281,6 @@ for f in rpython/translator/goal/bpnn.py ; do
chmod a-x $f
done
-rm -rf lib-python/3
-
%build
@@ -421,7 +405,7 @@ BuildPyPy() {
}
BuildPyPy \
- pypy \
+ pypy3 \
%if 0%{with_jit}
"-Ojit" \
%else
@@ -431,7 +415,7 @@ BuildPyPy \
%if 0%{with_stackless}
BuildPyPy \
- pypy-stackless \
+ pypy3-stackless \
"--stackless"
%endif
@@ -479,10 +463,10 @@ InstallPyPy() {
mkdir -p %{buildroot}/%{_bindir}
mkdir -p %{buildroot}/%{pypyprefix}
-InstallPyPy pypy
+InstallPyPy pypy3
%if 0%{with_stackless}
-InstallPyPy pypy-stackless
+InstallPyPy pypy3-stackless
%endif
@@ -585,16 +569,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}/pypy \
+ %{buildroot}/%{_bindir}/pypy3 \
0
-%{buildroot}/%{pypyprefix}/pypy -c 'import _tkinter'
-%{buildroot}/%{pypyprefix}/pypy -c 'import Tkinter'
-%{buildroot}/%{pypyprefix}/pypy -c 'import _sqlite3'
-%{buildroot}/%{pypyprefix}/pypy -c 'import _curses'
-%{buildroot}/%{pypyprefix}/pypy -c 'import curses'
-%{buildroot}/%{pypyprefix}/pypy -c 'import syslog'
-%{buildroot}/%{pypyprefix}/pypy -c 'from _sqlite3 import *'
+%{buildroot}/%{pypyprefix}/pypy3 -c 'import _tkinter'
+%{buildroot}/%{pypyprefix}/pypy3 -c 'import tkinter'
+%{buildroot}/%{pypyprefix}/pypy3 -c 'import _sqlite3'
+%{buildroot}/%{pypyprefix}/pypy3 -c 'import _curses'
+%{buildroot}/%{pypyprefix}/pypy3 -c 'import curses'
+%{buildroot}/%{pypyprefix}/pypy3 -c 'import syslog'
+%{buildroot}/%{pypyprefix}/pypy3 -c 'from _sqlite3 import *'
# Header files for C extension modules.
# Upstream's packaging process (pypy/tool/release/package.py)
@@ -658,7 +642,8 @@ 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}
+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:
@@ -694,7 +679,7 @@ CheckPyPy() {
# Use regrtest to explicitly list all tests:
( ./$ExeName -c \
- "from test.regrtest import findtests; print '\n'.join(findtests())"
+ "from test.regrtest import findtests; print('\n'.join(findtests()))"
) > testnames.txt
# Skip some tests:
@@ -784,10 +769,10 @@ CheckPyPy() {
#pypy/goal/pypy pypy/test_all.py --resultlog=pypyjit_new.log
%if %{run_selftests}
-CheckPyPy pypy
+CheckPyPy pypy3
%if 0%{with_stackless}
-CheckPyPy pypy-stackless
+CheckPyPy pypy3-stackless
%endif
%endif # run_selftests
@@ -809,21 +794,21 @@ rm -rf $RPM_BUILD_ROOT
%{pypyprefix}/lib_pypy/
%{pypyprefix}/site-packages/
%if %{with_emacs}
-%{_emacs_sitelispdir}/pypytrace-mode.el
-%{_emacs_sitelispdir}/pypytrace-mode.elc
+%{_emacs_sitelispdir}/pypy3trace-mode.el
+%{_emacs_sitelispdir}/pypy3trace-mode.elc
%endif
%files
%defattr(-,root,root,-)
%doc LICENSE README.rst
-%{_bindir}/pypy
-%{pypyprefix}/pypy
+%{_bindir}/pypy3
+%{pypyprefix}/pypy3
%files devel
%defattr(-,root,root,-)
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
-%config(noreplace) %{_rpmconfigdir}/macros.d/macros.pypy
+%config(noreplace) %{_rpmconfigdir}/macros.d/macros.pypy3
%if 0%{with_stackless}
%files stackless
diff --git a/sources b/sources
index ab6b8f5..e4d98b7 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-6a25a212e7c5121f1f3988c118d05695 pypy-2.4.0-src.tar.bz2
+96ba72916114d16904e12562b5d84e51 pypy3-2.4.0-src.tar.bz2
commit e76c4a29685bfaf725af1ae1991d5b1fb7b7701c
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Tue Sep 23 12:20:25 2014 +0200
Update to 2.4.0
diff --git a/.gitignore b/.gitignore
index 1babd6b..a61aa79 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,4 @@
/pypy-2.2.1-src.tar.bz2
/pypy-2.3-src.tar.bz2
/release-2.3.1.tar.bz2
+/pypy-2.4.0-src.tar.bz2
diff --git a/pypy.spec b/pypy.spec
index daf5015..4a3e56c 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 2.3.1
-Release: 4%{?dist}
+Version: 2.4.0
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -130,7 +130,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-2.3.1.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy-2.4.0-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -276,7 +276,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-32f35069a16d
+%setup -q -n pypy-2.4.0-src
%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
%patch1 -p1
%patch2 -p1
@@ -295,6 +295,8 @@ for f in rpython/translator/goal/bpnn.py ; do
chmod a-x $f
done
+rm -rf lib-python/3
+
%build
@@ -832,6 +834,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Wed Sep 10 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.4.0-1
+- Update to 2.4.0
+
* Tue Sep 02 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3.1-4
- Move devel subpackage requires so that it gets picked up by rpm
diff --git a/sources b/sources
index b80a17c..ab6b8f5 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-e9d26e6ed2ca809a791d88137e90629b release-2.3.1.tar.bz2
+6a25a212e7c5121f1f3988c118d05695 pypy-2.4.0-src.tar.bz2
commit f7434bab3f45aaf75e2d6b05664c9fd78197c10a
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Tue Sep 2 10:01:18 2014 +0200
Bump spec
diff --git a/pypy.spec b/pypy.spec
index 6f90d89..daf5015 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.3.1
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -832,6 +832,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Sep 02 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3.1-4
+- Move devel subpackage requires so that it gets picked up by rpm
+
* Sun Aug 17 2014 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.3.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
commit 5efcdc8fe2e02fffb9ffce1004f3d25a8e86d593
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Tue Sep 2 09:57:46 2014 +0200
Move devel subpackage requires so that it gets picked up by rpm
Up to this point it belonged to the description, so pypy-devel
did not require pypy.
diff --git a/pypy.spec b/pypy.spec
index f811755..6f90d89 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -250,11 +250,11 @@ Libraries required by the various PyPy implementations of Python.
%package devel
Group: Development/Languages
Summary: Development tools for working with PyPy
+Requires: pypy = %{version}-%{release}
+
%description devel
Header files for building C extension modules against PyPy
-Requires: pypy = %{version}-%{release}
-
%if 0%{with_stackless}
%package stackless
commit 7498717b84a98b28987846d94baf9177cf5b36ee
Author: Peter Robinson <pbrobinson(a)fedoraproject.org>
Date: Sun Aug 17 20:41:57 2014 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
diff --git a/pypy.spec b/pypy.spec
index 8ab5959..f811755 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.3.1
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -832,6 +832,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Sun Aug 17 2014 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.3.1-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
+
* Mon Jul 7 2014 Peter Robinson <pbrobinson(a)fedoraproject.org> 2.3.1-2
- ARMv7 is supported for JIT
- no prelink on aarch64/ppc64le
commit 43ee7785260fd8f42b86e62be70de5bc361a34d7
Author: Peter Robinson <pbrobinson(a)gmail.com>
Date: Mon Jul 7 23:07:38 2014 +0100
ARMv7 is supported for JIT, no prelink on aarch64/ppc64le
diff --git a/pypy.spec b/pypy.spec
index 7c4106a..8ab5959 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.3.1
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -78,20 +78,20 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
#
# Unfortunately, the JIT support is only available on some architectures.
#
-# pypy-1.4/pypy/jit/backend/detect_cpu.py:getcpuclassname currently supports the
+# rpython/jit/backend/detect_cpu.py:getcpuclassname currently supports the
# following options:
# 'i386', 'x86'
# 'x86-without-sse2':
# 'x86_64'
+# 'armv6', 'armv7' (versions 6 and 7, hard- and soft-float ABI)
# 'cli'
# 'llvm'
#
# We will only build with JIT support on those architectures, and build without
# it on the other archs. The resulting binary will typically be slower than
# CPython for the latter case.
-#
-%ifarch %{ix86} x86_64
-# FIXME: is there a better way of expressing "intel" here?
+
+%ifarch %{ix86} x86_64 %{arm}
%global with_jit 1
%else
%global with_jit 0
@@ -206,7 +206,10 @@ BuildRequires: time
BuildRequires: perl
%endif
+# No prelink on these arches
+%ifnarch aarch64 ppc64le
BuildRequires: /usr/bin/execstack
+%endif
# For byte-compiling the JIT-viewing mode:
%if %{with_emacs}
@@ -466,7 +469,9 @@ InstallPyPy() {
#
# I tried various approaches involving fixing the build, but the simplest
# approach is to postprocess the ELF file:
+%ifnarch aarch64 ppc64le
execstack --clear-execstack %{buildroot}/%{pypyprefix}/$ExeName
+%endif
}
mkdir -p %{buildroot}/%{_bindir}
@@ -827,6 +832,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Jul 7 2014 Peter Robinson <pbrobinson(a)fedoraproject.org> 2.3.1-2
+- ARMv7 is supported for JIT
+- no prelink on aarch64/ppc64le
+
* Sun Jun 08 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3.1-1
- Update to 2.3.1
commit edc736c1c58fc920291a8e672c906b76d6e87a31
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Sun Jun 8 20:55:40 2014 +0200
Update to 2.3.1
diff --git a/.gitignore b/.gitignore
index f59302b..1babd6b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,4 @@
/pypy-2.2-src.tar.bz2
/pypy-2.2.1-src.tar.bz2
/pypy-2.3-src.tar.bz2
+/release-2.3.1.tar.bz2
diff --git a/pypy.spec b/pypy.spec
index 96e21d5..7c4106a 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 2.3
-Release: 5%{?dist}
+Version: 2.3.1
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -130,7 +130,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(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/pypy-2.3-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/get/release-2.3.1.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -273,7 +273,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-394146e9bb67
+%setup -q -n pypy-pypy-32f35069a16d
%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
%patch1 -p1
%patch2 -p1
@@ -827,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Sun Jun 08 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3.1-1
+- Update to 2.3.1
+
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.3-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
diff --git a/sources b/sources
index 8f25b0c..b80a17c 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-c93a8e47f3b3109af2f66d2bd766eb97 pypy-2.3-src.tar.bz2
+e9d26e6ed2ca809a791d88137e90629b release-2.3.1.tar.bz2
commit 1972c9c31b94769515b1972a39a9d4efe493e6d6
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Sat Jun 7 13:12:20 2014 -0500
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
diff --git a/pypy.spec b/pypy.spec
index 6bdb671..96e21d5 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.3
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -827,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Sat Jun 07 2014 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.3-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
* Tue May 27 2014 Dennis Gilmore <dennis(a)ausil.us> - 2.3-4
- valgrind is available everywhere except 31 bit s390
commit a0374180ff792eb0a2b41434d1a3a47efe340d3e
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Tue May 27 16:16:43 2014 -0500
valgrind is available everywhere except 31 bit s390
diff --git a/pypy.spec b/pypy.spec
index 096bd7d..6bdb671 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.3
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -191,7 +191,7 @@ BuildRequires: bzip2-devel
BuildRequires: ncurses-devel
BuildRequires: expat-devel
BuildRequires: openssl-devel
-%ifarch %{ix86} x86_64 ppc ppc64 s390x
+%ifnarch s390
BuildRequires: valgrind-devel
%endif
@@ -827,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue May 27 2014 Dennis Gilmore <dennis(a)ausil.us> - 2.3-4
+- valgrind is available everywhere except 31 bit s390
+
* Wed May 21 2014 Jaroslav Škarvada <jskarvad(a)redhat.com> - 2.3-3
- Rebuilt for https://fedoraproject.org/wiki/Changes/f21tcl86
commit ce731cfa651140b831eeeabd176c041b6f9f4943
Author: Jaroslav Škarvada <jskarvad(a)redhat.com>
Date: Wed May 21 12:32:28 2014 +0200
- Rebuilt for https://fedoraproject.org/wiki/Changes/f21tcl86
diff --git a/pypy.spec b/pypy.spec
index 39b18d8..096bd7d 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.3
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -827,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Wed May 21 2014 Jaroslav Škarvada <jskarvad(a)redhat.com> - 2.3-3
+- Rebuilt for https://fedoraproject.org/wiki/Changes/f21tcl86
+
* Thu May 15 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3-2
- Rebuilt (f21-python)
commit a3993a30d37ff85750008622cc987a4650786896
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Thu May 15 12:20:24 2014 +0200
Rebuilt (f21-python)
diff --git a/pypy.spec b/pypy.spec
index 6e050f3..39b18d8 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.3
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -827,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu May 15 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3-2
+- Rebuilt (f21-python)
+
* Tue May 13 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3-1
- Updated to 2.3
commit db10290f0939d5c2dfd4d437bc2f98888752a48b
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Wed May 14 12:40:14 2014 +0200
Update to 2.3
diff --git a/.gitignore b/.gitignore
index da7257b..f59302b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,4 @@
/release-2.1.0.tar.bz2
/pypy-2.2-src.tar.bz2
/pypy-2.2.1-src.tar.bz2
+/pypy-2.3-src.tar.bz2
diff --git a/007-remove-startup-message.patch b/007-remove-startup-message.patch
index 1dddb69..2ff9068 100644
--- a/007-remove-startup-message.patch
+++ b/007-remove-startup-message.patch
@@ -2,7 +2,7 @@ diff -rup pypy-pypy-f66246c46ca3/lib_pypy/_pypy_interact.py pypy-pypy-f66246c46c
--- 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
- import os
+ irc_header = "And now for something completely different"
-def interactive_console(mainmodule=None, quiet=False):
diff --git a/pypy.spec b/pypy.spec
index c46997a..6e050f3 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 2.2.1
-Release: 3%{?dist}
+Version: 2.3
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -130,7 +130,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(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/pypy-2.2.1-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy-2.3-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -273,7 +273,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-2.2.1-src
+%setup -q -n pypy-pypy-394146e9bb67
%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
%patch1 -p1
%patch2 -p1
@@ -827,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue May 13 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3-1
+- Updated to 2.3
+
* Mon Mar 10 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.1-3
- Put RPM macros in proper location
diff --git a/sources b/sources
index f8f0564..8f25b0c 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-7ec9f48702323f9e93654ba73dd46720 pypy-2.2.1-src.tar.bz2
+c93a8e47f3b3109af2f66d2bd766eb97 pypy-2.3-src.tar.bz2
commit bca3bcda512353328ab9a768e28d0ac7b6904aa6
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Tue Mar 11 09:05:43 2014 +0100
Also chenge files section
diff --git a/pypy.spec b/pypy.spec
index 85003c1..c46997a 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -816,7 +816,7 @@ rm -rf $RPM_BUILD_ROOT
%defattr(-,root,root,-)
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
-%config(noreplace) %{_sysconfdir}/rpm/macros.pypy
+%config(noreplace) %{_rpmconfigdir}/macros.d/macros.pypy
%if 0%{with_stackless}
%files stackless
commit 4dbc78c1aab1cf75870cf055ad54a46262e3fafb
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Mon Mar 10 09:17:48 2014 +0100
Also add changelog entry
diff --git a/pypy.spec b/pypy.spec
index 6e73099..85003c1 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.2.1
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -827,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Mar 10 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.1-3
+- Put RPM macros in proper location
+
* Thu Jan 16 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.1-2
- Fixed errors due to missing __pycache__
commit 355feb2755aa6396e4fa0b512652ce25c2502ca7
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Mon Feb 3 13:24:01 2014 +0100
Put rpm macros in proper location
diff --git a/pypy.spec b/pypy.spec
index 8604207..6e73099 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -655,8 +655,8 @@ cp -a rpython/jit/tool/pypytrace-mode.el* %{buildroot}/%{_emacs_sitelispdir}
%endif
# Install macros for rpm:
-mkdir -p %{buildroot}/%{_sysconfdir}/rpm
-install -m 644 %{SOURCE2} %{buildroot}/%{_sysconfdir}/rpm
+mkdir -p %{buildroot}/%{_rpmconfigdir}/macros.d
+install -m 644 %{SOURCE2} %{buildroot}/%{_rpmconfigdir}/macros.d
%check
topdir=$(pwd)
commit f8a7311107aa7a76736e8e763a17148340131c32
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Fri Jan 17 10:46:17 2014 +0100
Fix errors due to missing __pycache__
diff --git a/pypy.spec b/pypy.spec
index 21987ac..8604207 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.2.1
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -581,10 +581,13 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
%{buildroot}/%{_bindir}/pypy \
0
-%{goal_dir}/pypy -c 'import _tkinter'
-%{goal_dir}/pypy -c 'import _sqlite3'
-%{goal_dir}/pypy -c 'import _curses'
-%{goal_dir}/pypy -c 'import syslog'
+%{buildroot}/%{pypyprefix}/pypy -c 'import _tkinter'
+%{buildroot}/%{pypyprefix}/pypy -c 'import Tkinter'
+%{buildroot}/%{pypyprefix}/pypy -c 'import _sqlite3'
+%{buildroot}/%{pypyprefix}/pypy -c 'import _curses'
+%{buildroot}/%{pypyprefix}/pypy -c 'import curses'
+%{buildroot}/%{pypyprefix}/pypy -c 'import syslog'
+%{buildroot}/%{pypyprefix}/pypy -c 'from _sqlite3 import *'
# Header files for C extension modules.
# Upstream's packaging process (pypy/tool/release/package.py)
@@ -824,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Jan 16 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.1-2
+- Fixed errors due to missing __pycache__
+
* Thu Dec 05 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.1-1
- Updated to 2.2.1
- Several bundled modules (tkinter, sqlite3, curses, syslog) were
commit 2cbecfd01cab504997f12fd8b434035e083dcec6
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Thu Jan 2 10:47:41 2014 +0100
Update to 2.2.1
diff --git a/.gitignore b/.gitignore
index fa54eea..da7257b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,4 @@
/release-2.0.2.tar.bz2
/release-2.1.0.tar.bz2
/pypy-2.2-src.tar.bz2
+/pypy-2.2.1-src.tar.bz2
diff --git a/pypy.spec b/pypy.spec
index cfb219f..21987ac 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,5 +1,5 @@
Name: pypy
-Version: 2.2.0
+Version: 2.2.1
Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
@@ -130,7 +130,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(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/pypy-2.2-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy-2.2.1-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -273,7 +273,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-2.2-src
+%setup -q -n pypy-2.2.1-src
%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
%patch1 -p1
%patch2 -p1
@@ -768,6 +768,11 @@ CheckPyPy() {
echo "--------------------------------------------------------------"
}
+#python testrunner/runner.py --logfile=pytest-A.log --config=pypy/pytest-A.cfg --config=pypy/pytest-A.py --root=pypy --timeout=3600
+#python pypy/test_all.py --pypy=pypy/goal/pypy --timeout=3600 --resultlog=cpython.log lib-python
+#python pypy/test_all.py --pypy=pypy/goal/pypy --resultlog=pypyjit.log pypy/module/pypyjit/test
+#pypy/goal/pypy pypy/test_all.py --resultlog=pypyjit_new.log
+
%if %{run_selftests}
CheckPyPy pypy
@@ -819,6 +824,12 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Dec 05 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.1-1
+- Updated to 2.2.1
+- Several bundled modules (tkinter, sqlite3, curses, syslog) were
+ not bytecompiled properly during build, that is now fixed
+- prepared new tests, not enabled yet
+
* Thu Nov 14 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.0-1
- Updated to 2.2.0
diff --git a/sources b/sources
index d5b9932..f8f0564 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-5a5a3822605d7d811066b1b279da3c6e pypy-2.2-src.tar.bz2
+7ec9f48702323f9e93654ba73dd46720 pypy-2.2.1-src.tar.bz2
commit a79a105a7453f9b3f55d296774b2b28a256d8318
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Thu Jan 2 10:45:26 2014 +0100
Bytecompiled bunch of modules
diff --git a/pypy.spec b/pypy.spec
index cd225b9..cfb219f 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -181,6 +181,10 @@ BuildRequires: python-devel
%endif
BuildRequires: libffi-devel
+BuildRequires: tcl-devel
+BuildRequires: tk-devel
+
+BuildRequires: sqlite-devel
BuildRequires: zlib-devel
BuildRequires: bzip2-devel
@@ -577,6 +581,10 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
%{buildroot}/%{_bindir}/pypy \
0
+%{goal_dir}/pypy -c 'import _tkinter'
+%{goal_dir}/pypy -c 'import _sqlite3'
+%{goal_dir}/pypy -c 'import _curses'
+%{goal_dir}/pypy -c 'import syslog'
# Header files for C extension modules.
# Upstream's packaging process (pypy/tool/release/package.py)
commit 66ffb916e263ca7b45e75d7a209248c04f918264
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Tue Nov 12 10:19:28 2013 +0100
Updated to 2.2.0
diff --git a/.gitignore b/.gitignore
index cad553e..fa54eea 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@
/release-2.0-beta-1.tar.bz2
/release-2.0.2.tar.bz2
/release-2.1.0.tar.bz2
+/pypy-2.2-src.tar.bz2
diff --git a/pypy.spec b/pypy.spec
index e7ef81f..cd225b9 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,5 +1,5 @@
Name: pypy
-Version: 2.1.0
+Version: 2.2.0
Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
@@ -130,7 +130,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-2.1.0.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy-2.2-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -162,7 +162,7 @@ Patch2: 007-remove-startup-message.patch
# Turn it off with this boolean, to revert back to rebuilding using CPython
# and avoid a cycle in the build-time dependency graph:
-%global use_self_when_building 1
+%global use_self_when_building 0
%if 0%{use_self_when_building}
BuildRequires: pypy
%global bootstrap_python_interp pypy
@@ -269,7 +269,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-352c78d2e80f
+%setup -q -n pypy-2.2-src
%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
%patch1 -p1
%patch2 -p1
@@ -811,6 +811,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Nov 14 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.0-1
+- Updated to 2.2.0
+
* Thu Aug 15 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.1-1
- Updated to 2.1.0
diff --git a/sources b/sources
index fff5a1a..d5b9932 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-59af571317843a1759cb1ff392c26260 release-2.1.0.tar.bz2
+5a5a3822605d7d811066b1b279da3c6e pypy-2.2-src.tar.bz2
commit febbbdb0e4b360dffdd77a04e5101afc16e463a8
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Fri Aug 16 10:12:29 2013 +0200
Updated to 2.1.0
diff --git a/.gitignore b/.gitignore
index 63a65d6..cad553e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@
/release-1.9.tar.bz2
/release-2.0-beta-1.tar.bz2
/release-2.0.2.tar.bz2
+/release-2.1.0.tar.bz2
diff --git a/pypy.spec b/pypy.spec
index 1c72138..e7ef81f 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,8 +1,6 @@
-%global alphatag b1
-
Name: pypy
-Version: 2.0.2
-Release: 5%{?dist}
+Version: 2.1.0
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -132,50 +130,28 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-2.0.2.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/get/release-2.1.0.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
-Source2: macros.pypy
-
-# Edit a translator file for linux in order to configure our cflags and dynamic libffi
-Patch0: config.patch
+Source2: macros.pypy
# 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:
-Patch1: pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
-
-# Try to improve the readability of the generated .c code, by adding in the
-# RPython source as comments where possible.
-# A version of this was sent upstream as:
-# http://codespeak.net/pipermail/pypy-dev/2010q4/006532.html
-# TODO: get this into the upstream bug tracker, and finish inlining
-# support (rhbz#666963)
-Patch4: more-readable-c-code.patch
-
-# In my koji builds, /root/bin is in the PATH for some reason
-# This leads to test_subprocess.py failing, due to "test_leaking_fds_on_error"
-# trying every dir in PATH for "nonexisting_i_hope", which leads to it raising
-# OSError: [Errno 13] Permission denied
-# when it tries to read /root/bin, rather than raising "No such file"
-#
-# Work around this by specifying an absolute path for the non-existant
-# executable
-# Not yet sent upstream
-Patch5: pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
+Patch0: pypy-1.2-suppress-mandelbrot-set-during-tty-build.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
# and linker are captured:
-Patch6: 006-always-log-stdout.patch
+Patch1: 006-always-log-stdout.patch
# Disable the printing of a quote from IRC on startup (these are stored in
# ROT13 form in lib_pypy/_pypy_irc_topic.py). Some are cute, but some could
# cause confusion for end-users (and many are in-jokes within the PyPy
# community that won't make sense outside of it). [Sorry to be a killjoy]
-Patch7: 007-remove-startup-message.patch
+Patch2: 007-remove-startup-message.patch
# Build-time requirements:
@@ -186,37 +162,7 @@ Patch7: 007-remove-startup-message.patch
# Turn it off with this boolean, to revert back to rebuilding using CPython
# and avoid a cycle in the build-time dependency graph:
-# I'm disabling the self-hosting for now, due to a fatal error seen inside the
-# JIT, presumably whilst JIT-compiling something within the translator's
-# inliner.
-#
-# Specifically, building pypy-1.4.1-7.fc15.src.rpm on x86_64 using pypy-1.4.1-5.fc15.x86_64
-# http://koji.fedoraproject.org/koji/taskinfo?taskID=2721517
-# failed with this RPython traceback:
-# ... snip ...
-# [rtyper:WARNING] prebuilt instance <pypy.rpython.memory.gctransform.asmgcroot.ShapeDecompressor instance at 0x00000000f0b5bc80> has no attribute 'addr'
-# [rtyper] specializing: 179300 / 180508 blocks (99%)
-# [rtyper] specializing: 180500 / 180566 blocks (99%)
-# [rtyper] -=- specialized 1363 more blocks -=-
-# [rtyper] specializing: 180600 / 180777 blocks (99%)
-# [rtyper] -=- specialized 211 more blocks -=-
-# [backendopt:inlining] phase with threshold factor: 32.4
-# [backendopt:inlining] heuristic: pypy.translator.backendopt.inline.inlining_heuristic
-# [x86/regalloc] Bogus arg in operation 76 at 0
-# RPython traceback:
-# File "implement_62.c", line 39979, in send_bridge_to_backend
-# File "implement_69.c", line 65301, in Assembler386_assemble_bridge
-# File "implement_72.c", line 8078, in RegAlloc_prepare_bridge
-# File "implement_40.c", line 53061, in RegAlloc__prepare
-# File "implement_44.c", line 14305, in RegAlloc__compute_vars_longevity
-# Fatal RPython error: NotImplementedError
-#
-# This appears to be deep within pypy/jit/backend/x86/regalloc.py which has
-# called "not_implemented" to emit this message to stderr, before raising the
-# exception:
-# [x86/regalloc] Bogus arg in operation 76 at 0
-
-%global use_self_when_building 0
+%global use_self_when_building 1
%if 0%{use_self_when_building}
BuildRequires: pypy
%global bootstrap_python_interp pypy
@@ -234,12 +180,6 @@ BuildRequires: python-devel
%endif
-
-# FIXME: I'm seeing errors like this in the logs:
-# [translation:WARNING] The module '_rawffi' is disabled
-# [translation:WARNING] because importing pypy.rlib.libffi raised ImportError
-# [translation:WARNING] 'libffi.a' not found in ['/usr/lib/libffi', '/usr/lib']
-# Presumably we need to fix things to support dynamically-linked libffi
BuildRequires: libffi-devel
BuildRequires: zlib-devel
@@ -269,11 +209,6 @@ BuildRequires: /usr/bin/execstack
BuildRequires: emacs
%endif
-# pypy is bundling these so we delete them in %%prep. I don't think they are
-# needed unless we build pypy targetted at running on the jvm.
-#BuildRequires: jna
-#BuildRequires: jasmin # Not yet in Fedora
-
# Metadata for the core package (the JIT build):
Requires: pypy-libs = %{version}-%{release}
@@ -334,47 +269,10 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-f66246c46ca3
-%patch0 -p1 -b .configure-fedora
-%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
-
-# Disabled for now, as it needs regenerating for 1.8
-#patch4 -p1 -b .more-readable-c-code
-# Fails on 1.8 with this error:
-# [translation:ERROR] Error:
-# [translation:ERROR] Traceback (most recent call last):
-# [translation:ERROR] File "translate.py", line 309, in main
-# [translation:ERROR] drv.proceed(goals)
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/driver.py", line 811, in proceed
-# [translation:ERROR] return self._execute(goals, task_skip = self._maybe_skip())
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/tool/taskengine.py", line 116, in _execute
-# [translation:ERROR] res = self._do(goal, taskcallable, *args, **kwds)
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/driver.py", line 287, in _do
-# [translation:ERROR] res = func()
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/driver.py", line 530, in task_source_c
-# [translation:ERROR] exe_name=exe_name)
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 252, in generate_source
-# [translation:ERROR] split=self.split)
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 989, in gen_source
-# [translation:ERROR] sg.gen_readable_parts_of_source(f)
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 843, in gen_readable_parts_of_source
-# [translation:ERROR] for node, impl in nodeiter:
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 729, in subiter
-# [translation:ERROR] impl = '\n'.join(list(node.implementation())).split('\n')
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/node.py", line 867, in implementation
-# [translation:ERROR] for s in self.funcgen_implementation(funcgen):
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/node.py", line 901, in funcgen_implementation
-# [translation:ERROR] for line in bodyiter:
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/funcgen.py", line 272, in cfunction_body
-# [translation:ERROR] blocks.sort(block_comparator)
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/funcgen.py", line 34, in block_comparator
-# [translation:ERROR] if blk0.isstartblock:
-# [translation:ERROR] AttributeError: 'Block' object has no attribute 'isstartblock'
-
-%patch5 -p1
-%patch6 -p1
-%patch7 -p1
-
+%setup -q -n pypy-pypy-352c78d2e80f
+%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
+%patch1 -p1
+%patch2 -p1
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
@@ -383,15 +281,6 @@ find -name "*.py" -exec \
"{}" \
\;
-find . -name '*.jar' -exec rm \{\} \;
-
-# Remove stray ".svn" directories present within the 1.4.1 tarball
-# (reported as https://codespeak.net/issue/pypy-dev/issue612 )
-find . -path '*/.svn*' -delete
-
-# Remove DOS batch files:
-find -name "*.bat"|xargs rm -f
-
for f in rpython/translator/goal/bpnn.py ; do
# Detect shebang lines && remove them:
sed -e '/^#!/Q 0' -e 'Q 1' $f \
@@ -399,6 +288,7 @@ for f in rpython/translator/goal/bpnn.py ; do
chmod a-x $f
done
+
%build
BuildPyPy() {
@@ -540,10 +430,10 @@ BuildPyPy \
%{_emacs_bytecompile} rpython/jit/tool/pypytrace-mode.el
%endif
+
%install
rm -rf $RPM_BUILD_ROOT
-
# Install the various executables:
InstallPyPy() {
@@ -921,6 +811,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Aug 15 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.1-1
+- Updated to 2.1.0
+
* Sun Aug 04 2013 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.0.2-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
diff --git a/sources b/sources
index a37f747..fff5a1a 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-328a509c092b5477f99be8dd452d81c2 release-2.0.2.tar.bz2
+59af571317843a1759cb1ff392c26260 release-2.1.0.tar.bz2
commit 309e1cf6aab2cc2ecf9ae9897a22f271a9d4fb9c
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Sun Aug 4 01:04:23 2013 -0500
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
diff --git a/pypy.spec b/pypy.spec
index 8f28baf..1c72138 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -2,7 +2,7 @@
Name: pypy
Version: 2.0.2
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -921,6 +921,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Sun Aug 04 2013 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.0.2-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
+
* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-4
- Patch1 fix
commit b4e1c2185a5384e5ba4d898fe7fbca0ad3db45c2
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Mon Jun 24 10:44:06 2013 +0200
Patch1 fix
diff --git a/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch b/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
index 257f60f..c97eaf3 100644
--- a/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
+++ b/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
@@ -1,7 +1,6 @@
-diff --git a/pypy/tool/ansi_print.py b/pypy/tool/ansi_print.py
-index 3eff27c..fac4ba2 100644
---- a/pypy/tool/ansi_print.py
-+++ b/pypy/tool/ansi_print.py
+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)
diff --git a/pypy.spec b/pypy.spec
index 2470609..8f28baf 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -2,7 +2,7 @@
Name: pypy
Version: 2.0.2
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -921,6 +921,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-4
+- Patch1 fix
+
* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-3
- Yet another Sources fix
commit 8c737bc2aa985ae04d4540daefef663e827f8ba2
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Mon Jun 24 10:29:01 2013 +0200
Yet another Sources fix
diff --git a/.gitignore b/.gitignore
index 2793282..63a65d6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@
/release-1.8.tar.bz2
/release-1.9.tar.bz2
/release-2.0-beta-1.tar.bz2
+/release-2.0.2.tar.bz2
diff --git a/pypy.spec b/pypy.spec
index 66a66a9..2470609 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -2,7 +2,7 @@
Name: pypy
Version: 2.0.2
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -132,7 +132,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-2.0.2.tar.bz2#/pypy-pypy-f662...
+Source0: https://bitbucket.org/pypy/pypy/get/release-2.0.2.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -921,6 +921,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-3
+- Yet another Sources fix
+
* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-2
- Fixed Source URL
diff --git a/sources b/sources
index e7d211b..a37f747 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-4a346df59983e4a5c50e8ee211f80619 release-2.0-beta-1.tar.bz2
+328a509c092b5477f99be8dd452d81c2 release-2.0.2.tar.bz2
commit 5694529edb24cba3edd56720cee077b791e8378c
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Mon Jun 24 09:24:07 2013 +0200
Fixed Source URL
diff --git a/pypy.spec b/pypy.spec
index 1ce9198..66a66a9 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -2,7 +2,7 @@
Name: pypy
Version: 2.0.2
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -132,7 +132,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-2.0.2.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/get/release-2.0.2.tar.bz2#/pypy-pypy-f662...
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -921,6 +921,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-2
+- Fixed Source URL
+
* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-1
- 2.0.2, patch 8 does not seem necessary anymore
commit c3a10ade23f8dac35b5ef0edc6f2c23856705044
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Mon Jun 24 08:57:35 2013 +0200
Updated to 2.0.2
diff --git a/006-always-log-stdout.patch b/006-always-log-stdout.patch
index 2df1f00..5d49335 100644
--- a/006-always-log-stdout.patch
+++ b/006-always-log-stdout.patch
@@ -1,6 +1,7 @@
---- pypy-pypy-341e1e3821ff/pypy/translator/platform/__init__.py.always_log_stdout 2012-07-06 11:13:46.878979461 -0400
-+++ pypy-pypy-341e1e3821ff/pypy/translator/platform/__init__.py 2012-07-06 11:25:26.281235732 -0400
-@@ -126,6 +126,8 @@ class Platform(object):
+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):
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 e05586b..1dddb69 100644
--- a/007-remove-startup-message.patch
+++ b/007-remove-startup-message.patch
@@ -1,21 +1,12 @@
---- pypy-pypy-341e1e3821ff/lib_pypy/_pypy_interact.py.remove_startup_message 2012-07-06 12:10:46.504228264 -0400
-+++ pypy-pypy-341e1e3821ff/lib_pypy/_pypy_interact.py 2012-07-06 12:11:01.986034714 -0400
-@@ -13,18 +13,6 @@ def interactive_console(mainmodule=None)
- sys.ps2 = '.... '
- #
- try:
-- from _pypy_irc_topic import some_topic
-- text = "And now for something completely different: ``%s''" % (
-- some_topic(),)
-- while len(text) >= 80:
-- i = text[:80].rfind(' ')
-- print text[:i]
-- text = text[i+1:]
-- print text
-- except ImportError:
-- pass
-- #
-- try:
- if not os.isatty(sys.stdin.fileno()):
- # Bail out if stdin is not tty-like, as pyrepl wouldn't be happy
- # For example, with:
+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
+ import os
+
+
+-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/config.patch b/config.patch
index a11f397..bf81d7d 100644
--- a/config.patch
+++ b/config.patch
@@ -1,7 +1,7 @@
-diff -up pypy-pypy-2346207d9946/pypy/translator/platform/linux.py.configure-fedora pypy-pypy-2346207d9946/pypy/translator/platform/linux.py
---- pypy-pypy-2346207d9946/pypy/translator/platform/linux.py.configure-fedora 2012-02-09 13:27:19.000000000 -0500
-+++ pypy-pypy-2346207d9946/pypy/translator/platform/linux.py 2012-02-10 09:06:20.393066016 -0500
-@@ -31,13 +31,14 @@ class BaseLinux(BasePosix):
+diff -rup pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py
+--- pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py 2013-05-27 10:35:37.679237332 +0200
++++ pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py 2013-05-27 10:47:41.506354482 +0200
+@@ -32,19 +32,20 @@ class BaseLinux(BasePosix):
return self._pkg_config("libffi", "--libs-only-L",
['/usr/lib/libffi'])
@@ -9,15 +9,27 @@ diff -up pypy-pypy-2346207d9946/pypy/translator/platform/linux.py.configure-fedo
- # places where we need to look for libffi.a
- # XXX obscuuure! only look for libffi.a if run with translate.py
- if 'translate' in sys.modules:
-- return self.library_dirs_for_libffi() + ['/usr/lib']
+- if sys.maxint > 2**32:
+- host = 'x86_64'
+- else:
+- host = 'x86'
+- return self.library_dirs_for_libffi() + [
+- '/usr/lib',
+- '/usr/lib/%s-linux-gnu/' % host]
- else:
- return []
-+ # Fedora, at least, has the shared version but not the static:
++ #Fedora, at least, has the shared version but not the static:
+ #def library_dirs_for_libffi_a(self):
+ # # places where we need to look for libffi.a
+ # # XXX obscuuure! only look for libffi.a if run with translate.py
+ # if 'translate' in sys.modules:
-+ # return self.library_dirs_for_libffi() + ['/usr/lib']
++ # if sys.maxint > 2**32:
++ # host = 'x86_64'
++ # else:
++ # host = 'x86'
++ # return self.library_dirs_for_libffi() + [
++ # '/usr/lib',
++ # '/usr/lib/%s-linux-gnu/' % host]
+ # else:
+ # return []
diff --git a/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch b/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
index 9071be5..2391f32 100644
--- a/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
+++ b/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
@@ -1,6 +1,7 @@
---- pypy-pypy-2346207d9946/lib-python/2.7/test/test_subprocess.py.orig 2012-02-09 13:27:19.000000000 -0500
-+++ pypy-pypy-2346207d9946/lib-python/2.7/test/test_subprocess.py 2012-02-10 09:14:08.312216221 -0500
-@@ -570,7 +570,7 @@ class ProcessTestCase(BaseTestCase):
+diff -rup pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py
+--- pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py 2013-05-27 10:35:37.762237806 +0200
++++ pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py 2013-05-28 10:13:03.182536196 +0200
+@@ -587,7 +587,7 @@ class ProcessTestCase(BaseTestCase):
for i in range(1024):
# Windows raises IOError. Others raise OSError.
with self.assertRaises(EnvironmentError) as c:
diff --git a/pypy.spec b/pypy.spec
index dbcbc8d..1ce9198 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,8 +1,8 @@
%global alphatag b1
Name: pypy
-Version: 2.0
-Release: 0.2.%{alphatag}%{?dist}
+Version: 2.0.2
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -123,7 +123,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%global pylibver 2.7
# We refer to this subdir of the source tree in a few places during the build:
-%global goal_dir pypy/translator/goal
+%global goal_dir pypy/goal
# Turn off the brp-python-bytecompile postprocessing script
@@ -132,7 +132,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-2.0-beta-1.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/get/release-2.0.2.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -177,21 +177,6 @@ Patch6: 006-always-log-stdout.patch
# community that won't make sense outside of it). [Sorry to be a killjoy]
Patch7: 007-remove-startup-message.patch
-# With pypy-1.9-1.fc17.x86_64, the pypy binary exposes about 200k symbols to
-# the dynamic linker:
-# $ eu-readelf -s $(which pypy) | head
-# Symbol table [ 5] '.dynsym' contains 194163 entries:
-# which is far more than necessary.
-# Fix the version script for the linker as invoked thus in the Makefile:
-# "-Wl,--export-dynamic,--version-script=../dynamic-symbols-6"
-# so that it contains a "local: *;" clause, thus hiding the bulk of the
-# symbols from the dynamic linker.
-# Ideally we'd add:
-# __attribute__ ((visibility ("hidden")))
-# to most symbols, allowing the compiler to potentially generate better code.
-# Not yet reported upstream
-Patch8: 008-fix-dynamic-symbols-script.patch
-
# Build-time requirements:
@@ -349,7 +334,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-07e08e9c885c
+%setup -q -n pypy-pypy-f66246c46ca3
%patch0 -p1 -b .configure-fedora
%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
@@ -389,7 +374,6 @@ Build of PyPy with support for micro-threads for massive concurrency
%patch5 -p1
%patch6 -p1
%patch7 -p1
-%patch8 -p1
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
@@ -408,9 +392,7 @@ find . -path '*/.svn*' -delete
# Remove DOS batch files:
find -name "*.bat"|xargs rm -f
-# The "demo" directory gets auto-installed by virture of being listed in %doc
-# Remove shebang lines from demo .py files, and remove executability from them:
-for f in demo/bpnn.py ; do
+for f in rpython/translator/goal/bpnn.py ; do
# Detect shebang lines && remove them:
sed -e '/^#!/Q 0' -e 'Q 1' $f \
&& sed -i '1d' $f
@@ -522,15 +504,11 @@ BuildPyPy() {
RPM_BUILD_ROOT= \
PYPY_USESSION_DIR=$(pwd) \
PYPY_USESSION_BASENAME=$ExeName \
- $INTERP translate.py \
-%if 0%{verbose_logs}
- --translation-verbose \
-%endif
- --cflags="$CFLAGS" \
- --batch \
+ $INTERP ../../rpython/bin/rpython \
--output=$ExeName \
%{gcrootfinder_options} \
- $Options
+ $Options \
+ targetpypystandalone
echo "--------------------------------------------------------------"
echo "--------------------------------------------------------------"
@@ -559,7 +537,7 @@ BuildPyPy \
%endif
%if %{with_emacs}
-%{_emacs_bytecompile} pypy/jit/tool/pypytrace-mode.el
+%{_emacs_bytecompile} rpython/jit/tool/pypytrace-mode.el
%endif
%install
@@ -772,7 +750,7 @@ find \
# Install the JIT trace mode for Emacs:
%if %{with_emacs}
mkdir -p %{buildroot}/%{_emacs_sitelispdir}
-cp -a pypy/jit/tool/pypytrace-mode.el* %{buildroot}/%{_emacs_sitelispdir}
+cp -a rpython/jit/tool/pypytrace-mode.el* %{buildroot}/%{_emacs_sitelispdir}
%endif
# Install macros for rpm:
@@ -908,7 +886,7 @@ rm -rf $RPM_BUILD_ROOT
%files libs
%defattr(-,root,root,-)
-%doc LICENSE README demo
+%doc LICENSE README.rst
%dir %{pypyprefix}
%dir %{pypyprefix}/lib-python
@@ -924,7 +902,7 @@ rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root,-)
-%doc LICENSE README
+%doc LICENSE README.rst
%{_bindir}/pypy
%{pypyprefix}/pypy
@@ -937,12 +915,15 @@ rm -rf $RPM_BUILD_ROOT
%if 0%{with_stackless}
%files stackless
%defattr(-,root,root,-)
-%doc LICENSE README
+%doc LICENSE README.rst
%{_bindir}/pypy-stackless
%endif
%changelog
+* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-1
+- 2.0.2, patch 8 does not seem necessary anymore
+
* Thu Feb 14 2013 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.0-0.2.b1
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
commit fd80b8a933ad44429dfb88ee58aecaf24faf9135
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Thu Feb 14 12:48:36 2013 -0600
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
diff --git a/pypy.spec b/pypy.spec
index b29583d..dbcbc8d 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -2,7 +2,7 @@
Name: pypy
Version: 2.0
-Release: 0.1.%{alphatag}%{?dist}
+Release: 0.2.%{alphatag}%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -943,6 +943,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Feb 14 2013 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.0-0.2.b1
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
+
* Tue Dec 11 2012 David Malcolm <dmalcolm(a)redhat.com> - 2.0-0.1.b1
- 2.0b1 (drop upstreamed patch 9)
commit 8e0c0345a5ec642705520ed20aad13dfb15ec7c2
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Thu Dec 13 06:16:11 2012 -0500
2.0-0.1.b1
diff --git a/.gitignore b/.gitignore
index 4c551cc..2793282 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@
/release-1.7.tar.bz2
/release-1.8.tar.bz2
/release-1.9.tar.bz2
+/release-2.0-beta-1.tar.bz2
diff --git a/009-add-PyInt_AsUnsignedLongLongMask.patch b/009-add-PyInt_AsUnsignedLongLongMask.patch
deleted file mode 100644
index dae7e16..0000000
--- a/009-add-PyInt_AsUnsignedLongLongMask.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-diff --git a/pypy/module/cpyext/intobject.py b/pypy/module/cpyext/intobject.py
---- a/pypy/module/cpyext/intobject.py
-+++ b/pypy/module/cpyext/intobject.py
-@@ -6,7 +6,7 @@
- PyObject, PyObjectFields, CONST_STRING, CANNOT_FAIL, Py_ssize_t)
- from pypy.module.cpyext.pyobject import (
- make_typedescr, track_reference, RefcountState, from_ref)
--from pypy.rlib.rarithmetic import r_uint, intmask, LONG_TEST
-+from pypy.rlib.rarithmetic import r_uint, intmask, LONG_TEST, r_ulonglong
- from pypy.objspace.std.intobject import W_IntObject
- import sys
-
-@@ -83,6 +83,20 @@
- num = space.bigint_w(w_int)
- return num.uintmask()
-
-+@cpython_api([PyObject], rffi.ULONGLONG, error=-1)
-+def PyInt_AsUnsignedLongLongMask(space, w_obj):
-+ """Will first attempt to cast the object to a PyIntObject or
-+ PyLongObject, if it is not already one, and then return its value as
-+ unsigned long long, without checking for overflow.
-+ """
-+ w_int = space.int(w_obj)
-+ if space.is_true(space.isinstance(w_int, space.w_int)):
-+ num = space.int_w(w_int)
-+ return r_ulonglong(num)
-+ else:
-+ num = space.bigint_w(w_int)
-+ return num.ulonglongmask()
-+
- @cpython_api([PyObject], lltype.Signed, error=CANNOT_FAIL)
- def PyInt_AS_LONG(space, w_int):
- """Return the value of the object w_int. No error checking is performed."""
-diff --git a/pypy/module/cpyext/test/test_intobject.py b/pypy/module/cpyext/test/test_intobject.py
---- a/pypy/module/cpyext/test/test_intobject.py
-+++ b/pypy/module/cpyext/test/test_intobject.py
-@@ -34,6 +34,11 @@
- assert (api.PyInt_AsUnsignedLongMask(space.wrap(10**30))
- == 10**30 % ((sys.maxint + 1) * 2))
-
-+ assert (api.PyInt_AsUnsignedLongLongMask(space.wrap(sys.maxint))
-+ == sys.maxint)
-+ assert (api.PyInt_AsUnsignedLongLongMask(space.wrap(10**30))
-+ == 10**30 % (2**64))
-+
- def test_coerce(self, space, api):
- class Coerce(object):
- def __int__(self):
diff --git a/pypy.spec b/pypy.spec
index 057fbdd..b29583d 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,8 @@
+%global alphatag b1
+
Name: pypy
-Version: 1.9
-Release: 4%{?dist}
+Version: 2.0
+Release: 0.1.%{alphatag}%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -130,7 +132,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-%{version}.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/get/release-2.0-beta-1.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -191,12 +193,6 @@ Patch7: 007-remove-startup-message.patch
Patch8: 008-fix-dynamic-symbols-script.patch
-# Cherrypick upstream patch to add PyInt_AsUnsignedLongLongMask (used by
-# the rpm python bindings); see https://bugs.pypy.org/issue1211
-# This is https://bitbucket.org/pypy/pypy/changeset/542d481517d3
-Patch9: 009-add-PyInt_AsUnsignedLongLongMask.patch
-
-
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
@@ -353,7 +349,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-341e1e3821ff
+%setup -q -n pypy-pypy-07e08e9c885c
%patch0 -p1 -b .configure-fedora
%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
@@ -394,7 +390,6 @@ Build of PyPy with support for micro-threads for massive concurrency
%patch6 -p1
%patch7 -p1
%patch8 -p1
-%patch9 -p1
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
@@ -631,6 +626,10 @@ 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 \
@@ -944,6 +943,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Dec 11 2012 David Malcolm <dmalcolm(a)redhat.com> - 2.0-0.1.b1
+- 2.0b1 (drop upstreamed patch 9)
+
* Sat Jul 21 2012 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 1.9-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
diff --git a/sources b/sources
index 2a64332..e7d211b 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-f92c0171a9578a3e4a0f74947ec596ab release-1.9.tar.bz2
+4a346df59983e4a5c50e8ee211f80619 release-2.0-beta-1.tar.bz2
commit cd9f89c255519e6d52d820882b9cc72cc74932b7
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Fri Jul 20 23:22:27 2012 -0500
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
diff --git a/pypy.spec b/pypy.spec
index 2ed932b..057fbdd 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.9
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -944,6 +944,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Sat Jul 21 2012 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 1.9-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
+
* Tue Jul 10 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.9-3
- log all output from "make" (patch 6)
- disable the MOTD at startup (patch 7)
commit 26f62305fe07f9429bb6f4dc47d8749d7bd8ca7f
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Tue Jul 10 16:45:52 2012 -0400
1.9-3
* Tue Jul 10 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.9-3
- log all output from "make" (patch 6)
- disable the MOTD at startup (patch 7)
- hide symbols from the dynamic linker (patch 8)
- add PyInt_AsUnsignedLongLongMask (patch 9)
- capture the Makefile, the typeids.txt, and the dynamic-symbols file within
the debuginfo package
diff --git a/006-always-log-stdout.patch b/006-always-log-stdout.patch
new file mode 100644
index 0000000..2df1f00
--- /dev/null
+++ b/006-always-log-stdout.patch
@@ -0,0 +1,11 @@
+--- pypy-pypy-341e1e3821ff/pypy/translator/platform/__init__.py.always_log_stdout 2012-07-06 11:13:46.878979461 -0400
++++ pypy-pypy-341e1e3821ff/pypy/translator/platform/__init__.py 2012-07-06 11:25:26.281235732 -0400
+@@ -126,6 +126,8 @@ class Platform(object):
+ self._handle_error(returncode, stdout, stderr, outname)
+
+ def _handle_error(self, returncode, stdout, stderr, outname):
++ for line in stdout.splitlines():
++ log.message(line)
+ if returncode != 0:
+ errorfile = outname.new(ext='errors')
+ errorfile.write(stderr, 'wb')
diff --git a/007-remove-startup-message.patch b/007-remove-startup-message.patch
new file mode 100644
index 0000000..e05586b
--- /dev/null
+++ b/007-remove-startup-message.patch
@@ -0,0 +1,21 @@
+--- pypy-pypy-341e1e3821ff/lib_pypy/_pypy_interact.py.remove_startup_message 2012-07-06 12:10:46.504228264 -0400
++++ pypy-pypy-341e1e3821ff/lib_pypy/_pypy_interact.py 2012-07-06 12:11:01.986034714 -0400
+@@ -13,18 +13,6 @@ def interactive_console(mainmodule=None)
+ sys.ps2 = '.... '
+ #
+ try:
+- from _pypy_irc_topic import some_topic
+- text = "And now for something completely different: ``%s''" % (
+- some_topic(),)
+- while len(text) >= 80:
+- i = text[:80].rfind(' ')
+- print text[:i]
+- text = text[i+1:]
+- print text
+- except ImportError:
+- pass
+- #
+- try:
+ if not os.isatty(sys.stdin.fileno()):
+ # Bail out if stdin is not tty-like, as pyrepl wouldn't be happy
+ # For example, with:
diff --git a/008-fix-dynamic-symbols-script.patch b/008-fix-dynamic-symbols-script.patch
new file mode 100644
index 0000000..5b1d551
--- /dev/null
+++ b/008-fix-dynamic-symbols-script.patch
@@ -0,0 +1,15 @@
+diff --git a/pypy/translator/platform/posix.py b/pypy/translator/platform/posix.py
+--- a/pypy/translator/platform/posix.py
++++ b/pypy/translator/platform/posix.py
+@@ -48,8 +48,10 @@
+ response_file = self._make_response_file("dynamic-symbols-")
+ f = response_file.open("w")
+ f.write("{\n")
++ f.write(" global:\n")
+ for sym in eci.export_symbols:
+- f.write("%s;\n" % (sym,))
++ f.write(" %s;\n" % (sym,))
++ f.write(" local:*;\n")
+ f.write("};")
+ f.close()
+
diff --git a/009-add-PyInt_AsUnsignedLongLongMask.patch b/009-add-PyInt_AsUnsignedLongLongMask.patch
new file mode 100644
index 0000000..dae7e16
--- /dev/null
+++ b/009-add-PyInt_AsUnsignedLongLongMask.patch
@@ -0,0 +1,48 @@
+diff --git a/pypy/module/cpyext/intobject.py b/pypy/module/cpyext/intobject.py
+--- a/pypy/module/cpyext/intobject.py
++++ b/pypy/module/cpyext/intobject.py
+@@ -6,7 +6,7 @@
+ PyObject, PyObjectFields, CONST_STRING, CANNOT_FAIL, Py_ssize_t)
+ from pypy.module.cpyext.pyobject import (
+ make_typedescr, track_reference, RefcountState, from_ref)
+-from pypy.rlib.rarithmetic import r_uint, intmask, LONG_TEST
++from pypy.rlib.rarithmetic import r_uint, intmask, LONG_TEST, r_ulonglong
+ from pypy.objspace.std.intobject import W_IntObject
+ import sys
+
+@@ -83,6 +83,20 @@
+ num = space.bigint_w(w_int)
+ return num.uintmask()
+
++@cpython_api([PyObject], rffi.ULONGLONG, error=-1)
++def PyInt_AsUnsignedLongLongMask(space, w_obj):
++ """Will first attempt to cast the object to a PyIntObject or
++ PyLongObject, if it is not already one, and then return its value as
++ unsigned long long, without checking for overflow.
++ """
++ w_int = space.int(w_obj)
++ if space.is_true(space.isinstance(w_int, space.w_int)):
++ num = space.int_w(w_int)
++ return r_ulonglong(num)
++ else:
++ num = space.bigint_w(w_int)
++ return num.ulonglongmask()
++
+ @cpython_api([PyObject], lltype.Signed, error=CANNOT_FAIL)
+ def PyInt_AS_LONG(space, w_int):
+ """Return the value of the object w_int. No error checking is performed."""
+diff --git a/pypy/module/cpyext/test/test_intobject.py b/pypy/module/cpyext/test/test_intobject.py
+--- a/pypy/module/cpyext/test/test_intobject.py
++++ b/pypy/module/cpyext/test/test_intobject.py
+@@ -34,6 +34,11 @@
+ assert (api.PyInt_AsUnsignedLongMask(space.wrap(10**30))
+ == 10**30 % ((sys.maxint + 1) * 2))
+
++ assert (api.PyInt_AsUnsignedLongLongMask(space.wrap(sys.maxint))
++ == sys.maxint)
++ assert (api.PyInt_AsUnsignedLongLongMask(space.wrap(10**30))
++ == 10**30 % (2**64))
++
+ def test_coerce(self, space, api):
+ class Coerce(object):
+ def __int__(self):
diff --git a/pypy.spec b/pypy.spec
index e579720..2ed932b 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.9
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -164,6 +164,39 @@ Patch4: more-readable-c-code.patch
# Not yet sent upstream
Patch5: pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.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
+# and linker are captured:
+Patch6: 006-always-log-stdout.patch
+
+# Disable the printing of a quote from IRC on startup (these are stored in
+# ROT13 form in lib_pypy/_pypy_irc_topic.py). Some are cute, but some could
+# cause confusion for end-users (and many are in-jokes within the PyPy
+# community that won't make sense outside of it). [Sorry to be a killjoy]
+Patch7: 007-remove-startup-message.patch
+
+# With pypy-1.9-1.fc17.x86_64, the pypy binary exposes about 200k symbols to
+# the dynamic linker:
+# $ eu-readelf -s $(which pypy) | head
+# Symbol table [ 5] '.dynsym' contains 194163 entries:
+# which is far more than necessary.
+# Fix the version script for the linker as invoked thus in the Makefile:
+# "-Wl,--export-dynamic,--version-script=../dynamic-symbols-6"
+# so that it contains a "local: *;" clause, thus hiding the bulk of the
+# symbols from the dynamic linker.
+# Ideally we'd add:
+# __attribute__ ((visibility ("hidden")))
+# to most symbols, allowing the compiler to potentially generate better code.
+# Not yet reported upstream
+Patch8: 008-fix-dynamic-symbols-script.patch
+
+
+# Cherrypick upstream patch to add PyInt_AsUnsignedLongLongMask (used by
+# the rpm python bindings); see https://bugs.pypy.org/issue1211
+# This is https://bitbucket.org/pypy/pypy/changeset/542d481517d3
+Patch9: 009-add-PyInt_AsUnsignedLongLongMask.patch
+
+
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
@@ -358,6 +391,11 @@ Build of PyPy with support for micro-threads for massive concurrency
# [translation:ERROR] AttributeError: 'Block' object has no attribute 'isstartblock'
%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
+%patch9 -p1
+
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
@@ -696,15 +734,31 @@ mkdir -p %{buildroot}%{pypy_debuginfo_dir}
# copy over everything:
cp -a pypy %{buildroot}%{pypy_debuginfo_dir}
-# ...then delete files that aren't .py files:
+# ...then delete files that aren't:
+# - *.py files
+# - the Makefile
+# - typeids.txt
+# - dynamic-symbols-*
find \
- %{buildroot}%{pypy_debuginfo_dir} \
- \( -type f \
- -a \
- \! -name "*.py" \
- \) \
+ %{buildroot}%{pypy_debuginfo_dir} \
+ \( -type f \
+ -a \
+ \! \( -name "*.py" \
+ -o \
+ -name "Makefile" \
+ -o \
+ -name "typeids.txt" \
+ -o \
+ -name "dynamic-symbols-*" \
+ \) \
+ \) \
-delete
+# Alternatively, we could simply keep everything. This leads to a ~350MB
+# debuginfo package, but it makes it easy to hack on the Makefile and C build
+# flags by rebuilding/linking the sources.
+# To do so, remove the above "find" command.
+
# We don't need bytecode for these files; they are being included for reference
# purposes.
# There are some rpmlint warnings from these files:
@@ -890,6 +944,14 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Jul 10 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.9-3
+- log all output from "make" (patch 6)
+- disable the MOTD at startup (patch 7)
+- hide symbols from the dynamic linker (patch 8)
+- add PyInt_AsUnsignedLongLongMask (patch 9)
+- capture the Makefile, the typeids.txt, and the dynamic-symbols file within
+the debuginfo package
+
* Mon Jun 18 2012 Peter Robinson <pbrobinson(a)fedoraproject.org> - 1.9-2
- Compile with PIC, fixes FTBFS on ARM
commit 92ec0ebc5bf5746a03e45726d8e300ef51ff7940
Author: Peter Robinson <pbrobinson(a)gmail.com>
Date: Mon Jun 18 09:50:36 2012 +0100
Compile with PIC, fixes FTBFS on ARM
diff --git a/pypy.spec b/pypy.spec
index 80b4039..e579720 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.9
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -471,7 +471,7 @@ BuildPyPy() {
# The generated C code leads to many thousands of warnings of the form:
# warning: variable 'l_v26003' set but not used [-Wunused-but-set-variable]
# Suppress them:
- export CFLAGS=$(echo "$CFLAGS" -Wno-unused)
+ export CFLAGS=$(echo "$CFLAGS" -Wno-unused -fPIC)
# If we're already built the JIT-enabled "pypy", then use it for subsequent
# builds (of other configurations):
@@ -890,6 +890,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Jun 18 2012 Peter Robinson <pbrobinson(a)fedoraproject.org> - 1.9-2
+- Compile with PIC, fixes FTBFS on ARM
+
* Fri Jun 8 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.9-1
- 1.9
commit 615fd77fe04457d552feff9d10986589b35a6148
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Wed Jun 13 11:11:16 2012 -0400
upload 1.9 tarball
diff --git a/.gitignore b/.gitignore
index 86ec921..4c551cc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@
/release-1.6.tar.bz2
/release-1.7.tar.bz2
/release-1.8.tar.bz2
+/release-1.9.tar.bz2
diff --git a/sources b/sources
index 30a988e..2a64332 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-661be06978fdc907d84f0ee1f1228c8b release-1.8.tar.bz2
+f92c0171a9578a3e4a0f74947ec596ab release-1.9.tar.bz2
commit b042622bfa38e9ad3794d4f845207042e589b20b
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Fri Jun 8 20:18:15 2012 -0400
1.9
diff --git a/pypy.spec b/pypy.spec
index 8b80611..80b4039 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 1.8
-Release: 2%{?dist}
+Version: 1.9
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -320,7 +320,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-2346207d9946
+%setup -q -n pypy-pypy-341e1e3821ff
%patch0 -p1 -b .configure-fedora
%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
@@ -861,7 +861,6 @@ rm -rf $RPM_BUILD_ROOT
%dir %{pypyprefix}/lib-python
%{pypyprefix}/lib-python/stdlib-version.txt
%{pypyprefix}/lib-python/%{pylibver}/
-%{pypyprefix}/lib-python/modified-%{pylibver}/
%{pypyprefix}/lib-python/conftest.py*
%{pypyprefix}/lib_pypy/
%{pypyprefix}/site-packages/
@@ -891,6 +890,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Fri Jun 8 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.9-1
+- 1.9
+
* Fri Feb 10 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.8-2
- disable C readability patch for now (patch 4)
commit 07098c88a6645a0333d4c0d927251a23d002376d
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Fri Feb 10 11:12:43 2012 -0500
1.8-2: disable C readability patch for now (patch 4)
diff --git a/pypy.spec b/pypy.spec
index 9838bae..8b80611 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.8
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -324,7 +324,38 @@ Build of PyPy with support for micro-threads for massive concurrency
%patch0 -p1 -b .configure-fedora
%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
-%patch4 -p1 -b .more-readable-c-code
+# Disabled for now, as it needs regenerating for 1.8
+#patch4 -p1 -b .more-readable-c-code
+# Fails on 1.8 with this error:
+# [translation:ERROR] Error:
+# [translation:ERROR] Traceback (most recent call last):
+# [translation:ERROR] File "translate.py", line 309, in main
+# [translation:ERROR] drv.proceed(goals)
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/driver.py", line 811, in proceed
+# [translation:ERROR] return self._execute(goals, task_skip = self._maybe_skip())
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/tool/taskengine.py", line 116, in _execute
+# [translation:ERROR] res = self._do(goal, taskcallable, *args, **kwds)
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/driver.py", line 287, in _do
+# [translation:ERROR] res = func()
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/driver.py", line 530, in task_source_c
+# [translation:ERROR] exe_name=exe_name)
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 252, in generate_source
+# [translation:ERROR] split=self.split)
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 989, in gen_source
+# [translation:ERROR] sg.gen_readable_parts_of_source(f)
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 843, in gen_readable_parts_of_source
+# [translation:ERROR] for node, impl in nodeiter:
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 729, in subiter
+# [translation:ERROR] impl = '\n'.join(list(node.implementation())).split('\n')
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/node.py", line 867, in implementation
+# [translation:ERROR] for s in self.funcgen_implementation(funcgen):
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/node.py", line 901, in funcgen_implementation
+# [translation:ERROR] for line in bodyiter:
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/funcgen.py", line 272, in cfunction_body
+# [translation:ERROR] blocks.sort(block_comparator)
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/funcgen.py", line 34, in block_comparator
+# [translation:ERROR] if blk0.isstartblock:
+# [translation:ERROR] AttributeError: 'Block' object has no attribute 'isstartblock'
%patch5 -p1
@@ -860,6 +891,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Fri Feb 10 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.8-2
+- disable C readability patch for now (patch 4)
+
* Thu Feb 9 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.8-1
- 1.8; regenerate config patch (patch 0); drop selinux patch (patch 2);
regenerate patch 5
commit 52a91fcc4b0ffbdb511ad40e389fe6566d1b8623
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Fri Feb 10 09:19:56 2012 -0500
1.8
rebase to 1.8:
* regenerate config patch (patch 0)
* drop selinux patch (patch 2)
* regenerate patch 5
diff --git a/.gitignore b/.gitignore
index 99af398..86ec921 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
/pypy-1.5-src.tar.bz2
/release-1.6.tar.bz2
/release-1.7.tar.bz2
+/release-1.8.tar.bz2
diff --git a/config.patch b/config.patch
index afd7a7d..a11f397 100644
--- a/config.patch
+++ b/config.patch
@@ -1,31 +1,7 @@
-diff -up pypy-pypy-release-1.7/pypy/translator/platform/linux.py.configure-fedora pypy-pypy-release-1.7/pypy/translator/platform/linux.py
---- pypy-pypy-release-1.7/pypy/translator/platform/linux.py.configure-fedora 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/platform/linux.py 2011-11-21 13:07:03.454240019 -0500
-@@ -1,15 +1,21 @@
- """Support for Linux."""
-
-+import os
- import sys
- from pypy.translator.platform.posix import BasePosix
-
-+CFLAGS = ['-O3', '-pthread', '-fomit-frame-pointer',
-+ '-Wall', '-Wno-unused']
-+if os.environ.get('CFLAGS', None):
-+ CFLAGS.extend(os.environ['CFLAGS'].split())
-+CFLAGS = tuple(CFLAGS)
-+
- class BaseLinux(BasePosix):
- name = "linux"
-
- link_flags = ('-pthread',)
- extra_libs = ('-lrt',)
-- cflags = ('-O3', '-pthread', '-fomit-frame-pointer',
-- '-Wall', '-Wno-unused')
-+ cflags = CFLAGS
- standalone_only = ()
- shared_only = ('-fPIC',)
- so_ext = 'so'
-@@ -26,13 +32,14 @@ class BaseLinux(BasePosix):
+diff -up pypy-pypy-2346207d9946/pypy/translator/platform/linux.py.configure-fedora pypy-pypy-2346207d9946/pypy/translator/platform/linux.py
+--- pypy-pypy-2346207d9946/pypy/translator/platform/linux.py.configure-fedora 2012-02-09 13:27:19.000000000 -0500
++++ pypy-pypy-2346207d9946/pypy/translator/platform/linux.py 2012-02-10 09:06:20.393066016 -0500
+@@ -31,13 +31,14 @@ class BaseLinux(BasePosix):
return self._pkg_config("libffi", "--libs-only-L",
['/usr/lib/libffi'])
diff --git a/fix-test_commands-expected-ls-output-issue7108.patch b/fix-test_commands-expected-ls-output-issue7108.patch
deleted file mode 100644
index becc3e0..0000000
--- a/fix-test_commands-expected-ls-output-issue7108.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- test/test_commands.py.orig 2010-12-22 13:25:11.357333216 -0500
-+++ test/test_commands.py 2010-12-22 13:25:57.927166219 -0500
-@@ -47,7 +47,7 @@ class CommandTests(unittest.TestCase):
- # Note that the first case above has a space in the group name
- # while the second one has a space in both names.
- pat = r'''d......... # It is a directory.
-- \+? # It may have ACLs.
-+ [.+@]? # It may have alt access (SELinux, ACLs or metadata ('@' OS X).
- \s+\d+ # It has some number of links.
- [^/]* # Skip user, group, size, and date.
- /\. # and end with the name of the file.
diff --git a/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch b/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
index eb6f324..9071be5 100644
--- a/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
+++ b/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
@@ -1,6 +1,5 @@
-diff -up pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py.non-readable-path pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py
---- pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py.non-readable-path 2011-08-20 11:46:31.410646024 -0400
-+++ pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py 2011-08-20 11:46:39.421645476 -0400
+--- pypy-pypy-2346207d9946/lib-python/2.7/test/test_subprocess.py.orig 2012-02-09 13:27:19.000000000 -0500
++++ pypy-pypy-2346207d9946/lib-python/2.7/test/test_subprocess.py 2012-02-10 09:14:08.312216221 -0500
@@ -570,7 +570,7 @@ class ProcessTestCase(BaseTestCase):
for i in range(1024):
# Windows raises IOError. Others raise OSError.
@@ -9,4 +8,4 @@ diff -up pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py.non-readab
+ subprocess.Popen(['/usr/bin/nonexisting_i_hope'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
- if c.exception.errno != errno.ENOENT: # ignore "no such file"
+ # ignore errors that indicate the command was not found
diff --git a/pypy.spec b/pypy.spec
index b5982bd..9838bae 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 1.7
-Release: 4%{?dist}
+Version: 1.8
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -145,10 +145,6 @@ Patch0: config.patch
# merely render dots:
Patch1: pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
-# test_commmands fails on SELinux systems due to a change in the output
-# of "ls" (http://bugs.python.org/issue7108)
-Patch2: fix-test_commands-expected-ls-output-issue7108.patch
-
# Try to improve the readability of the generated .c code, by adding in the
# RPython source as comments where possible.
# A version of this was sent upstream as:
@@ -324,14 +320,10 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-release-%{version}
+%setup -q -n pypy-pypy-2346207d9946
%patch0 -p1 -b .configure-fedora
%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
-pushd lib-python/%{pylibver}
-%patch2 -p0
-popd
-
%patch4 -p1 -b .more-readable-c-code
%patch5 -p1
@@ -868,6 +860,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Feb 9 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.8-1
+- 1.8; regenerate config patch (patch 0); drop selinux patch (patch 2);
+regenerate patch 5
+
* Tue Jan 31 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.7-4
- fix an incompatibility with virtualenv (rhbz#742641)
diff --git a/sources b/sources
index 197491c..30a988e 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-fc22184c931ead98bdae9ec3e79595c2 release-1.7.tar.bz2
+661be06978fdc907d84f0ee1f1228c8b release-1.8.tar.bz2
commit a8e52ca5f82917a1b2fb3a3684272c2c1e39f146
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Tue Jan 31 04:53:38 2012 -0500
fix an incompatibility with virtualenv (rhbz#742641)
Previously, we manually fixed up the library search path to be
below %{pypyprefix}, by patching pypy/translator/goal/app_main.py (adding
LIBRARY_INSTALLATION_PATH in patch 3, then using sed to change it to the
correct value in %prep after applying the patch).
This led to issues when using pypy with virtualenv, so now (as suggested in
https://codespeak.net/issue/pypy-dev/issue614 ) we simply install the pypy
binary into %{pypyprefix}, and make /usr/bin/pypy be a symlink to it. This
allows pypy to find its libraries both when run outside a virtualenv, and
within it.
Resolves https://bugzilla.redhat.com/show_bug.cgi?id=742641
diff --git a/pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch b/pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
deleted file mode 100644
index 93bcb69..0000000
--- a/pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-diff -r cd083843b67a pypy/translator/goal/app_main.py
---- a/pypy/translator/goal/app_main.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/goal/app_main.py Wed Dec 22 17:43:21 2010 -0500
-@@ -191,6 +191,12 @@
- IS_WINDOWS = False
-
- def get_library_path(executable):
-+ # FIXME: get this from translator configuration
-+ dirname = LIBRARY_INSTALLATION_PATH
-+ newpath = sys.pypy_initial_path(dirname)
-+ if newpath:
-+ return newpath
-+
- search = executable
- while 1:
- dirname = resolvedirof(search)
diff --git a/pypy.spec b/pypy.spec
index 4bf93a4..b5982bd 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.7
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -149,18 +149,6 @@ Patch1: pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
# of "ls" (http://bugs.python.org/issue7108)
Patch2: fix-test_commands-expected-ls-output-issue7108.patch
-# When locating the pypy standard libraries, look first within
-# LIBRARY_INSTALLATION_PATH.
-# We convert this from being a non-existant variable into a string literal
-# with the value of "pypyprefix" in the "prep" phase below.
-#
-# We still use the scanning relative to the binary location when invoking a
-# pypy binary during the build (e.g. during "check")
-#
-# Sent upstream (with caveats) as:
-# https://codespeak.net/issue/pypy-dev/issue614
-Patch3: pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
-
# Try to improve the readability of the generated .c code, by adding in the
# RPython source as comments where possible.
# A version of this was sent upstream as:
@@ -344,14 +332,6 @@ pushd lib-python/%{pylibver}
%patch2 -p0
popd
-# Look for the pypy libraries within LIBRARY_INSTALLATION_PATH first:
-%patch3 -p1
-# Fixup LIBRARY_INSTALLATION_PATH to be a string literal containing our value
-# for "pypyprefix":
-sed -i \
- -e 's|LIBRARY_INSTALLATION_PATH|"%{pypyprefix}"|' \
- pypy/translator/goal/app_main.py
-
%patch4 -p1 -b .more-readable-c-code
%patch5 -p1
@@ -535,7 +515,19 @@ rm -rf $RPM_BUILD_ROOT
InstallPyPy() {
ExeName=$1
- install -m 755 %{goal_dir}/$ExeName %{buildroot}/%{_bindir}
+ # To ensure compatibility with virtualenv, pypy finds its libraries
+ # relative to itself; this happens within
+ # pypy/translator/goal/app_main.py:get_library_path
+ # which calls sys.pypy_initial_path(dirname) on the dir containing
+ # the executable, with symlinks resolved.
+ #
+ # Hence we make /usr/bin/pypy be a symlink to the real binary, which we
+ # place within /usr/lib[64]/pypy-1.* as pypy
+ #
+ # This ought to enable our pypy build to work with virtualenv
+ # (rhbz#742641)
+ install -m 755 %{goal_dir}/$ExeName %{buildroot}/%{pypyprefix}/$ExeName
+ ln -s %{pypyprefix}/$ExeName %{buildroot}/%{_bindir}
# The generated machine code doesn't need an executable stack, but
# one of the assembler files (gcmaptable.s) doesn't have the necessary
@@ -546,10 +538,11 @@ InstallPyPy() {
#
# I tried various approaches involving fixing the build, but the simplest
# approach is to postprocess the ELF file:
- execstack --clear-execstack %{buildroot}/%{_bindir}/$ExeName
+ execstack --clear-execstack %{buildroot}/%{pypyprefix}/$ExeName
}
mkdir -p %{buildroot}/%{_bindir}
+mkdir -p %{buildroot}/%{pypyprefix}
InstallPyPy pypy
@@ -570,7 +563,6 @@ InstallPyPy pypy-stackless
# PREFIX/lib-python/modified.2.5.2
# as given on the above page, i.e. it uses '-' not '.'
-mkdir -p %{buildroot}/%{pypyprefix}
cp -a lib-python %{buildroot}/%{pypyprefix}
cp -a lib_pypy %{buildroot}/%{pypyprefix}
@@ -859,6 +851,7 @@ rm -rf $RPM_BUILD_ROOT
%defattr(-,root,root,-)
%doc LICENSE README
%{_bindir}/pypy
+%{pypyprefix}/pypy
%files devel
%defattr(-,root,root,-)
@@ -875,6 +868,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Jan 31 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.7-4
+- fix an incompatibility with virtualenv (rhbz#742641)
+
* Sat Jan 14 2012 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 1.7-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
commit e21faf468c1f7001f4680cff5f09fca068fb0397
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Fri Jan 13 19:29:18 2012 -0600
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
diff --git a/pypy.spec b/pypy.spec
index d99d341..4bf93a4 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.7
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -875,6 +875,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Sat Jan 14 2012 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 1.7-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
+
* Fri Dec 16 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.7-2
- use --gcrootfinder=shadowstack, and use standard Fedora compilation flags,
with -Wno-unused (rhbz#666966 and rhbz#707707)
commit 416c353a67345f32fa7da698b18eef5ad1d1e77e
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Fri Dec 16 17:15:41 2011 -0500
1.7-2: use --gcrootfinder=shadowstack, and use standard Fedora compilation flags
* Fri Dec 16 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.7-2
- use --gcrootfinder=shadowstack, and use standard Fedora compilation flags,
with -Wno-unused (rhbz#666966 and rhbz#707707)
diff --git a/pypy.spec b/pypy.spec
index 1d6b6af..d99d341 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.7
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -110,6 +110,10 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# Easy way to enable/disable verbose logging:
%global verbose_logs 0
+# Forcibly use the shadow-stack option for detecting GC roots, rather than
+# relying on hacking up generated assembler with regexps:
+%global shadow_stack 1
+
# Easy way to turn off the selftests:
%global run_selftests 1
@@ -429,6 +433,22 @@ BuildPyPy() {
# plus all substrings from CFLAGS in the environment.
# This is used to generate a value for CFLAGS that's written into the Makefile
+ # How will we track garbage-collection roots in the generated code?
+ # http://pypy.readthedocs.org/en/latest/config/translation.gcrootfinder.html
+
+%if 0%{shadow_stack}
+ # This is the most portable option, and avoids a reliance on non-guaranteed
+ # behaviors within GCC's code generator: use an explicitly-maintained stack
+ # of root pointers:
+ %define gcrootfinder_options --gcrootfinder=shadowstack
+
+ export CFLAGS=$(echo "$RPM_OPT_FLAGS")
+
+%else
+ # Go with the default, which is "asmgcc"
+
+ %define gcrootfinder_options %{nil}
+
# https://bugzilla.redhat.com/show_bug.cgi?id=588941#c18
# The generated Makefile compiles the .c files into assembler (.s), rather
# than direct to .o It then post-processes this assembler to locate
@@ -443,6 +463,13 @@ BuildPyPy() {
# 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//')
+%endif
+
+ # The generated C code leads to many thousands of warnings of the form:
+ # warning: variable 'l_v26003' set but not used [-Wunused-but-set-variable]
+ # Suppress them:
+ export CFLAGS=$(echo "$CFLAGS" -Wno-unused)
+
# If we're already built the JIT-enabled "pypy", then use it for subsequent
# builds (of other configurations):
if test -x './pypy' ; then
@@ -466,6 +493,7 @@ BuildPyPy() {
--cflags="$CFLAGS" \
--batch \
--output=$ExeName \
+ %{gcrootfinder_options} \
$Options
echo "--------------------------------------------------------------"
@@ -847,6 +875,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Fri Dec 16 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.7-2
+- use --gcrootfinder=shadowstack, and use standard Fedora compilation flags,
+with -Wno-unused (rhbz#666966 and rhbz#707707)
+
* Mon Nov 21 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.7-1
- 1.7: refresh patch 0 (configuration) and patch 4 (readability of generated
code)
commit 4ef3f10721000d632a9dcfcfca05c7cde0f91b95
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Tue Nov 22 11:30:49 2011 -0500
1.7
* Mon Nov 21 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.7-1
- 1.7: refresh patch 0 (configuration) and patch 4 (readability of generated
code)
diff --git a/.gitignore b/.gitignore
index ecd135f..99af398 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
/pypy-1.4.1-src.tar.bz2
/pypy-1.5-src.tar.bz2
/release-1.6.tar.bz2
+/release-1.7.tar.bz2
diff --git a/config.patch b/config.patch
new file mode 100644
index 0000000..afd7a7d
--- /dev/null
+++ b/config.patch
@@ -0,0 +1,49 @@
+diff -up pypy-pypy-release-1.7/pypy/translator/platform/linux.py.configure-fedora pypy-pypy-release-1.7/pypy/translator/platform/linux.py
+--- pypy-pypy-release-1.7/pypy/translator/platform/linux.py.configure-fedora 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/platform/linux.py 2011-11-21 13:07:03.454240019 -0500
+@@ -1,15 +1,21 @@
+ """Support for Linux."""
+
++import os
+ import sys
+ from pypy.translator.platform.posix import BasePosix
+
++CFLAGS = ['-O3', '-pthread', '-fomit-frame-pointer',
++ '-Wall', '-Wno-unused']
++if os.environ.get('CFLAGS', None):
++ CFLAGS.extend(os.environ['CFLAGS'].split())
++CFLAGS = tuple(CFLAGS)
++
+ class BaseLinux(BasePosix):
+ name = "linux"
+
+ link_flags = ('-pthread',)
+ extra_libs = ('-lrt',)
+- cflags = ('-O3', '-pthread', '-fomit-frame-pointer',
+- '-Wall', '-Wno-unused')
++ cflags = CFLAGS
+ standalone_only = ()
+ shared_only = ('-fPIC',)
+ so_ext = 'so'
+@@ -26,13 +32,14 @@ class BaseLinux(BasePosix):
+ return self._pkg_config("libffi", "--libs-only-L",
+ ['/usr/lib/libffi'])
+
+- def library_dirs_for_libffi_a(self):
+- # places where we need to look for libffi.a
+- # XXX obscuuure! only look for libffi.a if run with translate.py
+- if 'translate' in sys.modules:
+- return self.library_dirs_for_libffi() + ['/usr/lib']
+- else:
+- return []
++ # Fedora, at least, has the shared version but not the static:
++ #def library_dirs_for_libffi_a(self):
++ # # places where we need to look for libffi.a
++ # # XXX obscuuure! only look for libffi.a if run with translate.py
++ # if 'translate' in sys.modules:
++ # return self.library_dirs_for_libffi() + ['/usr/lib']
++ # else:
++ # return []
+
+
+ class Linux(BaseLinux):
diff --git a/pypy-1.5-more-readable-c-code.patch b/more-readable-c-code.patch
similarity index 83%
rename from pypy-1.5-more-readable-c-code.patch
rename to more-readable-c-code.patch
index b7103e2..92d340f 100644
--- a/pypy-1.5-more-readable-c-code.patch
+++ b/more-readable-c-code.patch
@@ -1,15 +1,15 @@
-diff -up pypy-1.5-src/pypy/interpreter/pycode.py.more-readable-c-code pypy-1.5-src/pypy/interpreter/pycode.py
---- pypy-1.5-src/pypy/interpreter/pycode.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/interpreter/pycode.py 2011-05-02 14:28:33.942161002 -0400
+diff -up pypy-pypy-release-1.7/pypy/interpreter/pycode.py.more-readable-c-code pypy-pypy-release-1.7/pypy/interpreter/pycode.py
+--- pypy-pypy-release-1.7/pypy/interpreter/pycode.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/interpreter/pycode.py 2011-11-21 16:16:15.673463780 -0500
@@ -13,6 +13,7 @@ from pypy.interpreter.gateway import Non
- from pypy.interpreter.astcompiler.consts import (CO_OPTIMIZED,
+ from pypy.interpreter.astcompiler.consts import (
CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS, CO_NESTED,
CO_GENERATOR, CO_CONTAINSGLOBALS)
+from pypy.interpreter.pytraceback import offset2lineno
from pypy.rlib.rarithmetic import intmask
from pypy.rlib.debug import make_sure_not_resized
from pypy.rlib import jit
-@@ -80,6 +81,7 @@ class PyCode(eval.Code):
+@@ -81,6 +82,7 @@ class PyCode(eval.Code):
self.hidden_applevel = hidden_applevel
self.magic = magic
self._signature = cpython_code_signature(self)
@@ -17,7 +17,7 @@ diff -up pypy-1.5-src/pypy/interpreter/pycode.py.more-readable-c-code pypy-1.5-s
self._initialize()
def _initialize(self):
-@@ -396,3 +398,23 @@ class PyCode(eval.Code):
+@@ -397,3 +399,23 @@ class PyCode(eval.Code):
def repr(self, space):
return space.wrap(self.get_repr())
@@ -41,9 +41,9 @@ diff -up pypy-1.5-src/pypy/interpreter/pycode.py.more-readable-c-code pypy-1.5-s
+ # raise an IOError)
+ self._ensure_source()
+ return self._cached_source[linenum - 1]
-diff -up pypy-1.5-src/pypy/objspace/flow/model.py.more-readable-c-code pypy-1.5-src/pypy/objspace/flow/model.py
---- pypy-1.5-src/pypy/objspace/flow/model.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/objspace/flow/model.py 2011-05-02 14:28:33.942161002 -0400
+diff -up pypy-pypy-release-1.7/pypy/objspace/flow/model.py.more-readable-c-code pypy-pypy-release-1.7/pypy/objspace/flow/model.py
+--- pypy-pypy-release-1.7/pypy/objspace/flow/model.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/objspace/flow/model.py 2011-11-21 16:15:36.599466455 -0500
@@ -31,6 +31,120 @@ from pypy.tool.identity_dict import iden
__metaclass__ = type
@@ -268,10 +268,10 @@ diff -up pypy-1.5-src/pypy/objspace/flow/model.py.more-readable-c-code pypy-1.5-
result.append(copyop)
return result
newblock.operations = copyoplist(block.operations)
-diff -up pypy-1.5-src/pypy/objspace/flow/objspace.py.more-readable-c-code pypy-1.5-src/pypy/objspace/flow/objspace.py
---- pypy-1.5-src/pypy/objspace/flow/objspace.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/objspace/flow/objspace.py 2011-05-02 14:28:33.943161001 -0400
-@@ -313,7 +313,9 @@ class FlowObjSpace(ObjSpace):
+diff -up pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py.more-readable-c-code pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py
+--- pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py 2011-11-21 16:15:36.600466455 -0500
+@@ -315,7 +315,9 @@ class FlowObjSpace(ObjSpace):
def do_operation(self, name, *args_w):
spaceop = SpaceOperation(name, args_w, Variable())
if hasattr(self, 'executioncontext'): # not here during bootstrapping
@@ -282,9 +282,9 @@ diff -up pypy-1.5-src/pypy/objspace/flow/objspace.py.more-readable-c-code pypy-1
self.executioncontext.recorder.append(spaceop)
return spaceop.result
-diff -up pypy-1.5-src/pypy/objspace/flow/test/test_model.py.more-readable-c-code pypy-1.5-src/pypy/objspace/flow/test/test_model.py
---- pypy-1.5-src/pypy/objspace/flow/test/test_model.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/objspace/flow/test/test_model.py 2011-05-02 14:28:33.943161001 -0400
+diff -up pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py.more-readable-c-code pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py
+--- pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py 2011-11-21 16:15:36.600466455 -0500
@@ -119,3 +119,25 @@ def test_variable():
assert v2.renamed
assert v2.name.startswith("foobar_") and v2.name != v.name
@@ -311,9 +311,9 @@ diff -up pypy-1.5-src/pypy/objspace/flow/test/test_model.py.more-readable-c-code
+ assert cmp(oplocA, oplocB) < 0
+ assert cmp(oplocB, oplocA) > 0
+
-diff -up pypy-1.5-src/pypy/rpython/rtyper.py.more-readable-c-code pypy-1.5-src/pypy/rpython/rtyper.py
---- pypy-1.5-src/pypy/rpython/rtyper.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/rpython/rtyper.py 2011-05-02 14:28:33.943161001 -0400
+diff -up pypy-pypy-release-1.7/pypy/rpython/rtyper.py.more-readable-c-code pypy-pypy-release-1.7/pypy/rpython/rtyper.py
+--- pypy-pypy-release-1.7/pypy/rpython/rtyper.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/rpython/rtyper.py 2011-11-21 16:15:36.601466455 -0500
@@ -800,7 +800,7 @@ class HighLevelOp(object):
return vars
@@ -341,9 +341,9 @@ diff -up pypy-1.5-src/pypy/rpython/rtyper.py.more-readable-c-code pypy-1.5-src/p
if resulttype is None:
vresult.concretetype = Void
return None
-diff -up pypy-1.5-src/pypy/translator/backendopt/inline.py.more-readable-c-code pypy-1.5-src/pypy/translator/backendopt/inline.py
---- pypy-1.5-src/pypy/translator/backendopt/inline.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/backendopt/inline.py 2011-05-02 14:32:26.975161005 -0400
+diff -up pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py
+--- pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py 2011-11-21 16:15:36.601466455 -0500
@@ -4,6 +4,7 @@ from pypy.translator.simplify import get
from pypy.translator.unsimplify import copyvar
from pypy.objspace.flow.model import Variable, Constant, Block, Link
@@ -371,9 +371,9 @@ diff -up pypy-1.5-src/pypy/translator/backendopt/inline.py.more-readable-c-code
return result
def copy_block(self, block):
-diff -up pypy-1.5-src/pypy/translator/c/funcgen.py.more-readable-c-code pypy-1.5-src/pypy/translator/c/funcgen.py
---- pypy-1.5-src/pypy/translator/c/funcgen.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/c/funcgen.py 2011-05-02 14:28:33.944161001 -0400
+diff -up pypy-pypy-release-1.7/pypy/translator/c/funcgen.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/c/funcgen.py
+--- pypy-pypy-release-1.7/pypy/translator/c/funcgen.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/c/funcgen.py 2011-11-21 16:15:36.602466455 -0500
@@ -1,4 +1,6 @@
import sys
+import inspect
@@ -420,7 +420,7 @@ diff -up pypy-1.5-src/pypy/translator/c/funcgen.py.more-readable-c-code pypy-1.5
class FunctionCodeGenerator(object):
"""
Collects information about a function which we have to generate
-@@ -210,14 +244,57 @@ class FunctionCodeGenerator(object):
+@@ -207,14 +241,57 @@ class FunctionCodeGenerator(object):
def cfunction_body(self):
graph = self.graph
@@ -481,7 +481,7 @@ diff -up pypy-1.5-src/pypy/translator/c/funcgen.py.more-readable-c-code pypy-1.5
for line in self.gen_op(op):
yield line
if len(block.exits) == 0:
-@@ -309,7 +386,7 @@ class FunctionCodeGenerator(object):
+@@ -306,7 +383,7 @@ class FunctionCodeGenerator(object):
assignments.append((a2typename, dest, src))
for line in gen_assignments(assignments):
yield line
@@ -490,16 +490,16 @@ diff -up pypy-1.5-src/pypy/translator/c/funcgen.py.more-readable-c-code pypy-1.5
if link.target in self.innerloops:
loop = self.innerloops[link.target]
if link is loop.links[-1]: # link that ends a loop
-diff -up pypy-1.5-src/pypy/translator/c/test/test_genc.py.more-readable-c-code pypy-1.5-src/pypy/translator/c/test/test_genc.py
---- pypy-1.5-src/pypy/translator/c/test/test_genc.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/c/test/test_genc.py 2011-05-02 14:28:33.945161001 -0400
+diff -up pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py
+--- pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py 2011-11-21 16:15:36.602466455 -0500
@@ -1,4 +1,5 @@
import autopath, sys, os, py
+import re
from pypy.rpython.lltypesystem.lltype import *
from pypy.annotation import model as annmodel
from pypy.translator.translator import TranslationContext
-@@ -515,3 +516,130 @@ def test_inhibit_tail_call():
+@@ -532,3 +533,130 @@ def test_inhibit_tail_call():
else:
assert 0, "the call was not found in the C source"
assert 'PYPY_INHIBIT_TAIL_CALL();' in lines[i+1]
@@ -630,10 +630,10 @@ diff -up pypy-1.5-src/pypy/translator/c/test/test_genc.py.more-readable-c-code p
+ assert 'Here is a ' in c_fn_src
+ assert 'style comment within an RPython docstring' in c_fn_src
+
-diff -up pypy-1.5-src/pypy/translator/driver.py.more-readable-c-code pypy-1.5-src/pypy/translator/driver.py
---- pypy-1.5-src/pypy/translator/driver.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/driver.py 2011-05-02 14:28:33.945161001 -0400
-@@ -536,6 +536,7 @@ class TranslationDriver(SimpleTaskEngine
+diff -up pypy-pypy-release-1.7/pypy/translator/driver.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/driver.py
+--- pypy-pypy-release-1.7/pypy/translator/driver.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/driver.py 2011-11-21 16:15:36.603466455 -0500
+@@ -535,6 +535,7 @@ class TranslationDriver(SimpleTaskEngine
dstname = self.compute_exe_name() + '.staticdata.info'
shutil.copy(str(fname), str(dstname))
self.log.info('Static data info written to %s' % dstname)
@@ -641,9 +641,9 @@ diff -up pypy-1.5-src/pypy/translator/driver.py.more-readable-c-code pypy-1.5-sr
#
task_source_c = taskdef(task_source_c, ['database_c'], "Generating c source")
-diff -up pypy-1.5-src/pypy/translator/gensupp.py.more-readable-c-code pypy-1.5-src/pypy/translator/gensupp.py
---- pypy-1.5-src/pypy/translator/gensupp.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/gensupp.py 2011-05-02 14:33:31.026161001 -0400
+diff -up pypy-pypy-release-1.7/pypy/translator/gensupp.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/gensupp.py
+--- pypy-pypy-release-1.7/pypy/translator/gensupp.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/gensupp.py 2011-11-21 16:15:36.603466455 -0500
@@ -14,8 +14,8 @@ def ordered_blocks(graph):
allblocks = []
for block in graph.iterblocks():
@@ -655,9 +655,9 @@ diff -up pypy-1.5-src/pypy/translator/gensupp.py.more-readable-c-code pypy-1.5-s
else:
ofs = sys.maxint
# then we order by input variable name or value
-diff -up pypy-1.5-src/pypy/translator/interactive.py.more-readable-c-code pypy-1.5-src/pypy/translator/interactive.py
---- pypy-1.5-src/pypy/translator/interactive.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/interactive.py 2011-05-02 14:28:33.946161001 -0400
+diff -up pypy-pypy-release-1.7/pypy/translator/interactive.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/interactive.py
+--- pypy-pypy-release-1.7/pypy/translator/interactive.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/interactive.py 2011-11-21 16:15:36.604466454 -0500
@@ -138,7 +138,7 @@ class Translation(object):
def source_c(self, argtypes=None, **kwds):
self.update_options(argtypes, kwds)
@@ -667,9 +667,9 @@ diff -up pypy-1.5-src/pypy/translator/interactive.py.more-readable-c-code pypy-1
def source_cl(self, argtypes=None, **kwds):
self.update_options(argtypes, kwds)
-diff -up pypy-1.5-src/pypy/translator/llsupport/wrapper.py.more-readable-c-code pypy-1.5-src/pypy/translator/llsupport/wrapper.py
---- pypy-1.5-src/pypy/translator/llsupport/wrapper.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/llsupport/wrapper.py 2011-05-02 14:28:33.946161001 -0400
+diff -up pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py
+--- pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py 2011-11-21 16:15:36.604466454 -0500
@@ -59,6 +59,8 @@ def new_wrapper(func, translator, newnam
# "return result"
block = Block(wrapper_inputargs)
@@ -679,10 +679,10 @@ diff -up pypy-1.5-src/pypy/translator/llsupport/wrapper.py.more-readable-c-code
translator.update_call_graph(wgraph, graph, object())
translator.graphs.append(wgraph)
block.operations[:] = newops
-diff -up pypy-1.5-src/pypy/translator/simplify.py.more-readable-c-code pypy-1.5-src/pypy/translator/simplify.py
---- pypy-1.5-src/pypy/translator/simplify.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/simplify.py 2011-05-02 14:28:33.952161001 -0400
-@@ -298,7 +298,7 @@ def join_blocks(graph):
+diff -up pypy-pypy-release-1.7/pypy/translator/simplify.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/simplify.py
+--- pypy-pypy-release-1.7/pypy/translator/simplify.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/simplify.py 2011-11-21 16:15:36.605466454 -0500
+@@ -292,7 +292,7 @@ def join_blocks(graph):
return renaming.get(v, v)
def rename_op(op):
args = [rename(a) for a in op.args]
diff --git a/pypy-1.5-config.patch b/pypy-1.5-config.patch
deleted file mode 100644
index 82d8fc9..0000000
--- a/pypy-1.5-config.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-diff -up pypy-1.5-src/pypy/translator/platform/linux.py.configure-fedora pypy-1.5-src/pypy/translator/platform/linux.py
---- pypy-1.5-src/pypy/translator/platform/linux.py.configure-fedora 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/platform/linux.py 2011-04-30 18:59:24.041160978 -0400
-@@ -1,13 +1,18 @@
- """Support for Linux."""
--
-+import os
- from pypy.translator.platform.posix import BasePosix
-
-+CFLAGS = ['-O3', '-pthread', '-fomit-frame-pointer',
-+ '-Wall', '-Wno-unused']
-+if os.environ.get('CFLAGS', None):
-+ CFLAGS.extend(os.environ['CFLAGS'].split())
-+CFLAGS = tuple(CFLAGS)
-+
- class BaseLinux(BasePosix):
- name = "linux"
-
- link_flags = ('-pthread', '-lrt')
-- cflags = ('-O3', '-pthread', '-fomit-frame-pointer',
-- '-Wall', '-Wno-unused')
-+ cflags = CFLAGS
- standalone_only = ()
- shared_only = ('-fPIC',)
- so_ext = 'so'
-@@ -29,9 +34,10 @@ class Linux(BaseLinux):
- shared_only = () # it seems that on 32-bit linux, compiling with -fPIC
- # gives assembler that asmgcc is not happy about.
-
-- def library_dirs_for_libffi_a(self):
-- # places where we need to look for libffi.a
-- return self.library_dirs_for_libffi() + ['/usr/lib']
-+ # Fedora Linux, at least, has the shared version but not the static
-+ #def library_dirs_for_libffi_a(self):
-+ # # places where we need to look for libffi.a
-+ # return self.library_dirs_for_libffi() + ['/usr/lib']
-
-
- class Linux64(BaseLinux):
diff --git a/pypy.spec b/pypy.spec
index 2579860..1d6b6af 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 1.6
-Release: 7%{?dist}
+Version: 1.7
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -126,14 +126,14 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-1.6.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/get/release-%{version}.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
Source2: macros.pypy
# Edit a translator file for linux in order to configure our cflags and dynamic libffi
-Patch0: pypy-1.5-config.patch
+Patch0: config.patch
# By default, if built at a tty, the translation process renders a Mandelbrot
# set to indicate progress.
@@ -163,7 +163,7 @@ Patch3: pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
# http://codespeak.net/pipermail/pypy-dev/2010q4/006532.html
# TODO: get this into the upstream bug tracker, and finish inlining
# support (rhbz#666963)
-Patch4: pypy-1.5-more-readable-c-code.patch
+Patch4: more-readable-c-code.patch
# In my koji builds, /root/bin is in the PATH for some reason
# This leads to test_subprocess.py failing, due to "test_leaking_fds_on_error"
@@ -847,6 +847,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Nov 21 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.7-1
+- 1.7: refresh patch 0 (configuration) and patch 4 (readability of generated
+code)
+
* Tue Oct 4 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-7
- skip test_multiprocessing
diff --git a/sources b/sources
index 5660f1e..197491c 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-1189352effc5df7df84e6916b3b3eae3 release-1.6.tar.bz2
+fc22184c931ead98bdae9ec3e79595c2 release-1.7.tar.bz2
commit 953cba8f403df754b658c3310b0505c1ba5dc5a5
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Tue Oct 4 14:37:40 2011 -0400
1.6-7: skip test_multiprocessing
* Tue Oct 4 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-7
- skip test_multiprocessing
diff --git a/pypy.spec b/pypy.spec
index 90b3f88..2579860 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.6
-Release: 6%{?dist}
+Release: 7%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -728,6 +728,12 @@ CheckPyPy() {
# "strop" module doesn't exist for pypy yet:
SkipTest test_strop
+ # I'm seeing Koji builds hanging e.g.:
+ # http://koji.fedoraproject.org/koji/getfile?taskID=3386821&name=build.log
+ # The only test that seems to have timed out in that log is
+ # test_multiprocessing, so skip it for now:
+ SkipTest test_multiprocessing
+
echo "== Test names =="
cat testnames.txt
echo "================="
@@ -841,13 +847,15 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Oct 4 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-7
+- skip test_multiprocessing
+
* Tue Sep 13 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-6
- don't ship the emacs JIT-viewer on el5 and el6 (missing emacs-filesystem;
missing _emacs_bytecompile macro on el5)
* Mon Sep 12 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-5
- build using python26 on el5 (2.4 is too early)
-
* Thu Aug 25 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-4
- fix SkipTest function to avoid corrupting the name of "test_gdbm"
commit 2d36a5e81680be23c3e25e9f4bff4737a550687f
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Tue Sep 13 05:00:09 2011 -0400
don't ship the emacs JIT-viewer on el5 and el6
* Tue Sep 13 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-6
- don't ship the emacs JIT-viewer on el5 and el6 (missing emacs-filesystem;
missing _emacs_bytecompile macro on el5)
diff --git a/pypy.spec b/pypy.spec
index 9fc1462..90b3f88 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.6
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -100,6 +100,12 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# Should we build a "pypy-stackless" binary?
%global with_stackless 0
+# Should we build the emacs JIT-viewing mode?
+%if 0%{?rhel} == 5 || 0%{?rhel} == 6
+%global with_emacs 0
+%else
+%global with_emacs 1
+%endif
# Easy way to enable/disable verbose logging:
%global verbose_logs 0
@@ -257,7 +263,9 @@ BuildRequires: perl
BuildRequires: /usr/bin/execstack
# For byte-compiling the JIT-viewing mode:
+%if %{with_emacs}
BuildRequires: emacs
+%endif
# pypy is bundling these so we delete them in %%prep. I don't think they are
# needed unless we build pypy targetted at running on the jvm.
@@ -287,7 +295,9 @@ Summary: Run-time libraries used by PyPy implementations of Python
# We supply an emacs mode for the JIT viewer.
# (This doesn't bring in all of emacs, just the directory structure)
+%if %{with_emacs}
Requires: emacs-filesystem >= %{_emacs_version}
+%endif
%description libs
Libraries required by the various PyPy implementations of Python.
@@ -484,7 +494,9 @@ BuildPyPy \
"--stackless"
%endif
+%if %{with_emacs}
%{_emacs_bytecompile} pypy/jit/tool/pypytrace-mode.el
+%endif
%install
rm -rf $RPM_BUILD_ROOT
@@ -662,8 +674,10 @@ find \
# are acceptable.
# Install the JIT trace mode for Emacs:
+%if %{with_emacs}
mkdir -p %{buildroot}/%{_emacs_sitelispdir}
cp -a pypy/jit/tool/pypytrace-mode.el* %{buildroot}/%{_emacs_sitelispdir}
+%endif
# Install macros for rpm:
mkdir -p %{buildroot}/%{_sysconfdir}/rpm
@@ -802,8 +816,10 @@ rm -rf $RPM_BUILD_ROOT
%{pypyprefix}/lib-python/conftest.py*
%{pypyprefix}/lib_pypy/
%{pypyprefix}/site-packages/
+%if %{with_emacs}
%{_emacs_sitelispdir}/pypytrace-mode.el
%{_emacs_sitelispdir}/pypytrace-mode.elc
+%endif
%files
%defattr(-,root,root,-)
@@ -825,6 +841,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Sep 13 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-6
+- don't ship the emacs JIT-viewer on el5 and el6 (missing emacs-filesystem;
+missing _emacs_bytecompile macro on el5)
+
* Mon Sep 12 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-5
- build using python26 on el5 (2.4 is too early)
commit 009aeb1c2d9928be62c11bf154af0644f08816eb
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Mon Sep 12 21:01:16 2011 -0400
build using python26 on el5 (2.4 is too early)
diff --git a/pypy.spec b/pypy.spec
index b303232..9fc1462 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.6
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -213,10 +213,18 @@ Patch5: pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
BuildRequires: pypy
%global bootstrap_python_interp pypy
%else
+
+# Python 2.6 or later is needed, so on RHEL5 (2.4) we need to use the alternate
+# python26 rpm:
+%if 0%{?rhel} == 5
+BuildRequires: python26-devel
+%global bootstrap_python_interp python26
+%else
BuildRequires: python-devel
%global bootstrap_python_interp python
%endif
+%endif
# FIXME: I'm seeing errors like this in the logs:
@@ -817,6 +825,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Sep 12 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-5
+- build using python26 on el5 (2.4 is too early)
+
* Thu Aug 25 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-4
- fix SkipTest function to avoid corrupting the name of "test_gdbm"
commit 106cb91275756dab4a44a6e75cd090ea57c6d5a7
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Thu Aug 25 14:50:53 2011 -0400
fix SkipTest function to avoid corrupting the name of "test_gdbm"
diff --git a/pypy.spec b/pypy.spec
index 2c3e47c..b303232 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.6
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -666,7 +666,7 @@ topdir=$(pwd)
SkipTest() {
TEST_NAME=$1
- sed -i -e"s|$TEST_NAME||" testnames.txt
+ sed -i -e"s|^$TEST_NAME$||g" testnames.txt
}
CheckPyPy() {
@@ -817,6 +817,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Aug 25 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-4
+- fix SkipTest function to avoid corrupting the name of "test_gdbm"
+
* Thu Aug 25 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-3
- add rpm macros file to the devel subpackage (source 2)
- skip some tests that can't pass yet
commit afabd9d6bee5ad70b522d5d9c5745256ff46b827
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Thu Aug 25 11:58:55 2011 -0400
1.6-3: add rpm macros file to the devel subpackage; skip some tests
diff --git a/macros.pypy b/macros.pypy
new file mode 100644
index 0000000..5f40b6f
--- /dev/null
+++ b/macros.pypy
@@ -0,0 +1,5 @@
+%__pypy /usr/bin/pypy
+%pypy_sitelib %(%{__pypy} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
+%pypy_sitearch %(%{__pypy} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")
+%pypy_version %(%{__pypy} -c "import sys; sys.stdout.write(sys.version[:3])")
+%pypydir %{_builddir}/pypy-%{name}-%{version}-%{release}
diff --git a/pypy.spec b/pypy.spec
index 3280ff9..2c3e47c 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.6
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -122,6 +122,10 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# Source and patches:
Source0: https://bitbucket.org/pypy/pypy/get/release-1.6.tar.bz2
+# Supply various useful RPM macros for building python modules against pypy:
+# __pypy, pypy_sitelib, pypy_sitearch
+Source2: macros.pypy
+
# Edit a translator file for linux in order to configure our cflags and dynamic libffi
Patch0: pypy-1.5-config.patch
@@ -653,13 +657,16 @@ find \
mkdir -p %{buildroot}/%{_emacs_sitelispdir}
cp -a pypy/jit/tool/pypytrace-mode.el* %{buildroot}/%{_emacs_sitelispdir}
+# Install macros for rpm:
+mkdir -p %{buildroot}/%{_sysconfdir}/rpm
+install -m 644 %{SOURCE2} %{buildroot}/%{_sysconfdir}/rpm
+
%check
topdir=$(pwd)
SkipTest() {
- # Append the given test name to TESTS_TO_SKIP
TEST_NAME=$1
- TESTS_TO_SKIP="$TESTS_TO_SKIP $TEST_NAME"
+ sed -i -e"s|$TEST_NAME||" testnames.txt
}
CheckPyPy() {
@@ -686,6 +693,19 @@ CheckPyPy() {
"from test.regrtest import findtests; print '\n'.join(findtests())"
) > testnames.txt
+ # Skip some tests:
+ # "audioop" doesn't exist for pypy yet:
+ SkipTest test_audioop
+
+ # The gdb CPython hooks haven't been ported to cpyext:
+ SkipTest test_gdb
+
+ # hotshot relies heavily on _hotshot, which doesn't exist:
+ SkipTest test_hotshot
+
+ # "strop" module doesn't exist for pypy yet:
+ SkipTest test_strop
+
echo "== Test names =="
cat testnames.txt
echo "================="
@@ -786,6 +806,7 @@ rm -rf $RPM_BUILD_ROOT
%defattr(-,root,root,-)
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
+%config(noreplace) %{_sysconfdir}/rpm/macros.pypy
%if 0%{with_stackless}
%files stackless
@@ -796,6 +817,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Aug 25 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-3
+- add rpm macros file to the devel subpackage (source 2)
+- skip some tests that can't pass yet
+
* Sat Aug 20 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-2
- work around test_subprocess failure seen in koji (patch 5)
commit 1df5c3e618c5f2bcbdbe44f329039dfffc1cd79e
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Sat Aug 20 11:59:48 2011 -0400
work around test_subprocess failure seen in koji (patch 5)
diff --git a/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch b/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
new file mode 100644
index 0000000..eb6f324
--- /dev/null
+++ b/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
@@ -0,0 +1,12 @@
+diff -up pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py.non-readable-path pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py
+--- pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py.non-readable-path 2011-08-20 11:46:31.410646024 -0400
++++ pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py 2011-08-20 11:46:39.421645476 -0400
+@@ -570,7 +570,7 @@ class ProcessTestCase(BaseTestCase):
+ for i in range(1024):
+ # Windows raises IOError. Others raise OSError.
+ with self.assertRaises(EnvironmentError) as c:
+- subprocess.Popen(['nonexisting_i_hope'],
++ subprocess.Popen(['/usr/bin/nonexisting_i_hope'],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ if c.exception.errno != errno.ENOENT: # ignore "no such file"
diff --git a/pypy.spec b/pypy.spec
index c3faabb..3280ff9 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.6
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -155,6 +155,16 @@ Patch3: pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
# support (rhbz#666963)
Patch4: pypy-1.5-more-readable-c-code.patch
+# In my koji builds, /root/bin is in the PATH for some reason
+# This leads to test_subprocess.py failing, due to "test_leaking_fds_on_error"
+# trying every dir in PATH for "nonexisting_i_hope", which leads to it raising
+# OSError: [Errno 13] Permission denied
+# when it tries to read /root/bin, rather than raising "No such file"
+#
+# Work around this by specifying an absolute path for the non-existant
+# executable
+# Not yet sent upstream
+Patch5: pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
# Build-time requirements:
@@ -318,6 +328,7 @@ sed -i \
%patch4 -p1 -b .more-readable-c-code
+%patch5 -p1
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
@@ -785,6 +796,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Sat Aug 20 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-2
+- work around test_subprocess failure seen in koji (patch 5)
+
* Thu Aug 18 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-1
- 1.6
- rewrite the %%check section, introducing per-test timeouts
commit 3a2c2ec86de943a3dbdc8de5608e6a8f79c48a85
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Fri Aug 19 19:04:38 2011 -0400
pypy-1.6-1
- 1.6
- rewrite the %check section, introducing per-test timeouts
diff --git a/.gitignore b/.gitignore
index 017cf34..ecd135f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
/pypy-1.4.1-src.tar.bz2
/pypy-1.5-src.tar.bz2
+/release-1.6.tar.bz2
diff --git a/pypy.spec b/pypy.spec
index 0c2c717..c3faabb 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 1.5
-Release: 2%{?dist}
+Version: 1.6
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -104,6 +104,9 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# Easy way to enable/disable verbose logging:
%global verbose_logs 0
+# Easy way to turn off the selftests:
+%global run_selftests 1
+
%global pypyprefix %{_libdir}/pypy-%{version}
%global pylibver 2.7
@@ -117,7 +120,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: http://pypy.org/download/pypy-%{version}-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/get/release-1.6.tar.bz2
# Edit a translator file for linux in order to configure our cflags and dynamic libffi
Patch0: pypy-1.5-config.patch
@@ -218,9 +221,17 @@ BuildRequires: openssl-devel
BuildRequires: valgrind-devel
%endif
+%if %{run_selftests}
# Used by the selftests, though not by the build:
BuildRequires: gc-devel
+# For use in the selftests, for recording stats:
+BuildRequires: time
+
+# For use in the selftests, for imposing a per-test timeout:
+BuildRequires: perl
+%endif
+
BuildRequires: /usr/bin/execstack
# For byte-compiling the JIT-viewing mode:
@@ -289,7 +300,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-%{version}-src
+%setup -q -n pypy-pypy-release-%{version}
%patch0 -p1 -b .configure-fedora
%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
@@ -656,445 +667,47 @@ CheckPyPy() {
pushd %{goal_dir}
- # Gather a list of tests to skip, due to known failures
- # TODO: report these failures to pypy upstream
- # See also rhbz#666967 and rhbz#666969
- TESTS_TO_SKIP=""
-
- # Test failures relating to missing codecs
- # Hopefully when pypy merges to 2.7 support we'll gain these via a
- # refreshed stdlib:
- # test_codecencodings_cn:
- # all tests fail, with one of
- # unknown encoding: gb18030
- # unknown encoding: gb2312
- # unknown encoding: gbk
- SkipTest test_codecencodings_cn
-
- # test_codecencodings_hk:
- # all tests fail, with:
- # unknown encoding: big5hkscs
- SkipTest test_codecencodings_hk
-
- # test_codecencodings_jp:
- # all tests fail, with one of:
- # unknown encoding: cp932
- # unknown encoding: euc_jisx0213
- # unknown encoding: euc_jp
- # unknown encoding: shift_jis
- # unknown encoding: shift_jisx0213
- SkipTest test_codecencodings_jp
-
- # test_codecencodings_kr:
- # all tests fail, with one of:
- # unknown encoding: cp949
- # unknown encoding: euc_kr
- # unknown encoding: johab
- SkipTest test_codecencodings_kr
-
- # test_codecencodings_tw:
- # all tests fail, with:
- # unknown encoding: big5
- SkipTest test_codecencodings_tw
-
- # test_multibytecodec:
- # 14 failures out of 15, due to:
- # unknown encoding: euc-kr
- # unknown encoding: gb2312
- # unknown encoding: jisx0213
- # unknown encoding: cp949
- # unknown encoding: iso2022-jp
- # unknown encoding: gb18030
- SkipTest test_multibytecodec
-
- #
- # Other failures:
- #
- # test_asynchat:
- # seems to hang on this test, within test_line_terminator
- SkipTest test_asynchat
-
- # test_audioop:
- # test test_audioop crashed -- <type 'exceptions.ImportError'>: No module named audioop
- # Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/regrtest.py", line 874, in runtest_inner
- # the_package = __import__(abstest, globals(), locals(), [])
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_audioop.py", line 1, in <module>
- # import audioop
- # ImportError: No module named audioop
- SkipTest test_audioop
-
- # test_capi:
- # RPython traceback:
- # RPython traceback:
- # File "implement.c", line 243013, in _PyObject_New
- # File "implement_1.c", line 31707, in _PyObject_NewVar
- # File "implement.c", line 217060, in from_ref
- # Fatal RPython error: AssertionError
- SkipTest test_capi
-
- # test_compiler:
- # 4 errors out of 13:
- # testSourceCodeEncodingsError
- # testWith
- # testWithAss
- # testYieldExpr
- SkipTest test_compiler
-
- # test_ctypes:
- # failures=17, errors=20, out of 132 tests
- SkipTest test_ctypes
-
- # test_distutils:
- # Warning -- os.environ was modified by test_distutils
- # test test_distutils failed -- multiple errors occurred; run in verbose mode for details
- SkipTest test_distutils
-
- # test_frozen:
- # TestFailed: import __hello__ failed:No module named __hello__
- SkipTest test_frozen
-
- # test_gc:
- # test test_gc crashed -- <type 'exceptions.AttributeError'>: 'module' object has no attribute 'get_debug'
- SkipTest test_gc
-
- # test_gdb:
- # test test_gdb crashed -- <type 'exceptions.KeyError'>: 'PY_CFLAGS'
- SkipTest test_gdb
-
- # test_generators:
- # **********************************************************************
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
- # Failed example:
- # del g; gc_collect()
- # Expected:
- # exiting
- # Got nothing
- # **********************************************************************
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
- # Failed example:
- # del g; gc_collect()
- # Expected:
- # exiting
- # Got nothing
- # **********************************************************************
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
- # Failed example:
- # del g; gc_collect()
- # Expected:
- # finally
- # Got nothing
- # **********************************************************************
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
- # Failed example:
- # sys.stderr.getvalue().startswith(
- # "Exception RuntimeError: 'generator ignored GeneratorExit' in "
- # )
- # Expected:
- # True
- # Got:
- # False
- # **********************************************************************
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.refleaks
- # Failed example:
- # try:
- # sys.stderr = StringIO.StringIO()
- # class Leaker:
- # def __del__(self):
- # raise RuntimeError
- # l = Leaker()
- # del l
- # gc_collect()
- # err = sys.stderr.getvalue().strip()
- # err.startswith(
- # "Exception RuntimeError: RuntimeError() in "
- # )
- # err.endswith("> ignored")
- # len(err.splitlines())
- # finally:
- # sys.stderr = old
- # Expected:
- # True
- # True
- # 1
- # Got:
- # False
- # False
- # 0
- # **********************************************************************
- # 2 items had failures:
- # 4 of 107 in test.test_generators.__test__.coroutine
- # 1 of 11 in test.test_generators.__test__.refleaks
- # ***Test Failed*** 5 failures.
- # test test_generators failed -- 5 of 294 doctests failed
- SkipTest test_generators
-
- # test_getargs2:
- # test test_getargs2 failed -- multiple errors occurred; run in verbose mode for details
- SkipTest test_getargs2
-
- # test_hotshot:
- # test test_hotshot crashed -- <type 'exceptions.ImportError'>: No module named _hotshot
- SkipTest test_hotshot
-
- # test_io:
- # test test_io failed -- multiple errors occurred; run in verbose mode for details
- SkipTest test_io
-
- # test_ioctl:
- # Failing in Koji with dist-f15 with:
- # ======================================================================
- # FAIL: test_ioctl (test.test_ioctl.IoctlTests)
- # ----------------------------------------------------------------------
- # Traceback (most recent call last):
- # File "/usr/lib/pypy-1.4.1/lib-python/2.5.2/test/test_ioctl.py", line 25, in test_ioctl
- # self.assert_(rpgrp in ids, "%s not in %s" % (rpgrp, ids))
- # AssertionError: 0 not in (8304, 17737)
- # ======================================================================
- # FAIL: test_ioctl_mutate (test.test_ioctl.IoctlTests)
- # ----------------------------------------------------------------------
- # Traceback (most recent call last):
- # File "/usr/lib/pypy-1.4.1/lib-python/2.5.2/test/test_ioctl.py", line 35, in test_ioctl_mutate
- # self.assert_(rpgrp in ids, "%s not in %s" % (rpgrp, ids))
- # AssertionError: 0 not in (8304, 17737)
- # ----------------------------------------------------------------------
- SkipTest test_ioctl
-
- # test_iterlen:
- # 24 failures out of 25, apparently all due to TypeError
- SkipTest test_iterlen
-
- # test_multiprocessing:
- # test test_multiprocessing failed -- multiple errors occurred; run in verbose mode for details
- SkipTest test_multiprocessing
-
- # test_module:
- # test test_module failed -- Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_module.py", line 81, in test_clear_dict_in_ref_cycle
- # self.assertEqual(destroyed, [1])
- # AssertionError: Lists differ: [] != [1]
- # Second list contains 1 additional elements.
- # First extra element 0:
- # 1
- # - []
- # + [1]
- # ? +
- SkipTest test_module
-
- # test_parser:
- # 12 failures out of 15
- SkipTest test_parser
-
- # test_platform:
- # Koji builds show:
- # test test_platform failed -- errors occurred in test.test_platform.PlatformTest
- SkipTest test_platform
-
- # test_posix:
- # test test_posix failed -- Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 361, in test_getcwd_long_pathnames
- # _create_and_do_getcwd(dirname)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 351, in _create_and_do_getcwd
- # _create_and_do_getcwd(dirname, current_path_length + len(dirname) + 1)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 351, in _create_and_do_getcwd
- # _create_and_do_getcwd(dirname, current_path_length + len(dirname) + 1)
- # [...repeats...]
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 351, in _create_and_do_getcwd
- # _create_and_do_getcwd(dirname, current_path_length + len(dirname) + 1)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 356, in _create_and_do_getcwd
- # self.assertEqual(e.errno, expected_errno)
- # AssertionError: 36 != 34
- SkipTest test_posix
-
- # test_readline:
- # test test_readline failed -- Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_readline.py", line 16, in testHistoryUpdates
- # readline.clear_history()
- # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/readline.py", line 277, in clear_history
- # del self.get_reader().history[:]
- # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/readline.py", line 186, in get_reader
- # console = UnixConsole(self.f_in, self.f_out, encoding=ENCODING)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/unix_console.py", line 103, in __init__
- # self._clear = _my_getstr("clear")
- # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/unix_console.py", line 45, in _my_getstr
- # "terminal doesn't have the required '%s' capability"%cap
- # InvalidTerminal: terminal doesn't have the required 'clear' capability
- SkipTest test_readline
-
- # test_scope:
- # test test_scope failed -- Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_scope.py", line 437, in testLeaks
- # self.assertEqual(Foo.count, 0)
- # AssertionError: 100 != 0
- SkipTest test_scope
-
- # test_socket:
- # testSockName can fail in Koji with:
- # my_ip_addr = socket.gethostbyname(socket.gethostname())
- # gaierror: (-3, 'Temporary failure in name resolution')
- SkipTest test_socket
-
- # test_sort:
- # some failures
- SkipTest test_sort
-
- # test_sqlite:
- # 3 of the sqlite3.test.dbapi.ExtensionTests raise:
- # ProgrammingError: Incomplete statement ''
- SkipTest test_sqlite
-
- # test_strop:
- # test test_strop crashed -- <type 'exceptions.ImportError'>: No module named strop
- SkipTest test_strop
-
- # test_structmembers:
- # test test_structmembers failed -- multiple errors occurred; run in verbose mode for details
- SkipTest test_structmembers
-
- # test_subprocess:
- # debug: WARNING: library path not found, using compiled-in sys.path and sys.prefix will be unset
- # 'import site' failed
- # .
- # this bit of output is from a test of stdout in a different process ...
- # /builddir/build/BUILD/pypy-1.5-src/lib_pypy/ctypes_support.py:26: RuntimeWarning: C function without declared arguments called
- # return standard_c_lib.__errno_location()
- # debug: WARNING: library path not found, using compiled-in sys.path and sys.prefix will be unset
- # 'import site' failed
- # .
- # this bit of output is from a test of stdout in a different process ...
- # test test_subprocess failed -- multiple errors occurred; run in verbose mode for details
- SkipTest test_subprocess
-
- # test_symtable:
- # test test_symtable crashed -- <type 'exceptions.ImportError'>: No module named _symtable
- SkipTest test_symtable
-
- # test_sys_settrace:
- # test test_sys_settrace failed -- Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 334, in test_13_genexp
- # self.run_test(generator_example)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 280, in run_test
- # self.run_and_compare(func, func.events)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 277, in run_and_compare
- # tracer.events, events)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 269, in compare_events
- # [str(x) for x in events])))
- # AssertionError: events did not match expectation:
- # (0, 'call')
- # (2, 'line')
- # (-6, 'call')
- # (-5, 'line')
- # (-4, 'line')
- # (-4, 'return')
- # - (-4, 'call')
- # - (-4, 'exception')
- # - (-1, 'line')
- # - (-1, 'return')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (5, 'return')
- SkipTest test_sys_settrace
-
- # test_tempfile:
- # test test_tempfile failed -- multiple errors occurred; run in verbose mode for details
- SkipTest test_tempfile
-
- # test_thread
- # Koji build appears to hang here
- SkipTest test_thread
-
- # test_traceback:
- # works when run standalone; failures seen when run as part of a suite
- SkipTest test_traceback
-
- # test_uuid:
- # ======================================================================
- # ERROR: test_ifconfig_getnode (test.test_uuid.TestUUID)
- # ----------------------------------------------------------------------
- # Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_uuid.py", line 306, in test_ifconfig_getnode
- # node = uuid._ifconfig_getnode()
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/uuid.py", line 326, in _ifconfig_getnode
- # ip_addr = socket.gethostbyname(socket.gethostname())
- # gaierror: [Errno -3] Temporary failure in name resolution
- # ----------------------------------------------------------------------
- # Ran 14 tests in 0.369s
- # FAILED (errors=1)
- SkipTest test_uuid
-
- # test_zipimport_support:
- # ======================================================================
- # ERROR: test_doctest_main_issue4197 (test.test_zipimport_support.ZipSupportTests)
- # ----------------------------------------------------------------------
- # Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_zipimport_support.py", line 194, in test_doctest_main_issue4197
- # exit_code, data = run_python(script_name)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/script_helper.py", line 80, in run_python
- # p = spawn_python(*args, **kwargs)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/script_helper.py", line 66, in spawn_python
- # **kwargs)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 672, in __init__
- # errread, errwrite)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 1206, in _execute_child
- # raise child_exception
- # OSError: [Errno 13] Permission denied
- # ======================================================================
- # ERROR: test_pdb_issue4201 (test.test_zipimport_support.ZipSupportTests)
- # ----------------------------------------------------------------------
- # Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_zipimport_support.py", line 221, in test_pdb_issue4201
- # p = spawn_python(script_name)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/script_helper.py", line 66, in spawn_python
- # **kwargs)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 672, in __init__
- # errread, errwrite)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 1206, in _execute_child
- # raise child_exception
- # OSError: [Errno 13] Permission denied
- # ----------------------------------------------------------------------
- # Ran 4 tests in 0.726s
- # FAILED (errors=2)
- SkipTest test_zipimport_support
-
- # test_zlib:
- # failure seen in Koji, not sure of reason why:
- # test test_zlib failed -- Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.4.1-src/lib-python/2.5.2/test/test_zlib.py", line 72, in test_baddecompressobj
- # self.assertRaises(ValueError, zlib.decompressobj, 0)
- # AssertionError: ValueError not raised
- SkipTest test_zlib
-
- %if 0%{use_self_when_building}
- # Patch 3 prioritizes the installed copy of pypy's libraries over the
- # build copy.
- # This leads to test failures of test_pep263 and test_tarfile
- # For now, suppress these when building using pypy itself:
- SkipTest test_pep263 # on-disk encoding issues
- SkipTest test_tarfile # permissions issues
- %endif
-
- # Run the built binary through the selftests
- # "-w" : re-run failed tests in verbose mode
- time ./$ExeName -m test.regrtest -w -x $TESTS_TO_SKIP
+ # I'm seeing numerous cases where tests seem to hang, or fail unpredictably
+ # So we'll run each test in its own process, with a timeout
+
+ # Use regrtest to explicitly list all tests:
+ ( ./$ExeName -c \
+ "from test.regrtest import findtests; print '\n'.join(findtests())"
+ ) > testnames.txt
+
+ echo "== Test names =="
+ cat testnames.txt
+ echo "================="
+
+ echo "" > failed-tests.txt
+
+ for TestName in $(cat testnames.txt) ; do
+
+ echo "===================" $TestName "===================="
+
+ # Use /usr/bin/time (rather than the shell "time" builtin) to gather
+ # info on the process (time/CPU/memory). This passes on the exit
+ # status of the underlying command
+ #
+ # Use perl's alarm command to impose a timeout
+ # 900 seconds is 15 minutes per test.
+ # If a test hangs, that test should get terminated, allowing the build
+ # to continue.
+ #
+ # Invoke pypy on test.regrtest to run the specific test suite
+ # verbosely
+ #
+ # For now, || true, so that any failures don't halt the build:
+ ( /usr/bin/time \
+ perl -e 'alarm shift @ARGV; exec @ARGV' 900 \
+ ./$ExeName -m test.regrtest -v $TestName ) \
+ || (echo $TestName >> failed-tests.txt) \
+ || true
+ done
+
+ echo "== Failed tests =="
+ cat failed-tests.txt
+ echo "================="
popd
@@ -1124,12 +737,14 @@ CheckPyPy() {
echo "--------------------------------------------------------------"
}
+%if %{run_selftests}
CheckPyPy pypy
%if 0%{with_stackless}
CheckPyPy pypy-stackless
%endif
+%endif # run_selftests
%clean
@@ -1142,7 +757,6 @@ rm -rf $RPM_BUILD_ROOT
%dir %{pypyprefix}
%dir %{pypyprefix}/lib-python
-%{pypyprefix}/lib-python/TODO
%{pypyprefix}/lib-python/stdlib-version.txt
%{pypyprefix}/lib-python/%{pylibver}/
%{pypyprefix}/lib-python/modified-%{pylibver}/
@@ -1171,6 +785,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Aug 18 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-1
+- 1.6
+- rewrite the %%check section, introducing per-test timeouts
+
* Tue Aug 2 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.5-2
- add pypytrace-mode.el to the pypy-libs subpackage, for viewing JIT trace
logs in emacs
diff --git a/sources b/sources
index a047407..5660f1e 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-cb9ada2c50666318c3a2863da1fbe487 pypy-1.5-src.tar.bz2
+1189352effc5df7df84e6916b3b3eae3 release-1.6.tar.bz2
commit 1feef4d56b6572b03fd805e50ad8f6e43900cfac
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Wed Aug 3 13:02:57 2011 -0400
add pypytrace-mode.el to the pypy-libs subpackage, for viewing JIT trace logs in emacs
diff --git a/pypy.spec b/pypy.spec
index b4705c1..0c2c717 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.5
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -223,6 +223,9 @@ BuildRequires: gc-devel
BuildRequires: /usr/bin/execstack
+# For byte-compiling the JIT-viewing mode:
+BuildRequires: emacs
+
# pypy is bundling these so we delete them in %%prep. I don't think they are
# needed unless we build pypy targetted at running on the jvm.
#BuildRequires: jna
@@ -248,6 +251,11 @@ CPU architecture.
%package libs
Group: Development/Languages
Summary: Run-time libraries used by PyPy implementations of Python
+
+# We supply an emacs mode for the JIT viewer.
+# (This doesn't bring in all of emacs, just the directory structure)
+Requires: emacs-filesystem >= %{_emacs_version}
+
%description libs
Libraries required by the various PyPy implementations of Python.
@@ -442,6 +450,8 @@ BuildPyPy \
"--stackless"
%endif
+%{_emacs_bytecompile} pypy/jit/tool/pypytrace-mode.el
+
%install
rm -rf $RPM_BUILD_ROOT
@@ -617,6 +627,10 @@ find \
# but given that the objective is to preserve a copy of the source code, those
# are acceptable.
+# Install the JIT trace mode for Emacs:
+mkdir -p %{buildroot}/%{_emacs_sitelispdir}
+cp -a pypy/jit/tool/pypytrace-mode.el* %{buildroot}/%{_emacs_sitelispdir}
+
%check
topdir=$(pwd)
@@ -1135,6 +1149,8 @@ rm -rf $RPM_BUILD_ROOT
%{pypyprefix}/lib-python/conftest.py*
%{pypyprefix}/lib_pypy/
%{pypyprefix}/site-packages/
+%{_emacs_sitelispdir}/pypytrace-mode.el
+%{_emacs_sitelispdir}/pypytrace-mode.elc
%files
%defattr(-,root,root,-)
@@ -1155,6 +1171,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Aug 2 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.5-2
+- add pypytrace-mode.el to the pypy-libs subpackage, for viewing JIT trace
+logs in emacs
+
* Mon May 2 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.5-1
- 1.5
commit 3d2cef177d26ff303a5be984f912e2b8d4266b0d
Author: Dan Horák <dan(a)danny.cz>
Date: Wed May 11 10:15:52 2011 +0200
fix build on non-jit arches
Build on non-jit arch like s390 fails with
[translation:info] Translating target as defined by targetpypystandalone
[platform:msg] Setting platform to 'host' cc=None
Traceback (most recent call last):
File "translate.py", line 322, in <module>
main()
File "translate.py", line 208, in main
targetspec_dic, translateconfig, config, args = parse_options_and_load_target()
File "translate.py", line 176, in parse_options_and_load_target
targetspec_dic['handle_config'](config, translateconfig)
File "targetpypystandalone.py", line 109, in handle_config
raise Exception("You have to specify the --opt level.\n"
Exception: You have to specify the --opt level.
Try --opt=2 or --opt=jit, or equivalently -O2 or -Ojit .
diff --git a/pypy.spec b/pypy.spec
index 1a651e0..b4705c1 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -431,6 +431,8 @@ BuildPyPy \
pypy \
%if 0%{with_jit}
"-Ojit" \
+%else
+ "-O2" \
%endif
%{nil}
commit 169de85aca1a527ea42ef102aa32a40ba1740168
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Mon May 2 14:46:32 2011 -0400
Rebase to 1.5 (rhbz#701121)
Update patches:
patch 0: pypy-1.4-config.patch -> pypy-1.5-config.patch
patch 4: pypy-1.4.1-more-readable-c-code.patch -> pypy-1.5-more-readable-c-code.patch
Remove references to *.inl files, no longer present
Add the following tests to the skip list:
test_audioop, test_capi, test_distutils, test_gc, test_gdb, test_generators,
test_getargs2, test_hotshot, test_io, test_multiprocessing, test_posix,
test_readline, test_scope, test_strop, test_structmembers, test_subprocess,
test_symtable, test_sys_settrace, test_tempfile, test_thread, test_uuid,
test_zipimport_support
Add a couple of text files to the payload (TODO, stdlib-version.txt)
diff --git a/.gitignore b/.gitignore
index 2878978..017cf34 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
/pypy-1.4.1-src.tar.bz2
+/pypy-1.5-src.tar.bz2
diff --git a/pypy-1.4-config.patch b/pypy-1.5-config.patch
similarity index 69%
rename from pypy-1.4-config.patch
rename to pypy-1.5-config.patch
index 0b82ac8..82d8fc9 100644
--- a/pypy-1.4-config.patch
+++ b/pypy-1.5-config.patch
@@ -1,9 +1,10 @@
-Index: pypy-1.4/pypy/translator/platform/linux.py
-===================================================================
---- pypy-1.4.orig/pypy/translator/platform/linux.py
-+++ pypy-1.4/pypy/translator/platform/linux.py
-@@ -3,17 +3,22 @@ import py, os
- from pypy.translator.platform import _run_subprocess
+diff -up pypy-1.5-src/pypy/translator/platform/linux.py.configure-fedora pypy-1.5-src/pypy/translator/platform/linux.py
+--- pypy-1.5-src/pypy/translator/platform/linux.py.configure-fedora 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/platform/linux.py 2011-04-30 18:59:24.041160978 -0400
+@@ -1,13 +1,18 @@
+ """Support for Linux."""
+-
++import os
from pypy.translator.platform.posix import BasePosix
+CFLAGS = ['-O3', '-pthread', '-fomit-frame-pointer',
@@ -22,16 +23,10 @@ Index: pypy-1.4/pypy/translator/platform/linux.py
standalone_only = ()
shared_only = ('-fPIC',)
so_ext = 'so'
- so_prefixes = ('lib', '')
--
-+
- def _args_for_shared(self, args):
- return ['-shared'] + args
-
-@@ -29,9 +34,10 @@ class BaseLinux(BasePosix):
- class Linux(BaseLinux):
+@@ -29,9 +34,10 @@ class Linux(BaseLinux):
shared_only = () # it seems that on 32-bit linux, compiling with -fPIC
# gives assembler that asmgcc is not happy about.
+
- def library_dirs_for_libffi_a(self):
- # places where we need to look for libffi.a
- return self.library_dirs_for_libffi() + ['/usr/lib']
diff --git a/pypy-1.4.1-more-readable-c-code.patch b/pypy-1.5-more-readable-c-code.patch
similarity index 81%
rename from pypy-1.4.1-more-readable-c-code.patch
rename to pypy-1.5-more-readable-c-code.patch
index 45fa534..b7103e2 100644
--- a/pypy-1.4.1-more-readable-c-code.patch
+++ b/pypy-1.5-more-readable-c-code.patch
@@ -1,7 +1,7 @@
-diff -r cd083843b67a pypy/interpreter/pycode.py
---- a/pypy/interpreter/pycode.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/interpreter/pycode.py Wed Jan 05 16:14:35 2011 -0500
-@@ -14,6 +14,7 @@
+diff -up pypy-1.5-src/pypy/interpreter/pycode.py.more-readable-c-code pypy-1.5-src/pypy/interpreter/pycode.py
+--- pypy-1.5-src/pypy/interpreter/pycode.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/interpreter/pycode.py 2011-05-02 14:28:33.942161002 -0400
+@@ -13,6 +13,7 @@ from pypy.interpreter.gateway import Non
from pypy.interpreter.astcompiler.consts import (CO_OPTIMIZED,
CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS, CO_NESTED,
CO_GENERATOR, CO_CONTAINSGLOBALS)
@@ -9,7 +9,7 @@ diff -r cd083843b67a pypy/interpreter/pycode.py
from pypy.rlib.rarithmetic import intmask
from pypy.rlib.debug import make_sure_not_resized
from pypy.rlib import jit
-@@ -81,6 +82,7 @@
+@@ -80,6 +81,7 @@ class PyCode(eval.Code):
self.hidden_applevel = hidden_applevel
self.magic = magic
self._signature = cpython_code_signature(self)
@@ -17,10 +17,10 @@ diff -r cd083843b67a pypy/interpreter/pycode.py
self._initialize()
def _initialize(self):
-@@ -403,3 +405,25 @@
+@@ -396,3 +398,23 @@ class PyCode(eval.Code):
+
def repr(self, space):
return space.wrap(self.get_repr())
- repr.unwrap_spec = ['self', ObjSpace]
+
+ def get_linenum_for_offset(self, offset):
+ # Given a bytecode offset, return a 1-based index into the lines of the
@@ -41,12 +41,10 @@ diff -r cd083843b67a pypy/interpreter/pycode.py
+ # raise an IOError)
+ self._ensure_source()
+ return self._cached_source[linenum - 1]
-+
-+
-diff -r cd083843b67a pypy/objspace/flow/model.py
---- a/pypy/objspace/flow/model.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/objspace/flow/model.py Wed Jan 05 16:14:35 2011 -0500
-@@ -31,6 +31,120 @@
+diff -up pypy-1.5-src/pypy/objspace/flow/model.py.more-readable-c-code pypy-1.5-src/pypy/objspace/flow/model.py
+--- pypy-1.5-src/pypy/objspace/flow/model.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/objspace/flow/model.py 2011-05-02 14:28:33.942161002 -0400
+@@ -31,6 +31,120 @@ from pypy.tool.identity_dict import iden
__metaclass__ = type
@@ -167,7 +165,7 @@ diff -r cd083843b67a pypy/objspace/flow/model.py
class FunctionGraph(object):
__slots__ = ['startblock', 'returnblock', 'exceptblock', '__dict__']
-@@ -94,6 +208,21 @@
+@@ -94,6 +208,21 @@ class FunctionGraph(object):
seen[block] = True
stack += block.exits[::-1]
@@ -189,7 +187,7 @@ diff -r cd083843b67a pypy/objspace/flow/model.py
def iterlinks(self):
block = self.startblock
seen = {block: True}
-@@ -183,14 +312,14 @@
+@@ -183,14 +312,14 @@ class Block(object):
self.exits = [] # list of Link(s)
def at(self):
@@ -207,7 +205,7 @@ diff -r cd083843b67a pypy/objspace/flow/model.py
else:
if (not self.exits) and len(self.inputargs) == 1:
txt = "return block"
-@@ -245,6 +374,21 @@
+@@ -245,6 +374,21 @@ class Block(object):
from pypy.translator.tool.graphpage import try_show
try_show(self)
@@ -229,7 +227,7 @@ diff -r cd083843b67a pypy/objspace/flow/model.py
class Variable(object):
__slots__ = ["_name", "_nr", "concretetype"]
-@@ -331,13 +475,15 @@
+@@ -331,13 +475,15 @@ class WrapException(Exception):
class SpaceOperation(object):
@@ -248,7 +246,7 @@ diff -r cd083843b67a pypy/objspace/flow/model.py
def __eq__(self, other):
return (self.__class__ is other.__class__ and
-@@ -352,8 +498,9 @@
+@@ -352,8 +498,9 @@ class SpaceOperation(object):
return hash((self.opname,tuple(self.args),self.result))
def __repr__(self):
@@ -260,7 +258,7 @@ diff -r cd083843b67a pypy/objspace/flow/model.py
class Atom(object):
def __init__(self, name):
-@@ -448,8 +595,7 @@
+@@ -427,8 +574,7 @@ def copygraph(graph, shallow=False, varm
for op in oplist:
copyop = SpaceOperation(op.opname,
[copyvar(v) for v in op.args],
@@ -270,10 +268,10 @@ diff -r cd083843b67a pypy/objspace/flow/model.py
result.append(copyop)
return result
newblock.operations = copyoplist(block.operations)
-diff -r cd083843b67a pypy/objspace/flow/objspace.py
---- a/pypy/objspace/flow/objspace.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/objspace/flow/objspace.py Wed Jan 05 16:14:35 2011 -0500
-@@ -310,7 +310,9 @@
+diff -up pypy-1.5-src/pypy/objspace/flow/objspace.py.more-readable-c-code pypy-1.5-src/pypy/objspace/flow/objspace.py
+--- pypy-1.5-src/pypy/objspace/flow/objspace.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/objspace/flow/objspace.py 2011-05-02 14:28:33.943161001 -0400
+@@ -313,7 +313,9 @@ class FlowObjSpace(ObjSpace):
def do_operation(self, name, *args_w):
spaceop = SpaceOperation(name, args_w, Variable())
if hasattr(self, 'executioncontext'): # not here during bootstrapping
@@ -284,10 +282,10 @@ diff -r cd083843b67a pypy/objspace/flow/objspace.py
self.executioncontext.recorder.append(spaceop)
return spaceop.result
-diff -r cd083843b67a pypy/objspace/flow/test/test_model.py
---- a/pypy/objspace/flow/test/test_model.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/objspace/flow/test/test_model.py Wed Jan 05 16:14:35 2011 -0500
-@@ -132,3 +132,25 @@
+diff -up pypy-1.5-src/pypy/objspace/flow/test/test_model.py.more-readable-c-code pypy-1.5-src/pypy/objspace/flow/test/test_model.py
+--- pypy-1.5-src/pypy/objspace/flow/test/test_model.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/objspace/flow/test/test_model.py 2011-05-02 14:28:33.943161001 -0400
+@@ -119,3 +119,25 @@ def test_variable():
assert v2.renamed
assert v2.name.startswith("foobar_") and v2.name != v.name
assert v2.name.split('_', 1)[1].isdigit()
@@ -313,10 +311,10 @@ diff -r cd083843b67a pypy/objspace/flow/test/test_model.py
+ assert cmp(oplocA, oplocB) < 0
+ assert cmp(oplocB, oplocA) > 0
+
-diff -r cd083843b67a pypy/rpython/rtyper.py
---- a/pypy/rpython/rtyper.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/rpython/rtyper.py Wed Jan 05 16:14:35 2011 -0500
-@@ -800,7 +800,7 @@
+diff -up pypy-1.5-src/pypy/rpython/rtyper.py.more-readable-c-code pypy-1.5-src/pypy/rpython/rtyper.py
+--- pypy-1.5-src/pypy/rpython/rtyper.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/rpython/rtyper.py 2011-05-02 14:28:33.943161001 -0400
+@@ -800,7 +800,7 @@ class HighLevelOp(object):
return vars
def genop(self, opname, args_v, resulttype=None):
@@ -325,7 +323,7 @@ diff -r cd083843b67a pypy/rpython/rtyper.py
def gendirectcall(self, ll_function, *args_v):
return self.llops.gendirectcall(ll_function, *args_v)
-@@ -935,7 +935,7 @@
+@@ -935,7 +935,7 @@ class LowLevelOpList(list):
v.concretetype))
return v
@@ -334,7 +332,7 @@ diff -r cd083843b67a pypy/rpython/rtyper.py
try:
for v in args_v:
v.concretetype
-@@ -944,7 +944,7 @@
+@@ -944,7 +944,7 @@ class LowLevelOpList(list):
" and pass its result to genop(),"
" never hop.args_v directly.")
vresult = Variable()
@@ -343,18 +341,18 @@ diff -r cd083843b67a pypy/rpython/rtyper.py
if resulttype is None:
vresult.concretetype = Void
return None
-diff -r cd083843b67a pypy/translator/backendopt/inline.py
---- a/pypy/translator/backendopt/inline.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/backendopt/inline.py Wed Jan 05 16:14:35 2011 -0500
-@@ -4,6 +4,7 @@
+diff -up pypy-1.5-src/pypy/translator/backendopt/inline.py.more-readable-c-code pypy-1.5-src/pypy/translator/backendopt/inline.py
+--- pypy-1.5-src/pypy/translator/backendopt/inline.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/backendopt/inline.py 2011-05-02 14:32:26.975161005 -0400
+@@ -4,6 +4,7 @@ from pypy.translator.simplify import get
from pypy.translator.unsimplify import copyvar
from pypy.objspace.flow.model import Variable, Constant, Block, Link
from pypy.objspace.flow.model import SpaceOperation, c_last_exception
+from pypy.objspace.flow.model import OperationLoc
from pypy.objspace.flow.model import FunctionGraph
- from pypy.objspace.flow.model import traverse, mkentrymap, checkgraph
+ from pypy.objspace.flow.model import mkentrymap, checkgraph
from pypy.annotation import model as annmodel
-@@ -231,6 +232,7 @@
+@@ -231,6 +232,7 @@ class BaseInliner(object):
self.varmap = {}
self._copied_blocks = {}
self.op = block.operations[index_operation]
@@ -362,7 +360,7 @@ diff -r cd083843b67a pypy/translator/backendopt/inline.py
self.graph_to_inline = self.get_graph_from_op(self.op)
self.exception_guarded = False
if (block.exitswitch == c_last_exception and
-@@ -297,7 +299,9 @@
+@@ -290,7 +292,9 @@ class BaseInliner(object):
def copy_operation(self, op):
args = [self.get_new_name(arg) for arg in op.args]
@@ -373,9 +371,9 @@ diff -r cd083843b67a pypy/translator/backendopt/inline.py
return result
def copy_block(self, block):
-diff -r cd083843b67a pypy/translator/c/funcgen.py
---- a/pypy/translator/c/funcgen.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/c/funcgen.py Wed Jan 05 16:14:35 2011 -0500
+diff -up pypy-1.5-src/pypy/translator/c/funcgen.py.more-readable-c-code pypy-1.5-src/pypy/translator/c/funcgen.py
+--- pypy-1.5-src/pypy/translator/c/funcgen.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/c/funcgen.py 2011-05-02 14:28:33.944161001 -0400
@@ -1,4 +1,6 @@
import sys
+import inspect
@@ -383,7 +381,7 @@ diff -r cd083843b67a pypy/translator/c/funcgen.py
from pypy.translator.c.support import USESLOTS # set to False if necessary while refactoring
from pypy.translator.c.support import cdecl
from pypy.translator.c.support import llvalue_from_constant, gen_assignments
-@@ -22,6 +24,38 @@
+@@ -22,6 +24,38 @@ LOCALVAR = 'l_%s'
KEEP_INLINED_GRAPHS = False
@@ -422,7 +420,7 @@ diff -r cd083843b67a pypy/translator/c/funcgen.py
class FunctionCodeGenerator(object):
"""
Collects information about a function which we have to generate
-@@ -210,14 +244,57 @@
+@@ -210,14 +244,57 @@ class FunctionCodeGenerator(object):
def cfunction_body(self):
graph = self.graph
@@ -483,7 +481,7 @@ diff -r cd083843b67a pypy/translator/c/funcgen.py
for line in self.gen_op(op):
yield line
if len(block.exits) == 0:
-@@ -310,7 +387,7 @@
+@@ -309,7 +386,7 @@ class FunctionCodeGenerator(object):
assignments.append((a2typename, dest, src))
for line in gen_assignments(assignments):
yield line
@@ -492,16 +490,16 @@ diff -r cd083843b67a pypy/translator/c/funcgen.py
if link.target in self.innerloops:
loop = self.innerloops[link.target]
if link is loop.links[-1]: # link that ends a loop
-diff -r cd083843b67a pypy/translator/c/test/test_genc.py
---- a/pypy/translator/c/test/test_genc.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/c/test/test_genc.py Wed Jan 05 16:14:35 2011 -0500
+diff -up pypy-1.5-src/pypy/translator/c/test/test_genc.py.more-readable-c-code pypy-1.5-src/pypy/translator/c/test/test_genc.py
+--- pypy-1.5-src/pypy/translator/c/test/test_genc.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/c/test/test_genc.py 2011-05-02 14:28:33.945161001 -0400
@@ -1,4 +1,5 @@
import autopath, sys, os, py
+import re
from pypy.rpython.lltypesystem.lltype import *
from pypy.annotation import model as annmodel
from pypy.translator.translator import TranslationContext
-@@ -498,3 +499,130 @@
+@@ -515,3 +516,130 @@ def test_inhibit_tail_call():
else:
assert 0, "the call was not found in the C source"
assert 'PYPY_INHIBIT_TAIL_CALL();' in lines[i+1]
@@ -632,10 +630,10 @@ diff -r cd083843b67a pypy/translator/c/test/test_genc.py
+ assert 'Here is a ' in c_fn_src
+ assert 'style comment within an RPython docstring' in c_fn_src
+
-diff -r cd083843b67a pypy/translator/driver.py
---- a/pypy/translator/driver.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/driver.py Wed Jan 05 16:14:35 2011 -0500
-@@ -539,6 +539,7 @@
+diff -up pypy-1.5-src/pypy/translator/driver.py.more-readable-c-code pypy-1.5-src/pypy/translator/driver.py
+--- pypy-1.5-src/pypy/translator/driver.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/driver.py 2011-05-02 14:28:33.945161001 -0400
+@@ -536,6 +536,7 @@ class TranslationDriver(SimpleTaskEngine
dstname = self.compute_exe_name() + '.staticdata.info'
shutil.copy(str(fname), str(dstname))
self.log.info('Static data info written to %s' % dstname)
@@ -643,12 +641,12 @@ diff -r cd083843b67a pypy/translator/driver.py
#
task_source_c = taskdef(task_source_c, ['database_c'], "Generating c source")
-diff -r cd083843b67a pypy/translator/gensupp.py
---- a/pypy/translator/gensupp.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/gensupp.py Wed Jan 05 16:14:35 2011 -0500
-@@ -16,8 +16,8 @@
- def visit(block):
- if isinstance(block, Block):
+diff -up pypy-1.5-src/pypy/translator/gensupp.py.more-readable-c-code pypy-1.5-src/pypy/translator/gensupp.py
+--- pypy-1.5-src/pypy/translator/gensupp.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/gensupp.py 2011-05-02 14:33:31.026161001 -0400
+@@ -14,8 +14,8 @@ def ordered_blocks(graph):
+ allblocks = []
+ for block in graph.iterblocks():
# first we order by offset in the code string
- if block.operations:
- ofs = block.operations[0].offset
@@ -657,10 +655,10 @@ diff -r cd083843b67a pypy/translator/gensupp.py
else:
ofs = sys.maxint
# then we order by input variable name or value
-diff -r cd083843b67a pypy/translator/interactive.py
---- a/pypy/translator/interactive.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/interactive.py Wed Jan 05 16:14:35 2011 -0500
-@@ -138,7 +138,7 @@
+diff -up pypy-1.5-src/pypy/translator/interactive.py.more-readable-c-code pypy-1.5-src/pypy/translator/interactive.py
+--- pypy-1.5-src/pypy/translator/interactive.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/interactive.py 2011-05-02 14:28:33.946161001 -0400
+@@ -138,7 +138,7 @@ class Translation(object):
def source_c(self, argtypes=None, **kwds):
self.update_options(argtypes, kwds)
self.ensure_backend('c')
@@ -669,10 +667,10 @@ diff -r cd083843b67a pypy/translator/interactive.py
def source_cl(self, argtypes=None, **kwds):
self.update_options(argtypes, kwds)
-diff -r cd083843b67a pypy/translator/llsupport/wrapper.py
---- a/pypy/translator/llsupport/wrapper.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/llsupport/wrapper.py Wed Jan 05 16:14:35 2011 -0500
-@@ -59,6 +59,8 @@
+diff -up pypy-1.5-src/pypy/translator/llsupport/wrapper.py.more-readable-c-code pypy-1.5-src/pypy/translator/llsupport/wrapper.py
+--- pypy-1.5-src/pypy/translator/llsupport/wrapper.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/llsupport/wrapper.py 2011-05-02 14:28:33.946161001 -0400
+@@ -59,6 +59,8 @@ def new_wrapper(func, translator, newnam
# "return result"
block = Block(wrapper_inputargs)
wgraph = FunctionGraph('pyfn_' + (newname or func.func_name), block)
@@ -681,10 +679,10 @@ diff -r cd083843b67a pypy/translator/llsupport/wrapper.py
translator.update_call_graph(wgraph, graph, object())
translator.graphs.append(wgraph)
block.operations[:] = newops
-diff -r cd083843b67a pypy/translator/simplify.py
---- a/pypy/translator/simplify.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/simplify.py Wed Jan 05 16:14:35 2011 -0500
-@@ -294,7 +294,7 @@
+diff -up pypy-1.5-src/pypy/translator/simplify.py.more-readable-c-code pypy-1.5-src/pypy/translator/simplify.py
+--- pypy-1.5-src/pypy/translator/simplify.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/simplify.py 2011-05-02 14:28:33.952161001 -0400
+@@ -298,7 +298,7 @@ def join_blocks(graph):
return renaming.get(v, v)
def rename_op(op):
args = [rename(a) for a in op.args]
diff --git a/pypy.spec b/pypy.spec
index c69893a..1a651e0 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 1.4.1
-Release: 10%{?dist}
+Version: 1.5
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -105,7 +105,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%global verbose_logs 0
%global pypyprefix %{_libdir}/pypy-%{version}
-%global pylibver 2.5.2
+%global pylibver 2.7
# We refer to this subdir of the source tree in a few places during the build:
%global goal_dir pypy/translator/goal
@@ -120,7 +120,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Source0: http://pypy.org/download/pypy-%{version}-src.tar.bz2
# Edit a translator file for linux in order to configure our cflags and dynamic libffi
-Patch0: pypy-1.4-config.patch
+Patch0: pypy-1.5-config.patch
# By default, if built at a tty, the translation process renders a Mandelbrot
# set to indicate progress.
@@ -150,7 +150,7 @@ Patch3: pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
# http://codespeak.net/pipermail/pypy-dev/2010q4/006532.html
# TODO: get this into the upstream bug tracker, and finish inlining
# support (rhbz#666963)
-Patch4: pypy-1.4.1-more-readable-c-code.patch
+Patch4: pypy-1.5-more-readable-c-code.patch
# Build-time requirements:
@@ -584,7 +584,7 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
# 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 include/*.inl %{buildroot}/%{pypy_include_dir}
+cp include/*.h %{buildroot}/%{pypy_include_dir}
# Capture the RPython source code files from the build within the debuginfo
@@ -698,6 +698,25 @@ CheckPyPy() {
# seems to hang on this test, within test_line_terminator
SkipTest test_asynchat
+ # test_audioop:
+ # test test_audioop crashed -- <type 'exceptions.ImportError'>: No module named audioop
+ # Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/regrtest.py", line 874, in runtest_inner
+ # the_package = __import__(abstest, globals(), locals(), [])
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_audioop.py", line 1, in <module>
+ # import audioop
+ # ImportError: No module named audioop
+ SkipTest test_audioop
+
+ # test_capi:
+ # RPython traceback:
+ # RPython traceback:
+ # File "implement.c", line 243013, in _PyObject_New
+ # File "implement_1.c", line 31707, in _PyObject_NewVar
+ # File "implement.c", line 217060, in from_ref
+ # Fatal RPython error: AssertionError
+ SkipTest test_capi
+
# test_compiler:
# 4 errors out of 13:
# testSourceCodeEncodingsError
@@ -710,10 +729,102 @@ CheckPyPy() {
# failures=17, errors=20, out of 132 tests
SkipTest test_ctypes
+ # test_distutils:
+ # Warning -- os.environ was modified by test_distutils
+ # test test_distutils failed -- multiple errors occurred; run in verbose mode for details
+ SkipTest test_distutils
+
# test_frozen:
# TestFailed: import __hello__ failed:No module named __hello__
SkipTest test_frozen
+ # test_gc:
+ # test test_gc crashed -- <type 'exceptions.AttributeError'>: 'module' object has no attribute 'get_debug'
+ SkipTest test_gc
+
+ # test_gdb:
+ # test test_gdb crashed -- <type 'exceptions.KeyError'>: 'PY_CFLAGS'
+ SkipTest test_gdb
+
+ # test_generators:
+ # **********************************************************************
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
+ # Failed example:
+ # del g; gc_collect()
+ # Expected:
+ # exiting
+ # Got nothing
+ # **********************************************************************
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
+ # Failed example:
+ # del g; gc_collect()
+ # Expected:
+ # exiting
+ # Got nothing
+ # **********************************************************************
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
+ # Failed example:
+ # del g; gc_collect()
+ # Expected:
+ # finally
+ # Got nothing
+ # **********************************************************************
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
+ # Failed example:
+ # sys.stderr.getvalue().startswith(
+ # "Exception RuntimeError: 'generator ignored GeneratorExit' in "
+ # )
+ # Expected:
+ # True
+ # Got:
+ # False
+ # **********************************************************************
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.refleaks
+ # Failed example:
+ # try:
+ # sys.stderr = StringIO.StringIO()
+ # class Leaker:
+ # def __del__(self):
+ # raise RuntimeError
+ # l = Leaker()
+ # del l
+ # gc_collect()
+ # err = sys.stderr.getvalue().strip()
+ # err.startswith(
+ # "Exception RuntimeError: RuntimeError() in "
+ # )
+ # err.endswith("> ignored")
+ # len(err.splitlines())
+ # finally:
+ # sys.stderr = old
+ # Expected:
+ # True
+ # True
+ # 1
+ # Got:
+ # False
+ # False
+ # 0
+ # **********************************************************************
+ # 2 items had failures:
+ # 4 of 107 in test.test_generators.__test__.coroutine
+ # 1 of 11 in test.test_generators.__test__.refleaks
+ # ***Test Failed*** 5 failures.
+ # test test_generators failed -- 5 of 294 doctests failed
+ SkipTest test_generators
+
+ # test_getargs2:
+ # test test_getargs2 failed -- multiple errors occurred; run in verbose mode for details
+ SkipTest test_getargs2
+
+ # test_hotshot:
+ # test test_hotshot crashed -- <type 'exceptions.ImportError'>: No module named _hotshot
+ SkipTest test_hotshot
+
+ # test_io:
+ # test test_io failed -- multiple errors occurred; run in verbose mode for details
+ SkipTest test_io
+
# test_ioctl:
# Failing in Koji with dist-f15 with:
# ======================================================================
@@ -737,6 +848,23 @@ CheckPyPy() {
# 24 failures out of 25, apparently all due to TypeError
SkipTest test_iterlen
+ # test_multiprocessing:
+ # test test_multiprocessing failed -- multiple errors occurred; run in verbose mode for details
+ SkipTest test_multiprocessing
+
+ # test_module:
+ # test test_module failed -- Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_module.py", line 81, in test_clear_dict_in_ref_cycle
+ # self.assertEqual(destroyed, [1])
+ # AssertionError: Lists differ: [] != [1]
+ # Second list contains 1 additional elements.
+ # First extra element 0:
+ # 1
+ # - []
+ # + [1]
+ # ? +
+ SkipTest test_module
+
# test_parser:
# 12 failures out of 15
SkipTest test_parser
@@ -746,6 +874,44 @@ CheckPyPy() {
# test test_platform failed -- errors occurred in test.test_platform.PlatformTest
SkipTest test_platform
+ # test_posix:
+ # test test_posix failed -- Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 361, in test_getcwd_long_pathnames
+ # _create_and_do_getcwd(dirname)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 351, in _create_and_do_getcwd
+ # _create_and_do_getcwd(dirname, current_path_length + len(dirname) + 1)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 351, in _create_and_do_getcwd
+ # _create_and_do_getcwd(dirname, current_path_length + len(dirname) + 1)
+ # [...repeats...]
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 351, in _create_and_do_getcwd
+ # _create_and_do_getcwd(dirname, current_path_length + len(dirname) + 1)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 356, in _create_and_do_getcwd
+ # self.assertEqual(e.errno, expected_errno)
+ # AssertionError: 36 != 34
+ SkipTest test_posix
+
+ # test_readline:
+ # test test_readline failed -- Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_readline.py", line 16, in testHistoryUpdates
+ # readline.clear_history()
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/readline.py", line 277, in clear_history
+ # del self.get_reader().history[:]
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/readline.py", line 186, in get_reader
+ # console = UnixConsole(self.f_in, self.f_out, encoding=ENCODING)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/unix_console.py", line 103, in __init__
+ # self._clear = _my_getstr("clear")
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/unix_console.py", line 45, in _my_getstr
+ # "terminal doesn't have the required '%s' capability"%cap
+ # InvalidTerminal: terminal doesn't have the required 'clear' capability
+ SkipTest test_readline
+
+ # test_scope:
+ # test test_scope failed -- Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_scope.py", line 437, in testLeaks
+ # self.assertEqual(Foo.count, 0)
+ # AssertionError: 100 != 0
+ SkipTest test_scope
+
# test_socket:
# testSockName can fail in Koji with:
# my_ip_addr = socket.gethostbyname(socket.gethostname())
@@ -761,10 +927,138 @@ CheckPyPy() {
# ProgrammingError: Incomplete statement ''
SkipTest test_sqlite
+ # test_strop:
+ # test test_strop crashed -- <type 'exceptions.ImportError'>: No module named strop
+ SkipTest test_strop
+
+ # test_structmembers:
+ # test test_structmembers failed -- multiple errors occurred; run in verbose mode for details
+ SkipTest test_structmembers
+
+ # test_subprocess:
+ # debug: WARNING: library path not found, using compiled-in sys.path and sys.prefix will be unset
+ # 'import site' failed
+ # .
+ # this bit of output is from a test of stdout in a different process ...
+ # /builddir/build/BUILD/pypy-1.5-src/lib_pypy/ctypes_support.py:26: RuntimeWarning: C function without declared arguments called
+ # return standard_c_lib.__errno_location()
+ # debug: WARNING: library path not found, using compiled-in sys.path and sys.prefix will be unset
+ # 'import site' failed
+ # .
+ # this bit of output is from a test of stdout in a different process ...
+ # test test_subprocess failed -- multiple errors occurred; run in verbose mode for details
+ SkipTest test_subprocess
+
+ # test_symtable:
+ # test test_symtable crashed -- <type 'exceptions.ImportError'>: No module named _symtable
+ SkipTest test_symtable
+
+ # test_sys_settrace:
+ # test test_sys_settrace failed -- Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 334, in test_13_genexp
+ # self.run_test(generator_example)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 280, in run_test
+ # self.run_and_compare(func, func.events)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 277, in run_and_compare
+ # tracer.events, events)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 269, in compare_events
+ # [str(x) for x in events])))
+ # AssertionError: events did not match expectation:
+ # (0, 'call')
+ # (2, 'line')
+ # (-6, 'call')
+ # (-5, 'line')
+ # (-4, 'line')
+ # (-4, 'return')
+ # - (-4, 'call')
+ # - (-4, 'exception')
+ # - (-1, 'line')
+ # - (-1, 'return')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (5, 'return')
+ SkipTest test_sys_settrace
+
+ # test_tempfile:
+ # test test_tempfile failed -- multiple errors occurred; run in verbose mode for details
+ SkipTest test_tempfile
+
+ # test_thread
+ # Koji build appears to hang here
+ SkipTest test_thread
+
# test_traceback:
# works when run standalone; failures seen when run as part of a suite
SkipTest test_traceback
+ # test_uuid:
+ # ======================================================================
+ # ERROR: test_ifconfig_getnode (test.test_uuid.TestUUID)
+ # ----------------------------------------------------------------------
+ # Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_uuid.py", line 306, in test_ifconfig_getnode
+ # node = uuid._ifconfig_getnode()
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/uuid.py", line 326, in _ifconfig_getnode
+ # ip_addr = socket.gethostbyname(socket.gethostname())
+ # gaierror: [Errno -3] Temporary failure in name resolution
+ # ----------------------------------------------------------------------
+ # Ran 14 tests in 0.369s
+ # FAILED (errors=1)
+ SkipTest test_uuid
+
+ # test_zipimport_support:
+ # ======================================================================
+ # ERROR: test_doctest_main_issue4197 (test.test_zipimport_support.ZipSupportTests)
+ # ----------------------------------------------------------------------
+ # Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_zipimport_support.py", line 194, in test_doctest_main_issue4197
+ # exit_code, data = run_python(script_name)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/script_helper.py", line 80, in run_python
+ # p = spawn_python(*args, **kwargs)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/script_helper.py", line 66, in spawn_python
+ # **kwargs)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 672, in __init__
+ # errread, errwrite)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 1206, in _execute_child
+ # raise child_exception
+ # OSError: [Errno 13] Permission denied
+ # ======================================================================
+ # ERROR: test_pdb_issue4201 (test.test_zipimport_support.ZipSupportTests)
+ # ----------------------------------------------------------------------
+ # Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_zipimport_support.py", line 221, in test_pdb_issue4201
+ # p = spawn_python(script_name)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/script_helper.py", line 66, in spawn_python
+ # **kwargs)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 672, in __init__
+ # errread, errwrite)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 1206, in _execute_child
+ # raise child_exception
+ # OSError: [Errno 13] Permission denied
+ # ----------------------------------------------------------------------
+ # Ran 4 tests in 0.726s
+ # FAILED (errors=2)
+ SkipTest test_zipimport_support
+
# test_zlib:
# failure seen in Koji, not sure of reason why:
# test test_zlib failed -- Traceback (most recent call last):
@@ -832,6 +1126,8 @@ rm -rf $RPM_BUILD_ROOT
%dir %{pypyprefix}
%dir %{pypyprefix}/lib-python
+%{pypyprefix}/lib-python/TODO
+%{pypyprefix}/lib-python/stdlib-version.txt
%{pypyprefix}/lib-python/%{pylibver}/
%{pypyprefix}/lib-python/modified-%{pylibver}/
%{pypyprefix}/lib-python/conftest.py*
@@ -847,7 +1143,6 @@ rm -rf $RPM_BUILD_ROOT
%defattr(-,root,root,-)
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
-%{pypy_include_dir}/*.inl
%if 0%{with_stackless}
%files stackless
@@ -858,6 +1153,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon May 2 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.5-1
+- 1.5
+
* Wed Apr 20 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-10
- build a /usr/bin/pypy (but without the JIT compiler) on architectures that
don't support the JIT, so that they do at least have something that runs
diff --git a/sources b/sources
index 90f34be..a047407 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-ebbbb156b1eb842e9e65d909ed5f9f6d pypy-1.4.1-src.tar.bz2
+cb9ada2c50666318c3a2863da1fbe487 pypy-1.5-src.tar.bz2
commit 3ca83f1944c99711e69be7a733f36a976d1fcec2
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Sat Apr 30 18:24:07 2011 -0400
Fix the build on architectures that the JIT doesn't support
- build a /usr/bin/pypy (but without the JIT compiler) on architectures that
don't support the JIT, so that they do at least have something that runs
diff --git a/pypy.spec b/pypy.spec
index ca09b94..c69893a 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.4.1
-Release: 9%{?dist}
+Release: 10%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -74,7 +74,10 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# [Timer] Total: --- 5215.3 s
-# Should we build a "pypy" binary? (with jit)
+# We will build a "pypy" binary.
+#
+# Unfortunately, the JIT support is only available on some architectures.
+#
# pypy-1.4/pypy/jit/backend/detect_cpu.py:getcpuclassname currently supports the
# following options:
# 'i386', 'x86'
@@ -82,6 +85,11 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# 'x86_64'
# 'cli'
# 'llvm'
+#
+# We will only build with JIT support on those architectures, and build without
+# it on the other archs. The resulting binary will typically be slower than
+# CPython for the latter case.
+#
%ifarch %{ix86} x86_64
# FIXME: is there a better way of expressing "intel" here?
%global with_jit 1
@@ -225,8 +233,16 @@ BuildRequires: /usr/bin/execstack
Requires: pypy-libs = %{version}-%{release}
%description
-PyPy's implementation of Python, featuring a Just-In-Time compiler, and various
-optimized implementations of the standard types (strings, dictionaries, etc)
+PyPy's implementation of Python, featuring a Just-In-Time compiler on some CPU
+architectures, and various optimized implementations of the standard types
+(strings, dictionaries, etc)
+
+%if 0%{with_jit}
+This build of PyPy has JIT-compilation enabled.
+%else
+This build of PyPy has JIT-compilation disabled, as it is not supported on this
+CPU architecture.
+%endif
%package libs
@@ -411,11 +427,12 @@ BuildPyPy() {
popd
}
-%if 0%{with_jit}
BuildPyPy \
pypy \
- "-Ojit"
+%if 0%{with_jit}
+ "-Ojit" \
%endif
+ %{nil}
%if 0%{with_stackless}
BuildPyPy \
@@ -448,9 +465,7 @@ InstallPyPy() {
mkdir -p %{buildroot}/%{_bindir}
-%if 0%{with_jit}
InstallPyPy pypy
-%endif
%if 0%{with_stackless}
InstallPyPy pypy-stackless
@@ -799,9 +814,7 @@ CheckPyPy() {
echo "--------------------------------------------------------------"
}
-%if 0%{with_jit}
CheckPyPy pypy
-%endif
%if 0%{with_stackless}
CheckPyPy pypy-stackless
@@ -825,12 +838,10 @@ rm -rf $RPM_BUILD_ROOT
%{pypyprefix}/lib_pypy/
%{pypyprefix}/site-packages/
-%if 0%{with_jit}
%files
%defattr(-,root,root,-)
%doc LICENSE README
%{_bindir}/pypy
-%endif
%files devel
%defattr(-,root,root,-)
@@ -847,6 +858,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Wed Apr 20 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-10
+- build a /usr/bin/pypy (but without the JIT compiler) on architectures that
+don't support the JIT, so that they do at least have something that runs
+
* Tue Feb 08 2011 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 1.4.1-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
commit d853ff6a5bdd4ce40976333f048aba1616374604
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Tue Feb 8 20:23:05 2011 -0600
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
diff --git a/pypy.spec b/pypy.spec
index 6f44a9a..ca09b94 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.4.1
-Release: 8%{?dist}
+Release: 9%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -847,6 +847,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Feb 08 2011 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 1.4.1-9
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
+
* Fri Jan 14 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-8
- disable self-hosting for now, due to fatal error seen JIT-compiling the
translator
commit c225b1c0921c528b804bdce231951a10f040cb6c
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Fri Jan 14 11:58:45 2011 -0500
Disable self-hosting for now, due to fatal error seen JIT-compiling the translator
diff --git a/pypy.spec b/pypy.spec
index 9c8134d..6f44a9a 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.4.1
-Release: 7%{?dist}
+Release: 8%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -152,8 +152,38 @@ Patch4: pypy-1.4.1-more-readable-c-code.patch
#
# Turn it off with this boolean, to revert back to rebuilding using CPython
# and avoid a cycle in the build-time dependency graph:
+
+# I'm disabling the self-hosting for now, due to a fatal error seen inside the
+# JIT, presumably whilst JIT-compiling something within the translator's
+# inliner.
+#
+# Specifically, building pypy-1.4.1-7.fc15.src.rpm on x86_64 using pypy-1.4.1-5.fc15.x86_64
+# http://koji.fedoraproject.org/koji/taskinfo?taskID=2721517
+# failed with this RPython traceback:
+# ... snip ...
+# [rtyper:WARNING] prebuilt instance <pypy.rpython.memory.gctransform.asmgcroot.ShapeDecompressor instance at 0x00000000f0b5bc80> has no attribute 'addr'
+# [rtyper] specializing: 179300 / 180508 blocks (99%)
+# [rtyper] specializing: 180500 / 180566 blocks (99%)
+# [rtyper] -=- specialized 1363 more blocks -=-
+# [rtyper] specializing: 180600 / 180777 blocks (99%)
+# [rtyper] -=- specialized 211 more blocks -=-
+# [backendopt:inlining] phase with threshold factor: 32.4
+# [backendopt:inlining] heuristic: pypy.translator.backendopt.inline.inlining_heuristic
+# [x86/regalloc] Bogus arg in operation 76 at 0
+# RPython traceback:
+# File "implement_62.c", line 39979, in send_bridge_to_backend
+# File "implement_69.c", line 65301, in Assembler386_assemble_bridge
+# File "implement_72.c", line 8078, in RegAlloc_prepare_bridge
+# File "implement_40.c", line 53061, in RegAlloc__prepare
+# File "implement_44.c", line 14305, in RegAlloc__compute_vars_longevity
+# Fatal RPython error: NotImplementedError
#
-%global use_self_when_building 1
+# This appears to be deep within pypy/jit/backend/x86/regalloc.py which has
+# called "not_implemented" to emit this message to stderr, before raising the
+# exception:
+# [x86/regalloc] Bogus arg in operation 76 at 0
+
+%global use_self_when_building 0
%if 0%{use_self_when_building}
BuildRequires: pypy
%global bootstrap_python_interp pypy
@@ -817,6 +847,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Fri Jan 14 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-8
+- disable self-hosting for now, due to fatal error seen JIT-compiling the
+translator
+
* Fri Jan 14 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-7
- skip test_ioctl for now
commit 7632349386659a82412f3dfbd37e714bf56aa152
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Fri Jan 14 11:06:07 2011 -0500
skip test_ioctl for now
diff --git a/pypy.spec b/pypy.spec
index 71b2db6..9c8134d 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.4.1
-Release: 6%{?dist}
+Release: 7%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -669,6 +669,25 @@ CheckPyPy() {
# TestFailed: import __hello__ failed:No module named __hello__
SkipTest test_frozen
+ # test_ioctl:
+ # Failing in Koji with dist-f15 with:
+ # ======================================================================
+ # FAIL: test_ioctl (test.test_ioctl.IoctlTests)
+ # ----------------------------------------------------------------------
+ # Traceback (most recent call last):
+ # File "/usr/lib/pypy-1.4.1/lib-python/2.5.2/test/test_ioctl.py", line 25, in test_ioctl
+ # self.assert_(rpgrp in ids, "%s not in %s" % (rpgrp, ids))
+ # AssertionError: 0 not in (8304, 17737)
+ # ======================================================================
+ # FAIL: test_ioctl_mutate (test.test_ioctl.IoctlTests)
+ # ----------------------------------------------------------------------
+ # Traceback (most recent call last):
+ # File "/usr/lib/pypy-1.4.1/lib-python/2.5.2/test/test_ioctl.py", line 35, in test_ioctl_mutate
+ # self.assert_(rpgrp in ids, "%s not in %s" % (rpgrp, ids))
+ # AssertionError: 0 not in (8304, 17737)
+ # ----------------------------------------------------------------------
+ SkipTest test_ioctl
+
# test_iterlen:
# 24 failures out of 25, apparently all due to TypeError
SkipTest test_iterlen
@@ -798,6 +817,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Fri Jan 14 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-7
+- skip test_ioctl for now
+
* Thu Jan 13 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-6
- add a "pypy-devel" subpackage, and install the header files there
- in %%check, re-run failed tests in verbose mode
commit 0a81116e89104e6bd77075151eadf5bde029085d
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Thu Jan 13 19:51:26 2011 -0500
Add a pypy-devel subpackage; rerun failed selftests in verbose mode
* Thu Jan 13 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-6
- add a "pypy-devel" subpackage, and install the header files there
- in %%check, re-run failed tests in verbose mode
diff --git a/pypy.spec b/pypy.spec
index 4d66f89..71b2db6 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.4.1
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -205,6 +205,16 @@ Summary: Run-time libraries used by PyPy implementations of Python
%description libs
Libraries required by the various PyPy implementations of Python.
+
+%package devel
+Group: Development/Languages
+Summary: Development tools for working with PyPy
+%description devel
+Header files for building C extension modules against PyPy
+
+Requires: pypy = %{version}-%{release}
+
+
%if 0%{with_stackless}
%package stackless
Group: Development/Languages
@@ -516,6 +526,22 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
%{buildroot}/%{_bindir}/pypy \
0
+
+# Header files for C extension modules.
+# Upstream's packaging process (pypy/tool/release/package.py)
+# creates an "include" subdir and copies all *.h/*.inl from "include" there
+# (it also has an apparently out-of-date comment about copying them from
+# pypy/_interfaces, but this directory doesn't seem to exist, and it doesn't
+# seem to do this as of 2011-01-13)
+
+# FIXME: arguably these should be instead put into a subdir below /usr/include,
+# 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 include/*.inl %{buildroot}/%{pypy_include_dir}
+
+
# Capture the RPython source code files from the build within the debuginfo
# package (rhbz#666975)
%global pypy_debuginfo_dir /usr/src/debug/pypy-%{version}-src
@@ -692,8 +718,9 @@ CheckPyPy() {
SkipTest test_tarfile # permissions issues
%endif
- # Run the built binary through the selftests:
- time ./$ExeName -m test.regrtest -x $TESTS_TO_SKIP
+ # Run the built binary through the selftests
+ # "-w" : re-run failed tests in verbose mode
+ time ./$ExeName -m test.regrtest -w -x $TESTS_TO_SKIP
popd
@@ -756,6 +783,12 @@ rm -rf $RPM_BUILD_ROOT
%{_bindir}/pypy
%endif
+%files devel
+%defattr(-,root,root,-)
+%dir %{pypy_include_dir}
+%{pypy_include_dir}/*.h
+%{pypy_include_dir}/*.inl
+
%if 0%{with_stackless}
%files stackless
%defattr(-,root,root,-)
@@ -765,6 +798,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Jan 13 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-6
+- add a "pypy-devel" subpackage, and install the header files there
+- in %%check, re-run failed tests in verbose mode
+
* Fri Jan 7 2011 Dan Horák <dan[at]danny.cz> - 1.4.1-5
- valgrind available only on selected architectures
commit d39359a3af6a0dee27f50e4a4fe52860f9c6b426
Author: Dan Horák <dan(a)danny.cz>
Date: Fri Jan 7 17:56:06 2011 +0100
- valgrind available only on selected architectures
diff --git a/pypy.spec b/pypy.spec
index 162ed5f..4d66f89 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.4.1
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -176,7 +176,9 @@ BuildRequires: bzip2-devel
BuildRequires: ncurses-devel
BuildRequires: expat-devel
BuildRequires: openssl-devel
+%ifarch %{ix86} x86_64 ppc ppc64 s390x
BuildRequires: valgrind-devel
+%endif
# Used by the selftests, though not by the build:
BuildRequires: gc-devel
@@ -763,6 +765,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Fri Jan 7 2011 Dan Horák <dan[at]danny.cz> - 1.4.1-5
+- valgrind available only on selected architectures
+
* Wed Jan 5 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-4
- rebuild pypy using itself, for speed, with a boolean to break this cycle in
the build-requirement graph (falling back to using "python-devel" aka CPython)
commit 00e57e74f81587a2c49341341a7a291a54e22dc8
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Thu Jan 6 17:09:03 2011 -0500
* Wed Jan 5 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-4
- rebuild pypy using itself, for speed, with a boolean to break this cycle in
the build-requirement graph (falling back to using "python-devel" aka CPython)
- add work-in-progress patch to try to make generated c more readable
(rhbz#666963)
- capture the RPython source code files from the build within the debuginfo
package (rhbz#666975)
diff --git a/pypy-1.4.1-more-readable-c-code.patch b/pypy-1.4.1-more-readable-c-code.patch
new file mode 100644
index 0000000..45fa534
--- /dev/null
+++ b/pypy-1.4.1-more-readable-c-code.patch
@@ -0,0 +1,695 @@
+diff -r cd083843b67a pypy/interpreter/pycode.py
+--- a/pypy/interpreter/pycode.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/interpreter/pycode.py Wed Jan 05 16:14:35 2011 -0500
+@@ -14,6 +14,7 @@
+ from pypy.interpreter.astcompiler.consts import (CO_OPTIMIZED,
+ CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS, CO_NESTED,
+ CO_GENERATOR, CO_CONTAINSGLOBALS)
++from pypy.interpreter.pytraceback import offset2lineno
+ from pypy.rlib.rarithmetic import intmask
+ from pypy.rlib.debug import make_sure_not_resized
+ from pypy.rlib import jit
+@@ -81,6 +82,7 @@
+ self.hidden_applevel = hidden_applevel
+ self.magic = magic
+ self._signature = cpython_code_signature(self)
++ self._cached_source = None
+ self._initialize()
+
+ def _initialize(self):
+@@ -403,3 +405,25 @@
+ def repr(self, space):
+ return space.wrap(self.get_repr())
+ repr.unwrap_spec = ['self', ObjSpace]
++
++ def get_linenum_for_offset(self, offset):
++ # Given a bytecode offset, return a 1-based index into the lines of the
++ # source code
++ return offset2lineno(self, offset)
++
++ def _ensure_source(self):
++ # Lazily grab the source lines into self._cached_source (or raise
++ # an IOError)
++ if not self._cached_source:
++ f = open(self.co_filename, 'r')
++ source = [line.rstrip() for line in f.readlines()]
++ f.close()
++ self._cached_source = source
++
++ def get_source_text(self, linenum):
++ # Given a 1-based index, get the corresponding line of source code (or
++ # raise an IOError)
++ self._ensure_source()
++ return self._cached_source[linenum - 1]
++
++
+diff -r cd083843b67a pypy/objspace/flow/model.py
+--- a/pypy/objspace/flow/model.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/objspace/flow/model.py Wed Jan 05 16:14:35 2011 -0500
+@@ -31,6 +31,120 @@
+
+ __metaclass__ = type
+
++class SourceLoc(object):
++ # A srcloc is a specific location within the RPython source code,
++ # intended for human display
++ __slots__ = ('code', # code object
++ 'linenum' # 1-based index, as displayed to a user
++ )
++ def __init__(self, code, linenum):
++ self.code = code
++ self.linenum = linenum
++
++ def get_text(self):
++ # Get the actual source text of this line
++ return self.code.get_source_text(self.linenum)
++
++ def __eq__(self, other):
++ return self.code == other.code and self.linenum == other.linenum
++
++ def __ne__(self, other):
++ if other:
++ return self.code != other.code or self.linenum != other.linenum
++ else:
++ return True
++
++class CodeLoc(object):
++ # A codeloc is a specific location within the RPython bytecode
++ __slots__ = ('code', # code object
++ 'offset' # int index into bytecode, or -1
++ )
++
++ def __init__(self, code, offset):
++ self.code = code
++ self.offset = offset
++
++ def __str__(self):
++ if self.offset >= 0:
++ return "%s@%d" % (self.code.co_name, self.offset)
++ else:
++ return ""
++
++ def __ne__(self, other):
++ if other:
++ return self.code != other.code or self.offset != other.offset
++ else:
++ return True
++
++ def __cmp__(self, other):
++ # Partial ordering, for those locations that have an offset:
++ if other:
++ if self.offset >= 0 and other.offset >= 0:
++ return self.offset - other.offset
++ return 0
++
++ def get_source_loc(self):
++ # Convert to a SourceLoc:
++ return SourceLoc(self.code, self.code.get_linenum_for_offset(self.offset))
++
++class OperationLoc(object):
++ # An oploc is the location within the RPython source code of a given
++ # operation
++ #
++ # This is a list consisting of CodeLoc instances, some of which may be None
++ #
++ # For the simple case, this is list of length 1 with a single CodeLoc
++ #
++ # For an operation inside an inlined callsite, we have a list of length 2:
++ # [codeloc of callsite,
++ # codeloc of operation within inlined body]
++ #
++ # For more interesting inlined cases, we have a chain of source locations:
++ # [codeloc of callsite,
++ # codeloc of inner callsite,
++ # ... ,
++ # codeloc of innermost inlined callsite,
++ # codeloc of operation within inlined body]
++ #
++
++ __slots__ = ('codelocs', )
++
++ def __init__(self, codelocs):
++ self.codelocs = codelocs
++
++ def __str__(self):
++ return '[' + ' > '.join(str(codeloc) for codeloc in self.codelocs) + ']'
++
++ def __cmp__(self, other):
++ return cmp(self.codelocs, other.codelocs)
++
++def block_comparator(blk0, blk1):
++ '''
++ Sort function for blocks, putting them in an ordering that attempts to
++ maximize readability of the generated C code
++ '''
++ # print 'comparing %r and %r' % (blk0, blk1)
++ # Put the start/end block at the top/bottom:
++ if blk0.isstartblock:
++ return -1
++
++ if blk1.isstartblock:
++ return 1
++
++ # Order blocks by the offset, where present:
++ if blk0.operations:
++ if blk1.operations:
++ return cmp(blk0.operations[0].oploc, blk1.operations[0].oploc)
++ else:
++ return -1
++ else:
++ if blk1.operations:
++ return 1
++ else:
++ return 0
++
++def edge_comparator(edge0, edge1):
++ return block_comparator(edge0.target, edge1.target)
+
+ class FunctionGraph(object):
+ __slots__ = ['startblock', 'returnblock', 'exceptblock', '__dict__']
+@@ -94,6 +208,21 @@
+ seen[block] = True
+ stack += block.exits[::-1]
+
++ def iterblocks_by_source(self):
++ # Try to preserve logical source ordering in the blocks
++ block = self.startblock
++ yield block
++ seen = {block: True}
++ stack = list(block.exits[::-1])
++ stack.sort(edge_comparator)
++ while stack:
++ block = stack.pop().target
++ if block not in seen:
++ yield block
++ seen[block] = True
++ stack += block.exits[::-1]
++ stack.sort(edge_comparator)
++
+ def iterlinks(self):
+ block = self.startblock
+ seen = {block: True}
+@@ -183,14 +312,14 @@
+ self.exits = [] # list of Link(s)
+
+ def at(self):
+- if self.operations and self.operations[0].offset >= 0:
+- return "@%d" % self.operations[0].offset
++ if self.operations:
++ return str(self.operations[0].oploc)
+ else:
+ return ""
+
+ def __str__(self):
+ if self.operations:
+- txt = "block@%d" % self.operations[0].offset
++ txt = "block%s" % self.operations[0].oploc
+ else:
+ if (not self.exits) and len(self.inputargs) == 1:
+ txt = "return block"
+@@ -245,6 +374,21 @@
+ from pypy.translator.tool.graphpage import try_show
+ try_show(self)
+
++ def isreturnblock(self):
++ return (not self.operations) and (not self.exits) and len(self.inputargs) == 1
++
++ def get_base_label(self, blocknum):
++ # Generate a more friendly C label for this block
++ if self.operations:
++ txt = "block"
++ elif (not self.exits) and len(self.inputargs) == 1:
++ txt = "return_block"
++ elif (not self.exits) and len(self.inputargs) == 2:
++ txt = "raise_block"
++ else:
++ txt = "codeless_block"
++ return '%s%d' % (txt, blocknum)
++
+
+ class Variable(object):
+ __slots__ = ["_name", "_nr", "concretetype"]
+@@ -331,13 +475,15 @@
+
+
+ class SpaceOperation(object):
+- __slots__ = "opname args result offset".split()
++ __slots__ = "opname args result oploc".split()
+
+- def __init__(self, opname, args, result, offset=-1):
++ def __init__(self, opname, args, result, oploc=None):
+ self.opname = intern(opname) # operation name
+ self.args = list(args) # mixed list of var/const
+ self.result = result # either Variable or Constant instance
+- self.offset = offset # offset in code string
++ if oploc is None:
++ oploc = OperationLoc([None])
++ self.oploc = oploc
+
+ def __eq__(self, other):
+ return (self.__class__ is other.__class__ and
+@@ -352,8 +498,9 @@
+ return hash((self.opname,tuple(self.args),self.result))
+
+ def __repr__(self):
+- return "%r = %s(%s)" % (self.result, self.opname,
+- ", ".join(map(repr, self.args)))
++ return "%r = %s(%s) (%s)" % (self.result, self.opname,
++ ", ".join(map(repr, self.args)),
++ self.oploc)
+
+ class Atom(object):
+ def __init__(self, name):
+@@ -448,8 +595,7 @@
+ for op in oplist:
+ copyop = SpaceOperation(op.opname,
+ [copyvar(v) for v in op.args],
+- copyvar(op.result), op.offset)
+- #copyop.offset = op.offset
++ copyvar(op.result), op.oploc)
+ result.append(copyop)
+ return result
+ newblock.operations = copyoplist(block.operations)
+diff -r cd083843b67a pypy/objspace/flow/objspace.py
+--- a/pypy/objspace/flow/objspace.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/objspace/flow/objspace.py Wed Jan 05 16:14:35 2011 -0500
+@@ -310,7 +310,9 @@
+ def do_operation(self, name, *args_w):
+ spaceop = SpaceOperation(name, args_w, Variable())
+ if hasattr(self, 'executioncontext'): # not here during bootstrapping
+- spaceop.offset = self.executioncontext.crnt_offset
++ codeloc = CodeLoc(self.executioncontext.code,
++ self.executioncontext.crnt_offset)
++ spaceop.oploc = OperationLoc([codeloc])
+ self.executioncontext.recorder.append(spaceop)
+ return spaceop.result
+
+diff -r cd083843b67a pypy/objspace/flow/test/test_model.py
+--- a/pypy/objspace/flow/test/test_model.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/objspace/flow/test/test_model.py Wed Jan 05 16:14:35 2011 -0500
+@@ -132,3 +132,25 @@
+ assert v2.renamed
+ assert v2.name.startswith("foobar_") and v2.name != v.name
+ assert v2.name.split('_', 1)[1].isdigit()
++
++def test_source_locations():
++ # Invent some random offsets into the code:
++ co = sample_function.__code__
++ codelocA = CodeLoc(co, 42)
++ codelocB = CodeLoc(co, 87)
++
++ assert str(codelocA) == 'sample_function@42'
++ assert str(codelocB) == 'sample_function@87'
++
++ assert cmp(codelocA, codelocB) < 0
++ assert cmp(codelocB, codelocA) > 0
++
++ oplocA = OperationLoc([codelocA])
++ oplocB = OperationLoc([codelocB])
++
++ assert str(oplocA) == '[sample_function@42]'
++ assert str(oplocB) == '[sample_function@87]'
++
++ assert cmp(oplocA, oplocB) < 0
++ assert cmp(oplocB, oplocA) > 0
++
+diff -r cd083843b67a pypy/rpython/rtyper.py
+--- a/pypy/rpython/rtyper.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/rpython/rtyper.py Wed Jan 05 16:14:35 2011 -0500
+@@ -800,7 +800,7 @@
+ return vars
+
+ def genop(self, opname, args_v, resulttype=None):
+- return self.llops.genop(opname, args_v, resulttype)
++ return self.llops.genop(opname, args_v, resulttype, self.spaceop.oploc)
+
+ def gendirectcall(self, ll_function, *args_v):
+ return self.llops.gendirectcall(ll_function, *args_v)
+@@ -935,7 +935,7 @@
+ v.concretetype))
+ return v
+
+- def genop(self, opname, args_v, resulttype=None):
++ def genop(self, opname, args_v, resulttype=None, oploc=None):
+ try:
+ for v in args_v:
+ v.concretetype
+@@ -944,7 +944,7 @@
+ " and pass its result to genop(),"
+ " never hop.args_v directly.")
+ vresult = Variable()
+- self.append(SpaceOperation(opname, args_v, vresult))
++ self.append(SpaceOperation(opname, args_v, vresult, oploc))
+ if resulttype is None:
+ vresult.concretetype = Void
+ return None
+diff -r cd083843b67a pypy/translator/backendopt/inline.py
+--- a/pypy/translator/backendopt/inline.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/backendopt/inline.py Wed Jan 05 16:14:35 2011 -0500
+@@ -4,6 +4,7 @@
+ from pypy.translator.unsimplify import copyvar
+ from pypy.objspace.flow.model import Variable, Constant, Block, Link
+ from pypy.objspace.flow.model import SpaceOperation, c_last_exception
++from pypy.objspace.flow.model import OperationLoc
+ from pypy.objspace.flow.model import FunctionGraph
+ from pypy.objspace.flow.model import traverse, mkentrymap, checkgraph
+ from pypy.annotation import model as annmodel
+@@ -231,6 +232,7 @@
+ self.varmap = {}
+ self._copied_blocks = {}
+ self.op = block.operations[index_operation]
++ self.callsite_oploc = self.op.oploc
+ self.graph_to_inline = self.get_graph_from_op(self.op)
+ self.exception_guarded = False
+ if (block.exitswitch == c_last_exception and
+@@ -297,7 +299,9 @@
+
+ def copy_operation(self, op):
+ args = [self.get_new_name(arg) for arg in op.args]
+- result = SpaceOperation(op.opname, args, self.get_new_name(op.result))
++ new_oploc = OperationLoc(self.callsite_oploc.codelocs[:] + op.oploc.codelocs[:])
++ result = SpaceOperation(op.opname, args, self.get_new_name(op.result),
++ new_oploc)
+ return result
+
+ def copy_block(self, block):
+diff -r cd083843b67a pypy/translator/c/funcgen.py
+--- a/pypy/translator/c/funcgen.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/c/funcgen.py Wed Jan 05 16:14:35 2011 -0500
+@@ -1,4 +1,6 @@
+ import sys
++import inspect
++import dis
+ from pypy.translator.c.support import USESLOTS # set to False if necessary while refactoring
+ from pypy.translator.c.support import cdecl
+ from pypy.translator.c.support import llvalue_from_constant, gen_assignments
+@@ -22,6 +24,38 @@
+
+ KEEP_INLINED_GRAPHS = False
+
++def block_comparator(blk0, blk1):
++ '''
++ Sort function for blocks, putting them in an ordering that attempts to
++ maximize readability of the generated C code
++ '''
++ # print 'comparing %r and %r' % (blk0, blk1)
++ # Put the start/end block at the top/bottom:
++ if blk0.isstartblock:
++ return -1
++
++ if blk1.isstartblock:
++ return 1
++
++ # Order blocks by the offset, where present:
++ if blk0.operations:
++ if blk1.operations:
++ return cmp(blk0.operations[0].oploc, blk1.operations[0].oploc)
++ else:
++ return -1
++ else:
++ if blk1.operations:
++ return 1
++ else:
++ return 0
++
++def escape_c_comments(py_src):
++ # Escape C comments within RPython source, to avoid generating bogus
++ # comments in our generated C source:
++ py_src = py_src.replace('/*', '')
++ py_src = py_src.replace('*/', '')
++ return py_src
++
+ class FunctionCodeGenerator(object):
+ """
+ Collects information about a function which we have to generate
+@@ -210,14 +244,57 @@
+
+ def cfunction_body(self):
+ graph = self.graph
+- yield 'goto block0;' # to avoid a warning "this label is not used"
++ # Try to print python source code:
++ if hasattr(graph, 'func'):
++ filename = inspect.getfile(graph.func)
++ #yield '/* name: %r */' % filename
++ try:
++ src, startline = inspect.getsourcelines(graph.func)
++ except IOError:
++ pass # No source found
++ except IndexError:
++ pass # Bulletproofing
++ else:
++ yield '/* Python source %r' % filename
++ for i, line in enumerate(src):
++ line = line.rstrip()
++ line = escape_c_comments(line)
++ # FuncNode.funcgen_implementation treats lines ending in ':'
++ # as C blocks, which messes up the formatting.
++ # Work around this:
++ if line.endswith(':'):
++ line += ' '
++ yield ' * %4d : %s' % (startline + i, line)
++ yield ' */'
++
++ label = graph.startblock.get_base_label(self.blocknum[graph.startblock])
++ yield 'goto %s;' % label # to avoid a warning "this label is not used"
++
++ # Sort the blocks into a (hopefully) readable order:
++ blocks = list(graph.iterblocks_by_source())
++ blocks.sort(block_comparator)
+
+ # generate the body of each block
+- for block in graph.iterblocks():
++ for block in blocks:
++ cursrcloc = None
+ myblocknum = self.blocknum[block]
+ yield ''
+- yield 'block%d:' % myblocknum
++ yield '%s:' % block.get_base_label(myblocknum)
++ #yield "/* repr(block): %r */" % (block, )
++ #yield "/* type(block): %r */" % (type(block), )
+ for i, op in enumerate(block.operations):
++ #yield "/* type(op): %r */" % (type(op), )
++ #yield "/* op.oploc: %s */" % (op.oploc, )
++ codeloc = op.oploc.codelocs[-1]
++ if codeloc:
++ srcloc = codeloc.get_source_loc()
++ if srcloc != cursrcloc:
++ try:
++ yield "/* %s:%d : %s */" % (codeloc.code.co_name, srcloc.linenum, escape_c_comments(srcloc.get_text()))
++ cursrcloc = srcloc
++ except IOError:
++ pass
++
+ for line in self.gen_op(op):
+ yield line
+ if len(block.exits) == 0:
+@@ -310,7 +387,7 @@
+ assignments.append((a2typename, dest, src))
+ for line in gen_assignments(assignments):
+ yield line
+- label = 'block%d' % self.blocknum[link.target]
++ label = link.target.get_base_label(self.blocknum[link.target])
+ if link.target in self.innerloops:
+ loop = self.innerloops[link.target]
+ if link is loop.links[-1]: # link that ends a loop
+diff -r cd083843b67a pypy/translator/c/test/test_genc.py
+--- a/pypy/translator/c/test/test_genc.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/c/test/test_genc.py Wed Jan 05 16:14:35 2011 -0500
+@@ -1,4 +1,5 @@
+ import autopath, sys, os, py
++import re
+ from pypy.rpython.lltypesystem.lltype import *
+ from pypy.annotation import model as annmodel
+ from pypy.translator.translator import TranslationContext
+@@ -498,3 +499,130 @@
+ else:
+ assert 0, "the call was not found in the C source"
+ assert 'PYPY_INHIBIT_TAIL_CALL();' in lines[i+1]
++
++def get_generated_c_source(fn, types):
++ # Return a (optimized fn, c source code, c source filename) 3-tuple
++ t = Translation(fn)
++ t.annotate(types)
++ c_filename_path = t.source_c()
++ h = c_filename_path.open()
++ src = h.read()
++ h.close()
++ c_fn = t.compile_c()
++ return (c_fn, src, c_filename_path)
++
++def extract_c_function(c_src, fname):
++ # Extract the source for a given C function out of a the given src string
++ # Makes assumptions about the layout of the source
++ pattern = '^(.+) \**%s\(.*\) {$' % fname
++ within_fn = False
++ result = ''
++ for line in c_src.splitlines():
++ if within_fn:
++ result += line + '\n'
++ if line.startswith('}'):
++ return result
++ else:
++ m = re.match(pattern, line)
++ if m:
++ within_fn = True
++ result += line + '\n'
++ return result
++
++
++
++def test_generated_c_source():
++ # Verify that generate C source "looks good"
++ # We'll use is_perfect_number, as it contains a loop and a conditional
++
++ # Generate C source code
++ from pypy.translator.test.snippet import is_perfect_number
++ c_fn, c_src, c_filename_path = get_generated_c_source(is_perfect_number,
++ [int])
++
++ # Locate the C source for the type-specialized function:
++ c_fn_src = extract_c_function(c_src, 'pypy_g_is_perfect_number')
++
++ # Verify that the C source contains embedded comments containing the lines
++ # of the python source:
++ expected_comment_lines = [
++ '/* is_perfect_number:31 : while div < n: */',
++ '/* is_perfect_number:32 : if n % div == 0: */',
++ '/* is_perfect_number:33 : sum += div */',
++ '/* is_perfect_number:34 : div += 1 */',
++ '/* is_perfect_number:35 : return n == sum */']
++ for exp_line in expected_comment_lines:
++ assert exp_line in c_fn_src
++
++ # Verify that the lines occur in the correct order
++ # ...we do this by filtering the function's generated C source to just
++ # those lines containing our comments (and dropping whitespace):
++ lines = c_fn_src.splitlines()
++ lines = [line.strip()
++ for line in lines
++ if '/* is_perfect_number:' in line]
++
++ # ...we should now have exact equality: the ordering should be as expected,
++ # and each comment should appear exactly once:
++ assert lines == expected_comment_lines
++
++ # Ensure that the generated C function does the right thing:
++ assert c_fn(5) == False
++ assert c_fn(6) == True
++ assert c_fn(7) == False
++
++ assert c_fn(5.0) == False
++ assert c_fn(6.0) == True
++ assert c_fn(7.0) == False
++
++ assert c_fn(5L) == False
++ assert c_fn(6L) == True
++ assert c_fn(7L) == False
++
++ try:
++ c_fn('hello world')
++ except:
++ pass
++ else:
++ raise 'Was expected exception'
++
++def test_escaping_c_comments():
++ # Ensure that c comments within RPython code get escaped when we generate
++ # our .c code (to avoid generating bogus C)
++ # See e.g. pypy.module.cpyext.dictobject's PyDict_Next, which has a
++ # docstring embedding a C comment
++ def c_style_comment(a, b):
++ '''Here is a C-style comment within an RPython docstring:
++ /* hello world */
++ '''
++ # and here's one in a string literal:
++ return '/* hello world a:%s b:%s */' % (a, b)
++
++ def cplusplus_style_comment(a, b):
++ '''Here is a C++-style comment within an RPython docstring:
++ // hello world
++ '''
++ # and here are some in string literals, and one as the floor division
++ # operator:
++ return '// hello world: a // b = %s' % (a // b)
++
++ for fn_name, exp_output in [('c_style_comment',
++ '/* hello world a:6 b:3 */'),
++ ('cplusplus_style_comment',
++ '// hello world: a // b = 2')]:
++ fn = locals()[fn_name]
++
++ c_fn, c_src, c_filename_path = get_generated_c_source(fn, [int, int])
++ # If the above survived, then the C compiler managed to handle
++ # the generated C code
++
++ # Verify that the generated code works (i.e. that we didn't
++ # accidentally change the meaning):
++ assert c_fn(6, 3) == exp_output
++
++ # Ensure that at least part of the docstrings made it into the C
++ # code:
++ c_fn_src = extract_c_function(c_src, 'pypy_g_' + fn_name)
++ assert 'Here is a ' in c_fn_src
++ assert 'style comment within an RPython docstring' in c_fn_src
++
+diff -r cd083843b67a pypy/translator/driver.py
+--- a/pypy/translator/driver.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/driver.py Wed Jan 05 16:14:35 2011 -0500
+@@ -539,6 +539,7 @@
+ dstname = self.compute_exe_name() + '.staticdata.info'
+ shutil.copy(str(fname), str(dstname))
+ self.log.info('Static data info written to %s' % dstname)
++ return c_source_filename
+
+ #
+ task_source_c = taskdef(task_source_c, ['database_c'], "Generating c source")
+diff -r cd083843b67a pypy/translator/gensupp.py
+--- a/pypy/translator/gensupp.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/gensupp.py Wed Jan 05 16:14:35 2011 -0500
+@@ -16,8 +16,8 @@
+ def visit(block):
+ if isinstance(block, Block):
+ # first we order by offset in the code string
+- if block.operations:
+- ofs = block.operations[0].offset
++ if block.operations and block.operations[0].oploc.codelocs[0]:
++ ofs = block.operations[0].oploc.codelocs[0].offset
+ else:
+ ofs = sys.maxint
+ # then we order by input variable name or value
+diff -r cd083843b67a pypy/translator/interactive.py
+--- a/pypy/translator/interactive.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/interactive.py Wed Jan 05 16:14:35 2011 -0500
+@@ -138,7 +138,7 @@
+ def source_c(self, argtypes=None, **kwds):
+ self.update_options(argtypes, kwds)
+ self.ensure_backend('c')
+- self.driver.source_c()
++ return self.driver.source_c()
+
+ def source_cl(self, argtypes=None, **kwds):
+ self.update_options(argtypes, kwds)
+diff -r cd083843b67a pypy/translator/llsupport/wrapper.py
+--- a/pypy/translator/llsupport/wrapper.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/llsupport/wrapper.py Wed Jan 05 16:14:35 2011 -0500
+@@ -59,6 +59,8 @@
+ # "return result"
+ block = Block(wrapper_inputargs)
+ wgraph = FunctionGraph('pyfn_' + (newname or func.func_name), block)
++ if hasattr(graph, 'func'):
++ wgraph.func = graph.func
+ translator.update_call_graph(wgraph, graph, object())
+ translator.graphs.append(wgraph)
+ block.operations[:] = newops
+diff -r cd083843b67a pypy/translator/simplify.py
+--- a/pypy/translator/simplify.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/simplify.py Wed Jan 05 16:14:35 2011 -0500
+@@ -294,7 +294,7 @@
+ return renaming.get(v, v)
+ def rename_op(op):
+ args = [rename(a) for a in op.args]
+- op = SpaceOperation(op.opname, args, rename(op.result), op.offset)
++ op = SpaceOperation(op.opname, args, rename(op.result), op.oploc)
+ # special case...
+ if op.opname == 'indirect_call':
+ if isinstance(op.args[0], Constant):
diff --git a/pypy.spec b/pypy.spec
index 96354e2..162ed5f 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.4.1
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -136,9 +136,33 @@ Patch2: fix-test_commands-expected-ls-output-issue7108.patch
# https://codespeak.net/issue/pypy-dev/issue614
Patch3: pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
+# Try to improve the readability of the generated .c code, by adding in the
+# RPython source as comments where possible.
+# A version of this was sent upstream as:
+# http://codespeak.net/pipermail/pypy-dev/2010q4/006532.html
+# TODO: get this into the upstream bug tracker, and finish inlining
+# support (rhbz#666963)
+Patch4: pypy-1.4.1-more-readable-c-code.patch
+
+
# Build-time requirements:
-BuildRequires: python-devel
+# pypy's can be rebuilt using itself, rather than with CPython; doing so
+# halves the build time.
+#
+# Turn it off with this boolean, to revert back to rebuilding using CPython
+# and avoid a cycle in the build-time dependency graph:
+#
+%global use_self_when_building 1
+%if 0%{use_self_when_building}
+BuildRequires: pypy
+%global bootstrap_python_interp pypy
+%else
+BuildRequires: python-devel
+%global bootstrap_python_interp python
+%endif
+
+
# FIXME: I'm seeing errors like this in the logs:
# [translation:WARNING] The module '_rawffi' is disabled
@@ -215,6 +239,8 @@ sed -i \
-e 's|LIBRARY_INSTALLATION_PATH|"%{pypyprefix}"|' \
pypy/translator/goal/app_main.py
+%patch4 -p1 -b .more-readable-c-code
+
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
@@ -304,6 +330,7 @@ BuildPyPy() {
# doesn't interract well with the results of using our standard build flags.
# 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//')
# If we're already built the JIT-enabled "pypy", then use it for subsequent
@@ -311,7 +338,10 @@ BuildPyPy() {
if test -x './pypy' ; then
INTERP='./pypy'
else
- INTERP='python'
+ # First pypy build within this rpm build?
+ # Fall back to using the bootstrap python interpreter, which might be a
+ # system copy of pypy from an earlier rpm, or be cpython's /usr/bin/python:
+ INTERP='%{bootstrap_python_interp}'
fi
# Here's where we actually invoke the build:
@@ -484,6 +514,34 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
%{buildroot}/%{_bindir}/pypy \
0
+# Capture the RPython source code files from the build within the debuginfo
+# package (rhbz#666975)
+%global pypy_debuginfo_dir /usr/src/debug/pypy-%{version}-src
+mkdir -p %{buildroot}%{pypy_debuginfo_dir}
+
+# copy over everything:
+cp -a pypy %{buildroot}%{pypy_debuginfo_dir}
+
+# ...then delete files that aren't .py files:
+find \
+ %{buildroot}%{pypy_debuginfo_dir} \
+ \( -type f \
+ -a \
+ \! -name "*.py" \
+ \) \
+ -delete
+
+# We don't need bytecode for these files; they are being included for reference
+# purposes.
+# There are some rpmlint warnings from these files:
+# non-executable-script
+# wrong-script-interpreter
+# zero-length
+# script-without-shebang
+# dangling-symlink
+# but given that the objective is to preserve a copy of the source code, those
+# are acceptable.
+
%check
topdir=$(pwd)
@@ -511,6 +569,7 @@ CheckPyPy() {
# Gather a list of tests to skip, due to known failures
# TODO: report these failures to pypy upstream
+ # See also rhbz#666967 and rhbz#666969
TESTS_TO_SKIP=""
# Test failures relating to missing codecs
@@ -622,6 +681,14 @@ CheckPyPy() {
# AssertionError: ValueError not raised
SkipTest test_zlib
+ %if 0%{use_self_when_building}
+ # Patch 3 prioritizes the installed copy of pypy's libraries over the
+ # build copy.
+ # This leads to test failures of test_pep263 and test_tarfile
+ # For now, suppress these when building using pypy itself:
+ SkipTest test_pep263 # on-disk encoding issues
+ SkipTest test_tarfile # permissions issues
+ %endif
# Run the built binary through the selftests:
time ./$ExeName -m test.regrtest -x $TESTS_TO_SKIP
@@ -696,6 +763,14 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Wed Jan 5 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-4
+- rebuild pypy using itself, for speed, with a boolean to break this cycle in
+the build-requirement graph (falling back to using "python-devel" aka CPython)
+- add work-in-progress patch to try to make generated c more readable
+(rhbz#666963)
+- capture the RPython source code files from the build within the debuginfo
+package (rhbz#666975)
+
* Wed Dec 22 2010 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-3
- try to respect the FHS by installing libraries below libdir, rather than
datadir; patch app_main.py to look in this installation location first when
commit f756cfcb34f7e48db6afaf04f79ca5c576a4b696
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Mon Jan 3 15:06:28 2011 -0500
Initial import of pypy-1.4.1-3 from package review (rhbz#588941)
diff --git a/.gitignore b/.gitignore
index e69de29..2878978 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/pypy-1.4.1-src.tar.bz2
diff --git a/fix-test_commands-expected-ls-output-issue7108.patch b/fix-test_commands-expected-ls-output-issue7108.patch
new file mode 100644
index 0000000..becc3e0
--- /dev/null
+++ b/fix-test_commands-expected-ls-output-issue7108.patch
@@ -0,0 +1,11 @@
+--- test/test_commands.py.orig 2010-12-22 13:25:11.357333216 -0500
++++ test/test_commands.py 2010-12-22 13:25:57.927166219 -0500
+@@ -47,7 +47,7 @@ class CommandTests(unittest.TestCase):
+ # Note that the first case above has a space in the group name
+ # while the second one has a space in both names.
+ pat = r'''d......... # It is a directory.
+- \+? # It may have ACLs.
++ [.+@]? # It may have alt access (SELinux, ACLs or metadata ('@' OS X).
+ \s+\d+ # It has some number of links.
+ [^/]* # Skip user, group, size, and date.
+ /\. # and end with the name of the file.
diff --git a/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch b/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
new file mode 100644
index 0000000..257f60f
--- /dev/null
+++ b/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
@@ -0,0 +1,13 @@
+diff --git a/pypy/tool/ansi_print.py b/pypy/tool/ansi_print.py
+index 3eff27c..fac4ba2 100644
+--- a/pypy/tool/ansi_print.py
++++ b/pypy/tool/ansi_print.py
+@@ -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/pypy-1.4-config.patch b/pypy-1.4-config.patch
new file mode 100644
index 0000000..0b82ac8
--- /dev/null
+++ b/pypy-1.4-config.patch
@@ -0,0 +1,44 @@
+Index: pypy-1.4/pypy/translator/platform/linux.py
+===================================================================
+--- pypy-1.4.orig/pypy/translator/platform/linux.py
++++ pypy-1.4/pypy/translator/platform/linux.py
+@@ -3,17 +3,22 @@ import py, os
+ from pypy.translator.platform import _run_subprocess
+ from pypy.translator.platform.posix import BasePosix
+
++CFLAGS = ['-O3', '-pthread', '-fomit-frame-pointer',
++ '-Wall', '-Wno-unused']
++if os.environ.get('CFLAGS', None):
++ CFLAGS.extend(os.environ['CFLAGS'].split())
++CFLAGS = tuple(CFLAGS)
++
+ class BaseLinux(BasePosix):
+ name = "linux"
+
+ link_flags = ('-pthread', '-lrt')
+- cflags = ('-O3', '-pthread', '-fomit-frame-pointer',
+- '-Wall', '-Wno-unused')
++ cflags = CFLAGS
+ standalone_only = ()
+ shared_only = ('-fPIC',)
+ so_ext = 'so'
+ so_prefixes = ('lib', '')
+-
++
+ def _args_for_shared(self, args):
+ return ['-shared'] + args
+
+@@ -29,9 +34,10 @@ class BaseLinux(BasePosix):
+ class Linux(BaseLinux):
+ shared_only = () # it seems that on 32-bit linux, compiling with -fPIC
+ # gives assembler that asmgcc is not happy about.
+- def library_dirs_for_libffi_a(self):
+- # places where we need to look for libffi.a
+- return self.library_dirs_for_libffi() + ['/usr/lib']
++ # Fedora Linux, at least, has the shared version but not the static
++ #def library_dirs_for_libffi_a(self):
++ # # places where we need to look for libffi.a
++ # return self.library_dirs_for_libffi() + ['/usr/lib']
+
+
+ class Linux64(BaseLinux):
diff --git a/pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch b/pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
new file mode 100644
index 0000000..93bcb69
--- /dev/null
+++ b/pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
@@ -0,0 +1,16 @@
+diff -r cd083843b67a pypy/translator/goal/app_main.py
+--- a/pypy/translator/goal/app_main.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/goal/app_main.py Wed Dec 22 17:43:21 2010 -0500
+@@ -191,6 +191,12 @@
+ IS_WINDOWS = False
+
+ def get_library_path(executable):
++ # FIXME: get this from translator configuration
++ dirname = LIBRARY_INSTALLATION_PATH
++ newpath = sys.pypy_initial_path(dirname)
++ if newpath:
++ return newpath
++
+ search = executable
+ while 1:
+ dirname = resolvedirof(search)
diff --git a/pypy.spec b/pypy.spec
new file mode 100644
index 0000000..96354e2
--- /dev/null
+++ b/pypy.spec
@@ -0,0 +1,762 @@
+Name: pypy
+Version: 1.4.1
+Release: 3%{?dist}
+Summary: Python implementation with a Just-In-Time compiler
+
+Group: Development/Languages
+# LGPL and another free license we'd need to ask spot about are present in some
+# java jars that we're not building with atm (in fact, we're deleting them
+# before building). If we restore those we'll have to work out the new
+# licensing terms
+License: MIT and Python and UCD
+URL: http://pypy.org/
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+
+# High-level configuration of the build:
+
+# PyPy consists of an implementation of an interpreter (with JIT compilation)
+# for the full Python language written in a high-level language, leaving many
+# of the implementation details as "pluggable" policies.
+#
+# The implementation language is then compiled down to .c code, from which we
+# obtain a binary.
+#
+# This allows us to build a near-arbitrary collection of different
+# implementations of Python with differing tradeoffs
+#
+# (As it happens, the implementation language is itself Python, albeit a
+# restricted subset "RPython", chosen to making it amenable to being compiled.
+# The result implements the full Python language though)
+
+# We could build many different implementations of Python.
+# For now, let's focus on the implementation that appears to be receiving the
+# most attention upstream: the JIT-enabled build, with all standard
+# optimizations
+
+# Building a configuration can take significant time:
+
+# A build of pypy (with jit) on i686 took 77 mins:
+# [Timer] Timings:
+# [Timer] annotate --- 583.3 s
+# [Timer] rtype_lltype --- 760.9 s
+# [Timer] pyjitpl_lltype --- 567.3 s
+# [Timer] backendopt_lltype --- 375.6 s
+# [Timer] stackcheckinsertion_lltype --- 54.1 s
+# [Timer] database_c --- 852.2 s
+# [Timer] source_c --- 1007.3 s
+# [Timer] compile_c --- 419.9 s
+# [Timer] ===========================================
+# [Timer] Total: --- 4620.5 s
+#
+# A build of pypy (nojit) on x86_64 took about an hour:
+# [Timer] Timings:
+# [Timer] annotate --- 537.5 s
+# [Timer] rtype_lltype --- 667.3 s
+# [Timer] backendopt_lltype --- 385.4 s
+# [Timer] stackcheckinsertion_lltype --- 42.5 s
+# [Timer] database_c --- 625.3 s
+# [Timer] source_c --- 1040.2 s
+# [Timer] compile_c --- 273.9 s
+# [Timer] ===========================================
+# [Timer] Total: --- 3572.0 s
+#
+#
+# A build of pypy-stackless on i686 took about 87 mins:
+# [Timer] Timings:
+# [Timer] annotate --- 584.2 s
+# [Timer] rtype_lltype --- 777.3 s
+# [Timer] backendopt_lltype --- 365.9 s
+# [Timer] stackcheckinsertion_lltype --- 39.3 s
+# [Timer] database_c --- 1089.6 s
+# [Timer] source_c --- 1868.6 s
+# [Timer] compile_c --- 490.4 s
+# [Timer] ===========================================
+# [Timer] Total: --- 5215.3 s
+
+
+# Should we build a "pypy" binary? (with jit)
+# pypy-1.4/pypy/jit/backend/detect_cpu.py:getcpuclassname currently supports the
+# following options:
+# 'i386', 'x86'
+# 'x86-without-sse2':
+# 'x86_64'
+# 'cli'
+# 'llvm'
+%ifarch %{ix86} x86_64
+# FIXME: is there a better way of expressing "intel" here?
+%global with_jit 1
+%else
+%global with_jit 0
+%endif
+
+# Should we build a "pypy-stackless" binary?
+%global with_stackless 0
+
+
+# Easy way to enable/disable verbose logging:
+%global verbose_logs 0
+
+%global pypyprefix %{_libdir}/pypy-%{version}
+%global pylibver 2.5.2
+
+# We refer to this subdir of the source tree in a few places during the build:
+%global goal_dir pypy/translator/goal
+
+
+# Turn off the brp-python-bytecompile postprocessing script
+# We manually invoke it later on, using the freshly built pypy binary
+%global __os_install_post \
+ %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
+
+# Source and patches:
+Source0: http://pypy.org/download/pypy-%{version}-src.tar.bz2
+
+# Edit a translator file for linux in order to configure our cflags and dynamic libffi
+Patch0: pypy-1.4-config.patch
+
+# 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:
+Patch1: pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
+
+# test_commmands fails on SELinux systems due to a change in the output
+# of "ls" (http://bugs.python.org/issue7108)
+Patch2: fix-test_commands-expected-ls-output-issue7108.patch
+
+# When locating the pypy standard libraries, look first within
+# LIBRARY_INSTALLATION_PATH.
+# We convert this from being a non-existant variable into a string literal
+# with the value of "pypyprefix" in the "prep" phase below.
+#
+# We still use the scanning relative to the binary location when invoking a
+# pypy binary during the build (e.g. during "check")
+#
+# Sent upstream (with caveats) as:
+# https://codespeak.net/issue/pypy-dev/issue614
+Patch3: pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
+
+# Build-time requirements:
+
+BuildRequires: python-devel
+
+# FIXME: I'm seeing errors like this in the logs:
+# [translation:WARNING] The module '_rawffi' is disabled
+# [translation:WARNING] because importing pypy.rlib.libffi raised ImportError
+# [translation:WARNING] 'libffi.a' not found in ['/usr/lib/libffi', '/usr/lib']
+# Presumably we need to fix things to support dynamically-linked libffi
+BuildRequires: libffi-devel
+
+BuildRequires: zlib-devel
+BuildRequires: bzip2-devel
+BuildRequires: ncurses-devel
+BuildRequires: expat-devel
+BuildRequires: openssl-devel
+BuildRequires: valgrind-devel
+
+# Used by the selftests, though not by the build:
+BuildRequires: gc-devel
+
+BuildRequires: /usr/bin/execstack
+
+# pypy is bundling these so we delete them in %%prep. I don't think they are
+# needed unless we build pypy targetted at running on the jvm.
+#BuildRequires: jna
+#BuildRequires: jasmin # Not yet in Fedora
+
+
+# Metadata for the core package (the JIT build):
+Requires: pypy-libs = %{version}-%{release}
+
+%description
+PyPy's implementation of Python, featuring a Just-In-Time compiler, and various
+optimized implementations of the standard types (strings, dictionaries, etc)
+
+
+%package libs
+Group: Development/Languages
+Summary: Run-time libraries used by PyPy implementations of Python
+%description libs
+Libraries required by the various PyPy implementations of Python.
+
+%if 0%{with_stackless}
+%package stackless
+Group: Development/Languages
+Summary: Stackless Python interpreter built using PyPy
+Requires: pypy-libs = %{version}-%{release}
+%description stackless
+Build of PyPy with support for micro-threads for massive concurrency
+%endif
+
+%if 0%{with_stackless}
+%package stackless
+Group: Development/Languages
+Summary: Stackless Python interpreter built using PyPy
+Requires: pypy-libs = %{version}-%{release}
+%description stackless
+Build of PyPy with support for micro-threads for massive concurrency
+%endif
+
+
+%prep
+%setup -q -n pypy-%{version}-src
+%patch0 -p1 -b .configure-fedora
+%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
+
+pushd lib-python/%{pylibver}
+%patch2 -p0
+popd
+
+# Look for the pypy libraries within LIBRARY_INSTALLATION_PATH first:
+%patch3 -p1
+# Fixup LIBRARY_INSTALLATION_PATH to be a string literal containing our value
+# for "pypyprefix":
+sed -i \
+ -e 's|LIBRARY_INSTALLATION_PATH|"%{pypyprefix}"|' \
+ pypy/translator/goal/app_main.py
+
+
+# Replace /usr/local/bin/python shebangs with /usr/bin/python:
+find -name "*.py" -exec \
+ sed \
+ -i -e "s|/usr/local/bin/python|/usr/bin/python|" \
+ "{}" \
+ \;
+
+find . -name '*.jar' -exec rm \{\} \;
+
+# Remove stray ".svn" directories present within the 1.4.1 tarball
+# (reported as https://codespeak.net/issue/pypy-dev/issue612 )
+find . -path '*/.svn*' -delete
+
+# Remove DOS batch files:
+find -name "*.bat"|xargs rm -f
+
+# The "demo" directory gets auto-installed by virture of being listed in %doc
+# Remove shebang lines from demo .py files, and remove executability from them:
+for f in demo/bpnn.py ; do
+ # Detect shebang lines && remove them:
+ sed -e '/^#!/Q 0' -e 'Q 1' $f \
+ && sed -i '1d' $f
+ chmod a-x $f
+done
+
+%build
+
+BuildPyPy() {
+ ExeName=$1
+ Options=$2
+
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "STARTING BUILD OF: $ExeName"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+
+ pushd %{goal_dir}
+
+ # The build involves invoking a python script, passing in particular
+ # arguments, environment variables, etc.
+ # Some notes on those follow:
+
+ # The generated binary embeds copies of the values of all environment
+ # variables. We need to unset "RPM_BUILD_ROOT" to avoid a fatal error from
+ # /usr/lib/rpm/check-buildroot
+ # during the postprocessing of the rpmbuild, complaining about this
+ # reference to the buildroot
+
+
+ # By default, pypy's autogenerated C code is placed in
+ # /tmp/usession-N
+ #
+ # and it appears that this stops rpm from extracting the source code to the
+ # debuginfo package
+ #
+ # The logic in pypy-1.4/pypy/tool/udir.py indicates that it is generated in:
+ # $PYPY_USESSION_DIR/usession-$PYPY_USESSION_BASENAME-N
+ # and so we set PYPY_USESSION_DIR so that this tempdir is within the build
+ # location, and set $PYPY_USESSION_BASENAME so that the tempdir is unique
+ # for each invocation of BuildPyPy
+
+ # Compilation flags for C code:
+ # pypy-1.4/pypy/translator/c/genc.py:gen_makefile
+ # assembles a Makefile within
+ # THE_UDIR/testing_1/Makefile
+ # calling out to platform.gen_makefile
+ # For us, that's
+ # pypy-1.4/pypy/translator/platform/linux.py: class BaseLinux(BasePosix):
+ # which by default has:
+ # CFLAGS = ['-O3', '-pthread', '-fomit-frame-pointer',
+ # '-Wall', '-Wno-unused']
+ # plus all substrings from CFLAGS in the environment.
+ # This is used to generate a value for CFLAGS that's written into the Makefile
+
+ # https://bugzilla.redhat.com/show_bug.cgi?id=588941#c18
+ # The generated Makefile compiles the .c files into assembler (.s), rather
+ # than direct to .o It then post-processes this assembler to locate
+ # garbage-collection roots (building .lbl.s and .gcmap files, and a
+ # "gcmaptable.s"). (The modified .lbl.s files have extra code injected
+ # within them).
+ # Unfortunately, the code to do this:
+ # pypy-1.4/pypy/translator/c/gcc/trackgcroot.py
+ # doesn't interract well with the results of using our standard build flags.
+ # For now, filter our CFLAGS of everything that could be conflicting with
+ # pypy. Need to check these and reenable ones that are okay later.
+ 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//')
+
+ # If we're already built the JIT-enabled "pypy", then use it for subsequent
+ # builds (of other configurations):
+ if test -x './pypy' ; then
+ INTERP='./pypy'
+ else
+ INTERP='python'
+ fi
+
+ # Here's where we actually invoke the build:
+ time \
+ RPM_BUILD_ROOT= \
+ PYPY_USESSION_DIR=$(pwd) \
+ PYPY_USESSION_BASENAME=$ExeName \
+ $INTERP translate.py \
+%if 0%{verbose_logs}
+ --translation-verbose \
+%endif
+ --cflags="$CFLAGS" \
+ --batch \
+ --output=$ExeName \
+ $Options
+
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "FINISHED BUILDING: $ExeName"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+
+ popd
+}
+
+%if 0%{with_jit}
+BuildPyPy \
+ pypy \
+ "-Ojit"
+%endif
+
+%if 0%{with_stackless}
+BuildPyPy \
+ pypy-stackless \
+ "--stackless"
+%endif
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+
+# Install the various executables:
+
+InstallPyPy() {
+ ExeName=$1
+
+ install -m 755 %{goal_dir}/$ExeName %{buildroot}/%{_bindir}
+
+ # The generated machine code doesn't need an executable stack, but
+ # one of the assembler files (gcmaptable.s) doesn't have the necessary
+ # metadata to inform gcc of that, and thus gcc pessimistically assumes
+ # that the built binary does need an executable stack.
+ #
+ # Reported upstream as: https://codespeak.net/issue/pypy-dev/issue610
+ #
+ # I tried various approaches involving fixing the build, but the simplest
+ # approach is to postprocess the ELF file:
+ execstack --clear-execstack %{buildroot}/%{_bindir}/$ExeName
+}
+
+mkdir -p %{buildroot}/%{_bindir}
+
+%if 0%{with_jit}
+InstallPyPy pypy
+%endif
+
+%if 0%{with_stackless}
+InstallPyPy pypy-stackless
+%endif
+
+
+# Install the various support libraries as described at:
+# http://codespeak.net/pypy/dist/pypy/doc/getting-started-python.html#insta...
+# 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 '.'
+
+mkdir -p %{buildroot}/%{pypyprefix}
+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 shebang lines from .py files that aren't executable, and
+# remove executability from .py files that don't have a shebang line:
+find \
+ %{buildroot} \
+ -name "*.py" \
+ \( \
+ \( \! -perm /u+x,g+x,o+x -exec sed -e '/^#!/Q 0' -e 'Q 1' {} \; \
+ -print -exec sed -i '1d' {} \; \
+ \) \
+ -o \
+ \( \
+ -perm /u+x,g+x,o+x ! -exec grep -m 1 -q '^#!' {} \; \
+ -exec chmod a-x {} \; \
+ \) \
+ \)
+
+mkdir -p %{buildroot}/%{pypyprefix}/site-packages
+
+
+# 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
+# is treated as a "dummy optimization flag for compatibility with C Python"
+#
+# pypy-1.4/pypy/module/imp/importing.py has this comment:
+ # XXX picking a magic number is a mess. So far it works because we
+ # have only two extra opcodes, which bump the magic number by +1 and
+ # +2 respectively, and CPython leaves a gap of 10 when it increases
+ # its own magic number. To avoid assigning exactly the same numbers
+ # as CPython we always add a +2. We'll have to think again when we
+ # get at the fourth new opcode :-(
+ #
+ # * CALL_LIKELY_BUILTIN +1
+ # * CALL_METHOD +2
+ #
+ # In other words:
+ #
+ # default_magic -- used by CPython without the -U option
+ # default_magic + 1 -- used by CPython with the -U option
+ # default_magic + 2 -- used by PyPy without any extra opcode
+ # ...
+ # default_magic + 5 -- used by PyPy with both extra opcodes
+#
+
+# pypy-1.4/pypy/interpreter/pycode.py has:
+#
+# default_magic = (62141+2) | 0x0a0d0000 # this PyPy's magic
+# # (62131=CPython 2.5.1)
+# giving a value for "default_magic" for PyPy of 0xa0df2bf.
+# Note that this corresponds to the "default_magic + 2" from the comment above
+
+# In my builds:
+# $ ./pypy --info | grep objspace.opcodes
+# objspace.opcodes.CALL_LIKELY_BUILTIN: False
+# objspace.opcodes.CALL_METHOD: True
+# so I'd expect the magic number to be:
+# 0x0a0df2bf + 2 (the flag for CALL_METHOD)
+# giving
+# 0x0a0df2c1
+#
+# I'm seeing
+# c1 f2 0d 0a
+# as the first four bytes of the .pyc files, which is consistent with this.
+
+
+# Bytecompile all of the .py files we ship, using our pypy binary, giving us
+# .pyc files for pypy. The script actually does the work twice (passing in -O
+# the second time) but it's simplest to reuse that script.
+#
+# The script has special-casing for .py files below
+# /usr/lib{64}/python[0-9].[0-9]
+# but given that we're installing into a different path, the supplied "default"
+# implementation gets used instead.
+#
+# 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}/pypy \
+ 0
+
+%check
+topdir=$(pwd)
+
+SkipTest() {
+ # Append the given test name to TESTS_TO_SKIP
+ TEST_NAME=$1
+ TESTS_TO_SKIP="$TESTS_TO_SKIP $TEST_NAME"
+}
+
+CheckPyPy() {
+ # We'll be exercising one of the freshly-built binaries using the
+ # test suite from the standard library (overridden in places by pypy's
+ # modified version)
+ ExeName=$1
+
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "STARTING TEST OF: $ExeName"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+
+ pushd %{goal_dir}
+
+ # Gather a list of tests to skip, due to known failures
+ # TODO: report these failures to pypy upstream
+ TESTS_TO_SKIP=""
+
+ # Test failures relating to missing codecs
+ # Hopefully when pypy merges to 2.7 support we'll gain these via a
+ # refreshed stdlib:
+ # test_codecencodings_cn:
+ # all tests fail, with one of
+ # unknown encoding: gb18030
+ # unknown encoding: gb2312
+ # unknown encoding: gbk
+ SkipTest test_codecencodings_cn
+
+ # test_codecencodings_hk:
+ # all tests fail, with:
+ # unknown encoding: big5hkscs
+ SkipTest test_codecencodings_hk
+
+ # test_codecencodings_jp:
+ # all tests fail, with one of:
+ # unknown encoding: cp932
+ # unknown encoding: euc_jisx0213
+ # unknown encoding: euc_jp
+ # unknown encoding: shift_jis
+ # unknown encoding: shift_jisx0213
+ SkipTest test_codecencodings_jp
+
+ # test_codecencodings_kr:
+ # all tests fail, with one of:
+ # unknown encoding: cp949
+ # unknown encoding: euc_kr
+ # unknown encoding: johab
+ SkipTest test_codecencodings_kr
+
+ # test_codecencodings_tw:
+ # all tests fail, with:
+ # unknown encoding: big5
+ SkipTest test_codecencodings_tw
+
+ # test_multibytecodec:
+ # 14 failures out of 15, due to:
+ # unknown encoding: euc-kr
+ # unknown encoding: gb2312
+ # unknown encoding: jisx0213
+ # unknown encoding: cp949
+ # unknown encoding: iso2022-jp
+ # unknown encoding: gb18030
+ SkipTest test_multibytecodec
+
+ #
+ # Other failures:
+ #
+ # test_asynchat:
+ # seems to hang on this test, within test_line_terminator
+ SkipTest test_asynchat
+
+ # test_compiler:
+ # 4 errors out of 13:
+ # testSourceCodeEncodingsError
+ # testWith
+ # testWithAss
+ # testYieldExpr
+ SkipTest test_compiler
+
+ # test_ctypes:
+ # failures=17, errors=20, out of 132 tests
+ SkipTest test_ctypes
+
+ # test_frozen:
+ # TestFailed: import __hello__ failed:No module named __hello__
+ SkipTest test_frozen
+
+ # test_iterlen:
+ # 24 failures out of 25, apparently all due to TypeError
+ SkipTest test_iterlen
+
+ # test_parser:
+ # 12 failures out of 15
+ SkipTest test_parser
+
+ # test_platform:
+ # Koji builds show:
+ # test test_platform failed -- errors occurred in test.test_platform.PlatformTest
+ SkipTest test_platform
+
+ # test_socket:
+ # testSockName can fail in Koji with:
+ # my_ip_addr = socket.gethostbyname(socket.gethostname())
+ # gaierror: (-3, 'Temporary failure in name resolution')
+ SkipTest test_socket
+
+ # test_sort:
+ # some failures
+ SkipTest test_sort
+
+ # test_sqlite:
+ # 3 of the sqlite3.test.dbapi.ExtensionTests raise:
+ # ProgrammingError: Incomplete statement ''
+ SkipTest test_sqlite
+
+ # test_traceback:
+ # works when run standalone; failures seen when run as part of a suite
+ SkipTest test_traceback
+
+ # test_zlib:
+ # failure seen in Koji, not sure of reason why:
+ # test test_zlib failed -- Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.4.1-src/lib-python/2.5.2/test/test_zlib.py", line 72, in test_baddecompressobj
+ # self.assertRaises(ValueError, zlib.decompressobj, 0)
+ # AssertionError: ValueError not raised
+ SkipTest test_zlib
+
+
+ # Run the built binary through the selftests:
+ time ./$ExeName -m test.regrtest -x $TESTS_TO_SKIP
+
+ popd
+
+ # Doublecheck pypy's own test suite, using the built pypy binary:
+
+ # Disabled for now:
+ # x86_64 shows various failures inside:
+ # jit/backend/x86/test
+ # followed by a segfault inside
+ # jit/backend/x86/test/test_runner.py
+ #
+ # i686 shows various failures inside:
+ # jit/backend/x86/test
+ # with the x86_64 failure leading to cancellation of the i686 build
+
+ # Here's the disabled code:
+ # pushd pypy
+ # time translator/goal/$ExeName test_all.py
+ # popd
+
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "FINISHED TESTING: $ExeName"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+}
+
+%if 0%{with_jit}
+CheckPyPy pypy
+%endif
+
+%if 0%{with_stackless}
+CheckPyPy pypy-stackless
+%endif
+
+
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+
+%files libs
+%defattr(-,root,root,-)
+%doc LICENSE README demo
+
+%dir %{pypyprefix}
+%dir %{pypyprefix}/lib-python
+%{pypyprefix}/lib-python/%{pylibver}/
+%{pypyprefix}/lib-python/modified-%{pylibver}/
+%{pypyprefix}/lib-python/conftest.py*
+%{pypyprefix}/lib_pypy/
+%{pypyprefix}/site-packages/
+
+%if 0%{with_jit}
+%files
+%defattr(-,root,root,-)
+%doc LICENSE README
+%{_bindir}/pypy
+%endif
+
+%if 0%{with_stackless}
+%files stackless
+%defattr(-,root,root,-)
+%doc LICENSE README
+%{_bindir}/pypy-stackless
+%endif
+
+
+%changelog
+* Wed Dec 22 2010 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-3
+- try to respect the FHS by installing libraries below libdir, rather than
+datadir; patch app_main.py to look in this installation location first when
+scanning for the pypy library directories.
+- clarifications and corrections to the comments in the specfile
+
+* Wed Dec 22 2010 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-2
+- remove .svn directories
+- disable verbose logging
+- add a %%check section
+- introduce %%goal_dir variable, to avoid repetition
+- remove shebang line from demo/bpnn.py, as we're treating this as a
+documentation file
+- regenerate patch 2 to apply without generating a .orig file
+
+* Tue Dec 21 2010 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-1
+- 1.4.1; fixup %%setup to reflect change in toplevel directory in upstream
+source tarball
+- apply SELinux fix to the bundled test_commands.py (patch 2)
+
+* Wed Dec 15 2010 David Malcolm <dmalcolm(a)redhat.com> - 1.4-4
+- rename the jit build and subpackge to just "pypy", and remove the nojit and
+sandbox builds, as upstream now seems to be focussing on the JIT build (with
+only stackless called out in the getting-started-python docs); disable
+stackless for now
+- add a verbose_logs specfile boolean; leave it enabled for now (whilst fixing
+build issues)
+- add more comments, and update others to reflect 1.2 -> 1.4 changes
+- re-enable debuginfo within CFLAGS ("-g")
+- add the LICENSE and README to all subpackages
+- ensure the built binaries don't have the "I need an executable stack" flag
+- remove DOS batch files during %%prep (idlelib.bat)
+- remove shebang lines from .py files that aren't executable, and remove
+executability from .py files that don't have a shebang line (taken from
+our python3.spec)
+- bytecompile the .py files into .pyc files in pypy's bytecode format
+
+* Sun Nov 28 2010 Toshio Kuratomi <toshio(a)fedoraproject.org> - 1.4-3
+- BuildRequire valgrind-devel
+- Install pypy library from the new directory
+- Disable building with our CFLAGS for now because they are causing a build failure.
+- Include site-packages directory
+
+* Sat Nov 27 2010 Toshio Kuratomi <toshio(a)fedoraproject.org> - 1.4-2
+- Add patch to configure the build to use our CFLAGS and link libffi
+ dynamically
+
+* Sat Nov 27 2010 Toshio Kuratomi <toshio(a)fedoraproject.org> - 1.4-1
+- Update to 1.4
+- Drop patch for py2.6 that's in this build
+- Switch to building pypy with itself once pypy is built once as recommended by
+ upstream
+- Remove bundled, prebuilt java libraries
+- Fix license tag
+- Fix source url
+- Version pypy-libs Req
+
+* Tue May 4 2010 David Malcolm <dmalcolm(a)redhat.com> - 1.2-2
+- cherrypick r72073 from upstream SVN in order to fix the build against
+python 2.6.5 (patch 2)
+
+* Wed Apr 28 2010 David Malcolm <dmalcolm(a)redhat.com> - 1.2-1
+- initial packaging
+
diff --git a/sources b/sources
index e69de29..90f34be 100644
--- a/sources
+++ b/sources
@@ -0,0 +1 @@
+ebbbb156b1eb842e9e65d909ed5f9f6d pypy-1.4.1-src.tar.bz2
2 years, 10 months
Architecture specific change in rpms/pypy3.7.git
by githook-noreply@fedoraproject.org
The package rpms/pypy3.7.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=5aa1d86125...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=faa7ffb044...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=083ef4d302...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=f27d32f530...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=9d0ffbc9d5...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=82dcbae232...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=720aa9bae8...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=a6780ec435...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=b929faae35...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=9107198269...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=ad0d37c683...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=6b002d36f3...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=693a83b0c2...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=817c77d554...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=347fb465b0...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=343676a899...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=4a3038ff56...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=43ee778526...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=a0374180ff...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=d39359a3af...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=f756cfcb34....
Change:
+%ifarch %{ix86} x86_64 %{arm} %{power64} s390x aarch64
-%ifarch %{power64}
-ExcludeArch: %{power64}
+ExcludeArch: %{power64}
+ExcludeArch: aarch64 %{power64}
+%ifarch %{power64}
-%ifnarch aarch64 ppc64le
+%ifarch %{ix86} x86_64 %{arm} %{power64} s390x
+%ifarch s390 s390x
+%ifarch %{ix86} x86_64 %{arm}
+ExcludeArch: aarch64
+ExcludeArch: aarch64 armv7hl s390 s390x
+ExcludeArch: aarch64 s390 s390x
+ExcludeArch: aarch64 s390 s390x ppc64le ppc64
+ExcludeArch: aarch64 s390 s390x
-%ifarch x86_64
+%ifarch x86_64
+%ifnarch aarch64 ppc64le
+%ifnarch s390
+%ifarch %{ix86} x86_64 ppc ppc64 s390x
+%ifarch %{ix86} x86_64
Thanks.
Full change:
============
commit 27985bbcb8631a6af65c76bde080577242960df5
Author: Tomas Hrnciar <thrnciar(a)redhat.com>
Date: Tue Aug 10 13:38:40 2021 +0200
Add bcond main_pypy3 to differentiate whether package is main pypy
package or not
diff --git a/pypy3.7.spec b/pypy3.7.spec
index a660404..33e04c9 100644
--- a/pypy3.7.spec
+++ b/pypy3.7.spec
@@ -126,6 +126,12 @@ URL: http://pypy.org/
# We refer to this subdir of the source tree in a few places during the build:
%global goal_dir pypy/goal
+%if 0%{?fedora} >= 35
+%bcond_without main_pypy3
+%else
+%bcond_with main_pypy3
+%endif
+
# Source and patches:
Source0: https://downloads.python.org/pypy/pypy%{pyversion}-v%{version}-src.tar.bz2
@@ -237,10 +243,12 @@ BuildRequires: python-pip-wheel
# Metadata for the core package (the JIT build):
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
+%if %{with main_pypy3}
Provides: %{name}(abi) = %{basever}
Provides: pypy3 = %{version}-%{release}
Provides: pypy3%{?_isa} = %{version}-%{release}
Obsoletes: pypy3 < 7.3.4-4
+%endif
%description
PyPy's implementation of Python 3, featuring a Just-In-Time compiler on some CPU
@@ -264,9 +272,11 @@ Summary: Run-time libraries used by PyPy implementations of Python 3
Requires: emacs-filesystem >= %{_emacs_version}
%endif
+%if %{with main_pypy3}
Provides: pypy3-libs = %{version}-%{release}
Provides: pypy3-libs%{?_isa} = %{version}-%{release}
Obsoletes: pypy3-libs < 7.3.4-4
+%endif
%if %{with rpmwheels}
Requires: python-setuptools-wheel
@@ -299,9 +309,11 @@ Libraries required by the various PyPy implementations of Python 3.
Summary: Development tools for working with PyPy3
Requires: pypy%{pyversion}%{?_isa} = %{version}-%{release}
+%if %{with main_pypy3}
Provides: pypy3-devel = %{version}-%{release}
Provides: pypy3-devel%{?_isa} = %{version}-%{release}
Obsoletes: pypy3-devel < 7.3.4-4
+%endif
%description devel
Header files for building C extension modules against PyPy3
@@ -537,7 +549,9 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
execstack --clear-execstack %{buildroot}/%{pypyprefix}/bin/pypy3
ln -s %{pypyprefix}/bin/pypy%{pyversion} %{buildroot}%{_bindir}/pypy%{pyversion}
+%if %{with main_pypy3}
ln -s pypy%{pyversion} %{buildroot}%{_bindir}/pypy3
+%endif
# 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
@@ -662,12 +676,14 @@ 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}/pypy3trace-mode.el
-cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/pypy3trace-mode.elc
+cp -a rpython/jit/tool/pypytrace-mode.el %{buildroot}/%{_emacs_sitelispdir}/pypy%{pyversion}trace-mode.el
+cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/pypy%{pyversion}trace-mode.elc
%endif
+%if %{with main_pypy3}
# Install macros for rpm:
install -m0644 -p -D -t %{buildroot}/%{_rpmconfigdir}/macros.d %{SOURCE2}
+%endif
# Remove files we don't want:
rm -f %{buildroot}%{_libdir}/%{name}.tar.bz2 \
@@ -828,8 +844,8 @@ CheckPyPy pypy3-c
%license %{pypyprefix}/lib_pypy/*/LICENSE
%{pypyprefix}/site-packages/
%if %{with_emacs}
-%{_emacs_sitelispdir}/pypy3trace-mode.el
-%{_emacs_sitelispdir}/pypy3trace-mode.elc
+%{_emacs_sitelispdir}/pypy%{pyversion}trace-mode.el
+%{_emacs_sitelispdir}/pypy%{pyversion}trace-mode.elc
%endif
%files
commit 86f73ef2399e7e79e12a312bc017a25e51d949df
Author: Tomas Hrnciar <thrnciar(a)redhat.com>
Date: Mon Aug 9 12:52:43 2021 +0200
Removes pypy-stackless as it is not needed anymore
diff --git a/pypy3.7.spec b/pypy3.7.spec
index 9133480..a660404 100644
--- a/pypy3.7.spec
+++ b/pypy3.7.spec
@@ -78,19 +78,6 @@ URL: http://pypy.org/
# [Timer] compile_c --- 273.9 s
# [Timer] ===========================================
# [Timer] Total: --- 3572.0 s
-#
-#
-# A build of pypy-stackless on i686 took about 87 mins:
-# [Timer] Timings:
-# [Timer] annotate --- 584.2 s
-# [Timer] rtype_lltype --- 777.3 s
-# [Timer] backendopt_lltype --- 365.9 s
-# [Timer] stackcheckinsertion_lltype --- 39.3 s
-# [Timer] database_c --- 1089.6 s
-# [Timer] source_c --- 1868.6 s
-# [Timer] compile_c --- 490.4 s
-# [Timer] ===========================================
-# [Timer] Total: --- 5215.3 s
# We will build a "pypy" binary.
@@ -116,9 +103,6 @@ URL: http://pypy.org/
%global with_jit 0
%endif
-# Should we build a "pypy-stackless" binary?
-%global with_stackless 0
-
# Should we build the emacs JIT-viewing mode?
%if 0%{?rhel} == 6
%global with_emacs 0
@@ -323,19 +307,6 @@ Obsoletes: pypy3-devel < 7.3.4-4
Header files for building C extension modules against PyPy3
-%if 0%{with_stackless}
-%package stackless
-Summary: Stackless Python interpreter built using PyPy3
-Requires: pypy3-libs%{?_isa} = %{version}-%{release}
-
-Provides: pypy3-stackless = %{version}-%{release}
-Provides: pypy3-stackless%{?_isa} = %{version}-%{release}
-Obsoletes: pypy3-stackless < 7.3.4-4
-
-%description stackless
-Build of PyPy3 with support for micro-threads for massive concurrency
-%endif
-
%prep
%autosetup -n pypy%{pyversion}-v%{version}-src -p1 -S git
@@ -522,12 +493,6 @@ BuildPyPy \
%endif
%{nil}
-%if 0%{with_stackless}
-BuildPyPy \
- pypy3-stackless \
- "--stackless"
-%endif
-
%if %{with_emacs}
%{_emacs_bytecompile} rpython/jit/tool/pypytrace-mode.el
%endif
@@ -845,11 +810,6 @@ CheckPyPy() {
%if %{run_selftests}
CheckPyPy pypy3-c
-
-%if 0%{with_stackless}
-CheckPyPy pypy3-stackless
-%endif
-
%endif # run_selftests
# Because there's a bunch of binary subpackages and creating
@@ -887,12 +847,6 @@ CheckPyPy pypy3-stackless
%{_rpmconfigdir}/macros.d/macros.pypy3
%endif
-%if 0%{with_stackless}
-%files stackless
-%doc README.rst
-%{_bindir}/pypy-stackless
-%endif
-
%changelog
* Mon Aug 09 2021 Tomas Hrnciar <thrnciar(a)redhat.com> - 7.3.4-4
commit b8466c1e8afa8093205b6100a27540f753b5c9d9
Author: Tomas Hrnciar <thrnciar(a)redhat.com>
Date: Mon Aug 9 12:45:19 2021 +0200
Rename pypy3 to pypy3.7
diff --git a/pypy3.spec b/pypy3.7.spec
similarity index 97%
rename from pypy3.spec
rename to pypy3.7.spec
index 2bd5917..9133480 100644
--- a/pypy3.spec
+++ b/pypy3.7.spec
@@ -1,8 +1,8 @@
%global basever 7.3
-Name: pypy3
-Version: %{basever}.4
%global pyversion 3.7
-Release: 3%{?dist}
+Name: pypy%{pyversion}
+Version: %{basever}.4
+Release: 4%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# PyPy is MIT
@@ -136,7 +136,7 @@ URL: http://pypy.org/
# Easy way to turn off the selftests:
%global run_selftests 1
-%global pypyprefix %{_libdir}/pypy3-%{basever}
+%global pypyprefix %{_libdir}/pypy%{pyversion}
%global pylibver 3
# We refer to this subdir of the source tree in a few places during the build:
@@ -254,8 +254,9 @@ BuildRequires: python-pip-wheel
# Metadata for the core package (the JIT build):
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
Provides: %{name}(abi) = %{basever}
-Provides: pypy%{pyversion} = %{version}-%{release}
-Provides: pypy%{pyversion}%{?_isa} = %{version}-%{release}
+Provides: pypy3 = %{version}-%{release}
+Provides: pypy3%{?_isa} = %{version}-%{release}
+Obsoletes: pypy3 < 7.3.4-4
%description
PyPy's implementation of Python 3, featuring a Just-In-Time compiler on some CPU
@@ -279,8 +280,9 @@ Summary: Run-time libraries used by PyPy implementations of Python 3
Requires: emacs-filesystem >= %{_emacs_version}
%endif
-Provides: pypy%{pyversion}-libs = %{version}-%{release}
-Provides: pypy%{pyversion}-libs%{?_isa} = %{version}-%{release}
+Provides: pypy3-libs = %{version}-%{release}
+Provides: pypy3-libs%{?_isa} = %{version}-%{release}
+Obsoletes: pypy3-libs < 7.3.4-4
%if %{with rpmwheels}
Requires: python-setuptools-wheel
@@ -311,10 +313,11 @@ Libraries required by the various PyPy implementations of Python 3.
%package devel
Summary: Development tools for working with PyPy3
-Requires: pypy3%{?_isa} = %{version}-%{release}
+Requires: pypy%{pyversion}%{?_isa} = %{version}-%{release}
-Provides: pypy%{pyversion}-devel = %{version}-%{release}
-Provides: pypy%{pyversion}-devel%{?_isa} = %{version}-%{release}
+Provides: pypy3-devel = %{version}-%{release}
+Provides: pypy3-devel%{?_isa} = %{version}-%{release}
+Obsoletes: pypy3-devel < 7.3.4-4
%description devel
Header files for building C extension modules against PyPy3
@@ -325,8 +328,9 @@ Header files for building C extension modules against PyPy3
Summary: Stackless Python interpreter built using PyPy3
Requires: pypy3-libs%{?_isa} = %{version}-%{release}
-Provides: pypy%{pyversion}-stackless = %{version}-%{release}
-Provides: pypy%{pyversion}-stackless%{?_isa} = %{version}-%{release}
+Provides: pypy3-stackless = %{version}-%{release}
+Provides: pypy3-stackless%{?_isa} = %{version}-%{release}
+Obsoletes: pypy3-stackless < 7.3.4-4
%description stackless
Build of PyPy3 with support for micro-threads for massive concurrency
@@ -534,8 +538,8 @@ mkdir -p %{buildroot}/%{_bindir}
mkdir -p %{buildroot}/%{pypyprefix}
-# Run installing script, archive-name %{name}-%{basever} in %{buildroot}/%{_libdir} == %{pypyprefix}
-%{bootstrap_python_interp} pypy/tool/release/package.py --archive-name %{name}-%{basever} --builddir %{buildroot}/%{_libdir} --no-embedded-dependencies
+# Run installing script, archive-name pypy%{pyversion} in %{buildroot}/%{_libdir} == %{pypyprefix}
+%{bootstrap_python_interp} pypy/tool/release/package.py --archive-name pypy%{pyversion} --builddir %{buildroot}/%{_libdir} --no-embedded-dependencies
# Remove shebang lines from .py files that aren't executable, and
@@ -701,7 +705,7 @@ cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/pyp
install -m0644 -p -D -t %{buildroot}/%{_rpmconfigdir}/macros.d %{SOURCE2}
# Remove files we don't want:
-rm -f %{buildroot}%{_libdir}/%{name}-%{basever}.tar.bz2 \
+rm -f %{buildroot}%{_libdir}/%{name}.tar.bz2 \
%{buildroot}%{pypyprefix}/README.rst
# wtf? This is probably masking some bigger problem, but let's do this for now
@@ -840,10 +844,10 @@ CheckPyPy() {
#pypy/goal/pypy pypy/test_all.py --resultlog=pypyjit_new.log
%if %{run_selftests}
-CheckPyPy %{name}-c
+CheckPyPy pypy3-c
%if 0%{with_stackless}
-CheckPyPy %{name}-stackless
+CheckPyPy pypy3-stackless
%endif
%endif # run_selftests
@@ -870,16 +874,18 @@ CheckPyPy %{name}-stackless
%files
%doc README.rst
+%if %{with main_pypy3}
%{_bindir}/pypy3
+%endif
%{_bindir}/pypy%{pyversion}
%{pypyprefix}/bin/
-%exclude %{_libdir}/%{name}-%{version}.tar.bz2
-
%files devel
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
+%if %{with main_pypy3}
%{_rpmconfigdir}/macros.d/macros.pypy3
+%endif
%if 0%{with_stackless}
%files stackless
@@ -889,6 +895,10 @@ CheckPyPy %{name}-stackless
%changelog
+* Mon Aug 09 2021 Tomas Hrnciar <thrnciar(a)redhat.com> - 7.3.4-4
+- Rename pypy3 to pypy3.7
+- pypy-stackless was removed
+
* Fri Jul 23 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.4-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
diff --git a/tests/tests.yml b/tests/tests.yml
index 827cb90..5242663 100644
--- a/tests/tests.yml
+++ b/tests/tests.yml
@@ -10,8 +10,8 @@
tests:
- smoke:
dir: python/smoke
- run: PYTHON=pypy3 VERSION=3.7 ./venv.sh
+ run: PYTHON=pypy3.7 VERSION=3.7 ./venv.sh
required_packages:
- gcc
- python3-tox
- - pypy3-devel
+ - pypy3.7-devel
commit 716f2f638d30f78656b784f42dd633aac492804e
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Fri Jul 23 04:30:08 2021 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index 3b11f44..2bd5917 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.4
%global pyversion 3.7
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# PyPy is MIT
@@ -889,6 +889,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri Jul 23 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.4-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
+
* Wed Jul 21 2021 Tomas Hrnciar <thrnciar(a)redhat.com> - 7.3.4-2
- Replace removed /usr/lib/rpm/brp-python-bytecompile with %%py_byte_compile macros
- Fixes: rhbz#1976656
commit e90c1b5d85ebcaed6e89cf8bf6b2327210769370
Author: Tomas Hrnciar <thrnciar(a)redhat.com>
Date: Wed Jul 21 16:19:29 2021 +0200
Replace removed /usr/lib/rpm/brp-python-bytecompile with %%py_byte_compile macros
diff --git a/pypy3.spec b/pypy3.spec
index 025102c..3b11f44 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.4
%global pyversion 3.7
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# PyPy is MIT
@@ -143,10 +143,6 @@ URL: http://pypy.org/
%global goal_dir pypy/goal
-# Turn off the brp-python-bytecompile postprocessing script
-# We manually invoke it later on, using the freshly built pypy binary
-%global __brp_python_bytecompile %{nil}
-
# Source and patches:
Source0: https://downloads.python.org/pypy/pypy%{pyversion}-v%{version}-src.tar.bz2
@@ -221,6 +217,9 @@ BuildRequires: expat-devel
BuildRequires: openssl-devel
BuildRequires: gdbm-devel
BuildRequires: xz-devel
+
+BuildRequires: python-rpm-macros
+
%ifnarch s390
BuildRequires: valgrind-devel
%endif
@@ -617,19 +616,12 @@ ln -s pypy%{pyversion} %{buildroot}%{_bindir}/pypy3
# Bytecompile all of the .py files we ship, using our pypy binary, giving us
-# .pyc files for pypy. The script actually does the work twice (passing in -O
-# the second time) but it's simplest to reuse that script.
-#
-# The script has special-casing for .py files below
-# /usr/lib{64}/python[0-9].[0-9]
-# but given that we're installing into a different path, the supplied "default"
-# implementation gets used instead.
+# .pyc files for pypy.
#
# 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}%{pypyprefix}/bin/pypy3 \
- 0
+# we are running it in subshell, to be able to ignore the failures and not to terminate the build.
+(%{py_byte_compile %{buildroot}%{pypyprefix}/bin/pypy3 %{buildroot}%{pypyprefix}}) || :
+
%{buildroot}%{pypyprefix}/bin/pypy3 -c 'import _tkinter'
%{buildroot}%{pypyprefix}/bin/pypy3 -c 'import tkinter'
@@ -897,6 +889,10 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed Jul 21 2021 Tomas Hrnciar <thrnciar(a)redhat.com> - 7.3.4-2
+- Replace removed /usr/lib/rpm/brp-python-bytecompile with %%py_byte_compile macros
+- Fixes: rhbz#1976656
+
* Tue May 25 2021 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.4-1
- Update to 7.3.4
- pypy3 is now Python 3.7
commit f24f8ff0ada28610e3a6801d602c3effea640fe5
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri May 21 01:35:55 2021 +0200
Update to 7.3.4, PyPy3.7
diff --git a/.gitignore b/.gitignore
index 849f483..c4b4267 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,4 @@
/pypy3.6-v7.2.0-src.tar.bz2
/pypy3.6-v7.3.0-src.tar.bz2
/pypy3.6-v7.3.1-src.tar.bz2
+/pypy3.7-v7.3.4-src.tar.bz2
diff --git a/011-no-faulthandler.patch b/011-no-faulthandler.patch
index e093956..c0dd76b 100644
--- a/011-no-faulthandler.patch
+++ b/011-no-faulthandler.patch
@@ -30,7 +30,7 @@ index faa1ba7..2edadc9 100644
"PIPE_MAX_SIZE", "verbose", "max_memuse", "use_resources", "failfast",
@@ -2231,7 +2235,8 @@ def start_threads(threads, unlock=None):
finally:
- started = [t for t in started if t.isAlive()]
+ started = [t for t in started if t.is_alive()]
if started:
- faulthandler.dump_traceback(sys.stdout)
+ if faulthandler is not None:
diff --git a/189-use-rpm-wheels.patch b/189-use-rpm-wheels.patch
index 0032ba9..8fd8a55 100644
--- a/189-use-rpm-wheels.patch
+++ b/189-use-rpm-wheels.patch
@@ -1,25 +1,21 @@
diff --git a/lib-python/3/ensurepip/__init__.py b/lib-python/3/ensurepip/__init__.py
-index 6b35b3d..97fc83b 100644
+index 94d40b0..9135b80 100644
--- a/lib-python/3/ensurepip/__init__.py
+++ b/lib-python/3/ensurepip/__init__.py
-@@ -1,16 +1,34 @@
+@@ -1,3 +1,5 @@
+import distutils.version
+import glob
import os
import os.path
import pkgutil
- import sys
-+import runpy
- import tempfile
-
-
+@@ -9,9 +11,24 @@ import tempfile
__all__ = ["version", "bootstrap"]
-
-
--_SETUPTOOLS_VERSION = "44.0.0"
+
+
+-_SETUPTOOLS_VERSION = "47.1.0"
+_WHEEL_DIR = "/usr/share/python-wheels/"
-
--_PIP_VERSION = "20.0.2"
+
+-_PIP_VERSION = "20.1.1"
+_wheels = {}
+
+def _get_most_recent_wheel_version(pkg):
@@ -36,36 +32,14 @@ index 6b35b3d..97fc83b 100644
+_SETUPTOOLS_VERSION = _get_most_recent_wheel_version("setuptools")
+
+_PIP_VERSION = _get_most_recent_wheel_version("pip")
-
+
_PROJECTS = [
- ("setuptools", _SETUPTOOLS_VERSION),
-@@ -23,10 +41,18 @@ def _run_pip(args, additional_paths=None):
- if additional_paths is not None:
- sys.path = additional_paths + sys.path
-
-- # Install the bundled software
-- import pip._internal.cli.main
-- return pip._internal.cli.main.main(args)
-+ # Invoke pip as if it's the main module, and catch the exit.
-+ backup_argv = sys.argv[:]
-+ sys.argv[1:] = args
-+ try:
-+ # run_module() alters sys.modules and sys.argv, but restores them at exit
-+ runpy.run_module("pip", run_name="__main__", alter_sys=True)
-+ except SystemExit as exc:
-+ return exc.code
-+ finally:
-+ sys.argv[:] = backup_argv
-
-+ raise SystemError("pip did not exit, this should never happen")
-
- def version():
- """
-@@ -93,13 +119,10 @@ def _bootstrap(*, root=None, upgrade=False, user=False,
+ ("setuptools", _SETUPTOOLS_VERSION, "py3"),
+@@ -103,13 +120,10 @@ def _bootstrap(*, root=None, upgrade=False, user=False,
# additional paths that need added to sys.path
additional_paths = []
- for project, version in _PROJECTS:
-- wheel_name = "{}-{}-py2.py3-none-any.whl".format(project, version)
+ for project, version, py_tag in _PROJECTS:
+- wheel_name = "{}-{}-{}-none-any.whl".format(project, version, py_tag)
- whl = pkgutil.get_data(
- "ensurepip",
- "_bundled/{}".format(wheel_name),
diff --git a/pypy3.spec b/pypy3.spec
index 7b4d004..025102c 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,8 +1,8 @@
%global basever 7.3
Name: pypy3
-Version: %{basever}.1
-%global pyversion 3.6
-Release: 6%{?dist}
+Version: %{basever}.4
+%global pyversion 3.7
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# PyPy is MIT
@@ -25,7 +25,9 @@ URL: http://pypy.org/
# with the packaged version.
# The version information can be found at lib_pypy/_libmpdec/mpdecimal.h
# defined as MPD_VERSION.
-%global libmpdec_version 2.4.1
+# See https://foss.heptapod.net/pypy/pypy/-/issues/3024
+# With PyPy 7.3.4, the decimal module is not compiled
+#%%global libmpdec_version 2.4.1
# Whether to use RPM build wheels from the python-{pip,setuptools}-wheel package
# Uses upstream bundled prebuilt wheels otherwise
@@ -146,7 +148,7 @@ URL: http://pypy.org/
%global __brp_python_bytecompile %{nil}
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/downloads/pypy%{pyversion}-v%{version}-sr...
+Source0: https://downloads.python.org/pypy/pypy%{pyversion}-v%{version}-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -285,13 +287,15 @@ Provides: pypy%{pyversion}-libs%{?_isa} = %{version}-%{release}
Requires: python-setuptools-wheel
Requires: python-pip-wheel
%else
-Provides: bundled(python3dist(pip)) = 20.0.2
-Provides: bundled(python3dist(setuptools)) = 44.0.0
+Provides: bundled(python3dist(pip)) = 20.1.1
+Provides: bundled(python3dist(setuptools)) = 47.1.0
%endif
# Provides for the bundled libmpdec
+%{?libmpdec_version:
Provides: bundled(mpdecimal) = %{libmpdec_version}
Provides: bundled(libmpdec) = %{libmpdec_version}
+}
# Find the version in lib_pypy/cffi/_pycparser/__init__.py
Provides: bundled(python3dist(pycparser)) = 2.20
@@ -341,8 +345,8 @@ rm lib-python/3/ensurepip/_bundled/*.whl
rmdir lib-python/3/ensurepip/_bundled
%else
# we don't want to ship the old ones anyway
-rm lib-python/3/ensurepip/_bundled/pip-8.1.2-*
-rm lib-python/3/ensurepip/_bundled/setuptools-21.2.1-*
+rm lib-python/3/ensurepip/_bundled/pip-20.0*
+rm lib-python/3/ensurepip/_bundled/setuptools-44*
%endif
@@ -532,7 +536,7 @@ mkdir -p %{buildroot}/%{pypyprefix}
# Run installing script, archive-name %{name}-%{basever} in %{buildroot}/%{_libdir} == %{pypyprefix}
-%{bootstrap_python_interp} pypy/tool/release/package.py --archive-name %{name}-%{basever} --builddir %{buildroot}/%{_libdir}
+%{bootstrap_python_interp} pypy/tool/release/package.py --archive-name %{name}-%{basever} --builddir %{buildroot}/%{_libdir} --no-embedded-dependencies
# Remove shebang lines from .py files that aren't executable, and
@@ -564,7 +568,6 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
# approach is to postprocess the ELF file:
execstack --clear-execstack %{buildroot}/%{pypyprefix}/bin/pypy3
-ln -s ./pypy3 %{buildroot}%{pypyprefix}/bin/pypy%{pyversion}
ln -s %{pypyprefix}/bin/pypy%{pyversion} %{buildroot}%{_bindir}/pypy%{pyversion}
ln -s pypy%{pyversion} %{buildroot}%{_bindir}/pypy3
@@ -720,11 +723,12 @@ rm -f %{buildroot}%{pypyprefix}/bin/libpypy3-c.so.debug
%check
+%{?libmpdec_version:
# Verify that the bundled libmpdec version python was compiled with, is the same version we have virtual
# provides for in the SPEC.
test "$(%{goal_dir}/pypy3-c -c 'import decimal; print(decimal.__libmpdec_version__.decode("ascii"))')" = \
"%{libmpdec_version}"
-
+}
topdir=$(pwd)
@@ -893,6 +897,11 @@ CheckPyPy %{name}-stackless
%changelog
+* Tue May 25 2021 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.4-1
+- Update to 7.3.4
+- pypy3 is now Python 3.7
+- Fixes rhbz#1961933
+
* Tue May 25 2021 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.1-6
- Provide missing bundled library information
diff --git a/sources b/sources
index 0b7b357..60e1bdc 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3.6-v7.3.1-src.tar.bz2) = f8e32aae7f01225e0e4d6763eaac40fc02dffc3d0b6a30f22d422147f9be4f3290ea78160a912ffae311dea3d503eb31a7a4f3999d3b541fbccd93d1cef4ca56
+SHA512 (pypy3.7-v7.3.4-src.tar.bz2) = c570d34f284f41dcd8dd909216c69831dd83b8501423c7635a4fe506fb16fd3705cf87975a664735e52d0b805a0432267d611a993437d17aac3defe4b9ea4401
diff --git a/tests/tests.yml b/tests/tests.yml
index c3a91f3..827cb90 100644
--- a/tests/tests.yml
+++ b/tests/tests.yml
@@ -10,7 +10,7 @@
tests:
- smoke:
dir: python/smoke
- run: PYTHON=pypy3 VERSION=3.6 ./venv.sh
+ run: PYTHON=pypy3 VERSION=3.7 ./venv.sh
required_packages:
- gcc
- python3-tox
commit f592f0db6a04e430152a0909b3471683c0c95849
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue May 25 22:05:10 2021 +0200
Provide missing bundled library information
diff --git a/pypy3.spec b/pypy3.spec
index 2184360..7b4d004 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,14 +2,20 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.6
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
+# PyPy is MIT
+# Python standard library is Python
+# pypy/module/unicodedata is UCD
+# Bundled pycparser is is BSD
+# Bundled pycparser.ply is BSD
+# Bundled bits from cryptography are ASL 2.0 or BSD
# LGPL and another free license we'd need to ask spot about are present in some
# java jars that we're not building with atm (in fact, we're deleting them
# before building). If we restore those we'll have to work out the new
# licensing terms
-License: MIT and Python and UCD
+License: MIT and Python and UCD and BSD and (ASL 2.0 or BSD)
URL: http://pypy.org/
# High-level configuration of the build:
@@ -279,14 +285,23 @@ Provides: pypy%{pyversion}-libs%{?_isa} = %{version}-%{release}
Requires: python-setuptools-wheel
Requires: python-pip-wheel
%else
-Provides: bundled(python3-pip) = 20.0.2
-Provides: bundled(python3-setuptools) = 44.0.0
+Provides: bundled(python3dist(pip)) = 20.0.2
+Provides: bundled(python3dist(setuptools)) = 44.0.0
%endif
# Provides for the bundled libmpdec
Provides: bundled(mpdecimal) = %{libmpdec_version}
Provides: bundled(libmpdec) = %{libmpdec_version}
+# Find the version in lib_pypy/cffi/_pycparser/__init__.py
+Provides: bundled(python3dist(pycparser)) = 2.20
+
+# Find the version in lib_pypy/cffi/_pycparser/ply/__init__.py
+Provides: bundled(python3dist(ply)) = 3.9
+
+# Find the version in lib_pypy/_cffi_ssl/cryptography/__about__.py
+Provides: bundled(python3dist(cryptography)) = 2.7
+
%description libs
Libraries required by the various PyPy implementations of Python 3.
@@ -878,6 +893,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Tue May 25 2021 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.1-6
+- Provide missing bundled library information
+
* Wed May 19 2021 Charalampos Stratakis <cstratak(a)redhat.com> - 7.3.1-5
- Add virtual provides for the bundled libmpdec (rhbz#1943359)
commit a45f4e982edfb10e5ec9dae376ba282d6030e88e
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Thu May 20 00:10:33 2021 +0200
Add virtual provides for the bundled libmpdec (rhbz#1943359)
diff --git a/pypy3.spec b/pypy3.spec
index 57590db..2184360 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.6
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -14,6 +14,13 @@ URL: http://pypy.org/
# High-level configuration of the build:
+# libmpdec (mpdecimal package in Fedora) is tightly coupled with the
+# decimal module. We keep it bundled as to avoid incompatibilities
+# with the packaged version.
+# The version information can be found at lib_pypy/_libmpdec/mpdecimal.h
+# defined as MPD_VERSION.
+%global libmpdec_version 2.4.1
+
# Whether to use RPM build wheels from the python-{pip,setuptools}-wheel package
# Uses upstream bundled prebuilt wheels otherwise
%bcond_without rpmwheels
@@ -276,6 +283,10 @@ Provides: bundled(python3-pip) = 20.0.2
Provides: bundled(python3-setuptools) = 44.0.0
%endif
+# Provides for the bundled libmpdec
+Provides: bundled(mpdecimal) = %{libmpdec_version}
+Provides: bundled(libmpdec) = %{libmpdec_version}
+
%description libs
Libraries required by the various PyPy implementations of Python 3.
@@ -693,6 +704,13 @@ rm -f %{buildroot}%{pypyprefix}/bin/libpypy3-c.so.debug
%check
+
+# Verify that the bundled libmpdec version python was compiled with, is the same version we have virtual
+# provides for in the SPEC.
+test "$(%{goal_dir}/pypy3-c -c 'import decimal; print(decimal.__libmpdec_version__.decode("ascii"))')" = \
+ "%{libmpdec_version}"
+
+
topdir=$(pwd)
SkipTest() {
@@ -860,6 +878,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed May 19 2021 Charalampos Stratakis <cstratak(a)redhat.com> - 7.3.1-5
+- Add virtual provides for the bundled libmpdec (rhbz#1943359)
+
* Wed Jan 27 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.1-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
commit 10fe1a9ce92d4e78add6f3b961d0600a9e72fe51
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Thu May 20 00:09:06 2021 +0200
Temporary workaround for missing %apply_patch in RPM 4.17 alpha
diff --git a/pypy3.spec b/pypy3.spec
index 79848ea..57590db 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -306,6 +306,8 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%prep
%autosetup -n pypy%{pyversion}-v%{version}-src -p1 -S git
+# Temporary workaround for https://bugzilla.redhat.com/show_bug.cgi?id=1954999
+%{?!apply_patch:%define apply_patch(qp:m:) {%__apply_patch %**}}
%if %{with rpmwheels}
%apply_patch -m %(basename %{SOURCE189}) %{SOURCE189}
commit 7e40fae162577d96896fe74dc35072e5ee3e8ea3
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Wed Jan 27 08:56:57 2021 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index fd45393..79848ea 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.6
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -858,6 +858,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed Jan 27 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.1-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
* Sat Aug 01 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.1-3
- Second attempt - Rebuilt for
https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
commit 2db1dabba5dce3ef2b86a0432eb42488e0be3bda
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Sat Aug 1 07:17:17 2020 +0000
- Second attempt - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index ad7423f..fd45393 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.6
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -858,6 +858,10 @@ CheckPyPy %{name}-stackless
%changelog
+* Sat Aug 01 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.1-3
+- Second attempt - Rebuilt for
+ https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
* Tue Jul 28 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
commit a68c6873ebaceff0dbddeec347b44f1ea70df1f7
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Tue Jul 28 23:22:44 2020 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index ebca79e..ad7423f 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.6
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -858,6 +858,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Tue Jul 28 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
* Wed Apr 15 2020 Tomas Hrnciar <thrnciar(a)redhat.com> - 7.3.1-1
- Update to 7.3.1
commit 598f61d5f284c0a353b971350aedf5dd710ddf50
Author: Tomas Hrnciar <thrnciar(a)redhat.com>
Date: Mon Apr 20 13:08:30 2020 +0200
Update to 7.3.1
diff --git a/.gitignore b/.gitignore
index 9058264..849f483 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,4 @@
/pypy3.6-v7.1.1-src.tar.bz2
/pypy3.6-v7.2.0-src.tar.bz2
/pypy3.6-v7.3.0-src.tar.bz2
+/pypy3.6-v7.3.1-src.tar.bz2
diff --git a/189-use-rpm-wheels.patch b/189-use-rpm-wheels.patch
index c84b0cb..0032ba9 100644
--- a/189-use-rpm-wheels.patch
+++ b/189-use-rpm-wheels.patch
@@ -1,24 +1,25 @@
diff --git a/lib-python/3/ensurepip/__init__.py b/lib-python/3/ensurepip/__init__.py
-index 7a0d3ee..2c9d676 100644
+index 6b35b3d..97fc83b 100644
--- a/lib-python/3/ensurepip/__init__.py
+++ b/lib-python/3/ensurepip/__init__.py
-@@ -1,6 +1,7 @@
+@@ -1,16 +1,34 @@
+import distutils.version
+import glob
import os
import os.path
--import pkgutil
+ import pkgutil
import sys
++import runpy
import tempfile
-
-@@ -8,9 +9,24 @@ import tempfile
+
+
__all__ = ["version", "bootstrap"]
-
-
--_SETUPTOOLS_VERSION = "41.2.0"
+
+
+-_SETUPTOOLS_VERSION = "44.0.0"
+_WHEEL_DIR = "/usr/share/python-wheels/"
-
--_PIP_VERSION = "19.2.3"
+
+-_PIP_VERSION = "20.0.2"
+_wheels = {}
+
+def _get_most_recent_wheel_version(pkg):
@@ -35,10 +36,32 @@ index 7a0d3ee..2c9d676 100644
+_SETUPTOOLS_VERSION = _get_most_recent_wheel_version("setuptools")
+
+_PIP_VERSION = _get_most_recent_wheel_version("pip")
-
+
_PROJECTS = [
("setuptools", _SETUPTOOLS_VERSION),
-@@ -93,13 +109,10 @@ def _bootstrap(*, root=None, upgrade=False, user=False,
+@@ -23,10 +41,18 @@ def _run_pip(args, additional_paths=None):
+ if additional_paths is not None:
+ sys.path = additional_paths + sys.path
+
+- # Install the bundled software
+- import pip._internal.cli.main
+- return pip._internal.cli.main.main(args)
++ # Invoke pip as if it's the main module, and catch the exit.
++ backup_argv = sys.argv[:]
++ sys.argv[1:] = args
++ try:
++ # run_module() alters sys.modules and sys.argv, but restores them at exit
++ runpy.run_module("pip", run_name="__main__", alter_sys=True)
++ except SystemExit as exc:
++ return exc.code
++ finally:
++ sys.argv[:] = backup_argv
+
++ raise SystemError("pip did not exit, this should never happen")
+
+ def version():
+ """
+@@ -93,13 +119,10 @@ def _bootstrap(*, root=None, upgrade=False, user=False,
# additional paths that need added to sys.path
additional_paths = []
for project, version in _PROJECTS:
@@ -53,6 +76,6 @@ index 7a0d3ee..2c9d676 100644
+ with open(os.path.join(_WHEEL_DIR, wheel_name), "rb") as sfp:
+ with open(os.path.join(tmpdir, wheel_name), "wb") as fp:
+ fp.write(sfp.read())
-
+
additional_paths.append(os.path.join(tmpdir, wheel_name))
-
+
diff --git a/pypy3.spec b/pypy3.spec
index 63edae4..ebca79e 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,8 +1,8 @@
%global basever 7.3
Name: pypy3
-Version: %{basever}.0
+Version: %{basever}.1
%global pyversion 3.6
-Release: 3%{?dist}
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -14,11 +14,6 @@ URL: http://pypy.org/
# High-level configuration of the build:
-# Build with -fcommon
-# https://bugzilla.redhat.com/show_bug.cgi?id=1796821
-# https://bitbucket.org/pypy/pypy/issues/3163
-%define _legacy_common_support 1
-
# Whether to use RPM build wheels from the python-{pip,setuptools}-wheel package
# Uses upstream bundled prebuilt wheels otherwise
%bcond_without rpmwheels
@@ -277,8 +272,8 @@ Provides: pypy%{pyversion}-libs%{?_isa} = %{version}-%{release}
Requires: python-setuptools-wheel
Requires: python-pip-wheel
%else
-Provides: bundled(python3-pip) = 9.0.1
-Provides: bundled(python3-setuptools) = 28.8.0
+Provides: bundled(python3-pip) = 20.0.2
+Provides: bundled(python3-setuptools) = 44.0.0
%endif
%description libs
@@ -863,6 +858,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed Apr 15 2020 Tomas Hrnciar <thrnciar(a)redhat.com> - 7.3.1-1
+- Update to 7.3.1
+
* Wed Feb 12 2020 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.0-3
- Update the ensurepip module to work with setuptools >= 45
diff --git a/sources b/sources
index 2bd7601..0b7b357 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3.6-v7.3.0-src.tar.bz2) = 313a4254262dd8d8b995a50bddbc360cfb67add0818e51a3e9ce25bda6a9b639e9fea8efe7da6adda76dff0a86a364544a13faa516e51b9ea6c25ec99223b435
+SHA512 (pypy3.6-v7.3.1-src.tar.bz2) = f8e32aae7f01225e0e4d6763eaac40fc02dffc3d0b6a30f22d422147f9be4f3290ea78160a912ffae311dea3d503eb31a7a4f3999d3b541fbccd93d1cef4ca56
commit 2032d986801b3a542282dd6341b01ce5cfe7e347
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Feb 12 13:30:25 2020 +0100
Update the ensurepip module to work with setuptools >= 45
setuptools 45.x is Python 3 only and changed the name of the wheel
diff --git a/189-use-rpm-wheels.patch b/189-use-rpm-wheels.patch
index 9441309..c84b0cb 100644
--- a/189-use-rpm-wheels.patch
+++ b/189-use-rpm-wheels.patch
@@ -1,8 +1,8 @@
diff --git a/lib-python/3/ensurepip/__init__.py b/lib-python/3/ensurepip/__init__.py
-index 9f5d151..8b81155 100644
+index 7a0d3ee..2c9d676 100644
--- a/lib-python/3/ensurepip/__init__.py
+++ b/lib-python/3/ensurepip/__init__.py
-@@ -1,16 +1,27 @@
+@@ -1,6 +1,7 @@
+import distutils.version
+import glob
import os
@@ -11,20 +11,25 @@ index 9f5d151..8b81155 100644
import sys
import tempfile
-
+@@ -8,9 +9,24 @@ import tempfile
__all__ = ["version", "bootstrap"]
-+_WHEEL_DIR = "/usr/share/python-wheels/"
-_SETUPTOOLS_VERSION = "41.2.0"
++_WHEEL_DIR = "/usr/share/python-wheels/"
-_PIP_VERSION = "19.2.3"
++_wheels = {}
++
+def _get_most_recent_wheel_version(pkg):
+ prefix = os.path.join(_WHEEL_DIR, "{}-".format(pkg))
-+ suffix = "-py2.py3-none-any.whl"
-+ pattern = "{}*{}".format(prefix, suffix)
-+ versions = (p[len(prefix):-len(suffix)] for p in glob.glob(pattern))
-+ return str(max(versions, key=distutils.version.LooseVersion))
++ _wheels[pkg] = {}
++ for suffix in "-py2.py3-none-any.whl", "-py3-none-any.whl":
++ pattern = "{}*{}".format(prefix, suffix)
++ for path in glob.glob(pattern):
++ version_str = path[len(prefix):-len(suffix)]
++ _wheels[pkg][version_str] = os.path.basename(path)
++ return str(max(_wheels[pkg], key=distutils.version.LooseVersion))
+
+
+_SETUPTOOLS_VERSION = _get_most_recent_wheel_version("setuptools")
@@ -33,16 +38,18 @@ index 9f5d151..8b81155 100644
_PROJECTS = [
("setuptools", _SETUPTOOLS_VERSION),
-@@ -79,12 +95,9 @@ def bootstrap(*, root=None, upgrade=False, user=False,
+@@ -93,13 +109,10 @@ def _bootstrap(*, root=None, upgrade=False, user=False,
+ # additional paths that need added to sys.path
additional_paths = []
for project, version in _PROJECTS:
- wheel_name = "{}-{}-py2.py3-none-any.whl".format(project, version)
+- wheel_name = "{}-{}-py2.py3-none-any.whl".format(project, version)
- whl = pkgutil.get_data(
- "ensurepip",
- "_bundled/{}".format(wheel_name),
- )
- with open(os.path.join(tmpdir, wheel_name), "wb") as fp:
- fp.write(whl)
++ wheel_name = _wheels[project][version]
+ with open(os.path.join(_WHEEL_DIR, wheel_name), "rb") as sfp:
+ with open(os.path.join(tmpdir, wheel_name), "wb") as fp:
+ fp.write(sfp.read())
diff --git a/pypy3.spec b/pypy3.spec
index e17f3a4..63edae4 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.6
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -863,6 +863,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed Feb 12 2020 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.0-3
+- Update the ensurepip module to work with setuptools >= 45
+
* Thu Jan 30 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
commit 64a5625b90ea9129c1a509ef184c67c97b5699ae
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Feb 12 20:01:06 2020 +0100
Build with -fcommon
diff --git a/pypy3.spec b/pypy3.spec
index a30e912..e17f3a4 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -14,6 +14,11 @@ URL: http://pypy.org/
# High-level configuration of the build:
+# Build with -fcommon
+# https://bugzilla.redhat.com/show_bug.cgi?id=1796821
+# https://bitbucket.org/pypy/pypy/issues/3163
+%define _legacy_common_support 1
+
# Whether to use RPM build wheels from the python-{pip,setuptools}-wheel package
# Uses upstream bundled prebuilt wheels otherwise
%bcond_without rpmwheels
commit 1dceae177ceb5daa5cfc82db2a6afa9a3d3b37d2
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Thu Jan 30 10:15:13 2020 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index 7257616..a30e912 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.6
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -858,6 +858,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Thu Jan 30 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
* Sat Dec 28 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.0-1
- Update to 7.3.0
commit 41c6994849a04d82eb969a306751bf35afe90735
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sat Dec 28 11:22:21 2019 +0100
Update to 7.3.0
diff --git a/.gitignore b/.gitignore
index 4b53676..9058264 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,4 @@
/pypy3.5-v7.0.0-src.tar.bz2
/pypy3.6-v7.1.1-src.tar.bz2
/pypy3.6-v7.2.0-src.tar.bz2
+/pypy3.6-v7.3.0-src.tar.bz2
diff --git a/189-use-rpm-wheels.patch b/189-use-rpm-wheels.patch
index 4a62d57..9441309 100644
--- a/189-use-rpm-wheels.patch
+++ b/189-use-rpm-wheels.patch
@@ -16,9 +16,9 @@ index 9f5d151..8b81155 100644
+_WHEEL_DIR = "/usr/share/python-wheels/"
--_SETUPTOOLS_VERSION = "40.6.2"
+-_SETUPTOOLS_VERSION = "41.2.0"
--_PIP_VERSION = "18.1"
+-_PIP_VERSION = "19.2.3"
+def _get_most_recent_wheel_version(pkg):
+ prefix = os.path.join(_WHEEL_DIR, "{}-".format(pkg))
+ suffix = "-py2.py3-none-any.whl"
diff --git a/d81c769a235307f6671a8fa916f48d6896cbb823.patch b/d81c769a235307f6671a8fa916f48d6896cbb823.patch
deleted file mode 100644
index 8debd29..0000000
--- a/d81c769a235307f6671a8fa916f48d6896cbb823.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-# HG changeset patch
-# User Armin Rigo <arigo(a)tunes.org>
-# Date 1571380165 -7200
-# Node ID d81c769a235307f6671a8fa916f48d6896cbb823
-# Parent f27546b858f97bfa286a891e1474579759028784
-Arguably, clarify the logic. The real motivation is a gcc bug, see issue #3086
-
-diff --git a/rpython/jit/backend/aarch64/opassembler.py b/rpython/jit/backend/aarch64/opassembler.py
---- a/rpython/jit/backend/aarch64/opassembler.py
-+++ b/rpython/jit/backend/aarch64/opassembler.py
-@@ -808,9 +808,7 @@
- # Inline a series of STR operations, starting at 'dstaddr_loc'.
- #
- self.mc.gen_load_int(r.ip0.value, 0)
-- i = 0
-- adjustment = 0
-- needs_adjustment = itemsize < 8 and (startbyte % 8)
-+ i = dst_i = 0
- total_size = size_box.getint()
- while i < total_size:
- sz = itemsize
-@@ -818,19 +816,19 @@
- next_group += 8
- if next_group <= total_size:
- sz = 8
-+ if dst_i % 8: # unaligned?
-+ self.mc.ADD_ri(dstaddr_loc.value, dstaddr_loc.value, dst_i)
-+ dst_i = 0
- if sz == 8:
-- if needs_adjustment:
-- self.mc.ADD_ri(dstaddr_loc.value, dstaddr_loc.value, i)
-- adjustment = -i
-- needs_adjustment = False
-- self.mc.STR_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
-+ self.mc.STR_ri(r.ip0.value, dstaddr_loc.value, dst_i)
- elif sz == 4:
-- self.mc.STRW_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
-+ self.mc.STRW_ri(r.ip0.value, dstaddr_loc.value, dst_i)
- elif sz == 2:
-- self.mc.STRH_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
-+ self.mc.STRH_ri(r.ip0.value, dstaddr_loc.value, dst_i)
- else:
-- self.mc.STRB_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
-+ self.mc.STRB_ri(r.ip0.value, dstaddr_loc.value, dst_i)
- i += sz
-+ dst_i += sz
-
- else:
- if isinstance(size_box, ConstInt):
diff --git a/pypy3.spec b/pypy3.spec
index 785179e..7257616 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,8 +1,8 @@
-%global basever 7.2
+%global basever 7.3
Name: pypy3
Version: %{basever}.0
%global pyversion 3.6
-Release: 2%{?dist}
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -164,9 +164,6 @@ Patch9: 009-add-libxcrypt-support.patch
# It seems ppc64 has no faulthandler
Patch11: 011-no-faulthandler.patch
-# https://bitbucket.org/pypy/pypy/issues/3086
-Patch12: d81c769a235307f6671a8fa916f48d6896cbb823.patch
-
# Instead of bundled wheels, use our RPM packaged wheels from
# /usr/share/python-wheels
# We conditionally apply this, but we use autosetup, so we use Source here
@@ -861,6 +858,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Sat Dec 28 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.0-1
+- Update to 7.3.0
+
* Wed Oct 23 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.2.0-2
- Enable JIT on aarch64
diff --git a/sources b/sources
index 25bbbb3..2bd7601 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3.6-v7.2.0-src.tar.bz2) = bcbb53062a473d504bcc082cf6286f6169c83d1f38d22c4d7c4e46ddc32bca9d91e71194637e6650db5bec02b29fe262b22fe236d627b6bc3e6e0c59c66c07cc
+SHA512 (pypy3.6-v7.3.0-src.tar.bz2) = 313a4254262dd8d8b995a50bddbc360cfb67add0818e51a3e9ce25bda6a9b639e9fea8efe7da6adda76dff0a86a364544a13faa516e51b9ea6c25ec99223b435
commit 5aa1d86125bbb751ef5edc25907f659c20d31797
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Oct 23 17:03:00 2019 +0200
Enable JIT on aarch64, add upstream workaround
diff --git a/d81c769a235307f6671a8fa916f48d6896cbb823.patch b/d81c769a235307f6671a8fa916f48d6896cbb823.patch
new file mode 100644
index 0000000..8debd29
--- /dev/null
+++ b/d81c769a235307f6671a8fa916f48d6896cbb823.patch
@@ -0,0 +1,49 @@
+# HG changeset patch
+# User Armin Rigo <arigo(a)tunes.org>
+# Date 1571380165 -7200
+# Node ID d81c769a235307f6671a8fa916f48d6896cbb823
+# Parent f27546b858f97bfa286a891e1474579759028784
+Arguably, clarify the logic. The real motivation is a gcc bug, see issue #3086
+
+diff --git a/rpython/jit/backend/aarch64/opassembler.py b/rpython/jit/backend/aarch64/opassembler.py
+--- a/rpython/jit/backend/aarch64/opassembler.py
++++ b/rpython/jit/backend/aarch64/opassembler.py
+@@ -808,9 +808,7 @@
+ # Inline a series of STR operations, starting at 'dstaddr_loc'.
+ #
+ self.mc.gen_load_int(r.ip0.value, 0)
+- i = 0
+- adjustment = 0
+- needs_adjustment = itemsize < 8 and (startbyte % 8)
++ i = dst_i = 0
+ total_size = size_box.getint()
+ while i < total_size:
+ sz = itemsize
+@@ -818,19 +816,19 @@
+ next_group += 8
+ if next_group <= total_size:
+ sz = 8
++ if dst_i % 8: # unaligned?
++ self.mc.ADD_ri(dstaddr_loc.value, dstaddr_loc.value, dst_i)
++ dst_i = 0
+ if sz == 8:
+- if needs_adjustment:
+- self.mc.ADD_ri(dstaddr_loc.value, dstaddr_loc.value, i)
+- adjustment = -i
+- needs_adjustment = False
+- self.mc.STR_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
++ self.mc.STR_ri(r.ip0.value, dstaddr_loc.value, dst_i)
+ elif sz == 4:
+- self.mc.STRW_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
++ self.mc.STRW_ri(r.ip0.value, dstaddr_loc.value, dst_i)
+ elif sz == 2:
+- self.mc.STRH_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
++ self.mc.STRH_ri(r.ip0.value, dstaddr_loc.value, dst_i)
+ else:
+- self.mc.STRB_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
++ self.mc.STRB_ri(r.ip0.value, dstaddr_loc.value, dst_i)
+ i += sz
++ dst_i += sz
+
+ else:
+ if isinstance(size_box, ConstInt):
diff --git a/pypy3.spec b/pypy3.spec
index 70caacc..785179e 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.6
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -95,8 +95,7 @@ URL: http://pypy.org/
# it on the other archs. The resulting binary will typically be slower than
# CPython for the latter case.
-# aarch64: https://bitbucket.org/pypy/pypy/issues/3086
-%ifarch %{ix86} x86_64 %{arm} %{power64} s390x
+%ifarch %{ix86} x86_64 %{arm} %{power64} s390x aarch64
%global with_jit 1
%else
%global with_jit 0
@@ -165,6 +164,9 @@ Patch9: 009-add-libxcrypt-support.patch
# It seems ppc64 has no faulthandler
Patch11: 011-no-faulthandler.patch
+# https://bitbucket.org/pypy/pypy/issues/3086
+Patch12: d81c769a235307f6671a8fa916f48d6896cbb823.patch
+
# Instead of bundled wheels, use our RPM packaged wheels from
# /usr/share/python-wheels
# We conditionally apply this, but we use autosetup, so we use Source here
@@ -859,6 +861,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed Oct 23 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.2.0-2
+- Enable JIT on aarch64
+
* Mon Oct 14 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.2.0-1
- Update to 7.2.0 (#1757707)
- Enable aarch64 (without JIT)
commit faa7ffb044605fcf1d807ada72eeb88ccf4181a1
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sat Oct 19 00:41:56 2019 +0200
Build everything with pypy, but fix the cpython build w/out pycparser
diff --git a/pypy3.spec b/pypy3.spec
index 0ab7125..70caacc 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -179,25 +179,15 @@ Source189: 189-use-rpm-wheels.patch
# and avoid a cycle in the build-time dependency graph:
# Note, pypy3 is built with pypy2, so no dependency cycle
-%ifarch %{power64}
-# the build is unreliable with pypy+power, getting random failures
-# so better have a bit slower build than having to build until it pass
-%global use_self_when_building 0
-%else
%global use_self_when_building 1
-%endif
-
%if 0%{use_self_when_building}
# pypy3 can only be build with pypy2
BuildRequires: pypy2
-# no pypy-pycparser available ATM
%global bootstrap_python_interp pypy2
%else
-
-
# pypy3 can only be build with python2
-BuildRequires: python2-devel
-BuildRequires: python2-pycparser
+# exception to use Python 2: https://pagure.io/fesco/issue/2130
+BuildRequires: python27
%global bootstrap_python_interp python2
%endif
@@ -356,6 +346,11 @@ rm lib-python/3/idlelib/idle.bat
sed -i -r 's/\$\(LDFLAGSEXTRA\)/& -fuse-ld=gold/' ./rpython/translator/platform/posix.py
%endif
+%if ! 0%{use_self_when_building}
+ # use the pycparser from PyPy even on CPython
+ ln -s lib_pypy/cffi/_pycparser pycparser
+%endif
+
%build
%ifarch s390 s390x
# pypy3 requires z10 at least
commit 8d646e7dd1de54fcf25b0d37ccc3b087b8e7554e
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Oct 18 19:02:40 2019 +0200
Fix %{pypy3_version} for PyPy 3.10
diff --git a/macros.pypy3 b/macros.pypy3
index f138a39..d11474b 100644
--- a/macros.pypy3
+++ b/macros.pypy3
@@ -1,5 +1,5 @@
%__pypy3 /usr/bin/pypy3
%pypy3_sitelib %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
%pypy3_sitearch %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")
-%pypy3_version %(%{__pypy3} -c "import sys; sys.stdout.write(sys.version[:3])")
+%pypy3_version %(%{__pypy3} -c "import sys; sys.stdout.write('{0.major}.{0.minor}'.format(sys.version_info))")
%pypy3_pypy_version %(%{__pypy3} -c "import sys; sys.stdout.write('{}.{}'.format(sys.pypy_version_info.major, sys.pypy_version_info.minor))")
commit 083ef4d302f9f87e71603a93650baea2929ab127
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Thu Oct 17 20:29:42 2019 +0200
Enable power64 (with JIT)
diff --git a/pypy3.spec b/pypy3.spec
index e7f3045..0ab7125 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -12,9 +12,6 @@ Summary: Python 3 implementation with a Just-In-Time compiler
License: MIT and Python and UCD
URL: http://pypy.org/
-# ppc64: Broken on F29+ https://bugzilla.redhat.com/show_bug.cgi?id=1619601
-ExcludeArch: %{power64}
-
# High-level configuration of the build:
# Whether to use RPM build wheels from the python-{pip,setuptools}-wheel package
@@ -870,6 +867,7 @@ CheckPyPy %{name}-stackless
* Mon Oct 14 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.2.0-1
- Update to 7.2.0 (#1757707)
- Enable aarch64 (without JIT)
+- Enable power64 (with JIT)
* Fri Jul 26 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.1.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
commit f27d32f53000b43d7e821e764b9b8a073e0c8e58
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Oct 15 02:03:21 2019 +0200
Enable aarch64 without JIT
See https://bitbucket.org/pypy/pypy/issues/3086
diff --git a/pypy3.spec b/pypy3.spec
index cf46f81..e7f3045 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -12,9 +12,8 @@ Summary: Python 3 implementation with a Just-In-Time compiler
License: MIT and Python and UCD
URL: http://pypy.org/
-# aarch64: Not available yet
# ppc64: Broken on F29+ https://bugzilla.redhat.com/show_bug.cgi?id=1619601
-ExcludeArch: aarch64 %{power64}
+ExcludeArch: %{power64}
# High-level configuration of the build:
@@ -99,6 +98,7 @@ ExcludeArch: aarch64 %{power64}
# it on the other archs. The resulting binary will typically be slower than
# CPython for the latter case.
+# aarch64: https://bitbucket.org/pypy/pypy/issues/3086
%ifarch %{ix86} x86_64 %{arm} %{power64} s390x
%global with_jit 1
%else
@@ -869,6 +869,7 @@ CheckPyPy %{name}-stackless
%changelog
* Mon Oct 14 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.2.0-1
- Update to 7.2.0 (#1757707)
+- Enable aarch64 (without JIT)
* Fri Jul 26 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.1.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
commit 2f53e9f20a92cd7efc8798ba5d6766812eaea195
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon Oct 14 20:40:57 2019 +0200
Update to 7.2.0
diff --git a/.gitignore b/.gitignore
index 910808c..4b53676 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,4 @@
/pypy3-v6.0.0-src.tar.bz2
/pypy3.5-v7.0.0-src.tar.bz2
/pypy3.6-v7.1.1-src.tar.bz2
+/pypy3.6-v7.2.0-src.tar.bz2
diff --git a/011-no-faulthandler.patch b/011-no-faulthandler.patch
index 9d7165d..e093956 100644
--- a/011-no-faulthandler.patch
+++ b/011-no-faulthandler.patch
@@ -5,18 +5,18 @@ Date: Wed Mar 29 04:31:55 2017 +0200
011-no-faulthandler.patch
diff --git a/lib-python/3/test/support/__init__.py b/lib-python/3/test/support/__init__.py
-index 5d7f308..4424637 100644
+index faa1ba7..2edadc9 100644
--- a/lib-python/3/test/support/__init__.py
+++ b/lib-python/3/test/support/__init__.py
-@@ -6,7 +6,6 @@ if __name__ != 'test.support':
- import collections.abc
+@@ -7,7 +7,6 @@ import collections.abc
import contextlib
+ import datetime
import errno
-import faulthandler
import fnmatch
import functools
import gc
-@@ -65,6 +64,11 @@ try:
+@@ -70,6 +69,11 @@ try:
except ImportError:
resource = None
@@ -28,7 +28,7 @@ index 5d7f308..4424637 100644
__all__ = [
# globals
"PIPE_MAX_SIZE", "verbose", "max_memuse", "use_resources", "failfast",
-@@ -2060,7 +2064,8 @@ def start_threads(threads, unlock=None):
+@@ -2231,7 +2235,8 @@ def start_threads(threads, unlock=None):
finally:
started = [t for t in started if t.isAlive()]
if started:
diff --git a/189-use-rpm-wheels.patch b/189-use-rpm-wheels.patch
index eb8b10e..4a62d57 100644
--- a/189-use-rpm-wheels.patch
+++ b/189-use-rpm-wheels.patch
@@ -16,9 +16,9 @@ index 9f5d151..8b81155 100644
+_WHEEL_DIR = "/usr/share/python-wheels/"
--_SETUPTOOLS_VERSION = "28.8.0"
+-_SETUPTOOLS_VERSION = "40.6.2"
--_PIP_VERSION = "9.0.1"
+-_PIP_VERSION = "18.1"
+def _get_most_recent_wheel_version(pkg):
+ prefix = os.path.join(_WHEEL_DIR, "{}-".format(pkg))
+ suffix = "-py2.py3-none-any.whl"
@@ -33,22 +33,6 @@ index 9f5d151..8b81155 100644
_PROJECTS = [
("setuptools", _SETUPTOOLS_VERSION),
-@@ -24,8 +35,13 @@ def _run_pip(args, additional_paths=None):
- sys.path = additional_paths + sys.path
-
- # Install the bundled software
-- import pip
-- pip.main(args)
-+ try:
-+ # pip 10
-+ from pip._internal import main
-+ except ImportError:
-+ # pip 9
-+ from pip import main
-+ main(args)
-
-
- def version():
@@ -79,12 +95,9 @@ def bootstrap(*, root=None, upgrade=False, user=False,
additional_paths = []
for project, version in _PROJECTS:
diff --git a/pypy3.spec b/pypy3.spec
index 225a1f3..cf46f81 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,8 +1,8 @@
-%global basever 7.1
+%global basever 7.2
Name: pypy3
-Version: %{basever}.1
+Version: %{basever}.0
%global pyversion 3.6
-Release: 2%{?dist}
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -867,6 +867,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Mon Oct 14 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.2.0-1
+- Update to 7.2.0 (#1757707)
+
* Fri Jul 26 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.1.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
diff --git a/sources b/sources
index aa4e777..25bbbb3 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3.6-v7.1.1-src.tar.bz2) = 17e78f9c7080d597a6283d8e8247d1ca78f09a14ff221db8c3d90d255b5befc73102b317ca34a80979e544d5ee72f3e5e649f89d185a085f4cc15012da4d0473
+SHA512 (pypy3.6-v7.2.0-src.tar.bz2) = bcbb53062a473d504bcc082cf6286f6169c83d1f38d22c4d7c4e46ddc32bca9d91e71194637e6650db5bec02b29fe262b22fe236d627b6bc3e6e0c59c66c07cc
commit 707f9490c0c9ae2b3cac2b0c6e9503888c5efad0
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Fri Jul 26 11:47:24 2019 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index b781dfb..225a1f3 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.6
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -867,6 +867,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri Jul 26 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.1.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
* Fri May 24 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.1.1-1
- Update to 7.1.1 (#1689198)
- pypy3 is now Python 3.6
commit 7fc9514b60f515a33dc339d19b94a21dd9943232
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Jul 12 14:48:12 2019 +0200
Keep the LICENSE file in lib/pythonX.Y dir
Virtualenv tries to copy it.
See https://github.com/pypa/virtualenv/issues/1352
Virtualenv ~16.6 warns:
No LICENSE.txt / LICENSE found in source
Technically, it is probably possible to install the package without
%license files, but that would simply resort to the previous noncritical
behavior.
This fix is not critical and hence it doesn't bump release, for easier
backporting to all our Python packages.
diff --git a/pypy3.spec b/pypy3.spec
index 1f45c89..b781dfb 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -688,7 +688,6 @@ install -m0644 -p -D -t %{buildroot}/%{_rpmconfigdir}/macros.d %{SOURCE2}
# Remove files we don't want:
rm -f %{buildroot}%{_libdir}/%{name}-%{basever}.tar.bz2 \
- %{buildroot}%{pypyprefix}/LICENSE \
%{buildroot}%{pypyprefix}/README.rst
# wtf? This is probably masking some bigger problem, but let's do this for now
@@ -828,18 +827,19 @@ CheckPyPy %{name}-stackless
%endif # run_selftests
# Because there's a bunch of binary subpackages and creating
-# /usr/share/licenses/pypy3-this and /usr/share/licenses/pypy3-that
+# /usr/share/doc/pypy3-this and /usr/share/doc/pypy3-that
# is just confusing for the user.
%global _docdir_fmt %{name}
%files libs
-%license LICENSE
%doc README.rst
%dir %{pypyprefix}
%dir %{pypyprefix}/lib-python
+%license %{pypyprefix}/LICENSE
%{pypyprefix}/lib-python/%{pylibver}/
%{pypyprefix}/lib_pypy/
+%license %{pypyprefix}/lib_pypy/*/LICENSE
%{pypyprefix}/site-packages/
%if %{with_emacs}
%{_emacs_sitelispdir}/pypy3trace-mode.el
@@ -847,7 +847,6 @@ CheckPyPy %{name}-stackless
%endif
%files
-%license LICENSE
%doc README.rst
%{_bindir}/pypy3
%{_bindir}/pypy%{pyversion}
@@ -862,7 +861,6 @@ CheckPyPy %{name}-stackless
%if 0%{with_stackless}
%files stackless
-%license LICENSE
%doc README.rst
%{_bindir}/pypy-stackless
%endif
commit cac755a96a589f8c15a50ed6ac9d121e336de51c
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri May 24 10:29:13 2019 +0200
Update to 7.1.1, pypy3 is now Python 3.6
https://bugzilla.redhat.com/show_bug.cgi?id=1689198
diff --git a/.gitignore b/.gitignore
index 1361620..910808c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@
/pypy3-v5.10.1-src.tar.bz2
/pypy3-v6.0.0-src.tar.bz2
/pypy3.5-v7.0.0-src.tar.bz2
+/pypy3.6-v7.1.1-src.tar.bz2
diff --git a/011-no-faulthandler.patch b/011-no-faulthandler.patch
index f96d232..9d7165d 100644
--- a/011-no-faulthandler.patch
+++ b/011-no-faulthandler.patch
@@ -4,60 +4,6 @@ Date: Wed Mar 29 04:31:55 2017 +0200
011-no-faulthandler.patch
-diff --git a/lib-python/3/test/regrtest.py b/lib-python/3/test/regrtest.py
-index c1d85f6..3d3072c 100755
---- a/lib-python/3/test/regrtest.py
-+++ b/lib-python/3/test/regrtest.py
-@@ -124,7 +124,6 @@ import importlib
-
- import argparse
- import builtins
--import faulthandler
- import io
- import json
- import locale
-@@ -152,7 +151,10 @@ try:
- import _multiprocessing, multiprocessing.process
- except ImportError:
- multiprocessing = None
--
-+try:
-+ import faulthandler
-+except ImportError:
-+ faulthandler = None
-
- # Some times __path__ and __file__ are not absolute (e.g. while running from
- # Lib/) and, if we change the CWD to run the tests in a temporary dir, some
-@@ -486,17 +488,18 @@ def main(tests=None, **kwargs):
- directly to set the values that would normally be set by flags
- on the command line.
- """
-- # Display the Python traceback on fatal errors (e.g. segfault)
-- faulthandler.enable(all_threads=True)
--
-- # Display the Python traceback on SIGALRM or SIGUSR1 signal
-- signals = []
-- if hasattr(signal, 'SIGALRM'):
-- signals.append(signal.SIGALRM)
-- if hasattr(signal, 'SIGUSR1'):
-- signals.append(signal.SIGUSR1)
-- for signum in signals:
-- faulthandler.register(signum, chain=True)
-+ if faulthandler:
-+ # Display the Python traceback on fatal errors (e.g. segfault)
-+ faulthandler.enable(all_threads=True)
-+
-+ # Display the Python traceback on SIGALRM or SIGUSR1 signal
-+ signals = []
-+ if hasattr(signal, 'SIGALRM'):
-+ signals.append(signal.SIGALRM)
-+ if hasattr(signal, 'SIGUSR1'):
-+ signals.append(signal.SIGUSR1)
-+ for signum in signals:
-+ faulthandler.register(signum, chain=True)
-
- replace_stdout()
-
diff --git a/lib-python/3/test/support/__init__.py b/lib-python/3/test/support/__init__.py
index 5d7f308..4424637 100644
--- a/lib-python/3/test/support/__init__.py
diff --git a/189-use-rpm-wheels.patch b/189-use-rpm-wheels.patch
index 2caefe2..eb8b10e 100644
--- a/189-use-rpm-wheels.patch
+++ b/189-use-rpm-wheels.patch
@@ -1,5 +1,5 @@
diff --git a/lib-python/3/ensurepip/__init__.py b/lib-python/3/ensurepip/__init__.py
-index 25c5567..6d8d09c 100644
+index 9f5d151..8b81155 100644
--- a/lib-python/3/ensurepip/__init__.py
+++ b/lib-python/3/ensurepip/__init__.py
@@ -1,16 +1,27 @@
@@ -31,9 +31,9 @@ index 25c5567..6d8d09c 100644
+
+_PIP_VERSION = _get_most_recent_wheel_version("pip")
- # pip currently requires ssl support, so we try to provide a nicer
- # error message when that is missing (http://bugs.python.org/issue19744)
-@@ -37,8 +48,13 @@ def _run_pip(args, additional_paths=None):
+ _PROJECTS = [
+ ("setuptools", _SETUPTOOLS_VERSION),
+@@ -24,8 +35,13 @@ def _run_pip(args, additional_paths=None):
sys.path = additional_paths + sys.path
# Install the bundled software
@@ -49,7 +49,7 @@ index 25c5567..6d8d09c 100644
def version():
-@@ -93,12 +109,9 @@ def bootstrap(*, root=None, upgrade=False, user=False,
+@@ -79,12 +95,9 @@ def bootstrap(*, root=None, upgrade=False, user=False,
additional_paths = []
for project, version in _PROJECTS:
wheel_name = "{}-{}-py2.py3-none-any.whl".format(project, version)
diff --git a/pypy3.spec b/pypy3.spec
index 201a8ac..1f45c89 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,8 +1,8 @@
-%global basever 7.0
+%global basever 7.1
Name: pypy3
-Version: %{basever}.0
-%global pyversion 3.5
-Release: 2%{?dist}
+Version: %{basever}.1
+%global pyversion 3.6
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -134,8 +134,7 @@ ExcludeArch: aarch64 %{power64}
# Turn off the brp-python-bytecompile postprocessing script
# We manually invoke it later on, using the freshly built pypy binary
-%global __os_install_post \
- %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
+%global __brp_python_bytecompile %{nil}
# Source and patches:
Source0: https://bitbucket.org/pypy/pypy/downloads/pypy%{pyversion}-v%{version}-sr...
@@ -321,13 +320,6 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%prep
%autosetup -n pypy%{pyversion}-v%{version}-src -p1 -S git
-# While this is 7.0.0, it has 7.1.0-alpha0 listed inside
-# We sed it out to avoid user confusion
-sed -i 's/7\.1\.0/7.0.0/' pypy/doc/conf.py
-sed -i 's/7\.1\.0-alpha0/7.0.0/g' pypy/module/cpyext/include/patchlevel.h pypy/doc/how-to-release.rst
-sed -i 's/0x07010000/0x07000000/' pypy/module/cpyext/include/patchlevel.h
-sed -i 's/7, 1, 0, "alpha"/7, 0, 0, "final"/' pypy/module/sys/version.py
-
%if %{with rpmwheels}
%apply_patch -m %(basename %{SOURCE189}) %{SOURCE189}
@@ -737,7 +729,7 @@ CheckPyPy() {
# Use regrtest to explicitly list all tests:
( ./$ExeName -c \
- "from test.regrtest import findtests; print('\n'.join(findtests()))"
+ "from test.libregrtest.runtest import findtests; print('\n'.join(findtests()))"
) > testnames.txt
# Skip some tests:
@@ -877,6 +869,10 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri May 24 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.1.1-1
+- Update to 7.1.1 (#1689198)
+- pypy3 is now Python 3.6
+
* Thu May 16 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.0.0-2
- Show the version as 7.0.0
diff --git a/sources b/sources
index 294934f..aa4e777 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3.5-v7.0.0-src.tar.bz2) = 3facac26e06e254cbf244841824b35ec211859123f6ba9f095dc980292c10d9cf1d11de62cc6372cf77e92ee1cd2358bbd794b3ff25cb7172e1b21c02c8ce6c2
+SHA512 (pypy3.6-v7.1.1-src.tar.bz2) = 17e78f9c7080d597a6283d8e8247d1ca78f09a14ff221db8c3d90d255b5befc73102b317ca34a80979e544d5ee72f3e5e649f89d185a085f4cc15012da4d0473
diff --git a/tests/tests.yml b/tests/tests.yml
index ce6f13f..c3a91f3 100644
--- a/tests/tests.yml
+++ b/tests/tests.yml
@@ -10,7 +10,7 @@
tests:
- smoke:
dir: python/smoke
- run: PYTHON=pypy3 VERSION=3.5 ./venv.sh
+ run: PYTHON=pypy3 VERSION=3.6 ./venv.sh
required_packages:
- gcc
- python3-tox
commit 3e4b7200d351e351effedb134c8a2adaab71201e
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri May 17 00:56:47 2019 +0200
Show the version as 7.0.0
While this is 7.0.0, it has 7.1.0-alpha0 listed inside,
we sed it out to avoid user confusion.
diff --git a/pypy3.spec b/pypy3.spec
index 6c452df..201a8ac 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.5
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -321,6 +321,14 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%prep
%autosetup -n pypy%{pyversion}-v%{version}-src -p1 -S git
+# While this is 7.0.0, it has 7.1.0-alpha0 listed inside
+# We sed it out to avoid user confusion
+sed -i 's/7\.1\.0/7.0.0/' pypy/doc/conf.py
+sed -i 's/7\.1\.0-alpha0/7.0.0/g' pypy/module/cpyext/include/patchlevel.h pypy/doc/how-to-release.rst
+sed -i 's/0x07010000/0x07000000/' pypy/module/cpyext/include/patchlevel.h
+sed -i 's/7, 1, 0, "alpha"/7, 0, 0, "final"/' pypy/module/sys/version.py
+
+
%if %{with rpmwheels}
%apply_patch -m %(basename %{SOURCE189}) %{SOURCE189}
rm lib-python/3/ensurepip/_bundled/*.whl
@@ -869,6 +877,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Thu May 16 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.0.0-2
+- Show the version as 7.0.0
+
* Thu Feb 28 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.0.0-1
- Update to 7.0.0 (#1673127)
commit 124d766f70858e217aac1b9c297c4c313ccf95df
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Mar 1 00:06:59 2019 +0100
Update to 7.0.0 (#1673127)
diff --git a/.gitignore b/.gitignore
index 2025c8c..1361620 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@
/pypy3-v5.10.0-src.tar.bz2
/pypy3-v5.10.1-src.tar.bz2
/pypy3-v6.0.0-src.tar.bz2
+/pypy3.5-v7.0.0-src.tar.bz2
diff --git a/009-add-libxcrypt-support.patch b/009-add-libxcrypt-support.patch
index ec17216..f3c9a7d 100644
--- a/009-add-libxcrypt-support.patch
+++ b/009-add-libxcrypt-support.patch
@@ -1,13 +1,13 @@
diff --git a/pypy/module/crypt/interp_crypt.py b/pypy/module/crypt/interp_crypt.py
-index d227b6a..da969e6 100644
+index bd13f6f..1022c9e 100644
--- a/pypy/module/crypt/interp_crypt.py
+++ b/pypy/module/crypt/interp_crypt.py
-@@ -6,7 +6,7 @@ import sys
- if sys.platform.startswith('darwin'):
- eci = ExternalCompilationInfo()
+@@ -9,7 +9,7 @@ elif sys.platform.startswith('linux'):
+ # crypt() is defined only in crypt.h on some Linux variants (eg. Fedora 28)
+ eci = ExternalCompilationInfo(libraries=['crypt'], includes=["crypt.h"])
else:
- eci = ExternalCompilationInfo(libraries=['crypt'])
+ eci = ExternalCompilationInfo(libraries=['crypt'], includes=['crypt.h'])
c_crypt = rffi.llexternal('crypt', [rffi.CCHARP, rffi.CCHARP], rffi.CCHARP,
compilation_info=eci, releasegil=False)
-
+
diff --git a/302-fix-multiprocessing-regression-on-newer-glibcs.patch b/302-fix-multiprocessing-regression-on-newer-glibcs.patch
deleted file mode 100644
index db723a8..0000000
--- a/302-fix-multiprocessing-regression-on-newer-glibcs.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-# HG changeset patch
-# User Miro Hrončok <miro(a)hroncok.cz>
-# Date 1524655710 -7200
-# Wed Apr 25 13:28:30 2018 +0200
-# Branch issue33329
-# Node ID 6501fdc3a80fa2bc3b8c70bfaf94a31c3b3432c0
-# Parent a07f07034d281bec8c776f9e1ee7c5b9aea74007
-Fix multiprocessing regression on newer glibcs
-
-Starting with glibc 2.27.9000-xxx, sigaddset() can return EINVAL for some
-reserved signal numbers between 1 and NSIG. The `range(1, NSIG)` idiom
-is commonly used to select all signals for blocking with `pthread_sigmask`.
-So we ignore the sigaddset() return value until we expose sigfillset()
-to provide a better idiom.
-
-Co-authored-by: Antoine Pitrou <antoine(a)python.org>
-
-diff -r a07f07034d28 -r 6501fdc3a80f pypy/module/signal/interp_signal.py
---- a/pypy/module/signal/interp_signal.py Tue Apr 24 10:00:00 2018 +0200
-+++ b/pypy/module/signal/interp_signal.py Wed Apr 25 13:28:30 2018 +0200
-@@ -379,10 +379,10 @@
- for w_signum in space.unpackiterable(self.w_signals):
- signum = space.int_w(w_signum)
- check_signum_in_range(space, signum)
-- err = c_sigaddset(self.mask, signum)
-- if err:
-- raise oefmt(space.w_ValueError,
-- "signal number %d out of range", signum)
-+ # bpo-33329: ignore c_sigaddset() return value as it can fail
-+ # for some reserved signals, but we want the `range(1, NSIG)`
-+ # idiom to allow selecting all valid signals.
-+ c_sigaddset(self.mask, signum)
- return self.mask
-
- def __exit__(self, *args):
diff --git a/pypy3.spec b/pypy3.spec
index 00494e3..6c452df 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,8 +1,8 @@
-%global basever 6.0
+%global basever 7.0
Name: pypy3
Version: %{basever}.0
%global pyversion 3.5
-Release: 5%{?dist}
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -138,7 +138,7 @@ ExcludeArch: aarch64 %{power64}
%(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/pypy3-v%{version}-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy%{pyversion}-v%{version}-sr...
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -174,12 +174,6 @@ Patch11: 011-no-faulthandler.patch
# We conditionally apply this, but we use autosetup, so we use Source here
Source189: 189-use-rpm-wheels.patch
-# Fix multiprocessing regression on newer glibcs
-# See: https://bugzilla.redhat.com/show_bug.cgi?id=1569933
-# and: https://bugs.python.org/issue33329
-# and: https://bitbucket.org/pypy/pypy/pull-requests/607
-Patch302: 302-fix-multiprocessing-regression-on-newer-glibcs.patch
-
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
@@ -224,18 +218,13 @@ BuildRequires: zlib-devel
BuildRequires: bzip2-devel
BuildRequires: ncurses-devel
BuildRequires: expat-devel
+BuildRequires: openssl-devel
BuildRequires: gdbm-devel
BuildRequires: xz-devel
%ifnarch s390
BuildRequires: valgrind-devel
%endif
-%if 0%{?fedora} >= 26
-BuildRequires: compat-openssl10-devel
-%else
-BuildRequires: openssl-devel
-%endif
-
%if %{run_selftests}
# Used by the selftests, though not by the build:
BuildRequires: gc-devel
@@ -266,6 +255,8 @@ BuildRequires: python-pip-wheel
# Metadata for the core package (the JIT build):
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
Provides: %{name}(abi) = %{basever}
+Provides: pypy%{pyversion} = %{version}-%{release}
+Provides: pypy%{pyversion}%{?_isa} = %{version}-%{release}
%description
PyPy's implementation of Python 3, featuring a Just-In-Time compiler on some CPU
@@ -289,6 +280,9 @@ Summary: Run-time libraries used by PyPy implementations of Python 3
Requires: emacs-filesystem >= %{_emacs_version}
%endif
+Provides: pypy%{pyversion}-libs = %{version}-%{release}
+Provides: pypy%{pyversion}-libs%{?_isa} = %{version}-%{release}
+
%if %{with rpmwheels}
Requires: python-setuptools-wheel
Requires: python-pip-wheel
@@ -305,6 +299,9 @@ Libraries required by the various PyPy implementations of Python 3.
Summary: Development tools for working with PyPy3
Requires: pypy3%{?_isa} = %{version}-%{release}
+Provides: pypy%{pyversion}-devel = %{version}-%{release}
+Provides: pypy%{pyversion}-devel%{?_isa} = %{version}-%{release}
+
%description devel
Header files for building C extension modules against PyPy3
@@ -313,12 +310,16 @@ Header files for building C extension modules against PyPy3
%package stackless
Summary: Stackless Python interpreter built using PyPy3
Requires: pypy3-libs%{?_isa} = %{version}-%{release}
+
+Provides: pypy%{pyversion}-stackless = %{version}-%{release}
+Provides: pypy%{pyversion}-stackless%{?_isa} = %{version}-%{release}
+
%description stackless
Build of PyPy3 with support for micro-threads for massive concurrency
%endif
%prep
-%autosetup -n pypy3-v%{version}-src -p1 -S git
+%autosetup -n pypy%{pyversion}-v%{version}-src -p1 -S git
%if %{with rpmwheels}
%apply_patch -m %(basename %{SOURCE189}) %{SOURCE189}
@@ -868,6 +869,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Thu Feb 28 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.0.0-1
+- Update to 7.0.0 (#1673127)
+
* Sat Feb 02 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 6.0.0-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
diff --git a/sources b/sources
index 2a76651..294934f 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3-v6.0.0-src.tar.bz2) = ea406c4dd1837a6ab13026de01330790f3c18f6e2bfb83e8553e52acf78b43dfb559ce75c2d91395055c771db359356c8183ed950da6f01a21bf09128935af5e
+SHA512 (pypy3.5-v7.0.0-src.tar.bz2) = 3facac26e06e254cbf244841824b35ec211859123f6ba9f095dc980292c10d9cf1d11de62cc6372cf77e92ee1cd2358bbd794b3ff25cb7172e1b21c02c8ce6c2
commit 9d9b0859329520bcb7159023c03f12d2807d39da
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Sat Feb 2 05:16:48 2019 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index 5f5203b..00494e3 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.5
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -868,6 +868,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Sat Feb 02 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 6.0.0-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
* Mon Jan 14 2019 Björn Esser <besser82(a)fedoraproject.org> - 6.0.0-4
- Rebuilt for libcrypt.so.2 (#1666033)
commit f8cbccf6e2a244ea2a453c8913e7e1afa23819e8
Author: Björn Esser <besser82(a)fedoraproject.org>
Date: Mon Jan 14 19:14:13 2019 +0100
Rebuilt for libcrypt.so.2 (#1666033)
diff --git a/pypy3.spec b/pypy3.spec
index 7fc7257..5f5203b 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.5
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -868,6 +868,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Mon Jan 14 2019 Björn Esser <besser82(a)fedoraproject.org> - 6.0.0-4
+- Rebuilt for libcrypt.so.2 (#1666033)
+
* Tue Aug 21 2018 Miro Hrončok <mhroncok(a)redhat.com> - 6.0.0-3
- Use RPM packaged wheels
commit e0becb7cbf6a7549fab9d9a40299888ceae794fe
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Jul 20 12:37:22 2018 +0200
Enable basic venv smoke test in the CI
diff --git a/tests/tests.yml b/tests/tests.yml
new file mode 100644
index 0000000..ce6f13f
--- /dev/null
+++ b/tests/tests.yml
@@ -0,0 +1,17 @@
+---
+- hosts: localhost
+ roles:
+ - role: standard-test-basic
+ tags:
+ - classic
+ repositories:
+ - repo: "https://src.fedoraproject.org/tests/python.git"
+ dest: "python"
+ tests:
+ - smoke:
+ dir: python/smoke
+ run: PYTHON=pypy3 VERSION=3.5 ./venv.sh
+ required_packages:
+ - gcc
+ - python3-tox
+ - pypy3-devel
commit 6f8b7baed90a92dcbd3bed71bf98fa1c073bec3a
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Aug 21 12:10:46 2018 +0200
Use RPM packaged wheels
diff --git a/189-use-rpm-wheels.patch b/189-use-rpm-wheels.patch
new file mode 100644
index 0000000..2caefe2
--- /dev/null
+++ b/189-use-rpm-wheels.patch
@@ -0,0 +1,67 @@
+diff --git a/lib-python/3/ensurepip/__init__.py b/lib-python/3/ensurepip/__init__.py
+index 25c5567..6d8d09c 100644
+--- a/lib-python/3/ensurepip/__init__.py
++++ b/lib-python/3/ensurepip/__init__.py
+@@ -1,16 +1,27 @@
++import distutils.version
++import glob
+ import os
+ import os.path
+-import pkgutil
+ import sys
+ import tempfile
+
+
+ __all__ = ["version", "bootstrap"]
+
++_WHEEL_DIR = "/usr/share/python-wheels/"
+
+-_SETUPTOOLS_VERSION = "28.8.0"
+
+-_PIP_VERSION = "9.0.1"
++def _get_most_recent_wheel_version(pkg):
++ prefix = os.path.join(_WHEEL_DIR, "{}-".format(pkg))
++ suffix = "-py2.py3-none-any.whl"
++ pattern = "{}*{}".format(prefix, suffix)
++ versions = (p[len(prefix):-len(suffix)] for p in glob.glob(pattern))
++ return str(max(versions, key=distutils.version.LooseVersion))
++
++
++_SETUPTOOLS_VERSION = _get_most_recent_wheel_version("setuptools")
++
++_PIP_VERSION = _get_most_recent_wheel_version("pip")
+
+ # pip currently requires ssl support, so we try to provide a nicer
+ # error message when that is missing (http://bugs.python.org/issue19744)
+@@ -37,8 +48,13 @@ def _run_pip(args, additional_paths=None):
+ sys.path = additional_paths + sys.path
+
+ # Install the bundled software
+- import pip
+- pip.main(args)
++ try:
++ # pip 10
++ from pip._internal import main
++ except ImportError:
++ # pip 9
++ from pip import main
++ main(args)
+
+
+ def version():
+@@ -93,12 +109,9 @@ def bootstrap(*, root=None, upgrade=False, user=False,
+ additional_paths = []
+ for project, version in _PROJECTS:
+ wheel_name = "{}-{}-py2.py3-none-any.whl".format(project, version)
+- whl = pkgutil.get_data(
+- "ensurepip",
+- "_bundled/{}".format(wheel_name),
+- )
+- with open(os.path.join(tmpdir, wheel_name), "wb") as fp:
+- fp.write(whl)
++ with open(os.path.join(_WHEEL_DIR, wheel_name), "rb") as sfp:
++ with open(os.path.join(tmpdir, wheel_name), "wb") as fp:
++ fp.write(sfp.read())
+
+ additional_paths.append(os.path.join(tmpdir, wheel_name))
+
diff --git a/pypy3.spec b/pypy3.spec
index 7193654..7fc7257 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.5
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -18,6 +18,10 @@ ExcludeArch: aarch64 %{power64}
# High-level configuration of the build:
+# Whether to use RPM build wheels from the python-{pip,setuptools}-wheel package
+# Uses upstream bundled prebuilt wheels otherwise
+%bcond_without rpmwheels
+
# PyPy consists of an implementation of an interpreter (with JIT compilation)
# for the full Python language written in a high-level language, leaving many
# of the implementation details as "pluggable" policies.
@@ -165,6 +169,11 @@ Patch9: 009-add-libxcrypt-support.patch
# It seems ppc64 has no faulthandler
Patch11: 011-no-faulthandler.patch
+# Instead of bundled wheels, use our RPM packaged wheels from
+# /usr/share/python-wheels
+# We conditionally apply this, but we use autosetup, so we use Source here
+Source189: 189-use-rpm-wheels.patch
+
# Fix multiprocessing regression on newer glibcs
# See: https://bugzilla.redhat.com/show_bug.cgi?id=1569933
# and: https://bugs.python.org/issue33329
@@ -249,6 +258,11 @@ BuildRequires: emacs
# For %%autosetup -S git
BuildRequires: %{_bindir}/git
+%if %{with rpmwheels}
+BuildRequires: python-setuptools-wheel
+BuildRequires: python-pip-wheel
+%endif
+
# Metadata for the core package (the JIT build):
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
Provides: %{name}(abi) = %{basever}
@@ -275,6 +289,14 @@ Summary: Run-time libraries used by PyPy implementations of Python 3
Requires: emacs-filesystem >= %{_emacs_version}
%endif
+%if %{with rpmwheels}
+Requires: python-setuptools-wheel
+Requires: python-pip-wheel
+%else
+Provides: bundled(python3-pip) = 9.0.1
+Provides: bundled(python3-setuptools) = 28.8.0
+%endif
+
%description libs
Libraries required by the various PyPy implementations of Python 3.
@@ -298,6 +320,17 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%prep
%autosetup -n pypy3-v%{version}-src -p1 -S git
+%if %{with rpmwheels}
+%apply_patch -m %(basename %{SOURCE189}) %{SOURCE189}
+rm lib-python/3/ensurepip/_bundled/*.whl
+rmdir lib-python/3/ensurepip/_bundled
+%else
+# we don't want to ship the old ones anyway
+rm lib-python/3/ensurepip/_bundled/pip-8.1.2-*
+rm lib-python/3/ensurepip/_bundled/setuptools-21.2.1-*
+%endif
+
+
# Replace /usr/local/bin/python or /usr/bin/env python shebangs with /usr/bin/python2 or pypy2:
find -name "*.py" -exec \
sed \
@@ -835,6 +868,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Tue Aug 21 2018 Miro Hrončok <mhroncok(a)redhat.com> - 6.0.0-3
+- Use RPM packaged wheels
+
* Fri Jul 13 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 6.0.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
commit 9d0ffbc9d5d861af1635230e55a86c7bc77438b7
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Aug 21 11:48:21 2018 +0200
Poor ppc64(le), it just doesn't build :(
diff --git a/pypy3.spec b/pypy3.spec
index ccbd579..7193654 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -12,8 +12,9 @@ Summary: Python 3 implementation with a Just-In-Time compiler
License: MIT and Python and UCD
URL: http://pypy.org/
-# Not available yet
-ExcludeArch: aarch64
+# aarch64: Not available yet
+# ppc64: Broken on F29+ https://bugzilla.redhat.com/show_bug.cgi?id=1619601
+ExcludeArch: aarch64 %{power64}
# High-level configuration of the build:
commit e47185bc51db6ff0d04546479b77bdfe84b586c2
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sun Jul 15 16:25:45 2018 +0200
Drop RHEL5 conditional
diff --git a/pypy3.spec b/pypy3.spec
index 2e1edb6..ccbd579 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -104,7 +104,7 @@ ExcludeArch: aarch64
%global with_stackless 0
# Should we build the emacs JIT-viewing mode?
-%if 0%{?rhel} == 5 || 0%{?rhel} == 6
+%if 0%{?rhel} == 6
%global with_emacs 0
%else
%global with_emacs 1
commit 3f667ce3366f6971e86aa07783bbc2a370043c5a
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sun Jul 15 16:23:25 2018 +0200
BR gcc
diff --git a/pypy3.spec b/pypy3.spec
index fb1ac73..2e1edb6 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -202,6 +202,8 @@ BuildRequires: python2-pycparser
%endif
+BuildRequires: gcc
+
BuildRequires: libffi-devel
BuildRequires: tcl-devel
BuildRequires: tk-devel
commit f7ac519b1ef348af1d5b57d089f2d7b2109388f6
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Fri Jul 13 23:12:32 2018 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index b1add4a..fb1ac73 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.5
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -832,6 +832,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri Jul 13 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 6.0.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
* Wed Apr 25 2018 Miro Hrončok <mhroncok(a)redhat.com> - 6.0.0-1
- Fix failing taskotron check
- New release 6.0.0 (#1571489)
commit 18c888e5f5972bd6391a59f77794b317c359cec1
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Apr 25 14:20:20 2018 +0200
New release 6.0.0 (#1571489)
Fix multiprocessing regression on newer glibcs (#1569933)
diff --git a/.gitignore b/.gitignore
index 67b6ee0..2025c8c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@
/pypy3-v5.9.0-src.tar.bz2
/pypy3-v5.10.0-src.tar.bz2
/pypy3-v5.10.1-src.tar.bz2
+/pypy3-v6.0.0-src.tar.bz2
diff --git a/302-fix-multiprocessing-regression-on-newer-glibcs.patch b/302-fix-multiprocessing-regression-on-newer-glibcs.patch
new file mode 100644
index 0000000..db723a8
--- /dev/null
+++ b/302-fix-multiprocessing-regression-on-newer-glibcs.patch
@@ -0,0 +1,35 @@
+# HG changeset patch
+# User Miro Hrončok <miro(a)hroncok.cz>
+# Date 1524655710 -7200
+# Wed Apr 25 13:28:30 2018 +0200
+# Branch issue33329
+# Node ID 6501fdc3a80fa2bc3b8c70bfaf94a31c3b3432c0
+# Parent a07f07034d281bec8c776f9e1ee7c5b9aea74007
+Fix multiprocessing regression on newer glibcs
+
+Starting with glibc 2.27.9000-xxx, sigaddset() can return EINVAL for some
+reserved signal numbers between 1 and NSIG. The `range(1, NSIG)` idiom
+is commonly used to select all signals for blocking with `pthread_sigmask`.
+So we ignore the sigaddset() return value until we expose sigfillset()
+to provide a better idiom.
+
+Co-authored-by: Antoine Pitrou <antoine(a)python.org>
+
+diff -r a07f07034d28 -r 6501fdc3a80f pypy/module/signal/interp_signal.py
+--- a/pypy/module/signal/interp_signal.py Tue Apr 24 10:00:00 2018 +0200
++++ b/pypy/module/signal/interp_signal.py Wed Apr 25 13:28:30 2018 +0200
+@@ -379,10 +379,10 @@
+ for w_signum in space.unpackiterable(self.w_signals):
+ signum = space.int_w(w_signum)
+ check_signum_in_range(space, signum)
+- err = c_sigaddset(self.mask, signum)
+- if err:
+- raise oefmt(space.w_ValueError,
+- "signal number %d out of range", signum)
++ # bpo-33329: ignore c_sigaddset() return value as it can fail
++ # for some reserved signals, but we want the `range(1, NSIG)`
++ # idiom to allow selecting all valid signals.
++ c_sigaddset(self.mask, signum)
+ return self.mask
+
+ def __exit__(self, *args):
diff --git a/pypy3.spec b/pypy3.spec
index a14b96d..b1add4a 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,8 +1,8 @@
-%global basever 5.10
+%global basever 6.0
Name: pypy3
-Version: %{basever}.1
+Version: %{basever}.0
%global pyversion 3.5
-Release: 8%{?dist}
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -164,6 +164,12 @@ Patch9: 009-add-libxcrypt-support.patch
# It seems ppc64 has no faulthandler
Patch11: 011-no-faulthandler.patch
+# Fix multiprocessing regression on newer glibcs
+# See: https://bugzilla.redhat.com/show_bug.cgi?id=1569933
+# and: https://bugs.python.org/issue33329
+# and: https://bitbucket.org/pypy/pypy/pull-requests/607
+Patch302: 302-fix-multiprocessing-regression-on-newer-glibcs.patch
+
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
@@ -826,8 +832,10 @@ CheckPyPy %{name}-stackless
%changelog
-* Sat Apr 14 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-8
+* Wed Apr 25 2018 Miro Hrončok <mhroncok(a)redhat.com> - 6.0.0-1
- Fix failing taskotron check
+- New release 6.0.0 (#1571489)
+- Fix multiprocessing regression on newer glibcs (#1569933)
* Wed Apr 11 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-7
- Provide pypy3(abi) = 5.10
diff --git a/sources b/sources
index afb3c83..2a76651 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3-v5.10.1-src.tar.bz2) = 91b0ed25130bdbb46d5e577136b5fe63d5162917dcc2d0b69f5cac2a283ece9d0bfd3c7c8dc61ff391e0550fa1603326f6edeb2df3159d71617fefe6c07439f5
+SHA512 (pypy3-v6.0.0-src.tar.bz2) = ea406c4dd1837a6ab13026de01330790f3c18f6e2bfb83e8553e52acf78b43dfb559ce75c2d91395055c771db359356c8183ed950da6f01a21bf09128935af5e
commit b70eb98951063c00fb114a91f935d8991ca0e927
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sun Apr 15 00:25:48 2018 +0200
Remove Windows bat file
diff --git a/pypy3.spec b/pypy3.spec
index 0aa26f8..a14b96d 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -309,6 +309,9 @@ find lib-python/%{pylibver} lib_pypy -name "*.py" -exec \
"{}" \
\;
+# Not needed on Linux
+rm lib-python/3/idlelib/idle.bat
+
%ifarch %{ix86} x86_64 %{arm}
sed -i -r 's/\$\(LDFLAGSEXTRA\)/& -fuse-ld=gold/' ./rpython/translator/platform/posix.py
%endif
commit 1b41795b2f455df4a5773c050253c26279595ba7
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sat Apr 14 10:55:05 2018 +0200
Fix shebangs (reported mangled by taskotron)
diff --git a/pypy3.spec b/pypy3.spec
index bf093ac..0aa26f8 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.5
-Release: 7%{?dist}
+Release: 8%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -185,14 +185,14 @@ Patch11: 011-no-faulthandler.patch
# pypy3 can only be build with pypy2
BuildRequires: pypy2
# no pypy-pycparser available ATM
-%global bootstrap_python_interp pypy
+%global bootstrap_python_interp pypy2
%else
# pypy3 can only be build with python2
BuildRequires: python2-devel
BuildRequires: python2-pycparser
-%global bootstrap_python_interp python
+%global bootstrap_python_interp python2
%endif
@@ -289,10 +289,10 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%prep
%autosetup -n pypy3-v%{version}-src -p1 -S git
-# Replace /usr/local/bin/python shebangs with /usr/bin/python:
+# Replace /usr/local/bin/python or /usr/bin/env python shebangs with /usr/bin/python2 or pypy2:
find -name "*.py" -exec \
sed \
- -i -e "s|/usr/local/bin/python|/usr/bin/python|" \
+ -i -r -e "s@/usr/(local/)?bin/(env )?python(2|3)?@/usr/bin/%{bootstrap_python_interp}@" \
"{}" \
\;
@@ -303,9 +303,9 @@ for f in rpython/translator/goal/bpnn.py ; do
chmod a-x $f
done
-# Replace all lib-python python shebangs with pypy
-find lib-python/%{pylibver} -name "*.py" -exec \
- sed -r -i '1s|^#!\s*/usr/bin.*python.*|#!/usr/bin/%{name}|' \
+# Replace all lib-python and lib_pypy python shebangs with pypy3 (those will be shipped with pypy3-libs)
+find lib-python/%{pylibver} lib_pypy -name "*.py" -exec \
+ sed -r -i '1s@^#!\s*/usr/bin.*(python|pypy).*(a)#!/usr/bin/%{name}@' \
"{}" \
\;
@@ -823,6 +823,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Sat Apr 14 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-8
+- Fix failing taskotron check
+
* Wed Apr 11 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-7
- Provide pypy3(abi) = 5.10
commit cac18deee0e00c9ee8b4fce8d4507796a1561298
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Thu Apr 12 00:23:12 2018 +0200
Provide pypy3(abi) = 5.10
diff --git a/pypy3.spec b/pypy3.spec
index 196243f..bf093ac 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.5
-Release: 6%{?dist}
+Release: 7%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -241,7 +241,8 @@ BuildRequires: emacs
BuildRequires: %{_bindir}/git
# Metadata for the core package (the JIT build):
-Requires: pypy3-libs%{?_isa} = %{version}-%{release}
+Requires: %{name}-libs%{?_isa} = %{version}-%{release}
+Provides: %{name}(abi) = %{basever}
%description
PyPy's implementation of Python 3, featuring a Just-In-Time compiler on some CPU
@@ -822,6 +823,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed Apr 11 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-7
+- Provide pypy3(abi) = 5.10
+
* Wed Apr 11 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-6
- RPM macros improvements
commit fe844b70bdc354e3d454bb43ed578f3b4898bac7
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Apr 11 12:09:36 2018 +0200
Add macro with pypy version (aka 5.10, not 3.5)
diff --git a/macros.pypy3 b/macros.pypy3
index 796b872..f138a39 100644
--- a/macros.pypy3
+++ b/macros.pypy3
@@ -2,3 +2,4 @@
%pypy3_sitelib %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
%pypy3_sitearch %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")
%pypy3_version %(%{__pypy3} -c "import sys; sys.stdout.write(sys.version[:3])")
+%pypy3_pypy_version %(%{__pypy3} -c "import sys; sys.stdout.write('{}.{}'.format(sys.pypy_version_info.major, sys.pypy_version_info.minor))")
diff --git a/pypy3.spec b/pypy3.spec
index 958f998..196243f 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.5
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -822,6 +822,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed Apr 11 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-6
+- RPM macros improvements
+
* Tue Apr 10 2018 Michal Cyprian <mcyprian(a)redhat.com> - 5.10.1-5
- Remove the rightmost version number from the path
- rhbz#1516885: https://bugzilla.redhat.com/show_bug.cgi?id=1516885
commit df12619f2b234a4f954e7e043fdac5d0f4701d7b
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Apr 11 12:06:37 2018 +0200
Remove %pypy3dir definition, it is useless
diff --git a/macros.pypy3 b/macros.pypy3
index ef1f600..796b872 100644
--- a/macros.pypy3
+++ b/macros.pypy3
@@ -2,4 +2,3 @@
%pypy3_sitelib %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
%pypy3_sitearch %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")
%pypy3_version %(%{__pypy3} -c "import sys; sys.stdout.write(sys.version[:3])")
-%pypy3dir %{_builddir}/pypy3-%{name}-%{version}-%{release}
commit cf5da9288bd0e56d5b0e203cee650cc39f2e3e85
Author: Michal Cyprian <m.cyprian(a)gmail.com>
Date: Wed Apr 11 01:31:31 2018 +0200
Remove the rightmost version number from the path
diff --git a/pypy3.spec b/pypy3.spec
index 22092d4..958f998 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,7 +1,8 @@
+%global basever 5.10
Name: pypy3
-Version: 5.10.1
+Version: %{basever}.1
%global pyversion 3.5
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -119,7 +120,7 @@ ExcludeArch: aarch64
# Easy way to turn off the selftests:
%global run_selftests 1
-%global pypyprefix %{_libdir}/pypy3-%{version}
+%global pypyprefix %{_libdir}/pypy3-%{basever}
%global pylibver 3
# We refer to this subdir of the source tree in a few places during the build:
@@ -464,8 +465,8 @@ mkdir -p %{buildroot}/%{_bindir}
mkdir -p %{buildroot}/%{pypyprefix}
-# 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}
+# Run installing script, archive-name %{name}-%{basever} in %{buildroot}/%{_libdir} == %{pypyprefix}
+%{bootstrap_python_interp} pypy/tool/release/package.py --archive-name %{name}-%{basever} --builddir %{buildroot}/%{_libdir}
# Remove shebang lines from .py files that aren't executable, and
@@ -639,7 +640,7 @@ cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/pyp
install -m0644 -p -D -t %{buildroot}/%{_rpmconfigdir}/macros.d %{SOURCE2}
# Remove files we don't want:
-rm -f %{buildroot}%{_libdir}/pypy3-5.2.0.tar.bz2 \
+rm -f %{buildroot}%{_libdir}/%{name}-%{basever}.tar.bz2 \
%{buildroot}%{pypyprefix}/LICENSE \
%{buildroot}%{pypyprefix}/README.rst
@@ -821,6 +822,10 @@ CheckPyPy %{name}-stackless
%changelog
+* Tue Apr 10 2018 Michal Cyprian <mcyprian(a)redhat.com> - 5.10.1-5
+- Remove the rightmost version number from the path
+- rhbz#1516885: https://bugzilla.redhat.com/show_bug.cgi?id=1516885
+
* Thu Mar 29 2018 Michal Cyprian <mcyprian(a)redhat.com> - 5.10.1-4
- Add patch for libxcrypt
commit c54059a679944400a51e891b164e564befa14cbb
Author: Michal Cyprian <m.cyprian(a)gmail.com>
Date: Thu Mar 29 21:24:14 2018 +0200
Add patch for libxcrypt
diff --git a/009-add-libxcrypt-support.patch b/009-add-libxcrypt-support.patch
new file mode 100644
index 0000000..ec17216
--- /dev/null
+++ b/009-add-libxcrypt-support.patch
@@ -0,0 +1,13 @@
+diff --git a/pypy/module/crypt/interp_crypt.py b/pypy/module/crypt/interp_crypt.py
+index d227b6a..da969e6 100644
+--- a/pypy/module/crypt/interp_crypt.py
++++ b/pypy/module/crypt/interp_crypt.py
+@@ -6,7 +6,7 @@ import sys
+ if sys.platform.startswith('darwin'):
+ eci = ExternalCompilationInfo()
+ else:
+- eci = ExternalCompilationInfo(libraries=['crypt'])
++ eci = ExternalCompilationInfo(libraries=['crypt'], includes=['crypt.h'])
+ c_crypt = rffi.llexternal('crypt', [rffi.CCHARP, rffi.CCHARP], rffi.CCHARP,
+ compilation_info=eci, releasegil=False)
+
diff --git a/pypy3.spec b/pypy3.spec
index 2ed9d59..22092d4 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,7 +1,7 @@
Name: pypy3
Version: 5.10.1
%global pyversion 3.5
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -155,6 +155,11 @@ Patch6: 006-always-log-stdout.patch
# community that won't make sense outside of it). [Sorry to be a killjoy]
Patch7: 007-remove-startup-message.patch
+# Glibc's libcrypt was replaced with libxcrypt in f28, crypt.h header has
+# to be added to privent compilation error.
+# https://fedoraproject.org/wiki/Changes/Replace_glibc_libcrypt_with_libxcrypt
+Patch9: 009-add-libxcrypt-support.patch
+
# It seems ppc64 has no faulthandler
Patch11: 011-no-faulthandler.patch
@@ -816,6 +821,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Thu Mar 29 2018 Michal Cyprian <mcyprian(a)redhat.com> - 5.10.1-4
+- Add patch for libxcrypt
+
* Fri Feb 09 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.10.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
commit 664896a6c60437d635c7b940c30ec541d0e94f87
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Fri Feb 9 06:17:45 2018 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index 5a9fcba..2ed9d59 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,7 +1,7 @@
Name: pypy3
Version: 5.10.1
%global pyversion 3.5
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -816,6 +816,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri Feb 09 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.10.1-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
* Sat Jan 20 2018 Björn Esser <besser82(a)fedoraproject.org> - 5.10.1-2
- Rebuilt for switch to libxcrypt
commit 43f3327530097638befd17ecc0d7054493cc45b9
Author: Björn Esser <besser82(a)fedoraproject.org>
Date: Sat Jan 20 23:07:39 2018 +0100
Rebuilt for switch to libxcrypt
diff --git a/pypy3.spec b/pypy3.spec
index 76aed7c..5a9fcba 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,7 +1,7 @@
Name: pypy3
Version: 5.10.1
%global pyversion 3.5
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -816,6 +816,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Sat Jan 20 2018 Björn Esser <besser82(a)fedoraproject.org> - 5.10.1-2
+- Rebuilt for switch to libxcrypt
+
* Fri Jan 12 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-1
- Update to 5.10.1 (#1533689)
- Removed two upstreamed patches
commit 8b06f1af625208abd6fd0fa5817f8df53e824916
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Jan 19 16:19:55 2018 +0100
Only BR /usr/bin/git, it should be enough for autosetup
diff --git a/pypy3.spec b/pypy3.spec
index db72cad..76aed7c 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -232,7 +232,7 @@ BuildRequires: emacs
%endif
# For %%autosetup -S git
-BuildRequires: git
+BuildRequires: %{_bindir}/git
# Metadata for the core package (the JIT build):
Requires: pypy3-libs%{?_isa} = %{version}-%{release}
commit 93cd7d04ccff833ff161ec02c1fbfb2d940fca9e
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Jan 12 10:01:38 2018 +0100
Update to 5.10.1 (#1533689)
diff --git a/.gitignore b/.gitignore
index 40caefb..67b6ee0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@
/pypy3-v5.7.0-src.tar.bz2
/pypy3-v5.9.0-src.tar.bz2
/pypy3-v5.10.0-src.tar.bz2
+/pypy3-v5.10.1-src.tar.bz2
diff --git a/012-time-sleep-i686-overflow.patch b/012-time-sleep-i686-overflow.patch
deleted file mode 100644
index 7dc6cf3..0000000
--- a/012-time-sleep-i686-overflow.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-# HG changeset patch
-# User Ronan Lamy <ronan.lamy(a)gmail.com>
-# Date 1514473067 -3600
-# Branch py3.5
-# Node ID f145d85043878194d7eee33b2049063843e032d8
-# Parent d7d2710e65359e1e8d69e82612cb96f2f3921de7
-Fix issue #2717
-
-diff --git a/pypy/interpreter/test/test_timeutils.py b/pypy/interpreter/test/test_timeutils.py
-new file mode 100644
-index 0000000..873b2b4
---- /dev/null
-+++ b/pypy/interpreter/test/test_timeutils.py
-@@ -0,0 +1,13 @@
-+import pytest
-+from rpython.rlib.rarithmetic import r_longlong
-+from pypy.interpreter.error import OperationError
-+from pypy.interpreter.timeutils import timestamp_w
-+
-+def test_timestamp_w(space):
-+ w_1_year = space.newint(365 * 24 * 3600)
-+ result = timestamp_w(space, w_1_year)
-+ assert isinstance(result, r_longlong)
-+ assert result // 10 ** 9 == space.int_w(w_1_year)
-+ w_millenium = space.mul(w_1_year, space.newint(1000))
-+ with pytest.raises(OperationError): # timestamps overflow after ~300 years
-+ timestamp_w(space, w_millenium)
-diff --git a/pypy/interpreter/timeutils.py b/pypy/interpreter/timeutils.py
-index 336426b..7918dc8 100644
---- a/pypy/interpreter/timeutils.py
-+++ b/pypy/interpreter/timeutils.py
-@@ -3,7 +3,7 @@ Access to the time module's high-resolution monotonic clock
- """
- import math
- from rpython.rlib.rarithmetic import (
-- r_longlong, ovfcheck, ovfcheck_float_to_longlong)
-+ r_longlong, ovfcheck_float_to_longlong)
- from pypy.interpreter.error import oefmt
-
- SECS_TO_NS = 10 ** 9
-@@ -28,10 +28,10 @@ def timestamp_w(space, w_secs):
- raise oefmt(space.w_OverflowError,
- "timestamp %R too large to convert to C _PyTime_t", w_secs)
- else:
-- sec = space.int_w(w_secs)
- try:
-- result = ovfcheck(sec * SECS_TO_NS)
-+ sec = space.bigint_w(w_secs).tolonglong()
-+ result = sec * r_longlong(SECS_TO_NS)
- except OverflowError:
- raise oefmt(space.w_OverflowError,
-- "timestamp too large to convert to C _PyTime_t")
-- return r_longlong(result)
-+ "timestamp %R too large to convert to C _PyTime_t", w_secs)
-+ return result
diff --git a/013-fix-typeerror.patch b/013-fix-typeerror.patch
deleted file mode 100644
index 86b0650..0000000
--- a/013-fix-typeerror.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-# HG changeset patch
-# User Miro Hrončok <miro(a)hroncok.cz>
-# Date 1514415016 0
-# Branch hroncok/fix-typeerror-str-does-not-support-the-b-1514414905375
-# Node ID 0551d04959425ea4a8ff7e87a5d357d03936cde0
-# Parent a4194a67868fa916074416e96456d07d52b1a1a1
-Fix: TypeError: 'str' does not support the buffer interface
-
-Fixes https://bitbucket.org/pypy/pypy/issues/2718
-
-diff --git a/lib_pypy/pyrepl/unix_console.py b/lib_pypy/pyrepl/unix_console.py
---- a/lib_pypy/pyrepl/unix_console.py
-+++ b/lib_pypy/pyrepl/unix_console.py
-@@ -500,7 +500,7 @@
- os.write(self.output_fd, fmt[:x])
- fmt = fmt[y:]
- delay = int(m.group(1))
-- if '*' in m.group(2):
-+ if b'*' in m.group(2):
- delay *= self.height
- if self._pad:
- nchars = (bps*delay)/1000
diff --git a/pypy3.spec b/pypy3.spec
index dc1aa8e..db72cad 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,7 +1,7 @@
Name: pypy3
-Version: 5.10.0
+Version: 5.10.1
%global pyversion 3.5
-Release: 3%{?dist}
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -158,12 +158,6 @@ Patch7: 007-remove-startup-message.patch
# It seems ppc64 has no faulthandler
Patch11: 011-no-faulthandler.patch
-# https://bitbucket.org/pypy/pypy/issues/2717
-Patch12: 012-time-sleep-i686-overflow.patch
-
-# https://bitbucket.org/pypy/pypy/issues/2718
-Patch13: 013-fix-typeerror.patch
-
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
@@ -822,6 +816,10 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri Jan 12 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-1
+- Update to 5.10.1 (#1533689)
+- Removed two upstreamed patches
+
* Fri Dec 29 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-3
- Remove never used InstallPyPy function
- Actually call execstack as originally intended
diff --git a/sources b/sources
index d9f03a4..afb3c83 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3-v5.10.0-src.tar.bz2) = 69a373c18dbad9dd617f994ad885c8d8975f0c484ba9dd547e6e892c9a3030a43e9e3ee668aee5f4969403883de1311cef97a0a5e5701921172ee6c2119b771b
+SHA512 (pypy3-v5.10.1-src.tar.bz2) = 91b0ed25130bdbb46d5e577136b5fe63d5162917dcc2d0b69f5cac2a283ece9d0bfd3c7c8dc61ff391e0550fa1603326f6edeb2df3159d71617fefe6c07439f5
commit 82dcbae2321eac8b49b7e987dfe170bdd2e19c56
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Dec 29 19:50:56 2017 +0100
On power, use cpython2 to build pypy3
diff --git a/pypy3.spec b/pypy3.spec
index 50ecfc0..dc1aa8e 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -171,10 +171,16 @@ Patch13: 013-fix-typeerror.patch
#
# Turn it off with this boolean, to revert back to rebuilding using CPython
# and avoid a cycle in the build-time dependency graph:
-
# Note, pypy3 is built with pypy2, so no dependency cycle
+%ifarch %{power64}
+# the build is unreliable with pypy+power, getting random failures
+# so better have a bit slower build than having to build until it pass
+%global use_self_when_building 0
+%else
%global use_self_when_building 1
+%endif
+
%if 0%{use_self_when_building}
# pypy3 can only be build with pypy2
BuildRequires: pypy2
@@ -821,6 +827,7 @@ CheckPyPy %{name}-stackless
- Actually call execstack as originally intended
- Use execstack on all arches (it's available now)
- Don't ship the debug binaries
+- On power, use cpython2 to build pypy3
* Thu Dec 28 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-2
- Fixed upstream issues #2717 and #2718 (re-enable test_socket)
commit 720aa9bae8b7478b99bcb277238fcae6cca364d9
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Dec 29 14:12:06 2017 +0100
Remove the debug builds (the package was ~350 MB)
Also:
- Remove never used InstallPyPy function
- Actually call execstack as originally intended
- Use execstack on all arches (it's available now)
diff --git a/pypy3.spec b/pypy3.spec
index 218ec39..50ecfc0 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,7 +1,7 @@
Name: pypy3
Version: 5.10.0
%global pyversion 3.5
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -224,10 +224,7 @@ BuildRequires: /usr/bin/free
BuildRequires: perl-interpreter
%endif
-# No prelink on these arches
-%ifnarch aarch64 ppc64le
BuildRequires: /usr/bin/execstack
-%endif
# For byte-compiling the JIT-viewing mode:
%if %{with_emacs}
@@ -458,39 +455,6 @@ BuildPyPy \
%install
-# Install the various executables:
-
-InstallPyPy() {
- ExeName=$1
-
- # To ensure compatibility with virtualenv, pypy finds its libraries
- # relative to itself; this happens within
- # pypy/translator/goal/app_main.py:get_library_path
- # which calls sys.pypy_initial_path(dirname) on the dir containing
- # the executable, with symlinks resolved.
- #
- # Hence we make /usr/bin/pypy be a symlink to the real binary, which we
- # place within /usr/lib[64]/pypy-1.* as pypy
- #
- # This ought to enable our pypy build to work with virtualenv
- # (rhbz#742641)
- install -m 755 %{goal_dir}/$ExeName %{buildroot}/%{pypyprefix}/$ExeName
- ln -s %{pypyprefix}/$ExeName %{buildroot}/%{_bindir}
-
- # The generated machine code doesn't need an executable stack, but
- # one of the assembler files (gcmaptable.s) doesn't have the necessary
- # metadata to inform gcc of that, and thus gcc pessimistically assumes
- # that the built binary does need an executable stack.
- #
- # Reported upstream as: https://codespeak.net/issue/pypy-dev/issue610
- #
- # I tried various approaches involving fixing the build, but the simplest
- # approach is to postprocess the ELF file:
-%ifnarch aarch64 ppc64le
- execstack --clear-execstack %{buildroot}/%{pypyprefix}/$ExeName
-%endif
-}
-
mkdir -p %{buildroot}/%{_bindir}
mkdir -p %{buildroot}/%{pypyprefix}
@@ -517,6 +481,17 @@ find \
mkdir -p %{buildroot}/%{pypyprefix}/site-packages
+# The generated machine code doesn't need an executable stack, but
+# one of the assembler files (gcmaptable.s) doesn't have the necessary
+# metadata to inform gcc of that, and thus gcc pessimistically assumes
+# that the built binary does need an executable stack.
+#
+# Reported upstream as: https://codespeak.net/issue/pypy-dev/issue610
+#
+# I tried various approaches involving fixing the build, but the simplest
+# approach is to postprocess the ELF file:
+execstack --clear-execstack %{buildroot}/%{pypyprefix}/bin/pypy3
+
ln -s ./pypy3 %{buildroot}%{pypyprefix}/bin/pypy%{pyversion}
ln -s %{pypyprefix}/bin/pypy%{pyversion} %{buildroot}%{_bindir}/pypy%{pyversion}
ln -s pypy%{pyversion} %{buildroot}%{_bindir}/pypy3
@@ -666,6 +641,12 @@ rm -f %{buildroot}%{_libdir}/pypy3-5.2.0.tar.bz2 \
# wtf? This is probably masking some bigger problem, but let's do this for now
mv -v lib-python/3/test/regrtest.py-new lib-python/3/test/regrtest.py || :
+# since 5.10.0, the debug binaries are built and shipped, making the
+# pypy3 package ~350 MiB. let's remove them here for now and TODO figure out why
+rm -f %{buildroot}%{pypyprefix}/bin/pypy3.debug
+rm -f %{buildroot}%{pypyprefix}/bin/libpypy3-c.so.debug
+
+
%check
topdir=$(pwd)
@@ -835,6 +816,12 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri Dec 29 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-3
+- Remove never used InstallPyPy function
+- Actually call execstack as originally intended
+- Use execstack on all arches (it's available now)
+- Don't ship the debug binaries
+
* Thu Dec 28 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-2
- Fixed upstream issues #2717 and #2718 (re-enable test_socket)
- Use pypy2 when building (it's faster and works this time)
commit 9c955b3defcb09be770be0be46c3761fc0185d0b
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Thu Dec 28 17:47:00 2017 +0100
Use pypy2 when building
(it's faster and works this time)
diff --git a/pypy3.spec b/pypy3.spec
index dc8c53d..218ec39 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -174,7 +174,7 @@ Patch13: 013-fix-typeerror.patch
# Note, pypy3 is built with pypy2, so no dependency cycle
-%global use_self_when_building 0
+%global use_self_when_building 1
%if 0%{use_self_when_building}
# pypy3 can only be build with pypy2
BuildRequires: pypy2
@@ -837,6 +837,7 @@ CheckPyPy %{name}-stackless
%changelog
* Thu Dec 28 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-2
- Fixed upstream issues #2717 and #2718 (re-enable test_socket)
+- Use pypy2 when building (it's faster and works this time)
* Mon Dec 25 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-1
- Update to 5.10 (#1528841)
commit e858e84bf97e61dd4d1a72466862ac6cb8e57296
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Thu Dec 28 17:45:36 2017 +0100
Fixed upstream issues #2717 and #2718 (re-enable test_socket)
diff --git a/012-time-sleep-i686-overflow.patch b/012-time-sleep-i686-overflow.patch
new file mode 100644
index 0000000..7dc6cf3
--- /dev/null
+++ b/012-time-sleep-i686-overflow.patch
@@ -0,0 +1,55 @@
+# HG changeset patch
+# User Ronan Lamy <ronan.lamy(a)gmail.com>
+# Date 1514473067 -3600
+# Branch py3.5
+# Node ID f145d85043878194d7eee33b2049063843e032d8
+# Parent d7d2710e65359e1e8d69e82612cb96f2f3921de7
+Fix issue #2717
+
+diff --git a/pypy/interpreter/test/test_timeutils.py b/pypy/interpreter/test/test_timeutils.py
+new file mode 100644
+index 0000000..873b2b4
+--- /dev/null
++++ b/pypy/interpreter/test/test_timeutils.py
+@@ -0,0 +1,13 @@
++import pytest
++from rpython.rlib.rarithmetic import r_longlong
++from pypy.interpreter.error import OperationError
++from pypy.interpreter.timeutils import timestamp_w
++
++def test_timestamp_w(space):
++ w_1_year = space.newint(365 * 24 * 3600)
++ result = timestamp_w(space, w_1_year)
++ assert isinstance(result, r_longlong)
++ assert result // 10 ** 9 == space.int_w(w_1_year)
++ w_millenium = space.mul(w_1_year, space.newint(1000))
++ with pytest.raises(OperationError): # timestamps overflow after ~300 years
++ timestamp_w(space, w_millenium)
+diff --git a/pypy/interpreter/timeutils.py b/pypy/interpreter/timeutils.py
+index 336426b..7918dc8 100644
+--- a/pypy/interpreter/timeutils.py
++++ b/pypy/interpreter/timeutils.py
+@@ -3,7 +3,7 @@ Access to the time module's high-resolution monotonic clock
+ """
+ import math
+ from rpython.rlib.rarithmetic import (
+- r_longlong, ovfcheck, ovfcheck_float_to_longlong)
++ r_longlong, ovfcheck_float_to_longlong)
+ from pypy.interpreter.error import oefmt
+
+ SECS_TO_NS = 10 ** 9
+@@ -28,10 +28,10 @@ def timestamp_w(space, w_secs):
+ raise oefmt(space.w_OverflowError,
+ "timestamp %R too large to convert to C _PyTime_t", w_secs)
+ else:
+- sec = space.int_w(w_secs)
+ try:
+- result = ovfcheck(sec * SECS_TO_NS)
++ sec = space.bigint_w(w_secs).tolonglong()
++ result = sec * r_longlong(SECS_TO_NS)
+ except OverflowError:
+ raise oefmt(space.w_OverflowError,
+- "timestamp too large to convert to C _PyTime_t")
+- return r_longlong(result)
++ "timestamp %R too large to convert to C _PyTime_t", w_secs)
++ return result
diff --git a/013-fix-typeerror.patch b/013-fix-typeerror.patch
new file mode 100644
index 0000000..86b0650
--- /dev/null
+++ b/013-fix-typeerror.patch
@@ -0,0 +1,22 @@
+# HG changeset patch
+# User Miro Hrončok <miro(a)hroncok.cz>
+# Date 1514415016 0
+# Branch hroncok/fix-typeerror-str-does-not-support-the-b-1514414905375
+# Node ID 0551d04959425ea4a8ff7e87a5d357d03936cde0
+# Parent a4194a67868fa916074416e96456d07d52b1a1a1
+Fix: TypeError: 'str' does not support the buffer interface
+
+Fixes https://bitbucket.org/pypy/pypy/issues/2718
+
+diff --git a/lib_pypy/pyrepl/unix_console.py b/lib_pypy/pyrepl/unix_console.py
+--- a/lib_pypy/pyrepl/unix_console.py
++++ b/lib_pypy/pyrepl/unix_console.py
+@@ -500,7 +500,7 @@
+ os.write(self.output_fd, fmt[:x])
+ fmt = fmt[y:]
+ delay = int(m.group(1))
+- if '*' in m.group(2):
++ if b'*' in m.group(2):
+ delay *= self.height
+ if self._pad:
+ nchars = (bps*delay)/1000
diff --git a/pypy3.spec b/pypy3.spec
index 6843000..dc8c53d 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,7 +1,7 @@
Name: pypy3
Version: 5.10.0
%global pyversion 3.5
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -158,6 +158,12 @@ Patch7: 007-remove-startup-message.patch
# It seems ppc64 has no faulthandler
Patch11: 011-no-faulthandler.patch
+# https://bitbucket.org/pypy/pypy/issues/2717
+Patch12: 012-time-sleep-i686-overflow.patch
+
+# https://bitbucket.org/pypy/pypy/issues/2718
+Patch13: 013-fix-typeerror.patch
+
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
@@ -711,12 +717,6 @@ CheckPyPy() {
# test_multiprocessing, so skip it for now:
SkipTest test_multiprocessing
- # the timeout tests are hanging on i686
- # see https://bitbucket.org/pypy/pypy/issues/2717
- %ifarch %{ix86}
- SkipTest test_socket
- %endif
-
echo "== Test names =="
cat testnames.txt
echo "================="
@@ -835,6 +835,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Thu Dec 28 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-2
+- Fixed upstream issues #2717 and #2718 (re-enable test_socket)
+
* Mon Dec 25 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-1
- Update to 5.10 (#1528841)
- Use pypy2 and python2-pycparser (note the twos)
commit 27657069ff6fedfdeedc1770738261f4662213bd
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Dec 27 15:58:25 2017 +0100
Temporarily skip test_socket on ix86
diff --git a/pypy3.spec b/pypy3.spec
index 24d9504..6843000 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -711,6 +711,12 @@ CheckPyPy() {
# test_multiprocessing, so skip it for now:
SkipTest test_multiprocessing
+ # the timeout tests are hanging on i686
+ # see https://bitbucket.org/pypy/pypy/issues/2717
+ %ifarch %{ix86}
+ SkipTest test_socket
+ %endif
+
echo "== Test names =="
cat testnames.txt
echo "================="
@@ -833,6 +839,7 @@ CheckPyPy %{name}-stackless
- Update to 5.10 (#1528841)
- Use pypy2 and python2-pycparser (note the twos)
- Enable JIT on power and s390x
+- Temporarily skip test_socket on ix86
* Fri Oct 20 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.9.0-1
- Update to 5.9 (#1504427)
commit a6780ec4355a7d2691bf8441b76b77186fb1b22d
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Dec 27 15:57:17 2017 +0100
Enable JIT on power and s390x
diff --git a/pypy3.spec b/pypy3.spec
index cb0d323..24d9504 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -93,7 +93,7 @@ ExcludeArch: aarch64
# it on the other archs. The resulting binary will typically be slower than
# CPython for the latter case.
-%ifarch %{ix86} x86_64 %{arm}
+%ifarch %{ix86} x86_64 %{arm} %{power64} s390x
%global with_jit 1
%else
%global with_jit 0
@@ -832,6 +832,7 @@ CheckPyPy %{name}-stackless
* Mon Dec 25 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-1
- Update to 5.10 (#1528841)
- Use pypy2 and python2-pycparser (note the twos)
+- Enable JIT on power and s390x
* Fri Oct 20 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.9.0-1
- Update to 5.9 (#1504427)
commit 2b72df539cd5d8839277452408071a8200689b29
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Dec 26 11:56:15 2017 +0100
Update to 5.10 (#1528841)
diff --git a/.gitignore b/.gitignore
index 602e7b0..40caefb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@
/pypy3.3-v5.5.0-alpha-src.tar.bz2
/pypy3-v5.7.0-src.tar.bz2
/pypy3-v5.9.0-src.tar.bz2
+/pypy3-v5.10.0-src.tar.bz2
diff --git a/pypy3.spec b/pypy3.spec
index 9e9d37a..cb0d323 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,5 +1,5 @@
Name: pypy3
-Version: 5.9.0
+Version: 5.10.0
%global pyversion 3.5
Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
@@ -171,7 +171,7 @@ Patch11: 011-no-faulthandler.patch
%global use_self_when_building 0
%if 0%{use_self_when_building}
# pypy3 can only be build with pypy2
-BuildRequires: pypy
+BuildRequires: pypy2
# no pypy-pycparser available ATM
%global bootstrap_python_interp pypy
%else
@@ -179,7 +179,7 @@ BuildRequires: pypy
# pypy3 can only be build with python2
BuildRequires: python2-devel
-BuildRequires: python-pycparser
+BuildRequires: python2-pycparser
%global bootstrap_python_interp python
%endif
@@ -829,6 +829,10 @@ CheckPyPy %{name}-stackless
%changelog
+* Mon Dec 25 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-1
+- Update to 5.10 (#1528841)
+- Use pypy2 and python2-pycparser (note the twos)
+
* Fri Oct 20 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.9.0-1
- Update to 5.9 (#1504427)
- Remove merged patches
diff --git a/sources b/sources
index 728ee37..d9f03a4 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3-v5.9.0-src.tar.bz2) = 3d5384d644fdd1bc8b95f5747dbd1771ae06eb2cfc7b57be359b8bf40177676afd097620d0cb9d9000c40d8cce075cfa6bfd92de987d3dd927c04d7d595dc5bd
+SHA512 (pypy3-v5.10.0-src.tar.bz2) = 69a373c18dbad9dd617f994ad885c8d8975f0c484ba9dd547e6e892c9a3030a43e9e3ee668aee5f4969403883de1311cef97a0a5e5701921172ee6c2119b771b
commit 6eb88b178404d837b4ff02920550faaacb5cd92e
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Oct 20 20:31:31 2017 +0200
Update to 5.9 (#1504427)
diff --git a/.gitignore b/.gitignore
index 3fcf7b6..602e7b0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
/pypy3-2.4.0-src.tar.bz2
/pypy3.3-v5.2.0-alpha1-src.tar.bz2
/pypy3.3-v5.5.0-alpha-src.tar.bz2
+/pypy3-v5.7.0-src.tar.bz2
+/pypy3-v5.9.0-src.tar.bz2
diff --git a/009-raise-an-error-when-STARTTLS-fails.patch b/009-raise-an-error-when-STARTTLS-fails.patch
deleted file mode 100644
index 58ceb01..0000000
--- a/009-raise-an-error-when-STARTTLS-fails.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 4c0f6a6fe6c71009ab4a6b3716e70af021e04904 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro(a)hroncok.cz>
-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
-rhbz#1303647: https://bugzilla.redhat.com/show_bug.cgi?id=1303647
-rhbz#1351680: https://bugzilla.redhat.com/show_bug.cgi?id=1351680
-
-Based on an upstream change by Benjamin Peterson <benjamin(a)python.org>
-- in changeset 101887:d590114c2394 3.4
-- https://hg.python.org/cpython/rev/d590114c2394
----
- lib-python/3/smtplib.py | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/lib-python/3/smtplib.py b/lib-python/3/smtplib.py
-index 57f181b..5656cc6 100755
---- a/lib-python/3/smtplib.py
-+++ b/lib-python/3/smtplib.py
-@@ -680,6 +680,11 @@ class SMTP:
- self.ehlo_resp = None
- self.esmtp_features = {}
- self.does_esmtp = 0
-+ else:
-+ # RFC 3207:
-+ # 501 Syntax error (no parameters allowed)
-+ # 454 TLS not available due to temporary reason
-+ raise SMTPResponseException(resp, reply)
- return (resp, reply)
-
- def sendmail(self, from_addr, to_addrs, msg, mail_options=[],
---
-2.9.0
-
diff --git a/010-disabled-HTTP-header-injections-in-http.client.patch b/010-disabled-HTTP-header-injections-in-http.client.patch
deleted file mode 100644
index bed386c..0000000
--- a/010-disabled-HTTP-header-injections-in-http.client.patch
+++ /dev/null
@@ -1,163 +0,0 @@
-From 9a8db191cf8a3557a24e91081bf434d581b98c5a Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro(a)hroncok.cz>
-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
-rhbz#1303699: https://bugzilla.redhat.com/show_bug.cgi?id=1303699
-rhbz#1351687: https://bugzilla.redhat.com/show_bug.cgi?id=1351687
-
-Based on an upstream change by Demian Brecht and Serhiy Storchaka
-- in changeset 94952:bf3e1c9b80e9 3.4
-- https://hg.python.org/cpython/rev/bf3e1c9b80e9
----
- lib-python/3/http/client.py | 37 +++++++++++++++++++++++++
- lib-python/3/test/test_httplib.py | 57 +++++++++++++++++++++++++++++++++++++++
- 2 files changed, 94 insertions(+)
-
-diff --git a/lib-python/3/http/client.py b/lib-python/3/http/client.py
-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
- import email.message
- import io
- import os
-+import re
- import socket
- import collections
- from urllib.parse import urlsplit
-@@ -217,6 +218,34 @@ _MAXLINE = 65536
- _MAXHEADERS = 100
-
-
-+# Header name/value ABNF (http://tools.ietf.org/html/rfc7230#section-3.2)
-+#
-+# VCHAR = %x21-7E
-+# obs-text = %x80-FF
-+# header-field = field-name ":" OWS field-value OWS
-+# field-name = token
-+# field-value = *( field-content / obs-fold )
-+# field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
-+# field-vchar = VCHAR / obs-text
-+#
-+# obs-fold = CRLF 1*( SP / HTAB )
-+# ; obsolete line folding
-+# ; see Section 3.2.4
-+
-+# token = 1*tchar
-+#
-+# tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*"
-+# / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~"
-+# / DIGIT / ALPHA
-+# ; any VCHAR, except delimiters
-+#
-+# VCHAR defined in http://tools.ietf.org/html/rfc5234#appendix-B.1
-+
-+# the patterns for both name and value are more leniant than RFC
-+# definitions to allow for backwards compatibility
-+_is_legal_header_name = re.compile(b'^[^:\s][^:\r\n]*$').match
-+_is_illegal_header_value = re.compile(b'\n(?![ \t])|\r(?![ \t\n])').search
-+
- class HTTPMessage(email.message.Message):
- # XXX The only usage of this method is in
- # http.server.CGIHTTPRequestHandler. Maybe move the code there so
-@@ -1035,12 +1064,20 @@ class HTTPConnection:
-
- if hasattr(header, 'encode'):
- header = header.encode('ascii')
-+
-+ if not _is_legal_header_name(header):
-+ raise ValueError('Invalid header name %r' % (header,))
-+
- values = list(values)
- for i, one_value in enumerate(values):
- if hasattr(one_value, 'encode'):
- values[i] = one_value.encode('latin-1')
- elif isinstance(one_value, int):
- values[i] = str(one_value).encode('ascii')
-+
-+ if _is_illegal_header_value(values[i]):
-+ raise ValueError('Invalid header value %r' % (values[i],))
-+
- value = b'\r\n\t'.join(values)
- 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 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.assertIn(b'Content-length: 42', conn._buffer)
-
-+ conn.putheader('Foo', ' bar ')
-+ self.assertIn(b'Foo: bar ', conn._buffer)
-+ conn.putheader('Bar', '\tbaz\t')
-+ self.assertIn(b'Bar: \tbaz\t', conn._buffer)
-+ conn.putheader('Authorization', 'Bearer mytoken')
-+ self.assertIn(b'Authorization: Bearer mytoken', conn._buffer)
-+ conn.putheader('IterHeader', 'IterA', 'IterB')
-+ self.assertIn(b'IterHeader: IterA\r\n\tIterB', conn._buffer)
-+ conn.putheader('LatinHeader', b'\xFF')
-+ self.assertIn(b'LatinHeader: \xFF', conn._buffer)
-+ conn.putheader('Utf8Header', b'\xc3\x80')
-+ self.assertIn(b'Utf8Header: \xc3\x80', conn._buffer)
-+ conn.putheader('C1-Control', b'next\x85line')
-+ self.assertIn(b'C1-Control: next\x85line', conn._buffer)
-+ conn.putheader('Embedded-Fold-Space', 'is\r\n allowed')
-+ self.assertIn(b'Embedded-Fold-Space: is\r\n allowed', conn._buffer)
-+ conn.putheader('Embedded-Fold-Tab', 'is\r\n\tallowed')
-+ self.assertIn(b'Embedded-Fold-Tab: is\r\n\tallowed', conn._buffer)
-+ conn.putheader('Key Space', 'value')
-+ self.assertIn(b'Key Space: value', conn._buffer)
-+ conn.putheader('KeySpace ', 'value')
-+ self.assertIn(b'KeySpace : value', conn._buffer)
-+ conn.putheader(b'Nonbreak\xa0Space', 'value')
-+ self.assertIn(b'Nonbreak\xa0Space: value', conn._buffer)
-+ conn.putheader(b'\xa0NonbreakSpace', 'value')
-+ self.assertIn(b'\xa0NonbreakSpace: value', conn._buffer)
-+
- def test_ipv6host_header(self):
- # Default host header on IPv6 transaction should wrapped by [] if
- # its actual IPv6 address
-@@ -153,6 +180,36 @@ class HeaderTests(TestCase):
- conn.request('GET', '/foo')
- self.assertTrue(sock.data.startswith(expected))
-
-+ def test_invalid_headers(self):
-+ conn = client.HTTPConnection('example.com')
-+ conn.sock = FakeSocket('')
-+ conn.putrequest('GET', '/')
-+
-+ # http://tools.ietf.org/html/rfc7230#section-3.2.4, whitespace is no
-+ # longer allowed in header names
-+ cases = (
-+ (b'Invalid\r\nName', b'ValidValue'),
-+ (b'Invalid\rName', b'ValidValue'),
-+ (b'Invalid\nName', b'ValidValue'),
-+ (b'\r\nInvalidName', b'ValidValue'),
-+ (b'\rInvalidName', b'ValidValue'),
-+ (b'\nInvalidName', b'ValidValue'),
-+ (b' InvalidName', b'ValidValue'),
-+ (b'\tInvalidName', b'ValidValue'),
-+ (b'Invalid:Name', b'ValidValue'),
-+ (b':InvalidName', b'ValidValue'),
-+ (b'ValidName', b'Invalid\r\nValue'),
-+ (b'ValidName', b'Invalid\rValue'),
-+ (b'ValidName', b'Invalid\nValue'),
-+ (b'ValidName', b'InvalidValue\r\n'),
-+ (b'ValidName', b'InvalidValue\r'),
-+ (b'ValidName', b'InvalidValue\n'),
-+ )
-+ for name, value in cases:
-+ with self.subTest((name, value)):
-+ with self.assertRaisesRegex(ValueError, 'Invalid header'):
-+ conn.putheader(name, value)
-+
-
- class BasicTest(TestCase):
- def test_status_lines(self):
---
-2.9.0
-
diff --git a/011-no-faulthandler.patch b/011-no-faulthandler.patch
index f0154eb..f96d232 100644
--- a/011-no-faulthandler.patch
+++ b/011-no-faulthandler.patch
@@ -1,30 +1,37 @@
-diff --git pypy3-v5.5.0-src/lib-python/3/test/regrtest.py pypy3-v5.5.0-src/lib-python/3/test/regrtest.py-new
-index 8d18a9297a..e99322ebe1 100755
---- pypy3-v5.5.0-src/lib-python/3/test/regrtest.py
-+++ pypy3-v5.5.0-src/lib-python/3/test/regrtest.py-new
-@@ -169,7 +169,6 @@ option '-uall,-gui'.
- import importlib
+commit ea4d6a12548eea7ce0424feea13a499fb7085e96
+Author: rpm-build <rpm-build>
+Date: Wed Mar 29 04:31:55 2017 +0200
+
+ 011-no-faulthandler.patch
+
+diff --git a/lib-python/3/test/regrtest.py b/lib-python/3/test/regrtest.py
+index c1d85f6..3d3072c 100755
+--- a/lib-python/3/test/regrtest.py
++++ b/lib-python/3/test/regrtest.py
+@@ -124,7 +124,6 @@ import importlib
+ import argparse
import builtins
-import faulthandler
- import getopt
import io
import json
-@@ -197,6 +196,10 @@ try:
- import multiprocessing.process
+ import locale
+@@ -152,7 +151,10 @@ try:
+ import _multiprocessing, multiprocessing.process
except ImportError:
multiprocessing = None
+-
+try:
+ import faulthandler
+except ImportError:
+ faulthandler = None
-
# Some times __path__ and __file__ are not absolute (e.g. while running from
-@@ -283,17 +286,18 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
+ # Lib/) and, if we change the CWD to run the tests in a temporary dir, some
+@@ -486,17 +488,18 @@ def main(tests=None, **kwargs):
+ directly to set the values that would normally be set by flags
on the command line.
"""
-
- # Display the Python traceback on fatal errors (e.g. segfault)
- faulthandler.enable(all_threads=True)
-
@@ -51,3 +58,37 @@ index 8d18a9297a..e99322ebe1 100755
replace_stdout()
+diff --git a/lib-python/3/test/support/__init__.py b/lib-python/3/test/support/__init__.py
+index 5d7f308..4424637 100644
+--- a/lib-python/3/test/support/__init__.py
++++ b/lib-python/3/test/support/__init__.py
+@@ -6,7 +6,6 @@ if __name__ != 'test.support':
+ import collections.abc
+ import contextlib
+ import errno
+-import faulthandler
+ import fnmatch
+ import functools
+ import gc
+@@ -65,6 +64,11 @@ try:
+ except ImportError:
+ resource = None
+
++try:
++ import faulthandler
++except ImportError:
++ faulthandler = None
++
+ __all__ = [
+ # globals
+ "PIPE_MAX_SIZE", "verbose", "max_memuse", "use_resources", "failfast",
+@@ -2060,7 +2064,8 @@ def start_threads(threads, unlock=None):
+ finally:
+ started = [t for t in started if t.isAlive()]
+ if started:
+- faulthandler.dump_traceback(sys.stdout)
++ if faulthandler is not None:
++ faulthandler.dump_traceback(sys.stdout)
+ raise AssertionError('Unable to join %d threads' % len(started))
+
+ @contextlib.contextmanager
diff --git a/pypy3.spec b/pypy3.spec
index f878bb2..9e9d37a 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,7 @@
Name: pypy3
-Version: 5.5.0
-Release: 6%{?dist}
+Version: 5.9.0
+%global pyversion 3.5
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -131,7 +132,7 @@ ExcludeArch: aarch64
%(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/pypy3.3-v%{version}-alpha-src.t...
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy3-v%{version}-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -141,36 +142,21 @@ Source2: macros.pypy3
# set to indicate progress.
# This obscures useful messages, and may waste CPU cycles, so suppress it, and
# merely render dots:
-Patch0: 001-nevertty.patch
+Patch1: 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
# and linker are captured:
-Patch1: 006-always-log-stdout.patch
+Patch6: 006-always-log-stdout.patch
# Disable the printing of a quote from IRC on startup (these are stored in
# ROT13 form in lib_pypy/_pypy_irc_topic.py). Some are cute, but some could
# cause confusion for end-users (and many are in-jokes within the PyPy
# community that won't make sense outside of it). [Sorry to be a killjoy]
-Patch2: 007-remove-startup-message.patch
-
-
-# CVE-2016-0772 python: smtplib StartTLS stripping attack
-# rhbz#1303647: https://bugzilla.redhat.com/show_bug.cgi?id=1303647
-# rhbz#1351680: https://bugzilla.redhat.com/show_bug.cgi?id=1351680
-# FIXED UPSTREAM: https://hg.python.org/cpython/rev/d590114c2394
-# Raise an error when STARTTLS fails
-Patch4: 009-raise-an-error-when-STARTTLS-fails.patch
-
-# CVE-2016-5699 python: http protocol steam injection attack
-# rhbz#1303699: https://bugzilla.redhat.com/show_bug.cgi?id=1303699
-# rhbz#1351687: https://bugzilla.redhat.com/show_bug.cgi?id=1351687
-# FIXED UPSTREAM: https://hg.python.org/cpython/rev/bf3e1c9b80e9
-# Disabled HTTP header injections in http.client
-Patch5: 010-disabled-HTTP-header-injections-in-http.client.patch
+Patch7: 007-remove-startup-message.patch
# It seems ppc64 has no faulthandler
-Patch6: 011-no-faulthandler.patch
+Patch11: 011-no-faulthandler.patch
# Build-time requirements:
@@ -186,12 +172,14 @@ Patch6: 011-no-faulthandler.patch
%if 0%{use_self_when_building}
# pypy3 can only be build with pypy2
BuildRequires: pypy
+# no pypy-pycparser available ATM
%global bootstrap_python_interp pypy
%else
# pypy3 can only be build with python2
BuildRequires: python2-devel
+BuildRequires: python-pycparser
%global bootstrap_python_interp python
%endif
@@ -523,8 +511,9 @@ find \
mkdir -p %{buildroot}/%{pypyprefix}/site-packages
-ln -s %{pypyprefix}/bin/pypy3.3 %{buildroot}/%{_bindir}/pypy3.3
-ln -s pypy3.3 %{buildroot}/%{_bindir}/pypy3
+ln -s ./pypy3 %{buildroot}%{pypyprefix}/bin/pypy%{pyversion}
+ln -s %{pypyprefix}/bin/pypy%{pyversion} %{buildroot}%{_bindir}/pypy%{pyversion}
+ln -s pypy%{pyversion} %{buildroot}%{_bindir}/pypy3
# 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
@@ -790,10 +779,10 @@ CheckPyPy() {
#pypy/goal/pypy pypy/test_all.py --resultlog=pypyjit_new.log
%if %{run_selftests}
-CheckPyPy pypy-c
+CheckPyPy %{name}-c
%if 0%{with_stackless}
-CheckPyPy pypy3-stackless
+CheckPyPy %{name}-stackless
%endif
%endif # run_selftests
@@ -821,7 +810,7 @@ CheckPyPy pypy3-stackless
%license LICENSE
%doc README.rst
%{_bindir}/pypy3
-%{_bindir}/pypy3.3
+%{_bindir}/pypy%{pyversion}
%{pypyprefix}/bin/
%exclude %{_libdir}/%{name}-%{version}.tar.bz2
@@ -840,6 +829,13 @@ CheckPyPy pypy3-stackless
%changelog
+* Fri Oct 20 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.9.0-1
+- Update to 5.9 (#1504427)
+- Remove merged patches
+- Reindex the patches to match the filenames
+- Rebase the faulthandler Patch11
+- BR python-pycparser
+
* Thu Aug 03 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.5.0-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
diff --git a/sources b/sources
index 5155d51..728ee37 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-536008fd7b17af8878915393fc1ecfc3 pypy3.3-v5.5.0-alpha-src.tar.bz2
+SHA512 (pypy3-v5.9.0-src.tar.bz2) = 3d5384d644fdd1bc8b95f5747dbd1771ae06eb2cfc7b57be359b8bf40177676afd097620d0cb9d9000c40d8cce075cfa6bfd92de987d3dd927c04d7d595dc5bd
commit 79816c5293727d3eb45debfb1ba42e5bc8b3db29
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Thu Aug 3 06:35:52 2017 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
diff --git a/pypy3.spec b/pypy3.spec
index 6997965..f878bb2 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 5.5.0
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -840,6 +840,9 @@ CheckPyPy pypy3-stackless
%changelog
+* Thu Aug 03 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.5.0-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
+
* Thu Jul 27 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.5.0-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
commit aebba1447fc82a76bc6e7102083198e340d076bd
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Thu Jul 27 09:23:17 2017 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
diff --git a/pypy3.spec b/pypy3.spec
index 73f75d3..6997965 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 5.5.0
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -840,6 +840,9 @@ CheckPyPy pypy3-stackless
%changelog
+* Thu Jul 27 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.5.0-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
* Sat Feb 11 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.5.0-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
commit 717803cfa0815090a04163482c395a46dced8f02
Author: Petr Písař <ppisar(a)redhat.com>
Date: Wed Jul 12 14:43:49 2017 +0200
perl dependency renamed to perl-interpreter <https://fedoraproject.org/wiki/Changes/perl_Package_to_Install_Core_Modules>
diff --git a/pypy3.spec b/pypy3.spec
index c74d495..73f75d3 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -227,7 +227,7 @@ BuildRequires: time
BuildRequires: /usr/bin/free
# For use in the selftests, for imposing a per-test timeout:
-BuildRequires: perl
+BuildRequires: perl-interpreter
%endif
# No prelink on these arches
commit 51ae82f0cce74a6fb047e40d45173c75bffc41f9
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Sat Feb 11 08:09:09 2017 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
diff --git a/pypy3.spec b/pypy3.spec
index 5598133..c74d495 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 5.5.0
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -840,6 +840,9 @@ CheckPyPy pypy3-stackless
%changelog
+* Sat Feb 11 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.5.0-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
* Sun Nov 13 2016 Dan Horák <dan[at]danny.cz> - 5.5.0-3
- set z10 as the base CPU for s390(x) build
commit b929faae35b08942da1a1d1d994b26e3400f48c3
Author: Dan Horák <dan(a)danny.cz>
Date: Sun Nov 13 09:22:11 2016 +0100
- set z10 as the base CPU for s390(x) build
diff --git a/pypy3.spec b/pypy3.spec
index 903acb9..5598133 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 5.5.0
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -316,6 +316,11 @@ find lib-python/%{pylibver} -name "*.py" -exec \
%endif
%build
+%ifarch s390 s390x
+# pypy3 requires z10 at least
+%global optflags %(echo %{optflags} | sed 's/-march=z9-109 /-march=z10 /')
+%endif
+
# Top memory usage is about 4.5GB on arm7hf
free
@@ -835,6 +840,9 @@ CheckPyPy pypy3-stackless
%changelog
+* Sun Nov 13 2016 Dan Horák <dan[at]danny.cz> - 5.5.0-3
+- set z10 as the base CPU for s390(x) build
+
* Sat Nov 12 2016 Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl> - 5.5.0-2
- Also build on arm and s390*
commit 404c37f2ddb3343127726d561cd86b1a6488cd7f
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Sat Nov 12 09:29:11 2016 -0500
Restore renaming of pypytrace-mode to pypy3trace-mode
diff --git a/pypy3.spec b/pypy3.spec
index 837273b..903acb9 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -650,8 +650,9 @@ find \
# Install the JIT trace mode for Emacs:
%if %{with_emacs}
-install -m0644 -p -D -t %{buildroot}/%{_emacs_sitelispdir} \
- rpython/jit/tool/pypytrace-mode.{el,elc}
+mkdir -p %{buildroot}/%{_emacs_sitelispdir}
+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:
commit 91071982692c6dd8da9894e3180cd7bb5b4d290e
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Sat Nov 12 08:10:01 2016 -0500
It turns out ppc has no gold
So use gold on arm/i686/amd64 only.
diff --git a/pypy3.spec b/pypy3.spec
index 16d5f46..837273b 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -311,7 +311,9 @@ find lib-python/%{pylibver} -name "*.py" -exec \
"{}" \
\;
-sed -i -r 's/\$\(LDFLAGSEXTRA\)/& -fuse-ld=gold/' ./rpython/translator/platform/posix.py
+%ifarch %{ix86} x86_64 %{arm}
+ sed -i -r 's/\$\(LDFLAGSEXTRA\)/& -fuse-ld=gold/' ./rpython/translator/platform/posix.py
+%endif
%build
# Top memory usage is about 4.5GB on arm7hf
commit ad0d37c683891eaf084a84e4a9f2205ce3c5585b
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Sat Nov 12 06:51:54 2016 -0500
Also build on arm and s390*
diff --git a/pypy3.spec b/pypy3.spec
index b6e6d0b..16d5f46 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 5.5.0
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -11,7 +11,7 @@ License: MIT and Python and UCD
URL: http://pypy.org/
# Not available yet
-ExcludeArch: aarch64 armv7hl s390 s390x
+ExcludeArch: aarch64
# High-level configuration of the build:
@@ -311,7 +311,10 @@ find lib-python/%{pylibver} -name "*.py" -exec \
"{}" \
\;
+sed -i -r 's/\$\(LDFLAGSEXTRA\)/& -fuse-ld=gold/' ./rpython/translator/platform/posix.py
+
%build
+# Top memory usage is about 4.5GB on arm7hf
free
BuildPyPy() {
@@ -829,6 +832,9 @@ CheckPyPy pypy3-stackless
%changelog
+* Sat Nov 12 2016 Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl> - 5.5.0-2
+- Also build on arm and s390*
+
* Sat Oct 15 2016 Miro Hrončok <mhroncok(a)redhat.com> - 5.5.0-1
- PyPy 3.3 5.5.0
- On Fedora 26+, BR compat-openssl10-devel
commit 37fe95796cc55f2af8290bf78c32226b2ac09fc3
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Sat Nov 12 06:51:35 2016 -0500
Make the spec file a tiny bit shorter
diff --git a/pypy3.spec b/pypy3.spec
index 0245be9..b6e6d0b 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -260,7 +260,6 @@ CPU architecture.
%package libs
-Group: Development/Languages
Summary: Run-time libraries used by PyPy implementations of Python 3
# We supply an emacs mode for the JIT viewer.
@@ -274,7 +273,6 @@ Libraries required by the various PyPy implementations of Python 3.
%package devel
-Group: Development/Languages
Summary: Development tools for working with PyPy3
Requires: pypy3%{?_isa} = %{version}-%{release}
@@ -284,7 +282,6 @@ Header files for building C extension modules against PyPy3
%if 0%{with_stackless}
%package stackless
-Group: Development/Languages
Summary: Stackless Python interpreter built using PyPy3
Requires: pypy3-libs%{?_isa} = %{version}-%{release}
%description stackless
@@ -516,8 +513,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
+ln -s pypy3.3 %{buildroot}/%{_bindir}/pypy3
# 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
@@ -648,19 +645,17 @@ 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}/pypy3trace-mode.el
-cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/pypy3trace-mode.elc
+install -m0644 -p -D -t %{buildroot}/%{_emacs_sitelispdir} \
+ rpython/jit/tool/pypytrace-mode.{el,elc}
%endif
# Install macros for rpm:
-mkdir -p %{buildroot}/%{_rpmconfigdir}/macros.d
-install -m 644 %{SOURCE2} %{buildroot}/%{_rpmconfigdir}/macros.d
+install -m0644 -p -D -t %{buildroot}/%{_rpmconfigdir}/macros.d %{SOURCE2}
# 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
+rm -f %{buildroot}%{_libdir}/pypy3-5.2.0.tar.bz2 \
+ %{buildroot}%{pypyprefix}/LICENSE \
+ %{buildroot}%{pypyprefix}/README.rst
# wtf? This is probably masking some bigger problem, but let's do this for now
mv -v lib-python/3/test/regrtest.py-new lib-python/3/test/regrtest.py || :
commit 6b002d36f3cb6a967ccf98fb1e66330fdd7dda09
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Tue Nov 8 15:32:20 2016 -0500
Also exclude armv7hl
Build generates a lot of warnings and errors, and fails despite having
4GB RAM + 4GB swap available. The error is
/usr/bin/ld: failed to set dynamic section sizes: Memory exhausted
collect2: error: ld returned 1 exit status
but this might be caused by the earlier errors.
diff --git a/pypy3.spec b/pypy3.spec
index d6bb1dd..0245be9 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -3,7 +3,6 @@ Version: 5.5.0
Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
-Group: Development/Languages
# LGPL and another free license we'd need to ask spot about are present in some
# java jars that we're not building with atm (in fact, we're deleting them
# before building). If we restore those we'll have to work out the new
@@ -12,7 +11,7 @@ License: MIT and Python and UCD
URL: http://pypy.org/
# Not available yet
-ExcludeArch: aarch64 s390 s390x
+ExcludeArch: aarch64 armv7hl s390 s390x
# High-level configuration of the build:
commit 0b4deeff51596dd2f8ec1b9ced18caa60f6ddaa0
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Tue Nov 8 07:57:41 2016 -0500
Add BR for free
diff --git a/pypy3.spec b/pypy3.spec
index 3c5f5c5..d6bb1dd 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -225,6 +225,7 @@ BuildRequires: gc-devel
# For use in the selftests, for recording stats:
BuildRequires: time
+BuildRequires: /usr/bin/free
# For use in the selftests, for imposing a per-test timeout:
BuildRequires: perl
commit 56984a45242e2ed09394b206e3cda14aef15fafa
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Tue Nov 8 07:50:10 2016 -0500
Print the amount of available memory
diff --git a/pypy3.spec b/pypy3.spec
index 934a434..3c5f5c5 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -315,6 +315,7 @@ find lib-python/%{pylibver} -name "*.py" -exec \
\;
%build
+free
BuildPyPy() {
ExeName=$1
commit 693a83b0c291b9c876f08bdc5e81c6718bf71929
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Mon Nov 7 23:43:54 2016 -0500
Add a hack to fix tests, and restore building on ppc*
I didn't test ppc64le yet, but at least ppc64 builds fine with the kludge.
diff --git a/pypy3.spec b/pypy3.spec
index 0c266d0..934a434 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -12,7 +12,7 @@ License: MIT and Python and UCD
URL: http://pypy.org/
# Not available yet
-ExcludeArch: aarch64 s390 s390x ppc64le ppc64
+ExcludeArch: aarch64 s390 s390x
# High-level configuration of the build:
@@ -661,6 +661,9 @@ rm -f %{buildroot}%{_libdir}//pypy3-5.2.0.tar.bz2
rm -f %{buildroot}%{pypyprefix}/LICENSE
rm -f %{buildroot}%{pypyprefix}/README.rst
+# wtf? This is probably masking some bigger problem, but let's do this for now
+mv -v lib-python/3/test/regrtest.py-new lib-python/3/test/regrtest.py || :
+
%check
topdir=$(pwd)
commit 817c77d554b6dd380fd335a29c43dce88ba052a5
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Thu Nov 3 18:42:18 2016 -0400
Also exclude ppc64*
The tests are failing (looks like pypy wasn't tested on ppc64 at all),
and I cannot solve this without access to the hardware.
diff --git a/pypy3.spec b/pypy3.spec
index d826142..0c266d0 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -12,7 +12,7 @@ License: MIT and Python and UCD
URL: http://pypy.org/
# Not available yet
-ExcludeArch: aarch64 s390 s390x
+ExcludeArch: aarch64 s390 s390x ppc64le ppc64
# High-level configuration of the build:
commit aa6a9d04d6a20b99222a9e8db25a1e669ccc7eb4
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Thu Nov 3 14:49:28 2016 -0400
PPC64 has no faulthandler
diff --git a/011-no-faulthandler.patch b/011-no-faulthandler.patch
new file mode 100644
index 0000000..f0154eb
--- /dev/null
+++ b/011-no-faulthandler.patch
@@ -0,0 +1,53 @@
+diff --git pypy3-v5.5.0-src/lib-python/3/test/regrtest.py pypy3-v5.5.0-src/lib-python/3/test/regrtest.py-new
+index 8d18a9297a..e99322ebe1 100755
+--- pypy3-v5.5.0-src/lib-python/3/test/regrtest.py
++++ pypy3-v5.5.0-src/lib-python/3/test/regrtest.py-new
+@@ -169,7 +169,6 @@ option '-uall,-gui'.
+ import importlib
+
+ import builtins
+-import faulthandler
+ import getopt
+ import io
+ import json
+@@ -197,6 +196,10 @@ try:
+ import multiprocessing.process
+ except ImportError:
+ multiprocessing = None
++try:
++ import faulthandler
++except ImportError:
++ faulthandler = None
+
+
+ # Some times __path__ and __file__ are not absolute (e.g. while running from
+@@ -283,17 +286,18 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
+ on the command line.
+ """
+
+- # Display the Python traceback on fatal errors (e.g. segfault)
+- faulthandler.enable(all_threads=True)
+-
+- # Display the Python traceback on SIGALRM or SIGUSR1 signal
+- signals = []
+- if hasattr(signal, 'SIGALRM'):
+- signals.append(signal.SIGALRM)
+- if hasattr(signal, 'SIGUSR1'):
+- signals.append(signal.SIGUSR1)
+- for signum in signals:
+- faulthandler.register(signum, chain=True)
++ if faulthandler:
++ # Display the Python traceback on fatal errors (e.g. segfault)
++ faulthandler.enable(all_threads=True)
++
++ # Display the Python traceback on SIGALRM or SIGUSR1 signal
++ signals = []
++ if hasattr(signal, 'SIGALRM'):
++ signals.append(signal.SIGALRM)
++ if hasattr(signal, 'SIGUSR1'):
++ signals.append(signal.SIGUSR1)
++ for signum in signals:
++ faulthandler.register(signum, chain=True)
+
+ replace_stdout()
+
diff --git a/pypy3.spec b/pypy3.spec
index ea45edf..d826142 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -170,6 +170,9 @@ Patch4: 009-raise-an-error-when-STARTTLS-fails.patch
# Disabled HTTP header injections in http.client
Patch5: 010-disabled-HTTP-header-injections-in-http.client.patch
+# It seems ppc64 has no faulthandler
+Patch6: 011-no-faulthandler.patch
+
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
commit 347fb465b0fc7717f6e6b171b895c0c01f6d77a3
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sat Oct 22 14:52:20 2016 +0200
Exclude not available arches
diff --git a/pypy3.spec b/pypy3.spec
index 8652182..ea45edf 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -11,6 +11,9 @@ Group: Development/Languages
License: MIT and Python and UCD
URL: http://pypy.org/
+# Not available yet
+ExcludeArch: aarch64 s390 s390x
+
# High-level configuration of the build:
# PyPy consists of an implementation of an interpreter (with JIT compilation)
commit c12d8bfa0bbfd60c56c641dbe8d522681f3d35cf
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sat Oct 22 14:17:55 2016 +0200
Sources for 347975d
diff --git a/.gitignore b/.gitignore
index 60f26ec..3fcf7b6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
/pypy3-2.4.0-src.tar.bz2
/pypy3.3-v5.2.0-alpha1-src.tar.bz2
+/pypy3.3-v5.5.0-alpha-src.tar.bz2
diff --git a/sources b/sources
index 0e4fa7b..5155d51 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-e4bbd6fe42481a17f705611d76914eda pypy3.3-v5.2.0-alpha1-src.tar.bz2
+536008fd7b17af8878915393fc1ecfc3 pypy3.3-v5.5.0-alpha-src.tar.bz2
commit 347975dbf4523b2a8636ff70c59a5b537b9b4375
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sat Oct 22 14:11:41 2016 +0200
PyPy 3.3 5.5.0
diff --git a/pypy3.spec b/pypy3.spec
index 67819c7..8652182 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
-Version: 5.2.0
-Release: 0.1.alpha1%{?dist}
+Version: 5.5.0
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -129,7 +129,7 @@ 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/pypy3.3-v5.2.0-alpha1-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy3.3-v%{version}-alpha-src.t...
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -201,13 +201,18 @@ BuildRequires: zlib-devel
BuildRequires: bzip2-devel
BuildRequires: ncurses-devel
BuildRequires: expat-devel
-BuildRequires: openssl-devel
BuildRequires: gdbm-devel
BuildRequires: xz-devel
%ifnarch s390
BuildRequires: valgrind-devel
%endif
+%if 0%{?fedora} >= 26
+BuildRequires: compat-openssl10-devel
+%else
+BuildRequires: openssl-devel
+%endif
+
%if %{run_selftests}
# Used by the selftests, though not by the build:
BuildRequires: gc-devel
@@ -281,7 +286,7 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%endif
%prep
-%autosetup -n pypy3.3-v5.2.0-alpha1-src -p1 -S git
+%autosetup -n pypy3-v%{version}-src -p1 -S git
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
@@ -803,6 +808,8 @@ CheckPyPy pypy3-stackless
%{_bindir}/pypy3.3
%{pypyprefix}/bin/
+%exclude %{_libdir}/%{name}-%{version}.tar.bz2
+
%files devel
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
@@ -817,6 +824,10 @@ CheckPyPy pypy3-stackless
%changelog
+* Sat Oct 15 2016 Miro Hrončok <mhroncok(a)redhat.com> - 5.5.0-1
+- PyPy 3.3 5.5.0
+- On Fedora 26+, BR compat-openssl10-devel
+
* Sat Jul 02 2016 Miro Hrončok <mhroncok(a)redhat.com> - 5.2.0-0.1.alpha1
- First alpha build of PyPy 3.3
commit 343676a8999d3e5b141b58ec6c9d8e167304ed9f
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Jul 8 14:38:18 2016 +0200
First alpha build of PyPy 3.3
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?= <miro(a)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(a)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
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?= <miro(a)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)
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/560a75090333b6de8a1de960acac5e...
-%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,35 +481,10 @@ InstallPyPy() {
mkdir -p %{buildroot}/%{_bindir}
mkdir -p %{buildroot}/%{pypyprefix}
-InstallPyPy %{name}
-
-%if 0%{with_stackless}
-InstallPyPy %{name}-stackless
-%endif
-
-# Install the various support libraries as described at:
-# http://codespeak.net/pypy/dist/pypy/doc/getting-started-python.html#insta...
-# 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 '.'
+# 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}
-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:
@@ -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(a)redhat.com> - 2.4.0-6
+* Sat Jul 02 2016 Miro Hrončok <mhroncok(a)redhat.com> - 5.2.0-0.1.alpha1
+- First alpha build of PyPy 3.3
+
+* Fri Jul 01 2016 Miro Hrončok <mhroncok(a)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(a)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(a)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(a)in.waw.pl> - 2.4.0-3
-- Bump release to rebuild with new execstack
-
* Thu Jun 18 2015 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 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
commit 092bdc18b3bd62174ce8db6323a5a1f59d080fd9
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Jul 1 15:59:13 2016 +0200
Fix for CVE-2016-0772 and CVE-2016-5699
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
- rhbz#1351680: https://bugzilla.redhat.com/show_bug.cgi?id=1351680
- Fixed upstream: https://hg.python.org/cpython/rev/d590114c2394
Fix for: CVE-2016-5699 python: http protocol steam injection attack
- rhbz#1303699: https://bugzilla.redhat.com/show_bug.cgi?id=1303699
- rhbz#1351687: https://bugzilla.redhat.com/show_bug.cgi?id=1351687
- Fixed upstream: https://hg.python.org/cpython/rev/bf3e1c9b80e9
diff --git a/009-raise-an-error-when-STARTTLS-fails.patch b/009-raise-an-error-when-STARTTLS-fails.patch
new file mode 100644
index 0000000..ba1cc53
--- /dev/null
+++ b/009-raise-an-error-when-STARTTLS-fails.patch
@@ -0,0 +1,35 @@
+From 9092f6266c3054befff053aa943632856cedbdba Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro(a)hroncok.cz>
+Date: Fri, 1 Jul 2016 11:42:53 +0200
+Subject: [PATCH] Raise an error when STARTTLS fails
+
+CVE-2016-0772 python: smtplib StartTLS stripping attack
+rhbz#1303647: https://bugzilla.redhat.com/show_bug.cgi?id=1303647
+rhbz#1351680: https://bugzilla.redhat.com/show_bug.cgi?id=1351680
+
+Based on an upstream change by Benjamin Peterson <benjamin(a)python.org>
+- in changeset 101887:d590114c2394 3.4
+- https://hg.python.org/cpython/rev/d590114c2394
+---
+ lib-python/3/smtplib.py | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/lib-python/3/smtplib.py b/lib-python/3/smtplib.py
+index 679e478..1aacfaf 100644
+--- a/lib-python/3/smtplib.py
++++ b/lib-python/3/smtplib.py
+@@ -666,6 +666,11 @@ class SMTP:
+ self.ehlo_resp = None
+ self.esmtp_features = {}
+ self.does_esmtp = 0
++ else:
++ # RFC 3207:
++ # 501 Syntax error (no parameters allowed)
++ # 454 TLS not available due to temporary reason
++ raise SMTPResponseException(resp, reply)
+ return (resp, reply)
+
+ def sendmail(self, from_addr, to_addrs, msg, mail_options=[],
+--
+2.9.0
+
diff --git a/010-disabled-HTTP-header-injections-in-http.client.patch b/010-disabled-HTTP-header-injections-in-http.client.patch
new file mode 100644
index 0000000..10591d5
--- /dev/null
+++ b/010-disabled-HTTP-header-injections-in-http.client.patch
@@ -0,0 +1,163 @@
+From 82dc922c7c4771ef789f5b395f54a603c693b05e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro(a)hroncok.cz>
+Date: Fri, 1 Jul 2016 13:08:55 +0200
+Subject: [PATCH] Disabled HTTP header injections in http.client.
+
+CVE-2016-5699 python: http protocol steam injection attack
+rhbz#1303699: https://bugzilla.redhat.com/show_bug.cgi?id=1303699
+rhbz#1351687: https://bugzilla.redhat.com/show_bug.cgi?id=1351687
+
+Based on an upstream change by Demian Brecht and Serhiy Storchaka
+- in changeset 94952:bf3e1c9b80e9 3.4
+- https://hg.python.org/cpython/rev/bf3e1c9b80e9
+---
+ lib-python/3/http/client.py | 37 +++++++++++++++++++++++++
+ lib-python/3/test/test_httplib.py | 57 +++++++++++++++++++++++++++++++++++++++
+ 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
+--- a/lib-python/3/http/client.py
++++ b/lib-python/3/http/client.py
+@@ -70,6 +70,7 @@ import email.parser
+ import email.message
+ import io
+ import os
++import re
+ import socket
+ import collections
+ from urllib.parse import urlsplit
+@@ -207,6 +208,34 @@ MAXAMOUNT = 1048576
+ # maximal line length when calling readline().
+ _MAXLINE = 65536
+
++# Header name/value ABNF (http://tools.ietf.org/html/rfc7230#section-3.2)
++#
++# VCHAR = %x21-7E
++# obs-text = %x80-FF
++# header-field = field-name ":" OWS field-value OWS
++# field-name = token
++# field-value = *( field-content / obs-fold )
++# field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
++# field-vchar = VCHAR / obs-text
++#
++# obs-fold = CRLF 1*( SP / HTAB )
++# ; obsolete line folding
++# ; see Section 3.2.4
++
++# token = 1*tchar
++#
++# tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*"
++# / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~"
++# / DIGIT / ALPHA
++# ; any VCHAR, except delimiters
++#
++# VCHAR defined in http://tools.ietf.org/html/rfc5234#appendix-B.1
++
++# the patterns for both name and value are more leniant than RFC
++# definitions to allow for backwards compatibility
++_is_legal_header_name = re.compile(b'^[^:\s][^:\r\n]*$').match
++_is_illegal_header_value = re.compile(b'\n(?![ \t])|\r(?![ \t\n])').search
++
+ 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:
+
+ if hasattr(header, 'encode'):
+ header = header.encode('ascii')
++
++ if not _is_legal_header_name(header):
++ raise ValueError('Invalid header name %r' % (header,))
++
+ values = list(values)
+ for i, one_value in enumerate(values):
+ if hasattr(one_value, 'encode'):
+ values[i] = one_value.encode('latin1')
+ elif isinstance(one_value, int):
+ values[i] = str(one_value).encode('ascii')
++
++ if _is_illegal_header_value(values[i]):
++ raise ValueError('Invalid header value %r' % (values[i],))
++
+ value = b'\r\n\t'.join(values)
+ 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
+--- 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)
+
++ conn.putheader('Foo', ' bar ')
++ self.assertIn(b'Foo: bar ', conn._buffer)
++ conn.putheader('Bar', '\tbaz\t')
++ self.assertIn(b'Bar: \tbaz\t', conn._buffer)
++ conn.putheader('Authorization', 'Bearer mytoken')
++ self.assertIn(b'Authorization: Bearer mytoken', conn._buffer)
++ conn.putheader('IterHeader', 'IterA', 'IterB')
++ self.assertIn(b'IterHeader: IterA\r\n\tIterB', conn._buffer)
++ conn.putheader('LatinHeader', b'\xFF')
++ self.assertIn(b'LatinHeader: \xFF', conn._buffer)
++ conn.putheader('Utf8Header', b'\xc3\x80')
++ self.assertIn(b'Utf8Header: \xc3\x80', conn._buffer)
++ conn.putheader('C1-Control', b'next\x85line')
++ self.assertIn(b'C1-Control: next\x85line', conn._buffer)
++ conn.putheader('Embedded-Fold-Space', 'is\r\n allowed')
++ self.assertIn(b'Embedded-Fold-Space: is\r\n allowed', conn._buffer)
++ conn.putheader('Embedded-Fold-Tab', 'is\r\n\tallowed')
++ self.assertIn(b'Embedded-Fold-Tab: is\r\n\tallowed', conn._buffer)
++ conn.putheader('Key Space', 'value')
++ self.assertIn(b'Key Space: value', conn._buffer)
++ conn.putheader('KeySpace ', 'value')
++ self.assertIn(b'KeySpace : value', conn._buffer)
++ conn.putheader(b'Nonbreak\xa0Space', 'value')
++ self.assertIn(b'Nonbreak\xa0Space: value', conn._buffer)
++ conn.putheader(b'\xa0NonbreakSpace', 'value')
++ self.assertIn(b'\xa0NonbreakSpace: value', conn._buffer)
++
+ def test_ipv6host_header(self):
+ # Default host header on IPv6 transaction should wrapped by [] if
+ # its actual IPv6 address
+@@ -153,6 +180,36 @@ class HeaderTests(TestCase):
+ conn.request('GET', '/foo')
+ self.assertTrue(sock.data.startswith(expected))
+
++ def test_invalid_headers(self):
++ conn = client.HTTPConnection('example.com')
++ conn.sock = FakeSocket('')
++ conn.putrequest('GET', '/')
++
++ # http://tools.ietf.org/html/rfc7230#section-3.2.4, whitespace is no
++ # longer allowed in header names
++ cases = (
++ (b'Invalid\r\nName', b'ValidValue'),
++ (b'Invalid\rName', b'ValidValue'),
++ (b'Invalid\nName', b'ValidValue'),
++ (b'\r\nInvalidName', b'ValidValue'),
++ (b'\rInvalidName', b'ValidValue'),
++ (b'\nInvalidName', b'ValidValue'),
++ (b' InvalidName', b'ValidValue'),
++ (b'\tInvalidName', b'ValidValue'),
++ (b'Invalid:Name', b'ValidValue'),
++ (b':InvalidName', b'ValidValue'),
++ (b'ValidName', b'Invalid\r\nValue'),
++ (b'ValidName', b'Invalid\rValue'),
++ (b'ValidName', b'Invalid\nValue'),
++ (b'ValidName', b'InvalidValue\r\n'),
++ (b'ValidName', b'InvalidValue\r'),
++ (b'ValidName', b'InvalidValue\n'),
++ )
++ for name, value in cases:
++ with self.subTest((name, value)):
++ with self.assertRaisesRegex(ValueError, 'Invalid header'):
++ conn.putheader(name, value)
++
+
+ class BasicTest(TestCase):
+ def test_status_lines(self):
+--
+2.9.0
+
diff --git a/pypy3.spec b/pypy3.spec
index e31b4d4..5666e56 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 2.4.0
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -156,6 +156,20 @@ Patch2: 007-remove-startup-message.patch
# 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
+# rhbz#1351680: https://bugzilla.redhat.com/show_bug.cgi?id=1351680
+# FIXED UPSTREAM: https://hg.python.org/cpython/rev/d590114c2394
+# Raise an error when STARTTLS fails
+Patch4: 009-raise-an-error-when-STARTTLS-fails.patch
+
+# CVE-2016-5699 python: http protocol steam injection attack
+# rhbz#1303699: https://bugzilla.redhat.com/show_bug.cgi?id=1303699
+# rhbz#1351687: https://bugzilla.redhat.com/show_bug.cgi?id=1351687
+# FIXED UPSTREAM: https://hg.python.org/cpython/rev/bf3e1c9b80e9
+# Disabled HTTP header injections in http.client
+Patch5: 010-disabled-HTTP-header-injections-in-http.client.patch
+
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
@@ -842,6 +856,17 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri Jul 01 2016 Miro Hrončok <mhroncok(a)redhat.com> - 2.4.0-6
+- 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
+- rhbz#1351680: https://bugzilla.redhat.com/show_bug.cgi?id=1351680
+- Fixed upstream: https://hg.python.org/cpython/rev/d590114c2394
+- Fix for: CVE-2016-5699 python: http protocol steam injection attack
+- rhbz#1303699: https://bugzilla.redhat.com/show_bug.cgi?id=1303699
+- 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(a)redhat.com> - 2.4.0-5
- Fix FTBFS (#1307889)
- Add patch to fix maximum recursion depth error during build
commit 4a3038ff5634b498b5afbf2552eeec9ae5d6e03b
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri May 13 02:07:16 2016 +0200
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
diff --git a/008-maximum-recursion-depth.patch b/008-maximum-recursion-depth.patch
new file mode 100644
index 0000000..6d3d157
--- /dev/null
+++ b/008-maximum-recursion-depth.patch
@@ -0,0 +1,179 @@
+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/pypy3.spec b/pypy3.spec
index 53c2241..e31b4d4 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 2.4.0
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -152,6 +152,9 @@ 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
# Build-time requirements:
@@ -287,6 +290,20 @@ 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/560a75090333b6de8a1de960acac5e...
+%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() {
@@ -348,7 +365,8 @@ BuildPyPy() {
# of root pointers:
%global gcrootfinder_options --gcrootfinder=shadowstack
- export CFLAGS=$(echo "$RPM_OPT_FLAGS")
+ # Prevent memory exhaustion
+ export CFLAGS=$(echo "$RPM_OPT_FLAGS" | sed -e 's/-g//')
%else
# Go with the default, which is "asmgcc"
@@ -367,7 +385,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//')
+ 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//')
%endif
@@ -824,6 +842,12 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri May 13 2016 Miro Hrončok <mhroncok(a)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(a)fedoraproject.org> - 2.4.0-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
commit 37de776457faff9eeedd146ed613f098a688d9cf
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Thu Feb 4 18:47:53 2016 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
diff --git a/pypy3.spec b/pypy3.spec
index 04952a9..53c2241 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 2.4.0
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -824,6 +824,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Thu Feb 04 2016 Fedora Release Engineering <releng(a)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(a)in.waw.pl> - 2.4.0-3
- Bump release to rebuild with new execstack
commit ffbf97517e896aea68cb51cb99a36e5bf95422e8
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Tue Aug 4 11:50:06 2015 -0400
Bump release to rebuild with new execstack
diff --git a/pypy3.spec b/pypy3.spec
index afc59f7..04952a9 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 2.4.0
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -824,6 +824,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Tue Aug 04 2015 Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl> - 2.4.0-3
+- Bump release to rebuild with new execstack
+
* Thu Jun 18 2015 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.4.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
commit a039768e93ec1249319bb9b49149c6981717b0ab
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Thu Jun 18 18:15:59 2015 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
diff --git a/pypy3.spec b/pypy3.spec
index fbacd83..afc59f7 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 2.4.0
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -824,6 +824,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Thu Jun 18 2015 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.4.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
+
* Wed Sep 10 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.4.0-1
- Update to 2.4.0
commit a7f7d048aa94963f46c11bea18071aef0fb8c954
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Thu Jun 11 11:40:02 2015 +0200
Sync with pypy
diff --git a/pypy3.spec b/pypy3.spec
index 6e6bd46..fbacd83 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -116,7 +116,7 @@ URL: http://pypy.org/
# Easy way to turn off the selftests:
%global run_selftests 1
-%global pypyprefix %{_libdir}/pypy3-%{version}
+%global pypyprefix %{_libdir}/%{name}-%{version}
%global pylibver 3
# We refer to this subdir of the source tree in a few places during the build:
@@ -129,11 +129,11 @@ 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/pypy3-2.4.0-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/%{name}-%{version}-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
-Source2: macros.pypy3
+Source2: macros.%{name}
# By default, if built at a tty, the translation process renders a Mandelbrot
# set to indicate progress.
@@ -217,7 +217,7 @@ BuildRequires: emacs
BuildRequires: git
# Metadata for the core package (the JIT build):
-Requires: pypy3-libs%{?_isa} = %{version}-%{release}
+Requires: %{name}-libs%{?_isa} = %{version}-%{release}
%description
PyPy's implementation of Python 3, featuring a Just-In-Time compiler on some CPU
@@ -249,7 +249,7 @@ Libraries required by the various PyPy implementations of Python 3.
%package devel
Group: Development/Languages
Summary: Development tools for working with PyPy3
-Requires: pypy3%{?_isa} = %{version}-%{release}
+Requires: %{name}%{?_isa} = %{version}-%{release}
%description devel
Header files for building C extension modules against PyPy3
@@ -259,13 +259,13 @@ Header files for building C extension modules against PyPy3
%package stackless
Group: Development/Languages
Summary: Stackless Python interpreter built using PyPy3
-Requires: pypy3-libs%{?_isa} = %{version}-%{release}
+Requires: %{name}-libs%{?_isa} = %{version}-%{release}
%description stackless
Build of PyPy3 with support for micro-threads for massive concurrency
%endif
%prep
-%autosetup -n pypy3-2.4.0-src -p1 -S git
+%autosetup -n %{name}-%{version}-src -p1 -S git
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
@@ -410,7 +410,7 @@ BuildPyPy() {
}
BuildPyPy \
- pypy3 \
+ %{name} \
%if 0%{with_jit}
"-Ojit" \
%else
@@ -420,7 +420,7 @@ BuildPyPy \
%if 0%{with_stackless}
BuildPyPy \
- pypy3-stackless \
+ %{name}-stackless \
"--stackless"
%endif
@@ -466,10 +466,10 @@ InstallPyPy() {
mkdir -p %{buildroot}/%{_bindir}
mkdir -p %{buildroot}/%{pypyprefix}
-InstallPyPy pypy3
+InstallPyPy %{name}
%if 0%{with_stackless}
-InstallPyPy pypy3-stackless
+InstallPyPy %{name}-stackless
%endif
@@ -572,16 +572,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}/pypy3 \
+ %{buildroot}/%{_bindir}/%{name} \
0
-%{buildroot}/%{pypyprefix}/pypy3 -c 'import _tkinter'
-%{buildroot}/%{pypyprefix}/pypy3 -c 'import tkinter'
-%{buildroot}/%{pypyprefix}/pypy3 -c 'import _sqlite3'
-%{buildroot}/%{pypyprefix}/pypy3 -c 'import _curses'
-%{buildroot}/%{pypyprefix}/pypy3 -c 'import curses'
-%{buildroot}/%{pypyprefix}/pypy3 -c 'import syslog'
-%{buildroot}/%{pypyprefix}/pypy3 -c 'from _sqlite3 import *'
+%{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 *'
# Header files for C extension modules.
# Upstream's packaging process (pypy/tool/release/package.py)
@@ -645,8 +645,8 @@ 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}/pypy3trace-mode.el
-cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/pypy3trace-mode.elc
+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
%endif
# Install macros for rpm:
@@ -775,10 +775,10 @@ CheckPyPy() {
#pypy/goal/pypy pypy/test_all.py --resultlog=pypyjit_new.log
%if %{run_selftests}
-CheckPyPy pypy3
+CheckPyPy %{name}
%if 0%{with_stackless}
-CheckPyPy pypy3-stackless
+CheckPyPy %{name}-stackless
%endif
%endif # run_selftests
@@ -800,26 +800,26 @@ CheckPyPy pypy3-stackless
%{pypyprefix}/lib_pypy/
%{pypyprefix}/site-packages/
%if %{with_emacs}
-%{_emacs_sitelispdir}/pypy3trace-mode.el
-%{_emacs_sitelispdir}/pypy3trace-mode.elc
+%{_emacs_sitelispdir}/%{name}trace-mode.el
+%{_emacs_sitelispdir}/%{name}trace-mode.elc
%endif
%files
%license LICENSE
%doc README.rst
-%{_bindir}/pypy3
-%{pypyprefix}/pypy3
+%{_bindir}/%{name}
+%{pypyprefix}/%{name}
%files devel
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
-%{_rpmconfigdir}/macros.d/macros.pypy3
+%{_rpmconfigdir}/macros.d/macros.%{name}
%if 0%{with_stackless}
%files stackless
%license LICENSE
%doc README.rst
-%{_bindir}/pypy-stackless
+%{_bindir}/%{name}-stackless
%endif
commit 908d523efb68df54d872af8a8c6324e0f8f7f106
Merge: ff9537b 5f5775a
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sun May 10 16:16:10 2015 +0200
Merge with pypy + package review (#1215732) history
commit 5f5775aa52401c7c7261d2e610fa796420e51b9d
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sun May 10 16:04:51 2015 +0200
Remove unused patches
diff --git a/008-fix-dynamic-symbols-script.patch b/008-fix-dynamic-symbols-script.patch
deleted file mode 100644
index 5b1d551..0000000
--- a/008-fix-dynamic-symbols-script.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-diff --git a/pypy/translator/platform/posix.py b/pypy/translator/platform/posix.py
---- a/pypy/translator/platform/posix.py
-+++ b/pypy/translator/platform/posix.py
-@@ -48,8 +48,10 @@
- response_file = self._make_response_file("dynamic-symbols-")
- f = response_file.open("w")
- f.write("{\n")
-+ f.write(" global:\n")
- for sym in eci.export_symbols:
-- f.write("%s;\n" % (sym,))
-+ f.write(" %s;\n" % (sym,))
-+ f.write(" local:*;\n")
- f.write("};")
- f.close()
-
diff --git a/config.patch b/config.patch
deleted file mode 100644
index bf81d7d..0000000
--- a/config.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-diff -rup pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py
---- pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py 2013-05-27 10:35:37.679237332 +0200
-+++ pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py 2013-05-27 10:47:41.506354482 +0200
-@@ -32,19 +32,20 @@ class BaseLinux(BasePosix):
- return self._pkg_config("libffi", "--libs-only-L",
- ['/usr/lib/libffi'])
-
-- def library_dirs_for_libffi_a(self):
-- # places where we need to look for libffi.a
-- # XXX obscuuure! only look for libffi.a if run with translate.py
-- if 'translate' in sys.modules:
-- if sys.maxint > 2**32:
-- host = 'x86_64'
-- else:
-- host = 'x86'
-- return self.library_dirs_for_libffi() + [
-- '/usr/lib',
-- '/usr/lib/%s-linux-gnu/' % host]
-- else:
-- return []
-+ #Fedora, at least, has the shared version but not the static:
-+ #def library_dirs_for_libffi_a(self):
-+ # # places where we need to look for libffi.a
-+ # # XXX obscuuure! only look for libffi.a if run with translate.py
-+ # if 'translate' in sys.modules:
-+ # if sys.maxint > 2**32:
-+ # host = 'x86_64'
-+ # else:
-+ # host = 'x86'
-+ # return self.library_dirs_for_libffi() + [
-+ # '/usr/lib',
-+ # '/usr/lib/%s-linux-gnu/' % host]
-+ # else:
-+ # return []
-
-
- class Linux(BaseLinux):
diff --git a/more-readable-c-code.patch b/more-readable-c-code.patch
deleted file mode 100644
index 92d340f..0000000
--- a/more-readable-c-code.patch
+++ /dev/null
@@ -1,693 +0,0 @@
-diff -up pypy-pypy-release-1.7/pypy/interpreter/pycode.py.more-readable-c-code pypy-pypy-release-1.7/pypy/interpreter/pycode.py
---- pypy-pypy-release-1.7/pypy/interpreter/pycode.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/interpreter/pycode.py 2011-11-21 16:16:15.673463780 -0500
-@@ -13,6 +13,7 @@ from pypy.interpreter.gateway import Non
- from pypy.interpreter.astcompiler.consts import (
- CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS, CO_NESTED,
- CO_GENERATOR, CO_CONTAINSGLOBALS)
-+from pypy.interpreter.pytraceback import offset2lineno
- from pypy.rlib.rarithmetic import intmask
- from pypy.rlib.debug import make_sure_not_resized
- from pypy.rlib import jit
-@@ -81,6 +82,7 @@ class PyCode(eval.Code):
- self.hidden_applevel = hidden_applevel
- self.magic = magic
- self._signature = cpython_code_signature(self)
-+ self._cached_source = None
- self._initialize()
-
- def _initialize(self):
-@@ -397,3 +399,23 @@ class PyCode(eval.Code):
-
- def repr(self, space):
- return space.wrap(self.get_repr())
-+
-+ def get_linenum_for_offset(self, offset):
-+ # Given a bytecode offset, return a 1-based index into the lines of the
-+ # source code
-+ return offset2lineno(self, offset)
-+
-+ def _ensure_source(self):
-+ # Lazily grab the source lines into self._cached_source (or raise
-+ # an IOError)
-+ if not self._cached_source:
-+ f = open(self.co_filename, 'r')
-+ source = [line.rstrip() for line in f.readlines()]
-+ f.close()
-+ self._cached_source = source
-+
-+ def get_source_text(self, linenum):
-+ # Given a 1-based index, get the corresponding line of source code (or
-+ # raise an IOError)
-+ self._ensure_source()
-+ return self._cached_source[linenum - 1]
-diff -up pypy-pypy-release-1.7/pypy/objspace/flow/model.py.more-readable-c-code pypy-pypy-release-1.7/pypy/objspace/flow/model.py
---- pypy-pypy-release-1.7/pypy/objspace/flow/model.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/objspace/flow/model.py 2011-11-21 16:15:36.599466455 -0500
-@@ -31,6 +31,120 @@ from pypy.tool.identity_dict import iden
-
- __metaclass__ = type
-
-+class SourceLoc(object):
-+ # A srcloc is a specific location within the RPython source code,
-+ # intended for human display
-+ __slots__ = ('code', # code object
-+ 'linenum' # 1-based index, as displayed to a user
-+ )
-+ def __init__(self, code, linenum):
-+ self.code = code
-+ self.linenum = linenum
-+
-+ def get_text(self):
-+ # Get the actual source text of this line
-+ return self.code.get_source_text(self.linenum)
-+
-+ def __eq__(self, other):
-+ return self.code == other.code and self.linenum == other.linenum
-+
-+ def __ne__(self, other):
-+ if other:
-+ return self.code != other.code or self.linenum != other.linenum
-+ else:
-+ return True
-+
-+class CodeLoc(object):
-+ # A codeloc is a specific location within the RPython bytecode
-+ __slots__ = ('code', # code object
-+ 'offset' # int index into bytecode, or -1
-+ )
-+
-+ def __init__(self, code, offset):
-+ self.code = code
-+ self.offset = offset
-+
-+ def __str__(self):
-+ if self.offset >= 0:
-+ return "%s@%d" % (self.code.co_name, self.offset)
-+ else:
-+ return ""
-+
-+ def __ne__(self, other):
-+ if other:
-+ return self.code != other.code or self.offset != other.offset
-+ else:
-+ return True
-+
-+ def __cmp__(self, other):
-+ # Partial ordering, for those locations that have an offset:
-+ if other:
-+ if self.offset >= 0 and other.offset >= 0:
-+ return self.offset - other.offset
-+ return 0
-+
-+ def get_source_loc(self):
-+ # Convert to a SourceLoc:
-+ return SourceLoc(self.code, self.code.get_linenum_for_offset(self.offset))
-+
-+class OperationLoc(object):
-+ # An oploc is the location within the RPython source code of a given
-+ # operation
-+ #
-+ # This is a list consisting of CodeLoc instances, some of which may be None
-+ #
-+ # For the simple case, this is list of length 1 with a single CodeLoc
-+ #
-+ # For an operation inside an inlined callsite, we have a list of length 2:
-+ # [codeloc of callsite,
-+ # codeloc of operation within inlined body]
-+ #
-+ # For more interesting inlined cases, we have a chain of source locations:
-+ # [codeloc of callsite,
-+ # codeloc of inner callsite,
-+ # ... ,
-+ # codeloc of innermost inlined callsite,
-+ # codeloc of operation within inlined body]
-+ #
-+
-+ __slots__ = ('codelocs', )
-+
-+ def __init__(self, codelocs):
-+ self.codelocs = codelocs
-+
-+ def __str__(self):
-+ return '[' + ' > '.join(str(codeloc) for codeloc in self.codelocs) + ']'
-+
-+ def __cmp__(self, other):
-+ return cmp(self.codelocs, other.codelocs)
-+
-+def block_comparator(blk0, blk1):
-+ '''
-+ Sort function for blocks, putting them in an ordering that attempts to
-+ maximize readability of the generated C code
-+ '''
-+ # print 'comparing %r and %r' % (blk0, blk1)
-+ # Put the start/end block at the top/bottom:
-+ if blk0.isstartblock:
-+ return -1
-+
-+ if blk1.isstartblock:
-+ return 1
-+
-+ # Order blocks by the offset, where present:
-+ if blk0.operations:
-+ if blk1.operations:
-+ return cmp(blk0.operations[0].oploc, blk1.operations[0].oploc)
-+ else:
-+ return -1
-+ else:
-+ if blk1.operations:
-+ return 1
-+ else:
-+ return 0
-+
-+def edge_comparator(edge0, edge1):
-+ return block_comparator(edge0.target, edge1.target)
-
- class FunctionGraph(object):
- __slots__ = ['startblock', 'returnblock', 'exceptblock', '__dict__']
-@@ -94,6 +208,21 @@ class FunctionGraph(object):
- seen[block] = True
- stack += block.exits[::-1]
-
-+ def iterblocks_by_source(self):
-+ # Try to preserve logical source ordering in the blocks
-+ block = self.startblock
-+ yield block
-+ seen = {block: True}
-+ stack = list(block.exits[::-1])
-+ stack.sort(edge_comparator)
-+ while stack:
-+ block = stack.pop().target
-+ if block not in seen:
-+ yield block
-+ seen[block] = True
-+ stack += block.exits[::-1]
-+ stack.sort(edge_comparator)
-+
- def iterlinks(self):
- block = self.startblock
- seen = {block: True}
-@@ -183,14 +312,14 @@ class Block(object):
- self.exits = [] # list of Link(s)
-
- def at(self):
-- if self.operations and self.operations[0].offset >= 0:
-- return "@%d" % self.operations[0].offset
-+ if self.operations:
-+ return str(self.operations[0].oploc)
- else:
- return ""
-
- def __str__(self):
- if self.operations:
-- txt = "block@%d" % self.operations[0].offset
-+ txt = "block%s" % self.operations[0].oploc
- else:
- if (not self.exits) and len(self.inputargs) == 1:
- txt = "return block"
-@@ -245,6 +374,21 @@ class Block(object):
- from pypy.translator.tool.graphpage import try_show
- try_show(self)
-
-+ def isreturnblock(self):
-+ return (not self.operations) and (not self.exits) and len(self.inputargs) == 1
-+
-+ def get_base_label(self, blocknum):
-+ # Generate a more friendly C label for this block
-+ if self.operations:
-+ txt = "block"
-+ elif (not self.exits) and len(self.inputargs) == 1:
-+ txt = "return_block"
-+ elif (not self.exits) and len(self.inputargs) == 2:
-+ txt = "raise_block"
-+ else:
-+ txt = "codeless_block"
-+ return '%s%d' % (txt, blocknum)
-+
-
- class Variable(object):
- __slots__ = ["_name", "_nr", "concretetype"]
-@@ -331,13 +475,15 @@ class WrapException(Exception):
-
-
- class SpaceOperation(object):
-- __slots__ = "opname args result offset".split()
-+ __slots__ = "opname args result oploc".split()
-
-- def __init__(self, opname, args, result, offset=-1):
-+ def __init__(self, opname, args, result, oploc=None):
- self.opname = intern(opname) # operation name
- self.args = list(args) # mixed list of var/const
- self.result = result # either Variable or Constant instance
-- self.offset = offset # offset in code string
-+ if oploc is None:
-+ oploc = OperationLoc([None])
-+ self.oploc = oploc
-
- def __eq__(self, other):
- return (self.__class__ is other.__class__ and
-@@ -352,8 +498,9 @@ class SpaceOperation(object):
- return hash((self.opname,tuple(self.args),self.result))
-
- def __repr__(self):
-- return "%r = %s(%s)" % (self.result, self.opname,
-- ", ".join(map(repr, self.args)))
-+ return "%r = %s(%s) (%s)" % (self.result, self.opname,
-+ ", ".join(map(repr, self.args)),
-+ self.oploc)
-
- class Atom(object):
- def __init__(self, name):
-@@ -427,8 +574,7 @@ def copygraph(graph, shallow=False, varm
- for op in oplist:
- copyop = SpaceOperation(op.opname,
- [copyvar(v) for v in op.args],
-- copyvar(op.result), op.offset)
-- #copyop.offset = op.offset
-+ copyvar(op.result), op.oploc)
- result.append(copyop)
- return result
- newblock.operations = copyoplist(block.operations)
-diff -up pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py.more-readable-c-code pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py
---- pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py 2011-11-21 16:15:36.600466455 -0500
-@@ -315,7 +315,9 @@ class FlowObjSpace(ObjSpace):
- def do_operation(self, name, *args_w):
- spaceop = SpaceOperation(name, args_w, Variable())
- if hasattr(self, 'executioncontext'): # not here during bootstrapping
-- spaceop.offset = self.executioncontext.crnt_offset
-+ codeloc = CodeLoc(self.executioncontext.code,
-+ self.executioncontext.crnt_offset)
-+ spaceop.oploc = OperationLoc([codeloc])
- self.executioncontext.recorder.append(spaceop)
- return spaceop.result
-
-diff -up pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py.more-readable-c-code pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py
---- pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py 2011-11-21 16:15:36.600466455 -0500
-@@ -119,3 +119,25 @@ def test_variable():
- assert v2.renamed
- assert v2.name.startswith("foobar_") and v2.name != v.name
- assert v2.name.split('_', 1)[1].isdigit()
-+
-+def test_source_locations():
-+ # Invent some random offsets into the code:
-+ co = sample_function.__code__
-+ codelocA = CodeLoc(co, 42)
-+ codelocB = CodeLoc(co, 87)
-+
-+ assert str(codelocA) == 'sample_function@42'
-+ assert str(codelocB) == 'sample_function@87'
-+
-+ assert cmp(codelocA, codelocB) < 0
-+ assert cmp(codelocB, codelocA) > 0
-+
-+ oplocA = OperationLoc([codelocA])
-+ oplocB = OperationLoc([codelocB])
-+
-+ assert str(oplocA) == '[sample_function@42]'
-+ assert str(oplocB) == '[sample_function@87]'
-+
-+ assert cmp(oplocA, oplocB) < 0
-+ assert cmp(oplocB, oplocA) > 0
-+
-diff -up pypy-pypy-release-1.7/pypy/rpython/rtyper.py.more-readable-c-code pypy-pypy-release-1.7/pypy/rpython/rtyper.py
---- pypy-pypy-release-1.7/pypy/rpython/rtyper.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/rpython/rtyper.py 2011-11-21 16:15:36.601466455 -0500
-@@ -800,7 +800,7 @@ class HighLevelOp(object):
- return vars
-
- def genop(self, opname, args_v, resulttype=None):
-- return self.llops.genop(opname, args_v, resulttype)
-+ return self.llops.genop(opname, args_v, resulttype, self.spaceop.oploc)
-
- def gendirectcall(self, ll_function, *args_v):
- return self.llops.gendirectcall(ll_function, *args_v)
-@@ -935,7 +935,7 @@ class LowLevelOpList(list):
- v.concretetype))
- return v
-
-- def genop(self, opname, args_v, resulttype=None):
-+ def genop(self, opname, args_v, resulttype=None, oploc=None):
- try:
- for v in args_v:
- v.concretetype
-@@ -944,7 +944,7 @@ class LowLevelOpList(list):
- " and pass its result to genop(),"
- " never hop.args_v directly.")
- vresult = Variable()
-- self.append(SpaceOperation(opname, args_v, vresult))
-+ self.append(SpaceOperation(opname, args_v, vresult, oploc))
- if resulttype is None:
- vresult.concretetype = Void
- return None
-diff -up pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py
---- pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py 2011-11-21 16:15:36.601466455 -0500
-@@ -4,6 +4,7 @@ from pypy.translator.simplify import get
- from pypy.translator.unsimplify import copyvar
- from pypy.objspace.flow.model import Variable, Constant, Block, Link
- from pypy.objspace.flow.model import SpaceOperation, c_last_exception
-+from pypy.objspace.flow.model import OperationLoc
- from pypy.objspace.flow.model import FunctionGraph
- from pypy.objspace.flow.model import mkentrymap, checkgraph
- from pypy.annotation import model as annmodel
-@@ -231,6 +232,7 @@ class BaseInliner(object):
- self.varmap = {}
- self._copied_blocks = {}
- self.op = block.operations[index_operation]
-+ self.callsite_oploc = self.op.oploc
- self.graph_to_inline = self.get_graph_from_op(self.op)
- self.exception_guarded = False
- if (block.exitswitch == c_last_exception and
-@@ -290,7 +292,9 @@ class BaseInliner(object):
-
- def copy_operation(self, op):
- args = [self.get_new_name(arg) for arg in op.args]
-- result = SpaceOperation(op.opname, args, self.get_new_name(op.result))
-+ new_oploc = OperationLoc(self.callsite_oploc.codelocs[:] + op.oploc.codelocs[:])
-+ result = SpaceOperation(op.opname, args, self.get_new_name(op.result),
-+ new_oploc)
- return result
-
- def copy_block(self, block):
-diff -up pypy-pypy-release-1.7/pypy/translator/c/funcgen.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/c/funcgen.py
---- pypy-pypy-release-1.7/pypy/translator/c/funcgen.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/c/funcgen.py 2011-11-21 16:15:36.602466455 -0500
-@@ -1,4 +1,6 @@
- import sys
-+import inspect
-+import dis
- from pypy.translator.c.support import USESLOTS # set to False if necessary while refactoring
- from pypy.translator.c.support import cdecl
- from pypy.translator.c.support import llvalue_from_constant, gen_assignments
-@@ -22,6 +24,38 @@ LOCALVAR = 'l_%s'
-
- KEEP_INLINED_GRAPHS = False
-
-+def block_comparator(blk0, blk1):
-+ '''
-+ Sort function for blocks, putting them in an ordering that attempts to
-+ maximize readability of the generated C code
-+ '''
-+ # print 'comparing %r and %r' % (blk0, blk1)
-+ # Put the start/end block at the top/bottom:
-+ if blk0.isstartblock:
-+ return -1
-+
-+ if blk1.isstartblock:
-+ return 1
-+
-+ # Order blocks by the offset, where present:
-+ if blk0.operations:
-+ if blk1.operations:
-+ return cmp(blk0.operations[0].oploc, blk1.operations[0].oploc)
-+ else:
-+ return -1
-+ else:
-+ if blk1.operations:
-+ return 1
-+ else:
-+ return 0
-+
-+def escape_c_comments(py_src):
-+ # Escape C comments within RPython source, to avoid generating bogus
-+ # comments in our generated C source:
-+ py_src = py_src.replace('/*', '')
-+ py_src = py_src.replace('*/', '')
-+ return py_src
-+
- class FunctionCodeGenerator(object):
- """
- Collects information about a function which we have to generate
-@@ -207,14 +241,57 @@ class FunctionCodeGenerator(object):
-
- def cfunction_body(self):
- graph = self.graph
-- yield 'goto block0;' # to avoid a warning "this label is not used"
-+ # Try to print python source code:
-+ if hasattr(graph, 'func'):
-+ filename = inspect.getfile(graph.func)
-+ #yield '/* name: %r */' % filename
-+ try:
-+ src, startline = inspect.getsourcelines(graph.func)
-+ except IOError:
-+ pass # No source found
-+ except IndexError:
-+ pass # Bulletproofing
-+ else:
-+ yield '/* Python source %r' % filename
-+ for i, line in enumerate(src):
-+ line = line.rstrip()
-+ line = escape_c_comments(line)
-+ # FuncNode.funcgen_implementation treats lines ending in ':'
-+ # as C blocks, which messes up the formatting.
-+ # Work around this:
-+ if line.endswith(':'):
-+ line += ' '
-+ yield ' * %4d : %s' % (startline + i, line)
-+ yield ' */'
-+
-+ label = graph.startblock.get_base_label(self.blocknum[graph.startblock])
-+ yield 'goto %s;' % label # to avoid a warning "this label is not used"
-+
-+ # Sort the blocks into a (hopefully) readable order:
-+ blocks = list(graph.iterblocks_by_source())
-+ blocks.sort(block_comparator)
-
- # generate the body of each block
-- for block in graph.iterblocks():
-+ for block in blocks:
-+ cursrcloc = None
- myblocknum = self.blocknum[block]
- yield ''
-- yield 'block%d:' % myblocknum
-+ yield '%s:' % block.get_base_label(myblocknum)
-+ #yield "/* repr(block): %r */" % (block, )
-+ #yield "/* type(block): %r */" % (type(block), )
- for i, op in enumerate(block.operations):
-+ #yield "/* type(op): %r */" % (type(op), )
-+ #yield "/* op.oploc: %s */" % (op.oploc, )
-+ codeloc = op.oploc.codelocs[-1]
-+ if codeloc:
-+ srcloc = codeloc.get_source_loc()
-+ if srcloc != cursrcloc:
-+ try:
-+ yield "/* %s:%d : %s */" % (codeloc.code.co_name, srcloc.linenum, escape_c_comments(srcloc.get_text()))
-+ cursrcloc = srcloc
-+ except IOError:
-+ pass
-+
- for line in self.gen_op(op):
- yield line
- if len(block.exits) == 0:
-@@ -306,7 +383,7 @@ class FunctionCodeGenerator(object):
- assignments.append((a2typename, dest, src))
- for line in gen_assignments(assignments):
- yield line
-- label = 'block%d' % self.blocknum[link.target]
-+ label = link.target.get_base_label(self.blocknum[link.target])
- if link.target in self.innerloops:
- loop = self.innerloops[link.target]
- if link is loop.links[-1]: # link that ends a loop
-diff -up pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py
---- pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py 2011-11-21 16:15:36.602466455 -0500
-@@ -1,4 +1,5 @@
- import autopath, sys, os, py
-+import re
- from pypy.rpython.lltypesystem.lltype import *
- from pypy.annotation import model as annmodel
- from pypy.translator.translator import TranslationContext
-@@ -532,3 +533,130 @@ def test_inhibit_tail_call():
- else:
- assert 0, "the call was not found in the C source"
- assert 'PYPY_INHIBIT_TAIL_CALL();' in lines[i+1]
-+
-+def get_generated_c_source(fn, types):
-+ # Return a (optimized fn, c source code, c source filename) 3-tuple
-+ t = Translation(fn)
-+ t.annotate(types)
-+ c_filename_path = t.source_c()
-+ h = c_filename_path.open()
-+ src = h.read()
-+ h.close()
-+ c_fn = t.compile_c()
-+ return (c_fn, src, c_filename_path)
-+
-+def extract_c_function(c_src, fname):
-+ # Extract the source for a given C function out of a the given src string
-+ # Makes assumptions about the layout of the source
-+ pattern = '^(.+) \**%s\(.*\) {$' % fname
-+ within_fn = False
-+ result = ''
-+ for line in c_src.splitlines():
-+ if within_fn:
-+ result += line + '\n'
-+ if line.startswith('}'):
-+ return result
-+ else:
-+ m = re.match(pattern, line)
-+ if m:
-+ within_fn = True
-+ result += line + '\n'
-+ return result
-+
-+
-+
-+def test_generated_c_source():
-+ # Verify that generate C source "looks good"
-+ # We'll use is_perfect_number, as it contains a loop and a conditional
-+
-+ # Generate C source code
-+ from pypy.translator.test.snippet import is_perfect_number
-+ c_fn, c_src, c_filename_path = get_generated_c_source(is_perfect_number,
-+ [int])
-+
-+ # Locate the C source for the type-specialized function:
-+ c_fn_src = extract_c_function(c_src, 'pypy_g_is_perfect_number')
-+
-+ # Verify that the C source contains embedded comments containing the lines
-+ # of the python source:
-+ expected_comment_lines = [
-+ '/* is_perfect_number:31 : while div < n: */',
-+ '/* is_perfect_number:32 : if n % div == 0: */',
-+ '/* is_perfect_number:33 : sum += div */',
-+ '/* is_perfect_number:34 : div += 1 */',
-+ '/* is_perfect_number:35 : return n == sum */']
-+ for exp_line in expected_comment_lines:
-+ assert exp_line in c_fn_src
-+
-+ # Verify that the lines occur in the correct order
-+ # ...we do this by filtering the function's generated C source to just
-+ # those lines containing our comments (and dropping whitespace):
-+ lines = c_fn_src.splitlines()
-+ lines = [line.strip()
-+ for line in lines
-+ if '/* is_perfect_number:' in line]
-+
-+ # ...we should now have exact equality: the ordering should be as expected,
-+ # and each comment should appear exactly once:
-+ assert lines == expected_comment_lines
-+
-+ # Ensure that the generated C function does the right thing:
-+ assert c_fn(5) == False
-+ assert c_fn(6) == True
-+ assert c_fn(7) == False
-+
-+ assert c_fn(5.0) == False
-+ assert c_fn(6.0) == True
-+ assert c_fn(7.0) == False
-+
-+ assert c_fn(5L) == False
-+ assert c_fn(6L) == True
-+ assert c_fn(7L) == False
-+
-+ try:
-+ c_fn('hello world')
-+ except:
-+ pass
-+ else:
-+ raise 'Was expected exception'
-+
-+def test_escaping_c_comments():
-+ # Ensure that c comments within RPython code get escaped when we generate
-+ # our .c code (to avoid generating bogus C)
-+ # See e.g. pypy.module.cpyext.dictobject's PyDict_Next, which has a
-+ # docstring embedding a C comment
-+ def c_style_comment(a, b):
-+ '''Here is a C-style comment within an RPython docstring:
-+ /* hello world */
-+ '''
-+ # and here's one in a string literal:
-+ return '/* hello world a:%s b:%s */' % (a, b)
-+
-+ def cplusplus_style_comment(a, b):
-+ '''Here is a C++-style comment within an RPython docstring:
-+ // hello world
-+ '''
-+ # and here are some in string literals, and one as the floor division
-+ # operator:
-+ return '// hello world: a // b = %s' % (a // b)
-+
-+ for fn_name, exp_output in [('c_style_comment',
-+ '/* hello world a:6 b:3 */'),
-+ ('cplusplus_style_comment',
-+ '// hello world: a // b = 2')]:
-+ fn = locals()[fn_name]
-+
-+ c_fn, c_src, c_filename_path = get_generated_c_source(fn, [int, int])
-+ # If the above survived, then the C compiler managed to handle
-+ # the generated C code
-+
-+ # Verify that the generated code works (i.e. that we didn't
-+ # accidentally change the meaning):
-+ assert c_fn(6, 3) == exp_output
-+
-+ # Ensure that at least part of the docstrings made it into the C
-+ # code:
-+ c_fn_src = extract_c_function(c_src, 'pypy_g_' + fn_name)
-+ assert 'Here is a ' in c_fn_src
-+ assert 'style comment within an RPython docstring' in c_fn_src
-+
-diff -up pypy-pypy-release-1.7/pypy/translator/driver.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/driver.py
---- pypy-pypy-release-1.7/pypy/translator/driver.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/driver.py 2011-11-21 16:15:36.603466455 -0500
-@@ -535,6 +535,7 @@ class TranslationDriver(SimpleTaskEngine
- dstname = self.compute_exe_name() + '.staticdata.info'
- shutil.copy(str(fname), str(dstname))
- self.log.info('Static data info written to %s' % dstname)
-+ return c_source_filename
-
- #
- task_source_c = taskdef(task_source_c, ['database_c'], "Generating c source")
-diff -up pypy-pypy-release-1.7/pypy/translator/gensupp.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/gensupp.py
---- pypy-pypy-release-1.7/pypy/translator/gensupp.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/gensupp.py 2011-11-21 16:15:36.603466455 -0500
-@@ -14,8 +14,8 @@ def ordered_blocks(graph):
- allblocks = []
- for block in graph.iterblocks():
- # first we order by offset in the code string
-- if block.operations:
-- ofs = block.operations[0].offset
-+ if block.operations and block.operations[0].oploc.codelocs[0]:
-+ ofs = block.operations[0].oploc.codelocs[0].offset
- else:
- ofs = sys.maxint
- # then we order by input variable name or value
-diff -up pypy-pypy-release-1.7/pypy/translator/interactive.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/interactive.py
---- pypy-pypy-release-1.7/pypy/translator/interactive.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/interactive.py 2011-11-21 16:15:36.604466454 -0500
-@@ -138,7 +138,7 @@ class Translation(object):
- def source_c(self, argtypes=None, **kwds):
- self.update_options(argtypes, kwds)
- self.ensure_backend('c')
-- self.driver.source_c()
-+ return self.driver.source_c()
-
- def source_cl(self, argtypes=None, **kwds):
- self.update_options(argtypes, kwds)
-diff -up pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py
---- pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py 2011-11-21 16:15:36.604466454 -0500
-@@ -59,6 +59,8 @@ def new_wrapper(func, translator, newnam
- # "return result"
- block = Block(wrapper_inputargs)
- wgraph = FunctionGraph('pyfn_' + (newname or func.func_name), block)
-+ if hasattr(graph, 'func'):
-+ wgraph.func = graph.func
- translator.update_call_graph(wgraph, graph, object())
- translator.graphs.append(wgraph)
- block.operations[:] = newops
-diff -up pypy-pypy-release-1.7/pypy/translator/simplify.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/simplify.py
---- pypy-pypy-release-1.7/pypy/translator/simplify.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/simplify.py 2011-11-21 16:15:36.605466454 -0500
-@@ -292,7 +292,7 @@ def join_blocks(graph):
- return renaming.get(v, v)
- def rename_op(op):
- args = [rename(a) for a in op.args]
-- op = SpaceOperation(op.opname, args, rename(op.result), op.offset)
-+ op = SpaceOperation(op.opname, args, rename(op.result), op.oploc)
- # special case...
- if op.opname == 'indirect_call':
- if isinstance(op.args[0], Constant):
diff --git a/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch b/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
deleted file mode 100644
index 2391f32..0000000
--- a/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -rup pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py
---- pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py 2013-05-27 10:35:37.762237806 +0200
-+++ pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py 2013-05-28 10:13:03.182536196 +0200
-@@ -587,7 +587,7 @@ class ProcessTestCase(BaseTestCase):
- for i in range(1024):
- # Windows raises IOError. Others raise OSError.
- with self.assertRaises(EnvironmentError) as c:
-- subprocess.Popen(['nonexisting_i_hope'],
-+ subprocess.Popen(['/usr/bin/nonexisting_i_hope'],
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- # ignore errors that indicate the command was not found
commit ff9537b3ed920fc031a5b18ab8b27efd0a194202
Author: Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org>
Date: Fri May 8 17:05:34 2015 +0000
Initial setup of the repo
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e69de29
diff --git a/sources b/sources
new file mode 100644
index 0000000..e69de29
commit 36afc7f79102c83960c3d6bf8f4a8620554c0137
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue May 5 18:32:38 2015 +0200
Replace all lib-python python shebangs with pypy
diff --git a/pypy3.spec b/pypy3.spec
index edbfd2f..6e6bd46 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -281,6 +281,11 @@ for f in rpython/translator/goal/bpnn.py ; do
chmod a-x $f
done
+# Replace all lib-python python shebangs with pypy
+find lib-python/%{pylibver} -name "*.py" -exec \
+ sed -r -i '1s|^#!\s*/usr/bin.*python.*|#!/usr/bin/%{name}|' \
+ "{}" \
+ \;
%build
commit 976314ef808d7b7dbe2bc8961a5de2deae1cdc9f
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon May 4 12:49:51 2015 +0200
Build with pypy
diff --git a/pypy3.spec b/pypy3.spec
index 218ce3e..edbfd2f 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -161,7 +161,9 @@ Patch2: 007-remove-startup-message.patch
# Turn it off with this boolean, to revert back to rebuilding using CPython
# and avoid a cycle in the build-time dependency graph:
-%global use_self_when_building 0
+# Note, pypy3 is built with pypy2, so no dependency cycle
+
+%global use_self_when_building 1
%if 0%{use_self_when_building}
# pypy3 can only be build with pypy2
BuildRequires: pypy
commit 980f988cc4d495d359155cf3c1d12b2dfc81a08f
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon May 4 12:48:44 2015 +0200
BR git for %autosetup -S git
diff --git a/pypy3.spec b/pypy3.spec
index 77ffa2d..218ce3e 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -211,6 +211,8 @@ BuildRequires: /usr/bin/execstack
BuildRequires: emacs
%endif
+# For %%autosetup -S git
+BuildRequires: git
# Metadata for the core package (the JIT build):
Requires: pypy3-libs%{?_isa} = %{version}-%{release}
commit 819b9f5595c2ac93d1a8a693a647a006f2c9bbc0
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon May 4 12:47:32 2015 +0200
Use %global instead of %define
diff --git a/pypy3.spec b/pypy3.spec
index e992b00..77ffa2d 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -337,14 +337,14 @@ BuildPyPy() {
# This is the most portable option, and avoids a reliance on non-guaranteed
# behaviors within GCC's code generator: use an explicitly-maintained stack
# of root pointers:
- %define gcrootfinder_options --gcrootfinder=shadowstack
+ %global gcrootfinder_options --gcrootfinder=shadowstack
export CFLAGS=$(echo "$RPM_OPT_FLAGS")
%else
# Go with the default, which is "asmgcc"
- %define gcrootfinder_options %{nil}
+ %global gcrootfinder_options %{nil}
# https://bugzilla.redhat.com/show_bug.cgi?id=588941#c18
# The generated Makefile compiles the .c files into assembler (.s), rather
commit 524d40e5a2091088f5a28f16c996b757acbeb06b
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Apr 28 20:05:42 2015 +0200
Remove build script from the package
diff --git a/pypy3.spec b/pypy3.spec
index 3b40c9a..e992b00 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -644,6 +644,9 @@ cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/pyp
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
+
%check
topdir=$(pwd)
commit cfca1560fdf042a07e2f7108eafc072b93f2617c
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Apr 28 20:01:21 2015 +0200
Use git in %autosetup to avoid .orig files
diff --git a/pypy3.spec b/pypy3.spec
index 2f9ed15..3b40c9a 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -261,7 +261,7 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%endif
%prep
-%autosetup -n pypy3-2.4.0-src -p1
+%autosetup -n pypy3-2.4.0-src -p1 -S git
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
commit 1120251a081f3a611d8d3f742b184985833e9998
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Apr 28 19:58:39 2015 +0200
Change python-devel to python2-devel
diff --git a/pypy3.spec b/pypy3.spec
index 0c5b340..2f9ed15 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -170,7 +170,7 @@ BuildRequires: pypy
# pypy3 can only be build with python2
-BuildRequires: python-devel
+BuildRequires: python2-devel
%global bootstrap_python_interp python
%endif
commit a7610e26e5c7a0bbaa8a7810daa04a625ae357af
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Apr 28 19:51:45 2015 +0200
Don't mark RPM macros in /etc as %config
diff --git a/pypy3.spec b/pypy3.spec
index d9e54fd..0c5b340 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -801,7 +801,7 @@ CheckPyPy pypy3-stackless
%files devel
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
-%config(noreplace) %{_rpmconfigdir}/macros.d/macros.pypy3
+%{_rpmconfigdir}/macros.d/macros.pypy3
%if 0%{with_stackless}
%files stackless
commit 7e82938b0f41850371be195e7be814fedd889d08
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon Apr 27 18:35:23 2015 +0200
Share the docdir across subpackages
diff --git a/pypy3.spec b/pypy3.spec
index 85a2dfc..d9e54fd 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -771,6 +771,10 @@ CheckPyPy pypy3-stackless
%endif # run_selftests
+# Because there's a bunch of binary subpackages and creating
+# /usr/share/licenses/pypy3-this and /usr/share/licenses/pypy3-that
+# is just confusing for the user.
+%global _docdir_fmt %{name}
%files libs
%license LICENSE
commit 1842b1b13e95edfcea412981ed8f4cbe3e7a8383
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon Apr 27 18:26:21 2015 +0200
Require pypy3-libs with %{?_isa}
diff --git a/pypy3.spec b/pypy3.spec
index 93e53f0..85a2dfc 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -213,7 +213,7 @@ BuildRequires: emacs
# Metadata for the core package (the JIT build):
-Requires: pypy3-libs = %{version}-%{release}
+Requires: pypy3-libs%{?_isa} = %{version}-%{release}
%description
PyPy's implementation of Python 3, featuring a Just-In-Time compiler on some CPU
@@ -245,7 +245,7 @@ Libraries required by the various PyPy implementations of Python 3.
%package devel
Group: Development/Languages
Summary: Development tools for working with PyPy3
-Requires: pypy3 = %{version}-%{release}
+Requires: pypy3%{?_isa} = %{version}-%{release}
%description devel
Header files for building C extension modules against PyPy3
@@ -255,7 +255,7 @@ Header files for building C extension modules against PyPy3
%package stackless
Group: Development/Languages
Summary: Stackless Python interpreter built using PyPy3
-Requires: pypy3-libs = %{version}-%{release}
+Requires: pypy3-libs%{?_isa} = %{version}-%{release}
%description stackless
Build of PyPy3 with support for micro-threads for massive concurrency
%endif
commit 7e5676a0456e5e3c711d481fe1e949c0448975ec
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon Apr 27 18:24:57 2015 +0200
Use %autosetup
diff --git a/pypy3.spec b/pypy3.spec
index 99c2a31..93e53f0 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -261,10 +261,7 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%endif
%prep
-%setup -q -n pypy3-2.4.0-src
-%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
-%patch1 -p1
-%patch2 -p1
+%autosetup -n pypy3-2.4.0-src -p1
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
commit e7218e672da6a8e5c553080c36c8e72087e55817
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon Apr 27 18:16:19 2015 +0200
Use %license
diff --git a/pypy3.spec b/pypy3.spec
index 5bee793..99c2a31 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -776,7 +776,8 @@ CheckPyPy pypy3-stackless
%files libs
-%doc LICENSE README.rst
+%license LICENSE
+%doc README.rst
%dir %{pypyprefix}
%dir %{pypyprefix}/lib-python
@@ -791,7 +792,8 @@ CheckPyPy pypy3-stackless
%endif
%files
-%doc LICENSE README.rst
+%license LICENSE
+%doc README.rst
%{_bindir}/pypy3
%{pypyprefix}/pypy3
@@ -802,7 +804,8 @@ CheckPyPy pypy3-stackless
%if 0%{with_stackless}
%files stackless
-%doc LICENSE README.rst
+%license LICENSE
+%doc README.rst
%{_bindir}/pypy-stackless
%endif
commit 146960e8a0ae6b7d82f10d6a2c24e60cf3eadd59
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon Apr 27 18:15:27 2015 +0200
Removed deprecated statements
diff --git a/pypy3.spec b/pypy3.spec
index 95ee959..5bee793 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -10,7 +10,6 @@ Group: Development/Languages
# licensing terms
License: MIT and Python and UCD
URL: http://pypy.org/
-BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# High-level configuration of the build:
@@ -425,8 +424,6 @@ BuildPyPy \
%install
-rm -rf $RPM_BUILD_ROOT
-
# Install the various executables:
InstallPyPy() {
@@ -778,12 +775,7 @@ CheckPyPy pypy3-stackless
%endif # run_selftests
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-
%files libs
-%defattr(-,root,root,-)
%doc LICENSE README.rst
%dir %{pypyprefix}
@@ -799,20 +791,17 @@ rm -rf $RPM_BUILD_ROOT
%endif
%files
-%defattr(-,root,root,-)
%doc LICENSE README.rst
%{_bindir}/pypy3
%{pypyprefix}/pypy3
%files devel
-%defattr(-,root,root,-)
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
%config(noreplace) %{_rpmconfigdir}/macros.d/macros.pypy3
%if 0%{with_stackless}
%files stackless
-%defattr(-,root,root,-)
%doc LICENSE README.rst
%{_bindir}/pypy-stackless
%endif
commit 26c3863db65451cb67c67cd4e72a826698ef7bdf
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sat Apr 25 00:48:59 2015 +0200
Change pypy2 spec to pypy3
diff --git a/.gitignore b/.gitignore
index a61aa79..c9f3d9d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,14 +1 @@
-/pypy-1.4.1-src.tar.bz2
-/pypy-1.5-src.tar.bz2
-/release-1.6.tar.bz2
-/release-1.7.tar.bz2
-/release-1.8.tar.bz2
-/release-1.9.tar.bz2
-/release-2.0-beta-1.tar.bz2
-/release-2.0.2.tar.bz2
-/release-2.1.0.tar.bz2
-/pypy-2.2-src.tar.bz2
-/pypy-2.2.1-src.tar.bz2
-/pypy-2.3-src.tar.bz2
-/release-2.3.1.tar.bz2
-/pypy-2.4.0-src.tar.bz2
+/pypy3-2.4.0-src.tar.bz2
diff --git a/macros.pypy b/macros.pypy
deleted file mode 100644
index 5f40b6f..0000000
--- a/macros.pypy
+++ /dev/null
@@ -1,5 +0,0 @@
-%__pypy /usr/bin/pypy
-%pypy_sitelib %(%{__pypy} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
-%pypy_sitearch %(%{__pypy} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")
-%pypy_version %(%{__pypy} -c "import sys; sys.stdout.write(sys.version[:3])")
-%pypydir %{_builddir}/pypy-%{name}-%{version}-%{release}
diff --git a/macros.pypy3 b/macros.pypy3
new file mode 100644
index 0000000..ef1f600
--- /dev/null
+++ b/macros.pypy3
@@ -0,0 +1,5 @@
+%__pypy3 /usr/bin/pypy3
+%pypy3_sitelib %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
+%pypy3_sitearch %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")
+%pypy3_version %(%{__pypy3} -c "import sys; sys.stdout.write(sys.version[:3])")
+%pypy3dir %{_builddir}/pypy3-%{name}-%{version}-%{release}
diff --git a/pypy.spec b/pypy3.spec
similarity index 94%
rename from pypy.spec
rename to pypy3.spec
index 4a3e56c..95ee959 100644
--- a/pypy.spec
+++ b/pypy3.spec
@@ -1,7 +1,7 @@
-Name: pypy
+Name: pypy3
Version: 2.4.0
Release: 1%{?dist}
-Summary: Python implementation with a Just-In-Time compiler
+Summary: Python 3 implementation with a Just-In-Time compiler
Group: Development/Languages
# LGPL and another free license we'd need to ask spot about are present in some
@@ -117,8 +117,8 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# Easy way to turn off the selftests:
%global run_selftests 1
-%global pypyprefix %{_libdir}/pypy-%{version}
-%global pylibver 2.7
+%global pypyprefix %{_libdir}/pypy3-%{version}
+%global pylibver 3
# We refer to this subdir of the source tree in a few places during the build:
%global goal_dir pypy/goal
@@ -130,11 +130,11 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(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/pypy-2.4.0-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy3-2.4.0-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
-Source2: macros.pypy
+Source2: macros.pypy3
# By default, if built at a tty, the translation process renders a Mandelbrot
# set to indicate progress.
@@ -164,19 +164,15 @@ Patch2: 007-remove-startup-message.patch
%global use_self_when_building 0
%if 0%{use_self_when_building}
+# pypy3 can only be build with pypy2
BuildRequires: pypy
%global bootstrap_python_interp pypy
%else
-# Python 2.6 or later is needed, so on RHEL5 (2.4) we need to use the alternate
-# python26 rpm:
-%if 0%{?rhel} == 5
-BuildRequires: python26-devel
-%global bootstrap_python_interp python26
-%else
+
+# pypy3 can only be build with python2
BuildRequires: python-devel
%global bootstrap_python_interp python
-%endif
%endif
@@ -218,10 +214,10 @@ BuildRequires: emacs
# Metadata for the core package (the JIT build):
-Requires: pypy-libs = %{version}-%{release}
+Requires: pypy3-libs = %{version}-%{release}
%description
-PyPy's implementation of Python, featuring a Just-In-Time compiler on some CPU
+PyPy's implementation of Python 3, featuring a Just-In-Time compiler on some CPU
architectures, and various optimized implementations of the standard types
(strings, dictionaries, etc)
@@ -235,7 +231,7 @@ CPU architecture.
%package libs
Group: Development/Languages
-Summary: Run-time libraries used by PyPy implementations of Python
+Summary: Run-time libraries used by PyPy implementations of Python 3
# We supply an emacs mode for the JIT viewer.
# (This doesn't bring in all of emacs, just the directory structure)
@@ -244,39 +240,29 @@ Requires: emacs-filesystem >= %{_emacs_version}
%endif
%description libs
-Libraries required by the various PyPy implementations of Python.
+Libraries required by the various PyPy implementations of Python 3.
%package devel
Group: Development/Languages
-Summary: Development tools for working with PyPy
-Requires: pypy = %{version}-%{release}
+Summary: Development tools for working with PyPy3
+Requires: pypy3 = %{version}-%{release}
%description devel
-Header files for building C extension modules against PyPy
+Header files for building C extension modules against PyPy3
%if 0%{with_stackless}
%package stackless
Group: Development/Languages
-Summary: Stackless Python interpreter built using PyPy
-Requires: pypy-libs = %{version}-%{release}
+Summary: Stackless Python interpreter built using PyPy3
+Requires: pypy3-libs = %{version}-%{release}
%description stackless
-Build of PyPy with support for micro-threads for massive concurrency
+Build of PyPy3 with support for micro-threads for massive concurrency
%endif
-%if 0%{with_stackless}
-%package stackless
-Group: Development/Languages
-Summary: Stackless Python interpreter built using PyPy
-Requires: pypy-libs = %{version}-%{release}
-%description stackless
-Build of PyPy with support for micro-threads for massive concurrency
-%endif
-
-
%prep
-%setup -q -n pypy-2.4.0-src
+%setup -q -n pypy3-2.4.0-src
%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
%patch1 -p1
%patch2 -p1
@@ -295,8 +281,6 @@ for f in rpython/translator/goal/bpnn.py ; do
chmod a-x $f
done
-rm -rf lib-python/3
-
%build
@@ -421,7 +405,7 @@ BuildPyPy() {
}
BuildPyPy \
- pypy \
+ pypy3 \
%if 0%{with_jit}
"-Ojit" \
%else
@@ -431,7 +415,7 @@ BuildPyPy \
%if 0%{with_stackless}
BuildPyPy \
- pypy-stackless \
+ pypy3-stackless \
"--stackless"
%endif
@@ -479,10 +463,10 @@ InstallPyPy() {
mkdir -p %{buildroot}/%{_bindir}
mkdir -p %{buildroot}/%{pypyprefix}
-InstallPyPy pypy
+InstallPyPy pypy3
%if 0%{with_stackless}
-InstallPyPy pypy-stackless
+InstallPyPy pypy3-stackless
%endif
@@ -585,16 +569,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}/pypy \
+ %{buildroot}/%{_bindir}/pypy3 \
0
-%{buildroot}/%{pypyprefix}/pypy -c 'import _tkinter'
-%{buildroot}/%{pypyprefix}/pypy -c 'import Tkinter'
-%{buildroot}/%{pypyprefix}/pypy -c 'import _sqlite3'
-%{buildroot}/%{pypyprefix}/pypy -c 'import _curses'
-%{buildroot}/%{pypyprefix}/pypy -c 'import curses'
-%{buildroot}/%{pypyprefix}/pypy -c 'import syslog'
-%{buildroot}/%{pypyprefix}/pypy -c 'from _sqlite3 import *'
+%{buildroot}/%{pypyprefix}/pypy3 -c 'import _tkinter'
+%{buildroot}/%{pypyprefix}/pypy3 -c 'import tkinter'
+%{buildroot}/%{pypyprefix}/pypy3 -c 'import _sqlite3'
+%{buildroot}/%{pypyprefix}/pypy3 -c 'import _curses'
+%{buildroot}/%{pypyprefix}/pypy3 -c 'import curses'
+%{buildroot}/%{pypyprefix}/pypy3 -c 'import syslog'
+%{buildroot}/%{pypyprefix}/pypy3 -c 'from _sqlite3 import *'
# Header files for C extension modules.
# Upstream's packaging process (pypy/tool/release/package.py)
@@ -658,7 +642,8 @@ 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}
+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:
@@ -694,7 +679,7 @@ CheckPyPy() {
# Use regrtest to explicitly list all tests:
( ./$ExeName -c \
- "from test.regrtest import findtests; print '\n'.join(findtests())"
+ "from test.regrtest import findtests; print('\n'.join(findtests()))"
) > testnames.txt
# Skip some tests:
@@ -784,10 +769,10 @@ CheckPyPy() {
#pypy/goal/pypy pypy/test_all.py --resultlog=pypyjit_new.log
%if %{run_selftests}
-CheckPyPy pypy
+CheckPyPy pypy3
%if 0%{with_stackless}
-CheckPyPy pypy-stackless
+CheckPyPy pypy3-stackless
%endif
%endif # run_selftests
@@ -809,21 +794,21 @@ rm -rf $RPM_BUILD_ROOT
%{pypyprefix}/lib_pypy/
%{pypyprefix}/site-packages/
%if %{with_emacs}
-%{_emacs_sitelispdir}/pypytrace-mode.el
-%{_emacs_sitelispdir}/pypytrace-mode.elc
+%{_emacs_sitelispdir}/pypy3trace-mode.el
+%{_emacs_sitelispdir}/pypy3trace-mode.elc
%endif
%files
%defattr(-,root,root,-)
%doc LICENSE README.rst
-%{_bindir}/pypy
-%{pypyprefix}/pypy
+%{_bindir}/pypy3
+%{pypyprefix}/pypy3
%files devel
%defattr(-,root,root,-)
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
-%config(noreplace) %{_rpmconfigdir}/macros.d/macros.pypy
+%config(noreplace) %{_rpmconfigdir}/macros.d/macros.pypy3
%if 0%{with_stackless}
%files stackless
diff --git a/sources b/sources
index ab6b8f5..e4d98b7 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-6a25a212e7c5121f1f3988c118d05695 pypy-2.4.0-src.tar.bz2
+96ba72916114d16904e12562b5d84e51 pypy3-2.4.0-src.tar.bz2
commit e76c4a29685bfaf725af1ae1991d5b1fb7b7701c
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Tue Sep 23 12:20:25 2014 +0200
Update to 2.4.0
diff --git a/.gitignore b/.gitignore
index 1babd6b..a61aa79 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,4 @@
/pypy-2.2.1-src.tar.bz2
/pypy-2.3-src.tar.bz2
/release-2.3.1.tar.bz2
+/pypy-2.4.0-src.tar.bz2
diff --git a/pypy.spec b/pypy.spec
index daf5015..4a3e56c 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 2.3.1
-Release: 4%{?dist}
+Version: 2.4.0
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -130,7 +130,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-2.3.1.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy-2.4.0-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -276,7 +276,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-32f35069a16d
+%setup -q -n pypy-2.4.0-src
%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
%patch1 -p1
%patch2 -p1
@@ -295,6 +295,8 @@ for f in rpython/translator/goal/bpnn.py ; do
chmod a-x $f
done
+rm -rf lib-python/3
+
%build
@@ -832,6 +834,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Wed Sep 10 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.4.0-1
+- Update to 2.4.0
+
* Tue Sep 02 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3.1-4
- Move devel subpackage requires so that it gets picked up by rpm
diff --git a/sources b/sources
index b80a17c..ab6b8f5 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-e9d26e6ed2ca809a791d88137e90629b release-2.3.1.tar.bz2
+6a25a212e7c5121f1f3988c118d05695 pypy-2.4.0-src.tar.bz2
commit f7434bab3f45aaf75e2d6b05664c9fd78197c10a
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Tue Sep 2 10:01:18 2014 +0200
Bump spec
diff --git a/pypy.spec b/pypy.spec
index 6f90d89..daf5015 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.3.1
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -832,6 +832,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Sep 02 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3.1-4
+- Move devel subpackage requires so that it gets picked up by rpm
+
* Sun Aug 17 2014 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.3.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
commit 5efcdc8fe2e02fffb9ffce1004f3d25a8e86d593
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Tue Sep 2 09:57:46 2014 +0200
Move devel subpackage requires so that it gets picked up by rpm
Up to this point it belonged to the description, so pypy-devel
did not require pypy.
diff --git a/pypy.spec b/pypy.spec
index f811755..6f90d89 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -250,11 +250,11 @@ Libraries required by the various PyPy implementations of Python.
%package devel
Group: Development/Languages
Summary: Development tools for working with PyPy
+Requires: pypy = %{version}-%{release}
+
%description devel
Header files for building C extension modules against PyPy
-Requires: pypy = %{version}-%{release}
-
%if 0%{with_stackless}
%package stackless
commit 7498717b84a98b28987846d94baf9177cf5b36ee
Author: Peter Robinson <pbrobinson(a)fedoraproject.org>
Date: Sun Aug 17 20:41:57 2014 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
diff --git a/pypy.spec b/pypy.spec
index 8ab5959..f811755 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.3.1
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -832,6 +832,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Sun Aug 17 2014 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.3.1-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
+
* Mon Jul 7 2014 Peter Robinson <pbrobinson(a)fedoraproject.org> 2.3.1-2
- ARMv7 is supported for JIT
- no prelink on aarch64/ppc64le
commit 43ee7785260fd8f42b86e62be70de5bc361a34d7
Author: Peter Robinson <pbrobinson(a)gmail.com>
Date: Mon Jul 7 23:07:38 2014 +0100
ARMv7 is supported for JIT, no prelink on aarch64/ppc64le
diff --git a/pypy.spec b/pypy.spec
index 7c4106a..8ab5959 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.3.1
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -78,20 +78,20 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
#
# Unfortunately, the JIT support is only available on some architectures.
#
-# pypy-1.4/pypy/jit/backend/detect_cpu.py:getcpuclassname currently supports the
+# rpython/jit/backend/detect_cpu.py:getcpuclassname currently supports the
# following options:
# 'i386', 'x86'
# 'x86-without-sse2':
# 'x86_64'
+# 'armv6', 'armv7' (versions 6 and 7, hard- and soft-float ABI)
# 'cli'
# 'llvm'
#
# We will only build with JIT support on those architectures, and build without
# it on the other archs. The resulting binary will typically be slower than
# CPython for the latter case.
-#
-%ifarch %{ix86} x86_64
-# FIXME: is there a better way of expressing "intel" here?
+
+%ifarch %{ix86} x86_64 %{arm}
%global with_jit 1
%else
%global with_jit 0
@@ -206,7 +206,10 @@ BuildRequires: time
BuildRequires: perl
%endif
+# No prelink on these arches
+%ifnarch aarch64 ppc64le
BuildRequires: /usr/bin/execstack
+%endif
# For byte-compiling the JIT-viewing mode:
%if %{with_emacs}
@@ -466,7 +469,9 @@ InstallPyPy() {
#
# I tried various approaches involving fixing the build, but the simplest
# approach is to postprocess the ELF file:
+%ifnarch aarch64 ppc64le
execstack --clear-execstack %{buildroot}/%{pypyprefix}/$ExeName
+%endif
}
mkdir -p %{buildroot}/%{_bindir}
@@ -827,6 +832,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Jul 7 2014 Peter Robinson <pbrobinson(a)fedoraproject.org> 2.3.1-2
+- ARMv7 is supported for JIT
+- no prelink on aarch64/ppc64le
+
* Sun Jun 08 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3.1-1
- Update to 2.3.1
commit edc736c1c58fc920291a8e672c906b76d6e87a31
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Sun Jun 8 20:55:40 2014 +0200
Update to 2.3.1
diff --git a/.gitignore b/.gitignore
index f59302b..1babd6b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,4 @@
/pypy-2.2-src.tar.bz2
/pypy-2.2.1-src.tar.bz2
/pypy-2.3-src.tar.bz2
+/release-2.3.1.tar.bz2
diff --git a/pypy.spec b/pypy.spec
index 96e21d5..7c4106a 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 2.3
-Release: 5%{?dist}
+Version: 2.3.1
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -130,7 +130,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(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/pypy-2.3-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/get/release-2.3.1.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -273,7 +273,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-394146e9bb67
+%setup -q -n pypy-pypy-32f35069a16d
%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
%patch1 -p1
%patch2 -p1
@@ -827,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Sun Jun 08 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3.1-1
+- Update to 2.3.1
+
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.3-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
diff --git a/sources b/sources
index 8f25b0c..b80a17c 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-c93a8e47f3b3109af2f66d2bd766eb97 pypy-2.3-src.tar.bz2
+e9d26e6ed2ca809a791d88137e90629b release-2.3.1.tar.bz2
commit 1972c9c31b94769515b1972a39a9d4efe493e6d6
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Sat Jun 7 13:12:20 2014 -0500
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
diff --git a/pypy.spec b/pypy.spec
index 6bdb671..96e21d5 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.3
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -827,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Sat Jun 07 2014 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.3-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
* Tue May 27 2014 Dennis Gilmore <dennis(a)ausil.us> - 2.3-4
- valgrind is available everywhere except 31 bit s390
commit a0374180ff792eb0a2b41434d1a3a47efe340d3e
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Tue May 27 16:16:43 2014 -0500
valgrind is available everywhere except 31 bit s390
diff --git a/pypy.spec b/pypy.spec
index 096bd7d..6bdb671 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.3
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -191,7 +191,7 @@ BuildRequires: bzip2-devel
BuildRequires: ncurses-devel
BuildRequires: expat-devel
BuildRequires: openssl-devel
-%ifarch %{ix86} x86_64 ppc ppc64 s390x
+%ifnarch s390
BuildRequires: valgrind-devel
%endif
@@ -827,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue May 27 2014 Dennis Gilmore <dennis(a)ausil.us> - 2.3-4
+- valgrind is available everywhere except 31 bit s390
+
* Wed May 21 2014 Jaroslav Škarvada <jskarvad(a)redhat.com> - 2.3-3
- Rebuilt for https://fedoraproject.org/wiki/Changes/f21tcl86
commit ce731cfa651140b831eeeabd176c041b6f9f4943
Author: Jaroslav Škarvada <jskarvad(a)redhat.com>
Date: Wed May 21 12:32:28 2014 +0200
- Rebuilt for https://fedoraproject.org/wiki/Changes/f21tcl86
diff --git a/pypy.spec b/pypy.spec
index 39b18d8..096bd7d 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.3
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -827,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Wed May 21 2014 Jaroslav Škarvada <jskarvad(a)redhat.com> - 2.3-3
+- Rebuilt for https://fedoraproject.org/wiki/Changes/f21tcl86
+
* Thu May 15 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3-2
- Rebuilt (f21-python)
commit a3993a30d37ff85750008622cc987a4650786896
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Thu May 15 12:20:24 2014 +0200
Rebuilt (f21-python)
diff --git a/pypy.spec b/pypy.spec
index 6e050f3..39b18d8 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.3
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -827,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu May 15 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3-2
+- Rebuilt (f21-python)
+
* Tue May 13 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3-1
- Updated to 2.3
commit db10290f0939d5c2dfd4d437bc2f98888752a48b
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Wed May 14 12:40:14 2014 +0200
Update to 2.3
diff --git a/.gitignore b/.gitignore
index da7257b..f59302b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,4 @@
/release-2.1.0.tar.bz2
/pypy-2.2-src.tar.bz2
/pypy-2.2.1-src.tar.bz2
+/pypy-2.3-src.tar.bz2
diff --git a/007-remove-startup-message.patch b/007-remove-startup-message.patch
index 1dddb69..2ff9068 100644
--- a/007-remove-startup-message.patch
+++ b/007-remove-startup-message.patch
@@ -2,7 +2,7 @@ diff -rup pypy-pypy-f66246c46ca3/lib_pypy/_pypy_interact.py pypy-pypy-f66246c46c
--- 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
- import os
+ irc_header = "And now for something completely different"
-def interactive_console(mainmodule=None, quiet=False):
diff --git a/pypy.spec b/pypy.spec
index c46997a..6e050f3 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 2.2.1
-Release: 3%{?dist}
+Version: 2.3
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -130,7 +130,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(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/pypy-2.2.1-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy-2.3-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -273,7 +273,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-2.2.1-src
+%setup -q -n pypy-pypy-394146e9bb67
%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
%patch1 -p1
%patch2 -p1
@@ -827,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue May 13 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3-1
+- Updated to 2.3
+
* Mon Mar 10 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.1-3
- Put RPM macros in proper location
diff --git a/sources b/sources
index f8f0564..8f25b0c 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-7ec9f48702323f9e93654ba73dd46720 pypy-2.2.1-src.tar.bz2
+c93a8e47f3b3109af2f66d2bd766eb97 pypy-2.3-src.tar.bz2
commit bca3bcda512353328ab9a768e28d0ac7b6904aa6
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Tue Mar 11 09:05:43 2014 +0100
Also chenge files section
diff --git a/pypy.spec b/pypy.spec
index 85003c1..c46997a 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -816,7 +816,7 @@ rm -rf $RPM_BUILD_ROOT
%defattr(-,root,root,-)
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
-%config(noreplace) %{_sysconfdir}/rpm/macros.pypy
+%config(noreplace) %{_rpmconfigdir}/macros.d/macros.pypy
%if 0%{with_stackless}
%files stackless
commit 4dbc78c1aab1cf75870cf055ad54a46262e3fafb
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Mon Mar 10 09:17:48 2014 +0100
Also add changelog entry
diff --git a/pypy.spec b/pypy.spec
index 6e73099..85003c1 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.2.1
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -827,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Mar 10 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.1-3
+- Put RPM macros in proper location
+
* Thu Jan 16 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.1-2
- Fixed errors due to missing __pycache__
commit 355feb2755aa6396e4fa0b512652ce25c2502ca7
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Mon Feb 3 13:24:01 2014 +0100
Put rpm macros in proper location
diff --git a/pypy.spec b/pypy.spec
index 8604207..6e73099 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -655,8 +655,8 @@ cp -a rpython/jit/tool/pypytrace-mode.el* %{buildroot}/%{_emacs_sitelispdir}
%endif
# Install macros for rpm:
-mkdir -p %{buildroot}/%{_sysconfdir}/rpm
-install -m 644 %{SOURCE2} %{buildroot}/%{_sysconfdir}/rpm
+mkdir -p %{buildroot}/%{_rpmconfigdir}/macros.d
+install -m 644 %{SOURCE2} %{buildroot}/%{_rpmconfigdir}/macros.d
%check
topdir=$(pwd)
commit f8a7311107aa7a76736e8e763a17148340131c32
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Fri Jan 17 10:46:17 2014 +0100
Fix errors due to missing __pycache__
diff --git a/pypy.spec b/pypy.spec
index 21987ac..8604207 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.2.1
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -581,10 +581,13 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
%{buildroot}/%{_bindir}/pypy \
0
-%{goal_dir}/pypy -c 'import _tkinter'
-%{goal_dir}/pypy -c 'import _sqlite3'
-%{goal_dir}/pypy -c 'import _curses'
-%{goal_dir}/pypy -c 'import syslog'
+%{buildroot}/%{pypyprefix}/pypy -c 'import _tkinter'
+%{buildroot}/%{pypyprefix}/pypy -c 'import Tkinter'
+%{buildroot}/%{pypyprefix}/pypy -c 'import _sqlite3'
+%{buildroot}/%{pypyprefix}/pypy -c 'import _curses'
+%{buildroot}/%{pypyprefix}/pypy -c 'import curses'
+%{buildroot}/%{pypyprefix}/pypy -c 'import syslog'
+%{buildroot}/%{pypyprefix}/pypy -c 'from _sqlite3 import *'
# Header files for C extension modules.
# Upstream's packaging process (pypy/tool/release/package.py)
@@ -824,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Jan 16 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.1-2
+- Fixed errors due to missing __pycache__
+
* Thu Dec 05 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.1-1
- Updated to 2.2.1
- Several bundled modules (tkinter, sqlite3, curses, syslog) were
commit 2cbecfd01cab504997f12fd8b434035e083dcec6
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Thu Jan 2 10:47:41 2014 +0100
Update to 2.2.1
diff --git a/.gitignore b/.gitignore
index fa54eea..da7257b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,4 @@
/release-2.0.2.tar.bz2
/release-2.1.0.tar.bz2
/pypy-2.2-src.tar.bz2
+/pypy-2.2.1-src.tar.bz2
diff --git a/pypy.spec b/pypy.spec
index cfb219f..21987ac 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,5 +1,5 @@
Name: pypy
-Version: 2.2.0
+Version: 2.2.1
Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
@@ -130,7 +130,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(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/pypy-2.2-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy-2.2.1-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -273,7 +273,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-2.2-src
+%setup -q -n pypy-2.2.1-src
%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
%patch1 -p1
%patch2 -p1
@@ -768,6 +768,11 @@ CheckPyPy() {
echo "--------------------------------------------------------------"
}
+#python testrunner/runner.py --logfile=pytest-A.log --config=pypy/pytest-A.cfg --config=pypy/pytest-A.py --root=pypy --timeout=3600
+#python pypy/test_all.py --pypy=pypy/goal/pypy --timeout=3600 --resultlog=cpython.log lib-python
+#python pypy/test_all.py --pypy=pypy/goal/pypy --resultlog=pypyjit.log pypy/module/pypyjit/test
+#pypy/goal/pypy pypy/test_all.py --resultlog=pypyjit_new.log
+
%if %{run_selftests}
CheckPyPy pypy
@@ -819,6 +824,12 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Dec 05 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.1-1
+- Updated to 2.2.1
+- Several bundled modules (tkinter, sqlite3, curses, syslog) were
+ not bytecompiled properly during build, that is now fixed
+- prepared new tests, not enabled yet
+
* Thu Nov 14 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.0-1
- Updated to 2.2.0
diff --git a/sources b/sources
index d5b9932..f8f0564 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-5a5a3822605d7d811066b1b279da3c6e pypy-2.2-src.tar.bz2
+7ec9f48702323f9e93654ba73dd46720 pypy-2.2.1-src.tar.bz2
commit a79a105a7453f9b3f55d296774b2b28a256d8318
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Thu Jan 2 10:45:26 2014 +0100
Bytecompiled bunch of modules
diff --git a/pypy.spec b/pypy.spec
index cd225b9..cfb219f 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -181,6 +181,10 @@ BuildRequires: python-devel
%endif
BuildRequires: libffi-devel
+BuildRequires: tcl-devel
+BuildRequires: tk-devel
+
+BuildRequires: sqlite-devel
BuildRequires: zlib-devel
BuildRequires: bzip2-devel
@@ -577,6 +581,10 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
%{buildroot}/%{_bindir}/pypy \
0
+%{goal_dir}/pypy -c 'import _tkinter'
+%{goal_dir}/pypy -c 'import _sqlite3'
+%{goal_dir}/pypy -c 'import _curses'
+%{goal_dir}/pypy -c 'import syslog'
# Header files for C extension modules.
# Upstream's packaging process (pypy/tool/release/package.py)
commit 66ffb916e263ca7b45e75d7a209248c04f918264
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Tue Nov 12 10:19:28 2013 +0100
Updated to 2.2.0
diff --git a/.gitignore b/.gitignore
index cad553e..fa54eea 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@
/release-2.0-beta-1.tar.bz2
/release-2.0.2.tar.bz2
/release-2.1.0.tar.bz2
+/pypy-2.2-src.tar.bz2
diff --git a/pypy.spec b/pypy.spec
index e7ef81f..cd225b9 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,5 +1,5 @@
Name: pypy
-Version: 2.1.0
+Version: 2.2.0
Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
@@ -130,7 +130,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-2.1.0.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy-2.2-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -162,7 +162,7 @@ Patch2: 007-remove-startup-message.patch
# Turn it off with this boolean, to revert back to rebuilding using CPython
# and avoid a cycle in the build-time dependency graph:
-%global use_self_when_building 1
+%global use_self_when_building 0
%if 0%{use_self_when_building}
BuildRequires: pypy
%global bootstrap_python_interp pypy
@@ -269,7 +269,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-352c78d2e80f
+%setup -q -n pypy-2.2-src
%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
%patch1 -p1
%patch2 -p1
@@ -811,6 +811,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Nov 14 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.0-1
+- Updated to 2.2.0
+
* Thu Aug 15 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.1-1
- Updated to 2.1.0
diff --git a/sources b/sources
index fff5a1a..d5b9932 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-59af571317843a1759cb1ff392c26260 release-2.1.0.tar.bz2
+5a5a3822605d7d811066b1b279da3c6e pypy-2.2-src.tar.bz2
commit febbbdb0e4b360dffdd77a04e5101afc16e463a8
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Fri Aug 16 10:12:29 2013 +0200
Updated to 2.1.0
diff --git a/.gitignore b/.gitignore
index 63a65d6..cad553e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@
/release-1.9.tar.bz2
/release-2.0-beta-1.tar.bz2
/release-2.0.2.tar.bz2
+/release-2.1.0.tar.bz2
diff --git a/pypy.spec b/pypy.spec
index 1c72138..e7ef81f 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,8 +1,6 @@
-%global alphatag b1
-
Name: pypy
-Version: 2.0.2
-Release: 5%{?dist}
+Version: 2.1.0
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -132,50 +130,28 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-2.0.2.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/get/release-2.1.0.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
-Source2: macros.pypy
-
-# Edit a translator file for linux in order to configure our cflags and dynamic libffi
-Patch0: config.patch
+Source2: macros.pypy
# 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:
-Patch1: pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
-
-# Try to improve the readability of the generated .c code, by adding in the
-# RPython source as comments where possible.
-# A version of this was sent upstream as:
-# http://codespeak.net/pipermail/pypy-dev/2010q4/006532.html
-# TODO: get this into the upstream bug tracker, and finish inlining
-# support (rhbz#666963)
-Patch4: more-readable-c-code.patch
-
-# In my koji builds, /root/bin is in the PATH for some reason
-# This leads to test_subprocess.py failing, due to "test_leaking_fds_on_error"
-# trying every dir in PATH for "nonexisting_i_hope", which leads to it raising
-# OSError: [Errno 13] Permission denied
-# when it tries to read /root/bin, rather than raising "No such file"
-#
-# Work around this by specifying an absolute path for the non-existant
-# executable
-# Not yet sent upstream
-Patch5: pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
+Patch0: pypy-1.2-suppress-mandelbrot-set-during-tty-build.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
# and linker are captured:
-Patch6: 006-always-log-stdout.patch
+Patch1: 006-always-log-stdout.patch
# Disable the printing of a quote from IRC on startup (these are stored in
# ROT13 form in lib_pypy/_pypy_irc_topic.py). Some are cute, but some could
# cause confusion for end-users (and many are in-jokes within the PyPy
# community that won't make sense outside of it). [Sorry to be a killjoy]
-Patch7: 007-remove-startup-message.patch
+Patch2: 007-remove-startup-message.patch
# Build-time requirements:
@@ -186,37 +162,7 @@ Patch7: 007-remove-startup-message.patch
# Turn it off with this boolean, to revert back to rebuilding using CPython
# and avoid a cycle in the build-time dependency graph:
-# I'm disabling the self-hosting for now, due to a fatal error seen inside the
-# JIT, presumably whilst JIT-compiling something within the translator's
-# inliner.
-#
-# Specifically, building pypy-1.4.1-7.fc15.src.rpm on x86_64 using pypy-1.4.1-5.fc15.x86_64
-# http://koji.fedoraproject.org/koji/taskinfo?taskID=2721517
-# failed with this RPython traceback:
-# ... snip ...
-# [rtyper:WARNING] prebuilt instance <pypy.rpython.memory.gctransform.asmgcroot.ShapeDecompressor instance at 0x00000000f0b5bc80> has no attribute 'addr'
-# [rtyper] specializing: 179300 / 180508 blocks (99%)
-# [rtyper] specializing: 180500 / 180566 blocks (99%)
-# [rtyper] -=- specialized 1363 more blocks -=-
-# [rtyper] specializing: 180600 / 180777 blocks (99%)
-# [rtyper] -=- specialized 211 more blocks -=-
-# [backendopt:inlining] phase with threshold factor: 32.4
-# [backendopt:inlining] heuristic: pypy.translator.backendopt.inline.inlining_heuristic
-# [x86/regalloc] Bogus arg in operation 76 at 0
-# RPython traceback:
-# File "implement_62.c", line 39979, in send_bridge_to_backend
-# File "implement_69.c", line 65301, in Assembler386_assemble_bridge
-# File "implement_72.c", line 8078, in RegAlloc_prepare_bridge
-# File "implement_40.c", line 53061, in RegAlloc__prepare
-# File "implement_44.c", line 14305, in RegAlloc__compute_vars_longevity
-# Fatal RPython error: NotImplementedError
-#
-# This appears to be deep within pypy/jit/backend/x86/regalloc.py which has
-# called "not_implemented" to emit this message to stderr, before raising the
-# exception:
-# [x86/regalloc] Bogus arg in operation 76 at 0
-
-%global use_self_when_building 0
+%global use_self_when_building 1
%if 0%{use_self_when_building}
BuildRequires: pypy
%global bootstrap_python_interp pypy
@@ -234,12 +180,6 @@ BuildRequires: python-devel
%endif
-
-# FIXME: I'm seeing errors like this in the logs:
-# [translation:WARNING] The module '_rawffi' is disabled
-# [translation:WARNING] because importing pypy.rlib.libffi raised ImportError
-# [translation:WARNING] 'libffi.a' not found in ['/usr/lib/libffi', '/usr/lib']
-# Presumably we need to fix things to support dynamically-linked libffi
BuildRequires: libffi-devel
BuildRequires: zlib-devel
@@ -269,11 +209,6 @@ BuildRequires: /usr/bin/execstack
BuildRequires: emacs
%endif
-# pypy is bundling these so we delete them in %%prep. I don't think they are
-# needed unless we build pypy targetted at running on the jvm.
-#BuildRequires: jna
-#BuildRequires: jasmin # Not yet in Fedora
-
# Metadata for the core package (the JIT build):
Requires: pypy-libs = %{version}-%{release}
@@ -334,47 +269,10 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-f66246c46ca3
-%patch0 -p1 -b .configure-fedora
-%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
-
-# Disabled for now, as it needs regenerating for 1.8
-#patch4 -p1 -b .more-readable-c-code
-# Fails on 1.8 with this error:
-# [translation:ERROR] Error:
-# [translation:ERROR] Traceback (most recent call last):
-# [translation:ERROR] File "translate.py", line 309, in main
-# [translation:ERROR] drv.proceed(goals)
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/driver.py", line 811, in proceed
-# [translation:ERROR] return self._execute(goals, task_skip = self._maybe_skip())
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/tool/taskengine.py", line 116, in _execute
-# [translation:ERROR] res = self._do(goal, taskcallable, *args, **kwds)
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/driver.py", line 287, in _do
-# [translation:ERROR] res = func()
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/driver.py", line 530, in task_source_c
-# [translation:ERROR] exe_name=exe_name)
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 252, in generate_source
-# [translation:ERROR] split=self.split)
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 989, in gen_source
-# [translation:ERROR] sg.gen_readable_parts_of_source(f)
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 843, in gen_readable_parts_of_source
-# [translation:ERROR] for node, impl in nodeiter:
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 729, in subiter
-# [translation:ERROR] impl = '\n'.join(list(node.implementation())).split('\n')
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/node.py", line 867, in implementation
-# [translation:ERROR] for s in self.funcgen_implementation(funcgen):
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/node.py", line 901, in funcgen_implementation
-# [translation:ERROR] for line in bodyiter:
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/funcgen.py", line 272, in cfunction_body
-# [translation:ERROR] blocks.sort(block_comparator)
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/funcgen.py", line 34, in block_comparator
-# [translation:ERROR] if blk0.isstartblock:
-# [translation:ERROR] AttributeError: 'Block' object has no attribute 'isstartblock'
-
-%patch5 -p1
-%patch6 -p1
-%patch7 -p1
-
+%setup -q -n pypy-pypy-352c78d2e80f
+%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
+%patch1 -p1
+%patch2 -p1
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
@@ -383,15 +281,6 @@ find -name "*.py" -exec \
"{}" \
\;
-find . -name '*.jar' -exec rm \{\} \;
-
-# Remove stray ".svn" directories present within the 1.4.1 tarball
-# (reported as https://codespeak.net/issue/pypy-dev/issue612 )
-find . -path '*/.svn*' -delete
-
-# Remove DOS batch files:
-find -name "*.bat"|xargs rm -f
-
for f in rpython/translator/goal/bpnn.py ; do
# Detect shebang lines && remove them:
sed -e '/^#!/Q 0' -e 'Q 1' $f \
@@ -399,6 +288,7 @@ for f in rpython/translator/goal/bpnn.py ; do
chmod a-x $f
done
+
%build
BuildPyPy() {
@@ -540,10 +430,10 @@ BuildPyPy \
%{_emacs_bytecompile} rpython/jit/tool/pypytrace-mode.el
%endif
+
%install
rm -rf $RPM_BUILD_ROOT
-
# Install the various executables:
InstallPyPy() {
@@ -921,6 +811,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Aug 15 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.1-1
+- Updated to 2.1.0
+
* Sun Aug 04 2013 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.0.2-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
diff --git a/sources b/sources
index a37f747..fff5a1a 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-328a509c092b5477f99be8dd452d81c2 release-2.0.2.tar.bz2
+59af571317843a1759cb1ff392c26260 release-2.1.0.tar.bz2
commit 309e1cf6aab2cc2ecf9ae9897a22f271a9d4fb9c
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Sun Aug 4 01:04:23 2013 -0500
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
diff --git a/pypy.spec b/pypy.spec
index 8f28baf..1c72138 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -2,7 +2,7 @@
Name: pypy
Version: 2.0.2
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -921,6 +921,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Sun Aug 04 2013 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.0.2-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
+
* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-4
- Patch1 fix
commit b4e1c2185a5384e5ba4d898fe7fbca0ad3db45c2
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Mon Jun 24 10:44:06 2013 +0200
Patch1 fix
diff --git a/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch b/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
index 257f60f..c97eaf3 100644
--- a/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
+++ b/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
@@ -1,7 +1,6 @@
-diff --git a/pypy/tool/ansi_print.py b/pypy/tool/ansi_print.py
-index 3eff27c..fac4ba2 100644
---- a/pypy/tool/ansi_print.py
-+++ b/pypy/tool/ansi_print.py
+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)
diff --git a/pypy.spec b/pypy.spec
index 2470609..8f28baf 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -2,7 +2,7 @@
Name: pypy
Version: 2.0.2
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -921,6 +921,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-4
+- Patch1 fix
+
* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-3
- Yet another Sources fix
commit 8c737bc2aa985ae04d4540daefef663e827f8ba2
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Mon Jun 24 10:29:01 2013 +0200
Yet another Sources fix
diff --git a/.gitignore b/.gitignore
index 2793282..63a65d6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@
/release-1.8.tar.bz2
/release-1.9.tar.bz2
/release-2.0-beta-1.tar.bz2
+/release-2.0.2.tar.bz2
diff --git a/pypy.spec b/pypy.spec
index 66a66a9..2470609 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -2,7 +2,7 @@
Name: pypy
Version: 2.0.2
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -132,7 +132,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-2.0.2.tar.bz2#/pypy-pypy-f662...
+Source0: https://bitbucket.org/pypy/pypy/get/release-2.0.2.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -921,6 +921,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-3
+- Yet another Sources fix
+
* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-2
- Fixed Source URL
diff --git a/sources b/sources
index e7d211b..a37f747 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-4a346df59983e4a5c50e8ee211f80619 release-2.0-beta-1.tar.bz2
+328a509c092b5477f99be8dd452d81c2 release-2.0.2.tar.bz2
commit 5694529edb24cba3edd56720cee077b791e8378c
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Mon Jun 24 09:24:07 2013 +0200
Fixed Source URL
diff --git a/pypy.spec b/pypy.spec
index 1ce9198..66a66a9 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -2,7 +2,7 @@
Name: pypy
Version: 2.0.2
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -132,7 +132,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-2.0.2.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/get/release-2.0.2.tar.bz2#/pypy-pypy-f662...
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -921,6 +921,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-2
+- Fixed Source URL
+
* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-1
- 2.0.2, patch 8 does not seem necessary anymore
commit c3a10ade23f8dac35b5ef0edc6f2c23856705044
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Mon Jun 24 08:57:35 2013 +0200
Updated to 2.0.2
diff --git a/006-always-log-stdout.patch b/006-always-log-stdout.patch
index 2df1f00..5d49335 100644
--- a/006-always-log-stdout.patch
+++ b/006-always-log-stdout.patch
@@ -1,6 +1,7 @@
---- pypy-pypy-341e1e3821ff/pypy/translator/platform/__init__.py.always_log_stdout 2012-07-06 11:13:46.878979461 -0400
-+++ pypy-pypy-341e1e3821ff/pypy/translator/platform/__init__.py 2012-07-06 11:25:26.281235732 -0400
-@@ -126,6 +126,8 @@ class Platform(object):
+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):
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 e05586b..1dddb69 100644
--- a/007-remove-startup-message.patch
+++ b/007-remove-startup-message.patch
@@ -1,21 +1,12 @@
---- pypy-pypy-341e1e3821ff/lib_pypy/_pypy_interact.py.remove_startup_message 2012-07-06 12:10:46.504228264 -0400
-+++ pypy-pypy-341e1e3821ff/lib_pypy/_pypy_interact.py 2012-07-06 12:11:01.986034714 -0400
-@@ -13,18 +13,6 @@ def interactive_console(mainmodule=None)
- sys.ps2 = '.... '
- #
- try:
-- from _pypy_irc_topic import some_topic
-- text = "And now for something completely different: ``%s''" % (
-- some_topic(),)
-- while len(text) >= 80:
-- i = text[:80].rfind(' ')
-- print text[:i]
-- text = text[i+1:]
-- print text
-- except ImportError:
-- pass
-- #
-- try:
- if not os.isatty(sys.stdin.fileno()):
- # Bail out if stdin is not tty-like, as pyrepl wouldn't be happy
- # For example, with:
+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
+ import os
+
+
+-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/config.patch b/config.patch
index a11f397..bf81d7d 100644
--- a/config.patch
+++ b/config.patch
@@ -1,7 +1,7 @@
-diff -up pypy-pypy-2346207d9946/pypy/translator/platform/linux.py.configure-fedora pypy-pypy-2346207d9946/pypy/translator/platform/linux.py
---- pypy-pypy-2346207d9946/pypy/translator/platform/linux.py.configure-fedora 2012-02-09 13:27:19.000000000 -0500
-+++ pypy-pypy-2346207d9946/pypy/translator/platform/linux.py 2012-02-10 09:06:20.393066016 -0500
-@@ -31,13 +31,14 @@ class BaseLinux(BasePosix):
+diff -rup pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py
+--- pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py 2013-05-27 10:35:37.679237332 +0200
++++ pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py 2013-05-27 10:47:41.506354482 +0200
+@@ -32,19 +32,20 @@ class BaseLinux(BasePosix):
return self._pkg_config("libffi", "--libs-only-L",
['/usr/lib/libffi'])
@@ -9,15 +9,27 @@ diff -up pypy-pypy-2346207d9946/pypy/translator/platform/linux.py.configure-fedo
- # places where we need to look for libffi.a
- # XXX obscuuure! only look for libffi.a if run with translate.py
- if 'translate' in sys.modules:
-- return self.library_dirs_for_libffi() + ['/usr/lib']
+- if sys.maxint > 2**32:
+- host = 'x86_64'
+- else:
+- host = 'x86'
+- return self.library_dirs_for_libffi() + [
+- '/usr/lib',
+- '/usr/lib/%s-linux-gnu/' % host]
- else:
- return []
-+ # Fedora, at least, has the shared version but not the static:
++ #Fedora, at least, has the shared version but not the static:
+ #def library_dirs_for_libffi_a(self):
+ # # places where we need to look for libffi.a
+ # # XXX obscuuure! only look for libffi.a if run with translate.py
+ # if 'translate' in sys.modules:
-+ # return self.library_dirs_for_libffi() + ['/usr/lib']
++ # if sys.maxint > 2**32:
++ # host = 'x86_64'
++ # else:
++ # host = 'x86'
++ # return self.library_dirs_for_libffi() + [
++ # '/usr/lib',
++ # '/usr/lib/%s-linux-gnu/' % host]
+ # else:
+ # return []
diff --git a/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch b/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
index 9071be5..2391f32 100644
--- a/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
+++ b/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
@@ -1,6 +1,7 @@
---- pypy-pypy-2346207d9946/lib-python/2.7/test/test_subprocess.py.orig 2012-02-09 13:27:19.000000000 -0500
-+++ pypy-pypy-2346207d9946/lib-python/2.7/test/test_subprocess.py 2012-02-10 09:14:08.312216221 -0500
-@@ -570,7 +570,7 @@ class ProcessTestCase(BaseTestCase):
+diff -rup pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py
+--- pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py 2013-05-27 10:35:37.762237806 +0200
++++ pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py 2013-05-28 10:13:03.182536196 +0200
+@@ -587,7 +587,7 @@ class ProcessTestCase(BaseTestCase):
for i in range(1024):
# Windows raises IOError. Others raise OSError.
with self.assertRaises(EnvironmentError) as c:
diff --git a/pypy.spec b/pypy.spec
index dbcbc8d..1ce9198 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,8 +1,8 @@
%global alphatag b1
Name: pypy
-Version: 2.0
-Release: 0.2.%{alphatag}%{?dist}
+Version: 2.0.2
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -123,7 +123,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%global pylibver 2.7
# We refer to this subdir of the source tree in a few places during the build:
-%global goal_dir pypy/translator/goal
+%global goal_dir pypy/goal
# Turn off the brp-python-bytecompile postprocessing script
@@ -132,7 +132,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-2.0-beta-1.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/get/release-2.0.2.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -177,21 +177,6 @@ Patch6: 006-always-log-stdout.patch
# community that won't make sense outside of it). [Sorry to be a killjoy]
Patch7: 007-remove-startup-message.patch
-# With pypy-1.9-1.fc17.x86_64, the pypy binary exposes about 200k symbols to
-# the dynamic linker:
-# $ eu-readelf -s $(which pypy) | head
-# Symbol table [ 5] '.dynsym' contains 194163 entries:
-# which is far more than necessary.
-# Fix the version script for the linker as invoked thus in the Makefile:
-# "-Wl,--export-dynamic,--version-script=../dynamic-symbols-6"
-# so that it contains a "local: *;" clause, thus hiding the bulk of the
-# symbols from the dynamic linker.
-# Ideally we'd add:
-# __attribute__ ((visibility ("hidden")))
-# to most symbols, allowing the compiler to potentially generate better code.
-# Not yet reported upstream
-Patch8: 008-fix-dynamic-symbols-script.patch
-
# Build-time requirements:
@@ -349,7 +334,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-07e08e9c885c
+%setup -q -n pypy-pypy-f66246c46ca3
%patch0 -p1 -b .configure-fedora
%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
@@ -389,7 +374,6 @@ Build of PyPy with support for micro-threads for massive concurrency
%patch5 -p1
%patch6 -p1
%patch7 -p1
-%patch8 -p1
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
@@ -408,9 +392,7 @@ find . -path '*/.svn*' -delete
# Remove DOS batch files:
find -name "*.bat"|xargs rm -f
-# The "demo" directory gets auto-installed by virture of being listed in %doc
-# Remove shebang lines from demo .py files, and remove executability from them:
-for f in demo/bpnn.py ; do
+for f in rpython/translator/goal/bpnn.py ; do
# Detect shebang lines && remove them:
sed -e '/^#!/Q 0' -e 'Q 1' $f \
&& sed -i '1d' $f
@@ -522,15 +504,11 @@ BuildPyPy() {
RPM_BUILD_ROOT= \
PYPY_USESSION_DIR=$(pwd) \
PYPY_USESSION_BASENAME=$ExeName \
- $INTERP translate.py \
-%if 0%{verbose_logs}
- --translation-verbose \
-%endif
- --cflags="$CFLAGS" \
- --batch \
+ $INTERP ../../rpython/bin/rpython \
--output=$ExeName \
%{gcrootfinder_options} \
- $Options
+ $Options \
+ targetpypystandalone
echo "--------------------------------------------------------------"
echo "--------------------------------------------------------------"
@@ -559,7 +537,7 @@ BuildPyPy \
%endif
%if %{with_emacs}
-%{_emacs_bytecompile} pypy/jit/tool/pypytrace-mode.el
+%{_emacs_bytecompile} rpython/jit/tool/pypytrace-mode.el
%endif
%install
@@ -772,7 +750,7 @@ find \
# Install the JIT trace mode for Emacs:
%if %{with_emacs}
mkdir -p %{buildroot}/%{_emacs_sitelispdir}
-cp -a pypy/jit/tool/pypytrace-mode.el* %{buildroot}/%{_emacs_sitelispdir}
+cp -a rpython/jit/tool/pypytrace-mode.el* %{buildroot}/%{_emacs_sitelispdir}
%endif
# Install macros for rpm:
@@ -908,7 +886,7 @@ rm -rf $RPM_BUILD_ROOT
%files libs
%defattr(-,root,root,-)
-%doc LICENSE README demo
+%doc LICENSE README.rst
%dir %{pypyprefix}
%dir %{pypyprefix}/lib-python
@@ -924,7 +902,7 @@ rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root,-)
-%doc LICENSE README
+%doc LICENSE README.rst
%{_bindir}/pypy
%{pypyprefix}/pypy
@@ -937,12 +915,15 @@ rm -rf $RPM_BUILD_ROOT
%if 0%{with_stackless}
%files stackless
%defattr(-,root,root,-)
-%doc LICENSE README
+%doc LICENSE README.rst
%{_bindir}/pypy-stackless
%endif
%changelog
+* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-1
+- 2.0.2, patch 8 does not seem necessary anymore
+
* Thu Feb 14 2013 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.0-0.2.b1
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
commit fd80b8a933ad44429dfb88ee58aecaf24faf9135
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Thu Feb 14 12:48:36 2013 -0600
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
diff --git a/pypy.spec b/pypy.spec
index b29583d..dbcbc8d 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -2,7 +2,7 @@
Name: pypy
Version: 2.0
-Release: 0.1.%{alphatag}%{?dist}
+Release: 0.2.%{alphatag}%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -943,6 +943,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Feb 14 2013 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.0-0.2.b1
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
+
* Tue Dec 11 2012 David Malcolm <dmalcolm(a)redhat.com> - 2.0-0.1.b1
- 2.0b1 (drop upstreamed patch 9)
commit 8e0c0345a5ec642705520ed20aad13dfb15ec7c2
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Thu Dec 13 06:16:11 2012 -0500
2.0-0.1.b1
diff --git a/.gitignore b/.gitignore
index 4c551cc..2793282 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@
/release-1.7.tar.bz2
/release-1.8.tar.bz2
/release-1.9.tar.bz2
+/release-2.0-beta-1.tar.bz2
diff --git a/009-add-PyInt_AsUnsignedLongLongMask.patch b/009-add-PyInt_AsUnsignedLongLongMask.patch
deleted file mode 100644
index dae7e16..0000000
--- a/009-add-PyInt_AsUnsignedLongLongMask.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-diff --git a/pypy/module/cpyext/intobject.py b/pypy/module/cpyext/intobject.py
---- a/pypy/module/cpyext/intobject.py
-+++ b/pypy/module/cpyext/intobject.py
-@@ -6,7 +6,7 @@
- PyObject, PyObjectFields, CONST_STRING, CANNOT_FAIL, Py_ssize_t)
- from pypy.module.cpyext.pyobject import (
- make_typedescr, track_reference, RefcountState, from_ref)
--from pypy.rlib.rarithmetic import r_uint, intmask, LONG_TEST
-+from pypy.rlib.rarithmetic import r_uint, intmask, LONG_TEST, r_ulonglong
- from pypy.objspace.std.intobject import W_IntObject
- import sys
-
-@@ -83,6 +83,20 @@
- num = space.bigint_w(w_int)
- return num.uintmask()
-
-+@cpython_api([PyObject], rffi.ULONGLONG, error=-1)
-+def PyInt_AsUnsignedLongLongMask(space, w_obj):
-+ """Will first attempt to cast the object to a PyIntObject or
-+ PyLongObject, if it is not already one, and then return its value as
-+ unsigned long long, without checking for overflow.
-+ """
-+ w_int = space.int(w_obj)
-+ if space.is_true(space.isinstance(w_int, space.w_int)):
-+ num = space.int_w(w_int)
-+ return r_ulonglong(num)
-+ else:
-+ num = space.bigint_w(w_int)
-+ return num.ulonglongmask()
-+
- @cpython_api([PyObject], lltype.Signed, error=CANNOT_FAIL)
- def PyInt_AS_LONG(space, w_int):
- """Return the value of the object w_int. No error checking is performed."""
-diff --git a/pypy/module/cpyext/test/test_intobject.py b/pypy/module/cpyext/test/test_intobject.py
---- a/pypy/module/cpyext/test/test_intobject.py
-+++ b/pypy/module/cpyext/test/test_intobject.py
-@@ -34,6 +34,11 @@
- assert (api.PyInt_AsUnsignedLongMask(space.wrap(10**30))
- == 10**30 % ((sys.maxint + 1) * 2))
-
-+ assert (api.PyInt_AsUnsignedLongLongMask(space.wrap(sys.maxint))
-+ == sys.maxint)
-+ assert (api.PyInt_AsUnsignedLongLongMask(space.wrap(10**30))
-+ == 10**30 % (2**64))
-+
- def test_coerce(self, space, api):
- class Coerce(object):
- def __int__(self):
diff --git a/pypy.spec b/pypy.spec
index 057fbdd..b29583d 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,8 @@
+%global alphatag b1
+
Name: pypy
-Version: 1.9
-Release: 4%{?dist}
+Version: 2.0
+Release: 0.1.%{alphatag}%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -130,7 +132,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-%{version}.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/get/release-2.0-beta-1.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -191,12 +193,6 @@ Patch7: 007-remove-startup-message.patch
Patch8: 008-fix-dynamic-symbols-script.patch
-# Cherrypick upstream patch to add PyInt_AsUnsignedLongLongMask (used by
-# the rpm python bindings); see https://bugs.pypy.org/issue1211
-# This is https://bitbucket.org/pypy/pypy/changeset/542d481517d3
-Patch9: 009-add-PyInt_AsUnsignedLongLongMask.patch
-
-
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
@@ -353,7 +349,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-341e1e3821ff
+%setup -q -n pypy-pypy-07e08e9c885c
%patch0 -p1 -b .configure-fedora
%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
@@ -394,7 +390,6 @@ Build of PyPy with support for micro-threads for massive concurrency
%patch6 -p1
%patch7 -p1
%patch8 -p1
-%patch9 -p1
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
@@ -631,6 +626,10 @@ 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 \
@@ -944,6 +943,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Dec 11 2012 David Malcolm <dmalcolm(a)redhat.com> - 2.0-0.1.b1
+- 2.0b1 (drop upstreamed patch 9)
+
* Sat Jul 21 2012 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 1.9-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
diff --git a/sources b/sources
index 2a64332..e7d211b 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-f92c0171a9578a3e4a0f74947ec596ab release-1.9.tar.bz2
+4a346df59983e4a5c50e8ee211f80619 release-2.0-beta-1.tar.bz2
commit cd9f89c255519e6d52d820882b9cc72cc74932b7
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Fri Jul 20 23:22:27 2012 -0500
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
diff --git a/pypy.spec b/pypy.spec
index 2ed932b..057fbdd 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.9
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -944,6 +944,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Sat Jul 21 2012 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 1.9-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
+
* Tue Jul 10 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.9-3
- log all output from "make" (patch 6)
- disable the MOTD at startup (patch 7)
commit 26f62305fe07f9429bb6f4dc47d8749d7bd8ca7f
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Tue Jul 10 16:45:52 2012 -0400
1.9-3
* Tue Jul 10 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.9-3
- log all output from "make" (patch 6)
- disable the MOTD at startup (patch 7)
- hide symbols from the dynamic linker (patch 8)
- add PyInt_AsUnsignedLongLongMask (patch 9)
- capture the Makefile, the typeids.txt, and the dynamic-symbols file within
the debuginfo package
diff --git a/006-always-log-stdout.patch b/006-always-log-stdout.patch
new file mode 100644
index 0000000..2df1f00
--- /dev/null
+++ b/006-always-log-stdout.patch
@@ -0,0 +1,11 @@
+--- pypy-pypy-341e1e3821ff/pypy/translator/platform/__init__.py.always_log_stdout 2012-07-06 11:13:46.878979461 -0400
++++ pypy-pypy-341e1e3821ff/pypy/translator/platform/__init__.py 2012-07-06 11:25:26.281235732 -0400
+@@ -126,6 +126,8 @@ class Platform(object):
+ self._handle_error(returncode, stdout, stderr, outname)
+
+ def _handle_error(self, returncode, stdout, stderr, outname):
++ for line in stdout.splitlines():
++ log.message(line)
+ if returncode != 0:
+ errorfile = outname.new(ext='errors')
+ errorfile.write(stderr, 'wb')
diff --git a/007-remove-startup-message.patch b/007-remove-startup-message.patch
new file mode 100644
index 0000000..e05586b
--- /dev/null
+++ b/007-remove-startup-message.patch
@@ -0,0 +1,21 @@
+--- pypy-pypy-341e1e3821ff/lib_pypy/_pypy_interact.py.remove_startup_message 2012-07-06 12:10:46.504228264 -0400
++++ pypy-pypy-341e1e3821ff/lib_pypy/_pypy_interact.py 2012-07-06 12:11:01.986034714 -0400
+@@ -13,18 +13,6 @@ def interactive_console(mainmodule=None)
+ sys.ps2 = '.... '
+ #
+ try:
+- from _pypy_irc_topic import some_topic
+- text = "And now for something completely different: ``%s''" % (
+- some_topic(),)
+- while len(text) >= 80:
+- i = text[:80].rfind(' ')
+- print text[:i]
+- text = text[i+1:]
+- print text
+- except ImportError:
+- pass
+- #
+- try:
+ if not os.isatty(sys.stdin.fileno()):
+ # Bail out if stdin is not tty-like, as pyrepl wouldn't be happy
+ # For example, with:
diff --git a/008-fix-dynamic-symbols-script.patch b/008-fix-dynamic-symbols-script.patch
new file mode 100644
index 0000000..5b1d551
--- /dev/null
+++ b/008-fix-dynamic-symbols-script.patch
@@ -0,0 +1,15 @@
+diff --git a/pypy/translator/platform/posix.py b/pypy/translator/platform/posix.py
+--- a/pypy/translator/platform/posix.py
++++ b/pypy/translator/platform/posix.py
+@@ -48,8 +48,10 @@
+ response_file = self._make_response_file("dynamic-symbols-")
+ f = response_file.open("w")
+ f.write("{\n")
++ f.write(" global:\n")
+ for sym in eci.export_symbols:
+- f.write("%s;\n" % (sym,))
++ f.write(" %s;\n" % (sym,))
++ f.write(" local:*;\n")
+ f.write("};")
+ f.close()
+
diff --git a/009-add-PyInt_AsUnsignedLongLongMask.patch b/009-add-PyInt_AsUnsignedLongLongMask.patch
new file mode 100644
index 0000000..dae7e16
--- /dev/null
+++ b/009-add-PyInt_AsUnsignedLongLongMask.patch
@@ -0,0 +1,48 @@
+diff --git a/pypy/module/cpyext/intobject.py b/pypy/module/cpyext/intobject.py
+--- a/pypy/module/cpyext/intobject.py
++++ b/pypy/module/cpyext/intobject.py
+@@ -6,7 +6,7 @@
+ PyObject, PyObjectFields, CONST_STRING, CANNOT_FAIL, Py_ssize_t)
+ from pypy.module.cpyext.pyobject import (
+ make_typedescr, track_reference, RefcountState, from_ref)
+-from pypy.rlib.rarithmetic import r_uint, intmask, LONG_TEST
++from pypy.rlib.rarithmetic import r_uint, intmask, LONG_TEST, r_ulonglong
+ from pypy.objspace.std.intobject import W_IntObject
+ import sys
+
+@@ -83,6 +83,20 @@
+ num = space.bigint_w(w_int)
+ return num.uintmask()
+
++@cpython_api([PyObject], rffi.ULONGLONG, error=-1)
++def PyInt_AsUnsignedLongLongMask(space, w_obj):
++ """Will first attempt to cast the object to a PyIntObject or
++ PyLongObject, if it is not already one, and then return its value as
++ unsigned long long, without checking for overflow.
++ """
++ w_int = space.int(w_obj)
++ if space.is_true(space.isinstance(w_int, space.w_int)):
++ num = space.int_w(w_int)
++ return r_ulonglong(num)
++ else:
++ num = space.bigint_w(w_int)
++ return num.ulonglongmask()
++
+ @cpython_api([PyObject], lltype.Signed, error=CANNOT_FAIL)
+ def PyInt_AS_LONG(space, w_int):
+ """Return the value of the object w_int. No error checking is performed."""
+diff --git a/pypy/module/cpyext/test/test_intobject.py b/pypy/module/cpyext/test/test_intobject.py
+--- a/pypy/module/cpyext/test/test_intobject.py
++++ b/pypy/module/cpyext/test/test_intobject.py
+@@ -34,6 +34,11 @@
+ assert (api.PyInt_AsUnsignedLongMask(space.wrap(10**30))
+ == 10**30 % ((sys.maxint + 1) * 2))
+
++ assert (api.PyInt_AsUnsignedLongLongMask(space.wrap(sys.maxint))
++ == sys.maxint)
++ assert (api.PyInt_AsUnsignedLongLongMask(space.wrap(10**30))
++ == 10**30 % (2**64))
++
+ def test_coerce(self, space, api):
+ class Coerce(object):
+ def __int__(self):
diff --git a/pypy.spec b/pypy.spec
index e579720..2ed932b 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.9
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -164,6 +164,39 @@ Patch4: more-readable-c-code.patch
# Not yet sent upstream
Patch5: pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.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
+# and linker are captured:
+Patch6: 006-always-log-stdout.patch
+
+# Disable the printing of a quote from IRC on startup (these are stored in
+# ROT13 form in lib_pypy/_pypy_irc_topic.py). Some are cute, but some could
+# cause confusion for end-users (and many are in-jokes within the PyPy
+# community that won't make sense outside of it). [Sorry to be a killjoy]
+Patch7: 007-remove-startup-message.patch
+
+# With pypy-1.9-1.fc17.x86_64, the pypy binary exposes about 200k symbols to
+# the dynamic linker:
+# $ eu-readelf -s $(which pypy) | head
+# Symbol table [ 5] '.dynsym' contains 194163 entries:
+# which is far more than necessary.
+# Fix the version script for the linker as invoked thus in the Makefile:
+# "-Wl,--export-dynamic,--version-script=../dynamic-symbols-6"
+# so that it contains a "local: *;" clause, thus hiding the bulk of the
+# symbols from the dynamic linker.
+# Ideally we'd add:
+# __attribute__ ((visibility ("hidden")))
+# to most symbols, allowing the compiler to potentially generate better code.
+# Not yet reported upstream
+Patch8: 008-fix-dynamic-symbols-script.patch
+
+
+# Cherrypick upstream patch to add PyInt_AsUnsignedLongLongMask (used by
+# the rpm python bindings); see https://bugs.pypy.org/issue1211
+# This is https://bitbucket.org/pypy/pypy/changeset/542d481517d3
+Patch9: 009-add-PyInt_AsUnsignedLongLongMask.patch
+
+
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
@@ -358,6 +391,11 @@ Build of PyPy with support for micro-threads for massive concurrency
# [translation:ERROR] AttributeError: 'Block' object has no attribute 'isstartblock'
%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
+%patch9 -p1
+
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
@@ -696,15 +734,31 @@ mkdir -p %{buildroot}%{pypy_debuginfo_dir}
# copy over everything:
cp -a pypy %{buildroot}%{pypy_debuginfo_dir}
-# ...then delete files that aren't .py files:
+# ...then delete files that aren't:
+# - *.py files
+# - the Makefile
+# - typeids.txt
+# - dynamic-symbols-*
find \
- %{buildroot}%{pypy_debuginfo_dir} \
- \( -type f \
- -a \
- \! -name "*.py" \
- \) \
+ %{buildroot}%{pypy_debuginfo_dir} \
+ \( -type f \
+ -a \
+ \! \( -name "*.py" \
+ -o \
+ -name "Makefile" \
+ -o \
+ -name "typeids.txt" \
+ -o \
+ -name "dynamic-symbols-*" \
+ \) \
+ \) \
-delete
+# Alternatively, we could simply keep everything. This leads to a ~350MB
+# debuginfo package, but it makes it easy to hack on the Makefile and C build
+# flags by rebuilding/linking the sources.
+# To do so, remove the above "find" command.
+
# We don't need bytecode for these files; they are being included for reference
# purposes.
# There are some rpmlint warnings from these files:
@@ -890,6 +944,14 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Jul 10 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.9-3
+- log all output from "make" (patch 6)
+- disable the MOTD at startup (patch 7)
+- hide symbols from the dynamic linker (patch 8)
+- add PyInt_AsUnsignedLongLongMask (patch 9)
+- capture the Makefile, the typeids.txt, and the dynamic-symbols file within
+the debuginfo package
+
* Mon Jun 18 2012 Peter Robinson <pbrobinson(a)fedoraproject.org> - 1.9-2
- Compile with PIC, fixes FTBFS on ARM
commit 92ec0ebc5bf5746a03e45726d8e300ef51ff7940
Author: Peter Robinson <pbrobinson(a)gmail.com>
Date: Mon Jun 18 09:50:36 2012 +0100
Compile with PIC, fixes FTBFS on ARM
diff --git a/pypy.spec b/pypy.spec
index 80b4039..e579720 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.9
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -471,7 +471,7 @@ BuildPyPy() {
# The generated C code leads to many thousands of warnings of the form:
# warning: variable 'l_v26003' set but not used [-Wunused-but-set-variable]
# Suppress them:
- export CFLAGS=$(echo "$CFLAGS" -Wno-unused)
+ export CFLAGS=$(echo "$CFLAGS" -Wno-unused -fPIC)
# If we're already built the JIT-enabled "pypy", then use it for subsequent
# builds (of other configurations):
@@ -890,6 +890,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Jun 18 2012 Peter Robinson <pbrobinson(a)fedoraproject.org> - 1.9-2
+- Compile with PIC, fixes FTBFS on ARM
+
* Fri Jun 8 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.9-1
- 1.9
commit 615fd77fe04457d552feff9d10986589b35a6148
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Wed Jun 13 11:11:16 2012 -0400
upload 1.9 tarball
diff --git a/.gitignore b/.gitignore
index 86ec921..4c551cc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@
/release-1.6.tar.bz2
/release-1.7.tar.bz2
/release-1.8.tar.bz2
+/release-1.9.tar.bz2
diff --git a/sources b/sources
index 30a988e..2a64332 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-661be06978fdc907d84f0ee1f1228c8b release-1.8.tar.bz2
+f92c0171a9578a3e4a0f74947ec596ab release-1.9.tar.bz2
commit b042622bfa38e9ad3794d4f845207042e589b20b
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Fri Jun 8 20:18:15 2012 -0400
1.9
diff --git a/pypy.spec b/pypy.spec
index 8b80611..80b4039 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 1.8
-Release: 2%{?dist}
+Version: 1.9
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -320,7 +320,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-2346207d9946
+%setup -q -n pypy-pypy-341e1e3821ff
%patch0 -p1 -b .configure-fedora
%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
@@ -861,7 +861,6 @@ rm -rf $RPM_BUILD_ROOT
%dir %{pypyprefix}/lib-python
%{pypyprefix}/lib-python/stdlib-version.txt
%{pypyprefix}/lib-python/%{pylibver}/
-%{pypyprefix}/lib-python/modified-%{pylibver}/
%{pypyprefix}/lib-python/conftest.py*
%{pypyprefix}/lib_pypy/
%{pypyprefix}/site-packages/
@@ -891,6 +890,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Fri Jun 8 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.9-1
+- 1.9
+
* Fri Feb 10 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.8-2
- disable C readability patch for now (patch 4)
commit 07098c88a6645a0333d4c0d927251a23d002376d
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Fri Feb 10 11:12:43 2012 -0500
1.8-2: disable C readability patch for now (patch 4)
diff --git a/pypy.spec b/pypy.spec
index 9838bae..8b80611 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.8
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -324,7 +324,38 @@ Build of PyPy with support for micro-threads for massive concurrency
%patch0 -p1 -b .configure-fedora
%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
-%patch4 -p1 -b .more-readable-c-code
+# Disabled for now, as it needs regenerating for 1.8
+#patch4 -p1 -b .more-readable-c-code
+# Fails on 1.8 with this error:
+# [translation:ERROR] Error:
+# [translation:ERROR] Traceback (most recent call last):
+# [translation:ERROR] File "translate.py", line 309, in main
+# [translation:ERROR] drv.proceed(goals)
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/driver.py", line 811, in proceed
+# [translation:ERROR] return self._execute(goals, task_skip = self._maybe_skip())
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/tool/taskengine.py", line 116, in _execute
+# [translation:ERROR] res = self._do(goal, taskcallable, *args, **kwds)
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/driver.py", line 287, in _do
+# [translation:ERROR] res = func()
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/driver.py", line 530, in task_source_c
+# [translation:ERROR] exe_name=exe_name)
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 252, in generate_source
+# [translation:ERROR] split=self.split)
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 989, in gen_source
+# [translation:ERROR] sg.gen_readable_parts_of_source(f)
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 843, in gen_readable_parts_of_source
+# [translation:ERROR] for node, impl in nodeiter:
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 729, in subiter
+# [translation:ERROR] impl = '\n'.join(list(node.implementation())).split('\n')
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/node.py", line 867, in implementation
+# [translation:ERROR] for s in self.funcgen_implementation(funcgen):
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/node.py", line 901, in funcgen_implementation
+# [translation:ERROR] for line in bodyiter:
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/funcgen.py", line 272, in cfunction_body
+# [translation:ERROR] blocks.sort(block_comparator)
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/funcgen.py", line 34, in block_comparator
+# [translation:ERROR] if blk0.isstartblock:
+# [translation:ERROR] AttributeError: 'Block' object has no attribute 'isstartblock'
%patch5 -p1
@@ -860,6 +891,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Fri Feb 10 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.8-2
+- disable C readability patch for now (patch 4)
+
* Thu Feb 9 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.8-1
- 1.8; regenerate config patch (patch 0); drop selinux patch (patch 2);
regenerate patch 5
commit 52a91fcc4b0ffbdb511ad40e389fe6566d1b8623
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Fri Feb 10 09:19:56 2012 -0500
1.8
rebase to 1.8:
* regenerate config patch (patch 0)
* drop selinux patch (patch 2)
* regenerate patch 5
diff --git a/.gitignore b/.gitignore
index 99af398..86ec921 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
/pypy-1.5-src.tar.bz2
/release-1.6.tar.bz2
/release-1.7.tar.bz2
+/release-1.8.tar.bz2
diff --git a/config.patch b/config.patch
index afd7a7d..a11f397 100644
--- a/config.patch
+++ b/config.patch
@@ -1,31 +1,7 @@
-diff -up pypy-pypy-release-1.7/pypy/translator/platform/linux.py.configure-fedora pypy-pypy-release-1.7/pypy/translator/platform/linux.py
---- pypy-pypy-release-1.7/pypy/translator/platform/linux.py.configure-fedora 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/platform/linux.py 2011-11-21 13:07:03.454240019 -0500
-@@ -1,15 +1,21 @@
- """Support for Linux."""
-
-+import os
- import sys
- from pypy.translator.platform.posix import BasePosix
-
-+CFLAGS = ['-O3', '-pthread', '-fomit-frame-pointer',
-+ '-Wall', '-Wno-unused']
-+if os.environ.get('CFLAGS', None):
-+ CFLAGS.extend(os.environ['CFLAGS'].split())
-+CFLAGS = tuple(CFLAGS)
-+
- class BaseLinux(BasePosix):
- name = "linux"
-
- link_flags = ('-pthread',)
- extra_libs = ('-lrt',)
-- cflags = ('-O3', '-pthread', '-fomit-frame-pointer',
-- '-Wall', '-Wno-unused')
-+ cflags = CFLAGS
- standalone_only = ()
- shared_only = ('-fPIC',)
- so_ext = 'so'
-@@ -26,13 +32,14 @@ class BaseLinux(BasePosix):
+diff -up pypy-pypy-2346207d9946/pypy/translator/platform/linux.py.configure-fedora pypy-pypy-2346207d9946/pypy/translator/platform/linux.py
+--- pypy-pypy-2346207d9946/pypy/translator/platform/linux.py.configure-fedora 2012-02-09 13:27:19.000000000 -0500
++++ pypy-pypy-2346207d9946/pypy/translator/platform/linux.py 2012-02-10 09:06:20.393066016 -0500
+@@ -31,13 +31,14 @@ class BaseLinux(BasePosix):
return self._pkg_config("libffi", "--libs-only-L",
['/usr/lib/libffi'])
diff --git a/fix-test_commands-expected-ls-output-issue7108.patch b/fix-test_commands-expected-ls-output-issue7108.patch
deleted file mode 100644
index becc3e0..0000000
--- a/fix-test_commands-expected-ls-output-issue7108.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- test/test_commands.py.orig 2010-12-22 13:25:11.357333216 -0500
-+++ test/test_commands.py 2010-12-22 13:25:57.927166219 -0500
-@@ -47,7 +47,7 @@ class CommandTests(unittest.TestCase):
- # Note that the first case above has a space in the group name
- # while the second one has a space in both names.
- pat = r'''d......... # It is a directory.
-- \+? # It may have ACLs.
-+ [.+@]? # It may have alt access (SELinux, ACLs or metadata ('@' OS X).
- \s+\d+ # It has some number of links.
- [^/]* # Skip user, group, size, and date.
- /\. # and end with the name of the file.
diff --git a/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch b/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
index eb6f324..9071be5 100644
--- a/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
+++ b/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
@@ -1,6 +1,5 @@
-diff -up pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py.non-readable-path pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py
---- pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py.non-readable-path 2011-08-20 11:46:31.410646024 -0400
-+++ pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py 2011-08-20 11:46:39.421645476 -0400
+--- pypy-pypy-2346207d9946/lib-python/2.7/test/test_subprocess.py.orig 2012-02-09 13:27:19.000000000 -0500
++++ pypy-pypy-2346207d9946/lib-python/2.7/test/test_subprocess.py 2012-02-10 09:14:08.312216221 -0500
@@ -570,7 +570,7 @@ class ProcessTestCase(BaseTestCase):
for i in range(1024):
# Windows raises IOError. Others raise OSError.
@@ -9,4 +8,4 @@ diff -up pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py.non-readab
+ subprocess.Popen(['/usr/bin/nonexisting_i_hope'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
- if c.exception.errno != errno.ENOENT: # ignore "no such file"
+ # ignore errors that indicate the command was not found
diff --git a/pypy.spec b/pypy.spec
index b5982bd..9838bae 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 1.7
-Release: 4%{?dist}
+Version: 1.8
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -145,10 +145,6 @@ Patch0: config.patch
# merely render dots:
Patch1: pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
-# test_commmands fails on SELinux systems due to a change in the output
-# of "ls" (http://bugs.python.org/issue7108)
-Patch2: fix-test_commands-expected-ls-output-issue7108.patch
-
# Try to improve the readability of the generated .c code, by adding in the
# RPython source as comments where possible.
# A version of this was sent upstream as:
@@ -324,14 +320,10 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-release-%{version}
+%setup -q -n pypy-pypy-2346207d9946
%patch0 -p1 -b .configure-fedora
%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
-pushd lib-python/%{pylibver}
-%patch2 -p0
-popd
-
%patch4 -p1 -b .more-readable-c-code
%patch5 -p1
@@ -868,6 +860,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Feb 9 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.8-1
+- 1.8; regenerate config patch (patch 0); drop selinux patch (patch 2);
+regenerate patch 5
+
* Tue Jan 31 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.7-4
- fix an incompatibility with virtualenv (rhbz#742641)
diff --git a/sources b/sources
index 197491c..30a988e 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-fc22184c931ead98bdae9ec3e79595c2 release-1.7.tar.bz2
+661be06978fdc907d84f0ee1f1228c8b release-1.8.tar.bz2
commit a8e52ca5f82917a1b2fb3a3684272c2c1e39f146
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Tue Jan 31 04:53:38 2012 -0500
fix an incompatibility with virtualenv (rhbz#742641)
Previously, we manually fixed up the library search path to be
below %{pypyprefix}, by patching pypy/translator/goal/app_main.py (adding
LIBRARY_INSTALLATION_PATH in patch 3, then using sed to change it to the
correct value in %prep after applying the patch).
This led to issues when using pypy with virtualenv, so now (as suggested in
https://codespeak.net/issue/pypy-dev/issue614 ) we simply install the pypy
binary into %{pypyprefix}, and make /usr/bin/pypy be a symlink to it. This
allows pypy to find its libraries both when run outside a virtualenv, and
within it.
Resolves https://bugzilla.redhat.com/show_bug.cgi?id=742641
diff --git a/pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch b/pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
deleted file mode 100644
index 93bcb69..0000000
--- a/pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-diff -r cd083843b67a pypy/translator/goal/app_main.py
---- a/pypy/translator/goal/app_main.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/goal/app_main.py Wed Dec 22 17:43:21 2010 -0500
-@@ -191,6 +191,12 @@
- IS_WINDOWS = False
-
- def get_library_path(executable):
-+ # FIXME: get this from translator configuration
-+ dirname = LIBRARY_INSTALLATION_PATH
-+ newpath = sys.pypy_initial_path(dirname)
-+ if newpath:
-+ return newpath
-+
- search = executable
- while 1:
- dirname = resolvedirof(search)
diff --git a/pypy.spec b/pypy.spec
index 4bf93a4..b5982bd 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.7
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -149,18 +149,6 @@ Patch1: pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
# of "ls" (http://bugs.python.org/issue7108)
Patch2: fix-test_commands-expected-ls-output-issue7108.patch
-# When locating the pypy standard libraries, look first within
-# LIBRARY_INSTALLATION_PATH.
-# We convert this from being a non-existant variable into a string literal
-# with the value of "pypyprefix" in the "prep" phase below.
-#
-# We still use the scanning relative to the binary location when invoking a
-# pypy binary during the build (e.g. during "check")
-#
-# Sent upstream (with caveats) as:
-# https://codespeak.net/issue/pypy-dev/issue614
-Patch3: pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
-
# Try to improve the readability of the generated .c code, by adding in the
# RPython source as comments where possible.
# A version of this was sent upstream as:
@@ -344,14 +332,6 @@ pushd lib-python/%{pylibver}
%patch2 -p0
popd
-# Look for the pypy libraries within LIBRARY_INSTALLATION_PATH first:
-%patch3 -p1
-# Fixup LIBRARY_INSTALLATION_PATH to be a string literal containing our value
-# for "pypyprefix":
-sed -i \
- -e 's|LIBRARY_INSTALLATION_PATH|"%{pypyprefix}"|' \
- pypy/translator/goal/app_main.py
-
%patch4 -p1 -b .more-readable-c-code
%patch5 -p1
@@ -535,7 +515,19 @@ rm -rf $RPM_BUILD_ROOT
InstallPyPy() {
ExeName=$1
- install -m 755 %{goal_dir}/$ExeName %{buildroot}/%{_bindir}
+ # To ensure compatibility with virtualenv, pypy finds its libraries
+ # relative to itself; this happens within
+ # pypy/translator/goal/app_main.py:get_library_path
+ # which calls sys.pypy_initial_path(dirname) on the dir containing
+ # the executable, with symlinks resolved.
+ #
+ # Hence we make /usr/bin/pypy be a symlink to the real binary, which we
+ # place within /usr/lib[64]/pypy-1.* as pypy
+ #
+ # This ought to enable our pypy build to work with virtualenv
+ # (rhbz#742641)
+ install -m 755 %{goal_dir}/$ExeName %{buildroot}/%{pypyprefix}/$ExeName
+ ln -s %{pypyprefix}/$ExeName %{buildroot}/%{_bindir}
# The generated machine code doesn't need an executable stack, but
# one of the assembler files (gcmaptable.s) doesn't have the necessary
@@ -546,10 +538,11 @@ InstallPyPy() {
#
# I tried various approaches involving fixing the build, but the simplest
# approach is to postprocess the ELF file:
- execstack --clear-execstack %{buildroot}/%{_bindir}/$ExeName
+ execstack --clear-execstack %{buildroot}/%{pypyprefix}/$ExeName
}
mkdir -p %{buildroot}/%{_bindir}
+mkdir -p %{buildroot}/%{pypyprefix}
InstallPyPy pypy
@@ -570,7 +563,6 @@ InstallPyPy pypy-stackless
# PREFIX/lib-python/modified.2.5.2
# as given on the above page, i.e. it uses '-' not '.'
-mkdir -p %{buildroot}/%{pypyprefix}
cp -a lib-python %{buildroot}/%{pypyprefix}
cp -a lib_pypy %{buildroot}/%{pypyprefix}
@@ -859,6 +851,7 @@ rm -rf $RPM_BUILD_ROOT
%defattr(-,root,root,-)
%doc LICENSE README
%{_bindir}/pypy
+%{pypyprefix}/pypy
%files devel
%defattr(-,root,root,-)
@@ -875,6 +868,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Jan 31 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.7-4
+- fix an incompatibility with virtualenv (rhbz#742641)
+
* Sat Jan 14 2012 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 1.7-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
commit e21faf468c1f7001f4680cff5f09fca068fb0397
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Fri Jan 13 19:29:18 2012 -0600
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
diff --git a/pypy.spec b/pypy.spec
index d99d341..4bf93a4 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.7
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -875,6 +875,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Sat Jan 14 2012 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 1.7-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
+
* Fri Dec 16 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.7-2
- use --gcrootfinder=shadowstack, and use standard Fedora compilation flags,
with -Wno-unused (rhbz#666966 and rhbz#707707)
commit 416c353a67345f32fa7da698b18eef5ad1d1e77e
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Fri Dec 16 17:15:41 2011 -0500
1.7-2: use --gcrootfinder=shadowstack, and use standard Fedora compilation flags
* Fri Dec 16 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.7-2
- use --gcrootfinder=shadowstack, and use standard Fedora compilation flags,
with -Wno-unused (rhbz#666966 and rhbz#707707)
diff --git a/pypy.spec b/pypy.spec
index 1d6b6af..d99d341 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.7
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -110,6 +110,10 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# Easy way to enable/disable verbose logging:
%global verbose_logs 0
+# Forcibly use the shadow-stack option for detecting GC roots, rather than
+# relying on hacking up generated assembler with regexps:
+%global shadow_stack 1
+
# Easy way to turn off the selftests:
%global run_selftests 1
@@ -429,6 +433,22 @@ BuildPyPy() {
# plus all substrings from CFLAGS in the environment.
# This is used to generate a value for CFLAGS that's written into the Makefile
+ # How will we track garbage-collection roots in the generated code?
+ # http://pypy.readthedocs.org/en/latest/config/translation.gcrootfinder.html
+
+%if 0%{shadow_stack}
+ # This is the most portable option, and avoids a reliance on non-guaranteed
+ # behaviors within GCC's code generator: use an explicitly-maintained stack
+ # of root pointers:
+ %define gcrootfinder_options --gcrootfinder=shadowstack
+
+ export CFLAGS=$(echo "$RPM_OPT_FLAGS")
+
+%else
+ # Go with the default, which is "asmgcc"
+
+ %define gcrootfinder_options %{nil}
+
# https://bugzilla.redhat.com/show_bug.cgi?id=588941#c18
# The generated Makefile compiles the .c files into assembler (.s), rather
# than direct to .o It then post-processes this assembler to locate
@@ -443,6 +463,13 @@ BuildPyPy() {
# 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//')
+%endif
+
+ # The generated C code leads to many thousands of warnings of the form:
+ # warning: variable 'l_v26003' set but not used [-Wunused-but-set-variable]
+ # Suppress them:
+ export CFLAGS=$(echo "$CFLAGS" -Wno-unused)
+
# If we're already built the JIT-enabled "pypy", then use it for subsequent
# builds (of other configurations):
if test -x './pypy' ; then
@@ -466,6 +493,7 @@ BuildPyPy() {
--cflags="$CFLAGS" \
--batch \
--output=$ExeName \
+ %{gcrootfinder_options} \
$Options
echo "--------------------------------------------------------------"
@@ -847,6 +875,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Fri Dec 16 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.7-2
+- use --gcrootfinder=shadowstack, and use standard Fedora compilation flags,
+with -Wno-unused (rhbz#666966 and rhbz#707707)
+
* Mon Nov 21 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.7-1
- 1.7: refresh patch 0 (configuration) and patch 4 (readability of generated
code)
commit 4ef3f10721000d632a9dcfcfca05c7cde0f91b95
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Tue Nov 22 11:30:49 2011 -0500
1.7
* Mon Nov 21 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.7-1
- 1.7: refresh patch 0 (configuration) and patch 4 (readability of generated
code)
diff --git a/.gitignore b/.gitignore
index ecd135f..99af398 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
/pypy-1.4.1-src.tar.bz2
/pypy-1.5-src.tar.bz2
/release-1.6.tar.bz2
+/release-1.7.tar.bz2
diff --git a/config.patch b/config.patch
new file mode 100644
index 0000000..afd7a7d
--- /dev/null
+++ b/config.patch
@@ -0,0 +1,49 @@
+diff -up pypy-pypy-release-1.7/pypy/translator/platform/linux.py.configure-fedora pypy-pypy-release-1.7/pypy/translator/platform/linux.py
+--- pypy-pypy-release-1.7/pypy/translator/platform/linux.py.configure-fedora 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/platform/linux.py 2011-11-21 13:07:03.454240019 -0500
+@@ -1,15 +1,21 @@
+ """Support for Linux."""
+
++import os
+ import sys
+ from pypy.translator.platform.posix import BasePosix
+
++CFLAGS = ['-O3', '-pthread', '-fomit-frame-pointer',
++ '-Wall', '-Wno-unused']
++if os.environ.get('CFLAGS', None):
++ CFLAGS.extend(os.environ['CFLAGS'].split())
++CFLAGS = tuple(CFLAGS)
++
+ class BaseLinux(BasePosix):
+ name = "linux"
+
+ link_flags = ('-pthread',)
+ extra_libs = ('-lrt',)
+- cflags = ('-O3', '-pthread', '-fomit-frame-pointer',
+- '-Wall', '-Wno-unused')
++ cflags = CFLAGS
+ standalone_only = ()
+ shared_only = ('-fPIC',)
+ so_ext = 'so'
+@@ -26,13 +32,14 @@ class BaseLinux(BasePosix):
+ return self._pkg_config("libffi", "--libs-only-L",
+ ['/usr/lib/libffi'])
+
+- def library_dirs_for_libffi_a(self):
+- # places where we need to look for libffi.a
+- # XXX obscuuure! only look for libffi.a if run with translate.py
+- if 'translate' in sys.modules:
+- return self.library_dirs_for_libffi() + ['/usr/lib']
+- else:
+- return []
++ # Fedora, at least, has the shared version but not the static:
++ #def library_dirs_for_libffi_a(self):
++ # # places where we need to look for libffi.a
++ # # XXX obscuuure! only look for libffi.a if run with translate.py
++ # if 'translate' in sys.modules:
++ # return self.library_dirs_for_libffi() + ['/usr/lib']
++ # else:
++ # return []
+
+
+ class Linux(BaseLinux):
diff --git a/pypy-1.5-more-readable-c-code.patch b/more-readable-c-code.patch
similarity index 83%
rename from pypy-1.5-more-readable-c-code.patch
rename to more-readable-c-code.patch
index b7103e2..92d340f 100644
--- a/pypy-1.5-more-readable-c-code.patch
+++ b/more-readable-c-code.patch
@@ -1,15 +1,15 @@
-diff -up pypy-1.5-src/pypy/interpreter/pycode.py.more-readable-c-code pypy-1.5-src/pypy/interpreter/pycode.py
---- pypy-1.5-src/pypy/interpreter/pycode.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/interpreter/pycode.py 2011-05-02 14:28:33.942161002 -0400
+diff -up pypy-pypy-release-1.7/pypy/interpreter/pycode.py.more-readable-c-code pypy-pypy-release-1.7/pypy/interpreter/pycode.py
+--- pypy-pypy-release-1.7/pypy/interpreter/pycode.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/interpreter/pycode.py 2011-11-21 16:16:15.673463780 -0500
@@ -13,6 +13,7 @@ from pypy.interpreter.gateway import Non
- from pypy.interpreter.astcompiler.consts import (CO_OPTIMIZED,
+ from pypy.interpreter.astcompiler.consts import (
CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS, CO_NESTED,
CO_GENERATOR, CO_CONTAINSGLOBALS)
+from pypy.interpreter.pytraceback import offset2lineno
from pypy.rlib.rarithmetic import intmask
from pypy.rlib.debug import make_sure_not_resized
from pypy.rlib import jit
-@@ -80,6 +81,7 @@ class PyCode(eval.Code):
+@@ -81,6 +82,7 @@ class PyCode(eval.Code):
self.hidden_applevel = hidden_applevel
self.magic = magic
self._signature = cpython_code_signature(self)
@@ -17,7 +17,7 @@ diff -up pypy-1.5-src/pypy/interpreter/pycode.py.more-readable-c-code pypy-1.5-s
self._initialize()
def _initialize(self):
-@@ -396,3 +398,23 @@ class PyCode(eval.Code):
+@@ -397,3 +399,23 @@ class PyCode(eval.Code):
def repr(self, space):
return space.wrap(self.get_repr())
@@ -41,9 +41,9 @@ diff -up pypy-1.5-src/pypy/interpreter/pycode.py.more-readable-c-code pypy-1.5-s
+ # raise an IOError)
+ self._ensure_source()
+ return self._cached_source[linenum - 1]
-diff -up pypy-1.5-src/pypy/objspace/flow/model.py.more-readable-c-code pypy-1.5-src/pypy/objspace/flow/model.py
---- pypy-1.5-src/pypy/objspace/flow/model.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/objspace/flow/model.py 2011-05-02 14:28:33.942161002 -0400
+diff -up pypy-pypy-release-1.7/pypy/objspace/flow/model.py.more-readable-c-code pypy-pypy-release-1.7/pypy/objspace/flow/model.py
+--- pypy-pypy-release-1.7/pypy/objspace/flow/model.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/objspace/flow/model.py 2011-11-21 16:15:36.599466455 -0500
@@ -31,6 +31,120 @@ from pypy.tool.identity_dict import iden
__metaclass__ = type
@@ -268,10 +268,10 @@ diff -up pypy-1.5-src/pypy/objspace/flow/model.py.more-readable-c-code pypy-1.5-
result.append(copyop)
return result
newblock.operations = copyoplist(block.operations)
-diff -up pypy-1.5-src/pypy/objspace/flow/objspace.py.more-readable-c-code pypy-1.5-src/pypy/objspace/flow/objspace.py
---- pypy-1.5-src/pypy/objspace/flow/objspace.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/objspace/flow/objspace.py 2011-05-02 14:28:33.943161001 -0400
-@@ -313,7 +313,9 @@ class FlowObjSpace(ObjSpace):
+diff -up pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py.more-readable-c-code pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py
+--- pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py 2011-11-21 16:15:36.600466455 -0500
+@@ -315,7 +315,9 @@ class FlowObjSpace(ObjSpace):
def do_operation(self, name, *args_w):
spaceop = SpaceOperation(name, args_w, Variable())
if hasattr(self, 'executioncontext'): # not here during bootstrapping
@@ -282,9 +282,9 @@ diff -up pypy-1.5-src/pypy/objspace/flow/objspace.py.more-readable-c-code pypy-1
self.executioncontext.recorder.append(spaceop)
return spaceop.result
-diff -up pypy-1.5-src/pypy/objspace/flow/test/test_model.py.more-readable-c-code pypy-1.5-src/pypy/objspace/flow/test/test_model.py
---- pypy-1.5-src/pypy/objspace/flow/test/test_model.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/objspace/flow/test/test_model.py 2011-05-02 14:28:33.943161001 -0400
+diff -up pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py.more-readable-c-code pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py
+--- pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py 2011-11-21 16:15:36.600466455 -0500
@@ -119,3 +119,25 @@ def test_variable():
assert v2.renamed
assert v2.name.startswith("foobar_") and v2.name != v.name
@@ -311,9 +311,9 @@ diff -up pypy-1.5-src/pypy/objspace/flow/test/test_model.py.more-readable-c-code
+ assert cmp(oplocA, oplocB) < 0
+ assert cmp(oplocB, oplocA) > 0
+
-diff -up pypy-1.5-src/pypy/rpython/rtyper.py.more-readable-c-code pypy-1.5-src/pypy/rpython/rtyper.py
---- pypy-1.5-src/pypy/rpython/rtyper.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/rpython/rtyper.py 2011-05-02 14:28:33.943161001 -0400
+diff -up pypy-pypy-release-1.7/pypy/rpython/rtyper.py.more-readable-c-code pypy-pypy-release-1.7/pypy/rpython/rtyper.py
+--- pypy-pypy-release-1.7/pypy/rpython/rtyper.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/rpython/rtyper.py 2011-11-21 16:15:36.601466455 -0500
@@ -800,7 +800,7 @@ class HighLevelOp(object):
return vars
@@ -341,9 +341,9 @@ diff -up pypy-1.5-src/pypy/rpython/rtyper.py.more-readable-c-code pypy-1.5-src/p
if resulttype is None:
vresult.concretetype = Void
return None
-diff -up pypy-1.5-src/pypy/translator/backendopt/inline.py.more-readable-c-code pypy-1.5-src/pypy/translator/backendopt/inline.py
---- pypy-1.5-src/pypy/translator/backendopt/inline.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/backendopt/inline.py 2011-05-02 14:32:26.975161005 -0400
+diff -up pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py
+--- pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py 2011-11-21 16:15:36.601466455 -0500
@@ -4,6 +4,7 @@ from pypy.translator.simplify import get
from pypy.translator.unsimplify import copyvar
from pypy.objspace.flow.model import Variable, Constant, Block, Link
@@ -371,9 +371,9 @@ diff -up pypy-1.5-src/pypy/translator/backendopt/inline.py.more-readable-c-code
return result
def copy_block(self, block):
-diff -up pypy-1.5-src/pypy/translator/c/funcgen.py.more-readable-c-code pypy-1.5-src/pypy/translator/c/funcgen.py
---- pypy-1.5-src/pypy/translator/c/funcgen.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/c/funcgen.py 2011-05-02 14:28:33.944161001 -0400
+diff -up pypy-pypy-release-1.7/pypy/translator/c/funcgen.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/c/funcgen.py
+--- pypy-pypy-release-1.7/pypy/translator/c/funcgen.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/c/funcgen.py 2011-11-21 16:15:36.602466455 -0500
@@ -1,4 +1,6 @@
import sys
+import inspect
@@ -420,7 +420,7 @@ diff -up pypy-1.5-src/pypy/translator/c/funcgen.py.more-readable-c-code pypy-1.5
class FunctionCodeGenerator(object):
"""
Collects information about a function which we have to generate
-@@ -210,14 +244,57 @@ class FunctionCodeGenerator(object):
+@@ -207,14 +241,57 @@ class FunctionCodeGenerator(object):
def cfunction_body(self):
graph = self.graph
@@ -481,7 +481,7 @@ diff -up pypy-1.5-src/pypy/translator/c/funcgen.py.more-readable-c-code pypy-1.5
for line in self.gen_op(op):
yield line
if len(block.exits) == 0:
-@@ -309,7 +386,7 @@ class FunctionCodeGenerator(object):
+@@ -306,7 +383,7 @@ class FunctionCodeGenerator(object):
assignments.append((a2typename, dest, src))
for line in gen_assignments(assignments):
yield line
@@ -490,16 +490,16 @@ diff -up pypy-1.5-src/pypy/translator/c/funcgen.py.more-readable-c-code pypy-1.5
if link.target in self.innerloops:
loop = self.innerloops[link.target]
if link is loop.links[-1]: # link that ends a loop
-diff -up pypy-1.5-src/pypy/translator/c/test/test_genc.py.more-readable-c-code pypy-1.5-src/pypy/translator/c/test/test_genc.py
---- pypy-1.5-src/pypy/translator/c/test/test_genc.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/c/test/test_genc.py 2011-05-02 14:28:33.945161001 -0400
+diff -up pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py
+--- pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py 2011-11-21 16:15:36.602466455 -0500
@@ -1,4 +1,5 @@
import autopath, sys, os, py
+import re
from pypy.rpython.lltypesystem.lltype import *
from pypy.annotation import model as annmodel
from pypy.translator.translator import TranslationContext
-@@ -515,3 +516,130 @@ def test_inhibit_tail_call():
+@@ -532,3 +533,130 @@ def test_inhibit_tail_call():
else:
assert 0, "the call was not found in the C source"
assert 'PYPY_INHIBIT_TAIL_CALL();' in lines[i+1]
@@ -630,10 +630,10 @@ diff -up pypy-1.5-src/pypy/translator/c/test/test_genc.py.more-readable-c-code p
+ assert 'Here is a ' in c_fn_src
+ assert 'style comment within an RPython docstring' in c_fn_src
+
-diff -up pypy-1.5-src/pypy/translator/driver.py.more-readable-c-code pypy-1.5-src/pypy/translator/driver.py
---- pypy-1.5-src/pypy/translator/driver.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/driver.py 2011-05-02 14:28:33.945161001 -0400
-@@ -536,6 +536,7 @@ class TranslationDriver(SimpleTaskEngine
+diff -up pypy-pypy-release-1.7/pypy/translator/driver.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/driver.py
+--- pypy-pypy-release-1.7/pypy/translator/driver.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/driver.py 2011-11-21 16:15:36.603466455 -0500
+@@ -535,6 +535,7 @@ class TranslationDriver(SimpleTaskEngine
dstname = self.compute_exe_name() + '.staticdata.info'
shutil.copy(str(fname), str(dstname))
self.log.info('Static data info written to %s' % dstname)
@@ -641,9 +641,9 @@ diff -up pypy-1.5-src/pypy/translator/driver.py.more-readable-c-code pypy-1.5-sr
#
task_source_c = taskdef(task_source_c, ['database_c'], "Generating c source")
-diff -up pypy-1.5-src/pypy/translator/gensupp.py.more-readable-c-code pypy-1.5-src/pypy/translator/gensupp.py
---- pypy-1.5-src/pypy/translator/gensupp.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/gensupp.py 2011-05-02 14:33:31.026161001 -0400
+diff -up pypy-pypy-release-1.7/pypy/translator/gensupp.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/gensupp.py
+--- pypy-pypy-release-1.7/pypy/translator/gensupp.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/gensupp.py 2011-11-21 16:15:36.603466455 -0500
@@ -14,8 +14,8 @@ def ordered_blocks(graph):
allblocks = []
for block in graph.iterblocks():
@@ -655,9 +655,9 @@ diff -up pypy-1.5-src/pypy/translator/gensupp.py.more-readable-c-code pypy-1.5-s
else:
ofs = sys.maxint
# then we order by input variable name or value
-diff -up pypy-1.5-src/pypy/translator/interactive.py.more-readable-c-code pypy-1.5-src/pypy/translator/interactive.py
---- pypy-1.5-src/pypy/translator/interactive.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/interactive.py 2011-05-02 14:28:33.946161001 -0400
+diff -up pypy-pypy-release-1.7/pypy/translator/interactive.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/interactive.py
+--- pypy-pypy-release-1.7/pypy/translator/interactive.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/interactive.py 2011-11-21 16:15:36.604466454 -0500
@@ -138,7 +138,7 @@ class Translation(object):
def source_c(self, argtypes=None, **kwds):
self.update_options(argtypes, kwds)
@@ -667,9 +667,9 @@ diff -up pypy-1.5-src/pypy/translator/interactive.py.more-readable-c-code pypy-1
def source_cl(self, argtypes=None, **kwds):
self.update_options(argtypes, kwds)
-diff -up pypy-1.5-src/pypy/translator/llsupport/wrapper.py.more-readable-c-code pypy-1.5-src/pypy/translator/llsupport/wrapper.py
---- pypy-1.5-src/pypy/translator/llsupport/wrapper.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/llsupport/wrapper.py 2011-05-02 14:28:33.946161001 -0400
+diff -up pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py
+--- pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py 2011-11-21 16:15:36.604466454 -0500
@@ -59,6 +59,8 @@ def new_wrapper(func, translator, newnam
# "return result"
block = Block(wrapper_inputargs)
@@ -679,10 +679,10 @@ diff -up pypy-1.5-src/pypy/translator/llsupport/wrapper.py.more-readable-c-code
translator.update_call_graph(wgraph, graph, object())
translator.graphs.append(wgraph)
block.operations[:] = newops
-diff -up pypy-1.5-src/pypy/translator/simplify.py.more-readable-c-code pypy-1.5-src/pypy/translator/simplify.py
---- pypy-1.5-src/pypy/translator/simplify.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/simplify.py 2011-05-02 14:28:33.952161001 -0400
-@@ -298,7 +298,7 @@ def join_blocks(graph):
+diff -up pypy-pypy-release-1.7/pypy/translator/simplify.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/simplify.py
+--- pypy-pypy-release-1.7/pypy/translator/simplify.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/simplify.py 2011-11-21 16:15:36.605466454 -0500
+@@ -292,7 +292,7 @@ def join_blocks(graph):
return renaming.get(v, v)
def rename_op(op):
args = [rename(a) for a in op.args]
diff --git a/pypy-1.5-config.patch b/pypy-1.5-config.patch
deleted file mode 100644
index 82d8fc9..0000000
--- a/pypy-1.5-config.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-diff -up pypy-1.5-src/pypy/translator/platform/linux.py.configure-fedora pypy-1.5-src/pypy/translator/platform/linux.py
---- pypy-1.5-src/pypy/translator/platform/linux.py.configure-fedora 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/platform/linux.py 2011-04-30 18:59:24.041160978 -0400
-@@ -1,13 +1,18 @@
- """Support for Linux."""
--
-+import os
- from pypy.translator.platform.posix import BasePosix
-
-+CFLAGS = ['-O3', '-pthread', '-fomit-frame-pointer',
-+ '-Wall', '-Wno-unused']
-+if os.environ.get('CFLAGS', None):
-+ CFLAGS.extend(os.environ['CFLAGS'].split())
-+CFLAGS = tuple(CFLAGS)
-+
- class BaseLinux(BasePosix):
- name = "linux"
-
- link_flags = ('-pthread', '-lrt')
-- cflags = ('-O3', '-pthread', '-fomit-frame-pointer',
-- '-Wall', '-Wno-unused')
-+ cflags = CFLAGS
- standalone_only = ()
- shared_only = ('-fPIC',)
- so_ext = 'so'
-@@ -29,9 +34,10 @@ class Linux(BaseLinux):
- shared_only = () # it seems that on 32-bit linux, compiling with -fPIC
- # gives assembler that asmgcc is not happy about.
-
-- def library_dirs_for_libffi_a(self):
-- # places where we need to look for libffi.a
-- return self.library_dirs_for_libffi() + ['/usr/lib']
-+ # Fedora Linux, at least, has the shared version but not the static
-+ #def library_dirs_for_libffi_a(self):
-+ # # places where we need to look for libffi.a
-+ # return self.library_dirs_for_libffi() + ['/usr/lib']
-
-
- class Linux64(BaseLinux):
diff --git a/pypy.spec b/pypy.spec
index 2579860..1d6b6af 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 1.6
-Release: 7%{?dist}
+Version: 1.7
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -126,14 +126,14 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-1.6.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/get/release-%{version}.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
Source2: macros.pypy
# Edit a translator file for linux in order to configure our cflags and dynamic libffi
-Patch0: pypy-1.5-config.patch
+Patch0: config.patch
# By default, if built at a tty, the translation process renders a Mandelbrot
# set to indicate progress.
@@ -163,7 +163,7 @@ Patch3: pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
# http://codespeak.net/pipermail/pypy-dev/2010q4/006532.html
# TODO: get this into the upstream bug tracker, and finish inlining
# support (rhbz#666963)
-Patch4: pypy-1.5-more-readable-c-code.patch
+Patch4: more-readable-c-code.patch
# In my koji builds, /root/bin is in the PATH for some reason
# This leads to test_subprocess.py failing, due to "test_leaking_fds_on_error"
@@ -847,6 +847,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Nov 21 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.7-1
+- 1.7: refresh patch 0 (configuration) and patch 4 (readability of generated
+code)
+
* Tue Oct 4 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-7
- skip test_multiprocessing
diff --git a/sources b/sources
index 5660f1e..197491c 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-1189352effc5df7df84e6916b3b3eae3 release-1.6.tar.bz2
+fc22184c931ead98bdae9ec3e79595c2 release-1.7.tar.bz2
commit 953cba8f403df754b658c3310b0505c1ba5dc5a5
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Tue Oct 4 14:37:40 2011 -0400
1.6-7: skip test_multiprocessing
* Tue Oct 4 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-7
- skip test_multiprocessing
diff --git a/pypy.spec b/pypy.spec
index 90b3f88..2579860 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.6
-Release: 6%{?dist}
+Release: 7%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -728,6 +728,12 @@ CheckPyPy() {
# "strop" module doesn't exist for pypy yet:
SkipTest test_strop
+ # I'm seeing Koji builds hanging e.g.:
+ # http://koji.fedoraproject.org/koji/getfile?taskID=3386821&name=build.log
+ # The only test that seems to have timed out in that log is
+ # test_multiprocessing, so skip it for now:
+ SkipTest test_multiprocessing
+
echo "== Test names =="
cat testnames.txt
echo "================="
@@ -841,13 +847,15 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Oct 4 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-7
+- skip test_multiprocessing
+
* Tue Sep 13 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-6
- don't ship the emacs JIT-viewer on el5 and el6 (missing emacs-filesystem;
missing _emacs_bytecompile macro on el5)
* Mon Sep 12 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-5
- build using python26 on el5 (2.4 is too early)
-
* Thu Aug 25 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-4
- fix SkipTest function to avoid corrupting the name of "test_gdbm"
commit 2d36a5e81680be23c3e25e9f4bff4737a550687f
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Tue Sep 13 05:00:09 2011 -0400
don't ship the emacs JIT-viewer on el5 and el6
* Tue Sep 13 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-6
- don't ship the emacs JIT-viewer on el5 and el6 (missing emacs-filesystem;
missing _emacs_bytecompile macro on el5)
diff --git a/pypy.spec b/pypy.spec
index 9fc1462..90b3f88 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.6
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -100,6 +100,12 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# Should we build a "pypy-stackless" binary?
%global with_stackless 0
+# Should we build the emacs JIT-viewing mode?
+%if 0%{?rhel} == 5 || 0%{?rhel} == 6
+%global with_emacs 0
+%else
+%global with_emacs 1
+%endif
# Easy way to enable/disable verbose logging:
%global verbose_logs 0
@@ -257,7 +263,9 @@ BuildRequires: perl
BuildRequires: /usr/bin/execstack
# For byte-compiling the JIT-viewing mode:
+%if %{with_emacs}
BuildRequires: emacs
+%endif
# pypy is bundling these so we delete them in %%prep. I don't think they are
# needed unless we build pypy targetted at running on the jvm.
@@ -287,7 +295,9 @@ Summary: Run-time libraries used by PyPy implementations of Python
# We supply an emacs mode for the JIT viewer.
# (This doesn't bring in all of emacs, just the directory structure)
+%if %{with_emacs}
Requires: emacs-filesystem >= %{_emacs_version}
+%endif
%description libs
Libraries required by the various PyPy implementations of Python.
@@ -484,7 +494,9 @@ BuildPyPy \
"--stackless"
%endif
+%if %{with_emacs}
%{_emacs_bytecompile} pypy/jit/tool/pypytrace-mode.el
+%endif
%install
rm -rf $RPM_BUILD_ROOT
@@ -662,8 +674,10 @@ find \
# are acceptable.
# Install the JIT trace mode for Emacs:
+%if %{with_emacs}
mkdir -p %{buildroot}/%{_emacs_sitelispdir}
cp -a pypy/jit/tool/pypytrace-mode.el* %{buildroot}/%{_emacs_sitelispdir}
+%endif
# Install macros for rpm:
mkdir -p %{buildroot}/%{_sysconfdir}/rpm
@@ -802,8 +816,10 @@ rm -rf $RPM_BUILD_ROOT
%{pypyprefix}/lib-python/conftest.py*
%{pypyprefix}/lib_pypy/
%{pypyprefix}/site-packages/
+%if %{with_emacs}
%{_emacs_sitelispdir}/pypytrace-mode.el
%{_emacs_sitelispdir}/pypytrace-mode.elc
+%endif
%files
%defattr(-,root,root,-)
@@ -825,6 +841,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Sep 13 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-6
+- don't ship the emacs JIT-viewer on el5 and el6 (missing emacs-filesystem;
+missing _emacs_bytecompile macro on el5)
+
* Mon Sep 12 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-5
- build using python26 on el5 (2.4 is too early)
commit 009aeb1c2d9928be62c11bf154af0644f08816eb
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Mon Sep 12 21:01:16 2011 -0400
build using python26 on el5 (2.4 is too early)
diff --git a/pypy.spec b/pypy.spec
index b303232..9fc1462 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.6
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -213,10 +213,18 @@ Patch5: pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
BuildRequires: pypy
%global bootstrap_python_interp pypy
%else
+
+# Python 2.6 or later is needed, so on RHEL5 (2.4) we need to use the alternate
+# python26 rpm:
+%if 0%{?rhel} == 5
+BuildRequires: python26-devel
+%global bootstrap_python_interp python26
+%else
BuildRequires: python-devel
%global bootstrap_python_interp python
%endif
+%endif
# FIXME: I'm seeing errors like this in the logs:
@@ -817,6 +825,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Sep 12 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-5
+- build using python26 on el5 (2.4 is too early)
+
* Thu Aug 25 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-4
- fix SkipTest function to avoid corrupting the name of "test_gdbm"
commit 106cb91275756dab4a44a6e75cd090ea57c6d5a7
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Thu Aug 25 14:50:53 2011 -0400
fix SkipTest function to avoid corrupting the name of "test_gdbm"
diff --git a/pypy.spec b/pypy.spec
index 2c3e47c..b303232 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.6
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -666,7 +666,7 @@ topdir=$(pwd)
SkipTest() {
TEST_NAME=$1
- sed -i -e"s|$TEST_NAME||" testnames.txt
+ sed -i -e"s|^$TEST_NAME$||g" testnames.txt
}
CheckPyPy() {
@@ -817,6 +817,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Aug 25 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-4
+- fix SkipTest function to avoid corrupting the name of "test_gdbm"
+
* Thu Aug 25 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-3
- add rpm macros file to the devel subpackage (source 2)
- skip some tests that can't pass yet
commit afabd9d6bee5ad70b522d5d9c5745256ff46b827
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Thu Aug 25 11:58:55 2011 -0400
1.6-3: add rpm macros file to the devel subpackage; skip some tests
diff --git a/macros.pypy b/macros.pypy
new file mode 100644
index 0000000..5f40b6f
--- /dev/null
+++ b/macros.pypy
@@ -0,0 +1,5 @@
+%__pypy /usr/bin/pypy
+%pypy_sitelib %(%{__pypy} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
+%pypy_sitearch %(%{__pypy} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")
+%pypy_version %(%{__pypy} -c "import sys; sys.stdout.write(sys.version[:3])")
+%pypydir %{_builddir}/pypy-%{name}-%{version}-%{release}
diff --git a/pypy.spec b/pypy.spec
index 3280ff9..2c3e47c 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.6
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -122,6 +122,10 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# Source and patches:
Source0: https://bitbucket.org/pypy/pypy/get/release-1.6.tar.bz2
+# Supply various useful RPM macros for building python modules against pypy:
+# __pypy, pypy_sitelib, pypy_sitearch
+Source2: macros.pypy
+
# Edit a translator file for linux in order to configure our cflags and dynamic libffi
Patch0: pypy-1.5-config.patch
@@ -653,13 +657,16 @@ find \
mkdir -p %{buildroot}/%{_emacs_sitelispdir}
cp -a pypy/jit/tool/pypytrace-mode.el* %{buildroot}/%{_emacs_sitelispdir}
+# Install macros for rpm:
+mkdir -p %{buildroot}/%{_sysconfdir}/rpm
+install -m 644 %{SOURCE2} %{buildroot}/%{_sysconfdir}/rpm
+
%check
topdir=$(pwd)
SkipTest() {
- # Append the given test name to TESTS_TO_SKIP
TEST_NAME=$1
- TESTS_TO_SKIP="$TESTS_TO_SKIP $TEST_NAME"
+ sed -i -e"s|$TEST_NAME||" testnames.txt
}
CheckPyPy() {
@@ -686,6 +693,19 @@ CheckPyPy() {
"from test.regrtest import findtests; print '\n'.join(findtests())"
) > testnames.txt
+ # Skip some tests:
+ # "audioop" doesn't exist for pypy yet:
+ SkipTest test_audioop
+
+ # The gdb CPython hooks haven't been ported to cpyext:
+ SkipTest test_gdb
+
+ # hotshot relies heavily on _hotshot, which doesn't exist:
+ SkipTest test_hotshot
+
+ # "strop" module doesn't exist for pypy yet:
+ SkipTest test_strop
+
echo "== Test names =="
cat testnames.txt
echo "================="
@@ -786,6 +806,7 @@ rm -rf $RPM_BUILD_ROOT
%defattr(-,root,root,-)
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
+%config(noreplace) %{_sysconfdir}/rpm/macros.pypy
%if 0%{with_stackless}
%files stackless
@@ -796,6 +817,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Aug 25 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-3
+- add rpm macros file to the devel subpackage (source 2)
+- skip some tests that can't pass yet
+
* Sat Aug 20 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-2
- work around test_subprocess failure seen in koji (patch 5)
commit 1df5c3e618c5f2bcbdbe44f329039dfffc1cd79e
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Sat Aug 20 11:59:48 2011 -0400
work around test_subprocess failure seen in koji (patch 5)
diff --git a/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch b/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
new file mode 100644
index 0000000..eb6f324
--- /dev/null
+++ b/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
@@ -0,0 +1,12 @@
+diff -up pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py.non-readable-path pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py
+--- pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py.non-readable-path 2011-08-20 11:46:31.410646024 -0400
++++ pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py 2011-08-20 11:46:39.421645476 -0400
+@@ -570,7 +570,7 @@ class ProcessTestCase(BaseTestCase):
+ for i in range(1024):
+ # Windows raises IOError. Others raise OSError.
+ with self.assertRaises(EnvironmentError) as c:
+- subprocess.Popen(['nonexisting_i_hope'],
++ subprocess.Popen(['/usr/bin/nonexisting_i_hope'],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ if c.exception.errno != errno.ENOENT: # ignore "no such file"
diff --git a/pypy.spec b/pypy.spec
index c3faabb..3280ff9 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.6
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -155,6 +155,16 @@ Patch3: pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
# support (rhbz#666963)
Patch4: pypy-1.5-more-readable-c-code.patch
+# In my koji builds, /root/bin is in the PATH for some reason
+# This leads to test_subprocess.py failing, due to "test_leaking_fds_on_error"
+# trying every dir in PATH for "nonexisting_i_hope", which leads to it raising
+# OSError: [Errno 13] Permission denied
+# when it tries to read /root/bin, rather than raising "No such file"
+#
+# Work around this by specifying an absolute path for the non-existant
+# executable
+# Not yet sent upstream
+Patch5: pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
# Build-time requirements:
@@ -318,6 +328,7 @@ sed -i \
%patch4 -p1 -b .more-readable-c-code
+%patch5 -p1
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
@@ -785,6 +796,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Sat Aug 20 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-2
+- work around test_subprocess failure seen in koji (patch 5)
+
* Thu Aug 18 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-1
- 1.6
- rewrite the %%check section, introducing per-test timeouts
commit 3a2c2ec86de943a3dbdc8de5608e6a8f79c48a85
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Fri Aug 19 19:04:38 2011 -0400
pypy-1.6-1
- 1.6
- rewrite the %check section, introducing per-test timeouts
diff --git a/.gitignore b/.gitignore
index 017cf34..ecd135f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
/pypy-1.4.1-src.tar.bz2
/pypy-1.5-src.tar.bz2
+/release-1.6.tar.bz2
diff --git a/pypy.spec b/pypy.spec
index 0c2c717..c3faabb 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 1.5
-Release: 2%{?dist}
+Version: 1.6
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -104,6 +104,9 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# Easy way to enable/disable verbose logging:
%global verbose_logs 0
+# Easy way to turn off the selftests:
+%global run_selftests 1
+
%global pypyprefix %{_libdir}/pypy-%{version}
%global pylibver 2.7
@@ -117,7 +120,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: http://pypy.org/download/pypy-%{version}-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/get/release-1.6.tar.bz2
# Edit a translator file for linux in order to configure our cflags and dynamic libffi
Patch0: pypy-1.5-config.patch
@@ -218,9 +221,17 @@ BuildRequires: openssl-devel
BuildRequires: valgrind-devel
%endif
+%if %{run_selftests}
# Used by the selftests, though not by the build:
BuildRequires: gc-devel
+# For use in the selftests, for recording stats:
+BuildRequires: time
+
+# For use in the selftests, for imposing a per-test timeout:
+BuildRequires: perl
+%endif
+
BuildRequires: /usr/bin/execstack
# For byte-compiling the JIT-viewing mode:
@@ -289,7 +300,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-%{version}-src
+%setup -q -n pypy-pypy-release-%{version}
%patch0 -p1 -b .configure-fedora
%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
@@ -656,445 +667,47 @@ CheckPyPy() {
pushd %{goal_dir}
- # Gather a list of tests to skip, due to known failures
- # TODO: report these failures to pypy upstream
- # See also rhbz#666967 and rhbz#666969
- TESTS_TO_SKIP=""
-
- # Test failures relating to missing codecs
- # Hopefully when pypy merges to 2.7 support we'll gain these via a
- # refreshed stdlib:
- # test_codecencodings_cn:
- # all tests fail, with one of
- # unknown encoding: gb18030
- # unknown encoding: gb2312
- # unknown encoding: gbk
- SkipTest test_codecencodings_cn
-
- # test_codecencodings_hk:
- # all tests fail, with:
- # unknown encoding: big5hkscs
- SkipTest test_codecencodings_hk
-
- # test_codecencodings_jp:
- # all tests fail, with one of:
- # unknown encoding: cp932
- # unknown encoding: euc_jisx0213
- # unknown encoding: euc_jp
- # unknown encoding: shift_jis
- # unknown encoding: shift_jisx0213
- SkipTest test_codecencodings_jp
-
- # test_codecencodings_kr:
- # all tests fail, with one of:
- # unknown encoding: cp949
- # unknown encoding: euc_kr
- # unknown encoding: johab
- SkipTest test_codecencodings_kr
-
- # test_codecencodings_tw:
- # all tests fail, with:
- # unknown encoding: big5
- SkipTest test_codecencodings_tw
-
- # test_multibytecodec:
- # 14 failures out of 15, due to:
- # unknown encoding: euc-kr
- # unknown encoding: gb2312
- # unknown encoding: jisx0213
- # unknown encoding: cp949
- # unknown encoding: iso2022-jp
- # unknown encoding: gb18030
- SkipTest test_multibytecodec
-
- #
- # Other failures:
- #
- # test_asynchat:
- # seems to hang on this test, within test_line_terminator
- SkipTest test_asynchat
-
- # test_audioop:
- # test test_audioop crashed -- <type 'exceptions.ImportError'>: No module named audioop
- # Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/regrtest.py", line 874, in runtest_inner
- # the_package = __import__(abstest, globals(), locals(), [])
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_audioop.py", line 1, in <module>
- # import audioop
- # ImportError: No module named audioop
- SkipTest test_audioop
-
- # test_capi:
- # RPython traceback:
- # RPython traceback:
- # File "implement.c", line 243013, in _PyObject_New
- # File "implement_1.c", line 31707, in _PyObject_NewVar
- # File "implement.c", line 217060, in from_ref
- # Fatal RPython error: AssertionError
- SkipTest test_capi
-
- # test_compiler:
- # 4 errors out of 13:
- # testSourceCodeEncodingsError
- # testWith
- # testWithAss
- # testYieldExpr
- SkipTest test_compiler
-
- # test_ctypes:
- # failures=17, errors=20, out of 132 tests
- SkipTest test_ctypes
-
- # test_distutils:
- # Warning -- os.environ was modified by test_distutils
- # test test_distutils failed -- multiple errors occurred; run in verbose mode for details
- SkipTest test_distutils
-
- # test_frozen:
- # TestFailed: import __hello__ failed:No module named __hello__
- SkipTest test_frozen
-
- # test_gc:
- # test test_gc crashed -- <type 'exceptions.AttributeError'>: 'module' object has no attribute 'get_debug'
- SkipTest test_gc
-
- # test_gdb:
- # test test_gdb crashed -- <type 'exceptions.KeyError'>: 'PY_CFLAGS'
- SkipTest test_gdb
-
- # test_generators:
- # **********************************************************************
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
- # Failed example:
- # del g; gc_collect()
- # Expected:
- # exiting
- # Got nothing
- # **********************************************************************
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
- # Failed example:
- # del g; gc_collect()
- # Expected:
- # exiting
- # Got nothing
- # **********************************************************************
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
- # Failed example:
- # del g; gc_collect()
- # Expected:
- # finally
- # Got nothing
- # **********************************************************************
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
- # Failed example:
- # sys.stderr.getvalue().startswith(
- # "Exception RuntimeError: 'generator ignored GeneratorExit' in "
- # )
- # Expected:
- # True
- # Got:
- # False
- # **********************************************************************
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.refleaks
- # Failed example:
- # try:
- # sys.stderr = StringIO.StringIO()
- # class Leaker:
- # def __del__(self):
- # raise RuntimeError
- # l = Leaker()
- # del l
- # gc_collect()
- # err = sys.stderr.getvalue().strip()
- # err.startswith(
- # "Exception RuntimeError: RuntimeError() in "
- # )
- # err.endswith("> ignored")
- # len(err.splitlines())
- # finally:
- # sys.stderr = old
- # Expected:
- # True
- # True
- # 1
- # Got:
- # False
- # False
- # 0
- # **********************************************************************
- # 2 items had failures:
- # 4 of 107 in test.test_generators.__test__.coroutine
- # 1 of 11 in test.test_generators.__test__.refleaks
- # ***Test Failed*** 5 failures.
- # test test_generators failed -- 5 of 294 doctests failed
- SkipTest test_generators
-
- # test_getargs2:
- # test test_getargs2 failed -- multiple errors occurred; run in verbose mode for details
- SkipTest test_getargs2
-
- # test_hotshot:
- # test test_hotshot crashed -- <type 'exceptions.ImportError'>: No module named _hotshot
- SkipTest test_hotshot
-
- # test_io:
- # test test_io failed -- multiple errors occurred; run in verbose mode for details
- SkipTest test_io
-
- # test_ioctl:
- # Failing in Koji with dist-f15 with:
- # ======================================================================
- # FAIL: test_ioctl (test.test_ioctl.IoctlTests)
- # ----------------------------------------------------------------------
- # Traceback (most recent call last):
- # File "/usr/lib/pypy-1.4.1/lib-python/2.5.2/test/test_ioctl.py", line 25, in test_ioctl
- # self.assert_(rpgrp in ids, "%s not in %s" % (rpgrp, ids))
- # AssertionError: 0 not in (8304, 17737)
- # ======================================================================
- # FAIL: test_ioctl_mutate (test.test_ioctl.IoctlTests)
- # ----------------------------------------------------------------------
- # Traceback (most recent call last):
- # File "/usr/lib/pypy-1.4.1/lib-python/2.5.2/test/test_ioctl.py", line 35, in test_ioctl_mutate
- # self.assert_(rpgrp in ids, "%s not in %s" % (rpgrp, ids))
- # AssertionError: 0 not in (8304, 17737)
- # ----------------------------------------------------------------------
- SkipTest test_ioctl
-
- # test_iterlen:
- # 24 failures out of 25, apparently all due to TypeError
- SkipTest test_iterlen
-
- # test_multiprocessing:
- # test test_multiprocessing failed -- multiple errors occurred; run in verbose mode for details
- SkipTest test_multiprocessing
-
- # test_module:
- # test test_module failed -- Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_module.py", line 81, in test_clear_dict_in_ref_cycle
- # self.assertEqual(destroyed, [1])
- # AssertionError: Lists differ: [] != [1]
- # Second list contains 1 additional elements.
- # First extra element 0:
- # 1
- # - []
- # + [1]
- # ? +
- SkipTest test_module
-
- # test_parser:
- # 12 failures out of 15
- SkipTest test_parser
-
- # test_platform:
- # Koji builds show:
- # test test_platform failed -- errors occurred in test.test_platform.PlatformTest
- SkipTest test_platform
-
- # test_posix:
- # test test_posix failed -- Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 361, in test_getcwd_long_pathnames
- # _create_and_do_getcwd(dirname)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 351, in _create_and_do_getcwd
- # _create_and_do_getcwd(dirname, current_path_length + len(dirname) + 1)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 351, in _create_and_do_getcwd
- # _create_and_do_getcwd(dirname, current_path_length + len(dirname) + 1)
- # [...repeats...]
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 351, in _create_and_do_getcwd
- # _create_and_do_getcwd(dirname, current_path_length + len(dirname) + 1)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 356, in _create_and_do_getcwd
- # self.assertEqual(e.errno, expected_errno)
- # AssertionError: 36 != 34
- SkipTest test_posix
-
- # test_readline:
- # test test_readline failed -- Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_readline.py", line 16, in testHistoryUpdates
- # readline.clear_history()
- # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/readline.py", line 277, in clear_history
- # del self.get_reader().history[:]
- # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/readline.py", line 186, in get_reader
- # console = UnixConsole(self.f_in, self.f_out, encoding=ENCODING)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/unix_console.py", line 103, in __init__
- # self._clear = _my_getstr("clear")
- # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/unix_console.py", line 45, in _my_getstr
- # "terminal doesn't have the required '%s' capability"%cap
- # InvalidTerminal: terminal doesn't have the required 'clear' capability
- SkipTest test_readline
-
- # test_scope:
- # test test_scope failed -- Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_scope.py", line 437, in testLeaks
- # self.assertEqual(Foo.count, 0)
- # AssertionError: 100 != 0
- SkipTest test_scope
-
- # test_socket:
- # testSockName can fail in Koji with:
- # my_ip_addr = socket.gethostbyname(socket.gethostname())
- # gaierror: (-3, 'Temporary failure in name resolution')
- SkipTest test_socket
-
- # test_sort:
- # some failures
- SkipTest test_sort
-
- # test_sqlite:
- # 3 of the sqlite3.test.dbapi.ExtensionTests raise:
- # ProgrammingError: Incomplete statement ''
- SkipTest test_sqlite
-
- # test_strop:
- # test test_strop crashed -- <type 'exceptions.ImportError'>: No module named strop
- SkipTest test_strop
-
- # test_structmembers:
- # test test_structmembers failed -- multiple errors occurred; run in verbose mode for details
- SkipTest test_structmembers
-
- # test_subprocess:
- # debug: WARNING: library path not found, using compiled-in sys.path and sys.prefix will be unset
- # 'import site' failed
- # .
- # this bit of output is from a test of stdout in a different process ...
- # /builddir/build/BUILD/pypy-1.5-src/lib_pypy/ctypes_support.py:26: RuntimeWarning: C function without declared arguments called
- # return standard_c_lib.__errno_location()
- # debug: WARNING: library path not found, using compiled-in sys.path and sys.prefix will be unset
- # 'import site' failed
- # .
- # this bit of output is from a test of stdout in a different process ...
- # test test_subprocess failed -- multiple errors occurred; run in verbose mode for details
- SkipTest test_subprocess
-
- # test_symtable:
- # test test_symtable crashed -- <type 'exceptions.ImportError'>: No module named _symtable
- SkipTest test_symtable
-
- # test_sys_settrace:
- # test test_sys_settrace failed -- Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 334, in test_13_genexp
- # self.run_test(generator_example)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 280, in run_test
- # self.run_and_compare(func, func.events)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 277, in run_and_compare
- # tracer.events, events)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 269, in compare_events
- # [str(x) for x in events])))
- # AssertionError: events did not match expectation:
- # (0, 'call')
- # (2, 'line')
- # (-6, 'call')
- # (-5, 'line')
- # (-4, 'line')
- # (-4, 'return')
- # - (-4, 'call')
- # - (-4, 'exception')
- # - (-1, 'line')
- # - (-1, 'return')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (5, 'return')
- SkipTest test_sys_settrace
-
- # test_tempfile:
- # test test_tempfile failed -- multiple errors occurred; run in verbose mode for details
- SkipTest test_tempfile
-
- # test_thread
- # Koji build appears to hang here
- SkipTest test_thread
-
- # test_traceback:
- # works when run standalone; failures seen when run as part of a suite
- SkipTest test_traceback
-
- # test_uuid:
- # ======================================================================
- # ERROR: test_ifconfig_getnode (test.test_uuid.TestUUID)
- # ----------------------------------------------------------------------
- # Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_uuid.py", line 306, in test_ifconfig_getnode
- # node = uuid._ifconfig_getnode()
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/uuid.py", line 326, in _ifconfig_getnode
- # ip_addr = socket.gethostbyname(socket.gethostname())
- # gaierror: [Errno -3] Temporary failure in name resolution
- # ----------------------------------------------------------------------
- # Ran 14 tests in 0.369s
- # FAILED (errors=1)
- SkipTest test_uuid
-
- # test_zipimport_support:
- # ======================================================================
- # ERROR: test_doctest_main_issue4197 (test.test_zipimport_support.ZipSupportTests)
- # ----------------------------------------------------------------------
- # Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_zipimport_support.py", line 194, in test_doctest_main_issue4197
- # exit_code, data = run_python(script_name)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/script_helper.py", line 80, in run_python
- # p = spawn_python(*args, **kwargs)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/script_helper.py", line 66, in spawn_python
- # **kwargs)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 672, in __init__
- # errread, errwrite)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 1206, in _execute_child
- # raise child_exception
- # OSError: [Errno 13] Permission denied
- # ======================================================================
- # ERROR: test_pdb_issue4201 (test.test_zipimport_support.ZipSupportTests)
- # ----------------------------------------------------------------------
- # Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_zipimport_support.py", line 221, in test_pdb_issue4201
- # p = spawn_python(script_name)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/script_helper.py", line 66, in spawn_python
- # **kwargs)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 672, in __init__
- # errread, errwrite)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 1206, in _execute_child
- # raise child_exception
- # OSError: [Errno 13] Permission denied
- # ----------------------------------------------------------------------
- # Ran 4 tests in 0.726s
- # FAILED (errors=2)
- SkipTest test_zipimport_support
-
- # test_zlib:
- # failure seen in Koji, not sure of reason why:
- # test test_zlib failed -- Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.4.1-src/lib-python/2.5.2/test/test_zlib.py", line 72, in test_baddecompressobj
- # self.assertRaises(ValueError, zlib.decompressobj, 0)
- # AssertionError: ValueError not raised
- SkipTest test_zlib
-
- %if 0%{use_self_when_building}
- # Patch 3 prioritizes the installed copy of pypy's libraries over the
- # build copy.
- # This leads to test failures of test_pep263 and test_tarfile
- # For now, suppress these when building using pypy itself:
- SkipTest test_pep263 # on-disk encoding issues
- SkipTest test_tarfile # permissions issues
- %endif
-
- # Run the built binary through the selftests
- # "-w" : re-run failed tests in verbose mode
- time ./$ExeName -m test.regrtest -w -x $TESTS_TO_SKIP
+ # I'm seeing numerous cases where tests seem to hang, or fail unpredictably
+ # So we'll run each test in its own process, with a timeout
+
+ # Use regrtest to explicitly list all tests:
+ ( ./$ExeName -c \
+ "from test.regrtest import findtests; print '\n'.join(findtests())"
+ ) > testnames.txt
+
+ echo "== Test names =="
+ cat testnames.txt
+ echo "================="
+
+ echo "" > failed-tests.txt
+
+ for TestName in $(cat testnames.txt) ; do
+
+ echo "===================" $TestName "===================="
+
+ # Use /usr/bin/time (rather than the shell "time" builtin) to gather
+ # info on the process (time/CPU/memory). This passes on the exit
+ # status of the underlying command
+ #
+ # Use perl's alarm command to impose a timeout
+ # 900 seconds is 15 minutes per test.
+ # If a test hangs, that test should get terminated, allowing the build
+ # to continue.
+ #
+ # Invoke pypy on test.regrtest to run the specific test suite
+ # verbosely
+ #
+ # For now, || true, so that any failures don't halt the build:
+ ( /usr/bin/time \
+ perl -e 'alarm shift @ARGV; exec @ARGV' 900 \
+ ./$ExeName -m test.regrtest -v $TestName ) \
+ || (echo $TestName >> failed-tests.txt) \
+ || true
+ done
+
+ echo "== Failed tests =="
+ cat failed-tests.txt
+ echo "================="
popd
@@ -1124,12 +737,14 @@ CheckPyPy() {
echo "--------------------------------------------------------------"
}
+%if %{run_selftests}
CheckPyPy pypy
%if 0%{with_stackless}
CheckPyPy pypy-stackless
%endif
+%endif # run_selftests
%clean
@@ -1142,7 +757,6 @@ rm -rf $RPM_BUILD_ROOT
%dir %{pypyprefix}
%dir %{pypyprefix}/lib-python
-%{pypyprefix}/lib-python/TODO
%{pypyprefix}/lib-python/stdlib-version.txt
%{pypyprefix}/lib-python/%{pylibver}/
%{pypyprefix}/lib-python/modified-%{pylibver}/
@@ -1171,6 +785,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Aug 18 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-1
+- 1.6
+- rewrite the %%check section, introducing per-test timeouts
+
* Tue Aug 2 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.5-2
- add pypytrace-mode.el to the pypy-libs subpackage, for viewing JIT trace
logs in emacs
diff --git a/sources b/sources
index a047407..5660f1e 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-cb9ada2c50666318c3a2863da1fbe487 pypy-1.5-src.tar.bz2
+1189352effc5df7df84e6916b3b3eae3 release-1.6.tar.bz2
commit 1feef4d56b6572b03fd805e50ad8f6e43900cfac
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Wed Aug 3 13:02:57 2011 -0400
add pypytrace-mode.el to the pypy-libs subpackage, for viewing JIT trace logs in emacs
diff --git a/pypy.spec b/pypy.spec
index b4705c1..0c2c717 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.5
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -223,6 +223,9 @@ BuildRequires: gc-devel
BuildRequires: /usr/bin/execstack
+# For byte-compiling the JIT-viewing mode:
+BuildRequires: emacs
+
# pypy is bundling these so we delete them in %%prep. I don't think they are
# needed unless we build pypy targetted at running on the jvm.
#BuildRequires: jna
@@ -248,6 +251,11 @@ CPU architecture.
%package libs
Group: Development/Languages
Summary: Run-time libraries used by PyPy implementations of Python
+
+# We supply an emacs mode for the JIT viewer.
+# (This doesn't bring in all of emacs, just the directory structure)
+Requires: emacs-filesystem >= %{_emacs_version}
+
%description libs
Libraries required by the various PyPy implementations of Python.
@@ -442,6 +450,8 @@ BuildPyPy \
"--stackless"
%endif
+%{_emacs_bytecompile} pypy/jit/tool/pypytrace-mode.el
+
%install
rm -rf $RPM_BUILD_ROOT
@@ -617,6 +627,10 @@ find \
# but given that the objective is to preserve a copy of the source code, those
# are acceptable.
+# Install the JIT trace mode for Emacs:
+mkdir -p %{buildroot}/%{_emacs_sitelispdir}
+cp -a pypy/jit/tool/pypytrace-mode.el* %{buildroot}/%{_emacs_sitelispdir}
+
%check
topdir=$(pwd)
@@ -1135,6 +1149,8 @@ rm -rf $RPM_BUILD_ROOT
%{pypyprefix}/lib-python/conftest.py*
%{pypyprefix}/lib_pypy/
%{pypyprefix}/site-packages/
+%{_emacs_sitelispdir}/pypytrace-mode.el
+%{_emacs_sitelispdir}/pypytrace-mode.elc
%files
%defattr(-,root,root,-)
@@ -1155,6 +1171,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Aug 2 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.5-2
+- add pypytrace-mode.el to the pypy-libs subpackage, for viewing JIT trace
+logs in emacs
+
* Mon May 2 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.5-1
- 1.5
commit 3d2cef177d26ff303a5be984f912e2b8d4266b0d
Author: Dan Horák <dan(a)danny.cz>
Date: Wed May 11 10:15:52 2011 +0200
fix build on non-jit arches
Build on non-jit arch like s390 fails with
[translation:info] Translating target as defined by targetpypystandalone
[platform:msg] Setting platform to 'host' cc=None
Traceback (most recent call last):
File "translate.py", line 322, in <module>
main()
File "translate.py", line 208, in main
targetspec_dic, translateconfig, config, args = parse_options_and_load_target()
File "translate.py", line 176, in parse_options_and_load_target
targetspec_dic['handle_config'](config, translateconfig)
File "targetpypystandalone.py", line 109, in handle_config
raise Exception("You have to specify the --opt level.\n"
Exception: You have to specify the --opt level.
Try --opt=2 or --opt=jit, or equivalently -O2 or -Ojit .
diff --git a/pypy.spec b/pypy.spec
index 1a651e0..b4705c1 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -431,6 +431,8 @@ BuildPyPy \
pypy \
%if 0%{with_jit}
"-Ojit" \
+%else
+ "-O2" \
%endif
%{nil}
commit 169de85aca1a527ea42ef102aa32a40ba1740168
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Mon May 2 14:46:32 2011 -0400
Rebase to 1.5 (rhbz#701121)
Update patches:
patch 0: pypy-1.4-config.patch -> pypy-1.5-config.patch
patch 4: pypy-1.4.1-more-readable-c-code.patch -> pypy-1.5-more-readable-c-code.patch
Remove references to *.inl files, no longer present
Add the following tests to the skip list:
test_audioop, test_capi, test_distutils, test_gc, test_gdb, test_generators,
test_getargs2, test_hotshot, test_io, test_multiprocessing, test_posix,
test_readline, test_scope, test_strop, test_structmembers, test_subprocess,
test_symtable, test_sys_settrace, test_tempfile, test_thread, test_uuid,
test_zipimport_support
Add a couple of text files to the payload (TODO, stdlib-version.txt)
diff --git a/.gitignore b/.gitignore
index 2878978..017cf34 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
/pypy-1.4.1-src.tar.bz2
+/pypy-1.5-src.tar.bz2
diff --git a/pypy-1.4-config.patch b/pypy-1.5-config.patch
similarity index 69%
rename from pypy-1.4-config.patch
rename to pypy-1.5-config.patch
index 0b82ac8..82d8fc9 100644
--- a/pypy-1.4-config.patch
+++ b/pypy-1.5-config.patch
@@ -1,9 +1,10 @@
-Index: pypy-1.4/pypy/translator/platform/linux.py
-===================================================================
---- pypy-1.4.orig/pypy/translator/platform/linux.py
-+++ pypy-1.4/pypy/translator/platform/linux.py
-@@ -3,17 +3,22 @@ import py, os
- from pypy.translator.platform import _run_subprocess
+diff -up pypy-1.5-src/pypy/translator/platform/linux.py.configure-fedora pypy-1.5-src/pypy/translator/platform/linux.py
+--- pypy-1.5-src/pypy/translator/platform/linux.py.configure-fedora 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/platform/linux.py 2011-04-30 18:59:24.041160978 -0400
+@@ -1,13 +1,18 @@
+ """Support for Linux."""
+-
++import os
from pypy.translator.platform.posix import BasePosix
+CFLAGS = ['-O3', '-pthread', '-fomit-frame-pointer',
@@ -22,16 +23,10 @@ Index: pypy-1.4/pypy/translator/platform/linux.py
standalone_only = ()
shared_only = ('-fPIC',)
so_ext = 'so'
- so_prefixes = ('lib', '')
--
-+
- def _args_for_shared(self, args):
- return ['-shared'] + args
-
-@@ -29,9 +34,10 @@ class BaseLinux(BasePosix):
- class Linux(BaseLinux):
+@@ -29,9 +34,10 @@ class Linux(BaseLinux):
shared_only = () # it seems that on 32-bit linux, compiling with -fPIC
# gives assembler that asmgcc is not happy about.
+
- def library_dirs_for_libffi_a(self):
- # places where we need to look for libffi.a
- return self.library_dirs_for_libffi() + ['/usr/lib']
diff --git a/pypy-1.4.1-more-readable-c-code.patch b/pypy-1.5-more-readable-c-code.patch
similarity index 81%
rename from pypy-1.4.1-more-readable-c-code.patch
rename to pypy-1.5-more-readable-c-code.patch
index 45fa534..b7103e2 100644
--- a/pypy-1.4.1-more-readable-c-code.patch
+++ b/pypy-1.5-more-readable-c-code.patch
@@ -1,7 +1,7 @@
-diff -r cd083843b67a pypy/interpreter/pycode.py
---- a/pypy/interpreter/pycode.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/interpreter/pycode.py Wed Jan 05 16:14:35 2011 -0500
-@@ -14,6 +14,7 @@
+diff -up pypy-1.5-src/pypy/interpreter/pycode.py.more-readable-c-code pypy-1.5-src/pypy/interpreter/pycode.py
+--- pypy-1.5-src/pypy/interpreter/pycode.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/interpreter/pycode.py 2011-05-02 14:28:33.942161002 -0400
+@@ -13,6 +13,7 @@ from pypy.interpreter.gateway import Non
from pypy.interpreter.astcompiler.consts import (CO_OPTIMIZED,
CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS, CO_NESTED,
CO_GENERATOR, CO_CONTAINSGLOBALS)
@@ -9,7 +9,7 @@ diff -r cd083843b67a pypy/interpreter/pycode.py
from pypy.rlib.rarithmetic import intmask
from pypy.rlib.debug import make_sure_not_resized
from pypy.rlib import jit
-@@ -81,6 +82,7 @@
+@@ -80,6 +81,7 @@ class PyCode(eval.Code):
self.hidden_applevel = hidden_applevel
self.magic = magic
self._signature = cpython_code_signature(self)
@@ -17,10 +17,10 @@ diff -r cd083843b67a pypy/interpreter/pycode.py
self._initialize()
def _initialize(self):
-@@ -403,3 +405,25 @@
+@@ -396,3 +398,23 @@ class PyCode(eval.Code):
+
def repr(self, space):
return space.wrap(self.get_repr())
- repr.unwrap_spec = ['self', ObjSpace]
+
+ def get_linenum_for_offset(self, offset):
+ # Given a bytecode offset, return a 1-based index into the lines of the
@@ -41,12 +41,10 @@ diff -r cd083843b67a pypy/interpreter/pycode.py
+ # raise an IOError)
+ self._ensure_source()
+ return self._cached_source[linenum - 1]
-+
-+
-diff -r cd083843b67a pypy/objspace/flow/model.py
---- a/pypy/objspace/flow/model.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/objspace/flow/model.py Wed Jan 05 16:14:35 2011 -0500
-@@ -31,6 +31,120 @@
+diff -up pypy-1.5-src/pypy/objspace/flow/model.py.more-readable-c-code pypy-1.5-src/pypy/objspace/flow/model.py
+--- pypy-1.5-src/pypy/objspace/flow/model.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/objspace/flow/model.py 2011-05-02 14:28:33.942161002 -0400
+@@ -31,6 +31,120 @@ from pypy.tool.identity_dict import iden
__metaclass__ = type
@@ -167,7 +165,7 @@ diff -r cd083843b67a pypy/objspace/flow/model.py
class FunctionGraph(object):
__slots__ = ['startblock', 'returnblock', 'exceptblock', '__dict__']
-@@ -94,6 +208,21 @@
+@@ -94,6 +208,21 @@ class FunctionGraph(object):
seen[block] = True
stack += block.exits[::-1]
@@ -189,7 +187,7 @@ diff -r cd083843b67a pypy/objspace/flow/model.py
def iterlinks(self):
block = self.startblock
seen = {block: True}
-@@ -183,14 +312,14 @@
+@@ -183,14 +312,14 @@ class Block(object):
self.exits = [] # list of Link(s)
def at(self):
@@ -207,7 +205,7 @@ diff -r cd083843b67a pypy/objspace/flow/model.py
else:
if (not self.exits) and len(self.inputargs) == 1:
txt = "return block"
-@@ -245,6 +374,21 @@
+@@ -245,6 +374,21 @@ class Block(object):
from pypy.translator.tool.graphpage import try_show
try_show(self)
@@ -229,7 +227,7 @@ diff -r cd083843b67a pypy/objspace/flow/model.py
class Variable(object):
__slots__ = ["_name", "_nr", "concretetype"]
-@@ -331,13 +475,15 @@
+@@ -331,13 +475,15 @@ class WrapException(Exception):
class SpaceOperation(object):
@@ -248,7 +246,7 @@ diff -r cd083843b67a pypy/objspace/flow/model.py
def __eq__(self, other):
return (self.__class__ is other.__class__ and
-@@ -352,8 +498,9 @@
+@@ -352,8 +498,9 @@ class SpaceOperation(object):
return hash((self.opname,tuple(self.args),self.result))
def __repr__(self):
@@ -260,7 +258,7 @@ diff -r cd083843b67a pypy/objspace/flow/model.py
class Atom(object):
def __init__(self, name):
-@@ -448,8 +595,7 @@
+@@ -427,8 +574,7 @@ def copygraph(graph, shallow=False, varm
for op in oplist:
copyop = SpaceOperation(op.opname,
[copyvar(v) for v in op.args],
@@ -270,10 +268,10 @@ diff -r cd083843b67a pypy/objspace/flow/model.py
result.append(copyop)
return result
newblock.operations = copyoplist(block.operations)
-diff -r cd083843b67a pypy/objspace/flow/objspace.py
---- a/pypy/objspace/flow/objspace.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/objspace/flow/objspace.py Wed Jan 05 16:14:35 2011 -0500
-@@ -310,7 +310,9 @@
+diff -up pypy-1.5-src/pypy/objspace/flow/objspace.py.more-readable-c-code pypy-1.5-src/pypy/objspace/flow/objspace.py
+--- pypy-1.5-src/pypy/objspace/flow/objspace.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/objspace/flow/objspace.py 2011-05-02 14:28:33.943161001 -0400
+@@ -313,7 +313,9 @@ class FlowObjSpace(ObjSpace):
def do_operation(self, name, *args_w):
spaceop = SpaceOperation(name, args_w, Variable())
if hasattr(self, 'executioncontext'): # not here during bootstrapping
@@ -284,10 +282,10 @@ diff -r cd083843b67a pypy/objspace/flow/objspace.py
self.executioncontext.recorder.append(spaceop)
return spaceop.result
-diff -r cd083843b67a pypy/objspace/flow/test/test_model.py
---- a/pypy/objspace/flow/test/test_model.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/objspace/flow/test/test_model.py Wed Jan 05 16:14:35 2011 -0500
-@@ -132,3 +132,25 @@
+diff -up pypy-1.5-src/pypy/objspace/flow/test/test_model.py.more-readable-c-code pypy-1.5-src/pypy/objspace/flow/test/test_model.py
+--- pypy-1.5-src/pypy/objspace/flow/test/test_model.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/objspace/flow/test/test_model.py 2011-05-02 14:28:33.943161001 -0400
+@@ -119,3 +119,25 @@ def test_variable():
assert v2.renamed
assert v2.name.startswith("foobar_") and v2.name != v.name
assert v2.name.split('_', 1)[1].isdigit()
@@ -313,10 +311,10 @@ diff -r cd083843b67a pypy/objspace/flow/test/test_model.py
+ assert cmp(oplocA, oplocB) < 0
+ assert cmp(oplocB, oplocA) > 0
+
-diff -r cd083843b67a pypy/rpython/rtyper.py
---- a/pypy/rpython/rtyper.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/rpython/rtyper.py Wed Jan 05 16:14:35 2011 -0500
-@@ -800,7 +800,7 @@
+diff -up pypy-1.5-src/pypy/rpython/rtyper.py.more-readable-c-code pypy-1.5-src/pypy/rpython/rtyper.py
+--- pypy-1.5-src/pypy/rpython/rtyper.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/rpython/rtyper.py 2011-05-02 14:28:33.943161001 -0400
+@@ -800,7 +800,7 @@ class HighLevelOp(object):
return vars
def genop(self, opname, args_v, resulttype=None):
@@ -325,7 +323,7 @@ diff -r cd083843b67a pypy/rpython/rtyper.py
def gendirectcall(self, ll_function, *args_v):
return self.llops.gendirectcall(ll_function, *args_v)
-@@ -935,7 +935,7 @@
+@@ -935,7 +935,7 @@ class LowLevelOpList(list):
v.concretetype))
return v
@@ -334,7 +332,7 @@ diff -r cd083843b67a pypy/rpython/rtyper.py
try:
for v in args_v:
v.concretetype
-@@ -944,7 +944,7 @@
+@@ -944,7 +944,7 @@ class LowLevelOpList(list):
" and pass its result to genop(),"
" never hop.args_v directly.")
vresult = Variable()
@@ -343,18 +341,18 @@ diff -r cd083843b67a pypy/rpython/rtyper.py
if resulttype is None:
vresult.concretetype = Void
return None
-diff -r cd083843b67a pypy/translator/backendopt/inline.py
---- a/pypy/translator/backendopt/inline.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/backendopt/inline.py Wed Jan 05 16:14:35 2011 -0500
-@@ -4,6 +4,7 @@
+diff -up pypy-1.5-src/pypy/translator/backendopt/inline.py.more-readable-c-code pypy-1.5-src/pypy/translator/backendopt/inline.py
+--- pypy-1.5-src/pypy/translator/backendopt/inline.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/backendopt/inline.py 2011-05-02 14:32:26.975161005 -0400
+@@ -4,6 +4,7 @@ from pypy.translator.simplify import get
from pypy.translator.unsimplify import copyvar
from pypy.objspace.flow.model import Variable, Constant, Block, Link
from pypy.objspace.flow.model import SpaceOperation, c_last_exception
+from pypy.objspace.flow.model import OperationLoc
from pypy.objspace.flow.model import FunctionGraph
- from pypy.objspace.flow.model import traverse, mkentrymap, checkgraph
+ from pypy.objspace.flow.model import mkentrymap, checkgraph
from pypy.annotation import model as annmodel
-@@ -231,6 +232,7 @@
+@@ -231,6 +232,7 @@ class BaseInliner(object):
self.varmap = {}
self._copied_blocks = {}
self.op = block.operations[index_operation]
@@ -362,7 +360,7 @@ diff -r cd083843b67a pypy/translator/backendopt/inline.py
self.graph_to_inline = self.get_graph_from_op(self.op)
self.exception_guarded = False
if (block.exitswitch == c_last_exception and
-@@ -297,7 +299,9 @@
+@@ -290,7 +292,9 @@ class BaseInliner(object):
def copy_operation(self, op):
args = [self.get_new_name(arg) for arg in op.args]
@@ -373,9 +371,9 @@ diff -r cd083843b67a pypy/translator/backendopt/inline.py
return result
def copy_block(self, block):
-diff -r cd083843b67a pypy/translator/c/funcgen.py
---- a/pypy/translator/c/funcgen.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/c/funcgen.py Wed Jan 05 16:14:35 2011 -0500
+diff -up pypy-1.5-src/pypy/translator/c/funcgen.py.more-readable-c-code pypy-1.5-src/pypy/translator/c/funcgen.py
+--- pypy-1.5-src/pypy/translator/c/funcgen.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/c/funcgen.py 2011-05-02 14:28:33.944161001 -0400
@@ -1,4 +1,6 @@
import sys
+import inspect
@@ -383,7 +381,7 @@ diff -r cd083843b67a pypy/translator/c/funcgen.py
from pypy.translator.c.support import USESLOTS # set to False if necessary while refactoring
from pypy.translator.c.support import cdecl
from pypy.translator.c.support import llvalue_from_constant, gen_assignments
-@@ -22,6 +24,38 @@
+@@ -22,6 +24,38 @@ LOCALVAR = 'l_%s'
KEEP_INLINED_GRAPHS = False
@@ -422,7 +420,7 @@ diff -r cd083843b67a pypy/translator/c/funcgen.py
class FunctionCodeGenerator(object):
"""
Collects information about a function which we have to generate
-@@ -210,14 +244,57 @@
+@@ -210,14 +244,57 @@ class FunctionCodeGenerator(object):
def cfunction_body(self):
graph = self.graph
@@ -483,7 +481,7 @@ diff -r cd083843b67a pypy/translator/c/funcgen.py
for line in self.gen_op(op):
yield line
if len(block.exits) == 0:
-@@ -310,7 +387,7 @@
+@@ -309,7 +386,7 @@ class FunctionCodeGenerator(object):
assignments.append((a2typename, dest, src))
for line in gen_assignments(assignments):
yield line
@@ -492,16 +490,16 @@ diff -r cd083843b67a pypy/translator/c/funcgen.py
if link.target in self.innerloops:
loop = self.innerloops[link.target]
if link is loop.links[-1]: # link that ends a loop
-diff -r cd083843b67a pypy/translator/c/test/test_genc.py
---- a/pypy/translator/c/test/test_genc.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/c/test/test_genc.py Wed Jan 05 16:14:35 2011 -0500
+diff -up pypy-1.5-src/pypy/translator/c/test/test_genc.py.more-readable-c-code pypy-1.5-src/pypy/translator/c/test/test_genc.py
+--- pypy-1.5-src/pypy/translator/c/test/test_genc.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/c/test/test_genc.py 2011-05-02 14:28:33.945161001 -0400
@@ -1,4 +1,5 @@
import autopath, sys, os, py
+import re
from pypy.rpython.lltypesystem.lltype import *
from pypy.annotation import model as annmodel
from pypy.translator.translator import TranslationContext
-@@ -498,3 +499,130 @@
+@@ -515,3 +516,130 @@ def test_inhibit_tail_call():
else:
assert 0, "the call was not found in the C source"
assert 'PYPY_INHIBIT_TAIL_CALL();' in lines[i+1]
@@ -632,10 +630,10 @@ diff -r cd083843b67a pypy/translator/c/test/test_genc.py
+ assert 'Here is a ' in c_fn_src
+ assert 'style comment within an RPython docstring' in c_fn_src
+
-diff -r cd083843b67a pypy/translator/driver.py
---- a/pypy/translator/driver.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/driver.py Wed Jan 05 16:14:35 2011 -0500
-@@ -539,6 +539,7 @@
+diff -up pypy-1.5-src/pypy/translator/driver.py.more-readable-c-code pypy-1.5-src/pypy/translator/driver.py
+--- pypy-1.5-src/pypy/translator/driver.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/driver.py 2011-05-02 14:28:33.945161001 -0400
+@@ -536,6 +536,7 @@ class TranslationDriver(SimpleTaskEngine
dstname = self.compute_exe_name() + '.staticdata.info'
shutil.copy(str(fname), str(dstname))
self.log.info('Static data info written to %s' % dstname)
@@ -643,12 +641,12 @@ diff -r cd083843b67a pypy/translator/driver.py
#
task_source_c = taskdef(task_source_c, ['database_c'], "Generating c source")
-diff -r cd083843b67a pypy/translator/gensupp.py
---- a/pypy/translator/gensupp.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/gensupp.py Wed Jan 05 16:14:35 2011 -0500
-@@ -16,8 +16,8 @@
- def visit(block):
- if isinstance(block, Block):
+diff -up pypy-1.5-src/pypy/translator/gensupp.py.more-readable-c-code pypy-1.5-src/pypy/translator/gensupp.py
+--- pypy-1.5-src/pypy/translator/gensupp.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/gensupp.py 2011-05-02 14:33:31.026161001 -0400
+@@ -14,8 +14,8 @@ def ordered_blocks(graph):
+ allblocks = []
+ for block in graph.iterblocks():
# first we order by offset in the code string
- if block.operations:
- ofs = block.operations[0].offset
@@ -657,10 +655,10 @@ diff -r cd083843b67a pypy/translator/gensupp.py
else:
ofs = sys.maxint
# then we order by input variable name or value
-diff -r cd083843b67a pypy/translator/interactive.py
---- a/pypy/translator/interactive.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/interactive.py Wed Jan 05 16:14:35 2011 -0500
-@@ -138,7 +138,7 @@
+diff -up pypy-1.5-src/pypy/translator/interactive.py.more-readable-c-code pypy-1.5-src/pypy/translator/interactive.py
+--- pypy-1.5-src/pypy/translator/interactive.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/interactive.py 2011-05-02 14:28:33.946161001 -0400
+@@ -138,7 +138,7 @@ class Translation(object):
def source_c(self, argtypes=None, **kwds):
self.update_options(argtypes, kwds)
self.ensure_backend('c')
@@ -669,10 +667,10 @@ diff -r cd083843b67a pypy/translator/interactive.py
def source_cl(self, argtypes=None, **kwds):
self.update_options(argtypes, kwds)
-diff -r cd083843b67a pypy/translator/llsupport/wrapper.py
---- a/pypy/translator/llsupport/wrapper.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/llsupport/wrapper.py Wed Jan 05 16:14:35 2011 -0500
-@@ -59,6 +59,8 @@
+diff -up pypy-1.5-src/pypy/translator/llsupport/wrapper.py.more-readable-c-code pypy-1.5-src/pypy/translator/llsupport/wrapper.py
+--- pypy-1.5-src/pypy/translator/llsupport/wrapper.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/llsupport/wrapper.py 2011-05-02 14:28:33.946161001 -0400
+@@ -59,6 +59,8 @@ def new_wrapper(func, translator, newnam
# "return result"
block = Block(wrapper_inputargs)
wgraph = FunctionGraph('pyfn_' + (newname or func.func_name), block)
@@ -681,10 +679,10 @@ diff -r cd083843b67a pypy/translator/llsupport/wrapper.py
translator.update_call_graph(wgraph, graph, object())
translator.graphs.append(wgraph)
block.operations[:] = newops
-diff -r cd083843b67a pypy/translator/simplify.py
---- a/pypy/translator/simplify.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/simplify.py Wed Jan 05 16:14:35 2011 -0500
-@@ -294,7 +294,7 @@
+diff -up pypy-1.5-src/pypy/translator/simplify.py.more-readable-c-code pypy-1.5-src/pypy/translator/simplify.py
+--- pypy-1.5-src/pypy/translator/simplify.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/simplify.py 2011-05-02 14:28:33.952161001 -0400
+@@ -298,7 +298,7 @@ def join_blocks(graph):
return renaming.get(v, v)
def rename_op(op):
args = [rename(a) for a in op.args]
diff --git a/pypy.spec b/pypy.spec
index c69893a..1a651e0 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 1.4.1
-Release: 10%{?dist}
+Version: 1.5
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -105,7 +105,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%global verbose_logs 0
%global pypyprefix %{_libdir}/pypy-%{version}
-%global pylibver 2.5.2
+%global pylibver 2.7
# We refer to this subdir of the source tree in a few places during the build:
%global goal_dir pypy/translator/goal
@@ -120,7 +120,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Source0: http://pypy.org/download/pypy-%{version}-src.tar.bz2
# Edit a translator file for linux in order to configure our cflags and dynamic libffi
-Patch0: pypy-1.4-config.patch
+Patch0: pypy-1.5-config.patch
# By default, if built at a tty, the translation process renders a Mandelbrot
# set to indicate progress.
@@ -150,7 +150,7 @@ Patch3: pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
# http://codespeak.net/pipermail/pypy-dev/2010q4/006532.html
# TODO: get this into the upstream bug tracker, and finish inlining
# support (rhbz#666963)
-Patch4: pypy-1.4.1-more-readable-c-code.patch
+Patch4: pypy-1.5-more-readable-c-code.patch
# Build-time requirements:
@@ -584,7 +584,7 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
# 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 include/*.inl %{buildroot}/%{pypy_include_dir}
+cp include/*.h %{buildroot}/%{pypy_include_dir}
# Capture the RPython source code files from the build within the debuginfo
@@ -698,6 +698,25 @@ CheckPyPy() {
# seems to hang on this test, within test_line_terminator
SkipTest test_asynchat
+ # test_audioop:
+ # test test_audioop crashed -- <type 'exceptions.ImportError'>: No module named audioop
+ # Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/regrtest.py", line 874, in runtest_inner
+ # the_package = __import__(abstest, globals(), locals(), [])
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_audioop.py", line 1, in <module>
+ # import audioop
+ # ImportError: No module named audioop
+ SkipTest test_audioop
+
+ # test_capi:
+ # RPython traceback:
+ # RPython traceback:
+ # File "implement.c", line 243013, in _PyObject_New
+ # File "implement_1.c", line 31707, in _PyObject_NewVar
+ # File "implement.c", line 217060, in from_ref
+ # Fatal RPython error: AssertionError
+ SkipTest test_capi
+
# test_compiler:
# 4 errors out of 13:
# testSourceCodeEncodingsError
@@ -710,10 +729,102 @@ CheckPyPy() {
# failures=17, errors=20, out of 132 tests
SkipTest test_ctypes
+ # test_distutils:
+ # Warning -- os.environ was modified by test_distutils
+ # test test_distutils failed -- multiple errors occurred; run in verbose mode for details
+ SkipTest test_distutils
+
# test_frozen:
# TestFailed: import __hello__ failed:No module named __hello__
SkipTest test_frozen
+ # test_gc:
+ # test test_gc crashed -- <type 'exceptions.AttributeError'>: 'module' object has no attribute 'get_debug'
+ SkipTest test_gc
+
+ # test_gdb:
+ # test test_gdb crashed -- <type 'exceptions.KeyError'>: 'PY_CFLAGS'
+ SkipTest test_gdb
+
+ # test_generators:
+ # **********************************************************************
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
+ # Failed example:
+ # del g; gc_collect()
+ # Expected:
+ # exiting
+ # Got nothing
+ # **********************************************************************
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
+ # Failed example:
+ # del g; gc_collect()
+ # Expected:
+ # exiting
+ # Got nothing
+ # **********************************************************************
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
+ # Failed example:
+ # del g; gc_collect()
+ # Expected:
+ # finally
+ # Got nothing
+ # **********************************************************************
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
+ # Failed example:
+ # sys.stderr.getvalue().startswith(
+ # "Exception RuntimeError: 'generator ignored GeneratorExit' in "
+ # )
+ # Expected:
+ # True
+ # Got:
+ # False
+ # **********************************************************************
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.refleaks
+ # Failed example:
+ # try:
+ # sys.stderr = StringIO.StringIO()
+ # class Leaker:
+ # def __del__(self):
+ # raise RuntimeError
+ # l = Leaker()
+ # del l
+ # gc_collect()
+ # err = sys.stderr.getvalue().strip()
+ # err.startswith(
+ # "Exception RuntimeError: RuntimeError() in "
+ # )
+ # err.endswith("> ignored")
+ # len(err.splitlines())
+ # finally:
+ # sys.stderr = old
+ # Expected:
+ # True
+ # True
+ # 1
+ # Got:
+ # False
+ # False
+ # 0
+ # **********************************************************************
+ # 2 items had failures:
+ # 4 of 107 in test.test_generators.__test__.coroutine
+ # 1 of 11 in test.test_generators.__test__.refleaks
+ # ***Test Failed*** 5 failures.
+ # test test_generators failed -- 5 of 294 doctests failed
+ SkipTest test_generators
+
+ # test_getargs2:
+ # test test_getargs2 failed -- multiple errors occurred; run in verbose mode for details
+ SkipTest test_getargs2
+
+ # test_hotshot:
+ # test test_hotshot crashed -- <type 'exceptions.ImportError'>: No module named _hotshot
+ SkipTest test_hotshot
+
+ # test_io:
+ # test test_io failed -- multiple errors occurred; run in verbose mode for details
+ SkipTest test_io
+
# test_ioctl:
# Failing in Koji with dist-f15 with:
# ======================================================================
@@ -737,6 +848,23 @@ CheckPyPy() {
# 24 failures out of 25, apparently all due to TypeError
SkipTest test_iterlen
+ # test_multiprocessing:
+ # test test_multiprocessing failed -- multiple errors occurred; run in verbose mode for details
+ SkipTest test_multiprocessing
+
+ # test_module:
+ # test test_module failed -- Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_module.py", line 81, in test_clear_dict_in_ref_cycle
+ # self.assertEqual(destroyed, [1])
+ # AssertionError: Lists differ: [] != [1]
+ # Second list contains 1 additional elements.
+ # First extra element 0:
+ # 1
+ # - []
+ # + [1]
+ # ? +
+ SkipTest test_module
+
# test_parser:
# 12 failures out of 15
SkipTest test_parser
@@ -746,6 +874,44 @@ CheckPyPy() {
# test test_platform failed -- errors occurred in test.test_platform.PlatformTest
SkipTest test_platform
+ # test_posix:
+ # test test_posix failed -- Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 361, in test_getcwd_long_pathnames
+ # _create_and_do_getcwd(dirname)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 351, in _create_and_do_getcwd
+ # _create_and_do_getcwd(dirname, current_path_length + len(dirname) + 1)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 351, in _create_and_do_getcwd
+ # _create_and_do_getcwd(dirname, current_path_length + len(dirname) + 1)
+ # [...repeats...]
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 351, in _create_and_do_getcwd
+ # _create_and_do_getcwd(dirname, current_path_length + len(dirname) + 1)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 356, in _create_and_do_getcwd
+ # self.assertEqual(e.errno, expected_errno)
+ # AssertionError: 36 != 34
+ SkipTest test_posix
+
+ # test_readline:
+ # test test_readline failed -- Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_readline.py", line 16, in testHistoryUpdates
+ # readline.clear_history()
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/readline.py", line 277, in clear_history
+ # del self.get_reader().history[:]
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/readline.py", line 186, in get_reader
+ # console = UnixConsole(self.f_in, self.f_out, encoding=ENCODING)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/unix_console.py", line 103, in __init__
+ # self._clear = _my_getstr("clear")
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/unix_console.py", line 45, in _my_getstr
+ # "terminal doesn't have the required '%s' capability"%cap
+ # InvalidTerminal: terminal doesn't have the required 'clear' capability
+ SkipTest test_readline
+
+ # test_scope:
+ # test test_scope failed -- Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_scope.py", line 437, in testLeaks
+ # self.assertEqual(Foo.count, 0)
+ # AssertionError: 100 != 0
+ SkipTest test_scope
+
# test_socket:
# testSockName can fail in Koji with:
# my_ip_addr = socket.gethostbyname(socket.gethostname())
@@ -761,10 +927,138 @@ CheckPyPy() {
# ProgrammingError: Incomplete statement ''
SkipTest test_sqlite
+ # test_strop:
+ # test test_strop crashed -- <type 'exceptions.ImportError'>: No module named strop
+ SkipTest test_strop
+
+ # test_structmembers:
+ # test test_structmembers failed -- multiple errors occurred; run in verbose mode for details
+ SkipTest test_structmembers
+
+ # test_subprocess:
+ # debug: WARNING: library path not found, using compiled-in sys.path and sys.prefix will be unset
+ # 'import site' failed
+ # .
+ # this bit of output is from a test of stdout in a different process ...
+ # /builddir/build/BUILD/pypy-1.5-src/lib_pypy/ctypes_support.py:26: RuntimeWarning: C function without declared arguments called
+ # return standard_c_lib.__errno_location()
+ # debug: WARNING: library path not found, using compiled-in sys.path and sys.prefix will be unset
+ # 'import site' failed
+ # .
+ # this bit of output is from a test of stdout in a different process ...
+ # test test_subprocess failed -- multiple errors occurred; run in verbose mode for details
+ SkipTest test_subprocess
+
+ # test_symtable:
+ # test test_symtable crashed -- <type 'exceptions.ImportError'>: No module named _symtable
+ SkipTest test_symtable
+
+ # test_sys_settrace:
+ # test test_sys_settrace failed -- Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 334, in test_13_genexp
+ # self.run_test(generator_example)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 280, in run_test
+ # self.run_and_compare(func, func.events)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 277, in run_and_compare
+ # tracer.events, events)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 269, in compare_events
+ # [str(x) for x in events])))
+ # AssertionError: events did not match expectation:
+ # (0, 'call')
+ # (2, 'line')
+ # (-6, 'call')
+ # (-5, 'line')
+ # (-4, 'line')
+ # (-4, 'return')
+ # - (-4, 'call')
+ # - (-4, 'exception')
+ # - (-1, 'line')
+ # - (-1, 'return')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (5, 'return')
+ SkipTest test_sys_settrace
+
+ # test_tempfile:
+ # test test_tempfile failed -- multiple errors occurred; run in verbose mode for details
+ SkipTest test_tempfile
+
+ # test_thread
+ # Koji build appears to hang here
+ SkipTest test_thread
+
# test_traceback:
# works when run standalone; failures seen when run as part of a suite
SkipTest test_traceback
+ # test_uuid:
+ # ======================================================================
+ # ERROR: test_ifconfig_getnode (test.test_uuid.TestUUID)
+ # ----------------------------------------------------------------------
+ # Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_uuid.py", line 306, in test_ifconfig_getnode
+ # node = uuid._ifconfig_getnode()
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/uuid.py", line 326, in _ifconfig_getnode
+ # ip_addr = socket.gethostbyname(socket.gethostname())
+ # gaierror: [Errno -3] Temporary failure in name resolution
+ # ----------------------------------------------------------------------
+ # Ran 14 tests in 0.369s
+ # FAILED (errors=1)
+ SkipTest test_uuid
+
+ # test_zipimport_support:
+ # ======================================================================
+ # ERROR: test_doctest_main_issue4197 (test.test_zipimport_support.ZipSupportTests)
+ # ----------------------------------------------------------------------
+ # Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_zipimport_support.py", line 194, in test_doctest_main_issue4197
+ # exit_code, data = run_python(script_name)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/script_helper.py", line 80, in run_python
+ # p = spawn_python(*args, **kwargs)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/script_helper.py", line 66, in spawn_python
+ # **kwargs)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 672, in __init__
+ # errread, errwrite)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 1206, in _execute_child
+ # raise child_exception
+ # OSError: [Errno 13] Permission denied
+ # ======================================================================
+ # ERROR: test_pdb_issue4201 (test.test_zipimport_support.ZipSupportTests)
+ # ----------------------------------------------------------------------
+ # Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_zipimport_support.py", line 221, in test_pdb_issue4201
+ # p = spawn_python(script_name)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/script_helper.py", line 66, in spawn_python
+ # **kwargs)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 672, in __init__
+ # errread, errwrite)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 1206, in _execute_child
+ # raise child_exception
+ # OSError: [Errno 13] Permission denied
+ # ----------------------------------------------------------------------
+ # Ran 4 tests in 0.726s
+ # FAILED (errors=2)
+ SkipTest test_zipimport_support
+
# test_zlib:
# failure seen in Koji, not sure of reason why:
# test test_zlib failed -- Traceback (most recent call last):
@@ -832,6 +1126,8 @@ rm -rf $RPM_BUILD_ROOT
%dir %{pypyprefix}
%dir %{pypyprefix}/lib-python
+%{pypyprefix}/lib-python/TODO
+%{pypyprefix}/lib-python/stdlib-version.txt
%{pypyprefix}/lib-python/%{pylibver}/
%{pypyprefix}/lib-python/modified-%{pylibver}/
%{pypyprefix}/lib-python/conftest.py*
@@ -847,7 +1143,6 @@ rm -rf $RPM_BUILD_ROOT
%defattr(-,root,root,-)
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
-%{pypy_include_dir}/*.inl
%if 0%{with_stackless}
%files stackless
@@ -858,6 +1153,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon May 2 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.5-1
+- 1.5
+
* Wed Apr 20 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-10
- build a /usr/bin/pypy (but without the JIT compiler) on architectures that
don't support the JIT, so that they do at least have something that runs
diff --git a/sources b/sources
index 90f34be..a047407 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-ebbbb156b1eb842e9e65d909ed5f9f6d pypy-1.4.1-src.tar.bz2
+cb9ada2c50666318c3a2863da1fbe487 pypy-1.5-src.tar.bz2
commit 3ca83f1944c99711e69be7a733f36a976d1fcec2
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Sat Apr 30 18:24:07 2011 -0400
Fix the build on architectures that the JIT doesn't support
- build a /usr/bin/pypy (but without the JIT compiler) on architectures that
don't support the JIT, so that they do at least have something that runs
diff --git a/pypy.spec b/pypy.spec
index ca09b94..c69893a 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.4.1
-Release: 9%{?dist}
+Release: 10%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -74,7 +74,10 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# [Timer] Total: --- 5215.3 s
-# Should we build a "pypy" binary? (with jit)
+# We will build a "pypy" binary.
+#
+# Unfortunately, the JIT support is only available on some architectures.
+#
# pypy-1.4/pypy/jit/backend/detect_cpu.py:getcpuclassname currently supports the
# following options:
# 'i386', 'x86'
@@ -82,6 +85,11 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# 'x86_64'
# 'cli'
# 'llvm'
+#
+# We will only build with JIT support on those architectures, and build without
+# it on the other archs. The resulting binary will typically be slower than
+# CPython for the latter case.
+#
%ifarch %{ix86} x86_64
# FIXME: is there a better way of expressing "intel" here?
%global with_jit 1
@@ -225,8 +233,16 @@ BuildRequires: /usr/bin/execstack
Requires: pypy-libs = %{version}-%{release}
%description
-PyPy's implementation of Python, featuring a Just-In-Time compiler, and various
-optimized implementations of the standard types (strings, dictionaries, etc)
+PyPy's implementation of Python, featuring a Just-In-Time compiler on some CPU
+architectures, and various optimized implementations of the standard types
+(strings, dictionaries, etc)
+
+%if 0%{with_jit}
+This build of PyPy has JIT-compilation enabled.
+%else
+This build of PyPy has JIT-compilation disabled, as it is not supported on this
+CPU architecture.
+%endif
%package libs
@@ -411,11 +427,12 @@ BuildPyPy() {
popd
}
-%if 0%{with_jit}
BuildPyPy \
pypy \
- "-Ojit"
+%if 0%{with_jit}
+ "-Ojit" \
%endif
+ %{nil}
%if 0%{with_stackless}
BuildPyPy \
@@ -448,9 +465,7 @@ InstallPyPy() {
mkdir -p %{buildroot}/%{_bindir}
-%if 0%{with_jit}
InstallPyPy pypy
-%endif
%if 0%{with_stackless}
InstallPyPy pypy-stackless
@@ -799,9 +814,7 @@ CheckPyPy() {
echo "--------------------------------------------------------------"
}
-%if 0%{with_jit}
CheckPyPy pypy
-%endif
%if 0%{with_stackless}
CheckPyPy pypy-stackless
@@ -825,12 +838,10 @@ rm -rf $RPM_BUILD_ROOT
%{pypyprefix}/lib_pypy/
%{pypyprefix}/site-packages/
-%if 0%{with_jit}
%files
%defattr(-,root,root,-)
%doc LICENSE README
%{_bindir}/pypy
-%endif
%files devel
%defattr(-,root,root,-)
@@ -847,6 +858,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Wed Apr 20 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-10
+- build a /usr/bin/pypy (but without the JIT compiler) on architectures that
+don't support the JIT, so that they do at least have something that runs
+
* Tue Feb 08 2011 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 1.4.1-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
commit d853ff6a5bdd4ce40976333f048aba1616374604
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Tue Feb 8 20:23:05 2011 -0600
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
diff --git a/pypy.spec b/pypy.spec
index 6f44a9a..ca09b94 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.4.1
-Release: 8%{?dist}
+Release: 9%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -847,6 +847,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Feb 08 2011 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 1.4.1-9
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
+
* Fri Jan 14 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-8
- disable self-hosting for now, due to fatal error seen JIT-compiling the
translator
commit c225b1c0921c528b804bdce231951a10f040cb6c
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Fri Jan 14 11:58:45 2011 -0500
Disable self-hosting for now, due to fatal error seen JIT-compiling the translator
diff --git a/pypy.spec b/pypy.spec
index 9c8134d..6f44a9a 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.4.1
-Release: 7%{?dist}
+Release: 8%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -152,8 +152,38 @@ Patch4: pypy-1.4.1-more-readable-c-code.patch
#
# Turn it off with this boolean, to revert back to rebuilding using CPython
# and avoid a cycle in the build-time dependency graph:
+
+# I'm disabling the self-hosting for now, due to a fatal error seen inside the
+# JIT, presumably whilst JIT-compiling something within the translator's
+# inliner.
+#
+# Specifically, building pypy-1.4.1-7.fc15.src.rpm on x86_64 using pypy-1.4.1-5.fc15.x86_64
+# http://koji.fedoraproject.org/koji/taskinfo?taskID=2721517
+# failed with this RPython traceback:
+# ... snip ...
+# [rtyper:WARNING] prebuilt instance <pypy.rpython.memory.gctransform.asmgcroot.ShapeDecompressor instance at 0x00000000f0b5bc80> has no attribute 'addr'
+# [rtyper] specializing: 179300 / 180508 blocks (99%)
+# [rtyper] specializing: 180500 / 180566 blocks (99%)
+# [rtyper] -=- specialized 1363 more blocks -=-
+# [rtyper] specializing: 180600 / 180777 blocks (99%)
+# [rtyper] -=- specialized 211 more blocks -=-
+# [backendopt:inlining] phase with threshold factor: 32.4
+# [backendopt:inlining] heuristic: pypy.translator.backendopt.inline.inlining_heuristic
+# [x86/regalloc] Bogus arg in operation 76 at 0
+# RPython traceback:
+# File "implement_62.c", line 39979, in send_bridge_to_backend
+# File "implement_69.c", line 65301, in Assembler386_assemble_bridge
+# File "implement_72.c", line 8078, in RegAlloc_prepare_bridge
+# File "implement_40.c", line 53061, in RegAlloc__prepare
+# File "implement_44.c", line 14305, in RegAlloc__compute_vars_longevity
+# Fatal RPython error: NotImplementedError
#
-%global use_self_when_building 1
+# This appears to be deep within pypy/jit/backend/x86/regalloc.py which has
+# called "not_implemented" to emit this message to stderr, before raising the
+# exception:
+# [x86/regalloc] Bogus arg in operation 76 at 0
+
+%global use_self_when_building 0
%if 0%{use_self_when_building}
BuildRequires: pypy
%global bootstrap_python_interp pypy
@@ -817,6 +847,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Fri Jan 14 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-8
+- disable self-hosting for now, due to fatal error seen JIT-compiling the
+translator
+
* Fri Jan 14 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-7
- skip test_ioctl for now
commit 7632349386659a82412f3dfbd37e714bf56aa152
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Fri Jan 14 11:06:07 2011 -0500
skip test_ioctl for now
diff --git a/pypy.spec b/pypy.spec
index 71b2db6..9c8134d 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.4.1
-Release: 6%{?dist}
+Release: 7%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -669,6 +669,25 @@ CheckPyPy() {
# TestFailed: import __hello__ failed:No module named __hello__
SkipTest test_frozen
+ # test_ioctl:
+ # Failing in Koji with dist-f15 with:
+ # ======================================================================
+ # FAIL: test_ioctl (test.test_ioctl.IoctlTests)
+ # ----------------------------------------------------------------------
+ # Traceback (most recent call last):
+ # File "/usr/lib/pypy-1.4.1/lib-python/2.5.2/test/test_ioctl.py", line 25, in test_ioctl
+ # self.assert_(rpgrp in ids, "%s not in %s" % (rpgrp, ids))
+ # AssertionError: 0 not in (8304, 17737)
+ # ======================================================================
+ # FAIL: test_ioctl_mutate (test.test_ioctl.IoctlTests)
+ # ----------------------------------------------------------------------
+ # Traceback (most recent call last):
+ # File "/usr/lib/pypy-1.4.1/lib-python/2.5.2/test/test_ioctl.py", line 35, in test_ioctl_mutate
+ # self.assert_(rpgrp in ids, "%s not in %s" % (rpgrp, ids))
+ # AssertionError: 0 not in (8304, 17737)
+ # ----------------------------------------------------------------------
+ SkipTest test_ioctl
+
# test_iterlen:
# 24 failures out of 25, apparently all due to TypeError
SkipTest test_iterlen
@@ -798,6 +817,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Fri Jan 14 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-7
+- skip test_ioctl for now
+
* Thu Jan 13 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-6
- add a "pypy-devel" subpackage, and install the header files there
- in %%check, re-run failed tests in verbose mode
commit 0a81116e89104e6bd77075151eadf5bde029085d
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Thu Jan 13 19:51:26 2011 -0500
Add a pypy-devel subpackage; rerun failed selftests in verbose mode
* Thu Jan 13 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-6
- add a "pypy-devel" subpackage, and install the header files there
- in %%check, re-run failed tests in verbose mode
diff --git a/pypy.spec b/pypy.spec
index 4d66f89..71b2db6 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.4.1
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -205,6 +205,16 @@ Summary: Run-time libraries used by PyPy implementations of Python
%description libs
Libraries required by the various PyPy implementations of Python.
+
+%package devel
+Group: Development/Languages
+Summary: Development tools for working with PyPy
+%description devel
+Header files for building C extension modules against PyPy
+
+Requires: pypy = %{version}-%{release}
+
+
%if 0%{with_stackless}
%package stackless
Group: Development/Languages
@@ -516,6 +526,22 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
%{buildroot}/%{_bindir}/pypy \
0
+
+# Header files for C extension modules.
+# Upstream's packaging process (pypy/tool/release/package.py)
+# creates an "include" subdir and copies all *.h/*.inl from "include" there
+# (it also has an apparently out-of-date comment about copying them from
+# pypy/_interfaces, but this directory doesn't seem to exist, and it doesn't
+# seem to do this as of 2011-01-13)
+
+# FIXME: arguably these should be instead put into a subdir below /usr/include,
+# 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 include/*.inl %{buildroot}/%{pypy_include_dir}
+
+
# Capture the RPython source code files from the build within the debuginfo
# package (rhbz#666975)
%global pypy_debuginfo_dir /usr/src/debug/pypy-%{version}-src
@@ -692,8 +718,9 @@ CheckPyPy() {
SkipTest test_tarfile # permissions issues
%endif
- # Run the built binary through the selftests:
- time ./$ExeName -m test.regrtest -x $TESTS_TO_SKIP
+ # Run the built binary through the selftests
+ # "-w" : re-run failed tests in verbose mode
+ time ./$ExeName -m test.regrtest -w -x $TESTS_TO_SKIP
popd
@@ -756,6 +783,12 @@ rm -rf $RPM_BUILD_ROOT
%{_bindir}/pypy
%endif
+%files devel
+%defattr(-,root,root,-)
+%dir %{pypy_include_dir}
+%{pypy_include_dir}/*.h
+%{pypy_include_dir}/*.inl
+
%if 0%{with_stackless}
%files stackless
%defattr(-,root,root,-)
@@ -765,6 +798,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Jan 13 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-6
+- add a "pypy-devel" subpackage, and install the header files there
+- in %%check, re-run failed tests in verbose mode
+
* Fri Jan 7 2011 Dan Horák <dan[at]danny.cz> - 1.4.1-5
- valgrind available only on selected architectures
commit d39359a3af6a0dee27f50e4a4fe52860f9c6b426
Author: Dan Horák <dan(a)danny.cz>
Date: Fri Jan 7 17:56:06 2011 +0100
- valgrind available only on selected architectures
diff --git a/pypy.spec b/pypy.spec
index 162ed5f..4d66f89 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.4.1
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -176,7 +176,9 @@ BuildRequires: bzip2-devel
BuildRequires: ncurses-devel
BuildRequires: expat-devel
BuildRequires: openssl-devel
+%ifarch %{ix86} x86_64 ppc ppc64 s390x
BuildRequires: valgrind-devel
+%endif
# Used by the selftests, though not by the build:
BuildRequires: gc-devel
@@ -763,6 +765,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Fri Jan 7 2011 Dan Horák <dan[at]danny.cz> - 1.4.1-5
+- valgrind available only on selected architectures
+
* Wed Jan 5 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-4
- rebuild pypy using itself, for speed, with a boolean to break this cycle in
the build-requirement graph (falling back to using "python-devel" aka CPython)
commit 00e57e74f81587a2c49341341a7a291a54e22dc8
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Thu Jan 6 17:09:03 2011 -0500
* Wed Jan 5 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-4
- rebuild pypy using itself, for speed, with a boolean to break this cycle in
the build-requirement graph (falling back to using "python-devel" aka CPython)
- add work-in-progress patch to try to make generated c more readable
(rhbz#666963)
- capture the RPython source code files from the build within the debuginfo
package (rhbz#666975)
diff --git a/pypy-1.4.1-more-readable-c-code.patch b/pypy-1.4.1-more-readable-c-code.patch
new file mode 100644
index 0000000..45fa534
--- /dev/null
+++ b/pypy-1.4.1-more-readable-c-code.patch
@@ -0,0 +1,695 @@
+diff -r cd083843b67a pypy/interpreter/pycode.py
+--- a/pypy/interpreter/pycode.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/interpreter/pycode.py Wed Jan 05 16:14:35 2011 -0500
+@@ -14,6 +14,7 @@
+ from pypy.interpreter.astcompiler.consts import (CO_OPTIMIZED,
+ CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS, CO_NESTED,
+ CO_GENERATOR, CO_CONTAINSGLOBALS)
++from pypy.interpreter.pytraceback import offset2lineno
+ from pypy.rlib.rarithmetic import intmask
+ from pypy.rlib.debug import make_sure_not_resized
+ from pypy.rlib import jit
+@@ -81,6 +82,7 @@
+ self.hidden_applevel = hidden_applevel
+ self.magic = magic
+ self._signature = cpython_code_signature(self)
++ self._cached_source = None
+ self._initialize()
+
+ def _initialize(self):
+@@ -403,3 +405,25 @@
+ def repr(self, space):
+ return space.wrap(self.get_repr())
+ repr.unwrap_spec = ['self', ObjSpace]
++
++ def get_linenum_for_offset(self, offset):
++ # Given a bytecode offset, return a 1-based index into the lines of the
++ # source code
++ return offset2lineno(self, offset)
++
++ def _ensure_source(self):
++ # Lazily grab the source lines into self._cached_source (or raise
++ # an IOError)
++ if not self._cached_source:
++ f = open(self.co_filename, 'r')
++ source = [line.rstrip() for line in f.readlines()]
++ f.close()
++ self._cached_source = source
++
++ def get_source_text(self, linenum):
++ # Given a 1-based index, get the corresponding line of source code (or
++ # raise an IOError)
++ self._ensure_source()
++ return self._cached_source[linenum - 1]
++
++
+diff -r cd083843b67a pypy/objspace/flow/model.py
+--- a/pypy/objspace/flow/model.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/objspace/flow/model.py Wed Jan 05 16:14:35 2011 -0500
+@@ -31,6 +31,120 @@
+
+ __metaclass__ = type
+
++class SourceLoc(object):
++ # A srcloc is a specific location within the RPython source code,
++ # intended for human display
++ __slots__ = ('code', # code object
++ 'linenum' # 1-based index, as displayed to a user
++ )
++ def __init__(self, code, linenum):
++ self.code = code
++ self.linenum = linenum
++
++ def get_text(self):
++ # Get the actual source text of this line
++ return self.code.get_source_text(self.linenum)
++
++ def __eq__(self, other):
++ return self.code == other.code and self.linenum == other.linenum
++
++ def __ne__(self, other):
++ if other:
++ return self.code != other.code or self.linenum != other.linenum
++ else:
++ return True
++
++class CodeLoc(object):
++ # A codeloc is a specific location within the RPython bytecode
++ __slots__ = ('code', # code object
++ 'offset' # int index into bytecode, or -1
++ )
++
++ def __init__(self, code, offset):
++ self.code = code
++ self.offset = offset
++
++ def __str__(self):
++ if self.offset >= 0:
++ return "%s@%d" % (self.code.co_name, self.offset)
++ else:
++ return ""
++
++ def __ne__(self, other):
++ if other:
++ return self.code != other.code or self.offset != other.offset
++ else:
++ return True
++
++ def __cmp__(self, other):
++ # Partial ordering, for those locations that have an offset:
++ if other:
++ if self.offset >= 0 and other.offset >= 0:
++ return self.offset - other.offset
++ return 0
++
++ def get_source_loc(self):
++ # Convert to a SourceLoc:
++ return SourceLoc(self.code, self.code.get_linenum_for_offset(self.offset))
++
++class OperationLoc(object):
++ # An oploc is the location within the RPython source code of a given
++ # operation
++ #
++ # This is a list consisting of CodeLoc instances, some of which may be None
++ #
++ # For the simple case, this is list of length 1 with a single CodeLoc
++ #
++ # For an operation inside an inlined callsite, we have a list of length 2:
++ # [codeloc of callsite,
++ # codeloc of operation within inlined body]
++ #
++ # For more interesting inlined cases, we have a chain of source locations:
++ # [codeloc of callsite,
++ # codeloc of inner callsite,
++ # ... ,
++ # codeloc of innermost inlined callsite,
++ # codeloc of operation within inlined body]
++ #
++
++ __slots__ = ('codelocs', )
++
++ def __init__(self, codelocs):
++ self.codelocs = codelocs
++
++ def __str__(self):
++ return '[' + ' > '.join(str(codeloc) for codeloc in self.codelocs) + ']'
++
++ def __cmp__(self, other):
++ return cmp(self.codelocs, other.codelocs)
++
++def block_comparator(blk0, blk1):
++ '''
++ Sort function for blocks, putting them in an ordering that attempts to
++ maximize readability of the generated C code
++ '''
++ # print 'comparing %r and %r' % (blk0, blk1)
++ # Put the start/end block at the top/bottom:
++ if blk0.isstartblock:
++ return -1
++
++ if blk1.isstartblock:
++ return 1
++
++ # Order blocks by the offset, where present:
++ if blk0.operations:
++ if blk1.operations:
++ return cmp(blk0.operations[0].oploc, blk1.operations[0].oploc)
++ else:
++ return -1
++ else:
++ if blk1.operations:
++ return 1
++ else:
++ return 0
++
++def edge_comparator(edge0, edge1):
++ return block_comparator(edge0.target, edge1.target)
+
+ class FunctionGraph(object):
+ __slots__ = ['startblock', 'returnblock', 'exceptblock', '__dict__']
+@@ -94,6 +208,21 @@
+ seen[block] = True
+ stack += block.exits[::-1]
+
++ def iterblocks_by_source(self):
++ # Try to preserve logical source ordering in the blocks
++ block = self.startblock
++ yield block
++ seen = {block: True}
++ stack = list(block.exits[::-1])
++ stack.sort(edge_comparator)
++ while stack:
++ block = stack.pop().target
++ if block not in seen:
++ yield block
++ seen[block] = True
++ stack += block.exits[::-1]
++ stack.sort(edge_comparator)
++
+ def iterlinks(self):
+ block = self.startblock
+ seen = {block: True}
+@@ -183,14 +312,14 @@
+ self.exits = [] # list of Link(s)
+
+ def at(self):
+- if self.operations and self.operations[0].offset >= 0:
+- return "@%d" % self.operations[0].offset
++ if self.operations:
++ return str(self.operations[0].oploc)
+ else:
+ return ""
+
+ def __str__(self):
+ if self.operations:
+- txt = "block@%d" % self.operations[0].offset
++ txt = "block%s" % self.operations[0].oploc
+ else:
+ if (not self.exits) and len(self.inputargs) == 1:
+ txt = "return block"
+@@ -245,6 +374,21 @@
+ from pypy.translator.tool.graphpage import try_show
+ try_show(self)
+
++ def isreturnblock(self):
++ return (not self.operations) and (not self.exits) and len(self.inputargs) == 1
++
++ def get_base_label(self, blocknum):
++ # Generate a more friendly C label for this block
++ if self.operations:
++ txt = "block"
++ elif (not self.exits) and len(self.inputargs) == 1:
++ txt = "return_block"
++ elif (not self.exits) and len(self.inputargs) == 2:
++ txt = "raise_block"
++ else:
++ txt = "codeless_block"
++ return '%s%d' % (txt, blocknum)
++
+
+ class Variable(object):
+ __slots__ = ["_name", "_nr", "concretetype"]
+@@ -331,13 +475,15 @@
+
+
+ class SpaceOperation(object):
+- __slots__ = "opname args result offset".split()
++ __slots__ = "opname args result oploc".split()
+
+- def __init__(self, opname, args, result, offset=-1):
++ def __init__(self, opname, args, result, oploc=None):
+ self.opname = intern(opname) # operation name
+ self.args = list(args) # mixed list of var/const
+ self.result = result # either Variable or Constant instance
+- self.offset = offset # offset in code string
++ if oploc is None:
++ oploc = OperationLoc([None])
++ self.oploc = oploc
+
+ def __eq__(self, other):
+ return (self.__class__ is other.__class__ and
+@@ -352,8 +498,9 @@
+ return hash((self.opname,tuple(self.args),self.result))
+
+ def __repr__(self):
+- return "%r = %s(%s)" % (self.result, self.opname,
+- ", ".join(map(repr, self.args)))
++ return "%r = %s(%s) (%s)" % (self.result, self.opname,
++ ", ".join(map(repr, self.args)),
++ self.oploc)
+
+ class Atom(object):
+ def __init__(self, name):
+@@ -448,8 +595,7 @@
+ for op in oplist:
+ copyop = SpaceOperation(op.opname,
+ [copyvar(v) for v in op.args],
+- copyvar(op.result), op.offset)
+- #copyop.offset = op.offset
++ copyvar(op.result), op.oploc)
+ result.append(copyop)
+ return result
+ newblock.operations = copyoplist(block.operations)
+diff -r cd083843b67a pypy/objspace/flow/objspace.py
+--- a/pypy/objspace/flow/objspace.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/objspace/flow/objspace.py Wed Jan 05 16:14:35 2011 -0500
+@@ -310,7 +310,9 @@
+ def do_operation(self, name, *args_w):
+ spaceop = SpaceOperation(name, args_w, Variable())
+ if hasattr(self, 'executioncontext'): # not here during bootstrapping
+- spaceop.offset = self.executioncontext.crnt_offset
++ codeloc = CodeLoc(self.executioncontext.code,
++ self.executioncontext.crnt_offset)
++ spaceop.oploc = OperationLoc([codeloc])
+ self.executioncontext.recorder.append(spaceop)
+ return spaceop.result
+
+diff -r cd083843b67a pypy/objspace/flow/test/test_model.py
+--- a/pypy/objspace/flow/test/test_model.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/objspace/flow/test/test_model.py Wed Jan 05 16:14:35 2011 -0500
+@@ -132,3 +132,25 @@
+ assert v2.renamed
+ assert v2.name.startswith("foobar_") and v2.name != v.name
+ assert v2.name.split('_', 1)[1].isdigit()
++
++def test_source_locations():
++ # Invent some random offsets into the code:
++ co = sample_function.__code__
++ codelocA = CodeLoc(co, 42)
++ codelocB = CodeLoc(co, 87)
++
++ assert str(codelocA) == 'sample_function@42'
++ assert str(codelocB) == 'sample_function@87'
++
++ assert cmp(codelocA, codelocB) < 0
++ assert cmp(codelocB, codelocA) > 0
++
++ oplocA = OperationLoc([codelocA])
++ oplocB = OperationLoc([codelocB])
++
++ assert str(oplocA) == '[sample_function@42]'
++ assert str(oplocB) == '[sample_function@87]'
++
++ assert cmp(oplocA, oplocB) < 0
++ assert cmp(oplocB, oplocA) > 0
++
+diff -r cd083843b67a pypy/rpython/rtyper.py
+--- a/pypy/rpython/rtyper.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/rpython/rtyper.py Wed Jan 05 16:14:35 2011 -0500
+@@ -800,7 +800,7 @@
+ return vars
+
+ def genop(self, opname, args_v, resulttype=None):
+- return self.llops.genop(opname, args_v, resulttype)
++ return self.llops.genop(opname, args_v, resulttype, self.spaceop.oploc)
+
+ def gendirectcall(self, ll_function, *args_v):
+ return self.llops.gendirectcall(ll_function, *args_v)
+@@ -935,7 +935,7 @@
+ v.concretetype))
+ return v
+
+- def genop(self, opname, args_v, resulttype=None):
++ def genop(self, opname, args_v, resulttype=None, oploc=None):
+ try:
+ for v in args_v:
+ v.concretetype
+@@ -944,7 +944,7 @@
+ " and pass its result to genop(),"
+ " never hop.args_v directly.")
+ vresult = Variable()
+- self.append(SpaceOperation(opname, args_v, vresult))
++ self.append(SpaceOperation(opname, args_v, vresult, oploc))
+ if resulttype is None:
+ vresult.concretetype = Void
+ return None
+diff -r cd083843b67a pypy/translator/backendopt/inline.py
+--- a/pypy/translator/backendopt/inline.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/backendopt/inline.py Wed Jan 05 16:14:35 2011 -0500
+@@ -4,6 +4,7 @@
+ from pypy.translator.unsimplify import copyvar
+ from pypy.objspace.flow.model import Variable, Constant, Block, Link
+ from pypy.objspace.flow.model import SpaceOperation, c_last_exception
++from pypy.objspace.flow.model import OperationLoc
+ from pypy.objspace.flow.model import FunctionGraph
+ from pypy.objspace.flow.model import traverse, mkentrymap, checkgraph
+ from pypy.annotation import model as annmodel
+@@ -231,6 +232,7 @@
+ self.varmap = {}
+ self._copied_blocks = {}
+ self.op = block.operations[index_operation]
++ self.callsite_oploc = self.op.oploc
+ self.graph_to_inline = self.get_graph_from_op(self.op)
+ self.exception_guarded = False
+ if (block.exitswitch == c_last_exception and
+@@ -297,7 +299,9 @@
+
+ def copy_operation(self, op):
+ args = [self.get_new_name(arg) for arg in op.args]
+- result = SpaceOperation(op.opname, args, self.get_new_name(op.result))
++ new_oploc = OperationLoc(self.callsite_oploc.codelocs[:] + op.oploc.codelocs[:])
++ result = SpaceOperation(op.opname, args, self.get_new_name(op.result),
++ new_oploc)
+ return result
+
+ def copy_block(self, block):
+diff -r cd083843b67a pypy/translator/c/funcgen.py
+--- a/pypy/translator/c/funcgen.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/c/funcgen.py Wed Jan 05 16:14:35 2011 -0500
+@@ -1,4 +1,6 @@
+ import sys
++import inspect
++import dis
+ from pypy.translator.c.support import USESLOTS # set to False if necessary while refactoring
+ from pypy.translator.c.support import cdecl
+ from pypy.translator.c.support import llvalue_from_constant, gen_assignments
+@@ -22,6 +24,38 @@
+
+ KEEP_INLINED_GRAPHS = False
+
++def block_comparator(blk0, blk1):
++ '''
++ Sort function for blocks, putting them in an ordering that attempts to
++ maximize readability of the generated C code
++ '''
++ # print 'comparing %r and %r' % (blk0, blk1)
++ # Put the start/end block at the top/bottom:
++ if blk0.isstartblock:
++ return -1
++
++ if blk1.isstartblock:
++ return 1
++
++ # Order blocks by the offset, where present:
++ if blk0.operations:
++ if blk1.operations:
++ return cmp(blk0.operations[0].oploc, blk1.operations[0].oploc)
++ else:
++ return -1
++ else:
++ if blk1.operations:
++ return 1
++ else:
++ return 0
++
++def escape_c_comments(py_src):
++ # Escape C comments within RPython source, to avoid generating bogus
++ # comments in our generated C source:
++ py_src = py_src.replace('/*', '')
++ py_src = py_src.replace('*/', '')
++ return py_src
++
+ class FunctionCodeGenerator(object):
+ """
+ Collects information about a function which we have to generate
+@@ -210,14 +244,57 @@
+
+ def cfunction_body(self):
+ graph = self.graph
+- yield 'goto block0;' # to avoid a warning "this label is not used"
++ # Try to print python source code:
++ if hasattr(graph, 'func'):
++ filename = inspect.getfile(graph.func)
++ #yield '/* name: %r */' % filename
++ try:
++ src, startline = inspect.getsourcelines(graph.func)
++ except IOError:
++ pass # No source found
++ except IndexError:
++ pass # Bulletproofing
++ else:
++ yield '/* Python source %r' % filename
++ for i, line in enumerate(src):
++ line = line.rstrip()
++ line = escape_c_comments(line)
++ # FuncNode.funcgen_implementation treats lines ending in ':'
++ # as C blocks, which messes up the formatting.
++ # Work around this:
++ if line.endswith(':'):
++ line += ' '
++ yield ' * %4d : %s' % (startline + i, line)
++ yield ' */'
++
++ label = graph.startblock.get_base_label(self.blocknum[graph.startblock])
++ yield 'goto %s;' % label # to avoid a warning "this label is not used"
++
++ # Sort the blocks into a (hopefully) readable order:
++ blocks = list(graph.iterblocks_by_source())
++ blocks.sort(block_comparator)
+
+ # generate the body of each block
+- for block in graph.iterblocks():
++ for block in blocks:
++ cursrcloc = None
+ myblocknum = self.blocknum[block]
+ yield ''
+- yield 'block%d:' % myblocknum
++ yield '%s:' % block.get_base_label(myblocknum)
++ #yield "/* repr(block): %r */" % (block, )
++ #yield "/* type(block): %r */" % (type(block), )
+ for i, op in enumerate(block.operations):
++ #yield "/* type(op): %r */" % (type(op), )
++ #yield "/* op.oploc: %s */" % (op.oploc, )
++ codeloc = op.oploc.codelocs[-1]
++ if codeloc:
++ srcloc = codeloc.get_source_loc()
++ if srcloc != cursrcloc:
++ try:
++ yield "/* %s:%d : %s */" % (codeloc.code.co_name, srcloc.linenum, escape_c_comments(srcloc.get_text()))
++ cursrcloc = srcloc
++ except IOError:
++ pass
++
+ for line in self.gen_op(op):
+ yield line
+ if len(block.exits) == 0:
+@@ -310,7 +387,7 @@
+ assignments.append((a2typename, dest, src))
+ for line in gen_assignments(assignments):
+ yield line
+- label = 'block%d' % self.blocknum[link.target]
++ label = link.target.get_base_label(self.blocknum[link.target])
+ if link.target in self.innerloops:
+ loop = self.innerloops[link.target]
+ if link is loop.links[-1]: # link that ends a loop
+diff -r cd083843b67a pypy/translator/c/test/test_genc.py
+--- a/pypy/translator/c/test/test_genc.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/c/test/test_genc.py Wed Jan 05 16:14:35 2011 -0500
+@@ -1,4 +1,5 @@
+ import autopath, sys, os, py
++import re
+ from pypy.rpython.lltypesystem.lltype import *
+ from pypy.annotation import model as annmodel
+ from pypy.translator.translator import TranslationContext
+@@ -498,3 +499,130 @@
+ else:
+ assert 0, "the call was not found in the C source"
+ assert 'PYPY_INHIBIT_TAIL_CALL();' in lines[i+1]
++
++def get_generated_c_source(fn, types):
++ # Return a (optimized fn, c source code, c source filename) 3-tuple
++ t = Translation(fn)
++ t.annotate(types)
++ c_filename_path = t.source_c()
++ h = c_filename_path.open()
++ src = h.read()
++ h.close()
++ c_fn = t.compile_c()
++ return (c_fn, src, c_filename_path)
++
++def extract_c_function(c_src, fname):
++ # Extract the source for a given C function out of a the given src string
++ # Makes assumptions about the layout of the source
++ pattern = '^(.+) \**%s\(.*\) {$' % fname
++ within_fn = False
++ result = ''
++ for line in c_src.splitlines():
++ if within_fn:
++ result += line + '\n'
++ if line.startswith('}'):
++ return result
++ else:
++ m = re.match(pattern, line)
++ if m:
++ within_fn = True
++ result += line + '\n'
++ return result
++
++
++
++def test_generated_c_source():
++ # Verify that generate C source "looks good"
++ # We'll use is_perfect_number, as it contains a loop and a conditional
++
++ # Generate C source code
++ from pypy.translator.test.snippet import is_perfect_number
++ c_fn, c_src, c_filename_path = get_generated_c_source(is_perfect_number,
++ [int])
++
++ # Locate the C source for the type-specialized function:
++ c_fn_src = extract_c_function(c_src, 'pypy_g_is_perfect_number')
++
++ # Verify that the C source contains embedded comments containing the lines
++ # of the python source:
++ expected_comment_lines = [
++ '/* is_perfect_number:31 : while div < n: */',
++ '/* is_perfect_number:32 : if n % div == 0: */',
++ '/* is_perfect_number:33 : sum += div */',
++ '/* is_perfect_number:34 : div += 1 */',
++ '/* is_perfect_number:35 : return n == sum */']
++ for exp_line in expected_comment_lines:
++ assert exp_line in c_fn_src
++
++ # Verify that the lines occur in the correct order
++ # ...we do this by filtering the function's generated C source to just
++ # those lines containing our comments (and dropping whitespace):
++ lines = c_fn_src.splitlines()
++ lines = [line.strip()
++ for line in lines
++ if '/* is_perfect_number:' in line]
++
++ # ...we should now have exact equality: the ordering should be as expected,
++ # and each comment should appear exactly once:
++ assert lines == expected_comment_lines
++
++ # Ensure that the generated C function does the right thing:
++ assert c_fn(5) == False
++ assert c_fn(6) == True
++ assert c_fn(7) == False
++
++ assert c_fn(5.0) == False
++ assert c_fn(6.0) == True
++ assert c_fn(7.0) == False
++
++ assert c_fn(5L) == False
++ assert c_fn(6L) == True
++ assert c_fn(7L) == False
++
++ try:
++ c_fn('hello world')
++ except:
++ pass
++ else:
++ raise 'Was expected exception'
++
++def test_escaping_c_comments():
++ # Ensure that c comments within RPython code get escaped when we generate
++ # our .c code (to avoid generating bogus C)
++ # See e.g. pypy.module.cpyext.dictobject's PyDict_Next, which has a
++ # docstring embedding a C comment
++ def c_style_comment(a, b):
++ '''Here is a C-style comment within an RPython docstring:
++ /* hello world */
++ '''
++ # and here's one in a string literal:
++ return '/* hello world a:%s b:%s */' % (a, b)
++
++ def cplusplus_style_comment(a, b):
++ '''Here is a C++-style comment within an RPython docstring:
++ // hello world
++ '''
++ # and here are some in string literals, and one as the floor division
++ # operator:
++ return '// hello world: a // b = %s' % (a // b)
++
++ for fn_name, exp_output in [('c_style_comment',
++ '/* hello world a:6 b:3 */'),
++ ('cplusplus_style_comment',
++ '// hello world: a // b = 2')]:
++ fn = locals()[fn_name]
++
++ c_fn, c_src, c_filename_path = get_generated_c_source(fn, [int, int])
++ # If the above survived, then the C compiler managed to handle
++ # the generated C code
++
++ # Verify that the generated code works (i.e. that we didn't
++ # accidentally change the meaning):
++ assert c_fn(6, 3) == exp_output
++
++ # Ensure that at least part of the docstrings made it into the C
++ # code:
++ c_fn_src = extract_c_function(c_src, 'pypy_g_' + fn_name)
++ assert 'Here is a ' in c_fn_src
++ assert 'style comment within an RPython docstring' in c_fn_src
++
+diff -r cd083843b67a pypy/translator/driver.py
+--- a/pypy/translator/driver.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/driver.py Wed Jan 05 16:14:35 2011 -0500
+@@ -539,6 +539,7 @@
+ dstname = self.compute_exe_name() + '.staticdata.info'
+ shutil.copy(str(fname), str(dstname))
+ self.log.info('Static data info written to %s' % dstname)
++ return c_source_filename
+
+ #
+ task_source_c = taskdef(task_source_c, ['database_c'], "Generating c source")
+diff -r cd083843b67a pypy/translator/gensupp.py
+--- a/pypy/translator/gensupp.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/gensupp.py Wed Jan 05 16:14:35 2011 -0500
+@@ -16,8 +16,8 @@
+ def visit(block):
+ if isinstance(block, Block):
+ # first we order by offset in the code string
+- if block.operations:
+- ofs = block.operations[0].offset
++ if block.operations and block.operations[0].oploc.codelocs[0]:
++ ofs = block.operations[0].oploc.codelocs[0].offset
+ else:
+ ofs = sys.maxint
+ # then we order by input variable name or value
+diff -r cd083843b67a pypy/translator/interactive.py
+--- a/pypy/translator/interactive.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/interactive.py Wed Jan 05 16:14:35 2011 -0500
+@@ -138,7 +138,7 @@
+ def source_c(self, argtypes=None, **kwds):
+ self.update_options(argtypes, kwds)
+ self.ensure_backend('c')
+- self.driver.source_c()
++ return self.driver.source_c()
+
+ def source_cl(self, argtypes=None, **kwds):
+ self.update_options(argtypes, kwds)
+diff -r cd083843b67a pypy/translator/llsupport/wrapper.py
+--- a/pypy/translator/llsupport/wrapper.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/llsupport/wrapper.py Wed Jan 05 16:14:35 2011 -0500
+@@ -59,6 +59,8 @@
+ # "return result"
+ block = Block(wrapper_inputargs)
+ wgraph = FunctionGraph('pyfn_' + (newname or func.func_name), block)
++ if hasattr(graph, 'func'):
++ wgraph.func = graph.func
+ translator.update_call_graph(wgraph, graph, object())
+ translator.graphs.append(wgraph)
+ block.operations[:] = newops
+diff -r cd083843b67a pypy/translator/simplify.py
+--- a/pypy/translator/simplify.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/simplify.py Wed Jan 05 16:14:35 2011 -0500
+@@ -294,7 +294,7 @@
+ return renaming.get(v, v)
+ def rename_op(op):
+ args = [rename(a) for a in op.args]
+- op = SpaceOperation(op.opname, args, rename(op.result), op.offset)
++ op = SpaceOperation(op.opname, args, rename(op.result), op.oploc)
+ # special case...
+ if op.opname == 'indirect_call':
+ if isinstance(op.args[0], Constant):
diff --git a/pypy.spec b/pypy.spec
index 96354e2..162ed5f 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.4.1
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -136,9 +136,33 @@ Patch2: fix-test_commands-expected-ls-output-issue7108.patch
# https://codespeak.net/issue/pypy-dev/issue614
Patch3: pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
+# Try to improve the readability of the generated .c code, by adding in the
+# RPython source as comments where possible.
+# A version of this was sent upstream as:
+# http://codespeak.net/pipermail/pypy-dev/2010q4/006532.html
+# TODO: get this into the upstream bug tracker, and finish inlining
+# support (rhbz#666963)
+Patch4: pypy-1.4.1-more-readable-c-code.patch
+
+
# Build-time requirements:
-BuildRequires: python-devel
+# pypy's can be rebuilt using itself, rather than with CPython; doing so
+# halves the build time.
+#
+# Turn it off with this boolean, to revert back to rebuilding using CPython
+# and avoid a cycle in the build-time dependency graph:
+#
+%global use_self_when_building 1
+%if 0%{use_self_when_building}
+BuildRequires: pypy
+%global bootstrap_python_interp pypy
+%else
+BuildRequires: python-devel
+%global bootstrap_python_interp python
+%endif
+
+
# FIXME: I'm seeing errors like this in the logs:
# [translation:WARNING] The module '_rawffi' is disabled
@@ -215,6 +239,8 @@ sed -i \
-e 's|LIBRARY_INSTALLATION_PATH|"%{pypyprefix}"|' \
pypy/translator/goal/app_main.py
+%patch4 -p1 -b .more-readable-c-code
+
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
@@ -304,6 +330,7 @@ BuildPyPy() {
# doesn't interract well with the results of using our standard build flags.
# 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//')
# If we're already built the JIT-enabled "pypy", then use it for subsequent
@@ -311,7 +338,10 @@ BuildPyPy() {
if test -x './pypy' ; then
INTERP='./pypy'
else
- INTERP='python'
+ # First pypy build within this rpm build?
+ # Fall back to using the bootstrap python interpreter, which might be a
+ # system copy of pypy from an earlier rpm, or be cpython's /usr/bin/python:
+ INTERP='%{bootstrap_python_interp}'
fi
# Here's where we actually invoke the build:
@@ -484,6 +514,34 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
%{buildroot}/%{_bindir}/pypy \
0
+# Capture the RPython source code files from the build within the debuginfo
+# package (rhbz#666975)
+%global pypy_debuginfo_dir /usr/src/debug/pypy-%{version}-src
+mkdir -p %{buildroot}%{pypy_debuginfo_dir}
+
+# copy over everything:
+cp -a pypy %{buildroot}%{pypy_debuginfo_dir}
+
+# ...then delete files that aren't .py files:
+find \
+ %{buildroot}%{pypy_debuginfo_dir} \
+ \( -type f \
+ -a \
+ \! -name "*.py" \
+ \) \
+ -delete
+
+# We don't need bytecode for these files; they are being included for reference
+# purposes.
+# There are some rpmlint warnings from these files:
+# non-executable-script
+# wrong-script-interpreter
+# zero-length
+# script-without-shebang
+# dangling-symlink
+# but given that the objective is to preserve a copy of the source code, those
+# are acceptable.
+
%check
topdir=$(pwd)
@@ -511,6 +569,7 @@ CheckPyPy() {
# Gather a list of tests to skip, due to known failures
# TODO: report these failures to pypy upstream
+ # See also rhbz#666967 and rhbz#666969
TESTS_TO_SKIP=""
# Test failures relating to missing codecs
@@ -622,6 +681,14 @@ CheckPyPy() {
# AssertionError: ValueError not raised
SkipTest test_zlib
+ %if 0%{use_self_when_building}
+ # Patch 3 prioritizes the installed copy of pypy's libraries over the
+ # build copy.
+ # This leads to test failures of test_pep263 and test_tarfile
+ # For now, suppress these when building using pypy itself:
+ SkipTest test_pep263 # on-disk encoding issues
+ SkipTest test_tarfile # permissions issues
+ %endif
# Run the built binary through the selftests:
time ./$ExeName -m test.regrtest -x $TESTS_TO_SKIP
@@ -696,6 +763,14 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Wed Jan 5 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-4
+- rebuild pypy using itself, for speed, with a boolean to break this cycle in
+the build-requirement graph (falling back to using "python-devel" aka CPython)
+- add work-in-progress patch to try to make generated c more readable
+(rhbz#666963)
+- capture the RPython source code files from the build within the debuginfo
+package (rhbz#666975)
+
* Wed Dec 22 2010 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-3
- try to respect the FHS by installing libraries below libdir, rather than
datadir; patch app_main.py to look in this installation location first when
commit f756cfcb34f7e48db6afaf04f79ca5c576a4b696
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Mon Jan 3 15:06:28 2011 -0500
Initial import of pypy-1.4.1-3 from package review (rhbz#588941)
diff --git a/.gitignore b/.gitignore
index e69de29..2878978 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/pypy-1.4.1-src.tar.bz2
diff --git a/fix-test_commands-expected-ls-output-issue7108.patch b/fix-test_commands-expected-ls-output-issue7108.patch
new file mode 100644
index 0000000..becc3e0
--- /dev/null
+++ b/fix-test_commands-expected-ls-output-issue7108.patch
@@ -0,0 +1,11 @@
+--- test/test_commands.py.orig 2010-12-22 13:25:11.357333216 -0500
++++ test/test_commands.py 2010-12-22 13:25:57.927166219 -0500
+@@ -47,7 +47,7 @@ class CommandTests(unittest.TestCase):
+ # Note that the first case above has a space in the group name
+ # while the second one has a space in both names.
+ pat = r'''d......... # It is a directory.
+- \+? # It may have ACLs.
++ [.+@]? # It may have alt access (SELinux, ACLs or metadata ('@' OS X).
+ \s+\d+ # It has some number of links.
+ [^/]* # Skip user, group, size, and date.
+ /\. # and end with the name of the file.
diff --git a/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch b/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
new file mode 100644
index 0000000..257f60f
--- /dev/null
+++ b/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
@@ -0,0 +1,13 @@
+diff --git a/pypy/tool/ansi_print.py b/pypy/tool/ansi_print.py
+index 3eff27c..fac4ba2 100644
+--- a/pypy/tool/ansi_print.py
++++ b/pypy/tool/ansi_print.py
+@@ -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/pypy-1.4-config.patch b/pypy-1.4-config.patch
new file mode 100644
index 0000000..0b82ac8
--- /dev/null
+++ b/pypy-1.4-config.patch
@@ -0,0 +1,44 @@
+Index: pypy-1.4/pypy/translator/platform/linux.py
+===================================================================
+--- pypy-1.4.orig/pypy/translator/platform/linux.py
++++ pypy-1.4/pypy/translator/platform/linux.py
+@@ -3,17 +3,22 @@ import py, os
+ from pypy.translator.platform import _run_subprocess
+ from pypy.translator.platform.posix import BasePosix
+
++CFLAGS = ['-O3', '-pthread', '-fomit-frame-pointer',
++ '-Wall', '-Wno-unused']
++if os.environ.get('CFLAGS', None):
++ CFLAGS.extend(os.environ['CFLAGS'].split())
++CFLAGS = tuple(CFLAGS)
++
+ class BaseLinux(BasePosix):
+ name = "linux"
+
+ link_flags = ('-pthread', '-lrt')
+- cflags = ('-O3', '-pthread', '-fomit-frame-pointer',
+- '-Wall', '-Wno-unused')
++ cflags = CFLAGS
+ standalone_only = ()
+ shared_only = ('-fPIC',)
+ so_ext = 'so'
+ so_prefixes = ('lib', '')
+-
++
+ def _args_for_shared(self, args):
+ return ['-shared'] + args
+
+@@ -29,9 +34,10 @@ class BaseLinux(BasePosix):
+ class Linux(BaseLinux):
+ shared_only = () # it seems that on 32-bit linux, compiling with -fPIC
+ # gives assembler that asmgcc is not happy about.
+- def library_dirs_for_libffi_a(self):
+- # places where we need to look for libffi.a
+- return self.library_dirs_for_libffi() + ['/usr/lib']
++ # Fedora Linux, at least, has the shared version but not the static
++ #def library_dirs_for_libffi_a(self):
++ # # places where we need to look for libffi.a
++ # return self.library_dirs_for_libffi() + ['/usr/lib']
+
+
+ class Linux64(BaseLinux):
diff --git a/pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch b/pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
new file mode 100644
index 0000000..93bcb69
--- /dev/null
+++ b/pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
@@ -0,0 +1,16 @@
+diff -r cd083843b67a pypy/translator/goal/app_main.py
+--- a/pypy/translator/goal/app_main.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/goal/app_main.py Wed Dec 22 17:43:21 2010 -0500
+@@ -191,6 +191,12 @@
+ IS_WINDOWS = False
+
+ def get_library_path(executable):
++ # FIXME: get this from translator configuration
++ dirname = LIBRARY_INSTALLATION_PATH
++ newpath = sys.pypy_initial_path(dirname)
++ if newpath:
++ return newpath
++
+ search = executable
+ while 1:
+ dirname = resolvedirof(search)
diff --git a/pypy.spec b/pypy.spec
new file mode 100644
index 0000000..96354e2
--- /dev/null
+++ b/pypy.spec
@@ -0,0 +1,762 @@
+Name: pypy
+Version: 1.4.1
+Release: 3%{?dist}
+Summary: Python implementation with a Just-In-Time compiler
+
+Group: Development/Languages
+# LGPL and another free license we'd need to ask spot about are present in some
+# java jars that we're not building with atm (in fact, we're deleting them
+# before building). If we restore those we'll have to work out the new
+# licensing terms
+License: MIT and Python and UCD
+URL: http://pypy.org/
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+
+# High-level configuration of the build:
+
+# PyPy consists of an implementation of an interpreter (with JIT compilation)
+# for the full Python language written in a high-level language, leaving many
+# of the implementation details as "pluggable" policies.
+#
+# The implementation language is then compiled down to .c code, from which we
+# obtain a binary.
+#
+# This allows us to build a near-arbitrary collection of different
+# implementations of Python with differing tradeoffs
+#
+# (As it happens, the implementation language is itself Python, albeit a
+# restricted subset "RPython", chosen to making it amenable to being compiled.
+# The result implements the full Python language though)
+
+# We could build many different implementations of Python.
+# For now, let's focus on the implementation that appears to be receiving the
+# most attention upstream: the JIT-enabled build, with all standard
+# optimizations
+
+# Building a configuration can take significant time:
+
+# A build of pypy (with jit) on i686 took 77 mins:
+# [Timer] Timings:
+# [Timer] annotate --- 583.3 s
+# [Timer] rtype_lltype --- 760.9 s
+# [Timer] pyjitpl_lltype --- 567.3 s
+# [Timer] backendopt_lltype --- 375.6 s
+# [Timer] stackcheckinsertion_lltype --- 54.1 s
+# [Timer] database_c --- 852.2 s
+# [Timer] source_c --- 1007.3 s
+# [Timer] compile_c --- 419.9 s
+# [Timer] ===========================================
+# [Timer] Total: --- 4620.5 s
+#
+# A build of pypy (nojit) on x86_64 took about an hour:
+# [Timer] Timings:
+# [Timer] annotate --- 537.5 s
+# [Timer] rtype_lltype --- 667.3 s
+# [Timer] backendopt_lltype --- 385.4 s
+# [Timer] stackcheckinsertion_lltype --- 42.5 s
+# [Timer] database_c --- 625.3 s
+# [Timer] source_c --- 1040.2 s
+# [Timer] compile_c --- 273.9 s
+# [Timer] ===========================================
+# [Timer] Total: --- 3572.0 s
+#
+#
+# A build of pypy-stackless on i686 took about 87 mins:
+# [Timer] Timings:
+# [Timer] annotate --- 584.2 s
+# [Timer] rtype_lltype --- 777.3 s
+# [Timer] backendopt_lltype --- 365.9 s
+# [Timer] stackcheckinsertion_lltype --- 39.3 s
+# [Timer] database_c --- 1089.6 s
+# [Timer] source_c --- 1868.6 s
+# [Timer] compile_c --- 490.4 s
+# [Timer] ===========================================
+# [Timer] Total: --- 5215.3 s
+
+
+# Should we build a "pypy" binary? (with jit)
+# pypy-1.4/pypy/jit/backend/detect_cpu.py:getcpuclassname currently supports the
+# following options:
+# 'i386', 'x86'
+# 'x86-without-sse2':
+# 'x86_64'
+# 'cli'
+# 'llvm'
+%ifarch %{ix86} x86_64
+# FIXME: is there a better way of expressing "intel" here?
+%global with_jit 1
+%else
+%global with_jit 0
+%endif
+
+# Should we build a "pypy-stackless" binary?
+%global with_stackless 0
+
+
+# Easy way to enable/disable verbose logging:
+%global verbose_logs 0
+
+%global pypyprefix %{_libdir}/pypy-%{version}
+%global pylibver 2.5.2
+
+# We refer to this subdir of the source tree in a few places during the build:
+%global goal_dir pypy/translator/goal
+
+
+# Turn off the brp-python-bytecompile postprocessing script
+# We manually invoke it later on, using the freshly built pypy binary
+%global __os_install_post \
+ %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
+
+# Source and patches:
+Source0: http://pypy.org/download/pypy-%{version}-src.tar.bz2
+
+# Edit a translator file for linux in order to configure our cflags and dynamic libffi
+Patch0: pypy-1.4-config.patch
+
+# 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:
+Patch1: pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
+
+# test_commmands fails on SELinux systems due to a change in the output
+# of "ls" (http://bugs.python.org/issue7108)
+Patch2: fix-test_commands-expected-ls-output-issue7108.patch
+
+# When locating the pypy standard libraries, look first within
+# LIBRARY_INSTALLATION_PATH.
+# We convert this from being a non-existant variable into a string literal
+# with the value of "pypyprefix" in the "prep" phase below.
+#
+# We still use the scanning relative to the binary location when invoking a
+# pypy binary during the build (e.g. during "check")
+#
+# Sent upstream (with caveats) as:
+# https://codespeak.net/issue/pypy-dev/issue614
+Patch3: pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
+
+# Build-time requirements:
+
+BuildRequires: python-devel
+
+# FIXME: I'm seeing errors like this in the logs:
+# [translation:WARNING] The module '_rawffi' is disabled
+# [translation:WARNING] because importing pypy.rlib.libffi raised ImportError
+# [translation:WARNING] 'libffi.a' not found in ['/usr/lib/libffi', '/usr/lib']
+# Presumably we need to fix things to support dynamically-linked libffi
+BuildRequires: libffi-devel
+
+BuildRequires: zlib-devel
+BuildRequires: bzip2-devel
+BuildRequires: ncurses-devel
+BuildRequires: expat-devel
+BuildRequires: openssl-devel
+BuildRequires: valgrind-devel
+
+# Used by the selftests, though not by the build:
+BuildRequires: gc-devel
+
+BuildRequires: /usr/bin/execstack
+
+# pypy is bundling these so we delete them in %%prep. I don't think they are
+# needed unless we build pypy targetted at running on the jvm.
+#BuildRequires: jna
+#BuildRequires: jasmin # Not yet in Fedora
+
+
+# Metadata for the core package (the JIT build):
+Requires: pypy-libs = %{version}-%{release}
+
+%description
+PyPy's implementation of Python, featuring a Just-In-Time compiler, and various
+optimized implementations of the standard types (strings, dictionaries, etc)
+
+
+%package libs
+Group: Development/Languages
+Summary: Run-time libraries used by PyPy implementations of Python
+%description libs
+Libraries required by the various PyPy implementations of Python.
+
+%if 0%{with_stackless}
+%package stackless
+Group: Development/Languages
+Summary: Stackless Python interpreter built using PyPy
+Requires: pypy-libs = %{version}-%{release}
+%description stackless
+Build of PyPy with support for micro-threads for massive concurrency
+%endif
+
+%if 0%{with_stackless}
+%package stackless
+Group: Development/Languages
+Summary: Stackless Python interpreter built using PyPy
+Requires: pypy-libs = %{version}-%{release}
+%description stackless
+Build of PyPy with support for micro-threads for massive concurrency
+%endif
+
+
+%prep
+%setup -q -n pypy-%{version}-src
+%patch0 -p1 -b .configure-fedora
+%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
+
+pushd lib-python/%{pylibver}
+%patch2 -p0
+popd
+
+# Look for the pypy libraries within LIBRARY_INSTALLATION_PATH first:
+%patch3 -p1
+# Fixup LIBRARY_INSTALLATION_PATH to be a string literal containing our value
+# for "pypyprefix":
+sed -i \
+ -e 's|LIBRARY_INSTALLATION_PATH|"%{pypyprefix}"|' \
+ pypy/translator/goal/app_main.py
+
+
+# Replace /usr/local/bin/python shebangs with /usr/bin/python:
+find -name "*.py" -exec \
+ sed \
+ -i -e "s|/usr/local/bin/python|/usr/bin/python|" \
+ "{}" \
+ \;
+
+find . -name '*.jar' -exec rm \{\} \;
+
+# Remove stray ".svn" directories present within the 1.4.1 tarball
+# (reported as https://codespeak.net/issue/pypy-dev/issue612 )
+find . -path '*/.svn*' -delete
+
+# Remove DOS batch files:
+find -name "*.bat"|xargs rm -f
+
+# The "demo" directory gets auto-installed by virture of being listed in %doc
+# Remove shebang lines from demo .py files, and remove executability from them:
+for f in demo/bpnn.py ; do
+ # Detect shebang lines && remove them:
+ sed -e '/^#!/Q 0' -e 'Q 1' $f \
+ && sed -i '1d' $f
+ chmod a-x $f
+done
+
+%build
+
+BuildPyPy() {
+ ExeName=$1
+ Options=$2
+
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "STARTING BUILD OF: $ExeName"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+
+ pushd %{goal_dir}
+
+ # The build involves invoking a python script, passing in particular
+ # arguments, environment variables, etc.
+ # Some notes on those follow:
+
+ # The generated binary embeds copies of the values of all environment
+ # variables. We need to unset "RPM_BUILD_ROOT" to avoid a fatal error from
+ # /usr/lib/rpm/check-buildroot
+ # during the postprocessing of the rpmbuild, complaining about this
+ # reference to the buildroot
+
+
+ # By default, pypy's autogenerated C code is placed in
+ # /tmp/usession-N
+ #
+ # and it appears that this stops rpm from extracting the source code to the
+ # debuginfo package
+ #
+ # The logic in pypy-1.4/pypy/tool/udir.py indicates that it is generated in:
+ # $PYPY_USESSION_DIR/usession-$PYPY_USESSION_BASENAME-N
+ # and so we set PYPY_USESSION_DIR so that this tempdir is within the build
+ # location, and set $PYPY_USESSION_BASENAME so that the tempdir is unique
+ # for each invocation of BuildPyPy
+
+ # Compilation flags for C code:
+ # pypy-1.4/pypy/translator/c/genc.py:gen_makefile
+ # assembles a Makefile within
+ # THE_UDIR/testing_1/Makefile
+ # calling out to platform.gen_makefile
+ # For us, that's
+ # pypy-1.4/pypy/translator/platform/linux.py: class BaseLinux(BasePosix):
+ # which by default has:
+ # CFLAGS = ['-O3', '-pthread', '-fomit-frame-pointer',
+ # '-Wall', '-Wno-unused']
+ # plus all substrings from CFLAGS in the environment.
+ # This is used to generate a value for CFLAGS that's written into the Makefile
+
+ # https://bugzilla.redhat.com/show_bug.cgi?id=588941#c18
+ # The generated Makefile compiles the .c files into assembler (.s), rather
+ # than direct to .o It then post-processes this assembler to locate
+ # garbage-collection roots (building .lbl.s and .gcmap files, and a
+ # "gcmaptable.s"). (The modified .lbl.s files have extra code injected
+ # within them).
+ # Unfortunately, the code to do this:
+ # pypy-1.4/pypy/translator/c/gcc/trackgcroot.py
+ # doesn't interract well with the results of using our standard build flags.
+ # For now, filter our CFLAGS of everything that could be conflicting with
+ # pypy. Need to check these and reenable ones that are okay later.
+ 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//')
+
+ # If we're already built the JIT-enabled "pypy", then use it for subsequent
+ # builds (of other configurations):
+ if test -x './pypy' ; then
+ INTERP='./pypy'
+ else
+ INTERP='python'
+ fi
+
+ # Here's where we actually invoke the build:
+ time \
+ RPM_BUILD_ROOT= \
+ PYPY_USESSION_DIR=$(pwd) \
+ PYPY_USESSION_BASENAME=$ExeName \
+ $INTERP translate.py \
+%if 0%{verbose_logs}
+ --translation-verbose \
+%endif
+ --cflags="$CFLAGS" \
+ --batch \
+ --output=$ExeName \
+ $Options
+
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "FINISHED BUILDING: $ExeName"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+
+ popd
+}
+
+%if 0%{with_jit}
+BuildPyPy \
+ pypy \
+ "-Ojit"
+%endif
+
+%if 0%{with_stackless}
+BuildPyPy \
+ pypy-stackless \
+ "--stackless"
+%endif
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+
+# Install the various executables:
+
+InstallPyPy() {
+ ExeName=$1
+
+ install -m 755 %{goal_dir}/$ExeName %{buildroot}/%{_bindir}
+
+ # The generated machine code doesn't need an executable stack, but
+ # one of the assembler files (gcmaptable.s) doesn't have the necessary
+ # metadata to inform gcc of that, and thus gcc pessimistically assumes
+ # that the built binary does need an executable stack.
+ #
+ # Reported upstream as: https://codespeak.net/issue/pypy-dev/issue610
+ #
+ # I tried various approaches involving fixing the build, but the simplest
+ # approach is to postprocess the ELF file:
+ execstack --clear-execstack %{buildroot}/%{_bindir}/$ExeName
+}
+
+mkdir -p %{buildroot}/%{_bindir}
+
+%if 0%{with_jit}
+InstallPyPy pypy
+%endif
+
+%if 0%{with_stackless}
+InstallPyPy pypy-stackless
+%endif
+
+
+# Install the various support libraries as described at:
+# http://codespeak.net/pypy/dist/pypy/doc/getting-started-python.html#insta...
+# 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 '.'
+
+mkdir -p %{buildroot}/%{pypyprefix}
+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 shebang lines from .py files that aren't executable, and
+# remove executability from .py files that don't have a shebang line:
+find \
+ %{buildroot} \
+ -name "*.py" \
+ \( \
+ \( \! -perm /u+x,g+x,o+x -exec sed -e '/^#!/Q 0' -e 'Q 1' {} \; \
+ -print -exec sed -i '1d' {} \; \
+ \) \
+ -o \
+ \( \
+ -perm /u+x,g+x,o+x ! -exec grep -m 1 -q '^#!' {} \; \
+ -exec chmod a-x {} \; \
+ \) \
+ \)
+
+mkdir -p %{buildroot}/%{pypyprefix}/site-packages
+
+
+# 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
+# is treated as a "dummy optimization flag for compatibility with C Python"
+#
+# pypy-1.4/pypy/module/imp/importing.py has this comment:
+ # XXX picking a magic number is a mess. So far it works because we
+ # have only two extra opcodes, which bump the magic number by +1 and
+ # +2 respectively, and CPython leaves a gap of 10 when it increases
+ # its own magic number. To avoid assigning exactly the same numbers
+ # as CPython we always add a +2. We'll have to think again when we
+ # get at the fourth new opcode :-(
+ #
+ # * CALL_LIKELY_BUILTIN +1
+ # * CALL_METHOD +2
+ #
+ # In other words:
+ #
+ # default_magic -- used by CPython without the -U option
+ # default_magic + 1 -- used by CPython with the -U option
+ # default_magic + 2 -- used by PyPy without any extra opcode
+ # ...
+ # default_magic + 5 -- used by PyPy with both extra opcodes
+#
+
+# pypy-1.4/pypy/interpreter/pycode.py has:
+#
+# default_magic = (62141+2) | 0x0a0d0000 # this PyPy's magic
+# # (62131=CPython 2.5.1)
+# giving a value for "default_magic" for PyPy of 0xa0df2bf.
+# Note that this corresponds to the "default_magic + 2" from the comment above
+
+# In my builds:
+# $ ./pypy --info | grep objspace.opcodes
+# objspace.opcodes.CALL_LIKELY_BUILTIN: False
+# objspace.opcodes.CALL_METHOD: True
+# so I'd expect the magic number to be:
+# 0x0a0df2bf + 2 (the flag for CALL_METHOD)
+# giving
+# 0x0a0df2c1
+#
+# I'm seeing
+# c1 f2 0d 0a
+# as the first four bytes of the .pyc files, which is consistent with this.
+
+
+# Bytecompile all of the .py files we ship, using our pypy binary, giving us
+# .pyc files for pypy. The script actually does the work twice (passing in -O
+# the second time) but it's simplest to reuse that script.
+#
+# The script has special-casing for .py files below
+# /usr/lib{64}/python[0-9].[0-9]
+# but given that we're installing into a different path, the supplied "default"
+# implementation gets used instead.
+#
+# 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}/pypy \
+ 0
+
+%check
+topdir=$(pwd)
+
+SkipTest() {
+ # Append the given test name to TESTS_TO_SKIP
+ TEST_NAME=$1
+ TESTS_TO_SKIP="$TESTS_TO_SKIP $TEST_NAME"
+}
+
+CheckPyPy() {
+ # We'll be exercising one of the freshly-built binaries using the
+ # test suite from the standard library (overridden in places by pypy's
+ # modified version)
+ ExeName=$1
+
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "STARTING TEST OF: $ExeName"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+
+ pushd %{goal_dir}
+
+ # Gather a list of tests to skip, due to known failures
+ # TODO: report these failures to pypy upstream
+ TESTS_TO_SKIP=""
+
+ # Test failures relating to missing codecs
+ # Hopefully when pypy merges to 2.7 support we'll gain these via a
+ # refreshed stdlib:
+ # test_codecencodings_cn:
+ # all tests fail, with one of
+ # unknown encoding: gb18030
+ # unknown encoding: gb2312
+ # unknown encoding: gbk
+ SkipTest test_codecencodings_cn
+
+ # test_codecencodings_hk:
+ # all tests fail, with:
+ # unknown encoding: big5hkscs
+ SkipTest test_codecencodings_hk
+
+ # test_codecencodings_jp:
+ # all tests fail, with one of:
+ # unknown encoding: cp932
+ # unknown encoding: euc_jisx0213
+ # unknown encoding: euc_jp
+ # unknown encoding: shift_jis
+ # unknown encoding: shift_jisx0213
+ SkipTest test_codecencodings_jp
+
+ # test_codecencodings_kr:
+ # all tests fail, with one of:
+ # unknown encoding: cp949
+ # unknown encoding: euc_kr
+ # unknown encoding: johab
+ SkipTest test_codecencodings_kr
+
+ # test_codecencodings_tw:
+ # all tests fail, with:
+ # unknown encoding: big5
+ SkipTest test_codecencodings_tw
+
+ # test_multibytecodec:
+ # 14 failures out of 15, due to:
+ # unknown encoding: euc-kr
+ # unknown encoding: gb2312
+ # unknown encoding: jisx0213
+ # unknown encoding: cp949
+ # unknown encoding: iso2022-jp
+ # unknown encoding: gb18030
+ SkipTest test_multibytecodec
+
+ #
+ # Other failures:
+ #
+ # test_asynchat:
+ # seems to hang on this test, within test_line_terminator
+ SkipTest test_asynchat
+
+ # test_compiler:
+ # 4 errors out of 13:
+ # testSourceCodeEncodingsError
+ # testWith
+ # testWithAss
+ # testYieldExpr
+ SkipTest test_compiler
+
+ # test_ctypes:
+ # failures=17, errors=20, out of 132 tests
+ SkipTest test_ctypes
+
+ # test_frozen:
+ # TestFailed: import __hello__ failed:No module named __hello__
+ SkipTest test_frozen
+
+ # test_iterlen:
+ # 24 failures out of 25, apparently all due to TypeError
+ SkipTest test_iterlen
+
+ # test_parser:
+ # 12 failures out of 15
+ SkipTest test_parser
+
+ # test_platform:
+ # Koji builds show:
+ # test test_platform failed -- errors occurred in test.test_platform.PlatformTest
+ SkipTest test_platform
+
+ # test_socket:
+ # testSockName can fail in Koji with:
+ # my_ip_addr = socket.gethostbyname(socket.gethostname())
+ # gaierror: (-3, 'Temporary failure in name resolution')
+ SkipTest test_socket
+
+ # test_sort:
+ # some failures
+ SkipTest test_sort
+
+ # test_sqlite:
+ # 3 of the sqlite3.test.dbapi.ExtensionTests raise:
+ # ProgrammingError: Incomplete statement ''
+ SkipTest test_sqlite
+
+ # test_traceback:
+ # works when run standalone; failures seen when run as part of a suite
+ SkipTest test_traceback
+
+ # test_zlib:
+ # failure seen in Koji, not sure of reason why:
+ # test test_zlib failed -- Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.4.1-src/lib-python/2.5.2/test/test_zlib.py", line 72, in test_baddecompressobj
+ # self.assertRaises(ValueError, zlib.decompressobj, 0)
+ # AssertionError: ValueError not raised
+ SkipTest test_zlib
+
+
+ # Run the built binary through the selftests:
+ time ./$ExeName -m test.regrtest -x $TESTS_TO_SKIP
+
+ popd
+
+ # Doublecheck pypy's own test suite, using the built pypy binary:
+
+ # Disabled for now:
+ # x86_64 shows various failures inside:
+ # jit/backend/x86/test
+ # followed by a segfault inside
+ # jit/backend/x86/test/test_runner.py
+ #
+ # i686 shows various failures inside:
+ # jit/backend/x86/test
+ # with the x86_64 failure leading to cancellation of the i686 build
+
+ # Here's the disabled code:
+ # pushd pypy
+ # time translator/goal/$ExeName test_all.py
+ # popd
+
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "FINISHED TESTING: $ExeName"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+}
+
+%if 0%{with_jit}
+CheckPyPy pypy
+%endif
+
+%if 0%{with_stackless}
+CheckPyPy pypy-stackless
+%endif
+
+
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+
+%files libs
+%defattr(-,root,root,-)
+%doc LICENSE README demo
+
+%dir %{pypyprefix}
+%dir %{pypyprefix}/lib-python
+%{pypyprefix}/lib-python/%{pylibver}/
+%{pypyprefix}/lib-python/modified-%{pylibver}/
+%{pypyprefix}/lib-python/conftest.py*
+%{pypyprefix}/lib_pypy/
+%{pypyprefix}/site-packages/
+
+%if 0%{with_jit}
+%files
+%defattr(-,root,root,-)
+%doc LICENSE README
+%{_bindir}/pypy
+%endif
+
+%if 0%{with_stackless}
+%files stackless
+%defattr(-,root,root,-)
+%doc LICENSE README
+%{_bindir}/pypy-stackless
+%endif
+
+
+%changelog
+* Wed Dec 22 2010 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-3
+- try to respect the FHS by installing libraries below libdir, rather than
+datadir; patch app_main.py to look in this installation location first when
+scanning for the pypy library directories.
+- clarifications and corrections to the comments in the specfile
+
+* Wed Dec 22 2010 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-2
+- remove .svn directories
+- disable verbose logging
+- add a %%check section
+- introduce %%goal_dir variable, to avoid repetition
+- remove shebang line from demo/bpnn.py, as we're treating this as a
+documentation file
+- regenerate patch 2 to apply without generating a .orig file
+
+* Tue Dec 21 2010 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-1
+- 1.4.1; fixup %%setup to reflect change in toplevel directory in upstream
+source tarball
+- apply SELinux fix to the bundled test_commands.py (patch 2)
+
+* Wed Dec 15 2010 David Malcolm <dmalcolm(a)redhat.com> - 1.4-4
+- rename the jit build and subpackge to just "pypy", and remove the nojit and
+sandbox builds, as upstream now seems to be focussing on the JIT build (with
+only stackless called out in the getting-started-python docs); disable
+stackless for now
+- add a verbose_logs specfile boolean; leave it enabled for now (whilst fixing
+build issues)
+- add more comments, and update others to reflect 1.2 -> 1.4 changes
+- re-enable debuginfo within CFLAGS ("-g")
+- add the LICENSE and README to all subpackages
+- ensure the built binaries don't have the "I need an executable stack" flag
+- remove DOS batch files during %%prep (idlelib.bat)
+- remove shebang lines from .py files that aren't executable, and remove
+executability from .py files that don't have a shebang line (taken from
+our python3.spec)
+- bytecompile the .py files into .pyc files in pypy's bytecode format
+
+* Sun Nov 28 2010 Toshio Kuratomi <toshio(a)fedoraproject.org> - 1.4-3
+- BuildRequire valgrind-devel
+- Install pypy library from the new directory
+- Disable building with our CFLAGS for now because they are causing a build failure.
+- Include site-packages directory
+
+* Sat Nov 27 2010 Toshio Kuratomi <toshio(a)fedoraproject.org> - 1.4-2
+- Add patch to configure the build to use our CFLAGS and link libffi
+ dynamically
+
+* Sat Nov 27 2010 Toshio Kuratomi <toshio(a)fedoraproject.org> - 1.4-1
+- Update to 1.4
+- Drop patch for py2.6 that's in this build
+- Switch to building pypy with itself once pypy is built once as recommended by
+ upstream
+- Remove bundled, prebuilt java libraries
+- Fix license tag
+- Fix source url
+- Version pypy-libs Req
+
+* Tue May 4 2010 David Malcolm <dmalcolm(a)redhat.com> - 1.2-2
+- cherrypick r72073 from upstream SVN in order to fix the build against
+python 2.6.5 (patch 2)
+
+* Wed Apr 28 2010 David Malcolm <dmalcolm(a)redhat.com> - 1.2-1
+- initial packaging
+
diff --git a/sources b/sources
index e69de29..90f34be 100644
--- a/sources
+++ b/sources
@@ -0,0 +1 @@
+ebbbb156b1eb842e9e65d909ed5f9f6d pypy-1.4.1-src.tar.bz2
2 years, 10 months
Architecture specific change in rpms/pypy3.7.git
by githook-noreply@fedoraproject.org
The package rpms/pypy3.7.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=5aa1d86125...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=faa7ffb044...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=083ef4d302...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=f27d32f530...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=9d0ffbc9d5...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=82dcbae232...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=720aa9bae8...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=a6780ec435...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=b929faae35...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=9107198269...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=ad0d37c683...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=6b002d36f3...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=693a83b0c2...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=817c77d554...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=347fb465b0...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=343676a899...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=4a3038ff56...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=43ee778526...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=a0374180ff...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=d39359a3af...
https://src.fedoraproject.org/cgit/rpms/pypy3.7.git/commit/?id=f756cfcb34....
Change:
+%ifarch %{ix86} x86_64 %{arm} %{power64} s390x aarch64
-%ifarch %{power64}
-ExcludeArch: %{power64}
+ExcludeArch: %{power64}
+ExcludeArch: aarch64 %{power64}
+%ifarch %{power64}
-%ifnarch aarch64 ppc64le
+%ifarch %{ix86} x86_64 %{arm} %{power64} s390x
+%ifarch s390 s390x
+%ifarch %{ix86} x86_64 %{arm}
+ExcludeArch: aarch64
+ExcludeArch: aarch64 armv7hl s390 s390x
+ExcludeArch: aarch64 s390 s390x
+ExcludeArch: aarch64 s390 s390x ppc64le ppc64
+ExcludeArch: aarch64 s390 s390x
-%ifarch x86_64
+%ifarch x86_64
+%ifnarch aarch64 ppc64le
+%ifnarch s390
+%ifarch %{ix86} x86_64 ppc ppc64 s390x
+%ifarch %{ix86} x86_64
Thanks.
Full change:
============
commit 27985bbcb8631a6af65c76bde080577242960df5
Author: Tomas Hrnciar <thrnciar(a)redhat.com>
Date: Tue Aug 10 13:38:40 2021 +0200
Add bcond main_pypy3 to differentiate whether package is main pypy
package or not
diff --git a/pypy3.7.spec b/pypy3.7.spec
index a660404..33e04c9 100644
--- a/pypy3.7.spec
+++ b/pypy3.7.spec
@@ -126,6 +126,12 @@ URL: http://pypy.org/
# We refer to this subdir of the source tree in a few places during the build:
%global goal_dir pypy/goal
+%if 0%{?fedora} >= 35
+%bcond_without main_pypy3
+%else
+%bcond_with main_pypy3
+%endif
+
# Source and patches:
Source0: https://downloads.python.org/pypy/pypy%{pyversion}-v%{version}-src.tar.bz2
@@ -237,10 +243,12 @@ BuildRequires: python-pip-wheel
# Metadata for the core package (the JIT build):
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
+%if %{with main_pypy3}
Provides: %{name}(abi) = %{basever}
Provides: pypy3 = %{version}-%{release}
Provides: pypy3%{?_isa} = %{version}-%{release}
Obsoletes: pypy3 < 7.3.4-4
+%endif
%description
PyPy's implementation of Python 3, featuring a Just-In-Time compiler on some CPU
@@ -264,9 +272,11 @@ Summary: Run-time libraries used by PyPy implementations of Python 3
Requires: emacs-filesystem >= %{_emacs_version}
%endif
+%if %{with main_pypy3}
Provides: pypy3-libs = %{version}-%{release}
Provides: pypy3-libs%{?_isa} = %{version}-%{release}
Obsoletes: pypy3-libs < 7.3.4-4
+%endif
%if %{with rpmwheels}
Requires: python-setuptools-wheel
@@ -299,9 +309,11 @@ Libraries required by the various PyPy implementations of Python 3.
Summary: Development tools for working with PyPy3
Requires: pypy%{pyversion}%{?_isa} = %{version}-%{release}
+%if %{with main_pypy3}
Provides: pypy3-devel = %{version}-%{release}
Provides: pypy3-devel%{?_isa} = %{version}-%{release}
Obsoletes: pypy3-devel < 7.3.4-4
+%endif
%description devel
Header files for building C extension modules against PyPy3
@@ -537,7 +549,9 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
execstack --clear-execstack %{buildroot}/%{pypyprefix}/bin/pypy3
ln -s %{pypyprefix}/bin/pypy%{pyversion} %{buildroot}%{_bindir}/pypy%{pyversion}
+%if %{with main_pypy3}
ln -s pypy%{pyversion} %{buildroot}%{_bindir}/pypy3
+%endif
# 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
@@ -662,12 +676,14 @@ 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}/pypy3trace-mode.el
-cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/pypy3trace-mode.elc
+cp -a rpython/jit/tool/pypytrace-mode.el %{buildroot}/%{_emacs_sitelispdir}/pypy%{pyversion}trace-mode.el
+cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/pypy%{pyversion}trace-mode.elc
%endif
+%if %{with main_pypy3}
# Install macros for rpm:
install -m0644 -p -D -t %{buildroot}/%{_rpmconfigdir}/macros.d %{SOURCE2}
+%endif
# Remove files we don't want:
rm -f %{buildroot}%{_libdir}/%{name}.tar.bz2 \
@@ -828,8 +844,8 @@ CheckPyPy pypy3-c
%license %{pypyprefix}/lib_pypy/*/LICENSE
%{pypyprefix}/site-packages/
%if %{with_emacs}
-%{_emacs_sitelispdir}/pypy3trace-mode.el
-%{_emacs_sitelispdir}/pypy3trace-mode.elc
+%{_emacs_sitelispdir}/pypy%{pyversion}trace-mode.el
+%{_emacs_sitelispdir}/pypy%{pyversion}trace-mode.elc
%endif
%files
commit 86f73ef2399e7e79e12a312bc017a25e51d949df
Author: Tomas Hrnciar <thrnciar(a)redhat.com>
Date: Mon Aug 9 12:52:43 2021 +0200
Removes pypy-stackless as it is not needed anymore
diff --git a/pypy3.7.spec b/pypy3.7.spec
index 9133480..a660404 100644
--- a/pypy3.7.spec
+++ b/pypy3.7.spec
@@ -78,19 +78,6 @@ URL: http://pypy.org/
# [Timer] compile_c --- 273.9 s
# [Timer] ===========================================
# [Timer] Total: --- 3572.0 s
-#
-#
-# A build of pypy-stackless on i686 took about 87 mins:
-# [Timer] Timings:
-# [Timer] annotate --- 584.2 s
-# [Timer] rtype_lltype --- 777.3 s
-# [Timer] backendopt_lltype --- 365.9 s
-# [Timer] stackcheckinsertion_lltype --- 39.3 s
-# [Timer] database_c --- 1089.6 s
-# [Timer] source_c --- 1868.6 s
-# [Timer] compile_c --- 490.4 s
-# [Timer] ===========================================
-# [Timer] Total: --- 5215.3 s
# We will build a "pypy" binary.
@@ -116,9 +103,6 @@ URL: http://pypy.org/
%global with_jit 0
%endif
-# Should we build a "pypy-stackless" binary?
-%global with_stackless 0
-
# Should we build the emacs JIT-viewing mode?
%if 0%{?rhel} == 6
%global with_emacs 0
@@ -323,19 +307,6 @@ Obsoletes: pypy3-devel < 7.3.4-4
Header files for building C extension modules against PyPy3
-%if 0%{with_stackless}
-%package stackless
-Summary: Stackless Python interpreter built using PyPy3
-Requires: pypy3-libs%{?_isa} = %{version}-%{release}
-
-Provides: pypy3-stackless = %{version}-%{release}
-Provides: pypy3-stackless%{?_isa} = %{version}-%{release}
-Obsoletes: pypy3-stackless < 7.3.4-4
-
-%description stackless
-Build of PyPy3 with support for micro-threads for massive concurrency
-%endif
-
%prep
%autosetup -n pypy%{pyversion}-v%{version}-src -p1 -S git
@@ -522,12 +493,6 @@ BuildPyPy \
%endif
%{nil}
-%if 0%{with_stackless}
-BuildPyPy \
- pypy3-stackless \
- "--stackless"
-%endif
-
%if %{with_emacs}
%{_emacs_bytecompile} rpython/jit/tool/pypytrace-mode.el
%endif
@@ -845,11 +810,6 @@ CheckPyPy() {
%if %{run_selftests}
CheckPyPy pypy3-c
-
-%if 0%{with_stackless}
-CheckPyPy pypy3-stackless
-%endif
-
%endif # run_selftests
# Because there's a bunch of binary subpackages and creating
@@ -887,12 +847,6 @@ CheckPyPy pypy3-stackless
%{_rpmconfigdir}/macros.d/macros.pypy3
%endif
-%if 0%{with_stackless}
-%files stackless
-%doc README.rst
-%{_bindir}/pypy-stackless
-%endif
-
%changelog
* Mon Aug 09 2021 Tomas Hrnciar <thrnciar(a)redhat.com> - 7.3.4-4
commit b8466c1e8afa8093205b6100a27540f753b5c9d9
Author: Tomas Hrnciar <thrnciar(a)redhat.com>
Date: Mon Aug 9 12:45:19 2021 +0200
Rename pypy3 to pypy3.7
diff --git a/pypy3.spec b/pypy3.7.spec
similarity index 97%
rename from pypy3.spec
rename to pypy3.7.spec
index 2bd5917..9133480 100644
--- a/pypy3.spec
+++ b/pypy3.7.spec
@@ -1,8 +1,8 @@
%global basever 7.3
-Name: pypy3
-Version: %{basever}.4
%global pyversion 3.7
-Release: 3%{?dist}
+Name: pypy%{pyversion}
+Version: %{basever}.4
+Release: 4%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# PyPy is MIT
@@ -136,7 +136,7 @@ URL: http://pypy.org/
# Easy way to turn off the selftests:
%global run_selftests 1
-%global pypyprefix %{_libdir}/pypy3-%{basever}
+%global pypyprefix %{_libdir}/pypy%{pyversion}
%global pylibver 3
# We refer to this subdir of the source tree in a few places during the build:
@@ -254,8 +254,9 @@ BuildRequires: python-pip-wheel
# Metadata for the core package (the JIT build):
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
Provides: %{name}(abi) = %{basever}
-Provides: pypy%{pyversion} = %{version}-%{release}
-Provides: pypy%{pyversion}%{?_isa} = %{version}-%{release}
+Provides: pypy3 = %{version}-%{release}
+Provides: pypy3%{?_isa} = %{version}-%{release}
+Obsoletes: pypy3 < 7.3.4-4
%description
PyPy's implementation of Python 3, featuring a Just-In-Time compiler on some CPU
@@ -279,8 +280,9 @@ Summary: Run-time libraries used by PyPy implementations of Python 3
Requires: emacs-filesystem >= %{_emacs_version}
%endif
-Provides: pypy%{pyversion}-libs = %{version}-%{release}
-Provides: pypy%{pyversion}-libs%{?_isa} = %{version}-%{release}
+Provides: pypy3-libs = %{version}-%{release}
+Provides: pypy3-libs%{?_isa} = %{version}-%{release}
+Obsoletes: pypy3-libs < 7.3.4-4
%if %{with rpmwheels}
Requires: python-setuptools-wheel
@@ -311,10 +313,11 @@ Libraries required by the various PyPy implementations of Python 3.
%package devel
Summary: Development tools for working with PyPy3
-Requires: pypy3%{?_isa} = %{version}-%{release}
+Requires: pypy%{pyversion}%{?_isa} = %{version}-%{release}
-Provides: pypy%{pyversion}-devel = %{version}-%{release}
-Provides: pypy%{pyversion}-devel%{?_isa} = %{version}-%{release}
+Provides: pypy3-devel = %{version}-%{release}
+Provides: pypy3-devel%{?_isa} = %{version}-%{release}
+Obsoletes: pypy3-devel < 7.3.4-4
%description devel
Header files for building C extension modules against PyPy3
@@ -325,8 +328,9 @@ Header files for building C extension modules against PyPy3
Summary: Stackless Python interpreter built using PyPy3
Requires: pypy3-libs%{?_isa} = %{version}-%{release}
-Provides: pypy%{pyversion}-stackless = %{version}-%{release}
-Provides: pypy%{pyversion}-stackless%{?_isa} = %{version}-%{release}
+Provides: pypy3-stackless = %{version}-%{release}
+Provides: pypy3-stackless%{?_isa} = %{version}-%{release}
+Obsoletes: pypy3-stackless < 7.3.4-4
%description stackless
Build of PyPy3 with support for micro-threads for massive concurrency
@@ -534,8 +538,8 @@ mkdir -p %{buildroot}/%{_bindir}
mkdir -p %{buildroot}/%{pypyprefix}
-# Run installing script, archive-name %{name}-%{basever} in %{buildroot}/%{_libdir} == %{pypyprefix}
-%{bootstrap_python_interp} pypy/tool/release/package.py --archive-name %{name}-%{basever} --builddir %{buildroot}/%{_libdir} --no-embedded-dependencies
+# Run installing script, archive-name pypy%{pyversion} in %{buildroot}/%{_libdir} == %{pypyprefix}
+%{bootstrap_python_interp} pypy/tool/release/package.py --archive-name pypy%{pyversion} --builddir %{buildroot}/%{_libdir} --no-embedded-dependencies
# Remove shebang lines from .py files that aren't executable, and
@@ -701,7 +705,7 @@ cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/pyp
install -m0644 -p -D -t %{buildroot}/%{_rpmconfigdir}/macros.d %{SOURCE2}
# Remove files we don't want:
-rm -f %{buildroot}%{_libdir}/%{name}-%{basever}.tar.bz2 \
+rm -f %{buildroot}%{_libdir}/%{name}.tar.bz2 \
%{buildroot}%{pypyprefix}/README.rst
# wtf? This is probably masking some bigger problem, but let's do this for now
@@ -840,10 +844,10 @@ CheckPyPy() {
#pypy/goal/pypy pypy/test_all.py --resultlog=pypyjit_new.log
%if %{run_selftests}
-CheckPyPy %{name}-c
+CheckPyPy pypy3-c
%if 0%{with_stackless}
-CheckPyPy %{name}-stackless
+CheckPyPy pypy3-stackless
%endif
%endif # run_selftests
@@ -870,16 +874,18 @@ CheckPyPy %{name}-stackless
%files
%doc README.rst
+%if %{with main_pypy3}
%{_bindir}/pypy3
+%endif
%{_bindir}/pypy%{pyversion}
%{pypyprefix}/bin/
-%exclude %{_libdir}/%{name}-%{version}.tar.bz2
-
%files devel
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
+%if %{with main_pypy3}
%{_rpmconfigdir}/macros.d/macros.pypy3
+%endif
%if 0%{with_stackless}
%files stackless
@@ -889,6 +895,10 @@ CheckPyPy %{name}-stackless
%changelog
+* Mon Aug 09 2021 Tomas Hrnciar <thrnciar(a)redhat.com> - 7.3.4-4
+- Rename pypy3 to pypy3.7
+- pypy-stackless was removed
+
* Fri Jul 23 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.4-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
diff --git a/tests/tests.yml b/tests/tests.yml
index 827cb90..5242663 100644
--- a/tests/tests.yml
+++ b/tests/tests.yml
@@ -10,8 +10,8 @@
tests:
- smoke:
dir: python/smoke
- run: PYTHON=pypy3 VERSION=3.7 ./venv.sh
+ run: PYTHON=pypy3.7 VERSION=3.7 ./venv.sh
required_packages:
- gcc
- python3-tox
- - pypy3-devel
+ - pypy3.7-devel
commit 716f2f638d30f78656b784f42dd633aac492804e
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Fri Jul 23 04:30:08 2021 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index 3b11f44..2bd5917 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.4
%global pyversion 3.7
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# PyPy is MIT
@@ -889,6 +889,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri Jul 23 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.4-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
+
* Wed Jul 21 2021 Tomas Hrnciar <thrnciar(a)redhat.com> - 7.3.4-2
- Replace removed /usr/lib/rpm/brp-python-bytecompile with %%py_byte_compile macros
- Fixes: rhbz#1976656
commit e90c1b5d85ebcaed6e89cf8bf6b2327210769370
Author: Tomas Hrnciar <thrnciar(a)redhat.com>
Date: Wed Jul 21 16:19:29 2021 +0200
Replace removed /usr/lib/rpm/brp-python-bytecompile with %%py_byte_compile macros
diff --git a/pypy3.spec b/pypy3.spec
index 025102c..3b11f44 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.4
%global pyversion 3.7
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# PyPy is MIT
@@ -143,10 +143,6 @@ URL: http://pypy.org/
%global goal_dir pypy/goal
-# Turn off the brp-python-bytecompile postprocessing script
-# We manually invoke it later on, using the freshly built pypy binary
-%global __brp_python_bytecompile %{nil}
-
# Source and patches:
Source0: https://downloads.python.org/pypy/pypy%{pyversion}-v%{version}-src.tar.bz2
@@ -221,6 +217,9 @@ BuildRequires: expat-devel
BuildRequires: openssl-devel
BuildRequires: gdbm-devel
BuildRequires: xz-devel
+
+BuildRequires: python-rpm-macros
+
%ifnarch s390
BuildRequires: valgrind-devel
%endif
@@ -617,19 +616,12 @@ ln -s pypy%{pyversion} %{buildroot}%{_bindir}/pypy3
# Bytecompile all of the .py files we ship, using our pypy binary, giving us
-# .pyc files for pypy. The script actually does the work twice (passing in -O
-# the second time) but it's simplest to reuse that script.
-#
-# The script has special-casing for .py files below
-# /usr/lib{64}/python[0-9].[0-9]
-# but given that we're installing into a different path, the supplied "default"
-# implementation gets used instead.
+# .pyc files for pypy.
#
# 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}%{pypyprefix}/bin/pypy3 \
- 0
+# we are running it in subshell, to be able to ignore the failures and not to terminate the build.
+(%{py_byte_compile %{buildroot}%{pypyprefix}/bin/pypy3 %{buildroot}%{pypyprefix}}) || :
+
%{buildroot}%{pypyprefix}/bin/pypy3 -c 'import _tkinter'
%{buildroot}%{pypyprefix}/bin/pypy3 -c 'import tkinter'
@@ -897,6 +889,10 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed Jul 21 2021 Tomas Hrnciar <thrnciar(a)redhat.com> - 7.3.4-2
+- Replace removed /usr/lib/rpm/brp-python-bytecompile with %%py_byte_compile macros
+- Fixes: rhbz#1976656
+
* Tue May 25 2021 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.4-1
- Update to 7.3.4
- pypy3 is now Python 3.7
commit f24f8ff0ada28610e3a6801d602c3effea640fe5
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri May 21 01:35:55 2021 +0200
Update to 7.3.4, PyPy3.7
diff --git a/.gitignore b/.gitignore
index 849f483..c4b4267 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,4 @@
/pypy3.6-v7.2.0-src.tar.bz2
/pypy3.6-v7.3.0-src.tar.bz2
/pypy3.6-v7.3.1-src.tar.bz2
+/pypy3.7-v7.3.4-src.tar.bz2
diff --git a/011-no-faulthandler.patch b/011-no-faulthandler.patch
index e093956..c0dd76b 100644
--- a/011-no-faulthandler.patch
+++ b/011-no-faulthandler.patch
@@ -30,7 +30,7 @@ index faa1ba7..2edadc9 100644
"PIPE_MAX_SIZE", "verbose", "max_memuse", "use_resources", "failfast",
@@ -2231,7 +2235,8 @@ def start_threads(threads, unlock=None):
finally:
- started = [t for t in started if t.isAlive()]
+ started = [t for t in started if t.is_alive()]
if started:
- faulthandler.dump_traceback(sys.stdout)
+ if faulthandler is not None:
diff --git a/189-use-rpm-wheels.patch b/189-use-rpm-wheels.patch
index 0032ba9..8fd8a55 100644
--- a/189-use-rpm-wheels.patch
+++ b/189-use-rpm-wheels.patch
@@ -1,25 +1,21 @@
diff --git a/lib-python/3/ensurepip/__init__.py b/lib-python/3/ensurepip/__init__.py
-index 6b35b3d..97fc83b 100644
+index 94d40b0..9135b80 100644
--- a/lib-python/3/ensurepip/__init__.py
+++ b/lib-python/3/ensurepip/__init__.py
-@@ -1,16 +1,34 @@
+@@ -1,3 +1,5 @@
+import distutils.version
+import glob
import os
import os.path
import pkgutil
- import sys
-+import runpy
- import tempfile
-
-
+@@ -9,9 +11,24 @@ import tempfile
__all__ = ["version", "bootstrap"]
-
-
--_SETUPTOOLS_VERSION = "44.0.0"
+
+
+-_SETUPTOOLS_VERSION = "47.1.0"
+_WHEEL_DIR = "/usr/share/python-wheels/"
-
--_PIP_VERSION = "20.0.2"
+
+-_PIP_VERSION = "20.1.1"
+_wheels = {}
+
+def _get_most_recent_wheel_version(pkg):
@@ -36,36 +32,14 @@ index 6b35b3d..97fc83b 100644
+_SETUPTOOLS_VERSION = _get_most_recent_wheel_version("setuptools")
+
+_PIP_VERSION = _get_most_recent_wheel_version("pip")
-
+
_PROJECTS = [
- ("setuptools", _SETUPTOOLS_VERSION),
-@@ -23,10 +41,18 @@ def _run_pip(args, additional_paths=None):
- if additional_paths is not None:
- sys.path = additional_paths + sys.path
-
-- # Install the bundled software
-- import pip._internal.cli.main
-- return pip._internal.cli.main.main(args)
-+ # Invoke pip as if it's the main module, and catch the exit.
-+ backup_argv = sys.argv[:]
-+ sys.argv[1:] = args
-+ try:
-+ # run_module() alters sys.modules and sys.argv, but restores them at exit
-+ runpy.run_module("pip", run_name="__main__", alter_sys=True)
-+ except SystemExit as exc:
-+ return exc.code
-+ finally:
-+ sys.argv[:] = backup_argv
-
-+ raise SystemError("pip did not exit, this should never happen")
-
- def version():
- """
-@@ -93,13 +119,10 @@ def _bootstrap(*, root=None, upgrade=False, user=False,
+ ("setuptools", _SETUPTOOLS_VERSION, "py3"),
+@@ -103,13 +120,10 @@ def _bootstrap(*, root=None, upgrade=False, user=False,
# additional paths that need added to sys.path
additional_paths = []
- for project, version in _PROJECTS:
-- wheel_name = "{}-{}-py2.py3-none-any.whl".format(project, version)
+ for project, version, py_tag in _PROJECTS:
+- wheel_name = "{}-{}-{}-none-any.whl".format(project, version, py_tag)
- whl = pkgutil.get_data(
- "ensurepip",
- "_bundled/{}".format(wheel_name),
diff --git a/pypy3.spec b/pypy3.spec
index 7b4d004..025102c 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,8 +1,8 @@
%global basever 7.3
Name: pypy3
-Version: %{basever}.1
-%global pyversion 3.6
-Release: 6%{?dist}
+Version: %{basever}.4
+%global pyversion 3.7
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# PyPy is MIT
@@ -25,7 +25,9 @@ URL: http://pypy.org/
# with the packaged version.
# The version information can be found at lib_pypy/_libmpdec/mpdecimal.h
# defined as MPD_VERSION.
-%global libmpdec_version 2.4.1
+# See https://foss.heptapod.net/pypy/pypy/-/issues/3024
+# With PyPy 7.3.4, the decimal module is not compiled
+#%%global libmpdec_version 2.4.1
# Whether to use RPM build wheels from the python-{pip,setuptools}-wheel package
# Uses upstream bundled prebuilt wheels otherwise
@@ -146,7 +148,7 @@ URL: http://pypy.org/
%global __brp_python_bytecompile %{nil}
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/downloads/pypy%{pyversion}-v%{version}-sr...
+Source0: https://downloads.python.org/pypy/pypy%{pyversion}-v%{version}-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -285,13 +287,15 @@ Provides: pypy%{pyversion}-libs%{?_isa} = %{version}-%{release}
Requires: python-setuptools-wheel
Requires: python-pip-wheel
%else
-Provides: bundled(python3dist(pip)) = 20.0.2
-Provides: bundled(python3dist(setuptools)) = 44.0.0
+Provides: bundled(python3dist(pip)) = 20.1.1
+Provides: bundled(python3dist(setuptools)) = 47.1.0
%endif
# Provides for the bundled libmpdec
+%{?libmpdec_version:
Provides: bundled(mpdecimal) = %{libmpdec_version}
Provides: bundled(libmpdec) = %{libmpdec_version}
+}
# Find the version in lib_pypy/cffi/_pycparser/__init__.py
Provides: bundled(python3dist(pycparser)) = 2.20
@@ -341,8 +345,8 @@ rm lib-python/3/ensurepip/_bundled/*.whl
rmdir lib-python/3/ensurepip/_bundled
%else
# we don't want to ship the old ones anyway
-rm lib-python/3/ensurepip/_bundled/pip-8.1.2-*
-rm lib-python/3/ensurepip/_bundled/setuptools-21.2.1-*
+rm lib-python/3/ensurepip/_bundled/pip-20.0*
+rm lib-python/3/ensurepip/_bundled/setuptools-44*
%endif
@@ -532,7 +536,7 @@ mkdir -p %{buildroot}/%{pypyprefix}
# Run installing script, archive-name %{name}-%{basever} in %{buildroot}/%{_libdir} == %{pypyprefix}
-%{bootstrap_python_interp} pypy/tool/release/package.py --archive-name %{name}-%{basever} --builddir %{buildroot}/%{_libdir}
+%{bootstrap_python_interp} pypy/tool/release/package.py --archive-name %{name}-%{basever} --builddir %{buildroot}/%{_libdir} --no-embedded-dependencies
# Remove shebang lines from .py files that aren't executable, and
@@ -564,7 +568,6 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
# approach is to postprocess the ELF file:
execstack --clear-execstack %{buildroot}/%{pypyprefix}/bin/pypy3
-ln -s ./pypy3 %{buildroot}%{pypyprefix}/bin/pypy%{pyversion}
ln -s %{pypyprefix}/bin/pypy%{pyversion} %{buildroot}%{_bindir}/pypy%{pyversion}
ln -s pypy%{pyversion} %{buildroot}%{_bindir}/pypy3
@@ -720,11 +723,12 @@ rm -f %{buildroot}%{pypyprefix}/bin/libpypy3-c.so.debug
%check
+%{?libmpdec_version:
# Verify that the bundled libmpdec version python was compiled with, is the same version we have virtual
# provides for in the SPEC.
test "$(%{goal_dir}/pypy3-c -c 'import decimal; print(decimal.__libmpdec_version__.decode("ascii"))')" = \
"%{libmpdec_version}"
-
+}
topdir=$(pwd)
@@ -893,6 +897,11 @@ CheckPyPy %{name}-stackless
%changelog
+* Tue May 25 2021 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.4-1
+- Update to 7.3.4
+- pypy3 is now Python 3.7
+- Fixes rhbz#1961933
+
* Tue May 25 2021 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.1-6
- Provide missing bundled library information
diff --git a/sources b/sources
index 0b7b357..60e1bdc 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3.6-v7.3.1-src.tar.bz2) = f8e32aae7f01225e0e4d6763eaac40fc02dffc3d0b6a30f22d422147f9be4f3290ea78160a912ffae311dea3d503eb31a7a4f3999d3b541fbccd93d1cef4ca56
+SHA512 (pypy3.7-v7.3.4-src.tar.bz2) = c570d34f284f41dcd8dd909216c69831dd83b8501423c7635a4fe506fb16fd3705cf87975a664735e52d0b805a0432267d611a993437d17aac3defe4b9ea4401
diff --git a/tests/tests.yml b/tests/tests.yml
index c3a91f3..827cb90 100644
--- a/tests/tests.yml
+++ b/tests/tests.yml
@@ -10,7 +10,7 @@
tests:
- smoke:
dir: python/smoke
- run: PYTHON=pypy3 VERSION=3.6 ./venv.sh
+ run: PYTHON=pypy3 VERSION=3.7 ./venv.sh
required_packages:
- gcc
- python3-tox
commit f592f0db6a04e430152a0909b3471683c0c95849
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue May 25 22:05:10 2021 +0200
Provide missing bundled library information
diff --git a/pypy3.spec b/pypy3.spec
index 2184360..7b4d004 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,14 +2,20 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.6
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
+# PyPy is MIT
+# Python standard library is Python
+# pypy/module/unicodedata is UCD
+# Bundled pycparser is is BSD
+# Bundled pycparser.ply is BSD
+# Bundled bits from cryptography are ASL 2.0 or BSD
# LGPL and another free license we'd need to ask spot about are present in some
# java jars that we're not building with atm (in fact, we're deleting them
# before building). If we restore those we'll have to work out the new
# licensing terms
-License: MIT and Python and UCD
+License: MIT and Python and UCD and BSD and (ASL 2.0 or BSD)
URL: http://pypy.org/
# High-level configuration of the build:
@@ -279,14 +285,23 @@ Provides: pypy%{pyversion}-libs%{?_isa} = %{version}-%{release}
Requires: python-setuptools-wheel
Requires: python-pip-wheel
%else
-Provides: bundled(python3-pip) = 20.0.2
-Provides: bundled(python3-setuptools) = 44.0.0
+Provides: bundled(python3dist(pip)) = 20.0.2
+Provides: bundled(python3dist(setuptools)) = 44.0.0
%endif
# Provides for the bundled libmpdec
Provides: bundled(mpdecimal) = %{libmpdec_version}
Provides: bundled(libmpdec) = %{libmpdec_version}
+# Find the version in lib_pypy/cffi/_pycparser/__init__.py
+Provides: bundled(python3dist(pycparser)) = 2.20
+
+# Find the version in lib_pypy/cffi/_pycparser/ply/__init__.py
+Provides: bundled(python3dist(ply)) = 3.9
+
+# Find the version in lib_pypy/_cffi_ssl/cryptography/__about__.py
+Provides: bundled(python3dist(cryptography)) = 2.7
+
%description libs
Libraries required by the various PyPy implementations of Python 3.
@@ -878,6 +893,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Tue May 25 2021 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.1-6
+- Provide missing bundled library information
+
* Wed May 19 2021 Charalampos Stratakis <cstratak(a)redhat.com> - 7.3.1-5
- Add virtual provides for the bundled libmpdec (rhbz#1943359)
commit a45f4e982edfb10e5ec9dae376ba282d6030e88e
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Thu May 20 00:10:33 2021 +0200
Add virtual provides for the bundled libmpdec (rhbz#1943359)
diff --git a/pypy3.spec b/pypy3.spec
index 57590db..2184360 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.6
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -14,6 +14,13 @@ URL: http://pypy.org/
# High-level configuration of the build:
+# libmpdec (mpdecimal package in Fedora) is tightly coupled with the
+# decimal module. We keep it bundled as to avoid incompatibilities
+# with the packaged version.
+# The version information can be found at lib_pypy/_libmpdec/mpdecimal.h
+# defined as MPD_VERSION.
+%global libmpdec_version 2.4.1
+
# Whether to use RPM build wheels from the python-{pip,setuptools}-wheel package
# Uses upstream bundled prebuilt wheels otherwise
%bcond_without rpmwheels
@@ -276,6 +283,10 @@ Provides: bundled(python3-pip) = 20.0.2
Provides: bundled(python3-setuptools) = 44.0.0
%endif
+# Provides for the bundled libmpdec
+Provides: bundled(mpdecimal) = %{libmpdec_version}
+Provides: bundled(libmpdec) = %{libmpdec_version}
+
%description libs
Libraries required by the various PyPy implementations of Python 3.
@@ -693,6 +704,13 @@ rm -f %{buildroot}%{pypyprefix}/bin/libpypy3-c.so.debug
%check
+
+# Verify that the bundled libmpdec version python was compiled with, is the same version we have virtual
+# provides for in the SPEC.
+test "$(%{goal_dir}/pypy3-c -c 'import decimal; print(decimal.__libmpdec_version__.decode("ascii"))')" = \
+ "%{libmpdec_version}"
+
+
topdir=$(pwd)
SkipTest() {
@@ -860,6 +878,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed May 19 2021 Charalampos Stratakis <cstratak(a)redhat.com> - 7.3.1-5
+- Add virtual provides for the bundled libmpdec (rhbz#1943359)
+
* Wed Jan 27 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.1-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
commit 10fe1a9ce92d4e78add6f3b961d0600a9e72fe51
Author: Charalampos Stratakis <cstratak(a)redhat.com>
Date: Thu May 20 00:09:06 2021 +0200
Temporary workaround for missing %apply_patch in RPM 4.17 alpha
diff --git a/pypy3.spec b/pypy3.spec
index 79848ea..57590db 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -306,6 +306,8 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%prep
%autosetup -n pypy%{pyversion}-v%{version}-src -p1 -S git
+# Temporary workaround for https://bugzilla.redhat.com/show_bug.cgi?id=1954999
+%{?!apply_patch:%define apply_patch(qp:m:) {%__apply_patch %**}}
%if %{with rpmwheels}
%apply_patch -m %(basename %{SOURCE189}) %{SOURCE189}
commit 7e40fae162577d96896fe74dc35072e5ee3e8ea3
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Wed Jan 27 08:56:57 2021 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index fd45393..79848ea 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.6
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -858,6 +858,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed Jan 27 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.1-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
+
* Sat Aug 01 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.1-3
- Second attempt - Rebuilt for
https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
commit 2db1dabba5dce3ef2b86a0432eb42488e0be3bda
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Sat Aug 1 07:17:17 2020 +0000
- Second attempt - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index ad7423f..fd45393 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.6
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -858,6 +858,10 @@ CheckPyPy %{name}-stackless
%changelog
+* Sat Aug 01 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.1-3
+- Second attempt - Rebuilt for
+ https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
* Tue Jul 28 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
commit a68c6873ebaceff0dbddeec347b44f1ea70df1f7
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Tue Jul 28 23:22:44 2020 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index ebca79e..ad7423f 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.6
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -858,6 +858,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Tue Jul 28 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
+
* Wed Apr 15 2020 Tomas Hrnciar <thrnciar(a)redhat.com> - 7.3.1-1
- Update to 7.3.1
commit 598f61d5f284c0a353b971350aedf5dd710ddf50
Author: Tomas Hrnciar <thrnciar(a)redhat.com>
Date: Mon Apr 20 13:08:30 2020 +0200
Update to 7.3.1
diff --git a/.gitignore b/.gitignore
index 9058264..849f483 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,4 @@
/pypy3.6-v7.1.1-src.tar.bz2
/pypy3.6-v7.2.0-src.tar.bz2
/pypy3.6-v7.3.0-src.tar.bz2
+/pypy3.6-v7.3.1-src.tar.bz2
diff --git a/189-use-rpm-wheels.patch b/189-use-rpm-wheels.patch
index c84b0cb..0032ba9 100644
--- a/189-use-rpm-wheels.patch
+++ b/189-use-rpm-wheels.patch
@@ -1,24 +1,25 @@
diff --git a/lib-python/3/ensurepip/__init__.py b/lib-python/3/ensurepip/__init__.py
-index 7a0d3ee..2c9d676 100644
+index 6b35b3d..97fc83b 100644
--- a/lib-python/3/ensurepip/__init__.py
+++ b/lib-python/3/ensurepip/__init__.py
-@@ -1,6 +1,7 @@
+@@ -1,16 +1,34 @@
+import distutils.version
+import glob
import os
import os.path
--import pkgutil
+ import pkgutil
import sys
++import runpy
import tempfile
-
-@@ -8,9 +9,24 @@ import tempfile
+
+
__all__ = ["version", "bootstrap"]
-
-
--_SETUPTOOLS_VERSION = "41.2.0"
+
+
+-_SETUPTOOLS_VERSION = "44.0.0"
+_WHEEL_DIR = "/usr/share/python-wheels/"
-
--_PIP_VERSION = "19.2.3"
+
+-_PIP_VERSION = "20.0.2"
+_wheels = {}
+
+def _get_most_recent_wheel_version(pkg):
@@ -35,10 +36,32 @@ index 7a0d3ee..2c9d676 100644
+_SETUPTOOLS_VERSION = _get_most_recent_wheel_version("setuptools")
+
+_PIP_VERSION = _get_most_recent_wheel_version("pip")
-
+
_PROJECTS = [
("setuptools", _SETUPTOOLS_VERSION),
-@@ -93,13 +109,10 @@ def _bootstrap(*, root=None, upgrade=False, user=False,
+@@ -23,10 +41,18 @@ def _run_pip(args, additional_paths=None):
+ if additional_paths is not None:
+ sys.path = additional_paths + sys.path
+
+- # Install the bundled software
+- import pip._internal.cli.main
+- return pip._internal.cli.main.main(args)
++ # Invoke pip as if it's the main module, and catch the exit.
++ backup_argv = sys.argv[:]
++ sys.argv[1:] = args
++ try:
++ # run_module() alters sys.modules and sys.argv, but restores them at exit
++ runpy.run_module("pip", run_name="__main__", alter_sys=True)
++ except SystemExit as exc:
++ return exc.code
++ finally:
++ sys.argv[:] = backup_argv
+
++ raise SystemError("pip did not exit, this should never happen")
+
+ def version():
+ """
+@@ -93,13 +119,10 @@ def _bootstrap(*, root=None, upgrade=False, user=False,
# additional paths that need added to sys.path
additional_paths = []
for project, version in _PROJECTS:
@@ -53,6 +76,6 @@ index 7a0d3ee..2c9d676 100644
+ with open(os.path.join(_WHEEL_DIR, wheel_name), "rb") as sfp:
+ with open(os.path.join(tmpdir, wheel_name), "wb") as fp:
+ fp.write(sfp.read())
-
+
additional_paths.append(os.path.join(tmpdir, wheel_name))
-
+
diff --git a/pypy3.spec b/pypy3.spec
index 63edae4..ebca79e 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,8 +1,8 @@
%global basever 7.3
Name: pypy3
-Version: %{basever}.0
+Version: %{basever}.1
%global pyversion 3.6
-Release: 3%{?dist}
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -14,11 +14,6 @@ URL: http://pypy.org/
# High-level configuration of the build:
-# Build with -fcommon
-# https://bugzilla.redhat.com/show_bug.cgi?id=1796821
-# https://bitbucket.org/pypy/pypy/issues/3163
-%define _legacy_common_support 1
-
# Whether to use RPM build wheels from the python-{pip,setuptools}-wheel package
# Uses upstream bundled prebuilt wheels otherwise
%bcond_without rpmwheels
@@ -277,8 +272,8 @@ Provides: pypy%{pyversion}-libs%{?_isa} = %{version}-%{release}
Requires: python-setuptools-wheel
Requires: python-pip-wheel
%else
-Provides: bundled(python3-pip) = 9.0.1
-Provides: bundled(python3-setuptools) = 28.8.0
+Provides: bundled(python3-pip) = 20.0.2
+Provides: bundled(python3-setuptools) = 44.0.0
%endif
%description libs
@@ -863,6 +858,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed Apr 15 2020 Tomas Hrnciar <thrnciar(a)redhat.com> - 7.3.1-1
+- Update to 7.3.1
+
* Wed Feb 12 2020 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.0-3
- Update the ensurepip module to work with setuptools >= 45
diff --git a/sources b/sources
index 2bd7601..0b7b357 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3.6-v7.3.0-src.tar.bz2) = 313a4254262dd8d8b995a50bddbc360cfb67add0818e51a3e9ce25bda6a9b639e9fea8efe7da6adda76dff0a86a364544a13faa516e51b9ea6c25ec99223b435
+SHA512 (pypy3.6-v7.3.1-src.tar.bz2) = f8e32aae7f01225e0e4d6763eaac40fc02dffc3d0b6a30f22d422147f9be4f3290ea78160a912ffae311dea3d503eb31a7a4f3999d3b541fbccd93d1cef4ca56
commit 2032d986801b3a542282dd6341b01ce5cfe7e347
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Feb 12 13:30:25 2020 +0100
Update the ensurepip module to work with setuptools >= 45
setuptools 45.x is Python 3 only and changed the name of the wheel
diff --git a/189-use-rpm-wheels.patch b/189-use-rpm-wheels.patch
index 9441309..c84b0cb 100644
--- a/189-use-rpm-wheels.patch
+++ b/189-use-rpm-wheels.patch
@@ -1,8 +1,8 @@
diff --git a/lib-python/3/ensurepip/__init__.py b/lib-python/3/ensurepip/__init__.py
-index 9f5d151..8b81155 100644
+index 7a0d3ee..2c9d676 100644
--- a/lib-python/3/ensurepip/__init__.py
+++ b/lib-python/3/ensurepip/__init__.py
-@@ -1,16 +1,27 @@
+@@ -1,6 +1,7 @@
+import distutils.version
+import glob
import os
@@ -11,20 +11,25 @@ index 9f5d151..8b81155 100644
import sys
import tempfile
-
+@@ -8,9 +9,24 @@ import tempfile
__all__ = ["version", "bootstrap"]
-+_WHEEL_DIR = "/usr/share/python-wheels/"
-_SETUPTOOLS_VERSION = "41.2.0"
++_WHEEL_DIR = "/usr/share/python-wheels/"
-_PIP_VERSION = "19.2.3"
++_wheels = {}
++
+def _get_most_recent_wheel_version(pkg):
+ prefix = os.path.join(_WHEEL_DIR, "{}-".format(pkg))
-+ suffix = "-py2.py3-none-any.whl"
-+ pattern = "{}*{}".format(prefix, suffix)
-+ versions = (p[len(prefix):-len(suffix)] for p in glob.glob(pattern))
-+ return str(max(versions, key=distutils.version.LooseVersion))
++ _wheels[pkg] = {}
++ for suffix in "-py2.py3-none-any.whl", "-py3-none-any.whl":
++ pattern = "{}*{}".format(prefix, suffix)
++ for path in glob.glob(pattern):
++ version_str = path[len(prefix):-len(suffix)]
++ _wheels[pkg][version_str] = os.path.basename(path)
++ return str(max(_wheels[pkg], key=distutils.version.LooseVersion))
+
+
+_SETUPTOOLS_VERSION = _get_most_recent_wheel_version("setuptools")
@@ -33,16 +38,18 @@ index 9f5d151..8b81155 100644
_PROJECTS = [
("setuptools", _SETUPTOOLS_VERSION),
-@@ -79,12 +95,9 @@ def bootstrap(*, root=None, upgrade=False, user=False,
+@@ -93,13 +109,10 @@ def _bootstrap(*, root=None, upgrade=False, user=False,
+ # additional paths that need added to sys.path
additional_paths = []
for project, version in _PROJECTS:
- wheel_name = "{}-{}-py2.py3-none-any.whl".format(project, version)
+- wheel_name = "{}-{}-py2.py3-none-any.whl".format(project, version)
- whl = pkgutil.get_data(
- "ensurepip",
- "_bundled/{}".format(wheel_name),
- )
- with open(os.path.join(tmpdir, wheel_name), "wb") as fp:
- fp.write(whl)
++ wheel_name = _wheels[project][version]
+ with open(os.path.join(_WHEEL_DIR, wheel_name), "rb") as sfp:
+ with open(os.path.join(tmpdir, wheel_name), "wb") as fp:
+ fp.write(sfp.read())
diff --git a/pypy3.spec b/pypy3.spec
index e17f3a4..63edae4 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.6
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -863,6 +863,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed Feb 12 2020 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.0-3
+- Update the ensurepip module to work with setuptools >= 45
+
* Thu Jan 30 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
commit 64a5625b90ea9129c1a509ef184c67c97b5699ae
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Feb 12 20:01:06 2020 +0100
Build with -fcommon
diff --git a/pypy3.spec b/pypy3.spec
index a30e912..e17f3a4 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -14,6 +14,11 @@ URL: http://pypy.org/
# High-level configuration of the build:
+# Build with -fcommon
+# https://bugzilla.redhat.com/show_bug.cgi?id=1796821
+# https://bitbucket.org/pypy/pypy/issues/3163
+%define _legacy_common_support 1
+
# Whether to use RPM build wheels from the python-{pip,setuptools}-wheel package
# Uses upstream bundled prebuilt wheels otherwise
%bcond_without rpmwheels
commit 1dceae177ceb5daa5cfc82db2a6afa9a3d3b37d2
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Thu Jan 30 10:15:13 2020 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index 7257616..a30e912 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.6
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -858,6 +858,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Thu Jan 30 2020 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.3.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
+
* Sat Dec 28 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.0-1
- Update to 7.3.0
commit 41c6994849a04d82eb969a306751bf35afe90735
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sat Dec 28 11:22:21 2019 +0100
Update to 7.3.0
diff --git a/.gitignore b/.gitignore
index 4b53676..9058264 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,4 @@
/pypy3.5-v7.0.0-src.tar.bz2
/pypy3.6-v7.1.1-src.tar.bz2
/pypy3.6-v7.2.0-src.tar.bz2
+/pypy3.6-v7.3.0-src.tar.bz2
diff --git a/189-use-rpm-wheels.patch b/189-use-rpm-wheels.patch
index 4a62d57..9441309 100644
--- a/189-use-rpm-wheels.patch
+++ b/189-use-rpm-wheels.patch
@@ -16,9 +16,9 @@ index 9f5d151..8b81155 100644
+_WHEEL_DIR = "/usr/share/python-wheels/"
--_SETUPTOOLS_VERSION = "40.6.2"
+-_SETUPTOOLS_VERSION = "41.2.0"
--_PIP_VERSION = "18.1"
+-_PIP_VERSION = "19.2.3"
+def _get_most_recent_wheel_version(pkg):
+ prefix = os.path.join(_WHEEL_DIR, "{}-".format(pkg))
+ suffix = "-py2.py3-none-any.whl"
diff --git a/d81c769a235307f6671a8fa916f48d6896cbb823.patch b/d81c769a235307f6671a8fa916f48d6896cbb823.patch
deleted file mode 100644
index 8debd29..0000000
--- a/d81c769a235307f6671a8fa916f48d6896cbb823.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-# HG changeset patch
-# User Armin Rigo <arigo(a)tunes.org>
-# Date 1571380165 -7200
-# Node ID d81c769a235307f6671a8fa916f48d6896cbb823
-# Parent f27546b858f97bfa286a891e1474579759028784
-Arguably, clarify the logic. The real motivation is a gcc bug, see issue #3086
-
-diff --git a/rpython/jit/backend/aarch64/opassembler.py b/rpython/jit/backend/aarch64/opassembler.py
---- a/rpython/jit/backend/aarch64/opassembler.py
-+++ b/rpython/jit/backend/aarch64/opassembler.py
-@@ -808,9 +808,7 @@
- # Inline a series of STR operations, starting at 'dstaddr_loc'.
- #
- self.mc.gen_load_int(r.ip0.value, 0)
-- i = 0
-- adjustment = 0
-- needs_adjustment = itemsize < 8 and (startbyte % 8)
-+ i = dst_i = 0
- total_size = size_box.getint()
- while i < total_size:
- sz = itemsize
-@@ -818,19 +816,19 @@
- next_group += 8
- if next_group <= total_size:
- sz = 8
-+ if dst_i % 8: # unaligned?
-+ self.mc.ADD_ri(dstaddr_loc.value, dstaddr_loc.value, dst_i)
-+ dst_i = 0
- if sz == 8:
-- if needs_adjustment:
-- self.mc.ADD_ri(dstaddr_loc.value, dstaddr_loc.value, i)
-- adjustment = -i
-- needs_adjustment = False
-- self.mc.STR_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
-+ self.mc.STR_ri(r.ip0.value, dstaddr_loc.value, dst_i)
- elif sz == 4:
-- self.mc.STRW_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
-+ self.mc.STRW_ri(r.ip0.value, dstaddr_loc.value, dst_i)
- elif sz == 2:
-- self.mc.STRH_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
-+ self.mc.STRH_ri(r.ip0.value, dstaddr_loc.value, dst_i)
- else:
-- self.mc.STRB_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
-+ self.mc.STRB_ri(r.ip0.value, dstaddr_loc.value, dst_i)
- i += sz
-+ dst_i += sz
-
- else:
- if isinstance(size_box, ConstInt):
diff --git a/pypy3.spec b/pypy3.spec
index 785179e..7257616 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,8 +1,8 @@
-%global basever 7.2
+%global basever 7.3
Name: pypy3
Version: %{basever}.0
%global pyversion 3.6
-Release: 2%{?dist}
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -164,9 +164,6 @@ Patch9: 009-add-libxcrypt-support.patch
# It seems ppc64 has no faulthandler
Patch11: 011-no-faulthandler.patch
-# https://bitbucket.org/pypy/pypy/issues/3086
-Patch12: d81c769a235307f6671a8fa916f48d6896cbb823.patch
-
# Instead of bundled wheels, use our RPM packaged wheels from
# /usr/share/python-wheels
# We conditionally apply this, but we use autosetup, so we use Source here
@@ -861,6 +858,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Sat Dec 28 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.3.0-1
+- Update to 7.3.0
+
* Wed Oct 23 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.2.0-2
- Enable JIT on aarch64
diff --git a/sources b/sources
index 25bbbb3..2bd7601 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3.6-v7.2.0-src.tar.bz2) = bcbb53062a473d504bcc082cf6286f6169c83d1f38d22c4d7c4e46ddc32bca9d91e71194637e6650db5bec02b29fe262b22fe236d627b6bc3e6e0c59c66c07cc
+SHA512 (pypy3.6-v7.3.0-src.tar.bz2) = 313a4254262dd8d8b995a50bddbc360cfb67add0818e51a3e9ce25bda6a9b639e9fea8efe7da6adda76dff0a86a364544a13faa516e51b9ea6c25ec99223b435
commit 5aa1d86125bbb751ef5edc25907f659c20d31797
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Oct 23 17:03:00 2019 +0200
Enable JIT on aarch64, add upstream workaround
diff --git a/d81c769a235307f6671a8fa916f48d6896cbb823.patch b/d81c769a235307f6671a8fa916f48d6896cbb823.patch
new file mode 100644
index 0000000..8debd29
--- /dev/null
+++ b/d81c769a235307f6671a8fa916f48d6896cbb823.patch
@@ -0,0 +1,49 @@
+# HG changeset patch
+# User Armin Rigo <arigo(a)tunes.org>
+# Date 1571380165 -7200
+# Node ID d81c769a235307f6671a8fa916f48d6896cbb823
+# Parent f27546b858f97bfa286a891e1474579759028784
+Arguably, clarify the logic. The real motivation is a gcc bug, see issue #3086
+
+diff --git a/rpython/jit/backend/aarch64/opassembler.py b/rpython/jit/backend/aarch64/opassembler.py
+--- a/rpython/jit/backend/aarch64/opassembler.py
++++ b/rpython/jit/backend/aarch64/opassembler.py
+@@ -808,9 +808,7 @@
+ # Inline a series of STR operations, starting at 'dstaddr_loc'.
+ #
+ self.mc.gen_load_int(r.ip0.value, 0)
+- i = 0
+- adjustment = 0
+- needs_adjustment = itemsize < 8 and (startbyte % 8)
++ i = dst_i = 0
+ total_size = size_box.getint()
+ while i < total_size:
+ sz = itemsize
+@@ -818,19 +816,19 @@
+ next_group += 8
+ if next_group <= total_size:
+ sz = 8
++ if dst_i % 8: # unaligned?
++ self.mc.ADD_ri(dstaddr_loc.value, dstaddr_loc.value, dst_i)
++ dst_i = 0
+ if sz == 8:
+- if needs_adjustment:
+- self.mc.ADD_ri(dstaddr_loc.value, dstaddr_loc.value, i)
+- adjustment = -i
+- needs_adjustment = False
+- self.mc.STR_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
++ self.mc.STR_ri(r.ip0.value, dstaddr_loc.value, dst_i)
+ elif sz == 4:
+- self.mc.STRW_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
++ self.mc.STRW_ri(r.ip0.value, dstaddr_loc.value, dst_i)
+ elif sz == 2:
+- self.mc.STRH_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
++ self.mc.STRH_ri(r.ip0.value, dstaddr_loc.value, dst_i)
+ else:
+- self.mc.STRB_ri(r.ip0.value, dstaddr_loc.value, i + adjustment)
++ self.mc.STRB_ri(r.ip0.value, dstaddr_loc.value, dst_i)
+ i += sz
++ dst_i += sz
+
+ else:
+ if isinstance(size_box, ConstInt):
diff --git a/pypy3.spec b/pypy3.spec
index 70caacc..785179e 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.6
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -95,8 +95,7 @@ URL: http://pypy.org/
# it on the other archs. The resulting binary will typically be slower than
# CPython for the latter case.
-# aarch64: https://bitbucket.org/pypy/pypy/issues/3086
-%ifarch %{ix86} x86_64 %{arm} %{power64} s390x
+%ifarch %{ix86} x86_64 %{arm} %{power64} s390x aarch64
%global with_jit 1
%else
%global with_jit 0
@@ -165,6 +164,9 @@ Patch9: 009-add-libxcrypt-support.patch
# It seems ppc64 has no faulthandler
Patch11: 011-no-faulthandler.patch
+# https://bitbucket.org/pypy/pypy/issues/3086
+Patch12: d81c769a235307f6671a8fa916f48d6896cbb823.patch
+
# Instead of bundled wheels, use our RPM packaged wheels from
# /usr/share/python-wheels
# We conditionally apply this, but we use autosetup, so we use Source here
@@ -859,6 +861,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed Oct 23 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.2.0-2
+- Enable JIT on aarch64
+
* Mon Oct 14 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.2.0-1
- Update to 7.2.0 (#1757707)
- Enable aarch64 (without JIT)
commit faa7ffb044605fcf1d807ada72eeb88ccf4181a1
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sat Oct 19 00:41:56 2019 +0200
Build everything with pypy, but fix the cpython build w/out pycparser
diff --git a/pypy3.spec b/pypy3.spec
index 0ab7125..70caacc 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -179,25 +179,15 @@ Source189: 189-use-rpm-wheels.patch
# and avoid a cycle in the build-time dependency graph:
# Note, pypy3 is built with pypy2, so no dependency cycle
-%ifarch %{power64}
-# the build is unreliable with pypy+power, getting random failures
-# so better have a bit slower build than having to build until it pass
-%global use_self_when_building 0
-%else
%global use_self_when_building 1
-%endif
-
%if 0%{use_self_when_building}
# pypy3 can only be build with pypy2
BuildRequires: pypy2
-# no pypy-pycparser available ATM
%global bootstrap_python_interp pypy2
%else
-
-
# pypy3 can only be build with python2
-BuildRequires: python2-devel
-BuildRequires: python2-pycparser
+# exception to use Python 2: https://pagure.io/fesco/issue/2130
+BuildRequires: python27
%global bootstrap_python_interp python2
%endif
@@ -356,6 +346,11 @@ rm lib-python/3/idlelib/idle.bat
sed -i -r 's/\$\(LDFLAGSEXTRA\)/& -fuse-ld=gold/' ./rpython/translator/platform/posix.py
%endif
+%if ! 0%{use_self_when_building}
+ # use the pycparser from PyPy even on CPython
+ ln -s lib_pypy/cffi/_pycparser pycparser
+%endif
+
%build
%ifarch s390 s390x
# pypy3 requires z10 at least
commit 8d646e7dd1de54fcf25b0d37ccc3b087b8e7554e
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Oct 18 19:02:40 2019 +0200
Fix %{pypy3_version} for PyPy 3.10
diff --git a/macros.pypy3 b/macros.pypy3
index f138a39..d11474b 100644
--- a/macros.pypy3
+++ b/macros.pypy3
@@ -1,5 +1,5 @@
%__pypy3 /usr/bin/pypy3
%pypy3_sitelib %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
%pypy3_sitearch %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")
-%pypy3_version %(%{__pypy3} -c "import sys; sys.stdout.write(sys.version[:3])")
+%pypy3_version %(%{__pypy3} -c "import sys; sys.stdout.write('{0.major}.{0.minor}'.format(sys.version_info))")
%pypy3_pypy_version %(%{__pypy3} -c "import sys; sys.stdout.write('{}.{}'.format(sys.pypy_version_info.major, sys.pypy_version_info.minor))")
commit 083ef4d302f9f87e71603a93650baea2929ab127
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Thu Oct 17 20:29:42 2019 +0200
Enable power64 (with JIT)
diff --git a/pypy3.spec b/pypy3.spec
index e7f3045..0ab7125 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -12,9 +12,6 @@ Summary: Python 3 implementation with a Just-In-Time compiler
License: MIT and Python and UCD
URL: http://pypy.org/
-# ppc64: Broken on F29+ https://bugzilla.redhat.com/show_bug.cgi?id=1619601
-ExcludeArch: %{power64}
-
# High-level configuration of the build:
# Whether to use RPM build wheels from the python-{pip,setuptools}-wheel package
@@ -870,6 +867,7 @@ CheckPyPy %{name}-stackless
* Mon Oct 14 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.2.0-1
- Update to 7.2.0 (#1757707)
- Enable aarch64 (without JIT)
+- Enable power64 (with JIT)
* Fri Jul 26 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.1.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
commit f27d32f53000b43d7e821e764b9b8a073e0c8e58
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Oct 15 02:03:21 2019 +0200
Enable aarch64 without JIT
See https://bitbucket.org/pypy/pypy/issues/3086
diff --git a/pypy3.spec b/pypy3.spec
index cf46f81..e7f3045 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -12,9 +12,8 @@ Summary: Python 3 implementation with a Just-In-Time compiler
License: MIT and Python and UCD
URL: http://pypy.org/
-# aarch64: Not available yet
# ppc64: Broken on F29+ https://bugzilla.redhat.com/show_bug.cgi?id=1619601
-ExcludeArch: aarch64 %{power64}
+ExcludeArch: %{power64}
# High-level configuration of the build:
@@ -99,6 +98,7 @@ ExcludeArch: aarch64 %{power64}
# it on the other archs. The resulting binary will typically be slower than
# CPython for the latter case.
+# aarch64: https://bitbucket.org/pypy/pypy/issues/3086
%ifarch %{ix86} x86_64 %{arm} %{power64} s390x
%global with_jit 1
%else
@@ -869,6 +869,7 @@ CheckPyPy %{name}-stackless
%changelog
* Mon Oct 14 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.2.0-1
- Update to 7.2.0 (#1757707)
+- Enable aarch64 (without JIT)
* Fri Jul 26 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.1.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
commit 2f53e9f20a92cd7efc8798ba5d6766812eaea195
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon Oct 14 20:40:57 2019 +0200
Update to 7.2.0
diff --git a/.gitignore b/.gitignore
index 910808c..4b53676 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,4 @@
/pypy3-v6.0.0-src.tar.bz2
/pypy3.5-v7.0.0-src.tar.bz2
/pypy3.6-v7.1.1-src.tar.bz2
+/pypy3.6-v7.2.0-src.tar.bz2
diff --git a/011-no-faulthandler.patch b/011-no-faulthandler.patch
index 9d7165d..e093956 100644
--- a/011-no-faulthandler.patch
+++ b/011-no-faulthandler.patch
@@ -5,18 +5,18 @@ Date: Wed Mar 29 04:31:55 2017 +0200
011-no-faulthandler.patch
diff --git a/lib-python/3/test/support/__init__.py b/lib-python/3/test/support/__init__.py
-index 5d7f308..4424637 100644
+index faa1ba7..2edadc9 100644
--- a/lib-python/3/test/support/__init__.py
+++ b/lib-python/3/test/support/__init__.py
-@@ -6,7 +6,6 @@ if __name__ != 'test.support':
- import collections.abc
+@@ -7,7 +7,6 @@ import collections.abc
import contextlib
+ import datetime
import errno
-import faulthandler
import fnmatch
import functools
import gc
-@@ -65,6 +64,11 @@ try:
+@@ -70,6 +69,11 @@ try:
except ImportError:
resource = None
@@ -28,7 +28,7 @@ index 5d7f308..4424637 100644
__all__ = [
# globals
"PIPE_MAX_SIZE", "verbose", "max_memuse", "use_resources", "failfast",
-@@ -2060,7 +2064,8 @@ def start_threads(threads, unlock=None):
+@@ -2231,7 +2235,8 @@ def start_threads(threads, unlock=None):
finally:
started = [t for t in started if t.isAlive()]
if started:
diff --git a/189-use-rpm-wheels.patch b/189-use-rpm-wheels.patch
index eb8b10e..4a62d57 100644
--- a/189-use-rpm-wheels.patch
+++ b/189-use-rpm-wheels.patch
@@ -16,9 +16,9 @@ index 9f5d151..8b81155 100644
+_WHEEL_DIR = "/usr/share/python-wheels/"
--_SETUPTOOLS_VERSION = "28.8.0"
+-_SETUPTOOLS_VERSION = "40.6.2"
--_PIP_VERSION = "9.0.1"
+-_PIP_VERSION = "18.1"
+def _get_most_recent_wheel_version(pkg):
+ prefix = os.path.join(_WHEEL_DIR, "{}-".format(pkg))
+ suffix = "-py2.py3-none-any.whl"
@@ -33,22 +33,6 @@ index 9f5d151..8b81155 100644
_PROJECTS = [
("setuptools", _SETUPTOOLS_VERSION),
-@@ -24,8 +35,13 @@ def _run_pip(args, additional_paths=None):
- sys.path = additional_paths + sys.path
-
- # Install the bundled software
-- import pip
-- pip.main(args)
-+ try:
-+ # pip 10
-+ from pip._internal import main
-+ except ImportError:
-+ # pip 9
-+ from pip import main
-+ main(args)
-
-
- def version():
@@ -79,12 +95,9 @@ def bootstrap(*, root=None, upgrade=False, user=False,
additional_paths = []
for project, version in _PROJECTS:
diff --git a/pypy3.spec b/pypy3.spec
index 225a1f3..cf46f81 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,8 +1,8 @@
-%global basever 7.1
+%global basever 7.2
Name: pypy3
-Version: %{basever}.1
+Version: %{basever}.0
%global pyversion 3.6
-Release: 2%{?dist}
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -867,6 +867,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Mon Oct 14 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.2.0-1
+- Update to 7.2.0 (#1757707)
+
* Fri Jul 26 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.1.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
diff --git a/sources b/sources
index aa4e777..25bbbb3 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3.6-v7.1.1-src.tar.bz2) = 17e78f9c7080d597a6283d8e8247d1ca78f09a14ff221db8c3d90d255b5befc73102b317ca34a80979e544d5ee72f3e5e649f89d185a085f4cc15012da4d0473
+SHA512 (pypy3.6-v7.2.0-src.tar.bz2) = bcbb53062a473d504bcc082cf6286f6169c83d1f38d22c4d7c4e46ddc32bca9d91e71194637e6650db5bec02b29fe262b22fe236d627b6bc3e6e0c59c66c07cc
commit 707f9490c0c9ae2b3cac2b0c6e9503888c5efad0
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Fri Jul 26 11:47:24 2019 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index b781dfb..225a1f3 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.6
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -867,6 +867,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri Jul 26 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 7.1.1-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
+
* Fri May 24 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.1.1-1
- Update to 7.1.1 (#1689198)
- pypy3 is now Python 3.6
commit 7fc9514b60f515a33dc339d19b94a21dd9943232
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Jul 12 14:48:12 2019 +0200
Keep the LICENSE file in lib/pythonX.Y dir
Virtualenv tries to copy it.
See https://github.com/pypa/virtualenv/issues/1352
Virtualenv ~16.6 warns:
No LICENSE.txt / LICENSE found in source
Technically, it is probably possible to install the package without
%license files, but that would simply resort to the previous noncritical
behavior.
This fix is not critical and hence it doesn't bump release, for easier
backporting to all our Python packages.
diff --git a/pypy3.spec b/pypy3.spec
index 1f45c89..b781dfb 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -688,7 +688,6 @@ install -m0644 -p -D -t %{buildroot}/%{_rpmconfigdir}/macros.d %{SOURCE2}
# Remove files we don't want:
rm -f %{buildroot}%{_libdir}/%{name}-%{basever}.tar.bz2 \
- %{buildroot}%{pypyprefix}/LICENSE \
%{buildroot}%{pypyprefix}/README.rst
# wtf? This is probably masking some bigger problem, but let's do this for now
@@ -828,18 +827,19 @@ CheckPyPy %{name}-stackless
%endif # run_selftests
# Because there's a bunch of binary subpackages and creating
-# /usr/share/licenses/pypy3-this and /usr/share/licenses/pypy3-that
+# /usr/share/doc/pypy3-this and /usr/share/doc/pypy3-that
# is just confusing for the user.
%global _docdir_fmt %{name}
%files libs
-%license LICENSE
%doc README.rst
%dir %{pypyprefix}
%dir %{pypyprefix}/lib-python
+%license %{pypyprefix}/LICENSE
%{pypyprefix}/lib-python/%{pylibver}/
%{pypyprefix}/lib_pypy/
+%license %{pypyprefix}/lib_pypy/*/LICENSE
%{pypyprefix}/site-packages/
%if %{with_emacs}
%{_emacs_sitelispdir}/pypy3trace-mode.el
@@ -847,7 +847,6 @@ CheckPyPy %{name}-stackless
%endif
%files
-%license LICENSE
%doc README.rst
%{_bindir}/pypy3
%{_bindir}/pypy%{pyversion}
@@ -862,7 +861,6 @@ CheckPyPy %{name}-stackless
%if 0%{with_stackless}
%files stackless
-%license LICENSE
%doc README.rst
%{_bindir}/pypy-stackless
%endif
commit cac755a96a589f8c15a50ed6ac9d121e336de51c
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri May 24 10:29:13 2019 +0200
Update to 7.1.1, pypy3 is now Python 3.6
https://bugzilla.redhat.com/show_bug.cgi?id=1689198
diff --git a/.gitignore b/.gitignore
index 1361620..910808c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@
/pypy3-v5.10.1-src.tar.bz2
/pypy3-v6.0.0-src.tar.bz2
/pypy3.5-v7.0.0-src.tar.bz2
+/pypy3.6-v7.1.1-src.tar.bz2
diff --git a/011-no-faulthandler.patch b/011-no-faulthandler.patch
index f96d232..9d7165d 100644
--- a/011-no-faulthandler.patch
+++ b/011-no-faulthandler.patch
@@ -4,60 +4,6 @@ Date: Wed Mar 29 04:31:55 2017 +0200
011-no-faulthandler.patch
-diff --git a/lib-python/3/test/regrtest.py b/lib-python/3/test/regrtest.py
-index c1d85f6..3d3072c 100755
---- a/lib-python/3/test/regrtest.py
-+++ b/lib-python/3/test/regrtest.py
-@@ -124,7 +124,6 @@ import importlib
-
- import argparse
- import builtins
--import faulthandler
- import io
- import json
- import locale
-@@ -152,7 +151,10 @@ try:
- import _multiprocessing, multiprocessing.process
- except ImportError:
- multiprocessing = None
--
-+try:
-+ import faulthandler
-+except ImportError:
-+ faulthandler = None
-
- # Some times __path__ and __file__ are not absolute (e.g. while running from
- # Lib/) and, if we change the CWD to run the tests in a temporary dir, some
-@@ -486,17 +488,18 @@ def main(tests=None, **kwargs):
- directly to set the values that would normally be set by flags
- on the command line.
- """
-- # Display the Python traceback on fatal errors (e.g. segfault)
-- faulthandler.enable(all_threads=True)
--
-- # Display the Python traceback on SIGALRM or SIGUSR1 signal
-- signals = []
-- if hasattr(signal, 'SIGALRM'):
-- signals.append(signal.SIGALRM)
-- if hasattr(signal, 'SIGUSR1'):
-- signals.append(signal.SIGUSR1)
-- for signum in signals:
-- faulthandler.register(signum, chain=True)
-+ if faulthandler:
-+ # Display the Python traceback on fatal errors (e.g. segfault)
-+ faulthandler.enable(all_threads=True)
-+
-+ # Display the Python traceback on SIGALRM or SIGUSR1 signal
-+ signals = []
-+ if hasattr(signal, 'SIGALRM'):
-+ signals.append(signal.SIGALRM)
-+ if hasattr(signal, 'SIGUSR1'):
-+ signals.append(signal.SIGUSR1)
-+ for signum in signals:
-+ faulthandler.register(signum, chain=True)
-
- replace_stdout()
-
diff --git a/lib-python/3/test/support/__init__.py b/lib-python/3/test/support/__init__.py
index 5d7f308..4424637 100644
--- a/lib-python/3/test/support/__init__.py
diff --git a/189-use-rpm-wheels.patch b/189-use-rpm-wheels.patch
index 2caefe2..eb8b10e 100644
--- a/189-use-rpm-wheels.patch
+++ b/189-use-rpm-wheels.patch
@@ -1,5 +1,5 @@
diff --git a/lib-python/3/ensurepip/__init__.py b/lib-python/3/ensurepip/__init__.py
-index 25c5567..6d8d09c 100644
+index 9f5d151..8b81155 100644
--- a/lib-python/3/ensurepip/__init__.py
+++ b/lib-python/3/ensurepip/__init__.py
@@ -1,16 +1,27 @@
@@ -31,9 +31,9 @@ index 25c5567..6d8d09c 100644
+
+_PIP_VERSION = _get_most_recent_wheel_version("pip")
- # pip currently requires ssl support, so we try to provide a nicer
- # error message when that is missing (http://bugs.python.org/issue19744)
-@@ -37,8 +48,13 @@ def _run_pip(args, additional_paths=None):
+ _PROJECTS = [
+ ("setuptools", _SETUPTOOLS_VERSION),
+@@ -24,8 +35,13 @@ def _run_pip(args, additional_paths=None):
sys.path = additional_paths + sys.path
# Install the bundled software
@@ -49,7 +49,7 @@ index 25c5567..6d8d09c 100644
def version():
-@@ -93,12 +109,9 @@ def bootstrap(*, root=None, upgrade=False, user=False,
+@@ -79,12 +95,9 @@ def bootstrap(*, root=None, upgrade=False, user=False,
additional_paths = []
for project, version in _PROJECTS:
wheel_name = "{}-{}-py2.py3-none-any.whl".format(project, version)
diff --git a/pypy3.spec b/pypy3.spec
index 201a8ac..1f45c89 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,8 +1,8 @@
-%global basever 7.0
+%global basever 7.1
Name: pypy3
-Version: %{basever}.0
-%global pyversion 3.5
-Release: 2%{?dist}
+Version: %{basever}.1
+%global pyversion 3.6
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -134,8 +134,7 @@ ExcludeArch: aarch64 %{power64}
# Turn off the brp-python-bytecompile postprocessing script
# We manually invoke it later on, using the freshly built pypy binary
-%global __os_install_post \
- %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
+%global __brp_python_bytecompile %{nil}
# Source and patches:
Source0: https://bitbucket.org/pypy/pypy/downloads/pypy%{pyversion}-v%{version}-sr...
@@ -321,13 +320,6 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%prep
%autosetup -n pypy%{pyversion}-v%{version}-src -p1 -S git
-# While this is 7.0.0, it has 7.1.0-alpha0 listed inside
-# We sed it out to avoid user confusion
-sed -i 's/7\.1\.0/7.0.0/' pypy/doc/conf.py
-sed -i 's/7\.1\.0-alpha0/7.0.0/g' pypy/module/cpyext/include/patchlevel.h pypy/doc/how-to-release.rst
-sed -i 's/0x07010000/0x07000000/' pypy/module/cpyext/include/patchlevel.h
-sed -i 's/7, 1, 0, "alpha"/7, 0, 0, "final"/' pypy/module/sys/version.py
-
%if %{with rpmwheels}
%apply_patch -m %(basename %{SOURCE189}) %{SOURCE189}
@@ -737,7 +729,7 @@ CheckPyPy() {
# Use regrtest to explicitly list all tests:
( ./$ExeName -c \
- "from test.regrtest import findtests; print('\n'.join(findtests()))"
+ "from test.libregrtest.runtest import findtests; print('\n'.join(findtests()))"
) > testnames.txt
# Skip some tests:
@@ -877,6 +869,10 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri May 24 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.1.1-1
+- Update to 7.1.1 (#1689198)
+- pypy3 is now Python 3.6
+
* Thu May 16 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.0.0-2
- Show the version as 7.0.0
diff --git a/sources b/sources
index 294934f..aa4e777 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3.5-v7.0.0-src.tar.bz2) = 3facac26e06e254cbf244841824b35ec211859123f6ba9f095dc980292c10d9cf1d11de62cc6372cf77e92ee1cd2358bbd794b3ff25cb7172e1b21c02c8ce6c2
+SHA512 (pypy3.6-v7.1.1-src.tar.bz2) = 17e78f9c7080d597a6283d8e8247d1ca78f09a14ff221db8c3d90d255b5befc73102b317ca34a80979e544d5ee72f3e5e649f89d185a085f4cc15012da4d0473
diff --git a/tests/tests.yml b/tests/tests.yml
index ce6f13f..c3a91f3 100644
--- a/tests/tests.yml
+++ b/tests/tests.yml
@@ -10,7 +10,7 @@
tests:
- smoke:
dir: python/smoke
- run: PYTHON=pypy3 VERSION=3.5 ./venv.sh
+ run: PYTHON=pypy3 VERSION=3.6 ./venv.sh
required_packages:
- gcc
- python3-tox
commit 3e4b7200d351e351effedb134c8a2adaab71201e
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri May 17 00:56:47 2019 +0200
Show the version as 7.0.0
While this is 7.0.0, it has 7.1.0-alpha0 listed inside,
we sed it out to avoid user confusion.
diff --git a/pypy3.spec b/pypy3.spec
index 6c452df..201a8ac 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.5
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -321,6 +321,14 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%prep
%autosetup -n pypy%{pyversion}-v%{version}-src -p1 -S git
+# While this is 7.0.0, it has 7.1.0-alpha0 listed inside
+# We sed it out to avoid user confusion
+sed -i 's/7\.1\.0/7.0.0/' pypy/doc/conf.py
+sed -i 's/7\.1\.0-alpha0/7.0.0/g' pypy/module/cpyext/include/patchlevel.h pypy/doc/how-to-release.rst
+sed -i 's/0x07010000/0x07000000/' pypy/module/cpyext/include/patchlevel.h
+sed -i 's/7, 1, 0, "alpha"/7, 0, 0, "final"/' pypy/module/sys/version.py
+
+
%if %{with rpmwheels}
%apply_patch -m %(basename %{SOURCE189}) %{SOURCE189}
rm lib-python/3/ensurepip/_bundled/*.whl
@@ -869,6 +877,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Thu May 16 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.0.0-2
+- Show the version as 7.0.0
+
* Thu Feb 28 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.0.0-1
- Update to 7.0.0 (#1673127)
commit 124d766f70858e217aac1b9c297c4c313ccf95df
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Mar 1 00:06:59 2019 +0100
Update to 7.0.0 (#1673127)
diff --git a/.gitignore b/.gitignore
index 2025c8c..1361620 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@
/pypy3-v5.10.0-src.tar.bz2
/pypy3-v5.10.1-src.tar.bz2
/pypy3-v6.0.0-src.tar.bz2
+/pypy3.5-v7.0.0-src.tar.bz2
diff --git a/009-add-libxcrypt-support.patch b/009-add-libxcrypt-support.patch
index ec17216..f3c9a7d 100644
--- a/009-add-libxcrypt-support.patch
+++ b/009-add-libxcrypt-support.patch
@@ -1,13 +1,13 @@
diff --git a/pypy/module/crypt/interp_crypt.py b/pypy/module/crypt/interp_crypt.py
-index d227b6a..da969e6 100644
+index bd13f6f..1022c9e 100644
--- a/pypy/module/crypt/interp_crypt.py
+++ b/pypy/module/crypt/interp_crypt.py
-@@ -6,7 +6,7 @@ import sys
- if sys.platform.startswith('darwin'):
- eci = ExternalCompilationInfo()
+@@ -9,7 +9,7 @@ elif sys.platform.startswith('linux'):
+ # crypt() is defined only in crypt.h on some Linux variants (eg. Fedora 28)
+ eci = ExternalCompilationInfo(libraries=['crypt'], includes=["crypt.h"])
else:
- eci = ExternalCompilationInfo(libraries=['crypt'])
+ eci = ExternalCompilationInfo(libraries=['crypt'], includes=['crypt.h'])
c_crypt = rffi.llexternal('crypt', [rffi.CCHARP, rffi.CCHARP], rffi.CCHARP,
compilation_info=eci, releasegil=False)
-
+
diff --git a/302-fix-multiprocessing-regression-on-newer-glibcs.patch b/302-fix-multiprocessing-regression-on-newer-glibcs.patch
deleted file mode 100644
index db723a8..0000000
--- a/302-fix-multiprocessing-regression-on-newer-glibcs.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-# HG changeset patch
-# User Miro Hrončok <miro(a)hroncok.cz>
-# Date 1524655710 -7200
-# Wed Apr 25 13:28:30 2018 +0200
-# Branch issue33329
-# Node ID 6501fdc3a80fa2bc3b8c70bfaf94a31c3b3432c0
-# Parent a07f07034d281bec8c776f9e1ee7c5b9aea74007
-Fix multiprocessing regression on newer glibcs
-
-Starting with glibc 2.27.9000-xxx, sigaddset() can return EINVAL for some
-reserved signal numbers between 1 and NSIG. The `range(1, NSIG)` idiom
-is commonly used to select all signals for blocking with `pthread_sigmask`.
-So we ignore the sigaddset() return value until we expose sigfillset()
-to provide a better idiom.
-
-Co-authored-by: Antoine Pitrou <antoine(a)python.org>
-
-diff -r a07f07034d28 -r 6501fdc3a80f pypy/module/signal/interp_signal.py
---- a/pypy/module/signal/interp_signal.py Tue Apr 24 10:00:00 2018 +0200
-+++ b/pypy/module/signal/interp_signal.py Wed Apr 25 13:28:30 2018 +0200
-@@ -379,10 +379,10 @@
- for w_signum in space.unpackiterable(self.w_signals):
- signum = space.int_w(w_signum)
- check_signum_in_range(space, signum)
-- err = c_sigaddset(self.mask, signum)
-- if err:
-- raise oefmt(space.w_ValueError,
-- "signal number %d out of range", signum)
-+ # bpo-33329: ignore c_sigaddset() return value as it can fail
-+ # for some reserved signals, but we want the `range(1, NSIG)`
-+ # idiom to allow selecting all valid signals.
-+ c_sigaddset(self.mask, signum)
- return self.mask
-
- def __exit__(self, *args):
diff --git a/pypy3.spec b/pypy3.spec
index 00494e3..6c452df 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,8 +1,8 @@
-%global basever 6.0
+%global basever 7.0
Name: pypy3
Version: %{basever}.0
%global pyversion 3.5
-Release: 5%{?dist}
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -138,7 +138,7 @@ ExcludeArch: aarch64 %{power64}
%(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/pypy3-v%{version}-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy%{pyversion}-v%{version}-sr...
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -174,12 +174,6 @@ Patch11: 011-no-faulthandler.patch
# We conditionally apply this, but we use autosetup, so we use Source here
Source189: 189-use-rpm-wheels.patch
-# Fix multiprocessing regression on newer glibcs
-# See: https://bugzilla.redhat.com/show_bug.cgi?id=1569933
-# and: https://bugs.python.org/issue33329
-# and: https://bitbucket.org/pypy/pypy/pull-requests/607
-Patch302: 302-fix-multiprocessing-regression-on-newer-glibcs.patch
-
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
@@ -224,18 +218,13 @@ BuildRequires: zlib-devel
BuildRequires: bzip2-devel
BuildRequires: ncurses-devel
BuildRequires: expat-devel
+BuildRequires: openssl-devel
BuildRequires: gdbm-devel
BuildRequires: xz-devel
%ifnarch s390
BuildRequires: valgrind-devel
%endif
-%if 0%{?fedora} >= 26
-BuildRequires: compat-openssl10-devel
-%else
-BuildRequires: openssl-devel
-%endif
-
%if %{run_selftests}
# Used by the selftests, though not by the build:
BuildRequires: gc-devel
@@ -266,6 +255,8 @@ BuildRequires: python-pip-wheel
# Metadata for the core package (the JIT build):
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
Provides: %{name}(abi) = %{basever}
+Provides: pypy%{pyversion} = %{version}-%{release}
+Provides: pypy%{pyversion}%{?_isa} = %{version}-%{release}
%description
PyPy's implementation of Python 3, featuring a Just-In-Time compiler on some CPU
@@ -289,6 +280,9 @@ Summary: Run-time libraries used by PyPy implementations of Python 3
Requires: emacs-filesystem >= %{_emacs_version}
%endif
+Provides: pypy%{pyversion}-libs = %{version}-%{release}
+Provides: pypy%{pyversion}-libs%{?_isa} = %{version}-%{release}
+
%if %{with rpmwheels}
Requires: python-setuptools-wheel
Requires: python-pip-wheel
@@ -305,6 +299,9 @@ Libraries required by the various PyPy implementations of Python 3.
Summary: Development tools for working with PyPy3
Requires: pypy3%{?_isa} = %{version}-%{release}
+Provides: pypy%{pyversion}-devel = %{version}-%{release}
+Provides: pypy%{pyversion}-devel%{?_isa} = %{version}-%{release}
+
%description devel
Header files for building C extension modules against PyPy3
@@ -313,12 +310,16 @@ Header files for building C extension modules against PyPy3
%package stackless
Summary: Stackless Python interpreter built using PyPy3
Requires: pypy3-libs%{?_isa} = %{version}-%{release}
+
+Provides: pypy%{pyversion}-stackless = %{version}-%{release}
+Provides: pypy%{pyversion}-stackless%{?_isa} = %{version}-%{release}
+
%description stackless
Build of PyPy3 with support for micro-threads for massive concurrency
%endif
%prep
-%autosetup -n pypy3-v%{version}-src -p1 -S git
+%autosetup -n pypy%{pyversion}-v%{version}-src -p1 -S git
%if %{with rpmwheels}
%apply_patch -m %(basename %{SOURCE189}) %{SOURCE189}
@@ -868,6 +869,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Thu Feb 28 2019 Miro Hrončok <mhroncok(a)redhat.com> - 7.0.0-1
+- Update to 7.0.0 (#1673127)
+
* Sat Feb 02 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 6.0.0-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
diff --git a/sources b/sources
index 2a76651..294934f 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3-v6.0.0-src.tar.bz2) = ea406c4dd1837a6ab13026de01330790f3c18f6e2bfb83e8553e52acf78b43dfb559ce75c2d91395055c771db359356c8183ed950da6f01a21bf09128935af5e
+SHA512 (pypy3.5-v7.0.0-src.tar.bz2) = 3facac26e06e254cbf244841824b35ec211859123f6ba9f095dc980292c10d9cf1d11de62cc6372cf77e92ee1cd2358bbd794b3ff25cb7172e1b21c02c8ce6c2
commit 9d9b0859329520bcb7159023c03f12d2807d39da
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Sat Feb 2 05:16:48 2019 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index 5f5203b..00494e3 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.5
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -868,6 +868,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Sat Feb 02 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 6.0.0-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
+
* Mon Jan 14 2019 Björn Esser <besser82(a)fedoraproject.org> - 6.0.0-4
- Rebuilt for libcrypt.so.2 (#1666033)
commit f8cbccf6e2a244ea2a453c8913e7e1afa23819e8
Author: Björn Esser <besser82(a)fedoraproject.org>
Date: Mon Jan 14 19:14:13 2019 +0100
Rebuilt for libcrypt.so.2 (#1666033)
diff --git a/pypy3.spec b/pypy3.spec
index 7fc7257..5f5203b 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.5
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -868,6 +868,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Mon Jan 14 2019 Björn Esser <besser82(a)fedoraproject.org> - 6.0.0-4
+- Rebuilt for libcrypt.so.2 (#1666033)
+
* Tue Aug 21 2018 Miro Hrončok <mhroncok(a)redhat.com> - 6.0.0-3
- Use RPM packaged wheels
commit e0becb7cbf6a7549fab9d9a40299888ceae794fe
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Jul 20 12:37:22 2018 +0200
Enable basic venv smoke test in the CI
diff --git a/tests/tests.yml b/tests/tests.yml
new file mode 100644
index 0000000..ce6f13f
--- /dev/null
+++ b/tests/tests.yml
@@ -0,0 +1,17 @@
+---
+- hosts: localhost
+ roles:
+ - role: standard-test-basic
+ tags:
+ - classic
+ repositories:
+ - repo: "https://src.fedoraproject.org/tests/python.git"
+ dest: "python"
+ tests:
+ - smoke:
+ dir: python/smoke
+ run: PYTHON=pypy3 VERSION=3.5 ./venv.sh
+ required_packages:
+ - gcc
+ - python3-tox
+ - pypy3-devel
commit 6f8b7baed90a92dcbd3bed71bf98fa1c073bec3a
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Aug 21 12:10:46 2018 +0200
Use RPM packaged wheels
diff --git a/189-use-rpm-wheels.patch b/189-use-rpm-wheels.patch
new file mode 100644
index 0000000..2caefe2
--- /dev/null
+++ b/189-use-rpm-wheels.patch
@@ -0,0 +1,67 @@
+diff --git a/lib-python/3/ensurepip/__init__.py b/lib-python/3/ensurepip/__init__.py
+index 25c5567..6d8d09c 100644
+--- a/lib-python/3/ensurepip/__init__.py
++++ b/lib-python/3/ensurepip/__init__.py
+@@ -1,16 +1,27 @@
++import distutils.version
++import glob
+ import os
+ import os.path
+-import pkgutil
+ import sys
+ import tempfile
+
+
+ __all__ = ["version", "bootstrap"]
+
++_WHEEL_DIR = "/usr/share/python-wheels/"
+
+-_SETUPTOOLS_VERSION = "28.8.0"
+
+-_PIP_VERSION = "9.0.1"
++def _get_most_recent_wheel_version(pkg):
++ prefix = os.path.join(_WHEEL_DIR, "{}-".format(pkg))
++ suffix = "-py2.py3-none-any.whl"
++ pattern = "{}*{}".format(prefix, suffix)
++ versions = (p[len(prefix):-len(suffix)] for p in glob.glob(pattern))
++ return str(max(versions, key=distutils.version.LooseVersion))
++
++
++_SETUPTOOLS_VERSION = _get_most_recent_wheel_version("setuptools")
++
++_PIP_VERSION = _get_most_recent_wheel_version("pip")
+
+ # pip currently requires ssl support, so we try to provide a nicer
+ # error message when that is missing (http://bugs.python.org/issue19744)
+@@ -37,8 +48,13 @@ def _run_pip(args, additional_paths=None):
+ sys.path = additional_paths + sys.path
+
+ # Install the bundled software
+- import pip
+- pip.main(args)
++ try:
++ # pip 10
++ from pip._internal import main
++ except ImportError:
++ # pip 9
++ from pip import main
++ main(args)
+
+
+ def version():
+@@ -93,12 +109,9 @@ def bootstrap(*, root=None, upgrade=False, user=False,
+ additional_paths = []
+ for project, version in _PROJECTS:
+ wheel_name = "{}-{}-py2.py3-none-any.whl".format(project, version)
+- whl = pkgutil.get_data(
+- "ensurepip",
+- "_bundled/{}".format(wheel_name),
+- )
+- with open(os.path.join(tmpdir, wheel_name), "wb") as fp:
+- fp.write(whl)
++ with open(os.path.join(_WHEEL_DIR, wheel_name), "rb") as sfp:
++ with open(os.path.join(tmpdir, wheel_name), "wb") as fp:
++ fp.write(sfp.read())
+
+ additional_paths.append(os.path.join(tmpdir, wheel_name))
+
diff --git a/pypy3.spec b/pypy3.spec
index 7193654..7fc7257 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.5
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -18,6 +18,10 @@ ExcludeArch: aarch64 %{power64}
# High-level configuration of the build:
+# Whether to use RPM build wheels from the python-{pip,setuptools}-wheel package
+# Uses upstream bundled prebuilt wheels otherwise
+%bcond_without rpmwheels
+
# PyPy consists of an implementation of an interpreter (with JIT compilation)
# for the full Python language written in a high-level language, leaving many
# of the implementation details as "pluggable" policies.
@@ -165,6 +169,11 @@ Patch9: 009-add-libxcrypt-support.patch
# It seems ppc64 has no faulthandler
Patch11: 011-no-faulthandler.patch
+# Instead of bundled wheels, use our RPM packaged wheels from
+# /usr/share/python-wheels
+# We conditionally apply this, but we use autosetup, so we use Source here
+Source189: 189-use-rpm-wheels.patch
+
# Fix multiprocessing regression on newer glibcs
# See: https://bugzilla.redhat.com/show_bug.cgi?id=1569933
# and: https://bugs.python.org/issue33329
@@ -249,6 +258,11 @@ BuildRequires: emacs
# For %%autosetup -S git
BuildRequires: %{_bindir}/git
+%if %{with rpmwheels}
+BuildRequires: python-setuptools-wheel
+BuildRequires: python-pip-wheel
+%endif
+
# Metadata for the core package (the JIT build):
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
Provides: %{name}(abi) = %{basever}
@@ -275,6 +289,14 @@ Summary: Run-time libraries used by PyPy implementations of Python 3
Requires: emacs-filesystem >= %{_emacs_version}
%endif
+%if %{with rpmwheels}
+Requires: python-setuptools-wheel
+Requires: python-pip-wheel
+%else
+Provides: bundled(python3-pip) = 9.0.1
+Provides: bundled(python3-setuptools) = 28.8.0
+%endif
+
%description libs
Libraries required by the various PyPy implementations of Python 3.
@@ -298,6 +320,17 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%prep
%autosetup -n pypy3-v%{version}-src -p1 -S git
+%if %{with rpmwheels}
+%apply_patch -m %(basename %{SOURCE189}) %{SOURCE189}
+rm lib-python/3/ensurepip/_bundled/*.whl
+rmdir lib-python/3/ensurepip/_bundled
+%else
+# we don't want to ship the old ones anyway
+rm lib-python/3/ensurepip/_bundled/pip-8.1.2-*
+rm lib-python/3/ensurepip/_bundled/setuptools-21.2.1-*
+%endif
+
+
# Replace /usr/local/bin/python or /usr/bin/env python shebangs with /usr/bin/python2 or pypy2:
find -name "*.py" -exec \
sed \
@@ -835,6 +868,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Tue Aug 21 2018 Miro Hrončok <mhroncok(a)redhat.com> - 6.0.0-3
+- Use RPM packaged wheels
+
* Fri Jul 13 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 6.0.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
commit 9d0ffbc9d5d861af1635230e55a86c7bc77438b7
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Aug 21 11:48:21 2018 +0200
Poor ppc64(le), it just doesn't build :(
diff --git a/pypy3.spec b/pypy3.spec
index ccbd579..7193654 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -12,8 +12,9 @@ Summary: Python 3 implementation with a Just-In-Time compiler
License: MIT and Python and UCD
URL: http://pypy.org/
-# Not available yet
-ExcludeArch: aarch64
+# aarch64: Not available yet
+# ppc64: Broken on F29+ https://bugzilla.redhat.com/show_bug.cgi?id=1619601
+ExcludeArch: aarch64 %{power64}
# High-level configuration of the build:
commit e47185bc51db6ff0d04546479b77bdfe84b586c2
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sun Jul 15 16:25:45 2018 +0200
Drop RHEL5 conditional
diff --git a/pypy3.spec b/pypy3.spec
index 2e1edb6..ccbd579 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -104,7 +104,7 @@ ExcludeArch: aarch64
%global with_stackless 0
# Should we build the emacs JIT-viewing mode?
-%if 0%{?rhel} == 5 || 0%{?rhel} == 6
+%if 0%{?rhel} == 6
%global with_emacs 0
%else
%global with_emacs 1
commit 3f667ce3366f6971e86aa07783bbc2a370043c5a
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sun Jul 15 16:23:25 2018 +0200
BR gcc
diff --git a/pypy3.spec b/pypy3.spec
index fb1ac73..2e1edb6 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -202,6 +202,8 @@ BuildRequires: python2-pycparser
%endif
+BuildRequires: gcc
+
BuildRequires: libffi-devel
BuildRequires: tcl-devel
BuildRequires: tk-devel
commit f7ac519b1ef348af1d5b57d089f2d7b2109388f6
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Fri Jul 13 23:12:32 2018 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index b1add4a..fb1ac73 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.0
%global pyversion 3.5
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -832,6 +832,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri Jul 13 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 6.0.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
+
* Wed Apr 25 2018 Miro Hrončok <mhroncok(a)redhat.com> - 6.0.0-1
- Fix failing taskotron check
- New release 6.0.0 (#1571489)
commit 18c888e5f5972bd6391a59f77794b317c359cec1
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Apr 25 14:20:20 2018 +0200
New release 6.0.0 (#1571489)
Fix multiprocessing regression on newer glibcs (#1569933)
diff --git a/.gitignore b/.gitignore
index 67b6ee0..2025c8c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@
/pypy3-v5.9.0-src.tar.bz2
/pypy3-v5.10.0-src.tar.bz2
/pypy3-v5.10.1-src.tar.bz2
+/pypy3-v6.0.0-src.tar.bz2
diff --git a/302-fix-multiprocessing-regression-on-newer-glibcs.patch b/302-fix-multiprocessing-regression-on-newer-glibcs.patch
new file mode 100644
index 0000000..db723a8
--- /dev/null
+++ b/302-fix-multiprocessing-regression-on-newer-glibcs.patch
@@ -0,0 +1,35 @@
+# HG changeset patch
+# User Miro Hrončok <miro(a)hroncok.cz>
+# Date 1524655710 -7200
+# Wed Apr 25 13:28:30 2018 +0200
+# Branch issue33329
+# Node ID 6501fdc3a80fa2bc3b8c70bfaf94a31c3b3432c0
+# Parent a07f07034d281bec8c776f9e1ee7c5b9aea74007
+Fix multiprocessing regression on newer glibcs
+
+Starting with glibc 2.27.9000-xxx, sigaddset() can return EINVAL for some
+reserved signal numbers between 1 and NSIG. The `range(1, NSIG)` idiom
+is commonly used to select all signals for blocking with `pthread_sigmask`.
+So we ignore the sigaddset() return value until we expose sigfillset()
+to provide a better idiom.
+
+Co-authored-by: Antoine Pitrou <antoine(a)python.org>
+
+diff -r a07f07034d28 -r 6501fdc3a80f pypy/module/signal/interp_signal.py
+--- a/pypy/module/signal/interp_signal.py Tue Apr 24 10:00:00 2018 +0200
++++ b/pypy/module/signal/interp_signal.py Wed Apr 25 13:28:30 2018 +0200
+@@ -379,10 +379,10 @@
+ for w_signum in space.unpackiterable(self.w_signals):
+ signum = space.int_w(w_signum)
+ check_signum_in_range(space, signum)
+- err = c_sigaddset(self.mask, signum)
+- if err:
+- raise oefmt(space.w_ValueError,
+- "signal number %d out of range", signum)
++ # bpo-33329: ignore c_sigaddset() return value as it can fail
++ # for some reserved signals, but we want the `range(1, NSIG)`
++ # idiom to allow selecting all valid signals.
++ c_sigaddset(self.mask, signum)
+ return self.mask
+
+ def __exit__(self, *args):
diff --git a/pypy3.spec b/pypy3.spec
index a14b96d..b1add4a 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,8 +1,8 @@
-%global basever 5.10
+%global basever 6.0
Name: pypy3
-Version: %{basever}.1
+Version: %{basever}.0
%global pyversion 3.5
-Release: 8%{?dist}
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -164,6 +164,12 @@ Patch9: 009-add-libxcrypt-support.patch
# It seems ppc64 has no faulthandler
Patch11: 011-no-faulthandler.patch
+# Fix multiprocessing regression on newer glibcs
+# See: https://bugzilla.redhat.com/show_bug.cgi?id=1569933
+# and: https://bugs.python.org/issue33329
+# and: https://bitbucket.org/pypy/pypy/pull-requests/607
+Patch302: 302-fix-multiprocessing-regression-on-newer-glibcs.patch
+
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
@@ -826,8 +832,10 @@ CheckPyPy %{name}-stackless
%changelog
-* Sat Apr 14 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-8
+* Wed Apr 25 2018 Miro Hrončok <mhroncok(a)redhat.com> - 6.0.0-1
- Fix failing taskotron check
+- New release 6.0.0 (#1571489)
+- Fix multiprocessing regression on newer glibcs (#1569933)
* Wed Apr 11 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-7
- Provide pypy3(abi) = 5.10
diff --git a/sources b/sources
index afb3c83..2a76651 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3-v5.10.1-src.tar.bz2) = 91b0ed25130bdbb46d5e577136b5fe63d5162917dcc2d0b69f5cac2a283ece9d0bfd3c7c8dc61ff391e0550fa1603326f6edeb2df3159d71617fefe6c07439f5
+SHA512 (pypy3-v6.0.0-src.tar.bz2) = ea406c4dd1837a6ab13026de01330790f3c18f6e2bfb83e8553e52acf78b43dfb559ce75c2d91395055c771db359356c8183ed950da6f01a21bf09128935af5e
commit b70eb98951063c00fb114a91f935d8991ca0e927
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sun Apr 15 00:25:48 2018 +0200
Remove Windows bat file
diff --git a/pypy3.spec b/pypy3.spec
index 0aa26f8..a14b96d 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -309,6 +309,9 @@ find lib-python/%{pylibver} lib_pypy -name "*.py" -exec \
"{}" \
\;
+# Not needed on Linux
+rm lib-python/3/idlelib/idle.bat
+
%ifarch %{ix86} x86_64 %{arm}
sed -i -r 's/\$\(LDFLAGSEXTRA\)/& -fuse-ld=gold/' ./rpython/translator/platform/posix.py
%endif
commit 1b41795b2f455df4a5773c050253c26279595ba7
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sat Apr 14 10:55:05 2018 +0200
Fix shebangs (reported mangled by taskotron)
diff --git a/pypy3.spec b/pypy3.spec
index bf093ac..0aa26f8 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.5
-Release: 7%{?dist}
+Release: 8%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -185,14 +185,14 @@ Patch11: 011-no-faulthandler.patch
# pypy3 can only be build with pypy2
BuildRequires: pypy2
# no pypy-pycparser available ATM
-%global bootstrap_python_interp pypy
+%global bootstrap_python_interp pypy2
%else
# pypy3 can only be build with python2
BuildRequires: python2-devel
BuildRequires: python2-pycparser
-%global bootstrap_python_interp python
+%global bootstrap_python_interp python2
%endif
@@ -289,10 +289,10 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%prep
%autosetup -n pypy3-v%{version}-src -p1 -S git
-# Replace /usr/local/bin/python shebangs with /usr/bin/python:
+# Replace /usr/local/bin/python or /usr/bin/env python shebangs with /usr/bin/python2 or pypy2:
find -name "*.py" -exec \
sed \
- -i -e "s|/usr/local/bin/python|/usr/bin/python|" \
+ -i -r -e "s@/usr/(local/)?bin/(env )?python(2|3)?@/usr/bin/%{bootstrap_python_interp}@" \
"{}" \
\;
@@ -303,9 +303,9 @@ for f in rpython/translator/goal/bpnn.py ; do
chmod a-x $f
done
-# Replace all lib-python python shebangs with pypy
-find lib-python/%{pylibver} -name "*.py" -exec \
- sed -r -i '1s|^#!\s*/usr/bin.*python.*|#!/usr/bin/%{name}|' \
+# Replace all lib-python and lib_pypy python shebangs with pypy3 (those will be shipped with pypy3-libs)
+find lib-python/%{pylibver} lib_pypy -name "*.py" -exec \
+ sed -r -i '1s@^#!\s*/usr/bin.*(python|pypy).*(a)#!/usr/bin/%{name}@' \
"{}" \
\;
@@ -823,6 +823,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Sat Apr 14 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-8
+- Fix failing taskotron check
+
* Wed Apr 11 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-7
- Provide pypy3(abi) = 5.10
commit cac18deee0e00c9ee8b4fce8d4507796a1561298
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Thu Apr 12 00:23:12 2018 +0200
Provide pypy3(abi) = 5.10
diff --git a/pypy3.spec b/pypy3.spec
index 196243f..bf093ac 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.5
-Release: 6%{?dist}
+Release: 7%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -241,7 +241,8 @@ BuildRequires: emacs
BuildRequires: %{_bindir}/git
# Metadata for the core package (the JIT build):
-Requires: pypy3-libs%{?_isa} = %{version}-%{release}
+Requires: %{name}-libs%{?_isa} = %{version}-%{release}
+Provides: %{name}(abi) = %{basever}
%description
PyPy's implementation of Python 3, featuring a Just-In-Time compiler on some CPU
@@ -822,6 +823,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed Apr 11 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-7
+- Provide pypy3(abi) = 5.10
+
* Wed Apr 11 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-6
- RPM macros improvements
commit fe844b70bdc354e3d454bb43ed578f3b4898bac7
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Apr 11 12:09:36 2018 +0200
Add macro with pypy version (aka 5.10, not 3.5)
diff --git a/macros.pypy3 b/macros.pypy3
index 796b872..f138a39 100644
--- a/macros.pypy3
+++ b/macros.pypy3
@@ -2,3 +2,4 @@
%pypy3_sitelib %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
%pypy3_sitearch %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")
%pypy3_version %(%{__pypy3} -c "import sys; sys.stdout.write(sys.version[:3])")
+%pypy3_pypy_version %(%{__pypy3} -c "import sys; sys.stdout.write('{}.{}'.format(sys.pypy_version_info.major, sys.pypy_version_info.minor))")
diff --git a/pypy3.spec b/pypy3.spec
index 958f998..196243f 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -2,7 +2,7 @@
Name: pypy3
Version: %{basever}.1
%global pyversion 3.5
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -822,6 +822,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Wed Apr 11 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-6
+- RPM macros improvements
+
* Tue Apr 10 2018 Michal Cyprian <mcyprian(a)redhat.com> - 5.10.1-5
- Remove the rightmost version number from the path
- rhbz#1516885: https://bugzilla.redhat.com/show_bug.cgi?id=1516885
commit df12619f2b234a4f954e7e043fdac5d0f4701d7b
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Apr 11 12:06:37 2018 +0200
Remove %pypy3dir definition, it is useless
diff --git a/macros.pypy3 b/macros.pypy3
index ef1f600..796b872 100644
--- a/macros.pypy3
+++ b/macros.pypy3
@@ -2,4 +2,3 @@
%pypy3_sitelib %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
%pypy3_sitearch %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")
%pypy3_version %(%{__pypy3} -c "import sys; sys.stdout.write(sys.version[:3])")
-%pypy3dir %{_builddir}/pypy3-%{name}-%{version}-%{release}
commit cf5da9288bd0e56d5b0e203cee650cc39f2e3e85
Author: Michal Cyprian <m.cyprian(a)gmail.com>
Date: Wed Apr 11 01:31:31 2018 +0200
Remove the rightmost version number from the path
diff --git a/pypy3.spec b/pypy3.spec
index 22092d4..958f998 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,7 +1,8 @@
+%global basever 5.10
Name: pypy3
-Version: 5.10.1
+Version: %{basever}.1
%global pyversion 3.5
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -119,7 +120,7 @@ ExcludeArch: aarch64
# Easy way to turn off the selftests:
%global run_selftests 1
-%global pypyprefix %{_libdir}/pypy3-%{version}
+%global pypyprefix %{_libdir}/pypy3-%{basever}
%global pylibver 3
# We refer to this subdir of the source tree in a few places during the build:
@@ -464,8 +465,8 @@ mkdir -p %{buildroot}/%{_bindir}
mkdir -p %{buildroot}/%{pypyprefix}
-# 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}
+# Run installing script, archive-name %{name}-%{basever} in %{buildroot}/%{_libdir} == %{pypyprefix}
+%{bootstrap_python_interp} pypy/tool/release/package.py --archive-name %{name}-%{basever} --builddir %{buildroot}/%{_libdir}
# Remove shebang lines from .py files that aren't executable, and
@@ -639,7 +640,7 @@ cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/pyp
install -m0644 -p -D -t %{buildroot}/%{_rpmconfigdir}/macros.d %{SOURCE2}
# Remove files we don't want:
-rm -f %{buildroot}%{_libdir}/pypy3-5.2.0.tar.bz2 \
+rm -f %{buildroot}%{_libdir}/%{name}-%{basever}.tar.bz2 \
%{buildroot}%{pypyprefix}/LICENSE \
%{buildroot}%{pypyprefix}/README.rst
@@ -821,6 +822,10 @@ CheckPyPy %{name}-stackless
%changelog
+* Tue Apr 10 2018 Michal Cyprian <mcyprian(a)redhat.com> - 5.10.1-5
+- Remove the rightmost version number from the path
+- rhbz#1516885: https://bugzilla.redhat.com/show_bug.cgi?id=1516885
+
* Thu Mar 29 2018 Michal Cyprian <mcyprian(a)redhat.com> - 5.10.1-4
- Add patch for libxcrypt
commit c54059a679944400a51e891b164e564befa14cbb
Author: Michal Cyprian <m.cyprian(a)gmail.com>
Date: Thu Mar 29 21:24:14 2018 +0200
Add patch for libxcrypt
diff --git a/009-add-libxcrypt-support.patch b/009-add-libxcrypt-support.patch
new file mode 100644
index 0000000..ec17216
--- /dev/null
+++ b/009-add-libxcrypt-support.patch
@@ -0,0 +1,13 @@
+diff --git a/pypy/module/crypt/interp_crypt.py b/pypy/module/crypt/interp_crypt.py
+index d227b6a..da969e6 100644
+--- a/pypy/module/crypt/interp_crypt.py
++++ b/pypy/module/crypt/interp_crypt.py
+@@ -6,7 +6,7 @@ import sys
+ if sys.platform.startswith('darwin'):
+ eci = ExternalCompilationInfo()
+ else:
+- eci = ExternalCompilationInfo(libraries=['crypt'])
++ eci = ExternalCompilationInfo(libraries=['crypt'], includes=['crypt.h'])
+ c_crypt = rffi.llexternal('crypt', [rffi.CCHARP, rffi.CCHARP], rffi.CCHARP,
+ compilation_info=eci, releasegil=False)
+
diff --git a/pypy3.spec b/pypy3.spec
index 2ed9d59..22092d4 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,7 +1,7 @@
Name: pypy3
Version: 5.10.1
%global pyversion 3.5
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -155,6 +155,11 @@ Patch6: 006-always-log-stdout.patch
# community that won't make sense outside of it). [Sorry to be a killjoy]
Patch7: 007-remove-startup-message.patch
+# Glibc's libcrypt was replaced with libxcrypt in f28, crypt.h header has
+# to be added to privent compilation error.
+# https://fedoraproject.org/wiki/Changes/Replace_glibc_libcrypt_with_libxcrypt
+Patch9: 009-add-libxcrypt-support.patch
+
# It seems ppc64 has no faulthandler
Patch11: 011-no-faulthandler.patch
@@ -816,6 +821,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Thu Mar 29 2018 Michal Cyprian <mcyprian(a)redhat.com> - 5.10.1-4
+- Add patch for libxcrypt
+
* Fri Feb 09 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.10.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
commit 664896a6c60437d635c7b940c30ec541d0e94f87
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Fri Feb 9 06:17:45 2018 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
Signed-off-by: Fedora Release Engineering <releng(a)fedoraproject.org>
diff --git a/pypy3.spec b/pypy3.spec
index 5a9fcba..2ed9d59 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,7 +1,7 @@
Name: pypy3
Version: 5.10.1
%global pyversion 3.5
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -816,6 +816,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri Feb 09 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.10.1-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
+
* Sat Jan 20 2018 Björn Esser <besser82(a)fedoraproject.org> - 5.10.1-2
- Rebuilt for switch to libxcrypt
commit 43f3327530097638befd17ecc0d7054493cc45b9
Author: Björn Esser <besser82(a)fedoraproject.org>
Date: Sat Jan 20 23:07:39 2018 +0100
Rebuilt for switch to libxcrypt
diff --git a/pypy3.spec b/pypy3.spec
index 76aed7c..5a9fcba 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,7 +1,7 @@
Name: pypy3
Version: 5.10.1
%global pyversion 3.5
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -816,6 +816,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Sat Jan 20 2018 Björn Esser <besser82(a)fedoraproject.org> - 5.10.1-2
+- Rebuilt for switch to libxcrypt
+
* Fri Jan 12 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-1
- Update to 5.10.1 (#1533689)
- Removed two upstreamed patches
commit 8b06f1af625208abd6fd0fa5817f8df53e824916
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Jan 19 16:19:55 2018 +0100
Only BR /usr/bin/git, it should be enough for autosetup
diff --git a/pypy3.spec b/pypy3.spec
index db72cad..76aed7c 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -232,7 +232,7 @@ BuildRequires: emacs
%endif
# For %%autosetup -S git
-BuildRequires: git
+BuildRequires: %{_bindir}/git
# Metadata for the core package (the JIT build):
Requires: pypy3-libs%{?_isa} = %{version}-%{release}
commit 93cd7d04ccff833ff161ec02c1fbfb2d940fca9e
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Jan 12 10:01:38 2018 +0100
Update to 5.10.1 (#1533689)
diff --git a/.gitignore b/.gitignore
index 40caefb..67b6ee0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@
/pypy3-v5.7.0-src.tar.bz2
/pypy3-v5.9.0-src.tar.bz2
/pypy3-v5.10.0-src.tar.bz2
+/pypy3-v5.10.1-src.tar.bz2
diff --git a/012-time-sleep-i686-overflow.patch b/012-time-sleep-i686-overflow.patch
deleted file mode 100644
index 7dc6cf3..0000000
--- a/012-time-sleep-i686-overflow.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-# HG changeset patch
-# User Ronan Lamy <ronan.lamy(a)gmail.com>
-# Date 1514473067 -3600
-# Branch py3.5
-# Node ID f145d85043878194d7eee33b2049063843e032d8
-# Parent d7d2710e65359e1e8d69e82612cb96f2f3921de7
-Fix issue #2717
-
-diff --git a/pypy/interpreter/test/test_timeutils.py b/pypy/interpreter/test/test_timeutils.py
-new file mode 100644
-index 0000000..873b2b4
---- /dev/null
-+++ b/pypy/interpreter/test/test_timeutils.py
-@@ -0,0 +1,13 @@
-+import pytest
-+from rpython.rlib.rarithmetic import r_longlong
-+from pypy.interpreter.error import OperationError
-+from pypy.interpreter.timeutils import timestamp_w
-+
-+def test_timestamp_w(space):
-+ w_1_year = space.newint(365 * 24 * 3600)
-+ result = timestamp_w(space, w_1_year)
-+ assert isinstance(result, r_longlong)
-+ assert result // 10 ** 9 == space.int_w(w_1_year)
-+ w_millenium = space.mul(w_1_year, space.newint(1000))
-+ with pytest.raises(OperationError): # timestamps overflow after ~300 years
-+ timestamp_w(space, w_millenium)
-diff --git a/pypy/interpreter/timeutils.py b/pypy/interpreter/timeutils.py
-index 336426b..7918dc8 100644
---- a/pypy/interpreter/timeutils.py
-+++ b/pypy/interpreter/timeutils.py
-@@ -3,7 +3,7 @@ Access to the time module's high-resolution monotonic clock
- """
- import math
- from rpython.rlib.rarithmetic import (
-- r_longlong, ovfcheck, ovfcheck_float_to_longlong)
-+ r_longlong, ovfcheck_float_to_longlong)
- from pypy.interpreter.error import oefmt
-
- SECS_TO_NS = 10 ** 9
-@@ -28,10 +28,10 @@ def timestamp_w(space, w_secs):
- raise oefmt(space.w_OverflowError,
- "timestamp %R too large to convert to C _PyTime_t", w_secs)
- else:
-- sec = space.int_w(w_secs)
- try:
-- result = ovfcheck(sec * SECS_TO_NS)
-+ sec = space.bigint_w(w_secs).tolonglong()
-+ result = sec * r_longlong(SECS_TO_NS)
- except OverflowError:
- raise oefmt(space.w_OverflowError,
-- "timestamp too large to convert to C _PyTime_t")
-- return r_longlong(result)
-+ "timestamp %R too large to convert to C _PyTime_t", w_secs)
-+ return result
diff --git a/013-fix-typeerror.patch b/013-fix-typeerror.patch
deleted file mode 100644
index 86b0650..0000000
--- a/013-fix-typeerror.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-# HG changeset patch
-# User Miro Hrončok <miro(a)hroncok.cz>
-# Date 1514415016 0
-# Branch hroncok/fix-typeerror-str-does-not-support-the-b-1514414905375
-# Node ID 0551d04959425ea4a8ff7e87a5d357d03936cde0
-# Parent a4194a67868fa916074416e96456d07d52b1a1a1
-Fix: TypeError: 'str' does not support the buffer interface
-
-Fixes https://bitbucket.org/pypy/pypy/issues/2718
-
-diff --git a/lib_pypy/pyrepl/unix_console.py b/lib_pypy/pyrepl/unix_console.py
---- a/lib_pypy/pyrepl/unix_console.py
-+++ b/lib_pypy/pyrepl/unix_console.py
-@@ -500,7 +500,7 @@
- os.write(self.output_fd, fmt[:x])
- fmt = fmt[y:]
- delay = int(m.group(1))
-- if '*' in m.group(2):
-+ if b'*' in m.group(2):
- delay *= self.height
- if self._pad:
- nchars = (bps*delay)/1000
diff --git a/pypy3.spec b/pypy3.spec
index dc1aa8e..db72cad 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,7 +1,7 @@
Name: pypy3
-Version: 5.10.0
+Version: 5.10.1
%global pyversion 3.5
-Release: 3%{?dist}
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -158,12 +158,6 @@ Patch7: 007-remove-startup-message.patch
# It seems ppc64 has no faulthandler
Patch11: 011-no-faulthandler.patch
-# https://bitbucket.org/pypy/pypy/issues/2717
-Patch12: 012-time-sleep-i686-overflow.patch
-
-# https://bitbucket.org/pypy/pypy/issues/2718
-Patch13: 013-fix-typeerror.patch
-
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
@@ -822,6 +816,10 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri Jan 12 2018 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.1-1
+- Update to 5.10.1 (#1533689)
+- Removed two upstreamed patches
+
* Fri Dec 29 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-3
- Remove never used InstallPyPy function
- Actually call execstack as originally intended
diff --git a/sources b/sources
index d9f03a4..afb3c83 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3-v5.10.0-src.tar.bz2) = 69a373c18dbad9dd617f994ad885c8d8975f0c484ba9dd547e6e892c9a3030a43e9e3ee668aee5f4969403883de1311cef97a0a5e5701921172ee6c2119b771b
+SHA512 (pypy3-v5.10.1-src.tar.bz2) = 91b0ed25130bdbb46d5e577136b5fe63d5162917dcc2d0b69f5cac2a283ece9d0bfd3c7c8dc61ff391e0550fa1603326f6edeb2df3159d71617fefe6c07439f5
commit 82dcbae2321eac8b49b7e987dfe170bdd2e19c56
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Dec 29 19:50:56 2017 +0100
On power, use cpython2 to build pypy3
diff --git a/pypy3.spec b/pypy3.spec
index 50ecfc0..dc1aa8e 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -171,10 +171,16 @@ Patch13: 013-fix-typeerror.patch
#
# Turn it off with this boolean, to revert back to rebuilding using CPython
# and avoid a cycle in the build-time dependency graph:
-
# Note, pypy3 is built with pypy2, so no dependency cycle
+%ifarch %{power64}
+# the build is unreliable with pypy+power, getting random failures
+# so better have a bit slower build than having to build until it pass
+%global use_self_when_building 0
+%else
%global use_self_when_building 1
+%endif
+
%if 0%{use_self_when_building}
# pypy3 can only be build with pypy2
BuildRequires: pypy2
@@ -821,6 +827,7 @@ CheckPyPy %{name}-stackless
- Actually call execstack as originally intended
- Use execstack on all arches (it's available now)
- Don't ship the debug binaries
+- On power, use cpython2 to build pypy3
* Thu Dec 28 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-2
- Fixed upstream issues #2717 and #2718 (re-enable test_socket)
commit 720aa9bae8b7478b99bcb277238fcae6cca364d9
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Dec 29 14:12:06 2017 +0100
Remove the debug builds (the package was ~350 MB)
Also:
- Remove never used InstallPyPy function
- Actually call execstack as originally intended
- Use execstack on all arches (it's available now)
diff --git a/pypy3.spec b/pypy3.spec
index 218ec39..50ecfc0 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,7 +1,7 @@
Name: pypy3
Version: 5.10.0
%global pyversion 3.5
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -224,10 +224,7 @@ BuildRequires: /usr/bin/free
BuildRequires: perl-interpreter
%endif
-# No prelink on these arches
-%ifnarch aarch64 ppc64le
BuildRequires: /usr/bin/execstack
-%endif
# For byte-compiling the JIT-viewing mode:
%if %{with_emacs}
@@ -458,39 +455,6 @@ BuildPyPy \
%install
-# Install the various executables:
-
-InstallPyPy() {
- ExeName=$1
-
- # To ensure compatibility with virtualenv, pypy finds its libraries
- # relative to itself; this happens within
- # pypy/translator/goal/app_main.py:get_library_path
- # which calls sys.pypy_initial_path(dirname) on the dir containing
- # the executable, with symlinks resolved.
- #
- # Hence we make /usr/bin/pypy be a symlink to the real binary, which we
- # place within /usr/lib[64]/pypy-1.* as pypy
- #
- # This ought to enable our pypy build to work with virtualenv
- # (rhbz#742641)
- install -m 755 %{goal_dir}/$ExeName %{buildroot}/%{pypyprefix}/$ExeName
- ln -s %{pypyprefix}/$ExeName %{buildroot}/%{_bindir}
-
- # The generated machine code doesn't need an executable stack, but
- # one of the assembler files (gcmaptable.s) doesn't have the necessary
- # metadata to inform gcc of that, and thus gcc pessimistically assumes
- # that the built binary does need an executable stack.
- #
- # Reported upstream as: https://codespeak.net/issue/pypy-dev/issue610
- #
- # I tried various approaches involving fixing the build, but the simplest
- # approach is to postprocess the ELF file:
-%ifnarch aarch64 ppc64le
- execstack --clear-execstack %{buildroot}/%{pypyprefix}/$ExeName
-%endif
-}
-
mkdir -p %{buildroot}/%{_bindir}
mkdir -p %{buildroot}/%{pypyprefix}
@@ -517,6 +481,17 @@ find \
mkdir -p %{buildroot}/%{pypyprefix}/site-packages
+# The generated machine code doesn't need an executable stack, but
+# one of the assembler files (gcmaptable.s) doesn't have the necessary
+# metadata to inform gcc of that, and thus gcc pessimistically assumes
+# that the built binary does need an executable stack.
+#
+# Reported upstream as: https://codespeak.net/issue/pypy-dev/issue610
+#
+# I tried various approaches involving fixing the build, but the simplest
+# approach is to postprocess the ELF file:
+execstack --clear-execstack %{buildroot}/%{pypyprefix}/bin/pypy3
+
ln -s ./pypy3 %{buildroot}%{pypyprefix}/bin/pypy%{pyversion}
ln -s %{pypyprefix}/bin/pypy%{pyversion} %{buildroot}%{_bindir}/pypy%{pyversion}
ln -s pypy%{pyversion} %{buildroot}%{_bindir}/pypy3
@@ -666,6 +641,12 @@ rm -f %{buildroot}%{_libdir}/pypy3-5.2.0.tar.bz2 \
# wtf? This is probably masking some bigger problem, but let's do this for now
mv -v lib-python/3/test/regrtest.py-new lib-python/3/test/regrtest.py || :
+# since 5.10.0, the debug binaries are built and shipped, making the
+# pypy3 package ~350 MiB. let's remove them here for now and TODO figure out why
+rm -f %{buildroot}%{pypyprefix}/bin/pypy3.debug
+rm -f %{buildroot}%{pypyprefix}/bin/libpypy3-c.so.debug
+
+
%check
topdir=$(pwd)
@@ -835,6 +816,12 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri Dec 29 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-3
+- Remove never used InstallPyPy function
+- Actually call execstack as originally intended
+- Use execstack on all arches (it's available now)
+- Don't ship the debug binaries
+
* Thu Dec 28 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-2
- Fixed upstream issues #2717 and #2718 (re-enable test_socket)
- Use pypy2 when building (it's faster and works this time)
commit 9c955b3defcb09be770be0be46c3761fc0185d0b
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Thu Dec 28 17:47:00 2017 +0100
Use pypy2 when building
(it's faster and works this time)
diff --git a/pypy3.spec b/pypy3.spec
index dc8c53d..218ec39 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -174,7 +174,7 @@ Patch13: 013-fix-typeerror.patch
# Note, pypy3 is built with pypy2, so no dependency cycle
-%global use_self_when_building 0
+%global use_self_when_building 1
%if 0%{use_self_when_building}
# pypy3 can only be build with pypy2
BuildRequires: pypy2
@@ -837,6 +837,7 @@ CheckPyPy %{name}-stackless
%changelog
* Thu Dec 28 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-2
- Fixed upstream issues #2717 and #2718 (re-enable test_socket)
+- Use pypy2 when building (it's faster and works this time)
* Mon Dec 25 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-1
- Update to 5.10 (#1528841)
commit e858e84bf97e61dd4d1a72466862ac6cb8e57296
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Thu Dec 28 17:45:36 2017 +0100
Fixed upstream issues #2717 and #2718 (re-enable test_socket)
diff --git a/012-time-sleep-i686-overflow.patch b/012-time-sleep-i686-overflow.patch
new file mode 100644
index 0000000..7dc6cf3
--- /dev/null
+++ b/012-time-sleep-i686-overflow.patch
@@ -0,0 +1,55 @@
+# HG changeset patch
+# User Ronan Lamy <ronan.lamy(a)gmail.com>
+# Date 1514473067 -3600
+# Branch py3.5
+# Node ID f145d85043878194d7eee33b2049063843e032d8
+# Parent d7d2710e65359e1e8d69e82612cb96f2f3921de7
+Fix issue #2717
+
+diff --git a/pypy/interpreter/test/test_timeutils.py b/pypy/interpreter/test/test_timeutils.py
+new file mode 100644
+index 0000000..873b2b4
+--- /dev/null
++++ b/pypy/interpreter/test/test_timeutils.py
+@@ -0,0 +1,13 @@
++import pytest
++from rpython.rlib.rarithmetic import r_longlong
++from pypy.interpreter.error import OperationError
++from pypy.interpreter.timeutils import timestamp_w
++
++def test_timestamp_w(space):
++ w_1_year = space.newint(365 * 24 * 3600)
++ result = timestamp_w(space, w_1_year)
++ assert isinstance(result, r_longlong)
++ assert result // 10 ** 9 == space.int_w(w_1_year)
++ w_millenium = space.mul(w_1_year, space.newint(1000))
++ with pytest.raises(OperationError): # timestamps overflow after ~300 years
++ timestamp_w(space, w_millenium)
+diff --git a/pypy/interpreter/timeutils.py b/pypy/interpreter/timeutils.py
+index 336426b..7918dc8 100644
+--- a/pypy/interpreter/timeutils.py
++++ b/pypy/interpreter/timeutils.py
+@@ -3,7 +3,7 @@ Access to the time module's high-resolution monotonic clock
+ """
+ import math
+ from rpython.rlib.rarithmetic import (
+- r_longlong, ovfcheck, ovfcheck_float_to_longlong)
++ r_longlong, ovfcheck_float_to_longlong)
+ from pypy.interpreter.error import oefmt
+
+ SECS_TO_NS = 10 ** 9
+@@ -28,10 +28,10 @@ def timestamp_w(space, w_secs):
+ raise oefmt(space.w_OverflowError,
+ "timestamp %R too large to convert to C _PyTime_t", w_secs)
+ else:
+- sec = space.int_w(w_secs)
+ try:
+- result = ovfcheck(sec * SECS_TO_NS)
++ sec = space.bigint_w(w_secs).tolonglong()
++ result = sec * r_longlong(SECS_TO_NS)
+ except OverflowError:
+ raise oefmt(space.w_OverflowError,
+- "timestamp too large to convert to C _PyTime_t")
+- return r_longlong(result)
++ "timestamp %R too large to convert to C _PyTime_t", w_secs)
++ return result
diff --git a/013-fix-typeerror.patch b/013-fix-typeerror.patch
new file mode 100644
index 0000000..86b0650
--- /dev/null
+++ b/013-fix-typeerror.patch
@@ -0,0 +1,22 @@
+# HG changeset patch
+# User Miro Hrončok <miro(a)hroncok.cz>
+# Date 1514415016 0
+# Branch hroncok/fix-typeerror-str-does-not-support-the-b-1514414905375
+# Node ID 0551d04959425ea4a8ff7e87a5d357d03936cde0
+# Parent a4194a67868fa916074416e96456d07d52b1a1a1
+Fix: TypeError: 'str' does not support the buffer interface
+
+Fixes https://bitbucket.org/pypy/pypy/issues/2718
+
+diff --git a/lib_pypy/pyrepl/unix_console.py b/lib_pypy/pyrepl/unix_console.py
+--- a/lib_pypy/pyrepl/unix_console.py
++++ b/lib_pypy/pyrepl/unix_console.py
+@@ -500,7 +500,7 @@
+ os.write(self.output_fd, fmt[:x])
+ fmt = fmt[y:]
+ delay = int(m.group(1))
+- if '*' in m.group(2):
++ if b'*' in m.group(2):
+ delay *= self.height
+ if self._pad:
+ nchars = (bps*delay)/1000
diff --git a/pypy3.spec b/pypy3.spec
index 6843000..dc8c53d 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,7 +1,7 @@
Name: pypy3
Version: 5.10.0
%global pyversion 3.5
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -158,6 +158,12 @@ Patch7: 007-remove-startup-message.patch
# It seems ppc64 has no faulthandler
Patch11: 011-no-faulthandler.patch
+# https://bitbucket.org/pypy/pypy/issues/2717
+Patch12: 012-time-sleep-i686-overflow.patch
+
+# https://bitbucket.org/pypy/pypy/issues/2718
+Patch13: 013-fix-typeerror.patch
+
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
@@ -711,12 +717,6 @@ CheckPyPy() {
# test_multiprocessing, so skip it for now:
SkipTest test_multiprocessing
- # the timeout tests are hanging on i686
- # see https://bitbucket.org/pypy/pypy/issues/2717
- %ifarch %{ix86}
- SkipTest test_socket
- %endif
-
echo "== Test names =="
cat testnames.txt
echo "================="
@@ -835,6 +835,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Thu Dec 28 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-2
+- Fixed upstream issues #2717 and #2718 (re-enable test_socket)
+
* Mon Dec 25 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-1
- Update to 5.10 (#1528841)
- Use pypy2 and python2-pycparser (note the twos)
commit 27657069ff6fedfdeedc1770738261f4662213bd
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Dec 27 15:58:25 2017 +0100
Temporarily skip test_socket on ix86
diff --git a/pypy3.spec b/pypy3.spec
index 24d9504..6843000 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -711,6 +711,12 @@ CheckPyPy() {
# test_multiprocessing, so skip it for now:
SkipTest test_multiprocessing
+ # the timeout tests are hanging on i686
+ # see https://bitbucket.org/pypy/pypy/issues/2717
+ %ifarch %{ix86}
+ SkipTest test_socket
+ %endif
+
echo "== Test names =="
cat testnames.txt
echo "================="
@@ -833,6 +839,7 @@ CheckPyPy %{name}-stackless
- Update to 5.10 (#1528841)
- Use pypy2 and python2-pycparser (note the twos)
- Enable JIT on power and s390x
+- Temporarily skip test_socket on ix86
* Fri Oct 20 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.9.0-1
- Update to 5.9 (#1504427)
commit a6780ec4355a7d2691bf8441b76b77186fb1b22d
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Wed Dec 27 15:57:17 2017 +0100
Enable JIT on power and s390x
diff --git a/pypy3.spec b/pypy3.spec
index cb0d323..24d9504 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -93,7 +93,7 @@ ExcludeArch: aarch64
# it on the other archs. The resulting binary will typically be slower than
# CPython for the latter case.
-%ifarch %{ix86} x86_64 %{arm}
+%ifarch %{ix86} x86_64 %{arm} %{power64} s390x
%global with_jit 1
%else
%global with_jit 0
@@ -832,6 +832,7 @@ CheckPyPy %{name}-stackless
* Mon Dec 25 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-1
- Update to 5.10 (#1528841)
- Use pypy2 and python2-pycparser (note the twos)
+- Enable JIT on power and s390x
* Fri Oct 20 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.9.0-1
- Update to 5.9 (#1504427)
commit 2b72df539cd5d8839277452408071a8200689b29
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Dec 26 11:56:15 2017 +0100
Update to 5.10 (#1528841)
diff --git a/.gitignore b/.gitignore
index 602e7b0..40caefb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@
/pypy3.3-v5.5.0-alpha-src.tar.bz2
/pypy3-v5.7.0-src.tar.bz2
/pypy3-v5.9.0-src.tar.bz2
+/pypy3-v5.10.0-src.tar.bz2
diff --git a/pypy3.spec b/pypy3.spec
index 9e9d37a..cb0d323 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,5 +1,5 @@
Name: pypy3
-Version: 5.9.0
+Version: 5.10.0
%global pyversion 3.5
Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
@@ -171,7 +171,7 @@ Patch11: 011-no-faulthandler.patch
%global use_self_when_building 0
%if 0%{use_self_when_building}
# pypy3 can only be build with pypy2
-BuildRequires: pypy
+BuildRequires: pypy2
# no pypy-pycparser available ATM
%global bootstrap_python_interp pypy
%else
@@ -179,7 +179,7 @@ BuildRequires: pypy
# pypy3 can only be build with python2
BuildRequires: python2-devel
-BuildRequires: python-pycparser
+BuildRequires: python2-pycparser
%global bootstrap_python_interp python
%endif
@@ -829,6 +829,10 @@ CheckPyPy %{name}-stackless
%changelog
+* Mon Dec 25 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.10.0-1
+- Update to 5.10 (#1528841)
+- Use pypy2 and python2-pycparser (note the twos)
+
* Fri Oct 20 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.9.0-1
- Update to 5.9 (#1504427)
- Remove merged patches
diff --git a/sources b/sources
index 728ee37..d9f03a4 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (pypy3-v5.9.0-src.tar.bz2) = 3d5384d644fdd1bc8b95f5747dbd1771ae06eb2cfc7b57be359b8bf40177676afd097620d0cb9d9000c40d8cce075cfa6bfd92de987d3dd927c04d7d595dc5bd
+SHA512 (pypy3-v5.10.0-src.tar.bz2) = 69a373c18dbad9dd617f994ad885c8d8975f0c484ba9dd547e6e892c9a3030a43e9e3ee668aee5f4969403883de1311cef97a0a5e5701921172ee6c2119b771b
commit 6eb88b178404d837b4ff02920550faaacb5cd92e
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Oct 20 20:31:31 2017 +0200
Update to 5.9 (#1504427)
diff --git a/.gitignore b/.gitignore
index 3fcf7b6..602e7b0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
/pypy3-2.4.0-src.tar.bz2
/pypy3.3-v5.2.0-alpha1-src.tar.bz2
/pypy3.3-v5.5.0-alpha-src.tar.bz2
+/pypy3-v5.7.0-src.tar.bz2
+/pypy3-v5.9.0-src.tar.bz2
diff --git a/009-raise-an-error-when-STARTTLS-fails.patch b/009-raise-an-error-when-STARTTLS-fails.patch
deleted file mode 100644
index 58ceb01..0000000
--- a/009-raise-an-error-when-STARTTLS-fails.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 4c0f6a6fe6c71009ab4a6b3716e70af021e04904 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro(a)hroncok.cz>
-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
-rhbz#1303647: https://bugzilla.redhat.com/show_bug.cgi?id=1303647
-rhbz#1351680: https://bugzilla.redhat.com/show_bug.cgi?id=1351680
-
-Based on an upstream change by Benjamin Peterson <benjamin(a)python.org>
-- in changeset 101887:d590114c2394 3.4
-- https://hg.python.org/cpython/rev/d590114c2394
----
- lib-python/3/smtplib.py | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/lib-python/3/smtplib.py b/lib-python/3/smtplib.py
-index 57f181b..5656cc6 100755
---- a/lib-python/3/smtplib.py
-+++ b/lib-python/3/smtplib.py
-@@ -680,6 +680,11 @@ class SMTP:
- self.ehlo_resp = None
- self.esmtp_features = {}
- self.does_esmtp = 0
-+ else:
-+ # RFC 3207:
-+ # 501 Syntax error (no parameters allowed)
-+ # 454 TLS not available due to temporary reason
-+ raise SMTPResponseException(resp, reply)
- return (resp, reply)
-
- def sendmail(self, from_addr, to_addrs, msg, mail_options=[],
---
-2.9.0
-
diff --git a/010-disabled-HTTP-header-injections-in-http.client.patch b/010-disabled-HTTP-header-injections-in-http.client.patch
deleted file mode 100644
index bed386c..0000000
--- a/010-disabled-HTTP-header-injections-in-http.client.patch
+++ /dev/null
@@ -1,163 +0,0 @@
-From 9a8db191cf8a3557a24e91081bf434d581b98c5a Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro(a)hroncok.cz>
-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
-rhbz#1303699: https://bugzilla.redhat.com/show_bug.cgi?id=1303699
-rhbz#1351687: https://bugzilla.redhat.com/show_bug.cgi?id=1351687
-
-Based on an upstream change by Demian Brecht and Serhiy Storchaka
-- in changeset 94952:bf3e1c9b80e9 3.4
-- https://hg.python.org/cpython/rev/bf3e1c9b80e9
----
- lib-python/3/http/client.py | 37 +++++++++++++++++++++++++
- lib-python/3/test/test_httplib.py | 57 +++++++++++++++++++++++++++++++++++++++
- 2 files changed, 94 insertions(+)
-
-diff --git a/lib-python/3/http/client.py b/lib-python/3/http/client.py
-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
- import email.message
- import io
- import os
-+import re
- import socket
- import collections
- from urllib.parse import urlsplit
-@@ -217,6 +218,34 @@ _MAXLINE = 65536
- _MAXHEADERS = 100
-
-
-+# Header name/value ABNF (http://tools.ietf.org/html/rfc7230#section-3.2)
-+#
-+# VCHAR = %x21-7E
-+# obs-text = %x80-FF
-+# header-field = field-name ":" OWS field-value OWS
-+# field-name = token
-+# field-value = *( field-content / obs-fold )
-+# field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
-+# field-vchar = VCHAR / obs-text
-+#
-+# obs-fold = CRLF 1*( SP / HTAB )
-+# ; obsolete line folding
-+# ; see Section 3.2.4
-+
-+# token = 1*tchar
-+#
-+# tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*"
-+# / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~"
-+# / DIGIT / ALPHA
-+# ; any VCHAR, except delimiters
-+#
-+# VCHAR defined in http://tools.ietf.org/html/rfc5234#appendix-B.1
-+
-+# the patterns for both name and value are more leniant than RFC
-+# definitions to allow for backwards compatibility
-+_is_legal_header_name = re.compile(b'^[^:\s][^:\r\n]*$').match
-+_is_illegal_header_value = re.compile(b'\n(?![ \t])|\r(?![ \t\n])').search
-+
- class HTTPMessage(email.message.Message):
- # XXX The only usage of this method is in
- # http.server.CGIHTTPRequestHandler. Maybe move the code there so
-@@ -1035,12 +1064,20 @@ class HTTPConnection:
-
- if hasattr(header, 'encode'):
- header = header.encode('ascii')
-+
-+ if not _is_legal_header_name(header):
-+ raise ValueError('Invalid header name %r' % (header,))
-+
- values = list(values)
- for i, one_value in enumerate(values):
- if hasattr(one_value, 'encode'):
- values[i] = one_value.encode('latin-1')
- elif isinstance(one_value, int):
- values[i] = str(one_value).encode('ascii')
-+
-+ if _is_illegal_header_value(values[i]):
-+ raise ValueError('Invalid header value %r' % (values[i],))
-+
- value = b'\r\n\t'.join(values)
- 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 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.assertIn(b'Content-length: 42', conn._buffer)
-
-+ conn.putheader('Foo', ' bar ')
-+ self.assertIn(b'Foo: bar ', conn._buffer)
-+ conn.putheader('Bar', '\tbaz\t')
-+ self.assertIn(b'Bar: \tbaz\t', conn._buffer)
-+ conn.putheader('Authorization', 'Bearer mytoken')
-+ self.assertIn(b'Authorization: Bearer mytoken', conn._buffer)
-+ conn.putheader('IterHeader', 'IterA', 'IterB')
-+ self.assertIn(b'IterHeader: IterA\r\n\tIterB', conn._buffer)
-+ conn.putheader('LatinHeader', b'\xFF')
-+ self.assertIn(b'LatinHeader: \xFF', conn._buffer)
-+ conn.putheader('Utf8Header', b'\xc3\x80')
-+ self.assertIn(b'Utf8Header: \xc3\x80', conn._buffer)
-+ conn.putheader('C1-Control', b'next\x85line')
-+ self.assertIn(b'C1-Control: next\x85line', conn._buffer)
-+ conn.putheader('Embedded-Fold-Space', 'is\r\n allowed')
-+ self.assertIn(b'Embedded-Fold-Space: is\r\n allowed', conn._buffer)
-+ conn.putheader('Embedded-Fold-Tab', 'is\r\n\tallowed')
-+ self.assertIn(b'Embedded-Fold-Tab: is\r\n\tallowed', conn._buffer)
-+ conn.putheader('Key Space', 'value')
-+ self.assertIn(b'Key Space: value', conn._buffer)
-+ conn.putheader('KeySpace ', 'value')
-+ self.assertIn(b'KeySpace : value', conn._buffer)
-+ conn.putheader(b'Nonbreak\xa0Space', 'value')
-+ self.assertIn(b'Nonbreak\xa0Space: value', conn._buffer)
-+ conn.putheader(b'\xa0NonbreakSpace', 'value')
-+ self.assertIn(b'\xa0NonbreakSpace: value', conn._buffer)
-+
- def test_ipv6host_header(self):
- # Default host header on IPv6 transaction should wrapped by [] if
- # its actual IPv6 address
-@@ -153,6 +180,36 @@ class HeaderTests(TestCase):
- conn.request('GET', '/foo')
- self.assertTrue(sock.data.startswith(expected))
-
-+ def test_invalid_headers(self):
-+ conn = client.HTTPConnection('example.com')
-+ conn.sock = FakeSocket('')
-+ conn.putrequest('GET', '/')
-+
-+ # http://tools.ietf.org/html/rfc7230#section-3.2.4, whitespace is no
-+ # longer allowed in header names
-+ cases = (
-+ (b'Invalid\r\nName', b'ValidValue'),
-+ (b'Invalid\rName', b'ValidValue'),
-+ (b'Invalid\nName', b'ValidValue'),
-+ (b'\r\nInvalidName', b'ValidValue'),
-+ (b'\rInvalidName', b'ValidValue'),
-+ (b'\nInvalidName', b'ValidValue'),
-+ (b' InvalidName', b'ValidValue'),
-+ (b'\tInvalidName', b'ValidValue'),
-+ (b'Invalid:Name', b'ValidValue'),
-+ (b':InvalidName', b'ValidValue'),
-+ (b'ValidName', b'Invalid\r\nValue'),
-+ (b'ValidName', b'Invalid\rValue'),
-+ (b'ValidName', b'Invalid\nValue'),
-+ (b'ValidName', b'InvalidValue\r\n'),
-+ (b'ValidName', b'InvalidValue\r'),
-+ (b'ValidName', b'InvalidValue\n'),
-+ )
-+ for name, value in cases:
-+ with self.subTest((name, value)):
-+ with self.assertRaisesRegex(ValueError, 'Invalid header'):
-+ conn.putheader(name, value)
-+
-
- class BasicTest(TestCase):
- def test_status_lines(self):
---
-2.9.0
-
diff --git a/011-no-faulthandler.patch b/011-no-faulthandler.patch
index f0154eb..f96d232 100644
--- a/011-no-faulthandler.patch
+++ b/011-no-faulthandler.patch
@@ -1,30 +1,37 @@
-diff --git pypy3-v5.5.0-src/lib-python/3/test/regrtest.py pypy3-v5.5.0-src/lib-python/3/test/regrtest.py-new
-index 8d18a9297a..e99322ebe1 100755
---- pypy3-v5.5.0-src/lib-python/3/test/regrtest.py
-+++ pypy3-v5.5.0-src/lib-python/3/test/regrtest.py-new
-@@ -169,7 +169,6 @@ option '-uall,-gui'.
- import importlib
+commit ea4d6a12548eea7ce0424feea13a499fb7085e96
+Author: rpm-build <rpm-build>
+Date: Wed Mar 29 04:31:55 2017 +0200
+
+ 011-no-faulthandler.patch
+
+diff --git a/lib-python/3/test/regrtest.py b/lib-python/3/test/regrtest.py
+index c1d85f6..3d3072c 100755
+--- a/lib-python/3/test/regrtest.py
++++ b/lib-python/3/test/regrtest.py
+@@ -124,7 +124,6 @@ import importlib
+ import argparse
import builtins
-import faulthandler
- import getopt
import io
import json
-@@ -197,6 +196,10 @@ try:
- import multiprocessing.process
+ import locale
+@@ -152,7 +151,10 @@ try:
+ import _multiprocessing, multiprocessing.process
except ImportError:
multiprocessing = None
+-
+try:
+ import faulthandler
+except ImportError:
+ faulthandler = None
-
# Some times __path__ and __file__ are not absolute (e.g. while running from
-@@ -283,17 +286,18 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
+ # Lib/) and, if we change the CWD to run the tests in a temporary dir, some
+@@ -486,17 +488,18 @@ def main(tests=None, **kwargs):
+ directly to set the values that would normally be set by flags
on the command line.
"""
-
- # Display the Python traceback on fatal errors (e.g. segfault)
- faulthandler.enable(all_threads=True)
-
@@ -51,3 +58,37 @@ index 8d18a9297a..e99322ebe1 100755
replace_stdout()
+diff --git a/lib-python/3/test/support/__init__.py b/lib-python/3/test/support/__init__.py
+index 5d7f308..4424637 100644
+--- a/lib-python/3/test/support/__init__.py
++++ b/lib-python/3/test/support/__init__.py
+@@ -6,7 +6,6 @@ if __name__ != 'test.support':
+ import collections.abc
+ import contextlib
+ import errno
+-import faulthandler
+ import fnmatch
+ import functools
+ import gc
+@@ -65,6 +64,11 @@ try:
+ except ImportError:
+ resource = None
+
++try:
++ import faulthandler
++except ImportError:
++ faulthandler = None
++
+ __all__ = [
+ # globals
+ "PIPE_MAX_SIZE", "verbose", "max_memuse", "use_resources", "failfast",
+@@ -2060,7 +2064,8 @@ def start_threads(threads, unlock=None):
+ finally:
+ started = [t for t in started if t.isAlive()]
+ if started:
+- faulthandler.dump_traceback(sys.stdout)
++ if faulthandler is not None:
++ faulthandler.dump_traceback(sys.stdout)
+ raise AssertionError('Unable to join %d threads' % len(started))
+
+ @contextlib.contextmanager
diff --git a/pypy3.spec b/pypy3.spec
index f878bb2..9e9d37a 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,7 @@
Name: pypy3
-Version: 5.5.0
-Release: 6%{?dist}
+Version: 5.9.0
+%global pyversion 3.5
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -131,7 +132,7 @@ ExcludeArch: aarch64
%(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/pypy3.3-v%{version}-alpha-src.t...
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy3-v%{version}-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -141,36 +142,21 @@ Source2: macros.pypy3
# set to indicate progress.
# This obscures useful messages, and may waste CPU cycles, so suppress it, and
# merely render dots:
-Patch0: 001-nevertty.patch
+Patch1: 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
# and linker are captured:
-Patch1: 006-always-log-stdout.patch
+Patch6: 006-always-log-stdout.patch
# Disable the printing of a quote from IRC on startup (these are stored in
# ROT13 form in lib_pypy/_pypy_irc_topic.py). Some are cute, but some could
# cause confusion for end-users (and many are in-jokes within the PyPy
# community that won't make sense outside of it). [Sorry to be a killjoy]
-Patch2: 007-remove-startup-message.patch
-
-
-# CVE-2016-0772 python: smtplib StartTLS stripping attack
-# rhbz#1303647: https://bugzilla.redhat.com/show_bug.cgi?id=1303647
-# rhbz#1351680: https://bugzilla.redhat.com/show_bug.cgi?id=1351680
-# FIXED UPSTREAM: https://hg.python.org/cpython/rev/d590114c2394
-# Raise an error when STARTTLS fails
-Patch4: 009-raise-an-error-when-STARTTLS-fails.patch
-
-# CVE-2016-5699 python: http protocol steam injection attack
-# rhbz#1303699: https://bugzilla.redhat.com/show_bug.cgi?id=1303699
-# rhbz#1351687: https://bugzilla.redhat.com/show_bug.cgi?id=1351687
-# FIXED UPSTREAM: https://hg.python.org/cpython/rev/bf3e1c9b80e9
-# Disabled HTTP header injections in http.client
-Patch5: 010-disabled-HTTP-header-injections-in-http.client.patch
+Patch7: 007-remove-startup-message.patch
# It seems ppc64 has no faulthandler
-Patch6: 011-no-faulthandler.patch
+Patch11: 011-no-faulthandler.patch
# Build-time requirements:
@@ -186,12 +172,14 @@ Patch6: 011-no-faulthandler.patch
%if 0%{use_self_when_building}
# pypy3 can only be build with pypy2
BuildRequires: pypy
+# no pypy-pycparser available ATM
%global bootstrap_python_interp pypy
%else
# pypy3 can only be build with python2
BuildRequires: python2-devel
+BuildRequires: python-pycparser
%global bootstrap_python_interp python
%endif
@@ -523,8 +511,9 @@ find \
mkdir -p %{buildroot}/%{pypyprefix}/site-packages
-ln -s %{pypyprefix}/bin/pypy3.3 %{buildroot}/%{_bindir}/pypy3.3
-ln -s pypy3.3 %{buildroot}/%{_bindir}/pypy3
+ln -s ./pypy3 %{buildroot}%{pypyprefix}/bin/pypy%{pyversion}
+ln -s %{pypyprefix}/bin/pypy%{pyversion} %{buildroot}%{_bindir}/pypy%{pyversion}
+ln -s pypy%{pyversion} %{buildroot}%{_bindir}/pypy3
# 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
@@ -790,10 +779,10 @@ CheckPyPy() {
#pypy/goal/pypy pypy/test_all.py --resultlog=pypyjit_new.log
%if %{run_selftests}
-CheckPyPy pypy-c
+CheckPyPy %{name}-c
%if 0%{with_stackless}
-CheckPyPy pypy3-stackless
+CheckPyPy %{name}-stackless
%endif
%endif # run_selftests
@@ -821,7 +810,7 @@ CheckPyPy pypy3-stackless
%license LICENSE
%doc README.rst
%{_bindir}/pypy3
-%{_bindir}/pypy3.3
+%{_bindir}/pypy%{pyversion}
%{pypyprefix}/bin/
%exclude %{_libdir}/%{name}-%{version}.tar.bz2
@@ -840,6 +829,13 @@ CheckPyPy pypy3-stackless
%changelog
+* Fri Oct 20 2017 Miro Hrončok <mhroncok(a)redhat.com> - 5.9.0-1
+- Update to 5.9 (#1504427)
+- Remove merged patches
+- Reindex the patches to match the filenames
+- Rebase the faulthandler Patch11
+- BR python-pycparser
+
* Thu Aug 03 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.5.0-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
diff --git a/sources b/sources
index 5155d51..728ee37 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-536008fd7b17af8878915393fc1ecfc3 pypy3.3-v5.5.0-alpha-src.tar.bz2
+SHA512 (pypy3-v5.9.0-src.tar.bz2) = 3d5384d644fdd1bc8b95f5747dbd1771ae06eb2cfc7b57be359b8bf40177676afd097620d0cb9d9000c40d8cce075cfa6bfd92de987d3dd927c04d7d595dc5bd
commit 79816c5293727d3eb45debfb1ba42e5bc8b3db29
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Thu Aug 3 06:35:52 2017 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
diff --git a/pypy3.spec b/pypy3.spec
index 6997965..f878bb2 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 5.5.0
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -840,6 +840,9 @@ CheckPyPy pypy3-stackless
%changelog
+* Thu Aug 03 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.5.0-6
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
+
* Thu Jul 27 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.5.0-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
commit aebba1447fc82a76bc6e7102083198e340d076bd
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Thu Jul 27 09:23:17 2017 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
diff --git a/pypy3.spec b/pypy3.spec
index 73f75d3..6997965 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 5.5.0
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -840,6 +840,9 @@ CheckPyPy pypy3-stackless
%changelog
+* Thu Jul 27 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.5.0-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
* Sat Feb 11 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.5.0-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
commit 717803cfa0815090a04163482c395a46dced8f02
Author: Petr Písař <ppisar(a)redhat.com>
Date: Wed Jul 12 14:43:49 2017 +0200
perl dependency renamed to perl-interpreter <https://fedoraproject.org/wiki/Changes/perl_Package_to_Install_Core_Modules>
diff --git a/pypy3.spec b/pypy3.spec
index c74d495..73f75d3 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -227,7 +227,7 @@ BuildRequires: time
BuildRequires: /usr/bin/free
# For use in the selftests, for imposing a per-test timeout:
-BuildRequires: perl
+BuildRequires: perl-interpreter
%endif
# No prelink on these arches
commit 51ae82f0cce74a6fb047e40d45173c75bffc41f9
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Sat Feb 11 08:09:09 2017 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
diff --git a/pypy3.spec b/pypy3.spec
index 5598133..c74d495 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 5.5.0
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -840,6 +840,9 @@ CheckPyPy pypy3-stackless
%changelog
+* Sat Feb 11 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 5.5.0-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
+
* Sun Nov 13 2016 Dan Horák <dan[at]danny.cz> - 5.5.0-3
- set z10 as the base CPU for s390(x) build
commit b929faae35b08942da1a1d1d994b26e3400f48c3
Author: Dan Horák <dan(a)danny.cz>
Date: Sun Nov 13 09:22:11 2016 +0100
- set z10 as the base CPU for s390(x) build
diff --git a/pypy3.spec b/pypy3.spec
index 903acb9..5598133 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 5.5.0
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -316,6 +316,11 @@ find lib-python/%{pylibver} -name "*.py" -exec \
%endif
%build
+%ifarch s390 s390x
+# pypy3 requires z10 at least
+%global optflags %(echo %{optflags} | sed 's/-march=z9-109 /-march=z10 /')
+%endif
+
# Top memory usage is about 4.5GB on arm7hf
free
@@ -835,6 +840,9 @@ CheckPyPy pypy3-stackless
%changelog
+* Sun Nov 13 2016 Dan Horák <dan[at]danny.cz> - 5.5.0-3
+- set z10 as the base CPU for s390(x) build
+
* Sat Nov 12 2016 Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl> - 5.5.0-2
- Also build on arm and s390*
commit 404c37f2ddb3343127726d561cd86b1a6488cd7f
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Sat Nov 12 09:29:11 2016 -0500
Restore renaming of pypytrace-mode to pypy3trace-mode
diff --git a/pypy3.spec b/pypy3.spec
index 837273b..903acb9 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -650,8 +650,9 @@ find \
# Install the JIT trace mode for Emacs:
%if %{with_emacs}
-install -m0644 -p -D -t %{buildroot}/%{_emacs_sitelispdir} \
- rpython/jit/tool/pypytrace-mode.{el,elc}
+mkdir -p %{buildroot}/%{_emacs_sitelispdir}
+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:
commit 91071982692c6dd8da9894e3180cd7bb5b4d290e
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Sat Nov 12 08:10:01 2016 -0500
It turns out ppc has no gold
So use gold on arm/i686/amd64 only.
diff --git a/pypy3.spec b/pypy3.spec
index 16d5f46..837273b 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -311,7 +311,9 @@ find lib-python/%{pylibver} -name "*.py" -exec \
"{}" \
\;
-sed -i -r 's/\$\(LDFLAGSEXTRA\)/& -fuse-ld=gold/' ./rpython/translator/platform/posix.py
+%ifarch %{ix86} x86_64 %{arm}
+ sed -i -r 's/\$\(LDFLAGSEXTRA\)/& -fuse-ld=gold/' ./rpython/translator/platform/posix.py
+%endif
%build
# Top memory usage is about 4.5GB on arm7hf
commit ad0d37c683891eaf084a84e4a9f2205ce3c5585b
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Sat Nov 12 06:51:54 2016 -0500
Also build on arm and s390*
diff --git a/pypy3.spec b/pypy3.spec
index b6e6d0b..16d5f46 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 5.5.0
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
# LGPL and another free license we'd need to ask spot about are present in some
@@ -11,7 +11,7 @@ License: MIT and Python and UCD
URL: http://pypy.org/
# Not available yet
-ExcludeArch: aarch64 armv7hl s390 s390x
+ExcludeArch: aarch64
# High-level configuration of the build:
@@ -311,7 +311,10 @@ find lib-python/%{pylibver} -name "*.py" -exec \
"{}" \
\;
+sed -i -r 's/\$\(LDFLAGSEXTRA\)/& -fuse-ld=gold/' ./rpython/translator/platform/posix.py
+
%build
+# Top memory usage is about 4.5GB on arm7hf
free
BuildPyPy() {
@@ -829,6 +832,9 @@ CheckPyPy pypy3-stackless
%changelog
+* Sat Nov 12 2016 Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl> - 5.5.0-2
+- Also build on arm and s390*
+
* Sat Oct 15 2016 Miro Hrončok <mhroncok(a)redhat.com> - 5.5.0-1
- PyPy 3.3 5.5.0
- On Fedora 26+, BR compat-openssl10-devel
commit 37fe95796cc55f2af8290bf78c32226b2ac09fc3
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Sat Nov 12 06:51:35 2016 -0500
Make the spec file a tiny bit shorter
diff --git a/pypy3.spec b/pypy3.spec
index 0245be9..b6e6d0b 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -260,7 +260,6 @@ CPU architecture.
%package libs
-Group: Development/Languages
Summary: Run-time libraries used by PyPy implementations of Python 3
# We supply an emacs mode for the JIT viewer.
@@ -274,7 +273,6 @@ Libraries required by the various PyPy implementations of Python 3.
%package devel
-Group: Development/Languages
Summary: Development tools for working with PyPy3
Requires: pypy3%{?_isa} = %{version}-%{release}
@@ -284,7 +282,6 @@ Header files for building C extension modules against PyPy3
%if 0%{with_stackless}
%package stackless
-Group: Development/Languages
Summary: Stackless Python interpreter built using PyPy3
Requires: pypy3-libs%{?_isa} = %{version}-%{release}
%description stackless
@@ -516,8 +513,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
+ln -s pypy3.3 %{buildroot}/%{_bindir}/pypy3
# 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
@@ -648,19 +645,17 @@ 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}/pypy3trace-mode.el
-cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/pypy3trace-mode.elc
+install -m0644 -p -D -t %{buildroot}/%{_emacs_sitelispdir} \
+ rpython/jit/tool/pypytrace-mode.{el,elc}
%endif
# Install macros for rpm:
-mkdir -p %{buildroot}/%{_rpmconfigdir}/macros.d
-install -m 644 %{SOURCE2} %{buildroot}/%{_rpmconfigdir}/macros.d
+install -m0644 -p -D -t %{buildroot}/%{_rpmconfigdir}/macros.d %{SOURCE2}
# 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
+rm -f %{buildroot}%{_libdir}/pypy3-5.2.0.tar.bz2 \
+ %{buildroot}%{pypyprefix}/LICENSE \
+ %{buildroot}%{pypyprefix}/README.rst
# wtf? This is probably masking some bigger problem, but let's do this for now
mv -v lib-python/3/test/regrtest.py-new lib-python/3/test/regrtest.py || :
commit 6b002d36f3cb6a967ccf98fb1e66330fdd7dda09
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Tue Nov 8 15:32:20 2016 -0500
Also exclude armv7hl
Build generates a lot of warnings and errors, and fails despite having
4GB RAM + 4GB swap available. The error is
/usr/bin/ld: failed to set dynamic section sizes: Memory exhausted
collect2: error: ld returned 1 exit status
but this might be caused by the earlier errors.
diff --git a/pypy3.spec b/pypy3.spec
index d6bb1dd..0245be9 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -3,7 +3,6 @@ Version: 5.5.0
Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
-Group: Development/Languages
# LGPL and another free license we'd need to ask spot about are present in some
# java jars that we're not building with atm (in fact, we're deleting them
# before building). If we restore those we'll have to work out the new
@@ -12,7 +11,7 @@ License: MIT and Python and UCD
URL: http://pypy.org/
# Not available yet
-ExcludeArch: aarch64 s390 s390x
+ExcludeArch: aarch64 armv7hl s390 s390x
# High-level configuration of the build:
commit 0b4deeff51596dd2f8ec1b9ced18caa60f6ddaa0
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Tue Nov 8 07:57:41 2016 -0500
Add BR for free
diff --git a/pypy3.spec b/pypy3.spec
index 3c5f5c5..d6bb1dd 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -225,6 +225,7 @@ BuildRequires: gc-devel
# For use in the selftests, for recording stats:
BuildRequires: time
+BuildRequires: /usr/bin/free
# For use in the selftests, for imposing a per-test timeout:
BuildRequires: perl
commit 56984a45242e2ed09394b206e3cda14aef15fafa
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Tue Nov 8 07:50:10 2016 -0500
Print the amount of available memory
diff --git a/pypy3.spec b/pypy3.spec
index 934a434..3c5f5c5 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -315,6 +315,7 @@ find lib-python/%{pylibver} -name "*.py" -exec \
\;
%build
+free
BuildPyPy() {
ExeName=$1
commit 693a83b0c291b9c876f08bdc5e81c6718bf71929
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Mon Nov 7 23:43:54 2016 -0500
Add a hack to fix tests, and restore building on ppc*
I didn't test ppc64le yet, but at least ppc64 builds fine with the kludge.
diff --git a/pypy3.spec b/pypy3.spec
index 0c266d0..934a434 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -12,7 +12,7 @@ License: MIT and Python and UCD
URL: http://pypy.org/
# Not available yet
-ExcludeArch: aarch64 s390 s390x ppc64le ppc64
+ExcludeArch: aarch64 s390 s390x
# High-level configuration of the build:
@@ -661,6 +661,9 @@ rm -f %{buildroot}%{_libdir}//pypy3-5.2.0.tar.bz2
rm -f %{buildroot}%{pypyprefix}/LICENSE
rm -f %{buildroot}%{pypyprefix}/README.rst
+# wtf? This is probably masking some bigger problem, but let's do this for now
+mv -v lib-python/3/test/regrtest.py-new lib-python/3/test/regrtest.py || :
+
%check
topdir=$(pwd)
commit 817c77d554b6dd380fd335a29c43dce88ba052a5
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Thu Nov 3 18:42:18 2016 -0400
Also exclude ppc64*
The tests are failing (looks like pypy wasn't tested on ppc64 at all),
and I cannot solve this without access to the hardware.
diff --git a/pypy3.spec b/pypy3.spec
index d826142..0c266d0 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -12,7 +12,7 @@ License: MIT and Python and UCD
URL: http://pypy.org/
# Not available yet
-ExcludeArch: aarch64 s390 s390x
+ExcludeArch: aarch64 s390 s390x ppc64le ppc64
# High-level configuration of the build:
commit aa6a9d04d6a20b99222a9e8db25a1e669ccc7eb4
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Thu Nov 3 14:49:28 2016 -0400
PPC64 has no faulthandler
diff --git a/011-no-faulthandler.patch b/011-no-faulthandler.patch
new file mode 100644
index 0000000..f0154eb
--- /dev/null
+++ b/011-no-faulthandler.patch
@@ -0,0 +1,53 @@
+diff --git pypy3-v5.5.0-src/lib-python/3/test/regrtest.py pypy3-v5.5.0-src/lib-python/3/test/regrtest.py-new
+index 8d18a9297a..e99322ebe1 100755
+--- pypy3-v5.5.0-src/lib-python/3/test/regrtest.py
++++ pypy3-v5.5.0-src/lib-python/3/test/regrtest.py-new
+@@ -169,7 +169,6 @@ option '-uall,-gui'.
+ import importlib
+
+ import builtins
+-import faulthandler
+ import getopt
+ import io
+ import json
+@@ -197,6 +196,10 @@ try:
+ import multiprocessing.process
+ except ImportError:
+ multiprocessing = None
++try:
++ import faulthandler
++except ImportError:
++ faulthandler = None
+
+
+ # Some times __path__ and __file__ are not absolute (e.g. while running from
+@@ -283,17 +286,18 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
+ on the command line.
+ """
+
+- # Display the Python traceback on fatal errors (e.g. segfault)
+- faulthandler.enable(all_threads=True)
+-
+- # Display the Python traceback on SIGALRM or SIGUSR1 signal
+- signals = []
+- if hasattr(signal, 'SIGALRM'):
+- signals.append(signal.SIGALRM)
+- if hasattr(signal, 'SIGUSR1'):
+- signals.append(signal.SIGUSR1)
+- for signum in signals:
+- faulthandler.register(signum, chain=True)
++ if faulthandler:
++ # Display the Python traceback on fatal errors (e.g. segfault)
++ faulthandler.enable(all_threads=True)
++
++ # Display the Python traceback on SIGALRM or SIGUSR1 signal
++ signals = []
++ if hasattr(signal, 'SIGALRM'):
++ signals.append(signal.SIGALRM)
++ if hasattr(signal, 'SIGUSR1'):
++ signals.append(signal.SIGUSR1)
++ for signum in signals:
++ faulthandler.register(signum, chain=True)
+
+ replace_stdout()
+
diff --git a/pypy3.spec b/pypy3.spec
index ea45edf..d826142 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -170,6 +170,9 @@ Patch4: 009-raise-an-error-when-STARTTLS-fails.patch
# Disabled HTTP header injections in http.client
Patch5: 010-disabled-HTTP-header-injections-in-http.client.patch
+# It seems ppc64 has no faulthandler
+Patch6: 011-no-faulthandler.patch
+
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
commit 347fb465b0fc7717f6e6b171b895c0c01f6d77a3
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sat Oct 22 14:52:20 2016 +0200
Exclude not available arches
diff --git a/pypy3.spec b/pypy3.spec
index 8652182..ea45edf 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -11,6 +11,9 @@ Group: Development/Languages
License: MIT and Python and UCD
URL: http://pypy.org/
+# Not available yet
+ExcludeArch: aarch64 s390 s390x
+
# High-level configuration of the build:
# PyPy consists of an implementation of an interpreter (with JIT compilation)
commit c12d8bfa0bbfd60c56c641dbe8d522681f3d35cf
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sat Oct 22 14:17:55 2016 +0200
Sources for 347975d
diff --git a/.gitignore b/.gitignore
index 60f26ec..3fcf7b6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
/pypy3-2.4.0-src.tar.bz2
/pypy3.3-v5.2.0-alpha1-src.tar.bz2
+/pypy3.3-v5.5.0-alpha-src.tar.bz2
diff --git a/sources b/sources
index 0e4fa7b..5155d51 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-e4bbd6fe42481a17f705611d76914eda pypy3.3-v5.2.0-alpha1-src.tar.bz2
+536008fd7b17af8878915393fc1ecfc3 pypy3.3-v5.5.0-alpha-src.tar.bz2
commit 347975dbf4523b2a8636ff70c59a5b537b9b4375
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sat Oct 22 14:11:41 2016 +0200
PyPy 3.3 5.5.0
diff --git a/pypy3.spec b/pypy3.spec
index 67819c7..8652182 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
-Version: 5.2.0
-Release: 0.1.alpha1%{?dist}
+Version: 5.5.0
+Release: 1%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -129,7 +129,7 @@ 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/pypy3.3-v5.2.0-alpha1-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy3.3-v%{version}-alpha-src.t...
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -201,13 +201,18 @@ BuildRequires: zlib-devel
BuildRequires: bzip2-devel
BuildRequires: ncurses-devel
BuildRequires: expat-devel
-BuildRequires: openssl-devel
BuildRequires: gdbm-devel
BuildRequires: xz-devel
%ifnarch s390
BuildRequires: valgrind-devel
%endif
+%if 0%{?fedora} >= 26
+BuildRequires: compat-openssl10-devel
+%else
+BuildRequires: openssl-devel
+%endif
+
%if %{run_selftests}
# Used by the selftests, though not by the build:
BuildRequires: gc-devel
@@ -281,7 +286,7 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%endif
%prep
-%autosetup -n pypy3.3-v5.2.0-alpha1-src -p1 -S git
+%autosetup -n pypy3-v%{version}-src -p1 -S git
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
@@ -803,6 +808,8 @@ CheckPyPy pypy3-stackless
%{_bindir}/pypy3.3
%{pypyprefix}/bin/
+%exclude %{_libdir}/%{name}-%{version}.tar.bz2
+
%files devel
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
@@ -817,6 +824,10 @@ CheckPyPy pypy3-stackless
%changelog
+* Sat Oct 15 2016 Miro Hrončok <mhroncok(a)redhat.com> - 5.5.0-1
+- PyPy 3.3 5.5.0
+- On Fedora 26+, BR compat-openssl10-devel
+
* Sat Jul 02 2016 Miro Hrončok <mhroncok(a)redhat.com> - 5.2.0-0.1.alpha1
- First alpha build of PyPy 3.3
commit 343676a8999d3e5b141b58ec6c9d8e167304ed9f
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Jul 8 14:38:18 2016 +0200
First alpha build of PyPy 3.3
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?= <miro(a)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(a)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
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?= <miro(a)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)
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/560a75090333b6de8a1de960acac5e...
-%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,35 +481,10 @@ InstallPyPy() {
mkdir -p %{buildroot}/%{_bindir}
mkdir -p %{buildroot}/%{pypyprefix}
-InstallPyPy %{name}
-
-%if 0%{with_stackless}
-InstallPyPy %{name}-stackless
-%endif
-
-# Install the various support libraries as described at:
-# http://codespeak.net/pypy/dist/pypy/doc/getting-started-python.html#insta...
-# 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 '.'
+# 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}
-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:
@@ -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(a)redhat.com> - 2.4.0-6
+* Sat Jul 02 2016 Miro Hrončok <mhroncok(a)redhat.com> - 5.2.0-0.1.alpha1
+- First alpha build of PyPy 3.3
+
+* Fri Jul 01 2016 Miro Hrončok <mhroncok(a)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(a)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(a)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(a)in.waw.pl> - 2.4.0-3
-- Bump release to rebuild with new execstack
-
* Thu Jun 18 2015 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 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
commit 092bdc18b3bd62174ce8db6323a5a1f59d080fd9
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri Jul 1 15:59:13 2016 +0200
Fix for CVE-2016-0772 and CVE-2016-5699
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
- rhbz#1351680: https://bugzilla.redhat.com/show_bug.cgi?id=1351680
- Fixed upstream: https://hg.python.org/cpython/rev/d590114c2394
Fix for: CVE-2016-5699 python: http protocol steam injection attack
- rhbz#1303699: https://bugzilla.redhat.com/show_bug.cgi?id=1303699
- rhbz#1351687: https://bugzilla.redhat.com/show_bug.cgi?id=1351687
- Fixed upstream: https://hg.python.org/cpython/rev/bf3e1c9b80e9
diff --git a/009-raise-an-error-when-STARTTLS-fails.patch b/009-raise-an-error-when-STARTTLS-fails.patch
new file mode 100644
index 0000000..ba1cc53
--- /dev/null
+++ b/009-raise-an-error-when-STARTTLS-fails.patch
@@ -0,0 +1,35 @@
+From 9092f6266c3054befff053aa943632856cedbdba Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro(a)hroncok.cz>
+Date: Fri, 1 Jul 2016 11:42:53 +0200
+Subject: [PATCH] Raise an error when STARTTLS fails
+
+CVE-2016-0772 python: smtplib StartTLS stripping attack
+rhbz#1303647: https://bugzilla.redhat.com/show_bug.cgi?id=1303647
+rhbz#1351680: https://bugzilla.redhat.com/show_bug.cgi?id=1351680
+
+Based on an upstream change by Benjamin Peterson <benjamin(a)python.org>
+- in changeset 101887:d590114c2394 3.4
+- https://hg.python.org/cpython/rev/d590114c2394
+---
+ lib-python/3/smtplib.py | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/lib-python/3/smtplib.py b/lib-python/3/smtplib.py
+index 679e478..1aacfaf 100644
+--- a/lib-python/3/smtplib.py
++++ b/lib-python/3/smtplib.py
+@@ -666,6 +666,11 @@ class SMTP:
+ self.ehlo_resp = None
+ self.esmtp_features = {}
+ self.does_esmtp = 0
++ else:
++ # RFC 3207:
++ # 501 Syntax error (no parameters allowed)
++ # 454 TLS not available due to temporary reason
++ raise SMTPResponseException(resp, reply)
+ return (resp, reply)
+
+ def sendmail(self, from_addr, to_addrs, msg, mail_options=[],
+--
+2.9.0
+
diff --git a/010-disabled-HTTP-header-injections-in-http.client.patch b/010-disabled-HTTP-header-injections-in-http.client.patch
new file mode 100644
index 0000000..10591d5
--- /dev/null
+++ b/010-disabled-HTTP-header-injections-in-http.client.patch
@@ -0,0 +1,163 @@
+From 82dc922c7c4771ef789f5b395f54a603c693b05e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro(a)hroncok.cz>
+Date: Fri, 1 Jul 2016 13:08:55 +0200
+Subject: [PATCH] Disabled HTTP header injections in http.client.
+
+CVE-2016-5699 python: http protocol steam injection attack
+rhbz#1303699: https://bugzilla.redhat.com/show_bug.cgi?id=1303699
+rhbz#1351687: https://bugzilla.redhat.com/show_bug.cgi?id=1351687
+
+Based on an upstream change by Demian Brecht and Serhiy Storchaka
+- in changeset 94952:bf3e1c9b80e9 3.4
+- https://hg.python.org/cpython/rev/bf3e1c9b80e9
+---
+ lib-python/3/http/client.py | 37 +++++++++++++++++++++++++
+ lib-python/3/test/test_httplib.py | 57 +++++++++++++++++++++++++++++++++++++++
+ 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
+--- a/lib-python/3/http/client.py
++++ b/lib-python/3/http/client.py
+@@ -70,6 +70,7 @@ import email.parser
+ import email.message
+ import io
+ import os
++import re
+ import socket
+ import collections
+ from urllib.parse import urlsplit
+@@ -207,6 +208,34 @@ MAXAMOUNT = 1048576
+ # maximal line length when calling readline().
+ _MAXLINE = 65536
+
++# Header name/value ABNF (http://tools.ietf.org/html/rfc7230#section-3.2)
++#
++# VCHAR = %x21-7E
++# obs-text = %x80-FF
++# header-field = field-name ":" OWS field-value OWS
++# field-name = token
++# field-value = *( field-content / obs-fold )
++# field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
++# field-vchar = VCHAR / obs-text
++#
++# obs-fold = CRLF 1*( SP / HTAB )
++# ; obsolete line folding
++# ; see Section 3.2.4
++
++# token = 1*tchar
++#
++# tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*"
++# / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~"
++# / DIGIT / ALPHA
++# ; any VCHAR, except delimiters
++#
++# VCHAR defined in http://tools.ietf.org/html/rfc5234#appendix-B.1
++
++# the patterns for both name and value are more leniant than RFC
++# definitions to allow for backwards compatibility
++_is_legal_header_name = re.compile(b'^[^:\s][^:\r\n]*$').match
++_is_illegal_header_value = re.compile(b'\n(?![ \t])|\r(?![ \t\n])').search
++
+ 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:
+
+ if hasattr(header, 'encode'):
+ header = header.encode('ascii')
++
++ if not _is_legal_header_name(header):
++ raise ValueError('Invalid header name %r' % (header,))
++
+ values = list(values)
+ for i, one_value in enumerate(values):
+ if hasattr(one_value, 'encode'):
+ values[i] = one_value.encode('latin1')
+ elif isinstance(one_value, int):
+ values[i] = str(one_value).encode('ascii')
++
++ if _is_illegal_header_value(values[i]):
++ raise ValueError('Invalid header value %r' % (values[i],))
++
+ value = b'\r\n\t'.join(values)
+ 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
+--- 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)
+
++ conn.putheader('Foo', ' bar ')
++ self.assertIn(b'Foo: bar ', conn._buffer)
++ conn.putheader('Bar', '\tbaz\t')
++ self.assertIn(b'Bar: \tbaz\t', conn._buffer)
++ conn.putheader('Authorization', 'Bearer mytoken')
++ self.assertIn(b'Authorization: Bearer mytoken', conn._buffer)
++ conn.putheader('IterHeader', 'IterA', 'IterB')
++ self.assertIn(b'IterHeader: IterA\r\n\tIterB', conn._buffer)
++ conn.putheader('LatinHeader', b'\xFF')
++ self.assertIn(b'LatinHeader: \xFF', conn._buffer)
++ conn.putheader('Utf8Header', b'\xc3\x80')
++ self.assertIn(b'Utf8Header: \xc3\x80', conn._buffer)
++ conn.putheader('C1-Control', b'next\x85line')
++ self.assertIn(b'C1-Control: next\x85line', conn._buffer)
++ conn.putheader('Embedded-Fold-Space', 'is\r\n allowed')
++ self.assertIn(b'Embedded-Fold-Space: is\r\n allowed', conn._buffer)
++ conn.putheader('Embedded-Fold-Tab', 'is\r\n\tallowed')
++ self.assertIn(b'Embedded-Fold-Tab: is\r\n\tallowed', conn._buffer)
++ conn.putheader('Key Space', 'value')
++ self.assertIn(b'Key Space: value', conn._buffer)
++ conn.putheader('KeySpace ', 'value')
++ self.assertIn(b'KeySpace : value', conn._buffer)
++ conn.putheader(b'Nonbreak\xa0Space', 'value')
++ self.assertIn(b'Nonbreak\xa0Space: value', conn._buffer)
++ conn.putheader(b'\xa0NonbreakSpace', 'value')
++ self.assertIn(b'\xa0NonbreakSpace: value', conn._buffer)
++
+ def test_ipv6host_header(self):
+ # Default host header on IPv6 transaction should wrapped by [] if
+ # its actual IPv6 address
+@@ -153,6 +180,36 @@ class HeaderTests(TestCase):
+ conn.request('GET', '/foo')
+ self.assertTrue(sock.data.startswith(expected))
+
++ def test_invalid_headers(self):
++ conn = client.HTTPConnection('example.com')
++ conn.sock = FakeSocket('')
++ conn.putrequest('GET', '/')
++
++ # http://tools.ietf.org/html/rfc7230#section-3.2.4, whitespace is no
++ # longer allowed in header names
++ cases = (
++ (b'Invalid\r\nName', b'ValidValue'),
++ (b'Invalid\rName', b'ValidValue'),
++ (b'Invalid\nName', b'ValidValue'),
++ (b'\r\nInvalidName', b'ValidValue'),
++ (b'\rInvalidName', b'ValidValue'),
++ (b'\nInvalidName', b'ValidValue'),
++ (b' InvalidName', b'ValidValue'),
++ (b'\tInvalidName', b'ValidValue'),
++ (b'Invalid:Name', b'ValidValue'),
++ (b':InvalidName', b'ValidValue'),
++ (b'ValidName', b'Invalid\r\nValue'),
++ (b'ValidName', b'Invalid\rValue'),
++ (b'ValidName', b'Invalid\nValue'),
++ (b'ValidName', b'InvalidValue\r\n'),
++ (b'ValidName', b'InvalidValue\r'),
++ (b'ValidName', b'InvalidValue\n'),
++ )
++ for name, value in cases:
++ with self.subTest((name, value)):
++ with self.assertRaisesRegex(ValueError, 'Invalid header'):
++ conn.putheader(name, value)
++
+
+ class BasicTest(TestCase):
+ def test_status_lines(self):
+--
+2.9.0
+
diff --git a/pypy3.spec b/pypy3.spec
index e31b4d4..5666e56 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 2.4.0
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -156,6 +156,20 @@ Patch2: 007-remove-startup-message.patch
# 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
+# rhbz#1351680: https://bugzilla.redhat.com/show_bug.cgi?id=1351680
+# FIXED UPSTREAM: https://hg.python.org/cpython/rev/d590114c2394
+# Raise an error when STARTTLS fails
+Patch4: 009-raise-an-error-when-STARTTLS-fails.patch
+
+# CVE-2016-5699 python: http protocol steam injection attack
+# rhbz#1303699: https://bugzilla.redhat.com/show_bug.cgi?id=1303699
+# rhbz#1351687: https://bugzilla.redhat.com/show_bug.cgi?id=1351687
+# FIXED UPSTREAM: https://hg.python.org/cpython/rev/bf3e1c9b80e9
+# Disabled HTTP header injections in http.client
+Patch5: 010-disabled-HTTP-header-injections-in-http.client.patch
+
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
@@ -842,6 +856,17 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri Jul 01 2016 Miro Hrončok <mhroncok(a)redhat.com> - 2.4.0-6
+- 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
+- rhbz#1351680: https://bugzilla.redhat.com/show_bug.cgi?id=1351680
+- Fixed upstream: https://hg.python.org/cpython/rev/d590114c2394
+- Fix for: CVE-2016-5699 python: http protocol steam injection attack
+- rhbz#1303699: https://bugzilla.redhat.com/show_bug.cgi?id=1303699
+- 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(a)redhat.com> - 2.4.0-5
- Fix FTBFS (#1307889)
- Add patch to fix maximum recursion depth error during build
commit 4a3038ff5634b498b5afbf2552eeec9ae5d6e03b
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Fri May 13 02:07:16 2016 +0200
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
diff --git a/008-maximum-recursion-depth.patch b/008-maximum-recursion-depth.patch
new file mode 100644
index 0000000..6d3d157
--- /dev/null
+++ b/008-maximum-recursion-depth.patch
@@ -0,0 +1,179 @@
+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/pypy3.spec b/pypy3.spec
index 53c2241..e31b4d4 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 2.4.0
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -152,6 +152,9 @@ 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
# Build-time requirements:
@@ -287,6 +290,20 @@ 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/560a75090333b6de8a1de960acac5e...
+%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() {
@@ -348,7 +365,8 @@ BuildPyPy() {
# of root pointers:
%global gcrootfinder_options --gcrootfinder=shadowstack
- export CFLAGS=$(echo "$RPM_OPT_FLAGS")
+ # Prevent memory exhaustion
+ export CFLAGS=$(echo "$RPM_OPT_FLAGS" | sed -e 's/-g//')
%else
# Go with the default, which is "asmgcc"
@@ -367,7 +385,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//')
+ 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//')
%endif
@@ -824,6 +842,12 @@ CheckPyPy %{name}-stackless
%changelog
+* Fri May 13 2016 Miro Hrončok <mhroncok(a)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(a)fedoraproject.org> - 2.4.0-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
commit 37de776457faff9eeedd146ed613f098a688d9cf
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Thu Feb 4 18:47:53 2016 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
diff --git a/pypy3.spec b/pypy3.spec
index 04952a9..53c2241 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 2.4.0
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -824,6 +824,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Thu Feb 04 2016 Fedora Release Engineering <releng(a)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(a)in.waw.pl> - 2.4.0-3
- Bump release to rebuild with new execstack
commit ffbf97517e896aea68cb51cb99a36e5bf95422e8
Author: Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl>
Date: Tue Aug 4 11:50:06 2015 -0400
Bump release to rebuild with new execstack
diff --git a/pypy3.spec b/pypy3.spec
index afc59f7..04952a9 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 2.4.0
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -824,6 +824,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Tue Aug 04 2015 Zbigniew Jędrzejewski-Szmek <zbyszek(a)in.waw.pl> - 2.4.0-3
+- Bump release to rebuild with new execstack
+
* Thu Jun 18 2015 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.4.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
commit a039768e93ec1249319bb9b49149c6981717b0ab
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Thu Jun 18 18:15:59 2015 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
diff --git a/pypy3.spec b/pypy3.spec
index fbacd83..afc59f7 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -1,6 +1,6 @@
Name: pypy3
Version: 2.4.0
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python 3 implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -824,6 +824,9 @@ CheckPyPy %{name}-stackless
%changelog
+* Thu Jun 18 2015 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.4.0-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
+
* Wed Sep 10 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.4.0-1
- Update to 2.4.0
commit a7f7d048aa94963f46c11bea18071aef0fb8c954
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Thu Jun 11 11:40:02 2015 +0200
Sync with pypy
diff --git a/pypy3.spec b/pypy3.spec
index 6e6bd46..fbacd83 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -116,7 +116,7 @@ URL: http://pypy.org/
# Easy way to turn off the selftests:
%global run_selftests 1
-%global pypyprefix %{_libdir}/pypy3-%{version}
+%global pypyprefix %{_libdir}/%{name}-%{version}
%global pylibver 3
# We refer to this subdir of the source tree in a few places during the build:
@@ -129,11 +129,11 @@ 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/pypy3-2.4.0-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/%{name}-%{version}-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
-Source2: macros.pypy3
+Source2: macros.%{name}
# By default, if built at a tty, the translation process renders a Mandelbrot
# set to indicate progress.
@@ -217,7 +217,7 @@ BuildRequires: emacs
BuildRequires: git
# Metadata for the core package (the JIT build):
-Requires: pypy3-libs%{?_isa} = %{version}-%{release}
+Requires: %{name}-libs%{?_isa} = %{version}-%{release}
%description
PyPy's implementation of Python 3, featuring a Just-In-Time compiler on some CPU
@@ -249,7 +249,7 @@ Libraries required by the various PyPy implementations of Python 3.
%package devel
Group: Development/Languages
Summary: Development tools for working with PyPy3
-Requires: pypy3%{?_isa} = %{version}-%{release}
+Requires: %{name}%{?_isa} = %{version}-%{release}
%description devel
Header files for building C extension modules against PyPy3
@@ -259,13 +259,13 @@ Header files for building C extension modules against PyPy3
%package stackless
Group: Development/Languages
Summary: Stackless Python interpreter built using PyPy3
-Requires: pypy3-libs%{?_isa} = %{version}-%{release}
+Requires: %{name}-libs%{?_isa} = %{version}-%{release}
%description stackless
Build of PyPy3 with support for micro-threads for massive concurrency
%endif
%prep
-%autosetup -n pypy3-2.4.0-src -p1 -S git
+%autosetup -n %{name}-%{version}-src -p1 -S git
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
@@ -410,7 +410,7 @@ BuildPyPy() {
}
BuildPyPy \
- pypy3 \
+ %{name} \
%if 0%{with_jit}
"-Ojit" \
%else
@@ -420,7 +420,7 @@ BuildPyPy \
%if 0%{with_stackless}
BuildPyPy \
- pypy3-stackless \
+ %{name}-stackless \
"--stackless"
%endif
@@ -466,10 +466,10 @@ InstallPyPy() {
mkdir -p %{buildroot}/%{_bindir}
mkdir -p %{buildroot}/%{pypyprefix}
-InstallPyPy pypy3
+InstallPyPy %{name}
%if 0%{with_stackless}
-InstallPyPy pypy3-stackless
+InstallPyPy %{name}-stackless
%endif
@@ -572,16 +572,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}/pypy3 \
+ %{buildroot}/%{_bindir}/%{name} \
0
-%{buildroot}/%{pypyprefix}/pypy3 -c 'import _tkinter'
-%{buildroot}/%{pypyprefix}/pypy3 -c 'import tkinter'
-%{buildroot}/%{pypyprefix}/pypy3 -c 'import _sqlite3'
-%{buildroot}/%{pypyprefix}/pypy3 -c 'import _curses'
-%{buildroot}/%{pypyprefix}/pypy3 -c 'import curses'
-%{buildroot}/%{pypyprefix}/pypy3 -c 'import syslog'
-%{buildroot}/%{pypyprefix}/pypy3 -c 'from _sqlite3 import *'
+%{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 *'
# Header files for C extension modules.
# Upstream's packaging process (pypy/tool/release/package.py)
@@ -645,8 +645,8 @@ 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}/pypy3trace-mode.el
-cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/pypy3trace-mode.elc
+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
%endif
# Install macros for rpm:
@@ -775,10 +775,10 @@ CheckPyPy() {
#pypy/goal/pypy pypy/test_all.py --resultlog=pypyjit_new.log
%if %{run_selftests}
-CheckPyPy pypy3
+CheckPyPy %{name}
%if 0%{with_stackless}
-CheckPyPy pypy3-stackless
+CheckPyPy %{name}-stackless
%endif
%endif # run_selftests
@@ -800,26 +800,26 @@ CheckPyPy pypy3-stackless
%{pypyprefix}/lib_pypy/
%{pypyprefix}/site-packages/
%if %{with_emacs}
-%{_emacs_sitelispdir}/pypy3trace-mode.el
-%{_emacs_sitelispdir}/pypy3trace-mode.elc
+%{_emacs_sitelispdir}/%{name}trace-mode.el
+%{_emacs_sitelispdir}/%{name}trace-mode.elc
%endif
%files
%license LICENSE
%doc README.rst
-%{_bindir}/pypy3
-%{pypyprefix}/pypy3
+%{_bindir}/%{name}
+%{pypyprefix}/%{name}
%files devel
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
-%{_rpmconfigdir}/macros.d/macros.pypy3
+%{_rpmconfigdir}/macros.d/macros.%{name}
%if 0%{with_stackless}
%files stackless
%license LICENSE
%doc README.rst
-%{_bindir}/pypy-stackless
+%{_bindir}/%{name}-stackless
%endif
commit 908d523efb68df54d872af8a8c6324e0f8f7f106
Merge: ff9537b 5f5775a
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sun May 10 16:16:10 2015 +0200
Merge with pypy + package review (#1215732) history
commit 5f5775aa52401c7c7261d2e610fa796420e51b9d
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sun May 10 16:04:51 2015 +0200
Remove unused patches
diff --git a/008-fix-dynamic-symbols-script.patch b/008-fix-dynamic-symbols-script.patch
deleted file mode 100644
index 5b1d551..0000000
--- a/008-fix-dynamic-symbols-script.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-diff --git a/pypy/translator/platform/posix.py b/pypy/translator/platform/posix.py
---- a/pypy/translator/platform/posix.py
-+++ b/pypy/translator/platform/posix.py
-@@ -48,8 +48,10 @@
- response_file = self._make_response_file("dynamic-symbols-")
- f = response_file.open("w")
- f.write("{\n")
-+ f.write(" global:\n")
- for sym in eci.export_symbols:
-- f.write("%s;\n" % (sym,))
-+ f.write(" %s;\n" % (sym,))
-+ f.write(" local:*;\n")
- f.write("};")
- f.close()
-
diff --git a/config.patch b/config.patch
deleted file mode 100644
index bf81d7d..0000000
--- a/config.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-diff -rup pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py
---- pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py 2013-05-27 10:35:37.679237332 +0200
-+++ pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py 2013-05-27 10:47:41.506354482 +0200
-@@ -32,19 +32,20 @@ class BaseLinux(BasePosix):
- return self._pkg_config("libffi", "--libs-only-L",
- ['/usr/lib/libffi'])
-
-- def library_dirs_for_libffi_a(self):
-- # places where we need to look for libffi.a
-- # XXX obscuuure! only look for libffi.a if run with translate.py
-- if 'translate' in sys.modules:
-- if sys.maxint > 2**32:
-- host = 'x86_64'
-- else:
-- host = 'x86'
-- return self.library_dirs_for_libffi() + [
-- '/usr/lib',
-- '/usr/lib/%s-linux-gnu/' % host]
-- else:
-- return []
-+ #Fedora, at least, has the shared version but not the static:
-+ #def library_dirs_for_libffi_a(self):
-+ # # places where we need to look for libffi.a
-+ # # XXX obscuuure! only look for libffi.a if run with translate.py
-+ # if 'translate' in sys.modules:
-+ # if sys.maxint > 2**32:
-+ # host = 'x86_64'
-+ # else:
-+ # host = 'x86'
-+ # return self.library_dirs_for_libffi() + [
-+ # '/usr/lib',
-+ # '/usr/lib/%s-linux-gnu/' % host]
-+ # else:
-+ # return []
-
-
- class Linux(BaseLinux):
diff --git a/more-readable-c-code.patch b/more-readable-c-code.patch
deleted file mode 100644
index 92d340f..0000000
--- a/more-readable-c-code.patch
+++ /dev/null
@@ -1,693 +0,0 @@
-diff -up pypy-pypy-release-1.7/pypy/interpreter/pycode.py.more-readable-c-code pypy-pypy-release-1.7/pypy/interpreter/pycode.py
---- pypy-pypy-release-1.7/pypy/interpreter/pycode.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/interpreter/pycode.py 2011-11-21 16:16:15.673463780 -0500
-@@ -13,6 +13,7 @@ from pypy.interpreter.gateway import Non
- from pypy.interpreter.astcompiler.consts import (
- CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS, CO_NESTED,
- CO_GENERATOR, CO_CONTAINSGLOBALS)
-+from pypy.interpreter.pytraceback import offset2lineno
- from pypy.rlib.rarithmetic import intmask
- from pypy.rlib.debug import make_sure_not_resized
- from pypy.rlib import jit
-@@ -81,6 +82,7 @@ class PyCode(eval.Code):
- self.hidden_applevel = hidden_applevel
- self.magic = magic
- self._signature = cpython_code_signature(self)
-+ self._cached_source = None
- self._initialize()
-
- def _initialize(self):
-@@ -397,3 +399,23 @@ class PyCode(eval.Code):
-
- def repr(self, space):
- return space.wrap(self.get_repr())
-+
-+ def get_linenum_for_offset(self, offset):
-+ # Given a bytecode offset, return a 1-based index into the lines of the
-+ # source code
-+ return offset2lineno(self, offset)
-+
-+ def _ensure_source(self):
-+ # Lazily grab the source lines into self._cached_source (or raise
-+ # an IOError)
-+ if not self._cached_source:
-+ f = open(self.co_filename, 'r')
-+ source = [line.rstrip() for line in f.readlines()]
-+ f.close()
-+ self._cached_source = source
-+
-+ def get_source_text(self, linenum):
-+ # Given a 1-based index, get the corresponding line of source code (or
-+ # raise an IOError)
-+ self._ensure_source()
-+ return self._cached_source[linenum - 1]
-diff -up pypy-pypy-release-1.7/pypy/objspace/flow/model.py.more-readable-c-code pypy-pypy-release-1.7/pypy/objspace/flow/model.py
---- pypy-pypy-release-1.7/pypy/objspace/flow/model.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/objspace/flow/model.py 2011-11-21 16:15:36.599466455 -0500
-@@ -31,6 +31,120 @@ from pypy.tool.identity_dict import iden
-
- __metaclass__ = type
-
-+class SourceLoc(object):
-+ # A srcloc is a specific location within the RPython source code,
-+ # intended for human display
-+ __slots__ = ('code', # code object
-+ 'linenum' # 1-based index, as displayed to a user
-+ )
-+ def __init__(self, code, linenum):
-+ self.code = code
-+ self.linenum = linenum
-+
-+ def get_text(self):
-+ # Get the actual source text of this line
-+ return self.code.get_source_text(self.linenum)
-+
-+ def __eq__(self, other):
-+ return self.code == other.code and self.linenum == other.linenum
-+
-+ def __ne__(self, other):
-+ if other:
-+ return self.code != other.code or self.linenum != other.linenum
-+ else:
-+ return True
-+
-+class CodeLoc(object):
-+ # A codeloc is a specific location within the RPython bytecode
-+ __slots__ = ('code', # code object
-+ 'offset' # int index into bytecode, or -1
-+ )
-+
-+ def __init__(self, code, offset):
-+ self.code = code
-+ self.offset = offset
-+
-+ def __str__(self):
-+ if self.offset >= 0:
-+ return "%s@%d" % (self.code.co_name, self.offset)
-+ else:
-+ return ""
-+
-+ def __ne__(self, other):
-+ if other:
-+ return self.code != other.code or self.offset != other.offset
-+ else:
-+ return True
-+
-+ def __cmp__(self, other):
-+ # Partial ordering, for those locations that have an offset:
-+ if other:
-+ if self.offset >= 0 and other.offset >= 0:
-+ return self.offset - other.offset
-+ return 0
-+
-+ def get_source_loc(self):
-+ # Convert to a SourceLoc:
-+ return SourceLoc(self.code, self.code.get_linenum_for_offset(self.offset))
-+
-+class OperationLoc(object):
-+ # An oploc is the location within the RPython source code of a given
-+ # operation
-+ #
-+ # This is a list consisting of CodeLoc instances, some of which may be None
-+ #
-+ # For the simple case, this is list of length 1 with a single CodeLoc
-+ #
-+ # For an operation inside an inlined callsite, we have a list of length 2:
-+ # [codeloc of callsite,
-+ # codeloc of operation within inlined body]
-+ #
-+ # For more interesting inlined cases, we have a chain of source locations:
-+ # [codeloc of callsite,
-+ # codeloc of inner callsite,
-+ # ... ,
-+ # codeloc of innermost inlined callsite,
-+ # codeloc of operation within inlined body]
-+ #
-+
-+ __slots__ = ('codelocs', )
-+
-+ def __init__(self, codelocs):
-+ self.codelocs = codelocs
-+
-+ def __str__(self):
-+ return '[' + ' > '.join(str(codeloc) for codeloc in self.codelocs) + ']'
-+
-+ def __cmp__(self, other):
-+ return cmp(self.codelocs, other.codelocs)
-+
-+def block_comparator(blk0, blk1):
-+ '''
-+ Sort function for blocks, putting them in an ordering that attempts to
-+ maximize readability of the generated C code
-+ '''
-+ # print 'comparing %r and %r' % (blk0, blk1)
-+ # Put the start/end block at the top/bottom:
-+ if blk0.isstartblock:
-+ return -1
-+
-+ if blk1.isstartblock:
-+ return 1
-+
-+ # Order blocks by the offset, where present:
-+ if blk0.operations:
-+ if blk1.operations:
-+ return cmp(blk0.operations[0].oploc, blk1.operations[0].oploc)
-+ else:
-+ return -1
-+ else:
-+ if blk1.operations:
-+ return 1
-+ else:
-+ return 0
-+
-+def edge_comparator(edge0, edge1):
-+ return block_comparator(edge0.target, edge1.target)
-
- class FunctionGraph(object):
- __slots__ = ['startblock', 'returnblock', 'exceptblock', '__dict__']
-@@ -94,6 +208,21 @@ class FunctionGraph(object):
- seen[block] = True
- stack += block.exits[::-1]
-
-+ def iterblocks_by_source(self):
-+ # Try to preserve logical source ordering in the blocks
-+ block = self.startblock
-+ yield block
-+ seen = {block: True}
-+ stack = list(block.exits[::-1])
-+ stack.sort(edge_comparator)
-+ while stack:
-+ block = stack.pop().target
-+ if block not in seen:
-+ yield block
-+ seen[block] = True
-+ stack += block.exits[::-1]
-+ stack.sort(edge_comparator)
-+
- def iterlinks(self):
- block = self.startblock
- seen = {block: True}
-@@ -183,14 +312,14 @@ class Block(object):
- self.exits = [] # list of Link(s)
-
- def at(self):
-- if self.operations and self.operations[0].offset >= 0:
-- return "@%d" % self.operations[0].offset
-+ if self.operations:
-+ return str(self.operations[0].oploc)
- else:
- return ""
-
- def __str__(self):
- if self.operations:
-- txt = "block@%d" % self.operations[0].offset
-+ txt = "block%s" % self.operations[0].oploc
- else:
- if (not self.exits) and len(self.inputargs) == 1:
- txt = "return block"
-@@ -245,6 +374,21 @@ class Block(object):
- from pypy.translator.tool.graphpage import try_show
- try_show(self)
-
-+ def isreturnblock(self):
-+ return (not self.operations) and (not self.exits) and len(self.inputargs) == 1
-+
-+ def get_base_label(self, blocknum):
-+ # Generate a more friendly C label for this block
-+ if self.operations:
-+ txt = "block"
-+ elif (not self.exits) and len(self.inputargs) == 1:
-+ txt = "return_block"
-+ elif (not self.exits) and len(self.inputargs) == 2:
-+ txt = "raise_block"
-+ else:
-+ txt = "codeless_block"
-+ return '%s%d' % (txt, blocknum)
-+
-
- class Variable(object):
- __slots__ = ["_name", "_nr", "concretetype"]
-@@ -331,13 +475,15 @@ class WrapException(Exception):
-
-
- class SpaceOperation(object):
-- __slots__ = "opname args result offset".split()
-+ __slots__ = "opname args result oploc".split()
-
-- def __init__(self, opname, args, result, offset=-1):
-+ def __init__(self, opname, args, result, oploc=None):
- self.opname = intern(opname) # operation name
- self.args = list(args) # mixed list of var/const
- self.result = result # either Variable or Constant instance
-- self.offset = offset # offset in code string
-+ if oploc is None:
-+ oploc = OperationLoc([None])
-+ self.oploc = oploc
-
- def __eq__(self, other):
- return (self.__class__ is other.__class__ and
-@@ -352,8 +498,9 @@ class SpaceOperation(object):
- return hash((self.opname,tuple(self.args),self.result))
-
- def __repr__(self):
-- return "%r = %s(%s)" % (self.result, self.opname,
-- ", ".join(map(repr, self.args)))
-+ return "%r = %s(%s) (%s)" % (self.result, self.opname,
-+ ", ".join(map(repr, self.args)),
-+ self.oploc)
-
- class Atom(object):
- def __init__(self, name):
-@@ -427,8 +574,7 @@ def copygraph(graph, shallow=False, varm
- for op in oplist:
- copyop = SpaceOperation(op.opname,
- [copyvar(v) for v in op.args],
-- copyvar(op.result), op.offset)
-- #copyop.offset = op.offset
-+ copyvar(op.result), op.oploc)
- result.append(copyop)
- return result
- newblock.operations = copyoplist(block.operations)
-diff -up pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py.more-readable-c-code pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py
---- pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py 2011-11-21 16:15:36.600466455 -0500
-@@ -315,7 +315,9 @@ class FlowObjSpace(ObjSpace):
- def do_operation(self, name, *args_w):
- spaceop = SpaceOperation(name, args_w, Variable())
- if hasattr(self, 'executioncontext'): # not here during bootstrapping
-- spaceop.offset = self.executioncontext.crnt_offset
-+ codeloc = CodeLoc(self.executioncontext.code,
-+ self.executioncontext.crnt_offset)
-+ spaceop.oploc = OperationLoc([codeloc])
- self.executioncontext.recorder.append(spaceop)
- return spaceop.result
-
-diff -up pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py.more-readable-c-code pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py
---- pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py 2011-11-21 16:15:36.600466455 -0500
-@@ -119,3 +119,25 @@ def test_variable():
- assert v2.renamed
- assert v2.name.startswith("foobar_") and v2.name != v.name
- assert v2.name.split('_', 1)[1].isdigit()
-+
-+def test_source_locations():
-+ # Invent some random offsets into the code:
-+ co = sample_function.__code__
-+ codelocA = CodeLoc(co, 42)
-+ codelocB = CodeLoc(co, 87)
-+
-+ assert str(codelocA) == 'sample_function@42'
-+ assert str(codelocB) == 'sample_function@87'
-+
-+ assert cmp(codelocA, codelocB) < 0
-+ assert cmp(codelocB, codelocA) > 0
-+
-+ oplocA = OperationLoc([codelocA])
-+ oplocB = OperationLoc([codelocB])
-+
-+ assert str(oplocA) == '[sample_function@42]'
-+ assert str(oplocB) == '[sample_function@87]'
-+
-+ assert cmp(oplocA, oplocB) < 0
-+ assert cmp(oplocB, oplocA) > 0
-+
-diff -up pypy-pypy-release-1.7/pypy/rpython/rtyper.py.more-readable-c-code pypy-pypy-release-1.7/pypy/rpython/rtyper.py
---- pypy-pypy-release-1.7/pypy/rpython/rtyper.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/rpython/rtyper.py 2011-11-21 16:15:36.601466455 -0500
-@@ -800,7 +800,7 @@ class HighLevelOp(object):
- return vars
-
- def genop(self, opname, args_v, resulttype=None):
-- return self.llops.genop(opname, args_v, resulttype)
-+ return self.llops.genop(opname, args_v, resulttype, self.spaceop.oploc)
-
- def gendirectcall(self, ll_function, *args_v):
- return self.llops.gendirectcall(ll_function, *args_v)
-@@ -935,7 +935,7 @@ class LowLevelOpList(list):
- v.concretetype))
- return v
-
-- def genop(self, opname, args_v, resulttype=None):
-+ def genop(self, opname, args_v, resulttype=None, oploc=None):
- try:
- for v in args_v:
- v.concretetype
-@@ -944,7 +944,7 @@ class LowLevelOpList(list):
- " and pass its result to genop(),"
- " never hop.args_v directly.")
- vresult = Variable()
-- self.append(SpaceOperation(opname, args_v, vresult))
-+ self.append(SpaceOperation(opname, args_v, vresult, oploc))
- if resulttype is None:
- vresult.concretetype = Void
- return None
-diff -up pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py
---- pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py 2011-11-21 16:15:36.601466455 -0500
-@@ -4,6 +4,7 @@ from pypy.translator.simplify import get
- from pypy.translator.unsimplify import copyvar
- from pypy.objspace.flow.model import Variable, Constant, Block, Link
- from pypy.objspace.flow.model import SpaceOperation, c_last_exception
-+from pypy.objspace.flow.model import OperationLoc
- from pypy.objspace.flow.model import FunctionGraph
- from pypy.objspace.flow.model import mkentrymap, checkgraph
- from pypy.annotation import model as annmodel
-@@ -231,6 +232,7 @@ class BaseInliner(object):
- self.varmap = {}
- self._copied_blocks = {}
- self.op = block.operations[index_operation]
-+ self.callsite_oploc = self.op.oploc
- self.graph_to_inline = self.get_graph_from_op(self.op)
- self.exception_guarded = False
- if (block.exitswitch == c_last_exception and
-@@ -290,7 +292,9 @@ class BaseInliner(object):
-
- def copy_operation(self, op):
- args = [self.get_new_name(arg) for arg in op.args]
-- result = SpaceOperation(op.opname, args, self.get_new_name(op.result))
-+ new_oploc = OperationLoc(self.callsite_oploc.codelocs[:] + op.oploc.codelocs[:])
-+ result = SpaceOperation(op.opname, args, self.get_new_name(op.result),
-+ new_oploc)
- return result
-
- def copy_block(self, block):
-diff -up pypy-pypy-release-1.7/pypy/translator/c/funcgen.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/c/funcgen.py
---- pypy-pypy-release-1.7/pypy/translator/c/funcgen.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/c/funcgen.py 2011-11-21 16:15:36.602466455 -0500
-@@ -1,4 +1,6 @@
- import sys
-+import inspect
-+import dis
- from pypy.translator.c.support import USESLOTS # set to False if necessary while refactoring
- from pypy.translator.c.support import cdecl
- from pypy.translator.c.support import llvalue_from_constant, gen_assignments
-@@ -22,6 +24,38 @@ LOCALVAR = 'l_%s'
-
- KEEP_INLINED_GRAPHS = False
-
-+def block_comparator(blk0, blk1):
-+ '''
-+ Sort function for blocks, putting them in an ordering that attempts to
-+ maximize readability of the generated C code
-+ '''
-+ # print 'comparing %r and %r' % (blk0, blk1)
-+ # Put the start/end block at the top/bottom:
-+ if blk0.isstartblock:
-+ return -1
-+
-+ if blk1.isstartblock:
-+ return 1
-+
-+ # Order blocks by the offset, where present:
-+ if blk0.operations:
-+ if blk1.operations:
-+ return cmp(blk0.operations[0].oploc, blk1.operations[0].oploc)
-+ else:
-+ return -1
-+ else:
-+ if blk1.operations:
-+ return 1
-+ else:
-+ return 0
-+
-+def escape_c_comments(py_src):
-+ # Escape C comments within RPython source, to avoid generating bogus
-+ # comments in our generated C source:
-+ py_src = py_src.replace('/*', '')
-+ py_src = py_src.replace('*/', '')
-+ return py_src
-+
- class FunctionCodeGenerator(object):
- """
- Collects information about a function which we have to generate
-@@ -207,14 +241,57 @@ class FunctionCodeGenerator(object):
-
- def cfunction_body(self):
- graph = self.graph
-- yield 'goto block0;' # to avoid a warning "this label is not used"
-+ # Try to print python source code:
-+ if hasattr(graph, 'func'):
-+ filename = inspect.getfile(graph.func)
-+ #yield '/* name: %r */' % filename
-+ try:
-+ src, startline = inspect.getsourcelines(graph.func)
-+ except IOError:
-+ pass # No source found
-+ except IndexError:
-+ pass # Bulletproofing
-+ else:
-+ yield '/* Python source %r' % filename
-+ for i, line in enumerate(src):
-+ line = line.rstrip()
-+ line = escape_c_comments(line)
-+ # FuncNode.funcgen_implementation treats lines ending in ':'
-+ # as C blocks, which messes up the formatting.
-+ # Work around this:
-+ if line.endswith(':'):
-+ line += ' '
-+ yield ' * %4d : %s' % (startline + i, line)
-+ yield ' */'
-+
-+ label = graph.startblock.get_base_label(self.blocknum[graph.startblock])
-+ yield 'goto %s;' % label # to avoid a warning "this label is not used"
-+
-+ # Sort the blocks into a (hopefully) readable order:
-+ blocks = list(graph.iterblocks_by_source())
-+ blocks.sort(block_comparator)
-
- # generate the body of each block
-- for block in graph.iterblocks():
-+ for block in blocks:
-+ cursrcloc = None
- myblocknum = self.blocknum[block]
- yield ''
-- yield 'block%d:' % myblocknum
-+ yield '%s:' % block.get_base_label(myblocknum)
-+ #yield "/* repr(block): %r */" % (block, )
-+ #yield "/* type(block): %r */" % (type(block), )
- for i, op in enumerate(block.operations):
-+ #yield "/* type(op): %r */" % (type(op), )
-+ #yield "/* op.oploc: %s */" % (op.oploc, )
-+ codeloc = op.oploc.codelocs[-1]
-+ if codeloc:
-+ srcloc = codeloc.get_source_loc()
-+ if srcloc != cursrcloc:
-+ try:
-+ yield "/* %s:%d : %s */" % (codeloc.code.co_name, srcloc.linenum, escape_c_comments(srcloc.get_text()))
-+ cursrcloc = srcloc
-+ except IOError:
-+ pass
-+
- for line in self.gen_op(op):
- yield line
- if len(block.exits) == 0:
-@@ -306,7 +383,7 @@ class FunctionCodeGenerator(object):
- assignments.append((a2typename, dest, src))
- for line in gen_assignments(assignments):
- yield line
-- label = 'block%d' % self.blocknum[link.target]
-+ label = link.target.get_base_label(self.blocknum[link.target])
- if link.target in self.innerloops:
- loop = self.innerloops[link.target]
- if link is loop.links[-1]: # link that ends a loop
-diff -up pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py
---- pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py 2011-11-21 16:15:36.602466455 -0500
-@@ -1,4 +1,5 @@
- import autopath, sys, os, py
-+import re
- from pypy.rpython.lltypesystem.lltype import *
- from pypy.annotation import model as annmodel
- from pypy.translator.translator import TranslationContext
-@@ -532,3 +533,130 @@ def test_inhibit_tail_call():
- else:
- assert 0, "the call was not found in the C source"
- assert 'PYPY_INHIBIT_TAIL_CALL();' in lines[i+1]
-+
-+def get_generated_c_source(fn, types):
-+ # Return a (optimized fn, c source code, c source filename) 3-tuple
-+ t = Translation(fn)
-+ t.annotate(types)
-+ c_filename_path = t.source_c()
-+ h = c_filename_path.open()
-+ src = h.read()
-+ h.close()
-+ c_fn = t.compile_c()
-+ return (c_fn, src, c_filename_path)
-+
-+def extract_c_function(c_src, fname):
-+ # Extract the source for a given C function out of a the given src string
-+ # Makes assumptions about the layout of the source
-+ pattern = '^(.+) \**%s\(.*\) {$' % fname
-+ within_fn = False
-+ result = ''
-+ for line in c_src.splitlines():
-+ if within_fn:
-+ result += line + '\n'
-+ if line.startswith('}'):
-+ return result
-+ else:
-+ m = re.match(pattern, line)
-+ if m:
-+ within_fn = True
-+ result += line + '\n'
-+ return result
-+
-+
-+
-+def test_generated_c_source():
-+ # Verify that generate C source "looks good"
-+ # We'll use is_perfect_number, as it contains a loop and a conditional
-+
-+ # Generate C source code
-+ from pypy.translator.test.snippet import is_perfect_number
-+ c_fn, c_src, c_filename_path = get_generated_c_source(is_perfect_number,
-+ [int])
-+
-+ # Locate the C source for the type-specialized function:
-+ c_fn_src = extract_c_function(c_src, 'pypy_g_is_perfect_number')
-+
-+ # Verify that the C source contains embedded comments containing the lines
-+ # of the python source:
-+ expected_comment_lines = [
-+ '/* is_perfect_number:31 : while div < n: */',
-+ '/* is_perfect_number:32 : if n % div == 0: */',
-+ '/* is_perfect_number:33 : sum += div */',
-+ '/* is_perfect_number:34 : div += 1 */',
-+ '/* is_perfect_number:35 : return n == sum */']
-+ for exp_line in expected_comment_lines:
-+ assert exp_line in c_fn_src
-+
-+ # Verify that the lines occur in the correct order
-+ # ...we do this by filtering the function's generated C source to just
-+ # those lines containing our comments (and dropping whitespace):
-+ lines = c_fn_src.splitlines()
-+ lines = [line.strip()
-+ for line in lines
-+ if '/* is_perfect_number:' in line]
-+
-+ # ...we should now have exact equality: the ordering should be as expected,
-+ # and each comment should appear exactly once:
-+ assert lines == expected_comment_lines
-+
-+ # Ensure that the generated C function does the right thing:
-+ assert c_fn(5) == False
-+ assert c_fn(6) == True
-+ assert c_fn(7) == False
-+
-+ assert c_fn(5.0) == False
-+ assert c_fn(6.0) == True
-+ assert c_fn(7.0) == False
-+
-+ assert c_fn(5L) == False
-+ assert c_fn(6L) == True
-+ assert c_fn(7L) == False
-+
-+ try:
-+ c_fn('hello world')
-+ except:
-+ pass
-+ else:
-+ raise 'Was expected exception'
-+
-+def test_escaping_c_comments():
-+ # Ensure that c comments within RPython code get escaped when we generate
-+ # our .c code (to avoid generating bogus C)
-+ # See e.g. pypy.module.cpyext.dictobject's PyDict_Next, which has a
-+ # docstring embedding a C comment
-+ def c_style_comment(a, b):
-+ '''Here is a C-style comment within an RPython docstring:
-+ /* hello world */
-+ '''
-+ # and here's one in a string literal:
-+ return '/* hello world a:%s b:%s */' % (a, b)
-+
-+ def cplusplus_style_comment(a, b):
-+ '''Here is a C++-style comment within an RPython docstring:
-+ // hello world
-+ '''
-+ # and here are some in string literals, and one as the floor division
-+ # operator:
-+ return '// hello world: a // b = %s' % (a // b)
-+
-+ for fn_name, exp_output in [('c_style_comment',
-+ '/* hello world a:6 b:3 */'),
-+ ('cplusplus_style_comment',
-+ '// hello world: a // b = 2')]:
-+ fn = locals()[fn_name]
-+
-+ c_fn, c_src, c_filename_path = get_generated_c_source(fn, [int, int])
-+ # If the above survived, then the C compiler managed to handle
-+ # the generated C code
-+
-+ # Verify that the generated code works (i.e. that we didn't
-+ # accidentally change the meaning):
-+ assert c_fn(6, 3) == exp_output
-+
-+ # Ensure that at least part of the docstrings made it into the C
-+ # code:
-+ c_fn_src = extract_c_function(c_src, 'pypy_g_' + fn_name)
-+ assert 'Here is a ' in c_fn_src
-+ assert 'style comment within an RPython docstring' in c_fn_src
-+
-diff -up pypy-pypy-release-1.7/pypy/translator/driver.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/driver.py
---- pypy-pypy-release-1.7/pypy/translator/driver.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/driver.py 2011-11-21 16:15:36.603466455 -0500
-@@ -535,6 +535,7 @@ class TranslationDriver(SimpleTaskEngine
- dstname = self.compute_exe_name() + '.staticdata.info'
- shutil.copy(str(fname), str(dstname))
- self.log.info('Static data info written to %s' % dstname)
-+ return c_source_filename
-
- #
- task_source_c = taskdef(task_source_c, ['database_c'], "Generating c source")
-diff -up pypy-pypy-release-1.7/pypy/translator/gensupp.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/gensupp.py
---- pypy-pypy-release-1.7/pypy/translator/gensupp.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/gensupp.py 2011-11-21 16:15:36.603466455 -0500
-@@ -14,8 +14,8 @@ def ordered_blocks(graph):
- allblocks = []
- for block in graph.iterblocks():
- # first we order by offset in the code string
-- if block.operations:
-- ofs = block.operations[0].offset
-+ if block.operations and block.operations[0].oploc.codelocs[0]:
-+ ofs = block.operations[0].oploc.codelocs[0].offset
- else:
- ofs = sys.maxint
- # then we order by input variable name or value
-diff -up pypy-pypy-release-1.7/pypy/translator/interactive.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/interactive.py
---- pypy-pypy-release-1.7/pypy/translator/interactive.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/interactive.py 2011-11-21 16:15:36.604466454 -0500
-@@ -138,7 +138,7 @@ class Translation(object):
- def source_c(self, argtypes=None, **kwds):
- self.update_options(argtypes, kwds)
- self.ensure_backend('c')
-- self.driver.source_c()
-+ return self.driver.source_c()
-
- def source_cl(self, argtypes=None, **kwds):
- self.update_options(argtypes, kwds)
-diff -up pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py
---- pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py 2011-11-21 16:15:36.604466454 -0500
-@@ -59,6 +59,8 @@ def new_wrapper(func, translator, newnam
- # "return result"
- block = Block(wrapper_inputargs)
- wgraph = FunctionGraph('pyfn_' + (newname or func.func_name), block)
-+ if hasattr(graph, 'func'):
-+ wgraph.func = graph.func
- translator.update_call_graph(wgraph, graph, object())
- translator.graphs.append(wgraph)
- block.operations[:] = newops
-diff -up pypy-pypy-release-1.7/pypy/translator/simplify.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/simplify.py
---- pypy-pypy-release-1.7/pypy/translator/simplify.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/simplify.py 2011-11-21 16:15:36.605466454 -0500
-@@ -292,7 +292,7 @@ def join_blocks(graph):
- return renaming.get(v, v)
- def rename_op(op):
- args = [rename(a) for a in op.args]
-- op = SpaceOperation(op.opname, args, rename(op.result), op.offset)
-+ op = SpaceOperation(op.opname, args, rename(op.result), op.oploc)
- # special case...
- if op.opname == 'indirect_call':
- if isinstance(op.args[0], Constant):
diff --git a/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch b/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
deleted file mode 100644
index 2391f32..0000000
--- a/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -rup pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py
---- pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py 2013-05-27 10:35:37.762237806 +0200
-+++ pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py 2013-05-28 10:13:03.182536196 +0200
-@@ -587,7 +587,7 @@ class ProcessTestCase(BaseTestCase):
- for i in range(1024):
- # Windows raises IOError. Others raise OSError.
- with self.assertRaises(EnvironmentError) as c:
-- subprocess.Popen(['nonexisting_i_hope'],
-+ subprocess.Popen(['/usr/bin/nonexisting_i_hope'],
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- # ignore errors that indicate the command was not found
commit ff9537b3ed920fc031a5b18ab8b27efd0a194202
Author: Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org>
Date: Fri May 8 17:05:34 2015 +0000
Initial setup of the repo
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e69de29
diff --git a/sources b/sources
new file mode 100644
index 0000000..e69de29
commit 36afc7f79102c83960c3d6bf8f4a8620554c0137
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue May 5 18:32:38 2015 +0200
Replace all lib-python python shebangs with pypy
diff --git a/pypy3.spec b/pypy3.spec
index edbfd2f..6e6bd46 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -281,6 +281,11 @@ for f in rpython/translator/goal/bpnn.py ; do
chmod a-x $f
done
+# Replace all lib-python python shebangs with pypy
+find lib-python/%{pylibver} -name "*.py" -exec \
+ sed -r -i '1s|^#!\s*/usr/bin.*python.*|#!/usr/bin/%{name}|' \
+ "{}" \
+ \;
%build
commit 976314ef808d7b7dbe2bc8961a5de2deae1cdc9f
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon May 4 12:49:51 2015 +0200
Build with pypy
diff --git a/pypy3.spec b/pypy3.spec
index 218ce3e..edbfd2f 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -161,7 +161,9 @@ Patch2: 007-remove-startup-message.patch
# Turn it off with this boolean, to revert back to rebuilding using CPython
# and avoid a cycle in the build-time dependency graph:
-%global use_self_when_building 0
+# Note, pypy3 is built with pypy2, so no dependency cycle
+
+%global use_self_when_building 1
%if 0%{use_self_when_building}
# pypy3 can only be build with pypy2
BuildRequires: pypy
commit 980f988cc4d495d359155cf3c1d12b2dfc81a08f
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon May 4 12:48:44 2015 +0200
BR git for %autosetup -S git
diff --git a/pypy3.spec b/pypy3.spec
index 77ffa2d..218ce3e 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -211,6 +211,8 @@ BuildRequires: /usr/bin/execstack
BuildRequires: emacs
%endif
+# For %%autosetup -S git
+BuildRequires: git
# Metadata for the core package (the JIT build):
Requires: pypy3-libs%{?_isa} = %{version}-%{release}
commit 819b9f5595c2ac93d1a8a693a647a006f2c9bbc0
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon May 4 12:47:32 2015 +0200
Use %global instead of %define
diff --git a/pypy3.spec b/pypy3.spec
index e992b00..77ffa2d 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -337,14 +337,14 @@ BuildPyPy() {
# This is the most portable option, and avoids a reliance on non-guaranteed
# behaviors within GCC's code generator: use an explicitly-maintained stack
# of root pointers:
- %define gcrootfinder_options --gcrootfinder=shadowstack
+ %global gcrootfinder_options --gcrootfinder=shadowstack
export CFLAGS=$(echo "$RPM_OPT_FLAGS")
%else
# Go with the default, which is "asmgcc"
- %define gcrootfinder_options %{nil}
+ %global gcrootfinder_options %{nil}
# https://bugzilla.redhat.com/show_bug.cgi?id=588941#c18
# The generated Makefile compiles the .c files into assembler (.s), rather
commit 524d40e5a2091088f5a28f16c996b757acbeb06b
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Apr 28 20:05:42 2015 +0200
Remove build script from the package
diff --git a/pypy3.spec b/pypy3.spec
index 3b40c9a..e992b00 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -644,6 +644,9 @@ cp -a rpython/jit/tool/pypytrace-mode.elc %{buildroot}/%{_emacs_sitelispdir}/pyp
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
+
%check
topdir=$(pwd)
commit cfca1560fdf042a07e2f7108eafc072b93f2617c
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Apr 28 20:01:21 2015 +0200
Use git in %autosetup to avoid .orig files
diff --git a/pypy3.spec b/pypy3.spec
index 2f9ed15..3b40c9a 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -261,7 +261,7 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%endif
%prep
-%autosetup -n pypy3-2.4.0-src -p1
+%autosetup -n pypy3-2.4.0-src -p1 -S git
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
commit 1120251a081f3a611d8d3f742b184985833e9998
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Apr 28 19:58:39 2015 +0200
Change python-devel to python2-devel
diff --git a/pypy3.spec b/pypy3.spec
index 0c5b340..2f9ed15 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -170,7 +170,7 @@ BuildRequires: pypy
# pypy3 can only be build with python2
-BuildRequires: python-devel
+BuildRequires: python2-devel
%global bootstrap_python_interp python
%endif
commit a7610e26e5c7a0bbaa8a7810daa04a625ae357af
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Tue Apr 28 19:51:45 2015 +0200
Don't mark RPM macros in /etc as %config
diff --git a/pypy3.spec b/pypy3.spec
index d9e54fd..0c5b340 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -801,7 +801,7 @@ CheckPyPy pypy3-stackless
%files devel
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
-%config(noreplace) %{_rpmconfigdir}/macros.d/macros.pypy3
+%{_rpmconfigdir}/macros.d/macros.pypy3
%if 0%{with_stackless}
%files stackless
commit 7e82938b0f41850371be195e7be814fedd889d08
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon Apr 27 18:35:23 2015 +0200
Share the docdir across subpackages
diff --git a/pypy3.spec b/pypy3.spec
index 85a2dfc..d9e54fd 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -771,6 +771,10 @@ CheckPyPy pypy3-stackless
%endif # run_selftests
+# Because there's a bunch of binary subpackages and creating
+# /usr/share/licenses/pypy3-this and /usr/share/licenses/pypy3-that
+# is just confusing for the user.
+%global _docdir_fmt %{name}
%files libs
%license LICENSE
commit 1842b1b13e95edfcea412981ed8f4cbe3e7a8383
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon Apr 27 18:26:21 2015 +0200
Require pypy3-libs with %{?_isa}
diff --git a/pypy3.spec b/pypy3.spec
index 93e53f0..85a2dfc 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -213,7 +213,7 @@ BuildRequires: emacs
# Metadata for the core package (the JIT build):
-Requires: pypy3-libs = %{version}-%{release}
+Requires: pypy3-libs%{?_isa} = %{version}-%{release}
%description
PyPy's implementation of Python 3, featuring a Just-In-Time compiler on some CPU
@@ -245,7 +245,7 @@ Libraries required by the various PyPy implementations of Python 3.
%package devel
Group: Development/Languages
Summary: Development tools for working with PyPy3
-Requires: pypy3 = %{version}-%{release}
+Requires: pypy3%{?_isa} = %{version}-%{release}
%description devel
Header files for building C extension modules against PyPy3
@@ -255,7 +255,7 @@ Header files for building C extension modules against PyPy3
%package stackless
Group: Development/Languages
Summary: Stackless Python interpreter built using PyPy3
-Requires: pypy3-libs = %{version}-%{release}
+Requires: pypy3-libs%{?_isa} = %{version}-%{release}
%description stackless
Build of PyPy3 with support for micro-threads for massive concurrency
%endif
commit 7e5676a0456e5e3c711d481fe1e949c0448975ec
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon Apr 27 18:24:57 2015 +0200
Use %autosetup
diff --git a/pypy3.spec b/pypy3.spec
index 99c2a31..93e53f0 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -261,10 +261,7 @@ Build of PyPy3 with support for micro-threads for massive concurrency
%endif
%prep
-%setup -q -n pypy3-2.4.0-src
-%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
-%patch1 -p1
-%patch2 -p1
+%autosetup -n pypy3-2.4.0-src -p1
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
commit e7218e672da6a8e5c553080c36c8e72087e55817
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon Apr 27 18:16:19 2015 +0200
Use %license
diff --git a/pypy3.spec b/pypy3.spec
index 5bee793..99c2a31 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -776,7 +776,8 @@ CheckPyPy pypy3-stackless
%files libs
-%doc LICENSE README.rst
+%license LICENSE
+%doc README.rst
%dir %{pypyprefix}
%dir %{pypyprefix}/lib-python
@@ -791,7 +792,8 @@ CheckPyPy pypy3-stackless
%endif
%files
-%doc LICENSE README.rst
+%license LICENSE
+%doc README.rst
%{_bindir}/pypy3
%{pypyprefix}/pypy3
@@ -802,7 +804,8 @@ CheckPyPy pypy3-stackless
%if 0%{with_stackless}
%files stackless
-%doc LICENSE README.rst
+%license LICENSE
+%doc README.rst
%{_bindir}/pypy-stackless
%endif
commit 146960e8a0ae6b7d82f10d6a2c24e60cf3eadd59
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Mon Apr 27 18:15:27 2015 +0200
Removed deprecated statements
diff --git a/pypy3.spec b/pypy3.spec
index 95ee959..5bee793 100644
--- a/pypy3.spec
+++ b/pypy3.spec
@@ -10,7 +10,6 @@ Group: Development/Languages
# licensing terms
License: MIT and Python and UCD
URL: http://pypy.org/
-BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# High-level configuration of the build:
@@ -425,8 +424,6 @@ BuildPyPy \
%install
-rm -rf $RPM_BUILD_ROOT
-
# Install the various executables:
InstallPyPy() {
@@ -778,12 +775,7 @@ CheckPyPy pypy3-stackless
%endif # run_selftests
-%clean
-rm -rf $RPM_BUILD_ROOT
-
-
%files libs
-%defattr(-,root,root,-)
%doc LICENSE README.rst
%dir %{pypyprefix}
@@ -799,20 +791,17 @@ rm -rf $RPM_BUILD_ROOT
%endif
%files
-%defattr(-,root,root,-)
%doc LICENSE README.rst
%{_bindir}/pypy3
%{pypyprefix}/pypy3
%files devel
-%defattr(-,root,root,-)
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
%config(noreplace) %{_rpmconfigdir}/macros.d/macros.pypy3
%if 0%{with_stackless}
%files stackless
-%defattr(-,root,root,-)
%doc LICENSE README.rst
%{_bindir}/pypy-stackless
%endif
commit 26c3863db65451cb67c67cd4e72a826698ef7bdf
Author: Miro Hrončok <miro(a)hroncok.cz>
Date: Sat Apr 25 00:48:59 2015 +0200
Change pypy2 spec to pypy3
diff --git a/.gitignore b/.gitignore
index a61aa79..c9f3d9d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,14 +1 @@
-/pypy-1.4.1-src.tar.bz2
-/pypy-1.5-src.tar.bz2
-/release-1.6.tar.bz2
-/release-1.7.tar.bz2
-/release-1.8.tar.bz2
-/release-1.9.tar.bz2
-/release-2.0-beta-1.tar.bz2
-/release-2.0.2.tar.bz2
-/release-2.1.0.tar.bz2
-/pypy-2.2-src.tar.bz2
-/pypy-2.2.1-src.tar.bz2
-/pypy-2.3-src.tar.bz2
-/release-2.3.1.tar.bz2
-/pypy-2.4.0-src.tar.bz2
+/pypy3-2.4.0-src.tar.bz2
diff --git a/macros.pypy b/macros.pypy
deleted file mode 100644
index 5f40b6f..0000000
--- a/macros.pypy
+++ /dev/null
@@ -1,5 +0,0 @@
-%__pypy /usr/bin/pypy
-%pypy_sitelib %(%{__pypy} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
-%pypy_sitearch %(%{__pypy} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")
-%pypy_version %(%{__pypy} -c "import sys; sys.stdout.write(sys.version[:3])")
-%pypydir %{_builddir}/pypy-%{name}-%{version}-%{release}
diff --git a/macros.pypy3 b/macros.pypy3
new file mode 100644
index 0000000..ef1f600
--- /dev/null
+++ b/macros.pypy3
@@ -0,0 +1,5 @@
+%__pypy3 /usr/bin/pypy3
+%pypy3_sitelib %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
+%pypy3_sitearch %(%{__pypy3} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")
+%pypy3_version %(%{__pypy3} -c "import sys; sys.stdout.write(sys.version[:3])")
+%pypy3dir %{_builddir}/pypy3-%{name}-%{version}-%{release}
diff --git a/pypy.spec b/pypy3.spec
similarity index 94%
rename from pypy.spec
rename to pypy3.spec
index 4a3e56c..95ee959 100644
--- a/pypy.spec
+++ b/pypy3.spec
@@ -1,7 +1,7 @@
-Name: pypy
+Name: pypy3
Version: 2.4.0
Release: 1%{?dist}
-Summary: Python implementation with a Just-In-Time compiler
+Summary: Python 3 implementation with a Just-In-Time compiler
Group: Development/Languages
# LGPL and another free license we'd need to ask spot about are present in some
@@ -117,8 +117,8 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# Easy way to turn off the selftests:
%global run_selftests 1
-%global pypyprefix %{_libdir}/pypy-%{version}
-%global pylibver 2.7
+%global pypyprefix %{_libdir}/pypy3-%{version}
+%global pylibver 3
# We refer to this subdir of the source tree in a few places during the build:
%global goal_dir pypy/goal
@@ -130,11 +130,11 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(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/pypy-2.4.0-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy3-2.4.0-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
-Source2: macros.pypy
+Source2: macros.pypy3
# By default, if built at a tty, the translation process renders a Mandelbrot
# set to indicate progress.
@@ -164,19 +164,15 @@ Patch2: 007-remove-startup-message.patch
%global use_self_when_building 0
%if 0%{use_self_when_building}
+# pypy3 can only be build with pypy2
BuildRequires: pypy
%global bootstrap_python_interp pypy
%else
-# Python 2.6 or later is needed, so on RHEL5 (2.4) we need to use the alternate
-# python26 rpm:
-%if 0%{?rhel} == 5
-BuildRequires: python26-devel
-%global bootstrap_python_interp python26
-%else
+
+# pypy3 can only be build with python2
BuildRequires: python-devel
%global bootstrap_python_interp python
-%endif
%endif
@@ -218,10 +214,10 @@ BuildRequires: emacs
# Metadata for the core package (the JIT build):
-Requires: pypy-libs = %{version}-%{release}
+Requires: pypy3-libs = %{version}-%{release}
%description
-PyPy's implementation of Python, featuring a Just-In-Time compiler on some CPU
+PyPy's implementation of Python 3, featuring a Just-In-Time compiler on some CPU
architectures, and various optimized implementations of the standard types
(strings, dictionaries, etc)
@@ -235,7 +231,7 @@ CPU architecture.
%package libs
Group: Development/Languages
-Summary: Run-time libraries used by PyPy implementations of Python
+Summary: Run-time libraries used by PyPy implementations of Python 3
# We supply an emacs mode for the JIT viewer.
# (This doesn't bring in all of emacs, just the directory structure)
@@ -244,39 +240,29 @@ Requires: emacs-filesystem >= %{_emacs_version}
%endif
%description libs
-Libraries required by the various PyPy implementations of Python.
+Libraries required by the various PyPy implementations of Python 3.
%package devel
Group: Development/Languages
-Summary: Development tools for working with PyPy
-Requires: pypy = %{version}-%{release}
+Summary: Development tools for working with PyPy3
+Requires: pypy3 = %{version}-%{release}
%description devel
-Header files for building C extension modules against PyPy
+Header files for building C extension modules against PyPy3
%if 0%{with_stackless}
%package stackless
Group: Development/Languages
-Summary: Stackless Python interpreter built using PyPy
-Requires: pypy-libs = %{version}-%{release}
+Summary: Stackless Python interpreter built using PyPy3
+Requires: pypy3-libs = %{version}-%{release}
%description stackless
-Build of PyPy with support for micro-threads for massive concurrency
+Build of PyPy3 with support for micro-threads for massive concurrency
%endif
-%if 0%{with_stackless}
-%package stackless
-Group: Development/Languages
-Summary: Stackless Python interpreter built using PyPy
-Requires: pypy-libs = %{version}-%{release}
-%description stackless
-Build of PyPy with support for micro-threads for massive concurrency
-%endif
-
-
%prep
-%setup -q -n pypy-2.4.0-src
+%setup -q -n pypy3-2.4.0-src
%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
%patch1 -p1
%patch2 -p1
@@ -295,8 +281,6 @@ for f in rpython/translator/goal/bpnn.py ; do
chmod a-x $f
done
-rm -rf lib-python/3
-
%build
@@ -421,7 +405,7 @@ BuildPyPy() {
}
BuildPyPy \
- pypy \
+ pypy3 \
%if 0%{with_jit}
"-Ojit" \
%else
@@ -431,7 +415,7 @@ BuildPyPy \
%if 0%{with_stackless}
BuildPyPy \
- pypy-stackless \
+ pypy3-stackless \
"--stackless"
%endif
@@ -479,10 +463,10 @@ InstallPyPy() {
mkdir -p %{buildroot}/%{_bindir}
mkdir -p %{buildroot}/%{pypyprefix}
-InstallPyPy pypy
+InstallPyPy pypy3
%if 0%{with_stackless}
-InstallPyPy pypy-stackless
+InstallPyPy pypy3-stackless
%endif
@@ -585,16 +569,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}/pypy \
+ %{buildroot}/%{_bindir}/pypy3 \
0
-%{buildroot}/%{pypyprefix}/pypy -c 'import _tkinter'
-%{buildroot}/%{pypyprefix}/pypy -c 'import Tkinter'
-%{buildroot}/%{pypyprefix}/pypy -c 'import _sqlite3'
-%{buildroot}/%{pypyprefix}/pypy -c 'import _curses'
-%{buildroot}/%{pypyprefix}/pypy -c 'import curses'
-%{buildroot}/%{pypyprefix}/pypy -c 'import syslog'
-%{buildroot}/%{pypyprefix}/pypy -c 'from _sqlite3 import *'
+%{buildroot}/%{pypyprefix}/pypy3 -c 'import _tkinter'
+%{buildroot}/%{pypyprefix}/pypy3 -c 'import tkinter'
+%{buildroot}/%{pypyprefix}/pypy3 -c 'import _sqlite3'
+%{buildroot}/%{pypyprefix}/pypy3 -c 'import _curses'
+%{buildroot}/%{pypyprefix}/pypy3 -c 'import curses'
+%{buildroot}/%{pypyprefix}/pypy3 -c 'import syslog'
+%{buildroot}/%{pypyprefix}/pypy3 -c 'from _sqlite3 import *'
# Header files for C extension modules.
# Upstream's packaging process (pypy/tool/release/package.py)
@@ -658,7 +642,8 @@ 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}
+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:
@@ -694,7 +679,7 @@ CheckPyPy() {
# Use regrtest to explicitly list all tests:
( ./$ExeName -c \
- "from test.regrtest import findtests; print '\n'.join(findtests())"
+ "from test.regrtest import findtests; print('\n'.join(findtests()))"
) > testnames.txt
# Skip some tests:
@@ -784,10 +769,10 @@ CheckPyPy() {
#pypy/goal/pypy pypy/test_all.py --resultlog=pypyjit_new.log
%if %{run_selftests}
-CheckPyPy pypy
+CheckPyPy pypy3
%if 0%{with_stackless}
-CheckPyPy pypy-stackless
+CheckPyPy pypy3-stackless
%endif
%endif # run_selftests
@@ -809,21 +794,21 @@ rm -rf $RPM_BUILD_ROOT
%{pypyprefix}/lib_pypy/
%{pypyprefix}/site-packages/
%if %{with_emacs}
-%{_emacs_sitelispdir}/pypytrace-mode.el
-%{_emacs_sitelispdir}/pypytrace-mode.elc
+%{_emacs_sitelispdir}/pypy3trace-mode.el
+%{_emacs_sitelispdir}/pypy3trace-mode.elc
%endif
%files
%defattr(-,root,root,-)
%doc LICENSE README.rst
-%{_bindir}/pypy
-%{pypyprefix}/pypy
+%{_bindir}/pypy3
+%{pypyprefix}/pypy3
%files devel
%defattr(-,root,root,-)
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
-%config(noreplace) %{_rpmconfigdir}/macros.d/macros.pypy
+%config(noreplace) %{_rpmconfigdir}/macros.d/macros.pypy3
%if 0%{with_stackless}
%files stackless
diff --git a/sources b/sources
index ab6b8f5..e4d98b7 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-6a25a212e7c5121f1f3988c118d05695 pypy-2.4.0-src.tar.bz2
+96ba72916114d16904e12562b5d84e51 pypy3-2.4.0-src.tar.bz2
commit e76c4a29685bfaf725af1ae1991d5b1fb7b7701c
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Tue Sep 23 12:20:25 2014 +0200
Update to 2.4.0
diff --git a/.gitignore b/.gitignore
index 1babd6b..a61aa79 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,4 @@
/pypy-2.2.1-src.tar.bz2
/pypy-2.3-src.tar.bz2
/release-2.3.1.tar.bz2
+/pypy-2.4.0-src.tar.bz2
diff --git a/pypy.spec b/pypy.spec
index daf5015..4a3e56c 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 2.3.1
-Release: 4%{?dist}
+Version: 2.4.0
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -130,7 +130,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-2.3.1.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy-2.4.0-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -276,7 +276,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-32f35069a16d
+%setup -q -n pypy-2.4.0-src
%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
%patch1 -p1
%patch2 -p1
@@ -295,6 +295,8 @@ for f in rpython/translator/goal/bpnn.py ; do
chmod a-x $f
done
+rm -rf lib-python/3
+
%build
@@ -832,6 +834,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Wed Sep 10 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.4.0-1
+- Update to 2.4.0
+
* Tue Sep 02 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3.1-4
- Move devel subpackage requires so that it gets picked up by rpm
diff --git a/sources b/sources
index b80a17c..ab6b8f5 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-e9d26e6ed2ca809a791d88137e90629b release-2.3.1.tar.bz2
+6a25a212e7c5121f1f3988c118d05695 pypy-2.4.0-src.tar.bz2
commit f7434bab3f45aaf75e2d6b05664c9fd78197c10a
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Tue Sep 2 10:01:18 2014 +0200
Bump spec
diff --git a/pypy.spec b/pypy.spec
index 6f90d89..daf5015 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.3.1
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -832,6 +832,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Sep 02 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3.1-4
+- Move devel subpackage requires so that it gets picked up by rpm
+
* Sun Aug 17 2014 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.3.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
commit 5efcdc8fe2e02fffb9ffce1004f3d25a8e86d593
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Tue Sep 2 09:57:46 2014 +0200
Move devel subpackage requires so that it gets picked up by rpm
Up to this point it belonged to the description, so pypy-devel
did not require pypy.
diff --git a/pypy.spec b/pypy.spec
index f811755..6f90d89 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -250,11 +250,11 @@ Libraries required by the various PyPy implementations of Python.
%package devel
Group: Development/Languages
Summary: Development tools for working with PyPy
+Requires: pypy = %{version}-%{release}
+
%description devel
Header files for building C extension modules against PyPy
-Requires: pypy = %{version}-%{release}
-
%if 0%{with_stackless}
%package stackless
commit 7498717b84a98b28987846d94baf9177cf5b36ee
Author: Peter Robinson <pbrobinson(a)fedoraproject.org>
Date: Sun Aug 17 20:41:57 2014 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
diff --git a/pypy.spec b/pypy.spec
index 8ab5959..f811755 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.3.1
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -832,6 +832,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Sun Aug 17 2014 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.3.1-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
+
* Mon Jul 7 2014 Peter Robinson <pbrobinson(a)fedoraproject.org> 2.3.1-2
- ARMv7 is supported for JIT
- no prelink on aarch64/ppc64le
commit 43ee7785260fd8f42b86e62be70de5bc361a34d7
Author: Peter Robinson <pbrobinson(a)gmail.com>
Date: Mon Jul 7 23:07:38 2014 +0100
ARMv7 is supported for JIT, no prelink on aarch64/ppc64le
diff --git a/pypy.spec b/pypy.spec
index 7c4106a..8ab5959 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.3.1
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -78,20 +78,20 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
#
# Unfortunately, the JIT support is only available on some architectures.
#
-# pypy-1.4/pypy/jit/backend/detect_cpu.py:getcpuclassname currently supports the
+# rpython/jit/backend/detect_cpu.py:getcpuclassname currently supports the
# following options:
# 'i386', 'x86'
# 'x86-without-sse2':
# 'x86_64'
+# 'armv6', 'armv7' (versions 6 and 7, hard- and soft-float ABI)
# 'cli'
# 'llvm'
#
# We will only build with JIT support on those architectures, and build without
# it on the other archs. The resulting binary will typically be slower than
# CPython for the latter case.
-#
-%ifarch %{ix86} x86_64
-# FIXME: is there a better way of expressing "intel" here?
+
+%ifarch %{ix86} x86_64 %{arm}
%global with_jit 1
%else
%global with_jit 0
@@ -206,7 +206,10 @@ BuildRequires: time
BuildRequires: perl
%endif
+# No prelink on these arches
+%ifnarch aarch64 ppc64le
BuildRequires: /usr/bin/execstack
+%endif
# For byte-compiling the JIT-viewing mode:
%if %{with_emacs}
@@ -466,7 +469,9 @@ InstallPyPy() {
#
# I tried various approaches involving fixing the build, but the simplest
# approach is to postprocess the ELF file:
+%ifnarch aarch64 ppc64le
execstack --clear-execstack %{buildroot}/%{pypyprefix}/$ExeName
+%endif
}
mkdir -p %{buildroot}/%{_bindir}
@@ -827,6 +832,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Jul 7 2014 Peter Robinson <pbrobinson(a)fedoraproject.org> 2.3.1-2
+- ARMv7 is supported for JIT
+- no prelink on aarch64/ppc64le
+
* Sun Jun 08 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3.1-1
- Update to 2.3.1
commit edc736c1c58fc920291a8e672c906b76d6e87a31
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Sun Jun 8 20:55:40 2014 +0200
Update to 2.3.1
diff --git a/.gitignore b/.gitignore
index f59302b..1babd6b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,4 @@
/pypy-2.2-src.tar.bz2
/pypy-2.2.1-src.tar.bz2
/pypy-2.3-src.tar.bz2
+/release-2.3.1.tar.bz2
diff --git a/pypy.spec b/pypy.spec
index 96e21d5..7c4106a 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 2.3
-Release: 5%{?dist}
+Version: 2.3.1
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -130,7 +130,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(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/pypy-2.3-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/get/release-2.3.1.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -273,7 +273,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-394146e9bb67
+%setup -q -n pypy-pypy-32f35069a16d
%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
%patch1 -p1
%patch2 -p1
@@ -827,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Sun Jun 08 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3.1-1
+- Update to 2.3.1
+
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.3-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
diff --git a/sources b/sources
index 8f25b0c..b80a17c 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-c93a8e47f3b3109af2f66d2bd766eb97 pypy-2.3-src.tar.bz2
+e9d26e6ed2ca809a791d88137e90629b release-2.3.1.tar.bz2
commit 1972c9c31b94769515b1972a39a9d4efe493e6d6
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Sat Jun 7 13:12:20 2014 -0500
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
diff --git a/pypy.spec b/pypy.spec
index 6bdb671..96e21d5 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.3
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -827,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Sat Jun 07 2014 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.3-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
+
* Tue May 27 2014 Dennis Gilmore <dennis(a)ausil.us> - 2.3-4
- valgrind is available everywhere except 31 bit s390
commit a0374180ff792eb0a2b41434d1a3a47efe340d3e
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Tue May 27 16:16:43 2014 -0500
valgrind is available everywhere except 31 bit s390
diff --git a/pypy.spec b/pypy.spec
index 096bd7d..6bdb671 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.3
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -191,7 +191,7 @@ BuildRequires: bzip2-devel
BuildRequires: ncurses-devel
BuildRequires: expat-devel
BuildRequires: openssl-devel
-%ifarch %{ix86} x86_64 ppc ppc64 s390x
+%ifnarch s390
BuildRequires: valgrind-devel
%endif
@@ -827,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue May 27 2014 Dennis Gilmore <dennis(a)ausil.us> - 2.3-4
+- valgrind is available everywhere except 31 bit s390
+
* Wed May 21 2014 Jaroslav Škarvada <jskarvad(a)redhat.com> - 2.3-3
- Rebuilt for https://fedoraproject.org/wiki/Changes/f21tcl86
commit ce731cfa651140b831eeeabd176c041b6f9f4943
Author: Jaroslav Škarvada <jskarvad(a)redhat.com>
Date: Wed May 21 12:32:28 2014 +0200
- Rebuilt for https://fedoraproject.org/wiki/Changes/f21tcl86
diff --git a/pypy.spec b/pypy.spec
index 39b18d8..096bd7d 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.3
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -827,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Wed May 21 2014 Jaroslav Škarvada <jskarvad(a)redhat.com> - 2.3-3
+- Rebuilt for https://fedoraproject.org/wiki/Changes/f21tcl86
+
* Thu May 15 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3-2
- Rebuilt (f21-python)
commit a3993a30d37ff85750008622cc987a4650786896
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Thu May 15 12:20:24 2014 +0200
Rebuilt (f21-python)
diff --git a/pypy.spec b/pypy.spec
index 6e050f3..39b18d8 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.3
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -827,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu May 15 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3-2
+- Rebuilt (f21-python)
+
* Tue May 13 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3-1
- Updated to 2.3
commit db10290f0939d5c2dfd4d437bc2f98888752a48b
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Wed May 14 12:40:14 2014 +0200
Update to 2.3
diff --git a/.gitignore b/.gitignore
index da7257b..f59302b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,4 @@
/release-2.1.0.tar.bz2
/pypy-2.2-src.tar.bz2
/pypy-2.2.1-src.tar.bz2
+/pypy-2.3-src.tar.bz2
diff --git a/007-remove-startup-message.patch b/007-remove-startup-message.patch
index 1dddb69..2ff9068 100644
--- a/007-remove-startup-message.patch
+++ b/007-remove-startup-message.patch
@@ -2,7 +2,7 @@ diff -rup pypy-pypy-f66246c46ca3/lib_pypy/_pypy_interact.py pypy-pypy-f66246c46c
--- 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
- import os
+ irc_header = "And now for something completely different"
-def interactive_console(mainmodule=None, quiet=False):
diff --git a/pypy.spec b/pypy.spec
index c46997a..6e050f3 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 2.2.1
-Release: 3%{?dist}
+Version: 2.3
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -130,7 +130,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(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/pypy-2.2.1-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy-2.3-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -273,7 +273,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-2.2.1-src
+%setup -q -n pypy-pypy-394146e9bb67
%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
%patch1 -p1
%patch2 -p1
@@ -827,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue May 13 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.3-1
+- Updated to 2.3
+
* Mon Mar 10 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.1-3
- Put RPM macros in proper location
diff --git a/sources b/sources
index f8f0564..8f25b0c 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-7ec9f48702323f9e93654ba73dd46720 pypy-2.2.1-src.tar.bz2
+c93a8e47f3b3109af2f66d2bd766eb97 pypy-2.3-src.tar.bz2
commit bca3bcda512353328ab9a768e28d0ac7b6904aa6
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Tue Mar 11 09:05:43 2014 +0100
Also chenge files section
diff --git a/pypy.spec b/pypy.spec
index 85003c1..c46997a 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -816,7 +816,7 @@ rm -rf $RPM_BUILD_ROOT
%defattr(-,root,root,-)
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
-%config(noreplace) %{_sysconfdir}/rpm/macros.pypy
+%config(noreplace) %{_rpmconfigdir}/macros.d/macros.pypy
%if 0%{with_stackless}
%files stackless
commit 4dbc78c1aab1cf75870cf055ad54a46262e3fafb
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Mon Mar 10 09:17:48 2014 +0100
Also add changelog entry
diff --git a/pypy.spec b/pypy.spec
index 6e73099..85003c1 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.2.1
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -827,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Mar 10 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.1-3
+- Put RPM macros in proper location
+
* Thu Jan 16 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.1-2
- Fixed errors due to missing __pycache__
commit 355feb2755aa6396e4fa0b512652ce25c2502ca7
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Mon Feb 3 13:24:01 2014 +0100
Put rpm macros in proper location
diff --git a/pypy.spec b/pypy.spec
index 8604207..6e73099 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -655,8 +655,8 @@ cp -a rpython/jit/tool/pypytrace-mode.el* %{buildroot}/%{_emacs_sitelispdir}
%endif
# Install macros for rpm:
-mkdir -p %{buildroot}/%{_sysconfdir}/rpm
-install -m 644 %{SOURCE2} %{buildroot}/%{_sysconfdir}/rpm
+mkdir -p %{buildroot}/%{_rpmconfigdir}/macros.d
+install -m 644 %{SOURCE2} %{buildroot}/%{_rpmconfigdir}/macros.d
%check
topdir=$(pwd)
commit f8a7311107aa7a76736e8e763a17148340131c32
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Fri Jan 17 10:46:17 2014 +0100
Fix errors due to missing __pycache__
diff --git a/pypy.spec b/pypy.spec
index 21987ac..8604207 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 2.2.1
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -581,10 +581,13 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
%{buildroot}/%{_bindir}/pypy \
0
-%{goal_dir}/pypy -c 'import _tkinter'
-%{goal_dir}/pypy -c 'import _sqlite3'
-%{goal_dir}/pypy -c 'import _curses'
-%{goal_dir}/pypy -c 'import syslog'
+%{buildroot}/%{pypyprefix}/pypy -c 'import _tkinter'
+%{buildroot}/%{pypyprefix}/pypy -c 'import Tkinter'
+%{buildroot}/%{pypyprefix}/pypy -c 'import _sqlite3'
+%{buildroot}/%{pypyprefix}/pypy -c 'import _curses'
+%{buildroot}/%{pypyprefix}/pypy -c 'import curses'
+%{buildroot}/%{pypyprefix}/pypy -c 'import syslog'
+%{buildroot}/%{pypyprefix}/pypy -c 'from _sqlite3 import *'
# Header files for C extension modules.
# Upstream's packaging process (pypy/tool/release/package.py)
@@ -824,6 +827,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Jan 16 2014 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.1-2
+- Fixed errors due to missing __pycache__
+
* Thu Dec 05 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.1-1
- Updated to 2.2.1
- Several bundled modules (tkinter, sqlite3, curses, syslog) were
commit 2cbecfd01cab504997f12fd8b434035e083dcec6
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Thu Jan 2 10:47:41 2014 +0100
Update to 2.2.1
diff --git a/.gitignore b/.gitignore
index fa54eea..da7257b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,4 @@
/release-2.0.2.tar.bz2
/release-2.1.0.tar.bz2
/pypy-2.2-src.tar.bz2
+/pypy-2.2.1-src.tar.bz2
diff --git a/pypy.spec b/pypy.spec
index cfb219f..21987ac 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,5 +1,5 @@
Name: pypy
-Version: 2.2.0
+Version: 2.2.1
Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
@@ -130,7 +130,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(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/pypy-2.2-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy-2.2.1-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -273,7 +273,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-2.2-src
+%setup -q -n pypy-2.2.1-src
%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
%patch1 -p1
%patch2 -p1
@@ -768,6 +768,11 @@ CheckPyPy() {
echo "--------------------------------------------------------------"
}
+#python testrunner/runner.py --logfile=pytest-A.log --config=pypy/pytest-A.cfg --config=pypy/pytest-A.py --root=pypy --timeout=3600
+#python pypy/test_all.py --pypy=pypy/goal/pypy --timeout=3600 --resultlog=cpython.log lib-python
+#python pypy/test_all.py --pypy=pypy/goal/pypy --resultlog=pypyjit.log pypy/module/pypyjit/test
+#pypy/goal/pypy pypy/test_all.py --resultlog=pypyjit_new.log
+
%if %{run_selftests}
CheckPyPy pypy
@@ -819,6 +824,12 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Dec 05 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.1-1
+- Updated to 2.2.1
+- Several bundled modules (tkinter, sqlite3, curses, syslog) were
+ not bytecompiled properly during build, that is now fixed
+- prepared new tests, not enabled yet
+
* Thu Nov 14 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.0-1
- Updated to 2.2.0
diff --git a/sources b/sources
index d5b9932..f8f0564 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-5a5a3822605d7d811066b1b279da3c6e pypy-2.2-src.tar.bz2
+7ec9f48702323f9e93654ba73dd46720 pypy-2.2.1-src.tar.bz2
commit a79a105a7453f9b3f55d296774b2b28a256d8318
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Thu Jan 2 10:45:26 2014 +0100
Bytecompiled bunch of modules
diff --git a/pypy.spec b/pypy.spec
index cd225b9..cfb219f 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -181,6 +181,10 @@ BuildRequires: python-devel
%endif
BuildRequires: libffi-devel
+BuildRequires: tcl-devel
+BuildRequires: tk-devel
+
+BuildRequires: sqlite-devel
BuildRequires: zlib-devel
BuildRequires: bzip2-devel
@@ -577,6 +581,10 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
%{buildroot}/%{_bindir}/pypy \
0
+%{goal_dir}/pypy -c 'import _tkinter'
+%{goal_dir}/pypy -c 'import _sqlite3'
+%{goal_dir}/pypy -c 'import _curses'
+%{goal_dir}/pypy -c 'import syslog'
# Header files for C extension modules.
# Upstream's packaging process (pypy/tool/release/package.py)
commit 66ffb916e263ca7b45e75d7a209248c04f918264
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Tue Nov 12 10:19:28 2013 +0100
Updated to 2.2.0
diff --git a/.gitignore b/.gitignore
index cad553e..fa54eea 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@
/release-2.0-beta-1.tar.bz2
/release-2.0.2.tar.bz2
/release-2.1.0.tar.bz2
+/pypy-2.2-src.tar.bz2
diff --git a/pypy.spec b/pypy.spec
index e7ef81f..cd225b9 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,5 +1,5 @@
Name: pypy
-Version: 2.1.0
+Version: 2.2.0
Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
@@ -130,7 +130,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-2.1.0.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/downloads/pypy-2.2-src.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -162,7 +162,7 @@ Patch2: 007-remove-startup-message.patch
# Turn it off with this boolean, to revert back to rebuilding using CPython
# and avoid a cycle in the build-time dependency graph:
-%global use_self_when_building 1
+%global use_self_when_building 0
%if 0%{use_self_when_building}
BuildRequires: pypy
%global bootstrap_python_interp pypy
@@ -269,7 +269,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-352c78d2e80f
+%setup -q -n pypy-2.2-src
%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
%patch1 -p1
%patch2 -p1
@@ -811,6 +811,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Nov 14 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.2.0-1
+- Updated to 2.2.0
+
* Thu Aug 15 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.1-1
- Updated to 2.1.0
diff --git a/sources b/sources
index fff5a1a..d5b9932 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-59af571317843a1759cb1ff392c26260 release-2.1.0.tar.bz2
+5a5a3822605d7d811066b1b279da3c6e pypy-2.2-src.tar.bz2
commit febbbdb0e4b360dffdd77a04e5101afc16e463a8
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Fri Aug 16 10:12:29 2013 +0200
Updated to 2.1.0
diff --git a/.gitignore b/.gitignore
index 63a65d6..cad553e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@
/release-1.9.tar.bz2
/release-2.0-beta-1.tar.bz2
/release-2.0.2.tar.bz2
+/release-2.1.0.tar.bz2
diff --git a/pypy.spec b/pypy.spec
index 1c72138..e7ef81f 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,8 +1,6 @@
-%global alphatag b1
-
Name: pypy
-Version: 2.0.2
-Release: 5%{?dist}
+Version: 2.1.0
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -132,50 +130,28 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-2.0.2.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/get/release-2.1.0.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
-Source2: macros.pypy
-
-# Edit a translator file for linux in order to configure our cflags and dynamic libffi
-Patch0: config.patch
+Source2: macros.pypy
# 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:
-Patch1: pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
-
-# Try to improve the readability of the generated .c code, by adding in the
-# RPython source as comments where possible.
-# A version of this was sent upstream as:
-# http://codespeak.net/pipermail/pypy-dev/2010q4/006532.html
-# TODO: get this into the upstream bug tracker, and finish inlining
-# support (rhbz#666963)
-Patch4: more-readable-c-code.patch
-
-# In my koji builds, /root/bin is in the PATH for some reason
-# This leads to test_subprocess.py failing, due to "test_leaking_fds_on_error"
-# trying every dir in PATH for "nonexisting_i_hope", which leads to it raising
-# OSError: [Errno 13] Permission denied
-# when it tries to read /root/bin, rather than raising "No such file"
-#
-# Work around this by specifying an absolute path for the non-existant
-# executable
-# Not yet sent upstream
-Patch5: pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
+Patch0: pypy-1.2-suppress-mandelbrot-set-during-tty-build.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
# and linker are captured:
-Patch6: 006-always-log-stdout.patch
+Patch1: 006-always-log-stdout.patch
# Disable the printing of a quote from IRC on startup (these are stored in
# ROT13 form in lib_pypy/_pypy_irc_topic.py). Some are cute, but some could
# cause confusion for end-users (and many are in-jokes within the PyPy
# community that won't make sense outside of it). [Sorry to be a killjoy]
-Patch7: 007-remove-startup-message.patch
+Patch2: 007-remove-startup-message.patch
# Build-time requirements:
@@ -186,37 +162,7 @@ Patch7: 007-remove-startup-message.patch
# Turn it off with this boolean, to revert back to rebuilding using CPython
# and avoid a cycle in the build-time dependency graph:
-# I'm disabling the self-hosting for now, due to a fatal error seen inside the
-# JIT, presumably whilst JIT-compiling something within the translator's
-# inliner.
-#
-# Specifically, building pypy-1.4.1-7.fc15.src.rpm on x86_64 using pypy-1.4.1-5.fc15.x86_64
-# http://koji.fedoraproject.org/koji/taskinfo?taskID=2721517
-# failed with this RPython traceback:
-# ... snip ...
-# [rtyper:WARNING] prebuilt instance <pypy.rpython.memory.gctransform.asmgcroot.ShapeDecompressor instance at 0x00000000f0b5bc80> has no attribute 'addr'
-# [rtyper] specializing: 179300 / 180508 blocks (99%)
-# [rtyper] specializing: 180500 / 180566 blocks (99%)
-# [rtyper] -=- specialized 1363 more blocks -=-
-# [rtyper] specializing: 180600 / 180777 blocks (99%)
-# [rtyper] -=- specialized 211 more blocks -=-
-# [backendopt:inlining] phase with threshold factor: 32.4
-# [backendopt:inlining] heuristic: pypy.translator.backendopt.inline.inlining_heuristic
-# [x86/regalloc] Bogus arg in operation 76 at 0
-# RPython traceback:
-# File "implement_62.c", line 39979, in send_bridge_to_backend
-# File "implement_69.c", line 65301, in Assembler386_assemble_bridge
-# File "implement_72.c", line 8078, in RegAlloc_prepare_bridge
-# File "implement_40.c", line 53061, in RegAlloc__prepare
-# File "implement_44.c", line 14305, in RegAlloc__compute_vars_longevity
-# Fatal RPython error: NotImplementedError
-#
-# This appears to be deep within pypy/jit/backend/x86/regalloc.py which has
-# called "not_implemented" to emit this message to stderr, before raising the
-# exception:
-# [x86/regalloc] Bogus arg in operation 76 at 0
-
-%global use_self_when_building 0
+%global use_self_when_building 1
%if 0%{use_self_when_building}
BuildRequires: pypy
%global bootstrap_python_interp pypy
@@ -234,12 +180,6 @@ BuildRequires: python-devel
%endif
-
-# FIXME: I'm seeing errors like this in the logs:
-# [translation:WARNING] The module '_rawffi' is disabled
-# [translation:WARNING] because importing pypy.rlib.libffi raised ImportError
-# [translation:WARNING] 'libffi.a' not found in ['/usr/lib/libffi', '/usr/lib']
-# Presumably we need to fix things to support dynamically-linked libffi
BuildRequires: libffi-devel
BuildRequires: zlib-devel
@@ -269,11 +209,6 @@ BuildRequires: /usr/bin/execstack
BuildRequires: emacs
%endif
-# pypy is bundling these so we delete them in %%prep. I don't think they are
-# needed unless we build pypy targetted at running on the jvm.
-#BuildRequires: jna
-#BuildRequires: jasmin # Not yet in Fedora
-
# Metadata for the core package (the JIT build):
Requires: pypy-libs = %{version}-%{release}
@@ -334,47 +269,10 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-f66246c46ca3
-%patch0 -p1 -b .configure-fedora
-%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
-
-# Disabled for now, as it needs regenerating for 1.8
-#patch4 -p1 -b .more-readable-c-code
-# Fails on 1.8 with this error:
-# [translation:ERROR] Error:
-# [translation:ERROR] Traceback (most recent call last):
-# [translation:ERROR] File "translate.py", line 309, in main
-# [translation:ERROR] drv.proceed(goals)
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/driver.py", line 811, in proceed
-# [translation:ERROR] return self._execute(goals, task_skip = self._maybe_skip())
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/tool/taskengine.py", line 116, in _execute
-# [translation:ERROR] res = self._do(goal, taskcallable, *args, **kwds)
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/driver.py", line 287, in _do
-# [translation:ERROR] res = func()
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/driver.py", line 530, in task_source_c
-# [translation:ERROR] exe_name=exe_name)
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 252, in generate_source
-# [translation:ERROR] split=self.split)
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 989, in gen_source
-# [translation:ERROR] sg.gen_readable_parts_of_source(f)
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 843, in gen_readable_parts_of_source
-# [translation:ERROR] for node, impl in nodeiter:
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 729, in subiter
-# [translation:ERROR] impl = '\n'.join(list(node.implementation())).split('\n')
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/node.py", line 867, in implementation
-# [translation:ERROR] for s in self.funcgen_implementation(funcgen):
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/node.py", line 901, in funcgen_implementation
-# [translation:ERROR] for line in bodyiter:
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/funcgen.py", line 272, in cfunction_body
-# [translation:ERROR] blocks.sort(block_comparator)
-# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/funcgen.py", line 34, in block_comparator
-# [translation:ERROR] if blk0.isstartblock:
-# [translation:ERROR] AttributeError: 'Block' object has no attribute 'isstartblock'
-
-%patch5 -p1
-%patch6 -p1
-%patch7 -p1
-
+%setup -q -n pypy-pypy-352c78d2e80f
+%patch0 -p1 -b .suppress-mandelbrot-set-during-tty-build
+%patch1 -p1
+%patch2 -p1
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
@@ -383,15 +281,6 @@ find -name "*.py" -exec \
"{}" \
\;
-find . -name '*.jar' -exec rm \{\} \;
-
-# Remove stray ".svn" directories present within the 1.4.1 tarball
-# (reported as https://codespeak.net/issue/pypy-dev/issue612 )
-find . -path '*/.svn*' -delete
-
-# Remove DOS batch files:
-find -name "*.bat"|xargs rm -f
-
for f in rpython/translator/goal/bpnn.py ; do
# Detect shebang lines && remove them:
sed -e '/^#!/Q 0' -e 'Q 1' $f \
@@ -399,6 +288,7 @@ for f in rpython/translator/goal/bpnn.py ; do
chmod a-x $f
done
+
%build
BuildPyPy() {
@@ -540,10 +430,10 @@ BuildPyPy \
%{_emacs_bytecompile} rpython/jit/tool/pypytrace-mode.el
%endif
+
%install
rm -rf $RPM_BUILD_ROOT
-
# Install the various executables:
InstallPyPy() {
@@ -921,6 +811,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Aug 15 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.1-1
+- Updated to 2.1.0
+
* Sun Aug 04 2013 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.0.2-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
diff --git a/sources b/sources
index a37f747..fff5a1a 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-328a509c092b5477f99be8dd452d81c2 release-2.0.2.tar.bz2
+59af571317843a1759cb1ff392c26260 release-2.1.0.tar.bz2
commit 309e1cf6aab2cc2ecf9ae9897a22f271a9d4fb9c
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Sun Aug 4 01:04:23 2013 -0500
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
diff --git a/pypy.spec b/pypy.spec
index 8f28baf..1c72138 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -2,7 +2,7 @@
Name: pypy
Version: 2.0.2
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -921,6 +921,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Sun Aug 04 2013 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.0.2-5
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
+
* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-4
- Patch1 fix
commit b4e1c2185a5384e5ba4d898fe7fbca0ad3db45c2
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Mon Jun 24 10:44:06 2013 +0200
Patch1 fix
diff --git a/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch b/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
index 257f60f..c97eaf3 100644
--- a/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
+++ b/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
@@ -1,7 +1,6 @@
-diff --git a/pypy/tool/ansi_print.py b/pypy/tool/ansi_print.py
-index 3eff27c..fac4ba2 100644
---- a/pypy/tool/ansi_print.py
-+++ b/pypy/tool/ansi_print.py
+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)
diff --git a/pypy.spec b/pypy.spec
index 2470609..8f28baf 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -2,7 +2,7 @@
Name: pypy
Version: 2.0.2
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -921,6 +921,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-4
+- Patch1 fix
+
* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-3
- Yet another Sources fix
commit 8c737bc2aa985ae04d4540daefef663e827f8ba2
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Mon Jun 24 10:29:01 2013 +0200
Yet another Sources fix
diff --git a/.gitignore b/.gitignore
index 2793282..63a65d6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,4 @@
/release-1.8.tar.bz2
/release-1.9.tar.bz2
/release-2.0-beta-1.tar.bz2
+/release-2.0.2.tar.bz2
diff --git a/pypy.spec b/pypy.spec
index 66a66a9..2470609 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -2,7 +2,7 @@
Name: pypy
Version: 2.0.2
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -132,7 +132,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-2.0.2.tar.bz2#/pypy-pypy-f662...
+Source0: https://bitbucket.org/pypy/pypy/get/release-2.0.2.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -921,6 +921,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-3
+- Yet another Sources fix
+
* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-2
- Fixed Source URL
diff --git a/sources b/sources
index e7d211b..a37f747 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-4a346df59983e4a5c50e8ee211f80619 release-2.0-beta-1.tar.bz2
+328a509c092b5477f99be8dd452d81c2 release-2.0.2.tar.bz2
commit 5694529edb24cba3edd56720cee077b791e8378c
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Mon Jun 24 09:24:07 2013 +0200
Fixed Source URL
diff --git a/pypy.spec b/pypy.spec
index 1ce9198..66a66a9 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -2,7 +2,7 @@
Name: pypy
Version: 2.0.2
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -132,7 +132,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-2.0.2.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/get/release-2.0.2.tar.bz2#/pypy-pypy-f662...
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -921,6 +921,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-2
+- Fixed Source URL
+
* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-1
- 2.0.2, patch 8 does not seem necessary anymore
commit c3a10ade23f8dac35b5ef0edc6f2c23856705044
Author: Matej Stuchlik <mstuchli(a)redhat.com>
Date: Mon Jun 24 08:57:35 2013 +0200
Updated to 2.0.2
diff --git a/006-always-log-stdout.patch b/006-always-log-stdout.patch
index 2df1f00..5d49335 100644
--- a/006-always-log-stdout.patch
+++ b/006-always-log-stdout.patch
@@ -1,6 +1,7 @@
---- pypy-pypy-341e1e3821ff/pypy/translator/platform/__init__.py.always_log_stdout 2012-07-06 11:13:46.878979461 -0400
-+++ pypy-pypy-341e1e3821ff/pypy/translator/platform/__init__.py 2012-07-06 11:25:26.281235732 -0400
-@@ -126,6 +126,8 @@ class Platform(object):
+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):
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 e05586b..1dddb69 100644
--- a/007-remove-startup-message.patch
+++ b/007-remove-startup-message.patch
@@ -1,21 +1,12 @@
---- pypy-pypy-341e1e3821ff/lib_pypy/_pypy_interact.py.remove_startup_message 2012-07-06 12:10:46.504228264 -0400
-+++ pypy-pypy-341e1e3821ff/lib_pypy/_pypy_interact.py 2012-07-06 12:11:01.986034714 -0400
-@@ -13,18 +13,6 @@ def interactive_console(mainmodule=None)
- sys.ps2 = '.... '
- #
- try:
-- from _pypy_irc_topic import some_topic
-- text = "And now for something completely different: ``%s''" % (
-- some_topic(),)
-- while len(text) >= 80:
-- i = text[:80].rfind(' ')
-- print text[:i]
-- text = text[i+1:]
-- print text
-- except ImportError:
-- pass
-- #
-- try:
- if not os.isatty(sys.stdin.fileno()):
- # Bail out if stdin is not tty-like, as pyrepl wouldn't be happy
- # For example, with:
+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
+ import os
+
+
+-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/config.patch b/config.patch
index a11f397..bf81d7d 100644
--- a/config.patch
+++ b/config.patch
@@ -1,7 +1,7 @@
-diff -up pypy-pypy-2346207d9946/pypy/translator/platform/linux.py.configure-fedora pypy-pypy-2346207d9946/pypy/translator/platform/linux.py
---- pypy-pypy-2346207d9946/pypy/translator/platform/linux.py.configure-fedora 2012-02-09 13:27:19.000000000 -0500
-+++ pypy-pypy-2346207d9946/pypy/translator/platform/linux.py 2012-02-10 09:06:20.393066016 -0500
-@@ -31,13 +31,14 @@ class BaseLinux(BasePosix):
+diff -rup pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py
+--- pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py 2013-05-27 10:35:37.679237332 +0200
++++ pypy-pypy-f66246c46ca3/rpython/translator/platform/linux.py 2013-05-27 10:47:41.506354482 +0200
+@@ -32,19 +32,20 @@ class BaseLinux(BasePosix):
return self._pkg_config("libffi", "--libs-only-L",
['/usr/lib/libffi'])
@@ -9,15 +9,27 @@ diff -up pypy-pypy-2346207d9946/pypy/translator/platform/linux.py.configure-fedo
- # places where we need to look for libffi.a
- # XXX obscuuure! only look for libffi.a if run with translate.py
- if 'translate' in sys.modules:
-- return self.library_dirs_for_libffi() + ['/usr/lib']
+- if sys.maxint > 2**32:
+- host = 'x86_64'
+- else:
+- host = 'x86'
+- return self.library_dirs_for_libffi() + [
+- '/usr/lib',
+- '/usr/lib/%s-linux-gnu/' % host]
- else:
- return []
-+ # Fedora, at least, has the shared version but not the static:
++ #Fedora, at least, has the shared version but not the static:
+ #def library_dirs_for_libffi_a(self):
+ # # places where we need to look for libffi.a
+ # # XXX obscuuure! only look for libffi.a if run with translate.py
+ # if 'translate' in sys.modules:
-+ # return self.library_dirs_for_libffi() + ['/usr/lib']
++ # if sys.maxint > 2**32:
++ # host = 'x86_64'
++ # else:
++ # host = 'x86'
++ # return self.library_dirs_for_libffi() + [
++ # '/usr/lib',
++ # '/usr/lib/%s-linux-gnu/' % host]
+ # else:
+ # return []
diff --git a/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch b/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
index 9071be5..2391f32 100644
--- a/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
+++ b/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
@@ -1,6 +1,7 @@
---- pypy-pypy-2346207d9946/lib-python/2.7/test/test_subprocess.py.orig 2012-02-09 13:27:19.000000000 -0500
-+++ pypy-pypy-2346207d9946/lib-python/2.7/test/test_subprocess.py 2012-02-10 09:14:08.312216221 -0500
-@@ -570,7 +570,7 @@ class ProcessTestCase(BaseTestCase):
+diff -rup pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py
+--- pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py 2013-05-27 10:35:37.762237806 +0200
++++ pypy-pypy-f66246c46ca3/lib-python/2.7/test/test_subprocess.py 2013-05-28 10:13:03.182536196 +0200
+@@ -587,7 +587,7 @@ class ProcessTestCase(BaseTestCase):
for i in range(1024):
# Windows raises IOError. Others raise OSError.
with self.assertRaises(EnvironmentError) as c:
diff --git a/pypy.spec b/pypy.spec
index dbcbc8d..1ce9198 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,8 +1,8 @@
%global alphatag b1
Name: pypy
-Version: 2.0
-Release: 0.2.%{alphatag}%{?dist}
+Version: 2.0.2
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -123,7 +123,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%global pylibver 2.7
# We refer to this subdir of the source tree in a few places during the build:
-%global goal_dir pypy/translator/goal
+%global goal_dir pypy/goal
# Turn off the brp-python-bytecompile postprocessing script
@@ -132,7 +132,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-2.0-beta-1.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/get/release-2.0.2.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -177,21 +177,6 @@ Patch6: 006-always-log-stdout.patch
# community that won't make sense outside of it). [Sorry to be a killjoy]
Patch7: 007-remove-startup-message.patch
-# With pypy-1.9-1.fc17.x86_64, the pypy binary exposes about 200k symbols to
-# the dynamic linker:
-# $ eu-readelf -s $(which pypy) | head
-# Symbol table [ 5] '.dynsym' contains 194163 entries:
-# which is far more than necessary.
-# Fix the version script for the linker as invoked thus in the Makefile:
-# "-Wl,--export-dynamic,--version-script=../dynamic-symbols-6"
-# so that it contains a "local: *;" clause, thus hiding the bulk of the
-# symbols from the dynamic linker.
-# Ideally we'd add:
-# __attribute__ ((visibility ("hidden")))
-# to most symbols, allowing the compiler to potentially generate better code.
-# Not yet reported upstream
-Patch8: 008-fix-dynamic-symbols-script.patch
-
# Build-time requirements:
@@ -349,7 +334,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-07e08e9c885c
+%setup -q -n pypy-pypy-f66246c46ca3
%patch0 -p1 -b .configure-fedora
%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
@@ -389,7 +374,6 @@ Build of PyPy with support for micro-threads for massive concurrency
%patch5 -p1
%patch6 -p1
%patch7 -p1
-%patch8 -p1
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
@@ -408,9 +392,7 @@ find . -path '*/.svn*' -delete
# Remove DOS batch files:
find -name "*.bat"|xargs rm -f
-# The "demo" directory gets auto-installed by virture of being listed in %doc
-# Remove shebang lines from demo .py files, and remove executability from them:
-for f in demo/bpnn.py ; do
+for f in rpython/translator/goal/bpnn.py ; do
# Detect shebang lines && remove them:
sed -e '/^#!/Q 0' -e 'Q 1' $f \
&& sed -i '1d' $f
@@ -522,15 +504,11 @@ BuildPyPy() {
RPM_BUILD_ROOT= \
PYPY_USESSION_DIR=$(pwd) \
PYPY_USESSION_BASENAME=$ExeName \
- $INTERP translate.py \
-%if 0%{verbose_logs}
- --translation-verbose \
-%endif
- --cflags="$CFLAGS" \
- --batch \
+ $INTERP ../../rpython/bin/rpython \
--output=$ExeName \
%{gcrootfinder_options} \
- $Options
+ $Options \
+ targetpypystandalone
echo "--------------------------------------------------------------"
echo "--------------------------------------------------------------"
@@ -559,7 +537,7 @@ BuildPyPy \
%endif
%if %{with_emacs}
-%{_emacs_bytecompile} pypy/jit/tool/pypytrace-mode.el
+%{_emacs_bytecompile} rpython/jit/tool/pypytrace-mode.el
%endif
%install
@@ -772,7 +750,7 @@ find \
# Install the JIT trace mode for Emacs:
%if %{with_emacs}
mkdir -p %{buildroot}/%{_emacs_sitelispdir}
-cp -a pypy/jit/tool/pypytrace-mode.el* %{buildroot}/%{_emacs_sitelispdir}
+cp -a rpython/jit/tool/pypytrace-mode.el* %{buildroot}/%{_emacs_sitelispdir}
%endif
# Install macros for rpm:
@@ -908,7 +886,7 @@ rm -rf $RPM_BUILD_ROOT
%files libs
%defattr(-,root,root,-)
-%doc LICENSE README demo
+%doc LICENSE README.rst
%dir %{pypyprefix}
%dir %{pypyprefix}/lib-python
@@ -924,7 +902,7 @@ rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root,-)
-%doc LICENSE README
+%doc LICENSE README.rst
%{_bindir}/pypy
%{pypyprefix}/pypy
@@ -937,12 +915,15 @@ rm -rf $RPM_BUILD_ROOT
%if 0%{with_stackless}
%files stackless
%defattr(-,root,root,-)
-%doc LICENSE README
+%doc LICENSE README.rst
%{_bindir}/pypy-stackless
%endif
%changelog
+* Mon Jun 24 2013 Matej Stuchlik <mstuchli(a)redhat.com> - 2.0.2-1
+- 2.0.2, patch 8 does not seem necessary anymore
+
* Thu Feb 14 2013 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.0-0.2.b1
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
commit fd80b8a933ad44429dfb88ee58aecaf24faf9135
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Thu Feb 14 12:48:36 2013 -0600
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
diff --git a/pypy.spec b/pypy.spec
index b29583d..dbcbc8d 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -2,7 +2,7 @@
Name: pypy
Version: 2.0
-Release: 0.1.%{alphatag}%{?dist}
+Release: 0.2.%{alphatag}%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -943,6 +943,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Feb 14 2013 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 2.0-0.2.b1
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
+
* Tue Dec 11 2012 David Malcolm <dmalcolm(a)redhat.com> - 2.0-0.1.b1
- 2.0b1 (drop upstreamed patch 9)
commit 8e0c0345a5ec642705520ed20aad13dfb15ec7c2
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Thu Dec 13 06:16:11 2012 -0500
2.0-0.1.b1
diff --git a/.gitignore b/.gitignore
index 4c551cc..2793282 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,4 @@
/release-1.7.tar.bz2
/release-1.8.tar.bz2
/release-1.9.tar.bz2
+/release-2.0-beta-1.tar.bz2
diff --git a/009-add-PyInt_AsUnsignedLongLongMask.patch b/009-add-PyInt_AsUnsignedLongLongMask.patch
deleted file mode 100644
index dae7e16..0000000
--- a/009-add-PyInt_AsUnsignedLongLongMask.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-diff --git a/pypy/module/cpyext/intobject.py b/pypy/module/cpyext/intobject.py
---- a/pypy/module/cpyext/intobject.py
-+++ b/pypy/module/cpyext/intobject.py
-@@ -6,7 +6,7 @@
- PyObject, PyObjectFields, CONST_STRING, CANNOT_FAIL, Py_ssize_t)
- from pypy.module.cpyext.pyobject import (
- make_typedescr, track_reference, RefcountState, from_ref)
--from pypy.rlib.rarithmetic import r_uint, intmask, LONG_TEST
-+from pypy.rlib.rarithmetic import r_uint, intmask, LONG_TEST, r_ulonglong
- from pypy.objspace.std.intobject import W_IntObject
- import sys
-
-@@ -83,6 +83,20 @@
- num = space.bigint_w(w_int)
- return num.uintmask()
-
-+@cpython_api([PyObject], rffi.ULONGLONG, error=-1)
-+def PyInt_AsUnsignedLongLongMask(space, w_obj):
-+ """Will first attempt to cast the object to a PyIntObject or
-+ PyLongObject, if it is not already one, and then return its value as
-+ unsigned long long, without checking for overflow.
-+ """
-+ w_int = space.int(w_obj)
-+ if space.is_true(space.isinstance(w_int, space.w_int)):
-+ num = space.int_w(w_int)
-+ return r_ulonglong(num)
-+ else:
-+ num = space.bigint_w(w_int)
-+ return num.ulonglongmask()
-+
- @cpython_api([PyObject], lltype.Signed, error=CANNOT_FAIL)
- def PyInt_AS_LONG(space, w_int):
- """Return the value of the object w_int. No error checking is performed."""
-diff --git a/pypy/module/cpyext/test/test_intobject.py b/pypy/module/cpyext/test/test_intobject.py
---- a/pypy/module/cpyext/test/test_intobject.py
-+++ b/pypy/module/cpyext/test/test_intobject.py
-@@ -34,6 +34,11 @@
- assert (api.PyInt_AsUnsignedLongMask(space.wrap(10**30))
- == 10**30 % ((sys.maxint + 1) * 2))
-
-+ assert (api.PyInt_AsUnsignedLongLongMask(space.wrap(sys.maxint))
-+ == sys.maxint)
-+ assert (api.PyInt_AsUnsignedLongLongMask(space.wrap(10**30))
-+ == 10**30 % (2**64))
-+
- def test_coerce(self, space, api):
- class Coerce(object):
- def __int__(self):
diff --git a/pypy.spec b/pypy.spec
index 057fbdd..b29583d 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,8 @@
+%global alphatag b1
+
Name: pypy
-Version: 1.9
-Release: 4%{?dist}
+Version: 2.0
+Release: 0.1.%{alphatag}%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -130,7 +132,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-%{version}.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/get/release-2.0-beta-1.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
@@ -191,12 +193,6 @@ Patch7: 007-remove-startup-message.patch
Patch8: 008-fix-dynamic-symbols-script.patch
-# Cherrypick upstream patch to add PyInt_AsUnsignedLongLongMask (used by
-# the rpm python bindings); see https://bugs.pypy.org/issue1211
-# This is https://bitbucket.org/pypy/pypy/changeset/542d481517d3
-Patch9: 009-add-PyInt_AsUnsignedLongLongMask.patch
-
-
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
@@ -353,7 +349,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-341e1e3821ff
+%setup -q -n pypy-pypy-07e08e9c885c
%patch0 -p1 -b .configure-fedora
%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
@@ -394,7 +390,6 @@ Build of PyPy with support for micro-threads for massive concurrency
%patch6 -p1
%patch7 -p1
%patch8 -p1
-%patch9 -p1
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
@@ -631,6 +626,10 @@ 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 \
@@ -944,6 +943,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Dec 11 2012 David Malcolm <dmalcolm(a)redhat.com> - 2.0-0.1.b1
+- 2.0b1 (drop upstreamed patch 9)
+
* Sat Jul 21 2012 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 1.9-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
diff --git a/sources b/sources
index 2a64332..e7d211b 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-f92c0171a9578a3e4a0f74947ec596ab release-1.9.tar.bz2
+4a346df59983e4a5c50e8ee211f80619 release-2.0-beta-1.tar.bz2
commit cd9f89c255519e6d52d820882b9cc72cc74932b7
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Fri Jul 20 23:22:27 2012 -0500
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
diff --git a/pypy.spec b/pypy.spec
index 2ed932b..057fbdd 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.9
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -944,6 +944,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Sat Jul 21 2012 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 1.9-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
+
* Tue Jul 10 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.9-3
- log all output from "make" (patch 6)
- disable the MOTD at startup (patch 7)
commit 26f62305fe07f9429bb6f4dc47d8749d7bd8ca7f
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Tue Jul 10 16:45:52 2012 -0400
1.9-3
* Tue Jul 10 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.9-3
- log all output from "make" (patch 6)
- disable the MOTD at startup (patch 7)
- hide symbols from the dynamic linker (patch 8)
- add PyInt_AsUnsignedLongLongMask (patch 9)
- capture the Makefile, the typeids.txt, and the dynamic-symbols file within
the debuginfo package
diff --git a/006-always-log-stdout.patch b/006-always-log-stdout.patch
new file mode 100644
index 0000000..2df1f00
--- /dev/null
+++ b/006-always-log-stdout.patch
@@ -0,0 +1,11 @@
+--- pypy-pypy-341e1e3821ff/pypy/translator/platform/__init__.py.always_log_stdout 2012-07-06 11:13:46.878979461 -0400
++++ pypy-pypy-341e1e3821ff/pypy/translator/platform/__init__.py 2012-07-06 11:25:26.281235732 -0400
+@@ -126,6 +126,8 @@ class Platform(object):
+ self._handle_error(returncode, stdout, stderr, outname)
+
+ def _handle_error(self, returncode, stdout, stderr, outname):
++ for line in stdout.splitlines():
++ log.message(line)
+ if returncode != 0:
+ errorfile = outname.new(ext='errors')
+ errorfile.write(stderr, 'wb')
diff --git a/007-remove-startup-message.patch b/007-remove-startup-message.patch
new file mode 100644
index 0000000..e05586b
--- /dev/null
+++ b/007-remove-startup-message.patch
@@ -0,0 +1,21 @@
+--- pypy-pypy-341e1e3821ff/lib_pypy/_pypy_interact.py.remove_startup_message 2012-07-06 12:10:46.504228264 -0400
++++ pypy-pypy-341e1e3821ff/lib_pypy/_pypy_interact.py 2012-07-06 12:11:01.986034714 -0400
+@@ -13,18 +13,6 @@ def interactive_console(mainmodule=None)
+ sys.ps2 = '.... '
+ #
+ try:
+- from _pypy_irc_topic import some_topic
+- text = "And now for something completely different: ``%s''" % (
+- some_topic(),)
+- while len(text) >= 80:
+- i = text[:80].rfind(' ')
+- print text[:i]
+- text = text[i+1:]
+- print text
+- except ImportError:
+- pass
+- #
+- try:
+ if not os.isatty(sys.stdin.fileno()):
+ # Bail out if stdin is not tty-like, as pyrepl wouldn't be happy
+ # For example, with:
diff --git a/008-fix-dynamic-symbols-script.patch b/008-fix-dynamic-symbols-script.patch
new file mode 100644
index 0000000..5b1d551
--- /dev/null
+++ b/008-fix-dynamic-symbols-script.patch
@@ -0,0 +1,15 @@
+diff --git a/pypy/translator/platform/posix.py b/pypy/translator/platform/posix.py
+--- a/pypy/translator/platform/posix.py
++++ b/pypy/translator/platform/posix.py
+@@ -48,8 +48,10 @@
+ response_file = self._make_response_file("dynamic-symbols-")
+ f = response_file.open("w")
+ f.write("{\n")
++ f.write(" global:\n")
+ for sym in eci.export_symbols:
+- f.write("%s;\n" % (sym,))
++ f.write(" %s;\n" % (sym,))
++ f.write(" local:*;\n")
+ f.write("};")
+ f.close()
+
diff --git a/009-add-PyInt_AsUnsignedLongLongMask.patch b/009-add-PyInt_AsUnsignedLongLongMask.patch
new file mode 100644
index 0000000..dae7e16
--- /dev/null
+++ b/009-add-PyInt_AsUnsignedLongLongMask.patch
@@ -0,0 +1,48 @@
+diff --git a/pypy/module/cpyext/intobject.py b/pypy/module/cpyext/intobject.py
+--- a/pypy/module/cpyext/intobject.py
++++ b/pypy/module/cpyext/intobject.py
+@@ -6,7 +6,7 @@
+ PyObject, PyObjectFields, CONST_STRING, CANNOT_FAIL, Py_ssize_t)
+ from pypy.module.cpyext.pyobject import (
+ make_typedescr, track_reference, RefcountState, from_ref)
+-from pypy.rlib.rarithmetic import r_uint, intmask, LONG_TEST
++from pypy.rlib.rarithmetic import r_uint, intmask, LONG_TEST, r_ulonglong
+ from pypy.objspace.std.intobject import W_IntObject
+ import sys
+
+@@ -83,6 +83,20 @@
+ num = space.bigint_w(w_int)
+ return num.uintmask()
+
++@cpython_api([PyObject], rffi.ULONGLONG, error=-1)
++def PyInt_AsUnsignedLongLongMask(space, w_obj):
++ """Will first attempt to cast the object to a PyIntObject or
++ PyLongObject, if it is not already one, and then return its value as
++ unsigned long long, without checking for overflow.
++ """
++ w_int = space.int(w_obj)
++ if space.is_true(space.isinstance(w_int, space.w_int)):
++ num = space.int_w(w_int)
++ return r_ulonglong(num)
++ else:
++ num = space.bigint_w(w_int)
++ return num.ulonglongmask()
++
+ @cpython_api([PyObject], lltype.Signed, error=CANNOT_FAIL)
+ def PyInt_AS_LONG(space, w_int):
+ """Return the value of the object w_int. No error checking is performed."""
+diff --git a/pypy/module/cpyext/test/test_intobject.py b/pypy/module/cpyext/test/test_intobject.py
+--- a/pypy/module/cpyext/test/test_intobject.py
++++ b/pypy/module/cpyext/test/test_intobject.py
+@@ -34,6 +34,11 @@
+ assert (api.PyInt_AsUnsignedLongMask(space.wrap(10**30))
+ == 10**30 % ((sys.maxint + 1) * 2))
+
++ assert (api.PyInt_AsUnsignedLongLongMask(space.wrap(sys.maxint))
++ == sys.maxint)
++ assert (api.PyInt_AsUnsignedLongLongMask(space.wrap(10**30))
++ == 10**30 % (2**64))
++
+ def test_coerce(self, space, api):
+ class Coerce(object):
+ def __int__(self):
diff --git a/pypy.spec b/pypy.spec
index e579720..2ed932b 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.9
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -164,6 +164,39 @@ Patch4: more-readable-c-code.patch
# Not yet sent upstream
Patch5: pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.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
+# and linker are captured:
+Patch6: 006-always-log-stdout.patch
+
+# Disable the printing of a quote from IRC on startup (these are stored in
+# ROT13 form in lib_pypy/_pypy_irc_topic.py). Some are cute, but some could
+# cause confusion for end-users (and many are in-jokes within the PyPy
+# community that won't make sense outside of it). [Sorry to be a killjoy]
+Patch7: 007-remove-startup-message.patch
+
+# With pypy-1.9-1.fc17.x86_64, the pypy binary exposes about 200k symbols to
+# the dynamic linker:
+# $ eu-readelf -s $(which pypy) | head
+# Symbol table [ 5] '.dynsym' contains 194163 entries:
+# which is far more than necessary.
+# Fix the version script for the linker as invoked thus in the Makefile:
+# "-Wl,--export-dynamic,--version-script=../dynamic-symbols-6"
+# so that it contains a "local: *;" clause, thus hiding the bulk of the
+# symbols from the dynamic linker.
+# Ideally we'd add:
+# __attribute__ ((visibility ("hidden")))
+# to most symbols, allowing the compiler to potentially generate better code.
+# Not yet reported upstream
+Patch8: 008-fix-dynamic-symbols-script.patch
+
+
+# Cherrypick upstream patch to add PyInt_AsUnsignedLongLongMask (used by
+# the rpm python bindings); see https://bugs.pypy.org/issue1211
+# This is https://bitbucket.org/pypy/pypy/changeset/542d481517d3
+Patch9: 009-add-PyInt_AsUnsignedLongLongMask.patch
+
+
# Build-time requirements:
# pypy's can be rebuilt using itself, rather than with CPython; doing so
@@ -358,6 +391,11 @@ Build of PyPy with support for micro-threads for massive concurrency
# [translation:ERROR] AttributeError: 'Block' object has no attribute 'isstartblock'
%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
+%patch9 -p1
+
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
@@ -696,15 +734,31 @@ mkdir -p %{buildroot}%{pypy_debuginfo_dir}
# copy over everything:
cp -a pypy %{buildroot}%{pypy_debuginfo_dir}
-# ...then delete files that aren't .py files:
+# ...then delete files that aren't:
+# - *.py files
+# - the Makefile
+# - typeids.txt
+# - dynamic-symbols-*
find \
- %{buildroot}%{pypy_debuginfo_dir} \
- \( -type f \
- -a \
- \! -name "*.py" \
- \) \
+ %{buildroot}%{pypy_debuginfo_dir} \
+ \( -type f \
+ -a \
+ \! \( -name "*.py" \
+ -o \
+ -name "Makefile" \
+ -o \
+ -name "typeids.txt" \
+ -o \
+ -name "dynamic-symbols-*" \
+ \) \
+ \) \
-delete
+# Alternatively, we could simply keep everything. This leads to a ~350MB
+# debuginfo package, but it makes it easy to hack on the Makefile and C build
+# flags by rebuilding/linking the sources.
+# To do so, remove the above "find" command.
+
# We don't need bytecode for these files; they are being included for reference
# purposes.
# There are some rpmlint warnings from these files:
@@ -890,6 +944,14 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Jul 10 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.9-3
+- log all output from "make" (patch 6)
+- disable the MOTD at startup (patch 7)
+- hide symbols from the dynamic linker (patch 8)
+- add PyInt_AsUnsignedLongLongMask (patch 9)
+- capture the Makefile, the typeids.txt, and the dynamic-symbols file within
+the debuginfo package
+
* Mon Jun 18 2012 Peter Robinson <pbrobinson(a)fedoraproject.org> - 1.9-2
- Compile with PIC, fixes FTBFS on ARM
commit 92ec0ebc5bf5746a03e45726d8e300ef51ff7940
Author: Peter Robinson <pbrobinson(a)gmail.com>
Date: Mon Jun 18 09:50:36 2012 +0100
Compile with PIC, fixes FTBFS on ARM
diff --git a/pypy.spec b/pypy.spec
index 80b4039..e579720 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.9
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -471,7 +471,7 @@ BuildPyPy() {
# The generated C code leads to many thousands of warnings of the form:
# warning: variable 'l_v26003' set but not used [-Wunused-but-set-variable]
# Suppress them:
- export CFLAGS=$(echo "$CFLAGS" -Wno-unused)
+ export CFLAGS=$(echo "$CFLAGS" -Wno-unused -fPIC)
# If we're already built the JIT-enabled "pypy", then use it for subsequent
# builds (of other configurations):
@@ -890,6 +890,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Jun 18 2012 Peter Robinson <pbrobinson(a)fedoraproject.org> - 1.9-2
+- Compile with PIC, fixes FTBFS on ARM
+
* Fri Jun 8 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.9-1
- 1.9
commit 615fd77fe04457d552feff9d10986589b35a6148
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Wed Jun 13 11:11:16 2012 -0400
upload 1.9 tarball
diff --git a/.gitignore b/.gitignore
index 86ec921..4c551cc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@
/release-1.6.tar.bz2
/release-1.7.tar.bz2
/release-1.8.tar.bz2
+/release-1.9.tar.bz2
diff --git a/sources b/sources
index 30a988e..2a64332 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-661be06978fdc907d84f0ee1f1228c8b release-1.8.tar.bz2
+f92c0171a9578a3e4a0f74947ec596ab release-1.9.tar.bz2
commit b042622bfa38e9ad3794d4f845207042e589b20b
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Fri Jun 8 20:18:15 2012 -0400
1.9
diff --git a/pypy.spec b/pypy.spec
index 8b80611..80b4039 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 1.8
-Release: 2%{?dist}
+Version: 1.9
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -320,7 +320,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-2346207d9946
+%setup -q -n pypy-pypy-341e1e3821ff
%patch0 -p1 -b .configure-fedora
%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
@@ -861,7 +861,6 @@ rm -rf $RPM_BUILD_ROOT
%dir %{pypyprefix}/lib-python
%{pypyprefix}/lib-python/stdlib-version.txt
%{pypyprefix}/lib-python/%{pylibver}/
-%{pypyprefix}/lib-python/modified-%{pylibver}/
%{pypyprefix}/lib-python/conftest.py*
%{pypyprefix}/lib_pypy/
%{pypyprefix}/site-packages/
@@ -891,6 +890,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Fri Jun 8 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.9-1
+- 1.9
+
* Fri Feb 10 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.8-2
- disable C readability patch for now (patch 4)
commit 07098c88a6645a0333d4c0d927251a23d002376d
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Fri Feb 10 11:12:43 2012 -0500
1.8-2: disable C readability patch for now (patch 4)
diff --git a/pypy.spec b/pypy.spec
index 9838bae..8b80611 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.8
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -324,7 +324,38 @@ Build of PyPy with support for micro-threads for massive concurrency
%patch0 -p1 -b .configure-fedora
%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
-%patch4 -p1 -b .more-readable-c-code
+# Disabled for now, as it needs regenerating for 1.8
+#patch4 -p1 -b .more-readable-c-code
+# Fails on 1.8 with this error:
+# [translation:ERROR] Error:
+# [translation:ERROR] Traceback (most recent call last):
+# [translation:ERROR] File "translate.py", line 309, in main
+# [translation:ERROR] drv.proceed(goals)
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/driver.py", line 811, in proceed
+# [translation:ERROR] return self._execute(goals, task_skip = self._maybe_skip())
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/tool/taskengine.py", line 116, in _execute
+# [translation:ERROR] res = self._do(goal, taskcallable, *args, **kwds)
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/driver.py", line 287, in _do
+# [translation:ERROR] res = func()
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/driver.py", line 530, in task_source_c
+# [translation:ERROR] exe_name=exe_name)
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 252, in generate_source
+# [translation:ERROR] split=self.split)
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 989, in gen_source
+# [translation:ERROR] sg.gen_readable_parts_of_source(f)
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 843, in gen_readable_parts_of_source
+# [translation:ERROR] for node, impl in nodeiter:
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/genc.py", line 729, in subiter
+# [translation:ERROR] impl = '\n'.join(list(node.implementation())).split('\n')
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/node.py", line 867, in implementation
+# [translation:ERROR] for s in self.funcgen_implementation(funcgen):
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/node.py", line 901, in funcgen_implementation
+# [translation:ERROR] for line in bodyiter:
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/funcgen.py", line 272, in cfunction_body
+# [translation:ERROR] blocks.sort(block_comparator)
+# [translation:ERROR] File "/builddir/build/BUILD/pypy-pypy-2346207d9946/pypy/translator/c/funcgen.py", line 34, in block_comparator
+# [translation:ERROR] if blk0.isstartblock:
+# [translation:ERROR] AttributeError: 'Block' object has no attribute 'isstartblock'
%patch5 -p1
@@ -860,6 +891,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Fri Feb 10 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.8-2
+- disable C readability patch for now (patch 4)
+
* Thu Feb 9 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.8-1
- 1.8; regenerate config patch (patch 0); drop selinux patch (patch 2);
regenerate patch 5
commit 52a91fcc4b0ffbdb511ad40e389fe6566d1b8623
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Fri Feb 10 09:19:56 2012 -0500
1.8
rebase to 1.8:
* regenerate config patch (patch 0)
* drop selinux patch (patch 2)
* regenerate patch 5
diff --git a/.gitignore b/.gitignore
index 99af398..86ec921 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
/pypy-1.5-src.tar.bz2
/release-1.6.tar.bz2
/release-1.7.tar.bz2
+/release-1.8.tar.bz2
diff --git a/config.patch b/config.patch
index afd7a7d..a11f397 100644
--- a/config.patch
+++ b/config.patch
@@ -1,31 +1,7 @@
-diff -up pypy-pypy-release-1.7/pypy/translator/platform/linux.py.configure-fedora pypy-pypy-release-1.7/pypy/translator/platform/linux.py
---- pypy-pypy-release-1.7/pypy/translator/platform/linux.py.configure-fedora 2011-11-19 02:44:54.000000000 -0500
-+++ pypy-pypy-release-1.7/pypy/translator/platform/linux.py 2011-11-21 13:07:03.454240019 -0500
-@@ -1,15 +1,21 @@
- """Support for Linux."""
-
-+import os
- import sys
- from pypy.translator.platform.posix import BasePosix
-
-+CFLAGS = ['-O3', '-pthread', '-fomit-frame-pointer',
-+ '-Wall', '-Wno-unused']
-+if os.environ.get('CFLAGS', None):
-+ CFLAGS.extend(os.environ['CFLAGS'].split())
-+CFLAGS = tuple(CFLAGS)
-+
- class BaseLinux(BasePosix):
- name = "linux"
-
- link_flags = ('-pthread',)
- extra_libs = ('-lrt',)
-- cflags = ('-O3', '-pthread', '-fomit-frame-pointer',
-- '-Wall', '-Wno-unused')
-+ cflags = CFLAGS
- standalone_only = ()
- shared_only = ('-fPIC',)
- so_ext = 'so'
-@@ -26,13 +32,14 @@ class BaseLinux(BasePosix):
+diff -up pypy-pypy-2346207d9946/pypy/translator/platform/linux.py.configure-fedora pypy-pypy-2346207d9946/pypy/translator/platform/linux.py
+--- pypy-pypy-2346207d9946/pypy/translator/platform/linux.py.configure-fedora 2012-02-09 13:27:19.000000000 -0500
++++ pypy-pypy-2346207d9946/pypy/translator/platform/linux.py 2012-02-10 09:06:20.393066016 -0500
+@@ -31,13 +31,14 @@ class BaseLinux(BasePosix):
return self._pkg_config("libffi", "--libs-only-L",
['/usr/lib/libffi'])
diff --git a/fix-test_commands-expected-ls-output-issue7108.patch b/fix-test_commands-expected-ls-output-issue7108.patch
deleted file mode 100644
index becc3e0..0000000
--- a/fix-test_commands-expected-ls-output-issue7108.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- test/test_commands.py.orig 2010-12-22 13:25:11.357333216 -0500
-+++ test/test_commands.py 2010-12-22 13:25:57.927166219 -0500
-@@ -47,7 +47,7 @@ class CommandTests(unittest.TestCase):
- # Note that the first case above has a space in the group name
- # while the second one has a space in both names.
- pat = r'''d......... # It is a directory.
-- \+? # It may have ACLs.
-+ [.+@]? # It may have alt access (SELinux, ACLs or metadata ('@' OS X).
- \s+\d+ # It has some number of links.
- [^/]* # Skip user, group, size, and date.
- /\. # and end with the name of the file.
diff --git a/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch b/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
index eb6f324..9071be5 100644
--- a/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
+++ b/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
@@ -1,6 +1,5 @@
-diff -up pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py.non-readable-path pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py
---- pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py.non-readable-path 2011-08-20 11:46:31.410646024 -0400
-+++ pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py 2011-08-20 11:46:39.421645476 -0400
+--- pypy-pypy-2346207d9946/lib-python/2.7/test/test_subprocess.py.orig 2012-02-09 13:27:19.000000000 -0500
++++ pypy-pypy-2346207d9946/lib-python/2.7/test/test_subprocess.py 2012-02-10 09:14:08.312216221 -0500
@@ -570,7 +570,7 @@ class ProcessTestCase(BaseTestCase):
for i in range(1024):
# Windows raises IOError. Others raise OSError.
@@ -9,4 +8,4 @@ diff -up pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py.non-readab
+ subprocess.Popen(['/usr/bin/nonexisting_i_hope'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
- if c.exception.errno != errno.ENOENT: # ignore "no such file"
+ # ignore errors that indicate the command was not found
diff --git a/pypy.spec b/pypy.spec
index b5982bd..9838bae 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 1.7
-Release: 4%{?dist}
+Version: 1.8
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -145,10 +145,6 @@ Patch0: config.patch
# merely render dots:
Patch1: pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
-# test_commmands fails on SELinux systems due to a change in the output
-# of "ls" (http://bugs.python.org/issue7108)
-Patch2: fix-test_commands-expected-ls-output-issue7108.patch
-
# Try to improve the readability of the generated .c code, by adding in the
# RPython source as comments where possible.
# A version of this was sent upstream as:
@@ -324,14 +320,10 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-pypy-release-%{version}
+%setup -q -n pypy-pypy-2346207d9946
%patch0 -p1 -b .configure-fedora
%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
-pushd lib-python/%{pylibver}
-%patch2 -p0
-popd
-
%patch4 -p1 -b .more-readable-c-code
%patch5 -p1
@@ -868,6 +860,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Feb 9 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.8-1
+- 1.8; regenerate config patch (patch 0); drop selinux patch (patch 2);
+regenerate patch 5
+
* Tue Jan 31 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.7-4
- fix an incompatibility with virtualenv (rhbz#742641)
diff --git a/sources b/sources
index 197491c..30a988e 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-fc22184c931ead98bdae9ec3e79595c2 release-1.7.tar.bz2
+661be06978fdc907d84f0ee1f1228c8b release-1.8.tar.bz2
commit a8e52ca5f82917a1b2fb3a3684272c2c1e39f146
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Tue Jan 31 04:53:38 2012 -0500
fix an incompatibility with virtualenv (rhbz#742641)
Previously, we manually fixed up the library search path to be
below %{pypyprefix}, by patching pypy/translator/goal/app_main.py (adding
LIBRARY_INSTALLATION_PATH in patch 3, then using sed to change it to the
correct value in %prep after applying the patch).
This led to issues when using pypy with virtualenv, so now (as suggested in
https://codespeak.net/issue/pypy-dev/issue614 ) we simply install the pypy
binary into %{pypyprefix}, and make /usr/bin/pypy be a symlink to it. This
allows pypy to find its libraries both when run outside a virtualenv, and
within it.
Resolves https://bugzilla.redhat.com/show_bug.cgi?id=742641
diff --git a/pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch b/pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
deleted file mode 100644
index 93bcb69..0000000
--- a/pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-diff -r cd083843b67a pypy/translator/goal/app_main.py
---- a/pypy/translator/goal/app_main.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/goal/app_main.py Wed Dec 22 17:43:21 2010 -0500
-@@ -191,6 +191,12 @@
- IS_WINDOWS = False
-
- def get_library_path(executable):
-+ # FIXME: get this from translator configuration
-+ dirname = LIBRARY_INSTALLATION_PATH
-+ newpath = sys.pypy_initial_path(dirname)
-+ if newpath:
-+ return newpath
-+
- search = executable
- while 1:
- dirname = resolvedirof(search)
diff --git a/pypy.spec b/pypy.spec
index 4bf93a4..b5982bd 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.7
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -149,18 +149,6 @@ Patch1: pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
# of "ls" (http://bugs.python.org/issue7108)
Patch2: fix-test_commands-expected-ls-output-issue7108.patch
-# When locating the pypy standard libraries, look first within
-# LIBRARY_INSTALLATION_PATH.
-# We convert this from being a non-existant variable into a string literal
-# with the value of "pypyprefix" in the "prep" phase below.
-#
-# We still use the scanning relative to the binary location when invoking a
-# pypy binary during the build (e.g. during "check")
-#
-# Sent upstream (with caveats) as:
-# https://codespeak.net/issue/pypy-dev/issue614
-Patch3: pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
-
# Try to improve the readability of the generated .c code, by adding in the
# RPython source as comments where possible.
# A version of this was sent upstream as:
@@ -344,14 +332,6 @@ pushd lib-python/%{pylibver}
%patch2 -p0
popd
-# Look for the pypy libraries within LIBRARY_INSTALLATION_PATH first:
-%patch3 -p1
-# Fixup LIBRARY_INSTALLATION_PATH to be a string literal containing our value
-# for "pypyprefix":
-sed -i \
- -e 's|LIBRARY_INSTALLATION_PATH|"%{pypyprefix}"|' \
- pypy/translator/goal/app_main.py
-
%patch4 -p1 -b .more-readable-c-code
%patch5 -p1
@@ -535,7 +515,19 @@ rm -rf $RPM_BUILD_ROOT
InstallPyPy() {
ExeName=$1
- install -m 755 %{goal_dir}/$ExeName %{buildroot}/%{_bindir}
+ # To ensure compatibility with virtualenv, pypy finds its libraries
+ # relative to itself; this happens within
+ # pypy/translator/goal/app_main.py:get_library_path
+ # which calls sys.pypy_initial_path(dirname) on the dir containing
+ # the executable, with symlinks resolved.
+ #
+ # Hence we make /usr/bin/pypy be a symlink to the real binary, which we
+ # place within /usr/lib[64]/pypy-1.* as pypy
+ #
+ # This ought to enable our pypy build to work with virtualenv
+ # (rhbz#742641)
+ install -m 755 %{goal_dir}/$ExeName %{buildroot}/%{pypyprefix}/$ExeName
+ ln -s %{pypyprefix}/$ExeName %{buildroot}/%{_bindir}
# The generated machine code doesn't need an executable stack, but
# one of the assembler files (gcmaptable.s) doesn't have the necessary
@@ -546,10 +538,11 @@ InstallPyPy() {
#
# I tried various approaches involving fixing the build, but the simplest
# approach is to postprocess the ELF file:
- execstack --clear-execstack %{buildroot}/%{_bindir}/$ExeName
+ execstack --clear-execstack %{buildroot}/%{pypyprefix}/$ExeName
}
mkdir -p %{buildroot}/%{_bindir}
+mkdir -p %{buildroot}/%{pypyprefix}
InstallPyPy pypy
@@ -570,7 +563,6 @@ InstallPyPy pypy-stackless
# PREFIX/lib-python/modified.2.5.2
# as given on the above page, i.e. it uses '-' not '.'
-mkdir -p %{buildroot}/%{pypyprefix}
cp -a lib-python %{buildroot}/%{pypyprefix}
cp -a lib_pypy %{buildroot}/%{pypyprefix}
@@ -859,6 +851,7 @@ rm -rf $RPM_BUILD_ROOT
%defattr(-,root,root,-)
%doc LICENSE README
%{_bindir}/pypy
+%{pypyprefix}/pypy
%files devel
%defattr(-,root,root,-)
@@ -875,6 +868,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Jan 31 2012 David Malcolm <dmalcolm(a)redhat.com> - 1.7-4
+- fix an incompatibility with virtualenv (rhbz#742641)
+
* Sat Jan 14 2012 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 1.7-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
commit e21faf468c1f7001f4680cff5f09fca068fb0397
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Fri Jan 13 19:29:18 2012 -0600
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
diff --git a/pypy.spec b/pypy.spec
index d99d341..4bf93a4 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.7
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -875,6 +875,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Sat Jan 14 2012 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 1.7-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
+
* Fri Dec 16 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.7-2
- use --gcrootfinder=shadowstack, and use standard Fedora compilation flags,
with -Wno-unused (rhbz#666966 and rhbz#707707)
commit 416c353a67345f32fa7da698b18eef5ad1d1e77e
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Fri Dec 16 17:15:41 2011 -0500
1.7-2: use --gcrootfinder=shadowstack, and use standard Fedora compilation flags
* Fri Dec 16 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.7-2
- use --gcrootfinder=shadowstack, and use standard Fedora compilation flags,
with -Wno-unused (rhbz#666966 and rhbz#707707)
diff --git a/pypy.spec b/pypy.spec
index 1d6b6af..d99d341 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.7
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -110,6 +110,10 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# Easy way to enable/disable verbose logging:
%global verbose_logs 0
+# Forcibly use the shadow-stack option for detecting GC roots, rather than
+# relying on hacking up generated assembler with regexps:
+%global shadow_stack 1
+
# Easy way to turn off the selftests:
%global run_selftests 1
@@ -429,6 +433,22 @@ BuildPyPy() {
# plus all substrings from CFLAGS in the environment.
# This is used to generate a value for CFLAGS that's written into the Makefile
+ # How will we track garbage-collection roots in the generated code?
+ # http://pypy.readthedocs.org/en/latest/config/translation.gcrootfinder.html
+
+%if 0%{shadow_stack}
+ # This is the most portable option, and avoids a reliance on non-guaranteed
+ # behaviors within GCC's code generator: use an explicitly-maintained stack
+ # of root pointers:
+ %define gcrootfinder_options --gcrootfinder=shadowstack
+
+ export CFLAGS=$(echo "$RPM_OPT_FLAGS")
+
+%else
+ # Go with the default, which is "asmgcc"
+
+ %define gcrootfinder_options %{nil}
+
# https://bugzilla.redhat.com/show_bug.cgi?id=588941#c18
# The generated Makefile compiles the .c files into assembler (.s), rather
# than direct to .o It then post-processes this assembler to locate
@@ -443,6 +463,13 @@ BuildPyPy() {
# 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//')
+%endif
+
+ # The generated C code leads to many thousands of warnings of the form:
+ # warning: variable 'l_v26003' set but not used [-Wunused-but-set-variable]
+ # Suppress them:
+ export CFLAGS=$(echo "$CFLAGS" -Wno-unused)
+
# If we're already built the JIT-enabled "pypy", then use it for subsequent
# builds (of other configurations):
if test -x './pypy' ; then
@@ -466,6 +493,7 @@ BuildPyPy() {
--cflags="$CFLAGS" \
--batch \
--output=$ExeName \
+ %{gcrootfinder_options} \
$Options
echo "--------------------------------------------------------------"
@@ -847,6 +875,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Fri Dec 16 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.7-2
+- use --gcrootfinder=shadowstack, and use standard Fedora compilation flags,
+with -Wno-unused (rhbz#666966 and rhbz#707707)
+
* Mon Nov 21 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.7-1
- 1.7: refresh patch 0 (configuration) and patch 4 (readability of generated
code)
commit 4ef3f10721000d632a9dcfcfca05c7cde0f91b95
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Tue Nov 22 11:30:49 2011 -0500
1.7
* Mon Nov 21 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.7-1
- 1.7: refresh patch 0 (configuration) and patch 4 (readability of generated
code)
diff --git a/.gitignore b/.gitignore
index ecd135f..99af398 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
/pypy-1.4.1-src.tar.bz2
/pypy-1.5-src.tar.bz2
/release-1.6.tar.bz2
+/release-1.7.tar.bz2
diff --git a/config.patch b/config.patch
new file mode 100644
index 0000000..afd7a7d
--- /dev/null
+++ b/config.patch
@@ -0,0 +1,49 @@
+diff -up pypy-pypy-release-1.7/pypy/translator/platform/linux.py.configure-fedora pypy-pypy-release-1.7/pypy/translator/platform/linux.py
+--- pypy-pypy-release-1.7/pypy/translator/platform/linux.py.configure-fedora 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/platform/linux.py 2011-11-21 13:07:03.454240019 -0500
+@@ -1,15 +1,21 @@
+ """Support for Linux."""
+
++import os
+ import sys
+ from pypy.translator.platform.posix import BasePosix
+
++CFLAGS = ['-O3', '-pthread', '-fomit-frame-pointer',
++ '-Wall', '-Wno-unused']
++if os.environ.get('CFLAGS', None):
++ CFLAGS.extend(os.environ['CFLAGS'].split())
++CFLAGS = tuple(CFLAGS)
++
+ class BaseLinux(BasePosix):
+ name = "linux"
+
+ link_flags = ('-pthread',)
+ extra_libs = ('-lrt',)
+- cflags = ('-O3', '-pthread', '-fomit-frame-pointer',
+- '-Wall', '-Wno-unused')
++ cflags = CFLAGS
+ standalone_only = ()
+ shared_only = ('-fPIC',)
+ so_ext = 'so'
+@@ -26,13 +32,14 @@ class BaseLinux(BasePosix):
+ return self._pkg_config("libffi", "--libs-only-L",
+ ['/usr/lib/libffi'])
+
+- def library_dirs_for_libffi_a(self):
+- # places where we need to look for libffi.a
+- # XXX obscuuure! only look for libffi.a if run with translate.py
+- if 'translate' in sys.modules:
+- return self.library_dirs_for_libffi() + ['/usr/lib']
+- else:
+- return []
++ # Fedora, at least, has the shared version but not the static:
++ #def library_dirs_for_libffi_a(self):
++ # # places where we need to look for libffi.a
++ # # XXX obscuuure! only look for libffi.a if run with translate.py
++ # if 'translate' in sys.modules:
++ # return self.library_dirs_for_libffi() + ['/usr/lib']
++ # else:
++ # return []
+
+
+ class Linux(BaseLinux):
diff --git a/pypy-1.5-more-readable-c-code.patch b/more-readable-c-code.patch
similarity index 83%
rename from pypy-1.5-more-readable-c-code.patch
rename to more-readable-c-code.patch
index b7103e2..92d340f 100644
--- a/pypy-1.5-more-readable-c-code.patch
+++ b/more-readable-c-code.patch
@@ -1,15 +1,15 @@
-diff -up pypy-1.5-src/pypy/interpreter/pycode.py.more-readable-c-code pypy-1.5-src/pypy/interpreter/pycode.py
---- pypy-1.5-src/pypy/interpreter/pycode.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/interpreter/pycode.py 2011-05-02 14:28:33.942161002 -0400
+diff -up pypy-pypy-release-1.7/pypy/interpreter/pycode.py.more-readable-c-code pypy-pypy-release-1.7/pypy/interpreter/pycode.py
+--- pypy-pypy-release-1.7/pypy/interpreter/pycode.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/interpreter/pycode.py 2011-11-21 16:16:15.673463780 -0500
@@ -13,6 +13,7 @@ from pypy.interpreter.gateway import Non
- from pypy.interpreter.astcompiler.consts import (CO_OPTIMIZED,
+ from pypy.interpreter.astcompiler.consts import (
CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS, CO_NESTED,
CO_GENERATOR, CO_CONTAINSGLOBALS)
+from pypy.interpreter.pytraceback import offset2lineno
from pypy.rlib.rarithmetic import intmask
from pypy.rlib.debug import make_sure_not_resized
from pypy.rlib import jit
-@@ -80,6 +81,7 @@ class PyCode(eval.Code):
+@@ -81,6 +82,7 @@ class PyCode(eval.Code):
self.hidden_applevel = hidden_applevel
self.magic = magic
self._signature = cpython_code_signature(self)
@@ -17,7 +17,7 @@ diff -up pypy-1.5-src/pypy/interpreter/pycode.py.more-readable-c-code pypy-1.5-s
self._initialize()
def _initialize(self):
-@@ -396,3 +398,23 @@ class PyCode(eval.Code):
+@@ -397,3 +399,23 @@ class PyCode(eval.Code):
def repr(self, space):
return space.wrap(self.get_repr())
@@ -41,9 +41,9 @@ diff -up pypy-1.5-src/pypy/interpreter/pycode.py.more-readable-c-code pypy-1.5-s
+ # raise an IOError)
+ self._ensure_source()
+ return self._cached_source[linenum - 1]
-diff -up pypy-1.5-src/pypy/objspace/flow/model.py.more-readable-c-code pypy-1.5-src/pypy/objspace/flow/model.py
---- pypy-1.5-src/pypy/objspace/flow/model.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/objspace/flow/model.py 2011-05-02 14:28:33.942161002 -0400
+diff -up pypy-pypy-release-1.7/pypy/objspace/flow/model.py.more-readable-c-code pypy-pypy-release-1.7/pypy/objspace/flow/model.py
+--- pypy-pypy-release-1.7/pypy/objspace/flow/model.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/objspace/flow/model.py 2011-11-21 16:15:36.599466455 -0500
@@ -31,6 +31,120 @@ from pypy.tool.identity_dict import iden
__metaclass__ = type
@@ -268,10 +268,10 @@ diff -up pypy-1.5-src/pypy/objspace/flow/model.py.more-readable-c-code pypy-1.5-
result.append(copyop)
return result
newblock.operations = copyoplist(block.operations)
-diff -up pypy-1.5-src/pypy/objspace/flow/objspace.py.more-readable-c-code pypy-1.5-src/pypy/objspace/flow/objspace.py
---- pypy-1.5-src/pypy/objspace/flow/objspace.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/objspace/flow/objspace.py 2011-05-02 14:28:33.943161001 -0400
-@@ -313,7 +313,9 @@ class FlowObjSpace(ObjSpace):
+diff -up pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py.more-readable-c-code pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py
+--- pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/objspace/flow/objspace.py 2011-11-21 16:15:36.600466455 -0500
+@@ -315,7 +315,9 @@ class FlowObjSpace(ObjSpace):
def do_operation(self, name, *args_w):
spaceop = SpaceOperation(name, args_w, Variable())
if hasattr(self, 'executioncontext'): # not here during bootstrapping
@@ -282,9 +282,9 @@ diff -up pypy-1.5-src/pypy/objspace/flow/objspace.py.more-readable-c-code pypy-1
self.executioncontext.recorder.append(spaceop)
return spaceop.result
-diff -up pypy-1.5-src/pypy/objspace/flow/test/test_model.py.more-readable-c-code pypy-1.5-src/pypy/objspace/flow/test/test_model.py
---- pypy-1.5-src/pypy/objspace/flow/test/test_model.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/objspace/flow/test/test_model.py 2011-05-02 14:28:33.943161001 -0400
+diff -up pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py.more-readable-c-code pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py
+--- pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/objspace/flow/test/test_model.py 2011-11-21 16:15:36.600466455 -0500
@@ -119,3 +119,25 @@ def test_variable():
assert v2.renamed
assert v2.name.startswith("foobar_") and v2.name != v.name
@@ -311,9 +311,9 @@ diff -up pypy-1.5-src/pypy/objspace/flow/test/test_model.py.more-readable-c-code
+ assert cmp(oplocA, oplocB) < 0
+ assert cmp(oplocB, oplocA) > 0
+
-diff -up pypy-1.5-src/pypy/rpython/rtyper.py.more-readable-c-code pypy-1.5-src/pypy/rpython/rtyper.py
---- pypy-1.5-src/pypy/rpython/rtyper.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/rpython/rtyper.py 2011-05-02 14:28:33.943161001 -0400
+diff -up pypy-pypy-release-1.7/pypy/rpython/rtyper.py.more-readable-c-code pypy-pypy-release-1.7/pypy/rpython/rtyper.py
+--- pypy-pypy-release-1.7/pypy/rpython/rtyper.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/rpython/rtyper.py 2011-11-21 16:15:36.601466455 -0500
@@ -800,7 +800,7 @@ class HighLevelOp(object):
return vars
@@ -341,9 +341,9 @@ diff -up pypy-1.5-src/pypy/rpython/rtyper.py.more-readable-c-code pypy-1.5-src/p
if resulttype is None:
vresult.concretetype = Void
return None
-diff -up pypy-1.5-src/pypy/translator/backendopt/inline.py.more-readable-c-code pypy-1.5-src/pypy/translator/backendopt/inline.py
---- pypy-1.5-src/pypy/translator/backendopt/inline.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/backendopt/inline.py 2011-05-02 14:32:26.975161005 -0400
+diff -up pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py
+--- pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/backendopt/inline.py 2011-11-21 16:15:36.601466455 -0500
@@ -4,6 +4,7 @@ from pypy.translator.simplify import get
from pypy.translator.unsimplify import copyvar
from pypy.objspace.flow.model import Variable, Constant, Block, Link
@@ -371,9 +371,9 @@ diff -up pypy-1.5-src/pypy/translator/backendopt/inline.py.more-readable-c-code
return result
def copy_block(self, block):
-diff -up pypy-1.5-src/pypy/translator/c/funcgen.py.more-readable-c-code pypy-1.5-src/pypy/translator/c/funcgen.py
---- pypy-1.5-src/pypy/translator/c/funcgen.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/c/funcgen.py 2011-05-02 14:28:33.944161001 -0400
+diff -up pypy-pypy-release-1.7/pypy/translator/c/funcgen.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/c/funcgen.py
+--- pypy-pypy-release-1.7/pypy/translator/c/funcgen.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/c/funcgen.py 2011-11-21 16:15:36.602466455 -0500
@@ -1,4 +1,6 @@
import sys
+import inspect
@@ -420,7 +420,7 @@ diff -up pypy-1.5-src/pypy/translator/c/funcgen.py.more-readable-c-code pypy-1.5
class FunctionCodeGenerator(object):
"""
Collects information about a function which we have to generate
-@@ -210,14 +244,57 @@ class FunctionCodeGenerator(object):
+@@ -207,14 +241,57 @@ class FunctionCodeGenerator(object):
def cfunction_body(self):
graph = self.graph
@@ -481,7 +481,7 @@ diff -up pypy-1.5-src/pypy/translator/c/funcgen.py.more-readable-c-code pypy-1.5
for line in self.gen_op(op):
yield line
if len(block.exits) == 0:
-@@ -309,7 +386,7 @@ class FunctionCodeGenerator(object):
+@@ -306,7 +383,7 @@ class FunctionCodeGenerator(object):
assignments.append((a2typename, dest, src))
for line in gen_assignments(assignments):
yield line
@@ -490,16 +490,16 @@ diff -up pypy-1.5-src/pypy/translator/c/funcgen.py.more-readable-c-code pypy-1.5
if link.target in self.innerloops:
loop = self.innerloops[link.target]
if link is loop.links[-1]: # link that ends a loop
-diff -up pypy-1.5-src/pypy/translator/c/test/test_genc.py.more-readable-c-code pypy-1.5-src/pypy/translator/c/test/test_genc.py
---- pypy-1.5-src/pypy/translator/c/test/test_genc.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/c/test/test_genc.py 2011-05-02 14:28:33.945161001 -0400
+diff -up pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py
+--- pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/c/test/test_genc.py 2011-11-21 16:15:36.602466455 -0500
@@ -1,4 +1,5 @@
import autopath, sys, os, py
+import re
from pypy.rpython.lltypesystem.lltype import *
from pypy.annotation import model as annmodel
from pypy.translator.translator import TranslationContext
-@@ -515,3 +516,130 @@ def test_inhibit_tail_call():
+@@ -532,3 +533,130 @@ def test_inhibit_tail_call():
else:
assert 0, "the call was not found in the C source"
assert 'PYPY_INHIBIT_TAIL_CALL();' in lines[i+1]
@@ -630,10 +630,10 @@ diff -up pypy-1.5-src/pypy/translator/c/test/test_genc.py.more-readable-c-code p
+ assert 'Here is a ' in c_fn_src
+ assert 'style comment within an RPython docstring' in c_fn_src
+
-diff -up pypy-1.5-src/pypy/translator/driver.py.more-readable-c-code pypy-1.5-src/pypy/translator/driver.py
---- pypy-1.5-src/pypy/translator/driver.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/driver.py 2011-05-02 14:28:33.945161001 -0400
-@@ -536,6 +536,7 @@ class TranslationDriver(SimpleTaskEngine
+diff -up pypy-pypy-release-1.7/pypy/translator/driver.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/driver.py
+--- pypy-pypy-release-1.7/pypy/translator/driver.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/driver.py 2011-11-21 16:15:36.603466455 -0500
+@@ -535,6 +535,7 @@ class TranslationDriver(SimpleTaskEngine
dstname = self.compute_exe_name() + '.staticdata.info'
shutil.copy(str(fname), str(dstname))
self.log.info('Static data info written to %s' % dstname)
@@ -641,9 +641,9 @@ diff -up pypy-1.5-src/pypy/translator/driver.py.more-readable-c-code pypy-1.5-sr
#
task_source_c = taskdef(task_source_c, ['database_c'], "Generating c source")
-diff -up pypy-1.5-src/pypy/translator/gensupp.py.more-readable-c-code pypy-1.5-src/pypy/translator/gensupp.py
---- pypy-1.5-src/pypy/translator/gensupp.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/gensupp.py 2011-05-02 14:33:31.026161001 -0400
+diff -up pypy-pypy-release-1.7/pypy/translator/gensupp.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/gensupp.py
+--- pypy-pypy-release-1.7/pypy/translator/gensupp.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/gensupp.py 2011-11-21 16:15:36.603466455 -0500
@@ -14,8 +14,8 @@ def ordered_blocks(graph):
allblocks = []
for block in graph.iterblocks():
@@ -655,9 +655,9 @@ diff -up pypy-1.5-src/pypy/translator/gensupp.py.more-readable-c-code pypy-1.5-s
else:
ofs = sys.maxint
# then we order by input variable name or value
-diff -up pypy-1.5-src/pypy/translator/interactive.py.more-readable-c-code pypy-1.5-src/pypy/translator/interactive.py
---- pypy-1.5-src/pypy/translator/interactive.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/interactive.py 2011-05-02 14:28:33.946161001 -0400
+diff -up pypy-pypy-release-1.7/pypy/translator/interactive.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/interactive.py
+--- pypy-pypy-release-1.7/pypy/translator/interactive.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/interactive.py 2011-11-21 16:15:36.604466454 -0500
@@ -138,7 +138,7 @@ class Translation(object):
def source_c(self, argtypes=None, **kwds):
self.update_options(argtypes, kwds)
@@ -667,9 +667,9 @@ diff -up pypy-1.5-src/pypy/translator/interactive.py.more-readable-c-code pypy-1
def source_cl(self, argtypes=None, **kwds):
self.update_options(argtypes, kwds)
-diff -up pypy-1.5-src/pypy/translator/llsupport/wrapper.py.more-readable-c-code pypy-1.5-src/pypy/translator/llsupport/wrapper.py
---- pypy-1.5-src/pypy/translator/llsupport/wrapper.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/llsupport/wrapper.py 2011-05-02 14:28:33.946161001 -0400
+diff -up pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py
+--- pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/llsupport/wrapper.py 2011-11-21 16:15:36.604466454 -0500
@@ -59,6 +59,8 @@ def new_wrapper(func, translator, newnam
# "return result"
block = Block(wrapper_inputargs)
@@ -679,10 +679,10 @@ diff -up pypy-1.5-src/pypy/translator/llsupport/wrapper.py.more-readable-c-code
translator.update_call_graph(wgraph, graph, object())
translator.graphs.append(wgraph)
block.operations[:] = newops
-diff -up pypy-1.5-src/pypy/translator/simplify.py.more-readable-c-code pypy-1.5-src/pypy/translator/simplify.py
---- pypy-1.5-src/pypy/translator/simplify.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/simplify.py 2011-05-02 14:28:33.952161001 -0400
-@@ -298,7 +298,7 @@ def join_blocks(graph):
+diff -up pypy-pypy-release-1.7/pypy/translator/simplify.py.more-readable-c-code pypy-pypy-release-1.7/pypy/translator/simplify.py
+--- pypy-pypy-release-1.7/pypy/translator/simplify.py.more-readable-c-code 2011-11-19 02:44:54.000000000 -0500
++++ pypy-pypy-release-1.7/pypy/translator/simplify.py 2011-11-21 16:15:36.605466454 -0500
+@@ -292,7 +292,7 @@ def join_blocks(graph):
return renaming.get(v, v)
def rename_op(op):
args = [rename(a) for a in op.args]
diff --git a/pypy-1.5-config.patch b/pypy-1.5-config.patch
deleted file mode 100644
index 82d8fc9..0000000
--- a/pypy-1.5-config.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-diff -up pypy-1.5-src/pypy/translator/platform/linux.py.configure-fedora pypy-1.5-src/pypy/translator/platform/linux.py
---- pypy-1.5-src/pypy/translator/platform/linux.py.configure-fedora 2011-04-30 10:18:50.000000000 -0400
-+++ pypy-1.5-src/pypy/translator/platform/linux.py 2011-04-30 18:59:24.041160978 -0400
-@@ -1,13 +1,18 @@
- """Support for Linux."""
--
-+import os
- from pypy.translator.platform.posix import BasePosix
-
-+CFLAGS = ['-O3', '-pthread', '-fomit-frame-pointer',
-+ '-Wall', '-Wno-unused']
-+if os.environ.get('CFLAGS', None):
-+ CFLAGS.extend(os.environ['CFLAGS'].split())
-+CFLAGS = tuple(CFLAGS)
-+
- class BaseLinux(BasePosix):
- name = "linux"
-
- link_flags = ('-pthread', '-lrt')
-- cflags = ('-O3', '-pthread', '-fomit-frame-pointer',
-- '-Wall', '-Wno-unused')
-+ cflags = CFLAGS
- standalone_only = ()
- shared_only = ('-fPIC',)
- so_ext = 'so'
-@@ -29,9 +34,10 @@ class Linux(BaseLinux):
- shared_only = () # it seems that on 32-bit linux, compiling with -fPIC
- # gives assembler that asmgcc is not happy about.
-
-- def library_dirs_for_libffi_a(self):
-- # places where we need to look for libffi.a
-- return self.library_dirs_for_libffi() + ['/usr/lib']
-+ # Fedora Linux, at least, has the shared version but not the static
-+ #def library_dirs_for_libffi_a(self):
-+ # # places where we need to look for libffi.a
-+ # return self.library_dirs_for_libffi() + ['/usr/lib']
-
-
- class Linux64(BaseLinux):
diff --git a/pypy.spec b/pypy.spec
index 2579860..1d6b6af 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 1.6
-Release: 7%{?dist}
+Version: 1.7
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -126,14 +126,14 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: https://bitbucket.org/pypy/pypy/get/release-1.6.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/get/release-%{version}.tar.bz2
# Supply various useful RPM macros for building python modules against pypy:
# __pypy, pypy_sitelib, pypy_sitearch
Source2: macros.pypy
# Edit a translator file for linux in order to configure our cflags and dynamic libffi
-Patch0: pypy-1.5-config.patch
+Patch0: config.patch
# By default, if built at a tty, the translation process renders a Mandelbrot
# set to indicate progress.
@@ -163,7 +163,7 @@ Patch3: pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
# http://codespeak.net/pipermail/pypy-dev/2010q4/006532.html
# TODO: get this into the upstream bug tracker, and finish inlining
# support (rhbz#666963)
-Patch4: pypy-1.5-more-readable-c-code.patch
+Patch4: more-readable-c-code.patch
# In my koji builds, /root/bin is in the PATH for some reason
# This leads to test_subprocess.py failing, due to "test_leaking_fds_on_error"
@@ -847,6 +847,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Nov 21 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.7-1
+- 1.7: refresh patch 0 (configuration) and patch 4 (readability of generated
+code)
+
* Tue Oct 4 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-7
- skip test_multiprocessing
diff --git a/sources b/sources
index 5660f1e..197491c 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-1189352effc5df7df84e6916b3b3eae3 release-1.6.tar.bz2
+fc22184c931ead98bdae9ec3e79595c2 release-1.7.tar.bz2
commit 953cba8f403df754b658c3310b0505c1ba5dc5a5
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Tue Oct 4 14:37:40 2011 -0400
1.6-7: skip test_multiprocessing
* Tue Oct 4 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-7
- skip test_multiprocessing
diff --git a/pypy.spec b/pypy.spec
index 90b3f88..2579860 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.6
-Release: 6%{?dist}
+Release: 7%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -728,6 +728,12 @@ CheckPyPy() {
# "strop" module doesn't exist for pypy yet:
SkipTest test_strop
+ # I'm seeing Koji builds hanging e.g.:
+ # http://koji.fedoraproject.org/koji/getfile?taskID=3386821&name=build.log
+ # The only test that seems to have timed out in that log is
+ # test_multiprocessing, so skip it for now:
+ SkipTest test_multiprocessing
+
echo "== Test names =="
cat testnames.txt
echo "================="
@@ -841,13 +847,15 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Oct 4 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-7
+- skip test_multiprocessing
+
* Tue Sep 13 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-6
- don't ship the emacs JIT-viewer on el5 and el6 (missing emacs-filesystem;
missing _emacs_bytecompile macro on el5)
* Mon Sep 12 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-5
- build using python26 on el5 (2.4 is too early)
-
* Thu Aug 25 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-4
- fix SkipTest function to avoid corrupting the name of "test_gdbm"
commit 2d36a5e81680be23c3e25e9f4bff4737a550687f
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Tue Sep 13 05:00:09 2011 -0400
don't ship the emacs JIT-viewer on el5 and el6
* Tue Sep 13 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-6
- don't ship the emacs JIT-viewer on el5 and el6 (missing emacs-filesystem;
missing _emacs_bytecompile macro on el5)
diff --git a/pypy.spec b/pypy.spec
index 9fc1462..90b3f88 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.6
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -100,6 +100,12 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# Should we build a "pypy-stackless" binary?
%global with_stackless 0
+# Should we build the emacs JIT-viewing mode?
+%if 0%{?rhel} == 5 || 0%{?rhel} == 6
+%global with_emacs 0
+%else
+%global with_emacs 1
+%endif
# Easy way to enable/disable verbose logging:
%global verbose_logs 0
@@ -257,7 +263,9 @@ BuildRequires: perl
BuildRequires: /usr/bin/execstack
# For byte-compiling the JIT-viewing mode:
+%if %{with_emacs}
BuildRequires: emacs
+%endif
# pypy is bundling these so we delete them in %%prep. I don't think they are
# needed unless we build pypy targetted at running on the jvm.
@@ -287,7 +295,9 @@ Summary: Run-time libraries used by PyPy implementations of Python
# We supply an emacs mode for the JIT viewer.
# (This doesn't bring in all of emacs, just the directory structure)
+%if %{with_emacs}
Requires: emacs-filesystem >= %{_emacs_version}
+%endif
%description libs
Libraries required by the various PyPy implementations of Python.
@@ -484,7 +494,9 @@ BuildPyPy \
"--stackless"
%endif
+%if %{with_emacs}
%{_emacs_bytecompile} pypy/jit/tool/pypytrace-mode.el
+%endif
%install
rm -rf $RPM_BUILD_ROOT
@@ -662,8 +674,10 @@ find \
# are acceptable.
# Install the JIT trace mode for Emacs:
+%if %{with_emacs}
mkdir -p %{buildroot}/%{_emacs_sitelispdir}
cp -a pypy/jit/tool/pypytrace-mode.el* %{buildroot}/%{_emacs_sitelispdir}
+%endif
# Install macros for rpm:
mkdir -p %{buildroot}/%{_sysconfdir}/rpm
@@ -802,8 +816,10 @@ rm -rf $RPM_BUILD_ROOT
%{pypyprefix}/lib-python/conftest.py*
%{pypyprefix}/lib_pypy/
%{pypyprefix}/site-packages/
+%if %{with_emacs}
%{_emacs_sitelispdir}/pypytrace-mode.el
%{_emacs_sitelispdir}/pypytrace-mode.elc
+%endif
%files
%defattr(-,root,root,-)
@@ -825,6 +841,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Sep 13 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-6
+- don't ship the emacs JIT-viewer on el5 and el6 (missing emacs-filesystem;
+missing _emacs_bytecompile macro on el5)
+
* Mon Sep 12 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-5
- build using python26 on el5 (2.4 is too early)
commit 009aeb1c2d9928be62c11bf154af0644f08816eb
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Mon Sep 12 21:01:16 2011 -0400
build using python26 on el5 (2.4 is too early)
diff --git a/pypy.spec b/pypy.spec
index b303232..9fc1462 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.6
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -213,10 +213,18 @@ Patch5: pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
BuildRequires: pypy
%global bootstrap_python_interp pypy
%else
+
+# Python 2.6 or later is needed, so on RHEL5 (2.4) we need to use the alternate
+# python26 rpm:
+%if 0%{?rhel} == 5
+BuildRequires: python26-devel
+%global bootstrap_python_interp python26
+%else
BuildRequires: python-devel
%global bootstrap_python_interp python
%endif
+%endif
# FIXME: I'm seeing errors like this in the logs:
@@ -817,6 +825,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon Sep 12 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-5
+- build using python26 on el5 (2.4 is too early)
+
* Thu Aug 25 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-4
- fix SkipTest function to avoid corrupting the name of "test_gdbm"
commit 106cb91275756dab4a44a6e75cd090ea57c6d5a7
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Thu Aug 25 14:50:53 2011 -0400
fix SkipTest function to avoid corrupting the name of "test_gdbm"
diff --git a/pypy.spec b/pypy.spec
index 2c3e47c..b303232 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.6
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -666,7 +666,7 @@ topdir=$(pwd)
SkipTest() {
TEST_NAME=$1
- sed -i -e"s|$TEST_NAME||" testnames.txt
+ sed -i -e"s|^$TEST_NAME$||g" testnames.txt
}
CheckPyPy() {
@@ -817,6 +817,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Aug 25 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-4
+- fix SkipTest function to avoid corrupting the name of "test_gdbm"
+
* Thu Aug 25 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-3
- add rpm macros file to the devel subpackage (source 2)
- skip some tests that can't pass yet
commit afabd9d6bee5ad70b522d5d9c5745256ff46b827
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Thu Aug 25 11:58:55 2011 -0400
1.6-3: add rpm macros file to the devel subpackage; skip some tests
diff --git a/macros.pypy b/macros.pypy
new file mode 100644
index 0000000..5f40b6f
--- /dev/null
+++ b/macros.pypy
@@ -0,0 +1,5 @@
+%__pypy /usr/bin/pypy
+%pypy_sitelib %(%{__pypy} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
+%pypy_sitearch %(%{__pypy} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")
+%pypy_version %(%{__pypy} -c "import sys; sys.stdout.write(sys.version[:3])")
+%pypydir %{_builddir}/pypy-%{name}-%{version}-%{release}
diff --git a/pypy.spec b/pypy.spec
index 3280ff9..2c3e47c 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.6
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -122,6 +122,10 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# Source and patches:
Source0: https://bitbucket.org/pypy/pypy/get/release-1.6.tar.bz2
+# Supply various useful RPM macros for building python modules against pypy:
+# __pypy, pypy_sitelib, pypy_sitearch
+Source2: macros.pypy
+
# Edit a translator file for linux in order to configure our cflags and dynamic libffi
Patch0: pypy-1.5-config.patch
@@ -653,13 +657,16 @@ find \
mkdir -p %{buildroot}/%{_emacs_sitelispdir}
cp -a pypy/jit/tool/pypytrace-mode.el* %{buildroot}/%{_emacs_sitelispdir}
+# Install macros for rpm:
+mkdir -p %{buildroot}/%{_sysconfdir}/rpm
+install -m 644 %{SOURCE2} %{buildroot}/%{_sysconfdir}/rpm
+
%check
topdir=$(pwd)
SkipTest() {
- # Append the given test name to TESTS_TO_SKIP
TEST_NAME=$1
- TESTS_TO_SKIP="$TESTS_TO_SKIP $TEST_NAME"
+ sed -i -e"s|$TEST_NAME||" testnames.txt
}
CheckPyPy() {
@@ -686,6 +693,19 @@ CheckPyPy() {
"from test.regrtest import findtests; print '\n'.join(findtests())"
) > testnames.txt
+ # Skip some tests:
+ # "audioop" doesn't exist for pypy yet:
+ SkipTest test_audioop
+
+ # The gdb CPython hooks haven't been ported to cpyext:
+ SkipTest test_gdb
+
+ # hotshot relies heavily on _hotshot, which doesn't exist:
+ SkipTest test_hotshot
+
+ # "strop" module doesn't exist for pypy yet:
+ SkipTest test_strop
+
echo "== Test names =="
cat testnames.txt
echo "================="
@@ -786,6 +806,7 @@ rm -rf $RPM_BUILD_ROOT
%defattr(-,root,root,-)
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
+%config(noreplace) %{_sysconfdir}/rpm/macros.pypy
%if 0%{with_stackless}
%files stackless
@@ -796,6 +817,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Aug 25 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-3
+- add rpm macros file to the devel subpackage (source 2)
+- skip some tests that can't pass yet
+
* Sat Aug 20 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-2
- work around test_subprocess failure seen in koji (patch 5)
commit 1df5c3e618c5f2bcbdbe44f329039dfffc1cd79e
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Sat Aug 20 11:59:48 2011 -0400
work around test_subprocess failure seen in koji (patch 5)
diff --git a/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch b/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
new file mode 100644
index 0000000..eb6f324
--- /dev/null
+++ b/pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
@@ -0,0 +1,12 @@
+diff -up pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py.non-readable-path pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py
+--- pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py.non-readable-path 2011-08-20 11:46:31.410646024 -0400
++++ pypy-pypy-release-1.6/lib-python/2.7/test/test_subprocess.py 2011-08-20 11:46:39.421645476 -0400
+@@ -570,7 +570,7 @@ class ProcessTestCase(BaseTestCase):
+ for i in range(1024):
+ # Windows raises IOError. Others raise OSError.
+ with self.assertRaises(EnvironmentError) as c:
+- subprocess.Popen(['nonexisting_i_hope'],
++ subprocess.Popen(['/usr/bin/nonexisting_i_hope'],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ if c.exception.errno != errno.ENOENT: # ignore "no such file"
diff --git a/pypy.spec b/pypy.spec
index c3faabb..3280ff9 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.6
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -155,6 +155,16 @@ Patch3: pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
# support (rhbz#666963)
Patch4: pypy-1.5-more-readable-c-code.patch
+# In my koji builds, /root/bin is in the PATH for some reason
+# This leads to test_subprocess.py failing, due to "test_leaking_fds_on_error"
+# trying every dir in PATH for "nonexisting_i_hope", which leads to it raising
+# OSError: [Errno 13] Permission denied
+# when it tries to read /root/bin, rather than raising "No such file"
+#
+# Work around this by specifying an absolute path for the non-existant
+# executable
+# Not yet sent upstream
+Patch5: pypy-1.6-fix-test-subprocess-with-nonreadable-path-dir.patch
# Build-time requirements:
@@ -318,6 +328,7 @@ sed -i \
%patch4 -p1 -b .more-readable-c-code
+%patch5 -p1
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
@@ -785,6 +796,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Sat Aug 20 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-2
+- work around test_subprocess failure seen in koji (patch 5)
+
* Thu Aug 18 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-1
- 1.6
- rewrite the %%check section, introducing per-test timeouts
commit 3a2c2ec86de943a3dbdc8de5608e6a8f79c48a85
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Fri Aug 19 19:04:38 2011 -0400
pypy-1.6-1
- 1.6
- rewrite the %check section, introducing per-test timeouts
diff --git a/.gitignore b/.gitignore
index 017cf34..ecd135f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
/pypy-1.4.1-src.tar.bz2
/pypy-1.5-src.tar.bz2
+/release-1.6.tar.bz2
diff --git a/pypy.spec b/pypy.spec
index 0c2c717..c3faabb 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 1.5
-Release: 2%{?dist}
+Version: 1.6
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -104,6 +104,9 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# Easy way to enable/disable verbose logging:
%global verbose_logs 0
+# Easy way to turn off the selftests:
+%global run_selftests 1
+
%global pypyprefix %{_libdir}/pypy-%{version}
%global pylibver 2.7
@@ -117,7 +120,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
# Source and patches:
-Source0: http://pypy.org/download/pypy-%{version}-src.tar.bz2
+Source0: https://bitbucket.org/pypy/pypy/get/release-1.6.tar.bz2
# Edit a translator file for linux in order to configure our cflags and dynamic libffi
Patch0: pypy-1.5-config.patch
@@ -218,9 +221,17 @@ BuildRequires: openssl-devel
BuildRequires: valgrind-devel
%endif
+%if %{run_selftests}
# Used by the selftests, though not by the build:
BuildRequires: gc-devel
+# For use in the selftests, for recording stats:
+BuildRequires: time
+
+# For use in the selftests, for imposing a per-test timeout:
+BuildRequires: perl
+%endif
+
BuildRequires: /usr/bin/execstack
# For byte-compiling the JIT-viewing mode:
@@ -289,7 +300,7 @@ Build of PyPy with support for micro-threads for massive concurrency
%prep
-%setup -q -n pypy-%{version}-src
+%setup -q -n pypy-pypy-release-%{version}
%patch0 -p1 -b .configure-fedora
%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
@@ -656,445 +667,47 @@ CheckPyPy() {
pushd %{goal_dir}
- # Gather a list of tests to skip, due to known failures
- # TODO: report these failures to pypy upstream
- # See also rhbz#666967 and rhbz#666969
- TESTS_TO_SKIP=""
-
- # Test failures relating to missing codecs
- # Hopefully when pypy merges to 2.7 support we'll gain these via a
- # refreshed stdlib:
- # test_codecencodings_cn:
- # all tests fail, with one of
- # unknown encoding: gb18030
- # unknown encoding: gb2312
- # unknown encoding: gbk
- SkipTest test_codecencodings_cn
-
- # test_codecencodings_hk:
- # all tests fail, with:
- # unknown encoding: big5hkscs
- SkipTest test_codecencodings_hk
-
- # test_codecencodings_jp:
- # all tests fail, with one of:
- # unknown encoding: cp932
- # unknown encoding: euc_jisx0213
- # unknown encoding: euc_jp
- # unknown encoding: shift_jis
- # unknown encoding: shift_jisx0213
- SkipTest test_codecencodings_jp
-
- # test_codecencodings_kr:
- # all tests fail, with one of:
- # unknown encoding: cp949
- # unknown encoding: euc_kr
- # unknown encoding: johab
- SkipTest test_codecencodings_kr
-
- # test_codecencodings_tw:
- # all tests fail, with:
- # unknown encoding: big5
- SkipTest test_codecencodings_tw
-
- # test_multibytecodec:
- # 14 failures out of 15, due to:
- # unknown encoding: euc-kr
- # unknown encoding: gb2312
- # unknown encoding: jisx0213
- # unknown encoding: cp949
- # unknown encoding: iso2022-jp
- # unknown encoding: gb18030
- SkipTest test_multibytecodec
-
- #
- # Other failures:
- #
- # test_asynchat:
- # seems to hang on this test, within test_line_terminator
- SkipTest test_asynchat
-
- # test_audioop:
- # test test_audioop crashed -- <type 'exceptions.ImportError'>: No module named audioop
- # Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/regrtest.py", line 874, in runtest_inner
- # the_package = __import__(abstest, globals(), locals(), [])
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_audioop.py", line 1, in <module>
- # import audioop
- # ImportError: No module named audioop
- SkipTest test_audioop
-
- # test_capi:
- # RPython traceback:
- # RPython traceback:
- # File "implement.c", line 243013, in _PyObject_New
- # File "implement_1.c", line 31707, in _PyObject_NewVar
- # File "implement.c", line 217060, in from_ref
- # Fatal RPython error: AssertionError
- SkipTest test_capi
-
- # test_compiler:
- # 4 errors out of 13:
- # testSourceCodeEncodingsError
- # testWith
- # testWithAss
- # testYieldExpr
- SkipTest test_compiler
-
- # test_ctypes:
- # failures=17, errors=20, out of 132 tests
- SkipTest test_ctypes
-
- # test_distutils:
- # Warning -- os.environ was modified by test_distutils
- # test test_distutils failed -- multiple errors occurred; run in verbose mode for details
- SkipTest test_distutils
-
- # test_frozen:
- # TestFailed: import __hello__ failed:No module named __hello__
- SkipTest test_frozen
-
- # test_gc:
- # test test_gc crashed -- <type 'exceptions.AttributeError'>: 'module' object has no attribute 'get_debug'
- SkipTest test_gc
-
- # test_gdb:
- # test test_gdb crashed -- <type 'exceptions.KeyError'>: 'PY_CFLAGS'
- SkipTest test_gdb
-
- # test_generators:
- # **********************************************************************
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
- # Failed example:
- # del g; gc_collect()
- # Expected:
- # exiting
- # Got nothing
- # **********************************************************************
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
- # Failed example:
- # del g; gc_collect()
- # Expected:
- # exiting
- # Got nothing
- # **********************************************************************
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
- # Failed example:
- # del g; gc_collect()
- # Expected:
- # finally
- # Got nothing
- # **********************************************************************
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
- # Failed example:
- # sys.stderr.getvalue().startswith(
- # "Exception RuntimeError: 'generator ignored GeneratorExit' in "
- # )
- # Expected:
- # True
- # Got:
- # False
- # **********************************************************************
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.refleaks
- # Failed example:
- # try:
- # sys.stderr = StringIO.StringIO()
- # class Leaker:
- # def __del__(self):
- # raise RuntimeError
- # l = Leaker()
- # del l
- # gc_collect()
- # err = sys.stderr.getvalue().strip()
- # err.startswith(
- # "Exception RuntimeError: RuntimeError() in "
- # )
- # err.endswith("> ignored")
- # len(err.splitlines())
- # finally:
- # sys.stderr = old
- # Expected:
- # True
- # True
- # 1
- # Got:
- # False
- # False
- # 0
- # **********************************************************************
- # 2 items had failures:
- # 4 of 107 in test.test_generators.__test__.coroutine
- # 1 of 11 in test.test_generators.__test__.refleaks
- # ***Test Failed*** 5 failures.
- # test test_generators failed -- 5 of 294 doctests failed
- SkipTest test_generators
-
- # test_getargs2:
- # test test_getargs2 failed -- multiple errors occurred; run in verbose mode for details
- SkipTest test_getargs2
-
- # test_hotshot:
- # test test_hotshot crashed -- <type 'exceptions.ImportError'>: No module named _hotshot
- SkipTest test_hotshot
-
- # test_io:
- # test test_io failed -- multiple errors occurred; run in verbose mode for details
- SkipTest test_io
-
- # test_ioctl:
- # Failing in Koji with dist-f15 with:
- # ======================================================================
- # FAIL: test_ioctl (test.test_ioctl.IoctlTests)
- # ----------------------------------------------------------------------
- # Traceback (most recent call last):
- # File "/usr/lib/pypy-1.4.1/lib-python/2.5.2/test/test_ioctl.py", line 25, in test_ioctl
- # self.assert_(rpgrp in ids, "%s not in %s" % (rpgrp, ids))
- # AssertionError: 0 not in (8304, 17737)
- # ======================================================================
- # FAIL: test_ioctl_mutate (test.test_ioctl.IoctlTests)
- # ----------------------------------------------------------------------
- # Traceback (most recent call last):
- # File "/usr/lib/pypy-1.4.1/lib-python/2.5.2/test/test_ioctl.py", line 35, in test_ioctl_mutate
- # self.assert_(rpgrp in ids, "%s not in %s" % (rpgrp, ids))
- # AssertionError: 0 not in (8304, 17737)
- # ----------------------------------------------------------------------
- SkipTest test_ioctl
-
- # test_iterlen:
- # 24 failures out of 25, apparently all due to TypeError
- SkipTest test_iterlen
-
- # test_multiprocessing:
- # test test_multiprocessing failed -- multiple errors occurred; run in verbose mode for details
- SkipTest test_multiprocessing
-
- # test_module:
- # test test_module failed -- Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_module.py", line 81, in test_clear_dict_in_ref_cycle
- # self.assertEqual(destroyed, [1])
- # AssertionError: Lists differ: [] != [1]
- # Second list contains 1 additional elements.
- # First extra element 0:
- # 1
- # - []
- # + [1]
- # ? +
- SkipTest test_module
-
- # test_parser:
- # 12 failures out of 15
- SkipTest test_parser
-
- # test_platform:
- # Koji builds show:
- # test test_platform failed -- errors occurred in test.test_platform.PlatformTest
- SkipTest test_platform
-
- # test_posix:
- # test test_posix failed -- Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 361, in test_getcwd_long_pathnames
- # _create_and_do_getcwd(dirname)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 351, in _create_and_do_getcwd
- # _create_and_do_getcwd(dirname, current_path_length + len(dirname) + 1)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 351, in _create_and_do_getcwd
- # _create_and_do_getcwd(dirname, current_path_length + len(dirname) + 1)
- # [...repeats...]
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 351, in _create_and_do_getcwd
- # _create_and_do_getcwd(dirname, current_path_length + len(dirname) + 1)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 356, in _create_and_do_getcwd
- # self.assertEqual(e.errno, expected_errno)
- # AssertionError: 36 != 34
- SkipTest test_posix
-
- # test_readline:
- # test test_readline failed -- Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_readline.py", line 16, in testHistoryUpdates
- # readline.clear_history()
- # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/readline.py", line 277, in clear_history
- # del self.get_reader().history[:]
- # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/readline.py", line 186, in get_reader
- # console = UnixConsole(self.f_in, self.f_out, encoding=ENCODING)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/unix_console.py", line 103, in __init__
- # self._clear = _my_getstr("clear")
- # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/unix_console.py", line 45, in _my_getstr
- # "terminal doesn't have the required '%s' capability"%cap
- # InvalidTerminal: terminal doesn't have the required 'clear' capability
- SkipTest test_readline
-
- # test_scope:
- # test test_scope failed -- Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_scope.py", line 437, in testLeaks
- # self.assertEqual(Foo.count, 0)
- # AssertionError: 100 != 0
- SkipTest test_scope
-
- # test_socket:
- # testSockName can fail in Koji with:
- # my_ip_addr = socket.gethostbyname(socket.gethostname())
- # gaierror: (-3, 'Temporary failure in name resolution')
- SkipTest test_socket
-
- # test_sort:
- # some failures
- SkipTest test_sort
-
- # test_sqlite:
- # 3 of the sqlite3.test.dbapi.ExtensionTests raise:
- # ProgrammingError: Incomplete statement ''
- SkipTest test_sqlite
-
- # test_strop:
- # test test_strop crashed -- <type 'exceptions.ImportError'>: No module named strop
- SkipTest test_strop
-
- # test_structmembers:
- # test test_structmembers failed -- multiple errors occurred; run in verbose mode for details
- SkipTest test_structmembers
-
- # test_subprocess:
- # debug: WARNING: library path not found, using compiled-in sys.path and sys.prefix will be unset
- # 'import site' failed
- # .
- # this bit of output is from a test of stdout in a different process ...
- # /builddir/build/BUILD/pypy-1.5-src/lib_pypy/ctypes_support.py:26: RuntimeWarning: C function without declared arguments called
- # return standard_c_lib.__errno_location()
- # debug: WARNING: library path not found, using compiled-in sys.path and sys.prefix will be unset
- # 'import site' failed
- # .
- # this bit of output is from a test of stdout in a different process ...
- # test test_subprocess failed -- multiple errors occurred; run in verbose mode for details
- SkipTest test_subprocess
-
- # test_symtable:
- # test test_symtable crashed -- <type 'exceptions.ImportError'>: No module named _symtable
- SkipTest test_symtable
-
- # test_sys_settrace:
- # test test_sys_settrace failed -- Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 334, in test_13_genexp
- # self.run_test(generator_example)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 280, in run_test
- # self.run_and_compare(func, func.events)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 277, in run_and_compare
- # tracer.events, events)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 269, in compare_events
- # [str(x) for x in events])))
- # AssertionError: events did not match expectation:
- # (0, 'call')
- # (2, 'line')
- # (-6, 'call')
- # (-5, 'line')
- # (-4, 'line')
- # (-4, 'return')
- # - (-4, 'call')
- # - (-4, 'exception')
- # - (-1, 'line')
- # - (-1, 'return')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (6, 'line')
- # (5, 'line')
- # (5, 'return')
- SkipTest test_sys_settrace
-
- # test_tempfile:
- # test test_tempfile failed -- multiple errors occurred; run in verbose mode for details
- SkipTest test_tempfile
-
- # test_thread
- # Koji build appears to hang here
- SkipTest test_thread
-
- # test_traceback:
- # works when run standalone; failures seen when run as part of a suite
- SkipTest test_traceback
-
- # test_uuid:
- # ======================================================================
- # ERROR: test_ifconfig_getnode (test.test_uuid.TestUUID)
- # ----------------------------------------------------------------------
- # Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_uuid.py", line 306, in test_ifconfig_getnode
- # node = uuid._ifconfig_getnode()
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/uuid.py", line 326, in _ifconfig_getnode
- # ip_addr = socket.gethostbyname(socket.gethostname())
- # gaierror: [Errno -3] Temporary failure in name resolution
- # ----------------------------------------------------------------------
- # Ran 14 tests in 0.369s
- # FAILED (errors=1)
- SkipTest test_uuid
-
- # test_zipimport_support:
- # ======================================================================
- # ERROR: test_doctest_main_issue4197 (test.test_zipimport_support.ZipSupportTests)
- # ----------------------------------------------------------------------
- # Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_zipimport_support.py", line 194, in test_doctest_main_issue4197
- # exit_code, data = run_python(script_name)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/script_helper.py", line 80, in run_python
- # p = spawn_python(*args, **kwargs)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/script_helper.py", line 66, in spawn_python
- # **kwargs)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 672, in __init__
- # errread, errwrite)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 1206, in _execute_child
- # raise child_exception
- # OSError: [Errno 13] Permission denied
- # ======================================================================
- # ERROR: test_pdb_issue4201 (test.test_zipimport_support.ZipSupportTests)
- # ----------------------------------------------------------------------
- # Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_zipimport_support.py", line 221, in test_pdb_issue4201
- # p = spawn_python(script_name)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/script_helper.py", line 66, in spawn_python
- # **kwargs)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 672, in __init__
- # errread, errwrite)
- # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 1206, in _execute_child
- # raise child_exception
- # OSError: [Errno 13] Permission denied
- # ----------------------------------------------------------------------
- # Ran 4 tests in 0.726s
- # FAILED (errors=2)
- SkipTest test_zipimport_support
-
- # test_zlib:
- # failure seen in Koji, not sure of reason why:
- # test test_zlib failed -- Traceback (most recent call last):
- # File "/builddir/build/BUILD/pypy-1.4.1-src/lib-python/2.5.2/test/test_zlib.py", line 72, in test_baddecompressobj
- # self.assertRaises(ValueError, zlib.decompressobj, 0)
- # AssertionError: ValueError not raised
- SkipTest test_zlib
-
- %if 0%{use_self_when_building}
- # Patch 3 prioritizes the installed copy of pypy's libraries over the
- # build copy.
- # This leads to test failures of test_pep263 and test_tarfile
- # For now, suppress these when building using pypy itself:
- SkipTest test_pep263 # on-disk encoding issues
- SkipTest test_tarfile # permissions issues
- %endif
-
- # Run the built binary through the selftests
- # "-w" : re-run failed tests in verbose mode
- time ./$ExeName -m test.regrtest -w -x $TESTS_TO_SKIP
+ # I'm seeing numerous cases where tests seem to hang, or fail unpredictably
+ # So we'll run each test in its own process, with a timeout
+
+ # Use regrtest to explicitly list all tests:
+ ( ./$ExeName -c \
+ "from test.regrtest import findtests; print '\n'.join(findtests())"
+ ) > testnames.txt
+
+ echo "== Test names =="
+ cat testnames.txt
+ echo "================="
+
+ echo "" > failed-tests.txt
+
+ for TestName in $(cat testnames.txt) ; do
+
+ echo "===================" $TestName "===================="
+
+ # Use /usr/bin/time (rather than the shell "time" builtin) to gather
+ # info on the process (time/CPU/memory). This passes on the exit
+ # status of the underlying command
+ #
+ # Use perl's alarm command to impose a timeout
+ # 900 seconds is 15 minutes per test.
+ # If a test hangs, that test should get terminated, allowing the build
+ # to continue.
+ #
+ # Invoke pypy on test.regrtest to run the specific test suite
+ # verbosely
+ #
+ # For now, || true, so that any failures don't halt the build:
+ ( /usr/bin/time \
+ perl -e 'alarm shift @ARGV; exec @ARGV' 900 \
+ ./$ExeName -m test.regrtest -v $TestName ) \
+ || (echo $TestName >> failed-tests.txt) \
+ || true
+ done
+
+ echo "== Failed tests =="
+ cat failed-tests.txt
+ echo "================="
popd
@@ -1124,12 +737,14 @@ CheckPyPy() {
echo "--------------------------------------------------------------"
}
+%if %{run_selftests}
CheckPyPy pypy
%if 0%{with_stackless}
CheckPyPy pypy-stackless
%endif
+%endif # run_selftests
%clean
@@ -1142,7 +757,6 @@ rm -rf $RPM_BUILD_ROOT
%dir %{pypyprefix}
%dir %{pypyprefix}/lib-python
-%{pypyprefix}/lib-python/TODO
%{pypyprefix}/lib-python/stdlib-version.txt
%{pypyprefix}/lib-python/%{pylibver}/
%{pypyprefix}/lib-python/modified-%{pylibver}/
@@ -1171,6 +785,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Aug 18 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.6-1
+- 1.6
+- rewrite the %%check section, introducing per-test timeouts
+
* Tue Aug 2 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.5-2
- add pypytrace-mode.el to the pypy-libs subpackage, for viewing JIT trace
logs in emacs
diff --git a/sources b/sources
index a047407..5660f1e 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-cb9ada2c50666318c3a2863da1fbe487 pypy-1.5-src.tar.bz2
+1189352effc5df7df84e6916b3b3eae3 release-1.6.tar.bz2
commit 1feef4d56b6572b03fd805e50ad8f6e43900cfac
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Wed Aug 3 13:02:57 2011 -0400
add pypytrace-mode.el to the pypy-libs subpackage, for viewing JIT trace logs in emacs
diff --git a/pypy.spec b/pypy.spec
index b4705c1..0c2c717 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.5
-Release: 1%{?dist}
+Release: 2%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -223,6 +223,9 @@ BuildRequires: gc-devel
BuildRequires: /usr/bin/execstack
+# For byte-compiling the JIT-viewing mode:
+BuildRequires: emacs
+
# pypy is bundling these so we delete them in %%prep. I don't think they are
# needed unless we build pypy targetted at running on the jvm.
#BuildRequires: jna
@@ -248,6 +251,11 @@ CPU architecture.
%package libs
Group: Development/Languages
Summary: Run-time libraries used by PyPy implementations of Python
+
+# We supply an emacs mode for the JIT viewer.
+# (This doesn't bring in all of emacs, just the directory structure)
+Requires: emacs-filesystem >= %{_emacs_version}
+
%description libs
Libraries required by the various PyPy implementations of Python.
@@ -442,6 +450,8 @@ BuildPyPy \
"--stackless"
%endif
+%{_emacs_bytecompile} pypy/jit/tool/pypytrace-mode.el
+
%install
rm -rf $RPM_BUILD_ROOT
@@ -617,6 +627,10 @@ find \
# but given that the objective is to preserve a copy of the source code, those
# are acceptable.
+# Install the JIT trace mode for Emacs:
+mkdir -p %{buildroot}/%{_emacs_sitelispdir}
+cp -a pypy/jit/tool/pypytrace-mode.el* %{buildroot}/%{_emacs_sitelispdir}
+
%check
topdir=$(pwd)
@@ -1135,6 +1149,8 @@ rm -rf $RPM_BUILD_ROOT
%{pypyprefix}/lib-python/conftest.py*
%{pypyprefix}/lib_pypy/
%{pypyprefix}/site-packages/
+%{_emacs_sitelispdir}/pypytrace-mode.el
+%{_emacs_sitelispdir}/pypytrace-mode.elc
%files
%defattr(-,root,root,-)
@@ -1155,6 +1171,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Aug 2 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.5-2
+- add pypytrace-mode.el to the pypy-libs subpackage, for viewing JIT trace
+logs in emacs
+
* Mon May 2 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.5-1
- 1.5
commit 3d2cef177d26ff303a5be984f912e2b8d4266b0d
Author: Dan Horák <dan(a)danny.cz>
Date: Wed May 11 10:15:52 2011 +0200
fix build on non-jit arches
Build on non-jit arch like s390 fails with
[translation:info] Translating target as defined by targetpypystandalone
[platform:msg] Setting platform to 'host' cc=None
Traceback (most recent call last):
File "translate.py", line 322, in <module>
main()
File "translate.py", line 208, in main
targetspec_dic, translateconfig, config, args = parse_options_and_load_target()
File "translate.py", line 176, in parse_options_and_load_target
targetspec_dic['handle_config'](config, translateconfig)
File "targetpypystandalone.py", line 109, in handle_config
raise Exception("You have to specify the --opt level.\n"
Exception: You have to specify the --opt level.
Try --opt=2 or --opt=jit, or equivalently -O2 or -Ojit .
diff --git a/pypy.spec b/pypy.spec
index 1a651e0..b4705c1 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -431,6 +431,8 @@ BuildPyPy \
pypy \
%if 0%{with_jit}
"-Ojit" \
+%else
+ "-O2" \
%endif
%{nil}
commit 169de85aca1a527ea42ef102aa32a40ba1740168
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Mon May 2 14:46:32 2011 -0400
Rebase to 1.5 (rhbz#701121)
Update patches:
patch 0: pypy-1.4-config.patch -> pypy-1.5-config.patch
patch 4: pypy-1.4.1-more-readable-c-code.patch -> pypy-1.5-more-readable-c-code.patch
Remove references to *.inl files, no longer present
Add the following tests to the skip list:
test_audioop, test_capi, test_distutils, test_gc, test_gdb, test_generators,
test_getargs2, test_hotshot, test_io, test_multiprocessing, test_posix,
test_readline, test_scope, test_strop, test_structmembers, test_subprocess,
test_symtable, test_sys_settrace, test_tempfile, test_thread, test_uuid,
test_zipimport_support
Add a couple of text files to the payload (TODO, stdlib-version.txt)
diff --git a/.gitignore b/.gitignore
index 2878978..017cf34 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
/pypy-1.4.1-src.tar.bz2
+/pypy-1.5-src.tar.bz2
diff --git a/pypy-1.4-config.patch b/pypy-1.5-config.patch
similarity index 69%
rename from pypy-1.4-config.patch
rename to pypy-1.5-config.patch
index 0b82ac8..82d8fc9 100644
--- a/pypy-1.4-config.patch
+++ b/pypy-1.5-config.patch
@@ -1,9 +1,10 @@
-Index: pypy-1.4/pypy/translator/platform/linux.py
-===================================================================
---- pypy-1.4.orig/pypy/translator/platform/linux.py
-+++ pypy-1.4/pypy/translator/platform/linux.py
-@@ -3,17 +3,22 @@ import py, os
- from pypy.translator.platform import _run_subprocess
+diff -up pypy-1.5-src/pypy/translator/platform/linux.py.configure-fedora pypy-1.5-src/pypy/translator/platform/linux.py
+--- pypy-1.5-src/pypy/translator/platform/linux.py.configure-fedora 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/platform/linux.py 2011-04-30 18:59:24.041160978 -0400
+@@ -1,13 +1,18 @@
+ """Support for Linux."""
+-
++import os
from pypy.translator.platform.posix import BasePosix
+CFLAGS = ['-O3', '-pthread', '-fomit-frame-pointer',
@@ -22,16 +23,10 @@ Index: pypy-1.4/pypy/translator/platform/linux.py
standalone_only = ()
shared_only = ('-fPIC',)
so_ext = 'so'
- so_prefixes = ('lib', '')
--
-+
- def _args_for_shared(self, args):
- return ['-shared'] + args
-
-@@ -29,9 +34,10 @@ class BaseLinux(BasePosix):
- class Linux(BaseLinux):
+@@ -29,9 +34,10 @@ class Linux(BaseLinux):
shared_only = () # it seems that on 32-bit linux, compiling with -fPIC
# gives assembler that asmgcc is not happy about.
+
- def library_dirs_for_libffi_a(self):
- # places where we need to look for libffi.a
- return self.library_dirs_for_libffi() + ['/usr/lib']
diff --git a/pypy-1.4.1-more-readable-c-code.patch b/pypy-1.5-more-readable-c-code.patch
similarity index 81%
rename from pypy-1.4.1-more-readable-c-code.patch
rename to pypy-1.5-more-readable-c-code.patch
index 45fa534..b7103e2 100644
--- a/pypy-1.4.1-more-readable-c-code.patch
+++ b/pypy-1.5-more-readable-c-code.patch
@@ -1,7 +1,7 @@
-diff -r cd083843b67a pypy/interpreter/pycode.py
---- a/pypy/interpreter/pycode.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/interpreter/pycode.py Wed Jan 05 16:14:35 2011 -0500
-@@ -14,6 +14,7 @@
+diff -up pypy-1.5-src/pypy/interpreter/pycode.py.more-readable-c-code pypy-1.5-src/pypy/interpreter/pycode.py
+--- pypy-1.5-src/pypy/interpreter/pycode.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/interpreter/pycode.py 2011-05-02 14:28:33.942161002 -0400
+@@ -13,6 +13,7 @@ from pypy.interpreter.gateway import Non
from pypy.interpreter.astcompiler.consts import (CO_OPTIMIZED,
CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS, CO_NESTED,
CO_GENERATOR, CO_CONTAINSGLOBALS)
@@ -9,7 +9,7 @@ diff -r cd083843b67a pypy/interpreter/pycode.py
from pypy.rlib.rarithmetic import intmask
from pypy.rlib.debug import make_sure_not_resized
from pypy.rlib import jit
-@@ -81,6 +82,7 @@
+@@ -80,6 +81,7 @@ class PyCode(eval.Code):
self.hidden_applevel = hidden_applevel
self.magic = magic
self._signature = cpython_code_signature(self)
@@ -17,10 +17,10 @@ diff -r cd083843b67a pypy/interpreter/pycode.py
self._initialize()
def _initialize(self):
-@@ -403,3 +405,25 @@
+@@ -396,3 +398,23 @@ class PyCode(eval.Code):
+
def repr(self, space):
return space.wrap(self.get_repr())
- repr.unwrap_spec = ['self', ObjSpace]
+
+ def get_linenum_for_offset(self, offset):
+ # Given a bytecode offset, return a 1-based index into the lines of the
@@ -41,12 +41,10 @@ diff -r cd083843b67a pypy/interpreter/pycode.py
+ # raise an IOError)
+ self._ensure_source()
+ return self._cached_source[linenum - 1]
-+
-+
-diff -r cd083843b67a pypy/objspace/flow/model.py
---- a/pypy/objspace/flow/model.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/objspace/flow/model.py Wed Jan 05 16:14:35 2011 -0500
-@@ -31,6 +31,120 @@
+diff -up pypy-1.5-src/pypy/objspace/flow/model.py.more-readable-c-code pypy-1.5-src/pypy/objspace/flow/model.py
+--- pypy-1.5-src/pypy/objspace/flow/model.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/objspace/flow/model.py 2011-05-02 14:28:33.942161002 -0400
+@@ -31,6 +31,120 @@ from pypy.tool.identity_dict import iden
__metaclass__ = type
@@ -167,7 +165,7 @@ diff -r cd083843b67a pypy/objspace/flow/model.py
class FunctionGraph(object):
__slots__ = ['startblock', 'returnblock', 'exceptblock', '__dict__']
-@@ -94,6 +208,21 @@
+@@ -94,6 +208,21 @@ class FunctionGraph(object):
seen[block] = True
stack += block.exits[::-1]
@@ -189,7 +187,7 @@ diff -r cd083843b67a pypy/objspace/flow/model.py
def iterlinks(self):
block = self.startblock
seen = {block: True}
-@@ -183,14 +312,14 @@
+@@ -183,14 +312,14 @@ class Block(object):
self.exits = [] # list of Link(s)
def at(self):
@@ -207,7 +205,7 @@ diff -r cd083843b67a pypy/objspace/flow/model.py
else:
if (not self.exits) and len(self.inputargs) == 1:
txt = "return block"
-@@ -245,6 +374,21 @@
+@@ -245,6 +374,21 @@ class Block(object):
from pypy.translator.tool.graphpage import try_show
try_show(self)
@@ -229,7 +227,7 @@ diff -r cd083843b67a pypy/objspace/flow/model.py
class Variable(object):
__slots__ = ["_name", "_nr", "concretetype"]
-@@ -331,13 +475,15 @@
+@@ -331,13 +475,15 @@ class WrapException(Exception):
class SpaceOperation(object):
@@ -248,7 +246,7 @@ diff -r cd083843b67a pypy/objspace/flow/model.py
def __eq__(self, other):
return (self.__class__ is other.__class__ and
-@@ -352,8 +498,9 @@
+@@ -352,8 +498,9 @@ class SpaceOperation(object):
return hash((self.opname,tuple(self.args),self.result))
def __repr__(self):
@@ -260,7 +258,7 @@ diff -r cd083843b67a pypy/objspace/flow/model.py
class Atom(object):
def __init__(self, name):
-@@ -448,8 +595,7 @@
+@@ -427,8 +574,7 @@ def copygraph(graph, shallow=False, varm
for op in oplist:
copyop = SpaceOperation(op.opname,
[copyvar(v) for v in op.args],
@@ -270,10 +268,10 @@ diff -r cd083843b67a pypy/objspace/flow/model.py
result.append(copyop)
return result
newblock.operations = copyoplist(block.operations)
-diff -r cd083843b67a pypy/objspace/flow/objspace.py
---- a/pypy/objspace/flow/objspace.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/objspace/flow/objspace.py Wed Jan 05 16:14:35 2011 -0500
-@@ -310,7 +310,9 @@
+diff -up pypy-1.5-src/pypy/objspace/flow/objspace.py.more-readable-c-code pypy-1.5-src/pypy/objspace/flow/objspace.py
+--- pypy-1.5-src/pypy/objspace/flow/objspace.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/objspace/flow/objspace.py 2011-05-02 14:28:33.943161001 -0400
+@@ -313,7 +313,9 @@ class FlowObjSpace(ObjSpace):
def do_operation(self, name, *args_w):
spaceop = SpaceOperation(name, args_w, Variable())
if hasattr(self, 'executioncontext'): # not here during bootstrapping
@@ -284,10 +282,10 @@ diff -r cd083843b67a pypy/objspace/flow/objspace.py
self.executioncontext.recorder.append(spaceop)
return spaceop.result
-diff -r cd083843b67a pypy/objspace/flow/test/test_model.py
---- a/pypy/objspace/flow/test/test_model.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/objspace/flow/test/test_model.py Wed Jan 05 16:14:35 2011 -0500
-@@ -132,3 +132,25 @@
+diff -up pypy-1.5-src/pypy/objspace/flow/test/test_model.py.more-readable-c-code pypy-1.5-src/pypy/objspace/flow/test/test_model.py
+--- pypy-1.5-src/pypy/objspace/flow/test/test_model.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/objspace/flow/test/test_model.py 2011-05-02 14:28:33.943161001 -0400
+@@ -119,3 +119,25 @@ def test_variable():
assert v2.renamed
assert v2.name.startswith("foobar_") and v2.name != v.name
assert v2.name.split('_', 1)[1].isdigit()
@@ -313,10 +311,10 @@ diff -r cd083843b67a pypy/objspace/flow/test/test_model.py
+ assert cmp(oplocA, oplocB) < 0
+ assert cmp(oplocB, oplocA) > 0
+
-diff -r cd083843b67a pypy/rpython/rtyper.py
---- a/pypy/rpython/rtyper.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/rpython/rtyper.py Wed Jan 05 16:14:35 2011 -0500
-@@ -800,7 +800,7 @@
+diff -up pypy-1.5-src/pypy/rpython/rtyper.py.more-readable-c-code pypy-1.5-src/pypy/rpython/rtyper.py
+--- pypy-1.5-src/pypy/rpython/rtyper.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/rpython/rtyper.py 2011-05-02 14:28:33.943161001 -0400
+@@ -800,7 +800,7 @@ class HighLevelOp(object):
return vars
def genop(self, opname, args_v, resulttype=None):
@@ -325,7 +323,7 @@ diff -r cd083843b67a pypy/rpython/rtyper.py
def gendirectcall(self, ll_function, *args_v):
return self.llops.gendirectcall(ll_function, *args_v)
-@@ -935,7 +935,7 @@
+@@ -935,7 +935,7 @@ class LowLevelOpList(list):
v.concretetype))
return v
@@ -334,7 +332,7 @@ diff -r cd083843b67a pypy/rpython/rtyper.py
try:
for v in args_v:
v.concretetype
-@@ -944,7 +944,7 @@
+@@ -944,7 +944,7 @@ class LowLevelOpList(list):
" and pass its result to genop(),"
" never hop.args_v directly.")
vresult = Variable()
@@ -343,18 +341,18 @@ diff -r cd083843b67a pypy/rpython/rtyper.py
if resulttype is None:
vresult.concretetype = Void
return None
-diff -r cd083843b67a pypy/translator/backendopt/inline.py
---- a/pypy/translator/backendopt/inline.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/backendopt/inline.py Wed Jan 05 16:14:35 2011 -0500
-@@ -4,6 +4,7 @@
+diff -up pypy-1.5-src/pypy/translator/backendopt/inline.py.more-readable-c-code pypy-1.5-src/pypy/translator/backendopt/inline.py
+--- pypy-1.5-src/pypy/translator/backendopt/inline.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/backendopt/inline.py 2011-05-02 14:32:26.975161005 -0400
+@@ -4,6 +4,7 @@ from pypy.translator.simplify import get
from pypy.translator.unsimplify import copyvar
from pypy.objspace.flow.model import Variable, Constant, Block, Link
from pypy.objspace.flow.model import SpaceOperation, c_last_exception
+from pypy.objspace.flow.model import OperationLoc
from pypy.objspace.flow.model import FunctionGraph
- from pypy.objspace.flow.model import traverse, mkentrymap, checkgraph
+ from pypy.objspace.flow.model import mkentrymap, checkgraph
from pypy.annotation import model as annmodel
-@@ -231,6 +232,7 @@
+@@ -231,6 +232,7 @@ class BaseInliner(object):
self.varmap = {}
self._copied_blocks = {}
self.op = block.operations[index_operation]
@@ -362,7 +360,7 @@ diff -r cd083843b67a pypy/translator/backendopt/inline.py
self.graph_to_inline = self.get_graph_from_op(self.op)
self.exception_guarded = False
if (block.exitswitch == c_last_exception and
-@@ -297,7 +299,9 @@
+@@ -290,7 +292,9 @@ class BaseInliner(object):
def copy_operation(self, op):
args = [self.get_new_name(arg) for arg in op.args]
@@ -373,9 +371,9 @@ diff -r cd083843b67a pypy/translator/backendopt/inline.py
return result
def copy_block(self, block):
-diff -r cd083843b67a pypy/translator/c/funcgen.py
---- a/pypy/translator/c/funcgen.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/c/funcgen.py Wed Jan 05 16:14:35 2011 -0500
+diff -up pypy-1.5-src/pypy/translator/c/funcgen.py.more-readable-c-code pypy-1.5-src/pypy/translator/c/funcgen.py
+--- pypy-1.5-src/pypy/translator/c/funcgen.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/c/funcgen.py 2011-05-02 14:28:33.944161001 -0400
@@ -1,4 +1,6 @@
import sys
+import inspect
@@ -383,7 +381,7 @@ diff -r cd083843b67a pypy/translator/c/funcgen.py
from pypy.translator.c.support import USESLOTS # set to False if necessary while refactoring
from pypy.translator.c.support import cdecl
from pypy.translator.c.support import llvalue_from_constant, gen_assignments
-@@ -22,6 +24,38 @@
+@@ -22,6 +24,38 @@ LOCALVAR = 'l_%s'
KEEP_INLINED_GRAPHS = False
@@ -422,7 +420,7 @@ diff -r cd083843b67a pypy/translator/c/funcgen.py
class FunctionCodeGenerator(object):
"""
Collects information about a function which we have to generate
-@@ -210,14 +244,57 @@
+@@ -210,14 +244,57 @@ class FunctionCodeGenerator(object):
def cfunction_body(self):
graph = self.graph
@@ -483,7 +481,7 @@ diff -r cd083843b67a pypy/translator/c/funcgen.py
for line in self.gen_op(op):
yield line
if len(block.exits) == 0:
-@@ -310,7 +387,7 @@
+@@ -309,7 +386,7 @@ class FunctionCodeGenerator(object):
assignments.append((a2typename, dest, src))
for line in gen_assignments(assignments):
yield line
@@ -492,16 +490,16 @@ diff -r cd083843b67a pypy/translator/c/funcgen.py
if link.target in self.innerloops:
loop = self.innerloops[link.target]
if link is loop.links[-1]: # link that ends a loop
-diff -r cd083843b67a pypy/translator/c/test/test_genc.py
---- a/pypy/translator/c/test/test_genc.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/c/test/test_genc.py Wed Jan 05 16:14:35 2011 -0500
+diff -up pypy-1.5-src/pypy/translator/c/test/test_genc.py.more-readable-c-code pypy-1.5-src/pypy/translator/c/test/test_genc.py
+--- pypy-1.5-src/pypy/translator/c/test/test_genc.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/c/test/test_genc.py 2011-05-02 14:28:33.945161001 -0400
@@ -1,4 +1,5 @@
import autopath, sys, os, py
+import re
from pypy.rpython.lltypesystem.lltype import *
from pypy.annotation import model as annmodel
from pypy.translator.translator import TranslationContext
-@@ -498,3 +499,130 @@
+@@ -515,3 +516,130 @@ def test_inhibit_tail_call():
else:
assert 0, "the call was not found in the C source"
assert 'PYPY_INHIBIT_TAIL_CALL();' in lines[i+1]
@@ -632,10 +630,10 @@ diff -r cd083843b67a pypy/translator/c/test/test_genc.py
+ assert 'Here is a ' in c_fn_src
+ assert 'style comment within an RPython docstring' in c_fn_src
+
-diff -r cd083843b67a pypy/translator/driver.py
---- a/pypy/translator/driver.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/driver.py Wed Jan 05 16:14:35 2011 -0500
-@@ -539,6 +539,7 @@
+diff -up pypy-1.5-src/pypy/translator/driver.py.more-readable-c-code pypy-1.5-src/pypy/translator/driver.py
+--- pypy-1.5-src/pypy/translator/driver.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/driver.py 2011-05-02 14:28:33.945161001 -0400
+@@ -536,6 +536,7 @@ class TranslationDriver(SimpleTaskEngine
dstname = self.compute_exe_name() + '.staticdata.info'
shutil.copy(str(fname), str(dstname))
self.log.info('Static data info written to %s' % dstname)
@@ -643,12 +641,12 @@ diff -r cd083843b67a pypy/translator/driver.py
#
task_source_c = taskdef(task_source_c, ['database_c'], "Generating c source")
-diff -r cd083843b67a pypy/translator/gensupp.py
---- a/pypy/translator/gensupp.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/gensupp.py Wed Jan 05 16:14:35 2011 -0500
-@@ -16,8 +16,8 @@
- def visit(block):
- if isinstance(block, Block):
+diff -up pypy-1.5-src/pypy/translator/gensupp.py.more-readable-c-code pypy-1.5-src/pypy/translator/gensupp.py
+--- pypy-1.5-src/pypy/translator/gensupp.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/gensupp.py 2011-05-02 14:33:31.026161001 -0400
+@@ -14,8 +14,8 @@ def ordered_blocks(graph):
+ allblocks = []
+ for block in graph.iterblocks():
# first we order by offset in the code string
- if block.operations:
- ofs = block.operations[0].offset
@@ -657,10 +655,10 @@ diff -r cd083843b67a pypy/translator/gensupp.py
else:
ofs = sys.maxint
# then we order by input variable name or value
-diff -r cd083843b67a pypy/translator/interactive.py
---- a/pypy/translator/interactive.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/interactive.py Wed Jan 05 16:14:35 2011 -0500
-@@ -138,7 +138,7 @@
+diff -up pypy-1.5-src/pypy/translator/interactive.py.more-readable-c-code pypy-1.5-src/pypy/translator/interactive.py
+--- pypy-1.5-src/pypy/translator/interactive.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/interactive.py 2011-05-02 14:28:33.946161001 -0400
+@@ -138,7 +138,7 @@ class Translation(object):
def source_c(self, argtypes=None, **kwds):
self.update_options(argtypes, kwds)
self.ensure_backend('c')
@@ -669,10 +667,10 @@ diff -r cd083843b67a pypy/translator/interactive.py
def source_cl(self, argtypes=None, **kwds):
self.update_options(argtypes, kwds)
-diff -r cd083843b67a pypy/translator/llsupport/wrapper.py
---- a/pypy/translator/llsupport/wrapper.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/llsupport/wrapper.py Wed Jan 05 16:14:35 2011 -0500
-@@ -59,6 +59,8 @@
+diff -up pypy-1.5-src/pypy/translator/llsupport/wrapper.py.more-readable-c-code pypy-1.5-src/pypy/translator/llsupport/wrapper.py
+--- pypy-1.5-src/pypy/translator/llsupport/wrapper.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/llsupport/wrapper.py 2011-05-02 14:28:33.946161001 -0400
+@@ -59,6 +59,8 @@ def new_wrapper(func, translator, newnam
# "return result"
block = Block(wrapper_inputargs)
wgraph = FunctionGraph('pyfn_' + (newname or func.func_name), block)
@@ -681,10 +679,10 @@ diff -r cd083843b67a pypy/translator/llsupport/wrapper.py
translator.update_call_graph(wgraph, graph, object())
translator.graphs.append(wgraph)
block.operations[:] = newops
-diff -r cd083843b67a pypy/translator/simplify.py
---- a/pypy/translator/simplify.py Mon Dec 20 17:17:45 2010 +0100
-+++ b/pypy/translator/simplify.py Wed Jan 05 16:14:35 2011 -0500
-@@ -294,7 +294,7 @@
+diff -up pypy-1.5-src/pypy/translator/simplify.py.more-readable-c-code pypy-1.5-src/pypy/translator/simplify.py
+--- pypy-1.5-src/pypy/translator/simplify.py.more-readable-c-code 2011-04-30 10:18:50.000000000 -0400
++++ pypy-1.5-src/pypy/translator/simplify.py 2011-05-02 14:28:33.952161001 -0400
+@@ -298,7 +298,7 @@ def join_blocks(graph):
return renaming.get(v, v)
def rename_op(op):
args = [rename(a) for a in op.args]
diff --git a/pypy.spec b/pypy.spec
index c69893a..1a651e0 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
-Version: 1.4.1
-Release: 10%{?dist}
+Version: 1.5
+Release: 1%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -105,7 +105,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%global verbose_logs 0
%global pypyprefix %{_libdir}/pypy-%{version}
-%global pylibver 2.5.2
+%global pylibver 2.7
# We refer to this subdir of the source tree in a few places during the build:
%global goal_dir pypy/translator/goal
@@ -120,7 +120,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Source0: http://pypy.org/download/pypy-%{version}-src.tar.bz2
# Edit a translator file for linux in order to configure our cflags and dynamic libffi
-Patch0: pypy-1.4-config.patch
+Patch0: pypy-1.5-config.patch
# By default, if built at a tty, the translation process renders a Mandelbrot
# set to indicate progress.
@@ -150,7 +150,7 @@ Patch3: pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
# http://codespeak.net/pipermail/pypy-dev/2010q4/006532.html
# TODO: get this into the upstream bug tracker, and finish inlining
# support (rhbz#666963)
-Patch4: pypy-1.4.1-more-readable-c-code.patch
+Patch4: pypy-1.5-more-readable-c-code.patch
# Build-time requirements:
@@ -584,7 +584,7 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
# 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 include/*.inl %{buildroot}/%{pypy_include_dir}
+cp include/*.h %{buildroot}/%{pypy_include_dir}
# Capture the RPython source code files from the build within the debuginfo
@@ -698,6 +698,25 @@ CheckPyPy() {
# seems to hang on this test, within test_line_terminator
SkipTest test_asynchat
+ # test_audioop:
+ # test test_audioop crashed -- <type 'exceptions.ImportError'>: No module named audioop
+ # Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/regrtest.py", line 874, in runtest_inner
+ # the_package = __import__(abstest, globals(), locals(), [])
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_audioop.py", line 1, in <module>
+ # import audioop
+ # ImportError: No module named audioop
+ SkipTest test_audioop
+
+ # test_capi:
+ # RPython traceback:
+ # RPython traceback:
+ # File "implement.c", line 243013, in _PyObject_New
+ # File "implement_1.c", line 31707, in _PyObject_NewVar
+ # File "implement.c", line 217060, in from_ref
+ # Fatal RPython error: AssertionError
+ SkipTest test_capi
+
# test_compiler:
# 4 errors out of 13:
# testSourceCodeEncodingsError
@@ -710,10 +729,102 @@ CheckPyPy() {
# failures=17, errors=20, out of 132 tests
SkipTest test_ctypes
+ # test_distutils:
+ # Warning -- os.environ was modified by test_distutils
+ # test test_distutils failed -- multiple errors occurred; run in verbose mode for details
+ SkipTest test_distutils
+
# test_frozen:
# TestFailed: import __hello__ failed:No module named __hello__
SkipTest test_frozen
+ # test_gc:
+ # test test_gc crashed -- <type 'exceptions.AttributeError'>: 'module' object has no attribute 'get_debug'
+ SkipTest test_gc
+
+ # test_gdb:
+ # test test_gdb crashed -- <type 'exceptions.KeyError'>: 'PY_CFLAGS'
+ SkipTest test_gdb
+
+ # test_generators:
+ # **********************************************************************
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
+ # Failed example:
+ # del g; gc_collect()
+ # Expected:
+ # exiting
+ # Got nothing
+ # **********************************************************************
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
+ # Failed example:
+ # del g; gc_collect()
+ # Expected:
+ # exiting
+ # Got nothing
+ # **********************************************************************
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
+ # Failed example:
+ # del g; gc_collect()
+ # Expected:
+ # finally
+ # Got nothing
+ # **********************************************************************
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.coroutine
+ # Failed example:
+ # sys.stderr.getvalue().startswith(
+ # "Exception RuntimeError: 'generator ignored GeneratorExit' in "
+ # )
+ # Expected:
+ # True
+ # Got:
+ # False
+ # **********************************************************************
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_generators.py", line ?, in test.test_generators.__test__.refleaks
+ # Failed example:
+ # try:
+ # sys.stderr = StringIO.StringIO()
+ # class Leaker:
+ # def __del__(self):
+ # raise RuntimeError
+ # l = Leaker()
+ # del l
+ # gc_collect()
+ # err = sys.stderr.getvalue().strip()
+ # err.startswith(
+ # "Exception RuntimeError: RuntimeError() in "
+ # )
+ # err.endswith("> ignored")
+ # len(err.splitlines())
+ # finally:
+ # sys.stderr = old
+ # Expected:
+ # True
+ # True
+ # 1
+ # Got:
+ # False
+ # False
+ # 0
+ # **********************************************************************
+ # 2 items had failures:
+ # 4 of 107 in test.test_generators.__test__.coroutine
+ # 1 of 11 in test.test_generators.__test__.refleaks
+ # ***Test Failed*** 5 failures.
+ # test test_generators failed -- 5 of 294 doctests failed
+ SkipTest test_generators
+
+ # test_getargs2:
+ # test test_getargs2 failed -- multiple errors occurred; run in verbose mode for details
+ SkipTest test_getargs2
+
+ # test_hotshot:
+ # test test_hotshot crashed -- <type 'exceptions.ImportError'>: No module named _hotshot
+ SkipTest test_hotshot
+
+ # test_io:
+ # test test_io failed -- multiple errors occurred; run in verbose mode for details
+ SkipTest test_io
+
# test_ioctl:
# Failing in Koji with dist-f15 with:
# ======================================================================
@@ -737,6 +848,23 @@ CheckPyPy() {
# 24 failures out of 25, apparently all due to TypeError
SkipTest test_iterlen
+ # test_multiprocessing:
+ # test test_multiprocessing failed -- multiple errors occurred; run in verbose mode for details
+ SkipTest test_multiprocessing
+
+ # test_module:
+ # test test_module failed -- Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_module.py", line 81, in test_clear_dict_in_ref_cycle
+ # self.assertEqual(destroyed, [1])
+ # AssertionError: Lists differ: [] != [1]
+ # Second list contains 1 additional elements.
+ # First extra element 0:
+ # 1
+ # - []
+ # + [1]
+ # ? +
+ SkipTest test_module
+
# test_parser:
# 12 failures out of 15
SkipTest test_parser
@@ -746,6 +874,44 @@ CheckPyPy() {
# test test_platform failed -- errors occurred in test.test_platform.PlatformTest
SkipTest test_platform
+ # test_posix:
+ # test test_posix failed -- Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 361, in test_getcwd_long_pathnames
+ # _create_and_do_getcwd(dirname)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 351, in _create_and_do_getcwd
+ # _create_and_do_getcwd(dirname, current_path_length + len(dirname) + 1)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 351, in _create_and_do_getcwd
+ # _create_and_do_getcwd(dirname, current_path_length + len(dirname) + 1)
+ # [...repeats...]
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 351, in _create_and_do_getcwd
+ # _create_and_do_getcwd(dirname, current_path_length + len(dirname) + 1)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_posix.py", line 356, in _create_and_do_getcwd
+ # self.assertEqual(e.errno, expected_errno)
+ # AssertionError: 36 != 34
+ SkipTest test_posix
+
+ # test_readline:
+ # test test_readline failed -- Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_readline.py", line 16, in testHistoryUpdates
+ # readline.clear_history()
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/readline.py", line 277, in clear_history
+ # del self.get_reader().history[:]
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/readline.py", line 186, in get_reader
+ # console = UnixConsole(self.f_in, self.f_out, encoding=ENCODING)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/unix_console.py", line 103, in __init__
+ # self._clear = _my_getstr("clear")
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib_pypy/pyrepl/unix_console.py", line 45, in _my_getstr
+ # "terminal doesn't have the required '%s' capability"%cap
+ # InvalidTerminal: terminal doesn't have the required 'clear' capability
+ SkipTest test_readline
+
+ # test_scope:
+ # test test_scope failed -- Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_scope.py", line 437, in testLeaks
+ # self.assertEqual(Foo.count, 0)
+ # AssertionError: 100 != 0
+ SkipTest test_scope
+
# test_socket:
# testSockName can fail in Koji with:
# my_ip_addr = socket.gethostbyname(socket.gethostname())
@@ -761,10 +927,138 @@ CheckPyPy() {
# ProgrammingError: Incomplete statement ''
SkipTest test_sqlite
+ # test_strop:
+ # test test_strop crashed -- <type 'exceptions.ImportError'>: No module named strop
+ SkipTest test_strop
+
+ # test_structmembers:
+ # test test_structmembers failed -- multiple errors occurred; run in verbose mode for details
+ SkipTest test_structmembers
+
+ # test_subprocess:
+ # debug: WARNING: library path not found, using compiled-in sys.path and sys.prefix will be unset
+ # 'import site' failed
+ # .
+ # this bit of output is from a test of stdout in a different process ...
+ # /builddir/build/BUILD/pypy-1.5-src/lib_pypy/ctypes_support.py:26: RuntimeWarning: C function without declared arguments called
+ # return standard_c_lib.__errno_location()
+ # debug: WARNING: library path not found, using compiled-in sys.path and sys.prefix will be unset
+ # 'import site' failed
+ # .
+ # this bit of output is from a test of stdout in a different process ...
+ # test test_subprocess failed -- multiple errors occurred; run in verbose mode for details
+ SkipTest test_subprocess
+
+ # test_symtable:
+ # test test_symtable crashed -- <type 'exceptions.ImportError'>: No module named _symtable
+ SkipTest test_symtable
+
+ # test_sys_settrace:
+ # test test_sys_settrace failed -- Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 334, in test_13_genexp
+ # self.run_test(generator_example)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 280, in run_test
+ # self.run_and_compare(func, func.events)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 277, in run_and_compare
+ # tracer.events, events)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/test/test_sys_settrace.py", line 269, in compare_events
+ # [str(x) for x in events])))
+ # AssertionError: events did not match expectation:
+ # (0, 'call')
+ # (2, 'line')
+ # (-6, 'call')
+ # (-5, 'line')
+ # (-4, 'line')
+ # (-4, 'return')
+ # - (-4, 'call')
+ # - (-4, 'exception')
+ # - (-1, 'line')
+ # - (-1, 'return')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (6, 'line')
+ # (5, 'line')
+ # (5, 'return')
+ SkipTest test_sys_settrace
+
+ # test_tempfile:
+ # test test_tempfile failed -- multiple errors occurred; run in verbose mode for details
+ SkipTest test_tempfile
+
+ # test_thread
+ # Koji build appears to hang here
+ SkipTest test_thread
+
# test_traceback:
# works when run standalone; failures seen when run as part of a suite
SkipTest test_traceback
+ # test_uuid:
+ # ======================================================================
+ # ERROR: test_ifconfig_getnode (test.test_uuid.TestUUID)
+ # ----------------------------------------------------------------------
+ # Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_uuid.py", line 306, in test_ifconfig_getnode
+ # node = uuid._ifconfig_getnode()
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/uuid.py", line 326, in _ifconfig_getnode
+ # ip_addr = socket.gethostbyname(socket.gethostname())
+ # gaierror: [Errno -3] Temporary failure in name resolution
+ # ----------------------------------------------------------------------
+ # Ran 14 tests in 0.369s
+ # FAILED (errors=1)
+ SkipTest test_uuid
+
+ # test_zipimport_support:
+ # ======================================================================
+ # ERROR: test_doctest_main_issue4197 (test.test_zipimport_support.ZipSupportTests)
+ # ----------------------------------------------------------------------
+ # Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_zipimport_support.py", line 194, in test_doctest_main_issue4197
+ # exit_code, data = run_python(script_name)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/script_helper.py", line 80, in run_python
+ # p = spawn_python(*args, **kwargs)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/script_helper.py", line 66, in spawn_python
+ # **kwargs)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 672, in __init__
+ # errread, errwrite)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 1206, in _execute_child
+ # raise child_exception
+ # OSError: [Errno 13] Permission denied
+ # ======================================================================
+ # ERROR: test_pdb_issue4201 (test.test_zipimport_support.ZipSupportTests)
+ # ----------------------------------------------------------------------
+ # Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/test_zipimport_support.py", line 221, in test_pdb_issue4201
+ # p = spawn_python(script_name)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/2.7/test/script_helper.py", line 66, in spawn_python
+ # **kwargs)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 672, in __init__
+ # errread, errwrite)
+ # File "/builddir/build/BUILD/pypy-1.5-src/lib-python/modified-2.7/subprocess.py", line 1206, in _execute_child
+ # raise child_exception
+ # OSError: [Errno 13] Permission denied
+ # ----------------------------------------------------------------------
+ # Ran 4 tests in 0.726s
+ # FAILED (errors=2)
+ SkipTest test_zipimport_support
+
# test_zlib:
# failure seen in Koji, not sure of reason why:
# test test_zlib failed -- Traceback (most recent call last):
@@ -832,6 +1126,8 @@ rm -rf $RPM_BUILD_ROOT
%dir %{pypyprefix}
%dir %{pypyprefix}/lib-python
+%{pypyprefix}/lib-python/TODO
+%{pypyprefix}/lib-python/stdlib-version.txt
%{pypyprefix}/lib-python/%{pylibver}/
%{pypyprefix}/lib-python/modified-%{pylibver}/
%{pypyprefix}/lib-python/conftest.py*
@@ -847,7 +1143,6 @@ rm -rf $RPM_BUILD_ROOT
%defattr(-,root,root,-)
%dir %{pypy_include_dir}
%{pypy_include_dir}/*.h
-%{pypy_include_dir}/*.inl
%if 0%{with_stackless}
%files stackless
@@ -858,6 +1153,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Mon May 2 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.5-1
+- 1.5
+
* Wed Apr 20 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-10
- build a /usr/bin/pypy (but without the JIT compiler) on architectures that
don't support the JIT, so that they do at least have something that runs
diff --git a/sources b/sources
index 90f34be..a047407 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-ebbbb156b1eb842e9e65d909ed5f9f6d pypy-1.4.1-src.tar.bz2
+cb9ada2c50666318c3a2863da1fbe487 pypy-1.5-src.tar.bz2
commit 3ca83f1944c99711e69be7a733f36a976d1fcec2
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Sat Apr 30 18:24:07 2011 -0400
Fix the build on architectures that the JIT doesn't support
- build a /usr/bin/pypy (but without the JIT compiler) on architectures that
don't support the JIT, so that they do at least have something that runs
diff --git a/pypy.spec b/pypy.spec
index ca09b94..c69893a 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.4.1
-Release: 9%{?dist}
+Release: 10%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -74,7 +74,10 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# [Timer] Total: --- 5215.3 s
-# Should we build a "pypy" binary? (with jit)
+# We will build a "pypy" binary.
+#
+# Unfortunately, the JIT support is only available on some architectures.
+#
# pypy-1.4/pypy/jit/backend/detect_cpu.py:getcpuclassname currently supports the
# following options:
# 'i386', 'x86'
@@ -82,6 +85,11 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# 'x86_64'
# 'cli'
# 'llvm'
+#
+# We will only build with JIT support on those architectures, and build without
+# it on the other archs. The resulting binary will typically be slower than
+# CPython for the latter case.
+#
%ifarch %{ix86} x86_64
# FIXME: is there a better way of expressing "intel" here?
%global with_jit 1
@@ -225,8 +233,16 @@ BuildRequires: /usr/bin/execstack
Requires: pypy-libs = %{version}-%{release}
%description
-PyPy's implementation of Python, featuring a Just-In-Time compiler, and various
-optimized implementations of the standard types (strings, dictionaries, etc)
+PyPy's implementation of Python, featuring a Just-In-Time compiler on some CPU
+architectures, and various optimized implementations of the standard types
+(strings, dictionaries, etc)
+
+%if 0%{with_jit}
+This build of PyPy has JIT-compilation enabled.
+%else
+This build of PyPy has JIT-compilation disabled, as it is not supported on this
+CPU architecture.
+%endif
%package libs
@@ -411,11 +427,12 @@ BuildPyPy() {
popd
}
-%if 0%{with_jit}
BuildPyPy \
pypy \
- "-Ojit"
+%if 0%{with_jit}
+ "-Ojit" \
%endif
+ %{nil}
%if 0%{with_stackless}
BuildPyPy \
@@ -448,9 +465,7 @@ InstallPyPy() {
mkdir -p %{buildroot}/%{_bindir}
-%if 0%{with_jit}
InstallPyPy pypy
-%endif
%if 0%{with_stackless}
InstallPyPy pypy-stackless
@@ -799,9 +814,7 @@ CheckPyPy() {
echo "--------------------------------------------------------------"
}
-%if 0%{with_jit}
CheckPyPy pypy
-%endif
%if 0%{with_stackless}
CheckPyPy pypy-stackless
@@ -825,12 +838,10 @@ rm -rf $RPM_BUILD_ROOT
%{pypyprefix}/lib_pypy/
%{pypyprefix}/site-packages/
-%if 0%{with_jit}
%files
%defattr(-,root,root,-)
%doc LICENSE README
%{_bindir}/pypy
-%endif
%files devel
%defattr(-,root,root,-)
@@ -847,6 +858,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Wed Apr 20 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-10
+- build a /usr/bin/pypy (but without the JIT compiler) on architectures that
+don't support the JIT, so that they do at least have something that runs
+
* Tue Feb 08 2011 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 1.4.1-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
commit d853ff6a5bdd4ce40976333f048aba1616374604
Author: Dennis Gilmore <dennis(a)ausil.us>
Date: Tue Feb 8 20:23:05 2011 -0600
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
diff --git a/pypy.spec b/pypy.spec
index 6f44a9a..ca09b94 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.4.1
-Release: 8%{?dist}
+Release: 9%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -847,6 +847,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Tue Feb 08 2011 Fedora Release Engineering <rel-eng(a)lists.fedoraproject.org> - 1.4.1-9
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
+
* Fri Jan 14 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-8
- disable self-hosting for now, due to fatal error seen JIT-compiling the
translator
commit c225b1c0921c528b804bdce231951a10f040cb6c
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Fri Jan 14 11:58:45 2011 -0500
Disable self-hosting for now, due to fatal error seen JIT-compiling the translator
diff --git a/pypy.spec b/pypy.spec
index 9c8134d..6f44a9a 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.4.1
-Release: 7%{?dist}
+Release: 8%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -152,8 +152,38 @@ Patch4: pypy-1.4.1-more-readable-c-code.patch
#
# Turn it off with this boolean, to revert back to rebuilding using CPython
# and avoid a cycle in the build-time dependency graph:
+
+# I'm disabling the self-hosting for now, due to a fatal error seen inside the
+# JIT, presumably whilst JIT-compiling something within the translator's
+# inliner.
+#
+# Specifically, building pypy-1.4.1-7.fc15.src.rpm on x86_64 using pypy-1.4.1-5.fc15.x86_64
+# http://koji.fedoraproject.org/koji/taskinfo?taskID=2721517
+# failed with this RPython traceback:
+# ... snip ...
+# [rtyper:WARNING] prebuilt instance <pypy.rpython.memory.gctransform.asmgcroot.ShapeDecompressor instance at 0x00000000f0b5bc80> has no attribute 'addr'
+# [rtyper] specializing: 179300 / 180508 blocks (99%)
+# [rtyper] specializing: 180500 / 180566 blocks (99%)
+# [rtyper] -=- specialized 1363 more blocks -=-
+# [rtyper] specializing: 180600 / 180777 blocks (99%)
+# [rtyper] -=- specialized 211 more blocks -=-
+# [backendopt:inlining] phase with threshold factor: 32.4
+# [backendopt:inlining] heuristic: pypy.translator.backendopt.inline.inlining_heuristic
+# [x86/regalloc] Bogus arg in operation 76 at 0
+# RPython traceback:
+# File "implement_62.c", line 39979, in send_bridge_to_backend
+# File "implement_69.c", line 65301, in Assembler386_assemble_bridge
+# File "implement_72.c", line 8078, in RegAlloc_prepare_bridge
+# File "implement_40.c", line 53061, in RegAlloc__prepare
+# File "implement_44.c", line 14305, in RegAlloc__compute_vars_longevity
+# Fatal RPython error: NotImplementedError
#
-%global use_self_when_building 1
+# This appears to be deep within pypy/jit/backend/x86/regalloc.py which has
+# called "not_implemented" to emit this message to stderr, before raising the
+# exception:
+# [x86/regalloc] Bogus arg in operation 76 at 0
+
+%global use_self_when_building 0
%if 0%{use_self_when_building}
BuildRequires: pypy
%global bootstrap_python_interp pypy
@@ -817,6 +847,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Fri Jan 14 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-8
+- disable self-hosting for now, due to fatal error seen JIT-compiling the
+translator
+
* Fri Jan 14 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-7
- skip test_ioctl for now
commit 7632349386659a82412f3dfbd37e714bf56aa152
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Fri Jan 14 11:06:07 2011 -0500
skip test_ioctl for now
diff --git a/pypy.spec b/pypy.spec
index 71b2db6..9c8134d 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.4.1
-Release: 6%{?dist}
+Release: 7%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -669,6 +669,25 @@ CheckPyPy() {
# TestFailed: import __hello__ failed:No module named __hello__
SkipTest test_frozen
+ # test_ioctl:
+ # Failing in Koji with dist-f15 with:
+ # ======================================================================
+ # FAIL: test_ioctl (test.test_ioctl.IoctlTests)
+ # ----------------------------------------------------------------------
+ # Traceback (most recent call last):
+ # File "/usr/lib/pypy-1.4.1/lib-python/2.5.2/test/test_ioctl.py", line 25, in test_ioctl
+ # self.assert_(rpgrp in ids, "%s not in %s" % (rpgrp, ids))
+ # AssertionError: 0 not in (8304, 17737)
+ # ======================================================================
+ # FAIL: test_ioctl_mutate (test.test_ioctl.IoctlTests)
+ # ----------------------------------------------------------------------
+ # Traceback (most recent call last):
+ # File "/usr/lib/pypy-1.4.1/lib-python/2.5.2/test/test_ioctl.py", line 35, in test_ioctl_mutate
+ # self.assert_(rpgrp in ids, "%s not in %s" % (rpgrp, ids))
+ # AssertionError: 0 not in (8304, 17737)
+ # ----------------------------------------------------------------------
+ SkipTest test_ioctl
+
# test_iterlen:
# 24 failures out of 25, apparently all due to TypeError
SkipTest test_iterlen
@@ -798,6 +817,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Fri Jan 14 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-7
+- skip test_ioctl for now
+
* Thu Jan 13 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-6
- add a "pypy-devel" subpackage, and install the header files there
- in %%check, re-run failed tests in verbose mode
commit 0a81116e89104e6bd77075151eadf5bde029085d
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Thu Jan 13 19:51:26 2011 -0500
Add a pypy-devel subpackage; rerun failed selftests in verbose mode
* Thu Jan 13 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-6
- add a "pypy-devel" subpackage, and install the header files there
- in %%check, re-run failed tests in verbose mode
diff --git a/pypy.spec b/pypy.spec
index 4d66f89..71b2db6 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.4.1
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -205,6 +205,16 @@ Summary: Run-time libraries used by PyPy implementations of Python
%description libs
Libraries required by the various PyPy implementations of Python.
+
+%package devel
+Group: Development/Languages
+Summary: Development tools for working with PyPy
+%description devel
+Header files for building C extension modules against PyPy
+
+Requires: pypy = %{version}-%{release}
+
+
%if 0%{with_stackless}
%package stackless
Group: Development/Languages
@@ -516,6 +526,22 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
%{buildroot}/%{_bindir}/pypy \
0
+
+# Header files for C extension modules.
+# Upstream's packaging process (pypy/tool/release/package.py)
+# creates an "include" subdir and copies all *.h/*.inl from "include" there
+# (it also has an apparently out-of-date comment about copying them from
+# pypy/_interfaces, but this directory doesn't seem to exist, and it doesn't
+# seem to do this as of 2011-01-13)
+
+# FIXME: arguably these should be instead put into a subdir below /usr/include,
+# 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 include/*.inl %{buildroot}/%{pypy_include_dir}
+
+
# Capture the RPython source code files from the build within the debuginfo
# package (rhbz#666975)
%global pypy_debuginfo_dir /usr/src/debug/pypy-%{version}-src
@@ -692,8 +718,9 @@ CheckPyPy() {
SkipTest test_tarfile # permissions issues
%endif
- # Run the built binary through the selftests:
- time ./$ExeName -m test.regrtest -x $TESTS_TO_SKIP
+ # Run the built binary through the selftests
+ # "-w" : re-run failed tests in verbose mode
+ time ./$ExeName -m test.regrtest -w -x $TESTS_TO_SKIP
popd
@@ -756,6 +783,12 @@ rm -rf $RPM_BUILD_ROOT
%{_bindir}/pypy
%endif
+%files devel
+%defattr(-,root,root,-)
+%dir %{pypy_include_dir}
+%{pypy_include_dir}/*.h
+%{pypy_include_dir}/*.inl
+
%if 0%{with_stackless}
%files stackless
%defattr(-,root,root,-)
@@ -765,6 +798,10 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Thu Jan 13 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-6
+- add a "pypy-devel" subpackage, and install the header files there
+- in %%check, re-run failed tests in verbose mode
+
* Fri Jan 7 2011 Dan Horák <dan[at]danny.cz> - 1.4.1-5
- valgrind available only on selected architectures
commit d39359a3af6a0dee27f50e4a4fe52860f9c6b426
Author: Dan Horák <dan(a)danny.cz>
Date: Fri Jan 7 17:56:06 2011 +0100
- valgrind available only on selected architectures
diff --git a/pypy.spec b/pypy.spec
index 162ed5f..4d66f89 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.4.1
-Release: 4%{?dist}
+Release: 5%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -176,7 +176,9 @@ BuildRequires: bzip2-devel
BuildRequires: ncurses-devel
BuildRequires: expat-devel
BuildRequires: openssl-devel
+%ifarch %{ix86} x86_64 ppc ppc64 s390x
BuildRequires: valgrind-devel
+%endif
# Used by the selftests, though not by the build:
BuildRequires: gc-devel
@@ -763,6 +765,9 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Fri Jan 7 2011 Dan Horák <dan[at]danny.cz> - 1.4.1-5
+- valgrind available only on selected architectures
+
* Wed Jan 5 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-4
- rebuild pypy using itself, for speed, with a boolean to break this cycle in
the build-requirement graph (falling back to using "python-devel" aka CPython)
commit 00e57e74f81587a2c49341341a7a291a54e22dc8
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Thu Jan 6 17:09:03 2011 -0500
* Wed Jan 5 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-4
- rebuild pypy using itself, for speed, with a boolean to break this cycle in
the build-requirement graph (falling back to using "python-devel" aka CPython)
- add work-in-progress patch to try to make generated c more readable
(rhbz#666963)
- capture the RPython source code files from the build within the debuginfo
package (rhbz#666975)
diff --git a/pypy-1.4.1-more-readable-c-code.patch b/pypy-1.4.1-more-readable-c-code.patch
new file mode 100644
index 0000000..45fa534
--- /dev/null
+++ b/pypy-1.4.1-more-readable-c-code.patch
@@ -0,0 +1,695 @@
+diff -r cd083843b67a pypy/interpreter/pycode.py
+--- a/pypy/interpreter/pycode.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/interpreter/pycode.py Wed Jan 05 16:14:35 2011 -0500
+@@ -14,6 +14,7 @@
+ from pypy.interpreter.astcompiler.consts import (CO_OPTIMIZED,
+ CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS, CO_NESTED,
+ CO_GENERATOR, CO_CONTAINSGLOBALS)
++from pypy.interpreter.pytraceback import offset2lineno
+ from pypy.rlib.rarithmetic import intmask
+ from pypy.rlib.debug import make_sure_not_resized
+ from pypy.rlib import jit
+@@ -81,6 +82,7 @@
+ self.hidden_applevel = hidden_applevel
+ self.magic = magic
+ self._signature = cpython_code_signature(self)
++ self._cached_source = None
+ self._initialize()
+
+ def _initialize(self):
+@@ -403,3 +405,25 @@
+ def repr(self, space):
+ return space.wrap(self.get_repr())
+ repr.unwrap_spec = ['self', ObjSpace]
++
++ def get_linenum_for_offset(self, offset):
++ # Given a bytecode offset, return a 1-based index into the lines of the
++ # source code
++ return offset2lineno(self, offset)
++
++ def _ensure_source(self):
++ # Lazily grab the source lines into self._cached_source (or raise
++ # an IOError)
++ if not self._cached_source:
++ f = open(self.co_filename, 'r')
++ source = [line.rstrip() for line in f.readlines()]
++ f.close()
++ self._cached_source = source
++
++ def get_source_text(self, linenum):
++ # Given a 1-based index, get the corresponding line of source code (or
++ # raise an IOError)
++ self._ensure_source()
++ return self._cached_source[linenum - 1]
++
++
+diff -r cd083843b67a pypy/objspace/flow/model.py
+--- a/pypy/objspace/flow/model.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/objspace/flow/model.py Wed Jan 05 16:14:35 2011 -0500
+@@ -31,6 +31,120 @@
+
+ __metaclass__ = type
+
++class SourceLoc(object):
++ # A srcloc is a specific location within the RPython source code,
++ # intended for human display
++ __slots__ = ('code', # code object
++ 'linenum' # 1-based index, as displayed to a user
++ )
++ def __init__(self, code, linenum):
++ self.code = code
++ self.linenum = linenum
++
++ def get_text(self):
++ # Get the actual source text of this line
++ return self.code.get_source_text(self.linenum)
++
++ def __eq__(self, other):
++ return self.code == other.code and self.linenum == other.linenum
++
++ def __ne__(self, other):
++ if other:
++ return self.code != other.code or self.linenum != other.linenum
++ else:
++ return True
++
++class CodeLoc(object):
++ # A codeloc is a specific location within the RPython bytecode
++ __slots__ = ('code', # code object
++ 'offset' # int index into bytecode, or -1
++ )
++
++ def __init__(self, code, offset):
++ self.code = code
++ self.offset = offset
++
++ def __str__(self):
++ if self.offset >= 0:
++ return "%s@%d" % (self.code.co_name, self.offset)
++ else:
++ return ""
++
++ def __ne__(self, other):
++ if other:
++ return self.code != other.code or self.offset != other.offset
++ else:
++ return True
++
++ def __cmp__(self, other):
++ # Partial ordering, for those locations that have an offset:
++ if other:
++ if self.offset >= 0 and other.offset >= 0:
++ return self.offset - other.offset
++ return 0
++
++ def get_source_loc(self):
++ # Convert to a SourceLoc:
++ return SourceLoc(self.code, self.code.get_linenum_for_offset(self.offset))
++
++class OperationLoc(object):
++ # An oploc is the location within the RPython source code of a given
++ # operation
++ #
++ # This is a list consisting of CodeLoc instances, some of which may be None
++ #
++ # For the simple case, this is list of length 1 with a single CodeLoc
++ #
++ # For an operation inside an inlined callsite, we have a list of length 2:
++ # [codeloc of callsite,
++ # codeloc of operation within inlined body]
++ #
++ # For more interesting inlined cases, we have a chain of source locations:
++ # [codeloc of callsite,
++ # codeloc of inner callsite,
++ # ... ,
++ # codeloc of innermost inlined callsite,
++ # codeloc of operation within inlined body]
++ #
++
++ __slots__ = ('codelocs', )
++
++ def __init__(self, codelocs):
++ self.codelocs = codelocs
++
++ def __str__(self):
++ return '[' + ' > '.join(str(codeloc) for codeloc in self.codelocs) + ']'
++
++ def __cmp__(self, other):
++ return cmp(self.codelocs, other.codelocs)
++
++def block_comparator(blk0, blk1):
++ '''
++ Sort function for blocks, putting them in an ordering that attempts to
++ maximize readability of the generated C code
++ '''
++ # print 'comparing %r and %r' % (blk0, blk1)
++ # Put the start/end block at the top/bottom:
++ if blk0.isstartblock:
++ return -1
++
++ if blk1.isstartblock:
++ return 1
++
++ # Order blocks by the offset, where present:
++ if blk0.operations:
++ if blk1.operations:
++ return cmp(blk0.operations[0].oploc, blk1.operations[0].oploc)
++ else:
++ return -1
++ else:
++ if blk1.operations:
++ return 1
++ else:
++ return 0
++
++def edge_comparator(edge0, edge1):
++ return block_comparator(edge0.target, edge1.target)
+
+ class FunctionGraph(object):
+ __slots__ = ['startblock', 'returnblock', 'exceptblock', '__dict__']
+@@ -94,6 +208,21 @@
+ seen[block] = True
+ stack += block.exits[::-1]
+
++ def iterblocks_by_source(self):
++ # Try to preserve logical source ordering in the blocks
++ block = self.startblock
++ yield block
++ seen = {block: True}
++ stack = list(block.exits[::-1])
++ stack.sort(edge_comparator)
++ while stack:
++ block = stack.pop().target
++ if block not in seen:
++ yield block
++ seen[block] = True
++ stack += block.exits[::-1]
++ stack.sort(edge_comparator)
++
+ def iterlinks(self):
+ block = self.startblock
+ seen = {block: True}
+@@ -183,14 +312,14 @@
+ self.exits = [] # list of Link(s)
+
+ def at(self):
+- if self.operations and self.operations[0].offset >= 0:
+- return "@%d" % self.operations[0].offset
++ if self.operations:
++ return str(self.operations[0].oploc)
+ else:
+ return ""
+
+ def __str__(self):
+ if self.operations:
+- txt = "block@%d" % self.operations[0].offset
++ txt = "block%s" % self.operations[0].oploc
+ else:
+ if (not self.exits) and len(self.inputargs) == 1:
+ txt = "return block"
+@@ -245,6 +374,21 @@
+ from pypy.translator.tool.graphpage import try_show
+ try_show(self)
+
++ def isreturnblock(self):
++ return (not self.operations) and (not self.exits) and len(self.inputargs) == 1
++
++ def get_base_label(self, blocknum):
++ # Generate a more friendly C label for this block
++ if self.operations:
++ txt = "block"
++ elif (not self.exits) and len(self.inputargs) == 1:
++ txt = "return_block"
++ elif (not self.exits) and len(self.inputargs) == 2:
++ txt = "raise_block"
++ else:
++ txt = "codeless_block"
++ return '%s%d' % (txt, blocknum)
++
+
+ class Variable(object):
+ __slots__ = ["_name", "_nr", "concretetype"]
+@@ -331,13 +475,15 @@
+
+
+ class SpaceOperation(object):
+- __slots__ = "opname args result offset".split()
++ __slots__ = "opname args result oploc".split()
+
+- def __init__(self, opname, args, result, offset=-1):
++ def __init__(self, opname, args, result, oploc=None):
+ self.opname = intern(opname) # operation name
+ self.args = list(args) # mixed list of var/const
+ self.result = result # either Variable or Constant instance
+- self.offset = offset # offset in code string
++ if oploc is None:
++ oploc = OperationLoc([None])
++ self.oploc = oploc
+
+ def __eq__(self, other):
+ return (self.__class__ is other.__class__ and
+@@ -352,8 +498,9 @@
+ return hash((self.opname,tuple(self.args),self.result))
+
+ def __repr__(self):
+- return "%r = %s(%s)" % (self.result, self.opname,
+- ", ".join(map(repr, self.args)))
++ return "%r = %s(%s) (%s)" % (self.result, self.opname,
++ ", ".join(map(repr, self.args)),
++ self.oploc)
+
+ class Atom(object):
+ def __init__(self, name):
+@@ -448,8 +595,7 @@
+ for op in oplist:
+ copyop = SpaceOperation(op.opname,
+ [copyvar(v) for v in op.args],
+- copyvar(op.result), op.offset)
+- #copyop.offset = op.offset
++ copyvar(op.result), op.oploc)
+ result.append(copyop)
+ return result
+ newblock.operations = copyoplist(block.operations)
+diff -r cd083843b67a pypy/objspace/flow/objspace.py
+--- a/pypy/objspace/flow/objspace.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/objspace/flow/objspace.py Wed Jan 05 16:14:35 2011 -0500
+@@ -310,7 +310,9 @@
+ def do_operation(self, name, *args_w):
+ spaceop = SpaceOperation(name, args_w, Variable())
+ if hasattr(self, 'executioncontext'): # not here during bootstrapping
+- spaceop.offset = self.executioncontext.crnt_offset
++ codeloc = CodeLoc(self.executioncontext.code,
++ self.executioncontext.crnt_offset)
++ spaceop.oploc = OperationLoc([codeloc])
+ self.executioncontext.recorder.append(spaceop)
+ return spaceop.result
+
+diff -r cd083843b67a pypy/objspace/flow/test/test_model.py
+--- a/pypy/objspace/flow/test/test_model.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/objspace/flow/test/test_model.py Wed Jan 05 16:14:35 2011 -0500
+@@ -132,3 +132,25 @@
+ assert v2.renamed
+ assert v2.name.startswith("foobar_") and v2.name != v.name
+ assert v2.name.split('_', 1)[1].isdigit()
++
++def test_source_locations():
++ # Invent some random offsets into the code:
++ co = sample_function.__code__
++ codelocA = CodeLoc(co, 42)
++ codelocB = CodeLoc(co, 87)
++
++ assert str(codelocA) == 'sample_function@42'
++ assert str(codelocB) == 'sample_function@87'
++
++ assert cmp(codelocA, codelocB) < 0
++ assert cmp(codelocB, codelocA) > 0
++
++ oplocA = OperationLoc([codelocA])
++ oplocB = OperationLoc([codelocB])
++
++ assert str(oplocA) == '[sample_function@42]'
++ assert str(oplocB) == '[sample_function@87]'
++
++ assert cmp(oplocA, oplocB) < 0
++ assert cmp(oplocB, oplocA) > 0
++
+diff -r cd083843b67a pypy/rpython/rtyper.py
+--- a/pypy/rpython/rtyper.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/rpython/rtyper.py Wed Jan 05 16:14:35 2011 -0500
+@@ -800,7 +800,7 @@
+ return vars
+
+ def genop(self, opname, args_v, resulttype=None):
+- return self.llops.genop(opname, args_v, resulttype)
++ return self.llops.genop(opname, args_v, resulttype, self.spaceop.oploc)
+
+ def gendirectcall(self, ll_function, *args_v):
+ return self.llops.gendirectcall(ll_function, *args_v)
+@@ -935,7 +935,7 @@
+ v.concretetype))
+ return v
+
+- def genop(self, opname, args_v, resulttype=None):
++ def genop(self, opname, args_v, resulttype=None, oploc=None):
+ try:
+ for v in args_v:
+ v.concretetype
+@@ -944,7 +944,7 @@
+ " and pass its result to genop(),"
+ " never hop.args_v directly.")
+ vresult = Variable()
+- self.append(SpaceOperation(opname, args_v, vresult))
++ self.append(SpaceOperation(opname, args_v, vresult, oploc))
+ if resulttype is None:
+ vresult.concretetype = Void
+ return None
+diff -r cd083843b67a pypy/translator/backendopt/inline.py
+--- a/pypy/translator/backendopt/inline.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/backendopt/inline.py Wed Jan 05 16:14:35 2011 -0500
+@@ -4,6 +4,7 @@
+ from pypy.translator.unsimplify import copyvar
+ from pypy.objspace.flow.model import Variable, Constant, Block, Link
+ from pypy.objspace.flow.model import SpaceOperation, c_last_exception
++from pypy.objspace.flow.model import OperationLoc
+ from pypy.objspace.flow.model import FunctionGraph
+ from pypy.objspace.flow.model import traverse, mkentrymap, checkgraph
+ from pypy.annotation import model as annmodel
+@@ -231,6 +232,7 @@
+ self.varmap = {}
+ self._copied_blocks = {}
+ self.op = block.operations[index_operation]
++ self.callsite_oploc = self.op.oploc
+ self.graph_to_inline = self.get_graph_from_op(self.op)
+ self.exception_guarded = False
+ if (block.exitswitch == c_last_exception and
+@@ -297,7 +299,9 @@
+
+ def copy_operation(self, op):
+ args = [self.get_new_name(arg) for arg in op.args]
+- result = SpaceOperation(op.opname, args, self.get_new_name(op.result))
++ new_oploc = OperationLoc(self.callsite_oploc.codelocs[:] + op.oploc.codelocs[:])
++ result = SpaceOperation(op.opname, args, self.get_new_name(op.result),
++ new_oploc)
+ return result
+
+ def copy_block(self, block):
+diff -r cd083843b67a pypy/translator/c/funcgen.py
+--- a/pypy/translator/c/funcgen.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/c/funcgen.py Wed Jan 05 16:14:35 2011 -0500
+@@ -1,4 +1,6 @@
+ import sys
++import inspect
++import dis
+ from pypy.translator.c.support import USESLOTS # set to False if necessary while refactoring
+ from pypy.translator.c.support import cdecl
+ from pypy.translator.c.support import llvalue_from_constant, gen_assignments
+@@ -22,6 +24,38 @@
+
+ KEEP_INLINED_GRAPHS = False
+
++def block_comparator(blk0, blk1):
++ '''
++ Sort function for blocks, putting them in an ordering that attempts to
++ maximize readability of the generated C code
++ '''
++ # print 'comparing %r and %r' % (blk0, blk1)
++ # Put the start/end block at the top/bottom:
++ if blk0.isstartblock:
++ return -1
++
++ if blk1.isstartblock:
++ return 1
++
++ # Order blocks by the offset, where present:
++ if blk0.operations:
++ if blk1.operations:
++ return cmp(blk0.operations[0].oploc, blk1.operations[0].oploc)
++ else:
++ return -1
++ else:
++ if blk1.operations:
++ return 1
++ else:
++ return 0
++
++def escape_c_comments(py_src):
++ # Escape C comments within RPython source, to avoid generating bogus
++ # comments in our generated C source:
++ py_src = py_src.replace('/*', '')
++ py_src = py_src.replace('*/', '')
++ return py_src
++
+ class FunctionCodeGenerator(object):
+ """
+ Collects information about a function which we have to generate
+@@ -210,14 +244,57 @@
+
+ def cfunction_body(self):
+ graph = self.graph
+- yield 'goto block0;' # to avoid a warning "this label is not used"
++ # Try to print python source code:
++ if hasattr(graph, 'func'):
++ filename = inspect.getfile(graph.func)
++ #yield '/* name: %r */' % filename
++ try:
++ src, startline = inspect.getsourcelines(graph.func)
++ except IOError:
++ pass # No source found
++ except IndexError:
++ pass # Bulletproofing
++ else:
++ yield '/* Python source %r' % filename
++ for i, line in enumerate(src):
++ line = line.rstrip()
++ line = escape_c_comments(line)
++ # FuncNode.funcgen_implementation treats lines ending in ':'
++ # as C blocks, which messes up the formatting.
++ # Work around this:
++ if line.endswith(':'):
++ line += ' '
++ yield ' * %4d : %s' % (startline + i, line)
++ yield ' */'
++
++ label = graph.startblock.get_base_label(self.blocknum[graph.startblock])
++ yield 'goto %s;' % label # to avoid a warning "this label is not used"
++
++ # Sort the blocks into a (hopefully) readable order:
++ blocks = list(graph.iterblocks_by_source())
++ blocks.sort(block_comparator)
+
+ # generate the body of each block
+- for block in graph.iterblocks():
++ for block in blocks:
++ cursrcloc = None
+ myblocknum = self.blocknum[block]
+ yield ''
+- yield 'block%d:' % myblocknum
++ yield '%s:' % block.get_base_label(myblocknum)
++ #yield "/* repr(block): %r */" % (block, )
++ #yield "/* type(block): %r */" % (type(block), )
+ for i, op in enumerate(block.operations):
++ #yield "/* type(op): %r */" % (type(op), )
++ #yield "/* op.oploc: %s */" % (op.oploc, )
++ codeloc = op.oploc.codelocs[-1]
++ if codeloc:
++ srcloc = codeloc.get_source_loc()
++ if srcloc != cursrcloc:
++ try:
++ yield "/* %s:%d : %s */" % (codeloc.code.co_name, srcloc.linenum, escape_c_comments(srcloc.get_text()))
++ cursrcloc = srcloc
++ except IOError:
++ pass
++
+ for line in self.gen_op(op):
+ yield line
+ if len(block.exits) == 0:
+@@ -310,7 +387,7 @@
+ assignments.append((a2typename, dest, src))
+ for line in gen_assignments(assignments):
+ yield line
+- label = 'block%d' % self.blocknum[link.target]
++ label = link.target.get_base_label(self.blocknum[link.target])
+ if link.target in self.innerloops:
+ loop = self.innerloops[link.target]
+ if link is loop.links[-1]: # link that ends a loop
+diff -r cd083843b67a pypy/translator/c/test/test_genc.py
+--- a/pypy/translator/c/test/test_genc.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/c/test/test_genc.py Wed Jan 05 16:14:35 2011 -0500
+@@ -1,4 +1,5 @@
+ import autopath, sys, os, py
++import re
+ from pypy.rpython.lltypesystem.lltype import *
+ from pypy.annotation import model as annmodel
+ from pypy.translator.translator import TranslationContext
+@@ -498,3 +499,130 @@
+ else:
+ assert 0, "the call was not found in the C source"
+ assert 'PYPY_INHIBIT_TAIL_CALL();' in lines[i+1]
++
++def get_generated_c_source(fn, types):
++ # Return a (optimized fn, c source code, c source filename) 3-tuple
++ t = Translation(fn)
++ t.annotate(types)
++ c_filename_path = t.source_c()
++ h = c_filename_path.open()
++ src = h.read()
++ h.close()
++ c_fn = t.compile_c()
++ return (c_fn, src, c_filename_path)
++
++def extract_c_function(c_src, fname):
++ # Extract the source for a given C function out of a the given src string
++ # Makes assumptions about the layout of the source
++ pattern = '^(.+) \**%s\(.*\) {$' % fname
++ within_fn = False
++ result = ''
++ for line in c_src.splitlines():
++ if within_fn:
++ result += line + '\n'
++ if line.startswith('}'):
++ return result
++ else:
++ m = re.match(pattern, line)
++ if m:
++ within_fn = True
++ result += line + '\n'
++ return result
++
++
++
++def test_generated_c_source():
++ # Verify that generate C source "looks good"
++ # We'll use is_perfect_number, as it contains a loop and a conditional
++
++ # Generate C source code
++ from pypy.translator.test.snippet import is_perfect_number
++ c_fn, c_src, c_filename_path = get_generated_c_source(is_perfect_number,
++ [int])
++
++ # Locate the C source for the type-specialized function:
++ c_fn_src = extract_c_function(c_src, 'pypy_g_is_perfect_number')
++
++ # Verify that the C source contains embedded comments containing the lines
++ # of the python source:
++ expected_comment_lines = [
++ '/* is_perfect_number:31 : while div < n: */',
++ '/* is_perfect_number:32 : if n % div == 0: */',
++ '/* is_perfect_number:33 : sum += div */',
++ '/* is_perfect_number:34 : div += 1 */',
++ '/* is_perfect_number:35 : return n == sum */']
++ for exp_line in expected_comment_lines:
++ assert exp_line in c_fn_src
++
++ # Verify that the lines occur in the correct order
++ # ...we do this by filtering the function's generated C source to just
++ # those lines containing our comments (and dropping whitespace):
++ lines = c_fn_src.splitlines()
++ lines = [line.strip()
++ for line in lines
++ if '/* is_perfect_number:' in line]
++
++ # ...we should now have exact equality: the ordering should be as expected,
++ # and each comment should appear exactly once:
++ assert lines == expected_comment_lines
++
++ # Ensure that the generated C function does the right thing:
++ assert c_fn(5) == False
++ assert c_fn(6) == True
++ assert c_fn(7) == False
++
++ assert c_fn(5.0) == False
++ assert c_fn(6.0) == True
++ assert c_fn(7.0) == False
++
++ assert c_fn(5L) == False
++ assert c_fn(6L) == True
++ assert c_fn(7L) == False
++
++ try:
++ c_fn('hello world')
++ except:
++ pass
++ else:
++ raise 'Was expected exception'
++
++def test_escaping_c_comments():
++ # Ensure that c comments within RPython code get escaped when we generate
++ # our .c code (to avoid generating bogus C)
++ # See e.g. pypy.module.cpyext.dictobject's PyDict_Next, which has a
++ # docstring embedding a C comment
++ def c_style_comment(a, b):
++ '''Here is a C-style comment within an RPython docstring:
++ /* hello world */
++ '''
++ # and here's one in a string literal:
++ return '/* hello world a:%s b:%s */' % (a, b)
++
++ def cplusplus_style_comment(a, b):
++ '''Here is a C++-style comment within an RPython docstring:
++ // hello world
++ '''
++ # and here are some in string literals, and one as the floor division
++ # operator:
++ return '// hello world: a // b = %s' % (a // b)
++
++ for fn_name, exp_output in [('c_style_comment',
++ '/* hello world a:6 b:3 */'),
++ ('cplusplus_style_comment',
++ '// hello world: a // b = 2')]:
++ fn = locals()[fn_name]
++
++ c_fn, c_src, c_filename_path = get_generated_c_source(fn, [int, int])
++ # If the above survived, then the C compiler managed to handle
++ # the generated C code
++
++ # Verify that the generated code works (i.e. that we didn't
++ # accidentally change the meaning):
++ assert c_fn(6, 3) == exp_output
++
++ # Ensure that at least part of the docstrings made it into the C
++ # code:
++ c_fn_src = extract_c_function(c_src, 'pypy_g_' + fn_name)
++ assert 'Here is a ' in c_fn_src
++ assert 'style comment within an RPython docstring' in c_fn_src
++
+diff -r cd083843b67a pypy/translator/driver.py
+--- a/pypy/translator/driver.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/driver.py Wed Jan 05 16:14:35 2011 -0500
+@@ -539,6 +539,7 @@
+ dstname = self.compute_exe_name() + '.staticdata.info'
+ shutil.copy(str(fname), str(dstname))
+ self.log.info('Static data info written to %s' % dstname)
++ return c_source_filename
+
+ #
+ task_source_c = taskdef(task_source_c, ['database_c'], "Generating c source")
+diff -r cd083843b67a pypy/translator/gensupp.py
+--- a/pypy/translator/gensupp.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/gensupp.py Wed Jan 05 16:14:35 2011 -0500
+@@ -16,8 +16,8 @@
+ def visit(block):
+ if isinstance(block, Block):
+ # first we order by offset in the code string
+- if block.operations:
+- ofs = block.operations[0].offset
++ if block.operations and block.operations[0].oploc.codelocs[0]:
++ ofs = block.operations[0].oploc.codelocs[0].offset
+ else:
+ ofs = sys.maxint
+ # then we order by input variable name or value
+diff -r cd083843b67a pypy/translator/interactive.py
+--- a/pypy/translator/interactive.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/interactive.py Wed Jan 05 16:14:35 2011 -0500
+@@ -138,7 +138,7 @@
+ def source_c(self, argtypes=None, **kwds):
+ self.update_options(argtypes, kwds)
+ self.ensure_backend('c')
+- self.driver.source_c()
++ return self.driver.source_c()
+
+ def source_cl(self, argtypes=None, **kwds):
+ self.update_options(argtypes, kwds)
+diff -r cd083843b67a pypy/translator/llsupport/wrapper.py
+--- a/pypy/translator/llsupport/wrapper.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/llsupport/wrapper.py Wed Jan 05 16:14:35 2011 -0500
+@@ -59,6 +59,8 @@
+ # "return result"
+ block = Block(wrapper_inputargs)
+ wgraph = FunctionGraph('pyfn_' + (newname or func.func_name), block)
++ if hasattr(graph, 'func'):
++ wgraph.func = graph.func
+ translator.update_call_graph(wgraph, graph, object())
+ translator.graphs.append(wgraph)
+ block.operations[:] = newops
+diff -r cd083843b67a pypy/translator/simplify.py
+--- a/pypy/translator/simplify.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/simplify.py Wed Jan 05 16:14:35 2011 -0500
+@@ -294,7 +294,7 @@
+ return renaming.get(v, v)
+ def rename_op(op):
+ args = [rename(a) for a in op.args]
+- op = SpaceOperation(op.opname, args, rename(op.result), op.offset)
++ op = SpaceOperation(op.opname, args, rename(op.result), op.oploc)
+ # special case...
+ if op.opname == 'indirect_call':
+ if isinstance(op.args[0], Constant):
diff --git a/pypy.spec b/pypy.spec
index 96354e2..162ed5f 100644
--- a/pypy.spec
+++ b/pypy.spec
@@ -1,6 +1,6 @@
Name: pypy
Version: 1.4.1
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Python implementation with a Just-In-Time compiler
Group: Development/Languages
@@ -136,9 +136,33 @@ Patch2: fix-test_commands-expected-ls-output-issue7108.patch
# https://codespeak.net/issue/pypy-dev/issue614
Patch3: pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
+# Try to improve the readability of the generated .c code, by adding in the
+# RPython source as comments where possible.
+# A version of this was sent upstream as:
+# http://codespeak.net/pipermail/pypy-dev/2010q4/006532.html
+# TODO: get this into the upstream bug tracker, and finish inlining
+# support (rhbz#666963)
+Patch4: pypy-1.4.1-more-readable-c-code.patch
+
+
# Build-time requirements:
-BuildRequires: python-devel
+# pypy's can be rebuilt using itself, rather than with CPython; doing so
+# halves the build time.
+#
+# Turn it off with this boolean, to revert back to rebuilding using CPython
+# and avoid a cycle in the build-time dependency graph:
+#
+%global use_self_when_building 1
+%if 0%{use_self_when_building}
+BuildRequires: pypy
+%global bootstrap_python_interp pypy
+%else
+BuildRequires: python-devel
+%global bootstrap_python_interp python
+%endif
+
+
# FIXME: I'm seeing errors like this in the logs:
# [translation:WARNING] The module '_rawffi' is disabled
@@ -215,6 +239,8 @@ sed -i \
-e 's|LIBRARY_INSTALLATION_PATH|"%{pypyprefix}"|' \
pypy/translator/goal/app_main.py
+%patch4 -p1 -b .more-readable-c-code
+
# Replace /usr/local/bin/python shebangs with /usr/bin/python:
find -name "*.py" -exec \
@@ -304,6 +330,7 @@ BuildPyPy() {
# doesn't interract well with the results of using our standard build flags.
# 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//')
# If we're already built the JIT-enabled "pypy", then use it for subsequent
@@ -311,7 +338,10 @@ BuildPyPy() {
if test -x './pypy' ; then
INTERP='./pypy'
else
- INTERP='python'
+ # First pypy build within this rpm build?
+ # Fall back to using the bootstrap python interpreter, which might be a
+ # system copy of pypy from an earlier rpm, or be cpython's /usr/bin/python:
+ INTERP='%{bootstrap_python_interp}'
fi
# Here's where we actually invoke the build:
@@ -484,6 +514,34 @@ mkdir -p %{buildroot}/%{pypyprefix}/site-packages
%{buildroot}/%{_bindir}/pypy \
0
+# Capture the RPython source code files from the build within the debuginfo
+# package (rhbz#666975)
+%global pypy_debuginfo_dir /usr/src/debug/pypy-%{version}-src
+mkdir -p %{buildroot}%{pypy_debuginfo_dir}
+
+# copy over everything:
+cp -a pypy %{buildroot}%{pypy_debuginfo_dir}
+
+# ...then delete files that aren't .py files:
+find \
+ %{buildroot}%{pypy_debuginfo_dir} \
+ \( -type f \
+ -a \
+ \! -name "*.py" \
+ \) \
+ -delete
+
+# We don't need bytecode for these files; they are being included for reference
+# purposes.
+# There are some rpmlint warnings from these files:
+# non-executable-script
+# wrong-script-interpreter
+# zero-length
+# script-without-shebang
+# dangling-symlink
+# but given that the objective is to preserve a copy of the source code, those
+# are acceptable.
+
%check
topdir=$(pwd)
@@ -511,6 +569,7 @@ CheckPyPy() {
# Gather a list of tests to skip, due to known failures
# TODO: report these failures to pypy upstream
+ # See also rhbz#666967 and rhbz#666969
TESTS_TO_SKIP=""
# Test failures relating to missing codecs
@@ -622,6 +681,14 @@ CheckPyPy() {
# AssertionError: ValueError not raised
SkipTest test_zlib
+ %if 0%{use_self_when_building}
+ # Patch 3 prioritizes the installed copy of pypy's libraries over the
+ # build copy.
+ # This leads to test failures of test_pep263 and test_tarfile
+ # For now, suppress these when building using pypy itself:
+ SkipTest test_pep263 # on-disk encoding issues
+ SkipTest test_tarfile # permissions issues
+ %endif
# Run the built binary through the selftests:
time ./$ExeName -m test.regrtest -x $TESTS_TO_SKIP
@@ -696,6 +763,14 @@ rm -rf $RPM_BUILD_ROOT
%changelog
+* Wed Jan 5 2011 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-4
+- rebuild pypy using itself, for speed, with a boolean to break this cycle in
+the build-requirement graph (falling back to using "python-devel" aka CPython)
+- add work-in-progress patch to try to make generated c more readable
+(rhbz#666963)
+- capture the RPython source code files from the build within the debuginfo
+package (rhbz#666975)
+
* Wed Dec 22 2010 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-3
- try to respect the FHS by installing libraries below libdir, rather than
datadir; patch app_main.py to look in this installation location first when
commit f756cfcb34f7e48db6afaf04f79ca5c576a4b696
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Mon Jan 3 15:06:28 2011 -0500
Initial import of pypy-1.4.1-3 from package review (rhbz#588941)
diff --git a/.gitignore b/.gitignore
index e69de29..2878978 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/pypy-1.4.1-src.tar.bz2
diff --git a/fix-test_commands-expected-ls-output-issue7108.patch b/fix-test_commands-expected-ls-output-issue7108.patch
new file mode 100644
index 0000000..becc3e0
--- /dev/null
+++ b/fix-test_commands-expected-ls-output-issue7108.patch
@@ -0,0 +1,11 @@
+--- test/test_commands.py.orig 2010-12-22 13:25:11.357333216 -0500
++++ test/test_commands.py 2010-12-22 13:25:57.927166219 -0500
+@@ -47,7 +47,7 @@ class CommandTests(unittest.TestCase):
+ # Note that the first case above has a space in the group name
+ # while the second one has a space in both names.
+ pat = r'''d......... # It is a directory.
+- \+? # It may have ACLs.
++ [.+@]? # It may have alt access (SELinux, ACLs or metadata ('@' OS X).
+ \s+\d+ # It has some number of links.
+ [^/]* # Skip user, group, size, and date.
+ /\. # and end with the name of the file.
diff --git a/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch b/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
new file mode 100644
index 0000000..257f60f
--- /dev/null
+++ b/pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
@@ -0,0 +1,13 @@
+diff --git a/pypy/tool/ansi_print.py b/pypy/tool/ansi_print.py
+index 3eff27c..fac4ba2 100644
+--- a/pypy/tool/ansi_print.py
++++ b/pypy/tool/ansi_print.py
+@@ -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/pypy-1.4-config.patch b/pypy-1.4-config.patch
new file mode 100644
index 0000000..0b82ac8
--- /dev/null
+++ b/pypy-1.4-config.patch
@@ -0,0 +1,44 @@
+Index: pypy-1.4/pypy/translator/platform/linux.py
+===================================================================
+--- pypy-1.4.orig/pypy/translator/platform/linux.py
++++ pypy-1.4/pypy/translator/platform/linux.py
+@@ -3,17 +3,22 @@ import py, os
+ from pypy.translator.platform import _run_subprocess
+ from pypy.translator.platform.posix import BasePosix
+
++CFLAGS = ['-O3', '-pthread', '-fomit-frame-pointer',
++ '-Wall', '-Wno-unused']
++if os.environ.get('CFLAGS', None):
++ CFLAGS.extend(os.environ['CFLAGS'].split())
++CFLAGS = tuple(CFLAGS)
++
+ class BaseLinux(BasePosix):
+ name = "linux"
+
+ link_flags = ('-pthread', '-lrt')
+- cflags = ('-O3', '-pthread', '-fomit-frame-pointer',
+- '-Wall', '-Wno-unused')
++ cflags = CFLAGS
+ standalone_only = ()
+ shared_only = ('-fPIC',)
+ so_ext = 'so'
+ so_prefixes = ('lib', '')
+-
++
+ def _args_for_shared(self, args):
+ return ['-shared'] + args
+
+@@ -29,9 +34,10 @@ class BaseLinux(BasePosix):
+ class Linux(BaseLinux):
+ shared_only = () # it seems that on 32-bit linux, compiling with -fPIC
+ # gives assembler that asmgcc is not happy about.
+- def library_dirs_for_libffi_a(self):
+- # places where we need to look for libffi.a
+- return self.library_dirs_for_libffi() + ['/usr/lib']
++ # Fedora Linux, at least, has the shared version but not the static
++ #def library_dirs_for_libffi_a(self):
++ # # places where we need to look for libffi.a
++ # return self.library_dirs_for_libffi() + ['/usr/lib']
+
+
+ class Linux64(BaseLinux):
diff --git a/pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch b/pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
new file mode 100644
index 0000000..93bcb69
--- /dev/null
+++ b/pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
@@ -0,0 +1,16 @@
+diff -r cd083843b67a pypy/translator/goal/app_main.py
+--- a/pypy/translator/goal/app_main.py Mon Dec 20 17:17:45 2010 +0100
++++ b/pypy/translator/goal/app_main.py Wed Dec 22 17:43:21 2010 -0500
+@@ -191,6 +191,12 @@
+ IS_WINDOWS = False
+
+ def get_library_path(executable):
++ # FIXME: get this from translator configuration
++ dirname = LIBRARY_INSTALLATION_PATH
++ newpath = sys.pypy_initial_path(dirname)
++ if newpath:
++ return newpath
++
+ search = executable
+ while 1:
+ dirname = resolvedirof(search)
diff --git a/pypy.spec b/pypy.spec
new file mode 100644
index 0000000..96354e2
--- /dev/null
+++ b/pypy.spec
@@ -0,0 +1,762 @@
+Name: pypy
+Version: 1.4.1
+Release: 3%{?dist}
+Summary: Python implementation with a Just-In-Time compiler
+
+Group: Development/Languages
+# LGPL and another free license we'd need to ask spot about are present in some
+# java jars that we're not building with atm (in fact, we're deleting them
+# before building). If we restore those we'll have to work out the new
+# licensing terms
+License: MIT and Python and UCD
+URL: http://pypy.org/
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+
+# High-level configuration of the build:
+
+# PyPy consists of an implementation of an interpreter (with JIT compilation)
+# for the full Python language written in a high-level language, leaving many
+# of the implementation details as "pluggable" policies.
+#
+# The implementation language is then compiled down to .c code, from which we
+# obtain a binary.
+#
+# This allows us to build a near-arbitrary collection of different
+# implementations of Python with differing tradeoffs
+#
+# (As it happens, the implementation language is itself Python, albeit a
+# restricted subset "RPython", chosen to making it amenable to being compiled.
+# The result implements the full Python language though)
+
+# We could build many different implementations of Python.
+# For now, let's focus on the implementation that appears to be receiving the
+# most attention upstream: the JIT-enabled build, with all standard
+# optimizations
+
+# Building a configuration can take significant time:
+
+# A build of pypy (with jit) on i686 took 77 mins:
+# [Timer] Timings:
+# [Timer] annotate --- 583.3 s
+# [Timer] rtype_lltype --- 760.9 s
+# [Timer] pyjitpl_lltype --- 567.3 s
+# [Timer] backendopt_lltype --- 375.6 s
+# [Timer] stackcheckinsertion_lltype --- 54.1 s
+# [Timer] database_c --- 852.2 s
+# [Timer] source_c --- 1007.3 s
+# [Timer] compile_c --- 419.9 s
+# [Timer] ===========================================
+# [Timer] Total: --- 4620.5 s
+#
+# A build of pypy (nojit) on x86_64 took about an hour:
+# [Timer] Timings:
+# [Timer] annotate --- 537.5 s
+# [Timer] rtype_lltype --- 667.3 s
+# [Timer] backendopt_lltype --- 385.4 s
+# [Timer] stackcheckinsertion_lltype --- 42.5 s
+# [Timer] database_c --- 625.3 s
+# [Timer] source_c --- 1040.2 s
+# [Timer] compile_c --- 273.9 s
+# [Timer] ===========================================
+# [Timer] Total: --- 3572.0 s
+#
+#
+# A build of pypy-stackless on i686 took about 87 mins:
+# [Timer] Timings:
+# [Timer] annotate --- 584.2 s
+# [Timer] rtype_lltype --- 777.3 s
+# [Timer] backendopt_lltype --- 365.9 s
+# [Timer] stackcheckinsertion_lltype --- 39.3 s
+# [Timer] database_c --- 1089.6 s
+# [Timer] source_c --- 1868.6 s
+# [Timer] compile_c --- 490.4 s
+# [Timer] ===========================================
+# [Timer] Total: --- 5215.3 s
+
+
+# Should we build a "pypy" binary? (with jit)
+# pypy-1.4/pypy/jit/backend/detect_cpu.py:getcpuclassname currently supports the
+# following options:
+# 'i386', 'x86'
+# 'x86-without-sse2':
+# 'x86_64'
+# 'cli'
+# 'llvm'
+%ifarch %{ix86} x86_64
+# FIXME: is there a better way of expressing "intel" here?
+%global with_jit 1
+%else
+%global with_jit 0
+%endif
+
+# Should we build a "pypy-stackless" binary?
+%global with_stackless 0
+
+
+# Easy way to enable/disable verbose logging:
+%global verbose_logs 0
+
+%global pypyprefix %{_libdir}/pypy-%{version}
+%global pylibver 2.5.2
+
+# We refer to this subdir of the source tree in a few places during the build:
+%global goal_dir pypy/translator/goal
+
+
+# Turn off the brp-python-bytecompile postprocessing script
+# We manually invoke it later on, using the freshly built pypy binary
+%global __os_install_post \
+ %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g')
+
+# Source and patches:
+Source0: http://pypy.org/download/pypy-%{version}-src.tar.bz2
+
+# Edit a translator file for linux in order to configure our cflags and dynamic libffi
+Patch0: pypy-1.4-config.patch
+
+# 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:
+Patch1: pypy-1.2-suppress-mandelbrot-set-during-tty-build.patch
+
+# test_commmands fails on SELinux systems due to a change in the output
+# of "ls" (http://bugs.python.org/issue7108)
+Patch2: fix-test_commands-expected-ls-output-issue7108.patch
+
+# When locating the pypy standard libraries, look first within
+# LIBRARY_INSTALLATION_PATH.
+# We convert this from being a non-existant variable into a string literal
+# with the value of "pypyprefix" in the "prep" phase below.
+#
+# We still use the scanning relative to the binary location when invoking a
+# pypy binary during the build (e.g. during "check")
+#
+# Sent upstream (with caveats) as:
+# https://codespeak.net/issue/pypy-dev/issue614
+Patch3: pypy-1.4.1-add-LIBRARY_INSTALLATION_PATH.patch
+
+# Build-time requirements:
+
+BuildRequires: python-devel
+
+# FIXME: I'm seeing errors like this in the logs:
+# [translation:WARNING] The module '_rawffi' is disabled
+# [translation:WARNING] because importing pypy.rlib.libffi raised ImportError
+# [translation:WARNING] 'libffi.a' not found in ['/usr/lib/libffi', '/usr/lib']
+# Presumably we need to fix things to support dynamically-linked libffi
+BuildRequires: libffi-devel
+
+BuildRequires: zlib-devel
+BuildRequires: bzip2-devel
+BuildRequires: ncurses-devel
+BuildRequires: expat-devel
+BuildRequires: openssl-devel
+BuildRequires: valgrind-devel
+
+# Used by the selftests, though not by the build:
+BuildRequires: gc-devel
+
+BuildRequires: /usr/bin/execstack
+
+# pypy is bundling these so we delete them in %%prep. I don't think they are
+# needed unless we build pypy targetted at running on the jvm.
+#BuildRequires: jna
+#BuildRequires: jasmin # Not yet in Fedora
+
+
+# Metadata for the core package (the JIT build):
+Requires: pypy-libs = %{version}-%{release}
+
+%description
+PyPy's implementation of Python, featuring a Just-In-Time compiler, and various
+optimized implementations of the standard types (strings, dictionaries, etc)
+
+
+%package libs
+Group: Development/Languages
+Summary: Run-time libraries used by PyPy implementations of Python
+%description libs
+Libraries required by the various PyPy implementations of Python.
+
+%if 0%{with_stackless}
+%package stackless
+Group: Development/Languages
+Summary: Stackless Python interpreter built using PyPy
+Requires: pypy-libs = %{version}-%{release}
+%description stackless
+Build of PyPy with support for micro-threads for massive concurrency
+%endif
+
+%if 0%{with_stackless}
+%package stackless
+Group: Development/Languages
+Summary: Stackless Python interpreter built using PyPy
+Requires: pypy-libs = %{version}-%{release}
+%description stackless
+Build of PyPy with support for micro-threads for massive concurrency
+%endif
+
+
+%prep
+%setup -q -n pypy-%{version}-src
+%patch0 -p1 -b .configure-fedora
+%patch1 -p1 -b .suppress-mandelbrot-set-during-tty-build
+
+pushd lib-python/%{pylibver}
+%patch2 -p0
+popd
+
+# Look for the pypy libraries within LIBRARY_INSTALLATION_PATH first:
+%patch3 -p1
+# Fixup LIBRARY_INSTALLATION_PATH to be a string literal containing our value
+# for "pypyprefix":
+sed -i \
+ -e 's|LIBRARY_INSTALLATION_PATH|"%{pypyprefix}"|' \
+ pypy/translator/goal/app_main.py
+
+
+# Replace /usr/local/bin/python shebangs with /usr/bin/python:
+find -name "*.py" -exec \
+ sed \
+ -i -e "s|/usr/local/bin/python|/usr/bin/python|" \
+ "{}" \
+ \;
+
+find . -name '*.jar' -exec rm \{\} \;
+
+# Remove stray ".svn" directories present within the 1.4.1 tarball
+# (reported as https://codespeak.net/issue/pypy-dev/issue612 )
+find . -path '*/.svn*' -delete
+
+# Remove DOS batch files:
+find -name "*.bat"|xargs rm -f
+
+# The "demo" directory gets auto-installed by virture of being listed in %doc
+# Remove shebang lines from demo .py files, and remove executability from them:
+for f in demo/bpnn.py ; do
+ # Detect shebang lines && remove them:
+ sed -e '/^#!/Q 0' -e 'Q 1' $f \
+ && sed -i '1d' $f
+ chmod a-x $f
+done
+
+%build
+
+BuildPyPy() {
+ ExeName=$1
+ Options=$2
+
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "STARTING BUILD OF: $ExeName"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+
+ pushd %{goal_dir}
+
+ # The build involves invoking a python script, passing in particular
+ # arguments, environment variables, etc.
+ # Some notes on those follow:
+
+ # The generated binary embeds copies of the values of all environment
+ # variables. We need to unset "RPM_BUILD_ROOT" to avoid a fatal error from
+ # /usr/lib/rpm/check-buildroot
+ # during the postprocessing of the rpmbuild, complaining about this
+ # reference to the buildroot
+
+
+ # By default, pypy's autogenerated C code is placed in
+ # /tmp/usession-N
+ #
+ # and it appears that this stops rpm from extracting the source code to the
+ # debuginfo package
+ #
+ # The logic in pypy-1.4/pypy/tool/udir.py indicates that it is generated in:
+ # $PYPY_USESSION_DIR/usession-$PYPY_USESSION_BASENAME-N
+ # and so we set PYPY_USESSION_DIR so that this tempdir is within the build
+ # location, and set $PYPY_USESSION_BASENAME so that the tempdir is unique
+ # for each invocation of BuildPyPy
+
+ # Compilation flags for C code:
+ # pypy-1.4/pypy/translator/c/genc.py:gen_makefile
+ # assembles a Makefile within
+ # THE_UDIR/testing_1/Makefile
+ # calling out to platform.gen_makefile
+ # For us, that's
+ # pypy-1.4/pypy/translator/platform/linux.py: class BaseLinux(BasePosix):
+ # which by default has:
+ # CFLAGS = ['-O3', '-pthread', '-fomit-frame-pointer',
+ # '-Wall', '-Wno-unused']
+ # plus all substrings from CFLAGS in the environment.
+ # This is used to generate a value for CFLAGS that's written into the Makefile
+
+ # https://bugzilla.redhat.com/show_bug.cgi?id=588941#c18
+ # The generated Makefile compiles the .c files into assembler (.s), rather
+ # than direct to .o It then post-processes this assembler to locate
+ # garbage-collection roots (building .lbl.s and .gcmap files, and a
+ # "gcmaptable.s"). (The modified .lbl.s files have extra code injected
+ # within them).
+ # Unfortunately, the code to do this:
+ # pypy-1.4/pypy/translator/c/gcc/trackgcroot.py
+ # doesn't interract well with the results of using our standard build flags.
+ # For now, filter our CFLAGS of everything that could be conflicting with
+ # pypy. Need to check these and reenable ones that are okay later.
+ 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//')
+
+ # If we're already built the JIT-enabled "pypy", then use it for subsequent
+ # builds (of other configurations):
+ if test -x './pypy' ; then
+ INTERP='./pypy'
+ else
+ INTERP='python'
+ fi
+
+ # Here's where we actually invoke the build:
+ time \
+ RPM_BUILD_ROOT= \
+ PYPY_USESSION_DIR=$(pwd) \
+ PYPY_USESSION_BASENAME=$ExeName \
+ $INTERP translate.py \
+%if 0%{verbose_logs}
+ --translation-verbose \
+%endif
+ --cflags="$CFLAGS" \
+ --batch \
+ --output=$ExeName \
+ $Options
+
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "FINISHED BUILDING: $ExeName"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+
+ popd
+}
+
+%if 0%{with_jit}
+BuildPyPy \
+ pypy \
+ "-Ojit"
+%endif
+
+%if 0%{with_stackless}
+BuildPyPy \
+ pypy-stackless \
+ "--stackless"
+%endif
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+
+# Install the various executables:
+
+InstallPyPy() {
+ ExeName=$1
+
+ install -m 755 %{goal_dir}/$ExeName %{buildroot}/%{_bindir}
+
+ # The generated machine code doesn't need an executable stack, but
+ # one of the assembler files (gcmaptable.s) doesn't have the necessary
+ # metadata to inform gcc of that, and thus gcc pessimistically assumes
+ # that the built binary does need an executable stack.
+ #
+ # Reported upstream as: https://codespeak.net/issue/pypy-dev/issue610
+ #
+ # I tried various approaches involving fixing the build, but the simplest
+ # approach is to postprocess the ELF file:
+ execstack --clear-execstack %{buildroot}/%{_bindir}/$ExeName
+}
+
+mkdir -p %{buildroot}/%{_bindir}
+
+%if 0%{with_jit}
+InstallPyPy pypy
+%endif
+
+%if 0%{with_stackless}
+InstallPyPy pypy-stackless
+%endif
+
+
+# Install the various support libraries as described at:
+# http://codespeak.net/pypy/dist/pypy/doc/getting-started-python.html#insta...
+# 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 '.'
+
+mkdir -p %{buildroot}/%{pypyprefix}
+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 shebang lines from .py files that aren't executable, and
+# remove executability from .py files that don't have a shebang line:
+find \
+ %{buildroot} \
+ -name "*.py" \
+ \( \
+ \( \! -perm /u+x,g+x,o+x -exec sed -e '/^#!/Q 0' -e 'Q 1' {} \; \
+ -print -exec sed -i '1d' {} \; \
+ \) \
+ -o \
+ \( \
+ -perm /u+x,g+x,o+x ! -exec grep -m 1 -q '^#!' {} \; \
+ -exec chmod a-x {} \; \
+ \) \
+ \)
+
+mkdir -p %{buildroot}/%{pypyprefix}/site-packages
+
+
+# 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
+# is treated as a "dummy optimization flag for compatibility with C Python"
+#
+# pypy-1.4/pypy/module/imp/importing.py has this comment:
+ # XXX picking a magic number is a mess. So far it works because we
+ # have only two extra opcodes, which bump the magic number by +1 and
+ # +2 respectively, and CPython leaves a gap of 10 when it increases
+ # its own magic number. To avoid assigning exactly the same numbers
+ # as CPython we always add a +2. We'll have to think again when we
+ # get at the fourth new opcode :-(
+ #
+ # * CALL_LIKELY_BUILTIN +1
+ # * CALL_METHOD +2
+ #
+ # In other words:
+ #
+ # default_magic -- used by CPython without the -U option
+ # default_magic + 1 -- used by CPython with the -U option
+ # default_magic + 2 -- used by PyPy without any extra opcode
+ # ...
+ # default_magic + 5 -- used by PyPy with both extra opcodes
+#
+
+# pypy-1.4/pypy/interpreter/pycode.py has:
+#
+# default_magic = (62141+2) | 0x0a0d0000 # this PyPy's magic
+# # (62131=CPython 2.5.1)
+# giving a value for "default_magic" for PyPy of 0xa0df2bf.
+# Note that this corresponds to the "default_magic + 2" from the comment above
+
+# In my builds:
+# $ ./pypy --info | grep objspace.opcodes
+# objspace.opcodes.CALL_LIKELY_BUILTIN: False
+# objspace.opcodes.CALL_METHOD: True
+# so I'd expect the magic number to be:
+# 0x0a0df2bf + 2 (the flag for CALL_METHOD)
+# giving
+# 0x0a0df2c1
+#
+# I'm seeing
+# c1 f2 0d 0a
+# as the first four bytes of the .pyc files, which is consistent with this.
+
+
+# Bytecompile all of the .py files we ship, using our pypy binary, giving us
+# .pyc files for pypy. The script actually does the work twice (passing in -O
+# the second time) but it's simplest to reuse that script.
+#
+# The script has special-casing for .py files below
+# /usr/lib{64}/python[0-9].[0-9]
+# but given that we're installing into a different path, the supplied "default"
+# implementation gets used instead.
+#
+# 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}/pypy \
+ 0
+
+%check
+topdir=$(pwd)
+
+SkipTest() {
+ # Append the given test name to TESTS_TO_SKIP
+ TEST_NAME=$1
+ TESTS_TO_SKIP="$TESTS_TO_SKIP $TEST_NAME"
+}
+
+CheckPyPy() {
+ # We'll be exercising one of the freshly-built binaries using the
+ # test suite from the standard library (overridden in places by pypy's
+ # modified version)
+ ExeName=$1
+
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "STARTING TEST OF: $ExeName"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+
+ pushd %{goal_dir}
+
+ # Gather a list of tests to skip, due to known failures
+ # TODO: report these failures to pypy upstream
+ TESTS_TO_SKIP=""
+
+ # Test failures relating to missing codecs
+ # Hopefully when pypy merges to 2.7 support we'll gain these via a
+ # refreshed stdlib:
+ # test_codecencodings_cn:
+ # all tests fail, with one of
+ # unknown encoding: gb18030
+ # unknown encoding: gb2312
+ # unknown encoding: gbk
+ SkipTest test_codecencodings_cn
+
+ # test_codecencodings_hk:
+ # all tests fail, with:
+ # unknown encoding: big5hkscs
+ SkipTest test_codecencodings_hk
+
+ # test_codecencodings_jp:
+ # all tests fail, with one of:
+ # unknown encoding: cp932
+ # unknown encoding: euc_jisx0213
+ # unknown encoding: euc_jp
+ # unknown encoding: shift_jis
+ # unknown encoding: shift_jisx0213
+ SkipTest test_codecencodings_jp
+
+ # test_codecencodings_kr:
+ # all tests fail, with one of:
+ # unknown encoding: cp949
+ # unknown encoding: euc_kr
+ # unknown encoding: johab
+ SkipTest test_codecencodings_kr
+
+ # test_codecencodings_tw:
+ # all tests fail, with:
+ # unknown encoding: big5
+ SkipTest test_codecencodings_tw
+
+ # test_multibytecodec:
+ # 14 failures out of 15, due to:
+ # unknown encoding: euc-kr
+ # unknown encoding: gb2312
+ # unknown encoding: jisx0213
+ # unknown encoding: cp949
+ # unknown encoding: iso2022-jp
+ # unknown encoding: gb18030
+ SkipTest test_multibytecodec
+
+ #
+ # Other failures:
+ #
+ # test_asynchat:
+ # seems to hang on this test, within test_line_terminator
+ SkipTest test_asynchat
+
+ # test_compiler:
+ # 4 errors out of 13:
+ # testSourceCodeEncodingsError
+ # testWith
+ # testWithAss
+ # testYieldExpr
+ SkipTest test_compiler
+
+ # test_ctypes:
+ # failures=17, errors=20, out of 132 tests
+ SkipTest test_ctypes
+
+ # test_frozen:
+ # TestFailed: import __hello__ failed:No module named __hello__
+ SkipTest test_frozen
+
+ # test_iterlen:
+ # 24 failures out of 25, apparently all due to TypeError
+ SkipTest test_iterlen
+
+ # test_parser:
+ # 12 failures out of 15
+ SkipTest test_parser
+
+ # test_platform:
+ # Koji builds show:
+ # test test_platform failed -- errors occurred in test.test_platform.PlatformTest
+ SkipTest test_platform
+
+ # test_socket:
+ # testSockName can fail in Koji with:
+ # my_ip_addr = socket.gethostbyname(socket.gethostname())
+ # gaierror: (-3, 'Temporary failure in name resolution')
+ SkipTest test_socket
+
+ # test_sort:
+ # some failures
+ SkipTest test_sort
+
+ # test_sqlite:
+ # 3 of the sqlite3.test.dbapi.ExtensionTests raise:
+ # ProgrammingError: Incomplete statement ''
+ SkipTest test_sqlite
+
+ # test_traceback:
+ # works when run standalone; failures seen when run as part of a suite
+ SkipTest test_traceback
+
+ # test_zlib:
+ # failure seen in Koji, not sure of reason why:
+ # test test_zlib failed -- Traceback (most recent call last):
+ # File "/builddir/build/BUILD/pypy-1.4.1-src/lib-python/2.5.2/test/test_zlib.py", line 72, in test_baddecompressobj
+ # self.assertRaises(ValueError, zlib.decompressobj, 0)
+ # AssertionError: ValueError not raised
+ SkipTest test_zlib
+
+
+ # Run the built binary through the selftests:
+ time ./$ExeName -m test.regrtest -x $TESTS_TO_SKIP
+
+ popd
+
+ # Doublecheck pypy's own test suite, using the built pypy binary:
+
+ # Disabled for now:
+ # x86_64 shows various failures inside:
+ # jit/backend/x86/test
+ # followed by a segfault inside
+ # jit/backend/x86/test/test_runner.py
+ #
+ # i686 shows various failures inside:
+ # jit/backend/x86/test
+ # with the x86_64 failure leading to cancellation of the i686 build
+
+ # Here's the disabled code:
+ # pushd pypy
+ # time translator/goal/$ExeName test_all.py
+ # popd
+
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "FINISHED TESTING: $ExeName"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+ echo "--------------------------------------------------------------"
+}
+
+%if 0%{with_jit}
+CheckPyPy pypy
+%endif
+
+%if 0%{with_stackless}
+CheckPyPy pypy-stackless
+%endif
+
+
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+
+%files libs
+%defattr(-,root,root,-)
+%doc LICENSE README demo
+
+%dir %{pypyprefix}
+%dir %{pypyprefix}/lib-python
+%{pypyprefix}/lib-python/%{pylibver}/
+%{pypyprefix}/lib-python/modified-%{pylibver}/
+%{pypyprefix}/lib-python/conftest.py*
+%{pypyprefix}/lib_pypy/
+%{pypyprefix}/site-packages/
+
+%if 0%{with_jit}
+%files
+%defattr(-,root,root,-)
+%doc LICENSE README
+%{_bindir}/pypy
+%endif
+
+%if 0%{with_stackless}
+%files stackless
+%defattr(-,root,root,-)
+%doc LICENSE README
+%{_bindir}/pypy-stackless
+%endif
+
+
+%changelog
+* Wed Dec 22 2010 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-3
+- try to respect the FHS by installing libraries below libdir, rather than
+datadir; patch app_main.py to look in this installation location first when
+scanning for the pypy library directories.
+- clarifications and corrections to the comments in the specfile
+
+* Wed Dec 22 2010 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-2
+- remove .svn directories
+- disable verbose logging
+- add a %%check section
+- introduce %%goal_dir variable, to avoid repetition
+- remove shebang line from demo/bpnn.py, as we're treating this as a
+documentation file
+- regenerate patch 2 to apply without generating a .orig file
+
+* Tue Dec 21 2010 David Malcolm <dmalcolm(a)redhat.com> - 1.4.1-1
+- 1.4.1; fixup %%setup to reflect change in toplevel directory in upstream
+source tarball
+- apply SELinux fix to the bundled test_commands.py (patch 2)
+
+* Wed Dec 15 2010 David Malcolm <dmalcolm(a)redhat.com> - 1.4-4
+- rename the jit build and subpackge to just "pypy", and remove the nojit and
+sandbox builds, as upstream now seems to be focussing on the JIT build (with
+only stackless called out in the getting-started-python docs); disable
+stackless for now
+- add a verbose_logs specfile boolean; leave it enabled for now (whilst fixing
+build issues)
+- add more comments, and update others to reflect 1.2 -> 1.4 changes
+- re-enable debuginfo within CFLAGS ("-g")
+- add the LICENSE and README to all subpackages
+- ensure the built binaries don't have the "I need an executable stack" flag
+- remove DOS batch files during %%prep (idlelib.bat)
+- remove shebang lines from .py files that aren't executable, and remove
+executability from .py files that don't have a shebang line (taken from
+our python3.spec)
+- bytecompile the .py files into .pyc files in pypy's bytecode format
+
+* Sun Nov 28 2010 Toshio Kuratomi <toshio(a)fedoraproject.org> - 1.4-3
+- BuildRequire valgrind-devel
+- Install pypy library from the new directory
+- Disable building with our CFLAGS for now because they are causing a build failure.
+- Include site-packages directory
+
+* Sat Nov 27 2010 Toshio Kuratomi <toshio(a)fedoraproject.org> - 1.4-2
+- Add patch to configure the build to use our CFLAGS and link libffi
+ dynamically
+
+* Sat Nov 27 2010 Toshio Kuratomi <toshio(a)fedoraproject.org> - 1.4-1
+- Update to 1.4
+- Drop patch for py2.6 that's in this build
+- Switch to building pypy with itself once pypy is built once as recommended by
+ upstream
+- Remove bundled, prebuilt java libraries
+- Fix license tag
+- Fix source url
+- Version pypy-libs Req
+
+* Tue May 4 2010 David Malcolm <dmalcolm(a)redhat.com> - 1.2-2
+- cherrypick r72073 from upstream SVN in order to fix the build against
+python 2.6.5 (patch 2)
+
+* Wed Apr 28 2010 David Malcolm <dmalcolm(a)redhat.com> - 1.2-1
+- initial packaging
+
diff --git a/sources b/sources
index e69de29..90f34be 100644
--- a/sources
+++ b/sources
@@ -0,0 +1 @@
+ebbbb156b1eb842e9e65d909ed5f9f6d pypy-1.4.1-src.tar.bz2
2 years, 10 months
[Report] Packages Restricting Arches
by root
New package excluding arches (1)
============================
- rust-gtk4
ExclusiveArch: %{rust_arches}
List of packages currently excluding arches (2241)
===========================================
- 0ad
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le
- 90-Second-Portraits
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- GoldenCheetah
ExclusiveArch: %{qt5_qtwebengine_arches}
- GtkAda
ExclusiveArch: %{GPRbuild_arches}
- GtkAda3
ExclusiveArch: %{GPRbuild_arches}
- OpenImageIO
ExclusiveArch: x86_64 ppc64le
- OpenMolcas
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- PragmARC
ExclusiveArch: %{GPRbuild_arches}
- R-V8
ExclusiveArch: %{nodejs_arches}
- RdRand
ExclusiveArch: %{ix86} x86_64
- RediSearch
ExclusiveArch: x86_64
- SLOF
ExclusiveArch: ppc64le
- YafaRay
ExclusiveArch: %{ix86} x86_64
- aboot
ExclusiveArch: alpha
- accel-config
ExclusiveArch: %{ix86} x86_64
- acpid
ExclusiveArch: ia64 x86_64 %{ix86} %{arm} aarch64
- ahven
ExclusiveArch: %{GPRbuild_arches}
- algobox
ExclusiveArch: %{qt5_qtwebengine_arches}
- alleyoop
ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x %{arm} aarch64
- american-fuzzy-lop
ExclusiveArch: %{ix86} x86_64
- anet
ExclusiveArch: %{GPRbuild_arches}
- anki
ExclusiveArch: %{qt5_qtwebengine_arches} noarch
- apmd
ExclusiveArch: %{ix86}
- appstream-generator
ExclusiveArch: %{ldc_arches}
- arm-trusted-firmware
ExclusiveArch: aarch64
- aunit
ExclusiveArch: %GPRbuild_arches
- avgtime
ExclusiveArch: %{ldc_arches}
- aws
ExclusiveArch: %GPRbuild_arches
- bcal
ExclusiveArch: x86_64 aarch64 ia64 ppc64 ppc64le s390x
- bcc
ExclusiveArch: x86_64 %{power64} aarch64 s390x armv7hl
- bcm283x-firmware
ExclusiveArch: %{arm} aarch64
- berusky2
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{mips}
- biosdevname
ExclusiveArch: %{ix86} x86_64
- blender
ExclusiveArch: x86_64 aarch64 ppc64le
- bless
ExclusiveArch: %mono_arches
- bpftrace
ExclusiveArch: x86_64 %{power64} aarch64 s390x
- calamares
ExclusiveArch: %{ix86} x86_64
- calibre
ExclusiveArch: %{qt5_qtwebengine_arches}
- ccdciel
ExclusiveArch: %{fpc_arches}
- cdcollect
ExclusiveArch: %{mono_arches}
- ceph
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- chromium
ExclusiveArch: x86_64 i686
ExclusiveArch: x86_64 i686 aarch64
- cjdns
ExclusiveArch: %{nodejs_arches}
- clevis-pin-tpm2
ExclusiveArch: %{rust_arches}
- cmospwd
ExclusiveArch: %{ix86} x86_64
- cmrt
ExclusiveArch: %{ix86} x86_64 ia64
- coffee-script
ExclusiveArch: %{nodejs_arches} noarch
- colorful
ExclusiveArch: %{fpc_arches}
- cpu-x
ExclusiveArch: i686 x86_64
- cpufetch
ExclusiveArch: %{arm} aarch64 x86_64
- cpuid
ExclusiveArch: %{ix86} x86_64
- cqrlog
ExclusiveArch: %{fpc_arches}
- crash
ExclusiveArch: %{ix86} ia64 x86_64 ppc ppc64 s390 s390x %{arm} aarch64 ppc64le
- crash-gcore-command
ExclusiveArch: aarch64 ppc64le x86_64
- crash-trace-command
ExclusiveArch: aarch64 ppc64le s390x x86_64
- criu
ExclusiveArch: x86_64 %{arm} ppc64le aarch64 s390x
- cryptlib
ExclusiveArch: x86_64 %{ix86} aarch64 ppc64 ppc64le
- cryptobone
ExclusiveArch: x86_64 %{ix86} ppc64 ppc64le aarch64
- daq
ExclusiveArch: x86_64 aarch64
- darktable
ExclusiveArch: x86_64 aarch64
ExclusiveArch: x86_64 ppc64le
- dbus-parsec
ExclusiveArch: %{rust_arches}
- dbus-sharp
ExclusiveArch: %mono_arches
- dbus-sharp-glib
ExclusiveArch: %mono_arches
- dbxtool
ExclusiveArch: i386 x86_64 aarch64
- deepin-daemon
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- deepin-desktop-schemas
ExclusiveArch: %{go_arches}
- dlm
ExclusiveArch: i686 x86_64
- dmidecode
ExclusiveArch: %{ix86} x86_64 ia64 aarch64
- dmtcp
ExclusiveArch: x86_64 aarch64
- docker-distribution
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- dolphin-emu
ExclusiveArch: x86_64 aarch64
- dotnet-build-reference-packages
ExclusiveArch: aarch64 x86_64
ExclusiveArch: x86_64
- dotnet3.1
ExclusiveArch: aarch64 x86_64
ExclusiveArch: x86_64
- dotnet5.0
ExclusiveArch: aarch64 x86_64
ExclusiveArch: x86_64
- dotnet5.0-build-reference-packages
ExclusiveArch: aarch64 x86_64
ExclusiveArch: x86_64
- doublecmd
ExclusiveArch: %{ix86} x86_64
- dpdk
ExclusiveArch: x86_64 i686 aarch64 ppc64le
- dyninst
ExclusiveArch: %{ix86} x86_64 ppc64le aarch64
- e3
ExclusiveArch: %{ix86} x86_64
- edk2
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
ExclusiveArch: x86_64 aarch64
- efibootmgr
ExclusiveArch: %{efi}
- efifs
ExclusiveArch: %{efi}
- efitools
ExclusiveArch: %{efi}
- efivar
ExclusiveArch: %{efi}
- elk
ExclusiveArch: x86_64 %{ix86}
ExclusiveArch: x86_64 %{ix86} aarch64 %{arm} %{power64}
- emacs-slime
ExclusiveArch: %{arm} %{ix86} x86_64 ppc sparcv9 aarch64
- enki
ExclusiveArch: %{qt5_qtwebengine_arches} noarch
- envytools
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- eric
ExclusiveArch: %{qt5_qtwebengine_arches} noarch
- eth-tools
ExclusiveArch: x86_64
- extlinux-bootloader
ExclusiveArch: %{arm} aarch64
- fcitx-libpinyin
ExclusiveArch: %{qt5_qtwebengine_arches}
- fedora-dockerfiles
ExclusiveArch: %{go_arches}
- fes
ExclusiveArch: %{ix86} x86_64
- fkill-cli
ExclusiveArch: %{nodejs_arches} noarch
- florist
ExclusiveArch: %{GPRbuild_arches}
- fpc
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64 ppc64le
- frescobaldi
ExclusiveArch: %{qt5_qtwebengine_arches}
- frysk
ExclusiveArch: %{ix86} x86_64 ppc64
- fwts
ExclusiveArch: x86_64 %{arm} aarch64 s390x riscv64 %{power64}
- fwupd-efi
ExclusiveArch: x86_64 aarch64
- fx
ExclusiveArch: %{nodejs_arches} noarch
- fx-completion
ExclusiveArch: %{nodejs_arches} noarch
- ga
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le
- gbrainy
ExclusiveArch: %mono_arches
- gdata-sharp
ExclusiveArch: %mono_arches
- gdb-exploitable
ExclusiveArch: x86_64 i386
ExclusiveArch: x86_64 noarch
- gearhead1
ExclusiveArch: %{fpc_arches}
- gela-asis
ExclusiveArch: %GPRbuild_arches
- ghdl
ExclusiveArch: %{GNAT_arches}
- ghostwriter
ExclusiveArch: %{qt5_qtwebengine_arches}
- gio-sharp
ExclusiveArch: %mono_arches
- gir-to-d
ExclusiveArch: %{ldc_arches}
- git-octopus
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- gitqlient
ExclusiveArch: %{qt5_qtwebengine_arches}
- giver
ExclusiveArch: %{mono_arches}
- gkeyfile-sharp
ExclusiveArch: %mono_arches
- glibc32
ExclusiveArch: x86_64
- glibd
ExclusiveArch: %{ldc_arches}
- gmqcc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- gnatcoll
ExclusiveArch: %{GPRbuild_arches}
- gnatcoll-bindings
ExclusiveArch: %{GPRbuild_arches}
- gnatcoll-db
ExclusiveArch: %{GPRbuild_arches}
- gnome-boxes
ExclusiveArch: x86_64
- gnome-desktop-sharp
ExclusiveArch: %mono_arches
- gnome-do
ExclusiveArch: %mono_arches
- gnome-keyring-sharp
ExclusiveArch: %mono_arches
- gnome-rdp
ExclusiveArch: %{mono_arches}
- gnome-sharp
ExclusiveArch: %mono_arches
- gnome-subtitles
ExclusiveArch: %mono_arches
- gnu-efi
ExclusiveArch: %{efi}
- go-bindata
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- go-compilers
ExclusiveArch: %{go_arches}
- go-rpm-macros
ExclusiveArch: %{golang_arches} %{gccgo_arches}
- godep
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang
ExclusiveArch: %{golang_arches}
- gomtree
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- gotun
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
ExclusiveArch: x86_64
- goverlay
ExclusiveArch: %{fpc_arches}
- gprbuild
ExclusiveArch: %{GPRbuild_arches} %{bootstrap_arch}
- gprolog
ExclusiveArch: x86_64 %{ix86} ppc alpha
- grafana
ExclusiveArch: %{grafana_arches}
- grafana-pcp
ExclusiveArch: %{grafanapcp_arches}
- gtk-sharp-beans
ExclusiveArch: %mono_arches
- gtk-sharp2
ExclusiveArch: %mono_arches
- gtk-sharp3
ExclusiveArch: %{mono_arches}
- gtkd
ExclusiveArch: %{ldc_arches}
- gudev-sharp
ExclusiveArch: %mono_arches
- guestfs-tools
ExclusiveArch: %{kernel_arches}
- hedgewars
ExclusiveArch: %{fpc_arches}
- hsakmt
ExclusiveArch: x86_64 aarch64
- hyena
ExclusiveArch: %{mono_arches}
- hyperscan
ExclusiveArch: x86_64
- hyperv-daemons
ExclusiveArch: i686 x86_64
- i3status-rs
ExclusiveArch: %{rust_arches}
- icaro
ExclusiveArch: %{ix86} x86_64 noarch
- imvirt
ExclusiveArch: %{ix86} x86_64 ia64
- indistarter
ExclusiveArch: %{fpc_arches}
- infinipath-psm
ExclusiveArch: x86_64
- intel-cmt-cat
ExclusiveArch: x86_64 i686 i586
ExclusiveArch: x86_64 i686 i586
- intel-gmmlib
ExclusiveArch: x86_64 i686
- intel-ipp-crypto-mb
ExclusiveArch: x86_64
ExclusiveArch: x86_64
- intel-ipsec-mb
ExclusiveArch: x86_64
ExclusiveArch: x86_64
- intel-mediasdk
ExclusiveArch: x86_64
- intel-undervolt
ExclusiveArch: i386 x86_64
- ioport
ExclusiveArch: %{ix86} x86_64
- ipmctl
ExclusiveArch: x86_64
- ipw2100-firmware
ExclusiveArch: noarch i386 x86_64
- ipw2200-firmware
ExclusiveArch: noarch i386 x86_64
- ispc
ExclusiveArch: x86_64 aarch64
- iucode-tool
ExclusiveArch: %{ix86} x86_64
- iyfct
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- java-1.8.0-openjdk-aarch32
ExclusiveArch: %{arm}
- jigawatts
ExclusiveArch: x86_64 %{arm} ppc64le aarch64 s390x
- kchmviewer
ExclusiveArch: %{qt5_qtwebengine_arches}
- keepass
ExclusiveArch: %{mono_arches}
- kernel
ExclusiveArch: x86_64 s390x %{arm} aarch64 ppc64le
ExclusiveArch: noarch i386 i686 x86_64 s390x %{arm} aarch64 ppc64le
- keyring-ima-signer
ExclusiveArch: %{rust_arches}
- kf5-akonadi-search
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-audiocd-kio
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-kalarmcal
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-kblog
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-kcalendarcore
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-kcalendarutils
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-kitinerary
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-ktnef
ExclusiveArch: x86_64 ppc64le aarch64 %{arm}
- kf5-libkdcraw
ExclusiveArch: x86_64 ppc64le %{arm}
- kicad
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le
- kiwix-desktop
ExclusiveArch: %{qt5_qtwebengine_arches}
- knot-resolver
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- knotes
ExclusiveArch: x86_64 %{arm}
- kompose
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 s390x
- kubernetes
ExclusiveArch: x86_64 aarch64 ppc64le s390x %{arm}
- lazarus
ExclusiveArch: %{fpc_arches}
- lazpaint
ExclusiveArch: %{fpc_arches}
- ldc
ExclusiveArch: %{ldc_arches}
- libbsr
ExclusiveArch: %{power64}
- libclc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{power64} s390x
- libcxl
ExclusiveArch: %{power64}
- libdfp
ExclusiveArch: ppc ppc64 ppc64le s390 s390x x86_64
- libdispatch
ExclusiveArch: x86_64 aarch64
- libguestfs
ExclusiveArch: %{kernel_arches}
- libica
ExclusiveArch: s390 s390x
- libipt
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
- libnxz
ExclusiveArch: ppc64le
- libocxl
ExclusiveArch: ppc64le
- libpmemobj-cpp
ExclusiveArch: x86_64 ppc64le
- libpsm2
ExclusiveArch: x86_64
- libquentier
ExclusiveArch: %{qt5_qtwebengine_arches}
- libretro-desmume2015
ExclusiveArch: i686 x86_64
- librtas
ExclusiveArch: %{power64}
- libservicelog
ExclusiveArch: ppc %{power64}
- libsmbios
ExclusiveArch: x86_64 %{ix86}
- libunwind
ExclusiveArch: %{arm} aarch64 hppa ia64 mips ppc %{power64} s390x %{ix86} x86_64
- libva-intel-hybrid-driver
ExclusiveArch: %{ix86} x86_64 ia64
- libvma
ExclusiveArch: x86_64 ppc64le ppc64 aarch64
- libvmi
ExclusiveArch: x86_64
- libvpd
ExclusiveArch: %{power64}
- libxsmm
ExclusiveArch: x86_64
- libzfcphbaapi
ExclusiveArch: s390 s390x
- lightdm
ExclusiveArch: x86_64 ppc64le
- log4net
ExclusiveArch: %mono_arches
- lrmi
ExclusiveArch: %{ix86}
- lsvpd
ExclusiveArch: %{power64}
- luajit
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64 s390x ppc64le
- luxcorerender
ExclusiveArch: x86_64
- mactel-boot
ExclusiveArch: x86_64
- manifest-tool
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- marked
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- matreshka
ExclusiveArch: %GPRbuild_arches
- maxima
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc sparcv9
ExclusiveArch: %{ix86} x86_64 ppc sparcv9
- mbpfan
ExclusiveArch: x86_64
- mcelog
ExclusiveArch: i686 x86_64
- mdevctl
ExclusiveArch: %{rust_arches}
- mediaconch
ExclusiveArch: %{qt5_qtwebengine_arches}
- mellowplayer
ExclusiveArch: %{qt5_qtwebengine_arches}
- memkind
ExclusiveArch: x86_64 ppc64 ppc64le s390x aarch64
- memtest86+
ExclusiveArch: %{ix86} x86_64
- mesos
ExclusiveArch: x86_64
- microcode_ctl
ExclusiveArch: %{ix86} x86_64
- micropython
ExclusiveArch: %{arm} %{ix86} x86_64
- mine_detector
ExclusiveArch: %{GPRbuild_arches}
- minetest
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- mingw-libidn2
ExclusiveArch: %{ix86} x86_64 %{arm}
- mingw-wine-gecko
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- mirrorlist-server
ExclusiveArch: %{rust_arches}
- mkbootdisk
ExclusiveArch: %{ix86} sparc sparc64 x86_64
- mod_mono
ExclusiveArch: %mono_arches
- module-build-service
ExclusiveArch: %{ix86} x86_64 noarch
- mokutil
ExclusiveArch: %{ix86} x86_64 aarch64 %{arm}
- mono
ExclusiveArch: %mono_arches
- mono-addins
ExclusiveArch: %mono_arches
- mono-basic
ExclusiveArch: %{mono_arches}
- mono-bouncycastle
ExclusiveArch: %mono_arches
- mono-cecil
ExclusiveArch: %mono_arches
- mono-cecil-flowanalysis
ExclusiveArch: %mono_arches
- mono-reflection
ExclusiveArch: %mono_arches
- mono-tools
ExclusiveArch: %mono_arches
- mono-zeroconf
ExclusiveArch: %mono_arches
- monobristol
ExclusiveArch: %{mono_arches}
- monodevelop
ExclusiveArch: %mono_arches
- monodevelop-debugger-gdb
ExclusiveArch: %{mono_arches}
- monosim
ExclusiveArch: %mono_arches
- mrrescue
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- msr-tools
ExclusiveArch: %{ix86} x86_64
- mustache-d
ExclusiveArch: %{ldc_arches}
- mysql-connector-net
ExclusiveArch: %{mono_arches}
- nant
ExclusiveArch: %mono_arches
- nativejit
ExclusiveArch: x86_64
- nbc
ExclusiveArch: %{fpc_arches}
- nbdkit
ExclusiveArch: x86_64
- ndesk-dbus
ExclusiveArch: %{mono_arches}
- ndesk-dbus-glib
ExclusiveArch: %{mono_arches}
- newsflash
ExclusiveArch: %{rust_arches}
- newtonsoft-json
ExclusiveArch: %{mono_arches}
- nispor
ExclusiveArch: %{rust_arches}
- nodejs
ExclusiveArch: %{nodejs_arches}
- nodejs-acorn-object-spread
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-backbone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bash-language-server
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-buble
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-colors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-generic-pool
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-linefix
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nodemon
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-packaging
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-replace-require-self
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-supervisor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-svgo
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tape
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-typescript
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-underscore
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- notify-sharp
ExclusiveArch: %{mono_arches}
- notify-sharp3
ExclusiveArch: %{mono_arches}
- npm-name-cli
ExclusiveArch: %{nodejs_arches} noarch
- nuget
ExclusiveArch: %{mono_arches}
- numatop
ExclusiveArch: x86_64 ppc64le
- nunit
ExclusiveArch: %{mono_arches}
- nunit2
ExclusiveArch: %{mono_arches}
- nvml
ExclusiveArch: x86_64 ppc64le
- nwchem
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le
- obs-service-rust2rpm
ExclusiveArch: %{rust_arches} noarch
- oci-kvm-hook
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- oci-seccomp-bpf-hook
ExclusiveArch: x86_64 %%{power64} aarch64 s390x armv7hl
- oci-umount
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x %{mips}
- oidn
ExclusiveArch: x86_64
- olpc-kbdshim
ExclusiveArch: %{ix86} %{arm}
- olpc-netutils
ExclusiveArch: %{ix86} %{arm}
- olpc-utils
ExclusiveArch: %{ix86} %{arm}
- onednn
ExclusiveArch: x86_64 aarch64 ppc64le
- onedrive
ExclusiveArch: %{ldc_arches}
- opae
ExclusiveArch: x86_64
- opal-prd
ExclusiveArch: ppc64le
- open-vm-tools
ExclusiveArch: x86_64
ExclusiveArch: %{ix86} x86_64 aarch64
- openblas
ExclusiveArch: %{openblas_arches}
- openjfx
ExclusiveArch: x86_64
- openjfx8
ExclusiveArch: x86_64
- openlibm
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 %{power64}
- openni
ExclusiveArch: %{ix86} x86_64 %{arm}
- openni-primesense
ExclusiveArch: %{ix86} x86_64 %{arm}
- openshadinglanguage
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- openssl-ibmca
ExclusiveArch: s390 s390x
- origin
ExclusiveArch: %{go_arches}
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- orion
ExclusiveArch: %{qt5_qtwebengine_arches}
- orthorobot
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- pacemaker
ExclusiveArch: aarch64 i686 ppc64le s390x x86_64 %{arm}
ExclusiveArch: aarch64 i686 ppc64le s390x x86_64
- paflib
ExclusiveArch: ppc %{power64}
- parsec
ExclusiveArch: %{rust_arches}
- parsec-tool
ExclusiveArch: %{rust_arches}
- pcc
ExclusiveArch: %{ix86} x86_64
- pcm
ExclusiveArch: %{ix86} x86_64
- pcmciautils
ExclusiveArch: %{ix86} x86_64 ia64 ppc ppc64 %{arm}
- pdbg
ExclusiveArch: ppc64le
- pdfmod
ExclusiveArch: %mono_arches
- perl-Dumbbench
ExclusiveArch: %{ix86} x86_64 noarch
- perl-Parse-DMIDecode
ExclusiveArch: %{ix86} x86_64 ia64 aarch64
- pesign
ExclusiveArch: %{ix86} x86_64 ia64 aarch64 %{arm}
- pesign-test-app
ExclusiveArch: x86_64
- pinta
ExclusiveArch: %mono_arches
- pioneer
ExclusiveArch: %{ix86} x86_64
- playonlinux
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- pmdk-convert
ExclusiveArch: x86_64
- pmemkv
ExclusiveArch: x86_64
- poppler-sharp
ExclusiveArch: %mono_arches
- popub
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- powerpc-utils
ExclusiveArch: ppc %{power64}
- ppc64-diag
ExclusiveArch: ppc %{power64}
- pveclib
ExclusiveArch: ppc %{power64}
- pvs-sbcl
ExclusiveArch: %{ix86} x86_64 ppc sparcv9
- pyqtwebengine
ExclusiveArch: %{qt5_qtwebengine_arches}
- python-cryptography
ExclusiveArch: %{rust_arches}
- python-etcd
ExclusiveArch: noarch %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- python-healpy
ExclusiveArch: aarch64 ppc64 ppc64le x86_64 s390x
- python-javabridge
ExclusiveArch: i686 x86_64
- python-openoffice
ExclusiveArch: noarch x86_64
- python-pymoc
ExclusiveArch: aarch64 ppc64 ppc64le x86_64 s390x
- python-rpi-gpio
ExclusiveArch: %{arm} aarch64
- python-setuptools-rust
ExclusiveArch: %{rust_arches}
- q4wine
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- qatzip
ExclusiveArch: x86_64
- qcint
ExclusiveArch: x86_64
- qclib
ExclusiveArch: s390 s390x
- qemu-sanity-check
ExclusiveArch: %{kernel_arches}
- qevercloud
ExclusiveArch: %{qt5_qtwebengine_arches}
- qmapshack
ExclusiveArch: %{qt5_qtwebengine_arches}
- qt4pas
ExclusiveArch: %{fpc_arches}
- qt5-qtwebengine
ExclusiveArch: %{qt5_qtwebengine_arches}
- quantum-espresso
ExclusiveArch: x86_64 %{ix86} aarch64 %{power64}
- quentier
ExclusiveArch: %{qt5_qtwebengine_arches}
- rear
ExclusiveArch: %ix86 x86_64 ppc ppc64 ppc64le ia64
- renderdoc
ExclusiveArch: x86_64
- reptyr
ExclusiveArch: %{ix86} x86_64 %{arm}
- rescene
ExclusiveArch: %{mono_arches}
- restsharp
ExclusiveArch: %{mono_arches}
- rhythmbox-alternative-toolbar
ExclusiveArch: %{ix86} %{arm} x86_64 ppc64 ppc64le
- rocm-runtime
ExclusiveArch: x86_64 aarch64
- rocminfo
ExclusiveArch: x86_64 aarch64
- rpg-cli
ExclusiveArch: %{rust_arches}
- rpm-ostree
ExclusiveArch: %{rust_arches}
- rr
ExclusiveArch: %{ix86} x86_64
- rssguard
ExclusiveArch: %{qt5_qtwebengine_arches}
- rubygem-childprocess
ExclusiveArch: %{ix86} x86_64 noarch
- runc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le %{mips} s390x
- rust
ExclusiveArch: %{rust_arches}
- rust-Inflector
ExclusiveArch: %{rust_arches}
- rust-ab_glyph
ExclusiveArch: %{rust_arches}
- rust-ab_glyph_rasterizer
ExclusiveArch: %{rust_arches}
- rust-abomonation
ExclusiveArch: %{rust_arches}
- rust-actix
ExclusiveArch: %{rust_arches}
- rust-actix-codec
ExclusiveArch: %{rust_arches}
- rust-actix-connect
ExclusiveArch: %{rust_arches}
- rust-actix-files
ExclusiveArch: %{rust_arches}
- rust-actix-http
ExclusiveArch: %{rust_arches}
- rust-actix-macros
ExclusiveArch: %{rust_arches}
- rust-actix-macros0.1
ExclusiveArch: %{rust_arches}
- rust-actix-router
ExclusiveArch: %{rust_arches}
- rust-actix-rt
ExclusiveArch: %{rust_arches}
- rust-actix-rt1
ExclusiveArch: %{rust_arches}
- rust-actix-server
ExclusiveArch: %{rust_arches}
- rust-actix-server-config
ExclusiveArch: %{rust_arches}
- rust-actix-service
ExclusiveArch: %{rust_arches}
- rust-actix-testing
ExclusiveArch: %{rust_arches}
- rust-actix-threadpool
ExclusiveArch: %{rust_arches}
- rust-actix-tls
ExclusiveArch: %{rust_arches}
- rust-actix-utils
ExclusiveArch: %{rust_arches}
- rust-actix-web
ExclusiveArch: %{rust_arches}
- rust-actix-web-codegen
ExclusiveArch: %{rust_arches}
- rust-actix0.10
ExclusiveArch: %{rust_arches}
- rust-actix_derive
ExclusiveArch: %{rust_arches}
- rust-actix_derive0.5
ExclusiveArch: %{rust_arches}
- rust-addr2line
ExclusiveArch: %{rust_arches}
- rust-adler
ExclusiveArch: %{rust_arches}
- rust-adler32
ExclusiveArch: %{rust_arches}
- rust-aead
ExclusiveArch: %{rust_arches}
- rust-aes
ExclusiveArch: %{rust_arches}
- rust-aes-gcm
ExclusiveArch: %{rust_arches}
- rust-aes-soft
ExclusiveArch: %{rust_arches}
- rust-afterburn
ExclusiveArch: %{rust_arches}
- rust-ahash
ExclusiveArch: %{rust_arches}
- rust-ahash0.4
ExclusiveArch: %{rust_arches}
- rust-aho-corasick
ExclusiveArch: %{rust_arches}
- rust-alacritty
ExclusiveArch: %{rust_arches}
- rust-alacritty_config_derive
ExclusiveArch: %{rust_arches}
- rust-alacritty_terminal
ExclusiveArch: %{rust_arches}
- rust-alga
ExclusiveArch: %{rust_arches}
- rust-alga_derive
ExclusiveArch: %{rust_arches}
- rust-alloc-no-stdlib
ExclusiveArch: %{rust_arches}
- rust-alloc-stdlib
ExclusiveArch: %{rust_arches}
- rust-alphanumeric-sort
ExclusiveArch: %{rust_arches}
- rust-alsa
ExclusiveArch: %{rust_arches}
- rust-alsa-sys
ExclusiveArch: %{rust_arches}
- rust-ambient-authority
ExclusiveArch: %{rust_arches}
- rust-ammonia
ExclusiveArch: %{rust_arches}
- rust-andrew
ExclusiveArch: %{rust_arches}
- rust-ansi_colours
ExclusiveArch: %{rust_arches}
- rust-ansi_term
ExclusiveArch: %{rust_arches}
- rust-ansi_term0.11
ExclusiveArch: %{rust_arches}
- rust-antidote
ExclusiveArch: %{rust_arches}
- rust-anyhow
ExclusiveArch: %{rust_arches}
- rust-anymap
ExclusiveArch: %{rust_arches}
- rust-aom-sys
ExclusiveArch: %{rust_arches}
- rust-app_dirs
ExclusiveArch: %{rust_arches}
- rust-approx
ExclusiveArch: %{rust_arches}
- rust-ar
ExclusiveArch: %{rust_arches}
- rust-arbitrary
ExclusiveArch: %{rust_arches}
- rust-arbitrary0.4
ExclusiveArch: %{rust_arches}
- rust-arc-swap
ExclusiveArch: %{rust_arches}
- rust-arg_enum_proc_macro
ExclusiveArch: %{rust_arches}
- rust-argh
ExclusiveArch: %{rust_arches}
- rust-argh_derive
ExclusiveArch: %{rust_arches}
- rust-argh_shared
ExclusiveArch: %{rust_arches}
- rust-argparse
ExclusiveArch: %{rust_arches}
- rust-array-init
ExclusiveArch: %{rust_arches}
- rust-arraydeque
ExclusiveArch: %{rust_arches}
- rust-arrayref
ExclusiveArch: %{rust_arches}
- rust-arrayvec
ExclusiveArch: %{rust_arches}
- rust-article_scraper
ExclusiveArch: %{rust_arches}
- rust-ascii
ExclusiveArch: %{rust_arches}
- rust-ascii-canvas
ExclusiveArch: %{rust_arches}
- rust-askalono
ExclusiveArch: %{rust_arches}
- rust-askalono-cli
ExclusiveArch: %{rust_arches}
- rust-askama
ExclusiveArch: %{rust_arches}
- rust-askama_derive
ExclusiveArch: %{rust_arches}
- rust-askama_escape
ExclusiveArch: %{rust_arches}
- rust-askama_shared
ExclusiveArch: %{rust_arches}
- rust-asn1
ExclusiveArch: %{rust_arches}
- rust-asn1_derive
ExclusiveArch: %{rust_arches}
- rust-assert-impl
ExclusiveArch: %{rust_arches}
- rust-assert-json-diff
ExclusiveArch: %{rust_arches}
- rust-assert_approx_eq
ExclusiveArch: %{rust_arches}
- rust-assert_cli
ExclusiveArch: %{rust_arches}
- rust-assert_cmd
ExclusiveArch: %{rust_arches}
- rust-assert_fs
ExclusiveArch: %{rust_arches}
- rust-assert_matches
ExclusiveArch: %{rust_arches}
- rust-assign
ExclusiveArch: %{rust_arches}
- rust-async-attributes
ExclusiveArch: %{rust_arches}
- rust-async-channel
ExclusiveArch: %{rust_arches}
- rust-async-compression
ExclusiveArch: %{rust_arches}
- rust-async-executor
ExclusiveArch: %{rust_arches}
- rust-async-global-executor
ExclusiveArch: %{rust_arches}
- rust-async-io
ExclusiveArch: %{rust_arches}
- rust-async-lock
ExclusiveArch: %{rust_arches}
- rust-async-mutex
ExclusiveArch: %{rust_arches}
- rust-async-process
ExclusiveArch: %{rust_arches}
- rust-async-std
ExclusiveArch: %{rust_arches}
- rust-async-stream
ExclusiveArch: %{rust_arches}
- rust-async-stream-impl
ExclusiveArch: %{rust_arches}
- rust-async-task
ExclusiveArch: %{rust_arches}
- rust-async-trait
ExclusiveArch: %{rust_arches}
- rust-asyncgit
ExclusiveArch: %{rust_arches}
- rust-atk
ExclusiveArch: %{rust_arches}
- rust-atk-sys
ExclusiveArch: %{rust_arches}
- rust-atom
ExclusiveArch: %{rust_arches}
- rust-atomic-waker
ExclusiveArch: %{rust_arches}
- rust-atomicwrites
ExclusiveArch: %{rust_arches}
- rust-attohttpc
ExclusiveArch: %{rust_arches}
- rust-atty
ExclusiveArch: %{rust_arches}
- rust-autocfg
ExclusiveArch: %{rust_arches}
- rust-av-metrics
ExclusiveArch: %{rust_arches}
- rust-average
ExclusiveArch: %{rust_arches}
- rust-awc
ExclusiveArch: %{rust_arches}
- rust-az
ExclusiveArch: %{rust_arches}
- rust-backtrace
ExclusiveArch: %{rust_arches}
- rust-backtrace-sys
ExclusiveArch: %{rust_arches}
- rust-base100
ExclusiveArch: %{rust_arches}
- rust-base64
ExclusiveArch: %{rust_arches}
- rust-base64-0.10
ExclusiveArch: %{rust_arches}
- rust-base64-0.11
ExclusiveArch: %{rust_arches}
- rust-base64_0.12
ExclusiveArch: %{rust_arches}
- rust-bat
ExclusiveArch: %{rust_arches}
- rust-battery
ExclusiveArch: %{rust_arches}
- rust-beef
ExclusiveArch: %{rust_arches}
- rust-below
ExclusiveArch: %{rust_arches}
- rust-below-common
ExclusiveArch: %{rust_arches}
- rust-below-config
ExclusiveArch: %{rust_arches}
- rust-below-dump
ExclusiveArch: %{rust_arches}
- rust-below-model
ExclusiveArch: %{rust_arches}
- rust-below-render
ExclusiveArch: %{rust_arches}
- rust-below-store
ExclusiveArch: %{rust_arches}
- rust-below-view
ExclusiveArch: %{rust_arches}
- rust-below_derive
ExclusiveArch: %{rust_arches}
- rust-bencher
ExclusiveArch: %{rust_arches}
- rust-better-panic
ExclusiveArch: %{rust_arches}
- rust-bincode
ExclusiveArch: %{rust_arches}
- rust-bincode0.8
ExclusiveArch: %{rust_arches}
- rust-bindgen
ExclusiveArch: %{rust_arches}
- rust-binfarce
ExclusiveArch: %{rust_arches}
- rust-biscuit
ExclusiveArch: %{rust_arches}
- rust-bit-set
ExclusiveArch: %{rust_arches}
- rust-bit-vec
ExclusiveArch: %{rust_arches}
- rust-bitfield
ExclusiveArch: %{rust_arches}
- rust-bitflags
ExclusiveArch: %{rust_arches}
- rust-bitmaps
ExclusiveArch: %{rust_arches}
- rust-bitreader
ExclusiveArch: %{rust_arches}
- rust-bitstream-io
ExclusiveArch: %{rust_arches}
- rust-bitvec
ExclusiveArch: %{rust_arches}
- rust-blake2
ExclusiveArch: %{rust_arches}
- rust-blobby
ExclusiveArch: %{rust_arches}
- rust-blobby0.1
ExclusiveArch: %{rust_arches}
- rust-block-buffer
ExclusiveArch: %{rust_arches}
- rust-block-buffer0.7
ExclusiveArch: %{rust_arches}
- rust-block-modes
ExclusiveArch: %{rust_arches}
- rust-block-padding
ExclusiveArch: %{rust_arches}
- rust-blocking
ExclusiveArch: %{rust_arches}
- rust-blsctl
ExclusiveArch: %{rust_arches}
- rust-bodhi
ExclusiveArch: %{rust_arches}
- rust-bodhi-cli
ExclusiveArch: %{rust_arches}
- rust-bootupd
ExclusiveArch: x86_64 aarch64
- rust-box_drawing
ExclusiveArch: %{rust_arches}
- rust-boxfnonce
ExclusiveArch: %{rust_arches}
- rust-brev
ExclusiveArch: %{rust_arches}
- rust-brotli
ExclusiveArch: %{rust_arches}
- rust-brotli-decompressor
ExclusiveArch: %{rust_arches}
- rust-brotli-sys
ExclusiveArch: %{rust_arches}
- rust-brotli2
ExclusiveArch: %{rust_arches}
- rust-bstr
ExclusiveArch: %{rust_arches}
- rust-buf-min
ExclusiveArch: %{rust_arches}
- rust-buf_redux
ExclusiveArch: %{rust_arches}
- rust-buffered-reader
ExclusiveArch: %{rust_arches}
- rust-bufsize
ExclusiveArch: %{rust_arches}
- rust-bufstream
ExclusiveArch: %{rust_arches}
- rust-bugreport
ExclusiveArch: %{rust_arches}
- rust-build-env
ExclusiveArch: %{rust_arches}
- rust-build_const
ExclusiveArch: %{rust_arches}
- rust-bumpalo
ExclusiveArch: %{rust_arches}
- rust-byte-tools
ExclusiveArch: %{rust_arches}
- rust-byte-unit
ExclusiveArch: %{rust_arches}
- rust-byte-unit3
ExclusiveArch: %{rust_arches}
- rust-bytecheck
ExclusiveArch: %{rust_arches}
- rust-bytecheck_derive
ExclusiveArch: %{rust_arches}
- rust-bytecount
ExclusiveArch: %{rust_arches}
- rust-bytelines
ExclusiveArch: %{rust_arches}
- rust-bytemuck
ExclusiveArch: %{rust_arches}
- rust-bytemuck_derive
ExclusiveArch: %{rust_arches}
- rust-byteorder
ExclusiveArch: %{rust_arches}
- rust-bytes
ExclusiveArch: %{rust_arches}
- rust-bytes0.4
ExclusiveArch: %{rust_arches}
- rust-bytes0.5
ExclusiveArch: %{rust_arches}
- rust-bytes0.6
ExclusiveArch: %{rust_arches}
- rust-bytesize
ExclusiveArch: %{rust_arches}
- rust-bytestring
ExclusiveArch: %{rust_arches}
- rust-bzip2
ExclusiveArch: %{rust_arches}
- rust-bzip2-sys
ExclusiveArch: %{rust_arches}
- rust-c_vec
ExclusiveArch: %{rust_arches}
- rust-cache-padded
ExclusiveArch: %{rust_arches}
- rust-cairo-rs
ExclusiveArch: %{rust_arches}
- rust-cairo-sys-rs
ExclusiveArch: %{rust_arches}
- rust-calloop
ExclusiveArch: %{rust_arches}
- rust-calloop0.6
ExclusiveArch: %{rust_arches}
- rust-camino
ExclusiveArch: %{rust_arches}
- rust-cap-primitives
ExclusiveArch: %{rust_arches}
- rust-cap-rand
ExclusiveArch: %{rust_arches}
- rust-cap-std
ExclusiveArch: %{rust_arches}
- rust-capnp
ExclusiveArch: %{rust_arches}
- rust-capnp-futures
ExclusiveArch: %{rust_arches}
- rust-capnp-rpc
ExclusiveArch: %{rust_arches}
- rust-caps
ExclusiveArch: %{rust_arches}
- rust-cargo
ExclusiveArch: %{rust_arches}
- rust-cargo-bloat
ExclusiveArch: %{rust_arches}
- rust-cargo-c
ExclusiveArch: %{rust_arches}
- rust-cargo-husky
ExclusiveArch: %{rust_arches}
- rust-cargo-insta
ExclusiveArch: %{rust_arches}
- rust-cargo-platform
ExclusiveArch: %{rust_arches}
- rust-cargo-readme
ExclusiveArch: %{rust_arches}
- rust-cargo_metadata
ExclusiveArch: %{rust_arches}
- rust-case
ExclusiveArch: %{rust_arches}
- rust-cassowary
ExclusiveArch: %{rust_arches}
- rust-cast
ExclusiveArch: %{rust_arches}
- rust-cbindgen
ExclusiveArch: %{rust_arches}
- rust-cc
ExclusiveArch: %{rust_arches}
- rust-cedarwood
ExclusiveArch: %{rust_arches}
- rust-cexpr
ExclusiveArch: %{rust_arches}
- rust-cfg-expr
ExclusiveArch: %{rust_arches}
- rust-cfg-if
ExclusiveArch: %{rust_arches}
- rust-cfg-if0.1
ExclusiveArch: %{rust_arches}
- rust-cgmath
ExclusiveArch: %{rust_arches}
- rust-cgroupfs
ExclusiveArch: %{rust_arches}
- rust-chainerror
ExclusiveArch: %{rust_arches}
- rust-charset
ExclusiveArch: %{rust_arches}
- rust-chbs
ExclusiveArch: %{rust_arches}
- rust-checked_int_cast
ExclusiveArch: %{rust_arches}
- rust-chlorine
ExclusiveArch: %{rust_arches}
- rust-choosier
ExclusiveArch: %{rust_arches}
- rust-chrono
ExclusiveArch: %{rust_arches}
- rust-chrono-humanize
ExclusiveArch: %{rust_arches}
- rust-chrono-tz
ExclusiveArch: %{rust_arches}
- rust-chunked_transfer
ExclusiveArch: %{rust_arches}
- rust-cipher
ExclusiveArch: %{rust_arches}
- rust-clang-ast
ExclusiveArch: %{rust_arches}
- rust-clang-sys
ExclusiveArch: %{rust_arches}
- rust-clap
ExclusiveArch: %{rust_arches}
- rust-clap2
ExclusiveArch: %{rust_arches}
- rust-clap_derive
ExclusiveArch: %{rust_arches}
- rust-claxon
ExclusiveArch: %{rust_arches}
- rust-clicolors-control
ExclusiveArch: %{rust_arches}
- rust-clipboard
ExclusiveArch: %{rust_arches}
- rust-cloudflare-zlib
ExclusiveArch: x86_64 aarch64
- rust-cloudflare-zlib-sys
ExclusiveArch: x86_64 aarch64
- rust-cmake
ExclusiveArch: %{rust_arches}
- rust-codespan-reporting
ExclusiveArch: %{rust_arches}
- rust-codicon
ExclusiveArch: %{rust_arches}
- rust-color-backtrace
ExclusiveArch: %{rust_arches}
- rust-color_quant
ExclusiveArch: %{rust_arches}
- rust-colored
ExclusiveArch: %{rust_arches}
- rust-colored1
ExclusiveArch: %{rust_arches}
- rust-colored_json
ExclusiveArch: %{rust_arches}
- rust-colorful
ExclusiveArch: %{rust_arches}
- rust-compiletest_rs
ExclusiveArch: %{rust_arches}
- rust-comrak
ExclusiveArch: %{rust_arches}
- rust-concurrent-queue
ExclusiveArch: %{rust_arches}
- rust-config
ExclusiveArch: %{rust_arches}
- rust-configparser
ExclusiveArch: %{rust_arches}
- rust-confy
ExclusiveArch: %{rust_arches}
- rust-console
ExclusiveArch: %{rust_arches}
- rust-console0.11
ExclusiveArch: %{rust_arches}
- rust-console0.12
ExclusiveArch: %{rust_arches}
- rust-console0.13
ExclusiveArch: %{rust_arches}
- rust-console0.9
ExclusiveArch: %{rust_arches}
- rust-console_error_panic_hook
ExclusiveArch: %{rust_arches}
- rust-const-cstr
ExclusiveArch: %{rust_arches}
- rust-const-random
ExclusiveArch: %{rust_arches}
- rust-const-random-macro
ExclusiveArch: %{rust_arches}
- rust-const_fn
ExclusiveArch: %{rust_arches}
- rust-constant_time_eq
ExclusiveArch: %{rust_arches}
- rust-content_inspector
ExclusiveArch: %{rust_arches}
- rust-conv
ExclusiveArch: %{rust_arches}
- rust-convert_case
ExclusiveArch: %{rust_arches}
- rust-cookie
ExclusiveArch: %{rust_arches}
- rust-cookie_store
ExclusiveArch: %{rust_arches}
- rust-copydeps
ExclusiveArch: %{rust_arches}
- rust-copyless
ExclusiveArch: %{rust_arches}
- rust-copypasta
ExclusiveArch: %{rust_arches}
- rust-cordic
ExclusiveArch: %{rust_arches}
- rust-coreos-installer
ExclusiveArch: %{rust_arches}
- rust-counted-array
ExclusiveArch: %{rust_arches}
- rust-cpal
ExclusiveArch: %{rust_arches}
- rust-cpio
ExclusiveArch: %{rust_arches}
- rust-cpp_demangle
ExclusiveArch: %{rust_arches}
- rust-cpufeatures
ExclusiveArch: x86_64 aarch64
- rust-cpuid-bool
ExclusiveArch: %{rust_arches}
- rust-cpython
ExclusiveArch: %{rust_arches}
- rust-cranelift-bforest
ExclusiveArch: %{rust_arches}
- rust-cranelift-codegen
ExclusiveArch: %{rust_arches}
- rust-cranelift-codegen-meta
ExclusiveArch: %{rust_arches}
- rust-cranelift-codegen-shared
ExclusiveArch: %{rust_arches}
- rust-cranelift-entity
ExclusiveArch: %{rust_arches}
- rust-cranelift-frontend
ExclusiveArch: %{rust_arches}
- rust-cranelift-native
ExclusiveArch: %{rust_arches}
- rust-cranelift-wasm
ExclusiveArch: %{rust_arches}
- rust-crates-io
ExclusiveArch: %{rust_arches}
- rust-crc
ExclusiveArch: %{rust_arches}
- rust-crc-any
ExclusiveArch: %{rust_arches}
- rust-crc-core
ExclusiveArch: %{rust_arches}
- rust-crc32fast
ExclusiveArch: %{rust_arches}
- rust-criterion
ExclusiveArch: %{rust_arches}
- rust-criterion-plot
ExclusiveArch: %{rust_arches}
- rust-crossbeam
ExclusiveArch: %{rust_arches}
- rust-crossbeam-channel
ExclusiveArch: %{rust_arches}
- rust-crossbeam-channel0.4
ExclusiveArch: %{rust_arches}
- rust-crossbeam-deque
ExclusiveArch: %{rust_arches}
- rust-crossbeam-deque0.7
ExclusiveArch: %{rust_arches}
- rust-crossbeam-epoch
ExclusiveArch: %{rust_arches}
- rust-crossbeam-epoch0.8
ExclusiveArch: %{rust_arches}
- rust-crossbeam-queue
ExclusiveArch: %{rust_arches}
- rust-crossbeam-queue0.2
ExclusiveArch: %{rust_arches}
- rust-crossbeam-utils
ExclusiveArch: %{rust_arches}
- rust-crossbeam-utils0.7
ExclusiveArch: %{rust_arches}
- rust-crossbeam0.7
ExclusiveArch: %{rust_arches}
- rust-crossfont
ExclusiveArch: %{rust_arches}
- rust-crossterm
ExclusiveArch: %{rust_arches}
- rust-crossterm0.17
ExclusiveArch: %{rust_arches}
- rust-crossterm0.18
ExclusiveArch: %{rust_arches}
- rust-crosstermion
ExclusiveArch: %{rust_arches}
- rust-crunchy
ExclusiveArch: %{rust_arches}
- rust-crypto-hash
ExclusiveArch: %{rust_arches}
- rust-crypto-mac
ExclusiveArch: %{rust_arches}
- rust-crypto-mac0.8
ExclusiveArch: %{rust_arches}
- rust-cryptoki
ExclusiveArch: %{rust_arches}
- rust-cryptoki-sys
ExclusiveArch: %{rust_arches}
- rust-cryptovec
ExclusiveArch: %{rust_arches}
- rust-cssparser
ExclusiveArch: %{rust_arches}
- rust-cssparser-macros
ExclusiveArch: %{rust_arches}
- rust-cstr-argument
ExclusiveArch: %{rust_arches}
- rust-csv
ExclusiveArch: %{rust_arches}
- rust-csv-core
ExclusiveArch: %{rust_arches}
- rust-ct-logs
ExclusiveArch: %{rust_arches}
- rust-ctor
ExclusiveArch: %{rust_arches}
- rust-ctr
ExclusiveArch: %{rust_arches}
- rust-ctrlc
ExclusiveArch: %{rust_arches}
- rust-cty
ExclusiveArch: %{rust_arches}
- rust-curl
ExclusiveArch: %{rust_arches}
- rust-curl-sys
ExclusiveArch: %{rust_arches}
- rust-cursive
ExclusiveArch: %{rust_arches}
- rust-cursive_buffered_backend
ExclusiveArch: %{rust_arches}
- rust-cursive_core
ExclusiveArch: %{rust_arches}
- rust-custom_derive
ExclusiveArch: %{rust_arches}
- rust-cxx
ExclusiveArch: %{rust_arches}
- rust-cxx-build
ExclusiveArch: %{rust_arches}
- rust-cxx-gen
ExclusiveArch: %{rust_arches}
- rust-cxxbridge-flags
ExclusiveArch: %{rust_arches}
- rust-cxxbridge-macro
ExclusiveArch: %{rust_arches}
- rust-darling
ExclusiveArch: %{rust_arches}
- rust-darling_core
ExclusiveArch: %{rust_arches}
- rust-darling_macro
ExclusiveArch: %{rust_arches}
- rust-dashmap
ExclusiveArch: %{rust_arches}
- rust-data-encoding
ExclusiveArch: %{rust_arches}
- rust-data-url
ExclusiveArch: %{rust_arches}
- rust-datetime
ExclusiveArch: %{rust_arches}
- rust-dav1d-sys
ExclusiveArch: %{rust_arches}
- rust-dbus
ExclusiveArch: %{rust_arches}
- rust-dbus-codegen
ExclusiveArch: %{rust_arches}
- rust-dbus-crossroads
ExclusiveArch: %{rust_arches}
- rust-dbus-tokio
ExclusiveArch: %{rust_arches}
- rust-dbus-tree
ExclusiveArch: %{rust_arches}
- rust-dbus0.8
ExclusiveArch: %{rust_arches}
- rust-debug-helper
ExclusiveArch: %{rust_arches}
- rust-decimal
ExclusiveArch: %{rust_arches}
- rust-defer-drop
ExclusiveArch: %{rust_arches}
- rust-deflate
ExclusiveArch: %{rust_arches}
- rust-defmac
ExclusiveArch: %{rust_arches}
- rust-delta_e
ExclusiveArch: %{rust_arches}
- rust-derivative
ExclusiveArch: %{rust_arches}
- rust-derive-new
ExclusiveArch: %{rust_arches}
- rust-derive_arbitrary
ExclusiveArch: %{rust_arches}
- rust-derive_arbitrary0.4
ExclusiveArch: %{rust_arches}
- rust-derive_builder
ExclusiveArch: %{rust_arches}
- rust-derive_builder0.9
ExclusiveArch: %{rust_arches}
- rust-derive_builder_core
ExclusiveArch: %{rust_arches}
- rust-derive_builder_core0.9
ExclusiveArch: %{rust_arches}
- rust-derive_builder_macro
ExclusiveArch: %{rust_arches}
- rust-derive_more
ExclusiveArch: %{rust_arches}
- rust-des
ExclusiveArch: %{rust_arches}
- rust-desed
ExclusiveArch: %{rust_arches}
- rust-deunicode
ExclusiveArch: %{rust_arches}
- rust-devicemapper
ExclusiveArch: %{rust_arches}
- rust-dialoguer
ExclusiveArch: %{rust_arches}
- rust-diesel
ExclusiveArch: %{rust_arches}
- rust-diesel_derives
ExclusiveArch: %{rust_arches}
- rust-diesel_migrations
ExclusiveArch: %{rust_arches}
- rust-diff
ExclusiveArch: %{rust_arches}
- rust-difference
ExclusiveArch: %{rust_arches}
- rust-diffus
ExclusiveArch: %{rust_arches}
- rust-diffus-derive
ExclusiveArch: %{rust_arches}
- rust-digest
ExclusiveArch: %{rust_arches}
- rust-digest0.8
ExclusiveArch: %{rust_arches}
- rust-directories
ExclusiveArch: %{rust_arches}
- rust-directories-next
ExclusiveArch: %{rust_arches}
- rust-dirs
ExclusiveArch: %{rust_arches}
- rust-dirs-next
ExclusiveArch: %{rust_arches}
- rust-dirs-sys
ExclusiveArch: %{rust_arches}
- rust-dirs-sys-next
ExclusiveArch: %{rust_arches}
- rust-dirs2
ExclusiveArch: %{rust_arches}
- rust-diskonaut
ExclusiveArch: %{rust_arches}
- rust-dissimilar
ExclusiveArch: %{rust_arches}
- rust-dlib
ExclusiveArch: %{rust_arches}
- rust-dlib0.4
ExclusiveArch: %{rust_arches}
- rust-dlv-list
ExclusiveArch: %{rust_arches}
- rust-dns-lookup
ExclusiveArch: %{rust_arches}
- rust-dns-parser
ExclusiveArch: %{rust_arches}
- rust-doc-comment
ExclusiveArch: %{rust_arches}
- rust-docmatic
ExclusiveArch: %{rust_arches}
- rust-docopt
ExclusiveArch: %{rust_arches}
- rust-dotenv
ExclusiveArch: %{rust_arches}
- rust-downcast-rs
ExclusiveArch: %{rust_arches}
- rust-drg
ExclusiveArch: %{rust_arches}
- rust-dtoa
ExclusiveArch: %{rust_arches}
- rust-dtoa-short
ExclusiveArch: %{rust_arches}
- rust-dua-cli
ExclusiveArch: %{rust_arches}
- rust-duct
ExclusiveArch: %{rust_arches}
- rust-dummy
ExclusiveArch: %{rust_arches}
- rust-dunce
ExclusiveArch: %{rust_arches}
- rust-dutree
ExclusiveArch: %{rust_arches}
- rust-dyn-clone
ExclusiveArch: %{rust_arches}
- rust-easy-cast
ExclusiveArch: %{rust_arches}
- rust-easy-parallel
ExclusiveArch: %{rust_arches}
- rust-edit
ExclusiveArch: %{rust_arches}
- rust-edit-distance
ExclusiveArch: %{rust_arches}
- rust-either
ExclusiveArch: %{rust_arches}
- rust-elasticlunr-rs
ExclusiveArch: %{rust_arches}
- rust-elfcat
ExclusiveArch: %{rust_arches}
- rust-ena
ExclusiveArch: %{rust_arches}
- rust-encode_unicode
ExclusiveArch: %{rust_arches}
- rust-encoding
ExclusiveArch: %{rust_arches}
- rust-encoding-index-japanese
ExclusiveArch: %{rust_arches}
- rust-encoding-index-korean
ExclusiveArch: %{rust_arches}
- rust-encoding-index-simpchinese
ExclusiveArch: %{rust_arches}
- rust-encoding-index-singlebyte
ExclusiveArch: %{rust_arches}
- rust-encoding-index-tradchinese
ExclusiveArch: %{rust_arches}
- rust-encoding_index_tests
ExclusiveArch: %{rust_arches}
- rust-encoding_rs
ExclusiveArch: %{rust_arches}
- rust-encoding_rs_io
ExclusiveArch: %{rust_arches}
- rust-endian-type
ExclusiveArch: %{rust_arches}
- rust-entities
ExclusiveArch: %{rust_arches}
- rust-enum-as-inner
ExclusiveArch: %{rust_arches}
- rust-enum-iterator
ExclusiveArch: %{rust_arches}
- rust-enum-iterator-derive
ExclusiveArch: %{rust_arches}
- rust-enum-map
ExclusiveArch: %{rust_arches}
- rust-enum-map-derive
ExclusiveArch: %{rust_arches}
- rust-enum-repr
ExclusiveArch: %{rust_arches}
- rust-enum_primitive
ExclusiveArch: %{rust_arches}
- rust-enumflags2
ExclusiveArch: %{rust_arches}
- rust-enumflags2_derive
ExclusiveArch: %{rust_arches}
- rust-enumset
ExclusiveArch: %{rust_arches}
- rust-enumset_derive
ExclusiveArch: %{rust_arches}
- rust-env_logger
ExclusiveArch: %{rust_arches}
- rust-env_logger0.4
ExclusiveArch: %{rust_arches}
- rust-env_logger0.5
ExclusiveArch: %{rust_arches}
- rust-env_logger0.6
ExclusiveArch: %{rust_arches}
- rust-env_logger0.7
ExclusiveArch: %{rust_arches}
- rust-environment
ExclusiveArch: %{rust_arches}
- rust-envsubst
ExclusiveArch: %{rust_arches}
- rust-epoll
ExclusiveArch: %{rust_arches}
- rust-erased-serde
ExclusiveArch: %{rust_arches}
- rust-err-derive
ExclusiveArch: %{rust_arches}
- rust-errln
ExclusiveArch: %{rust_arches}
- rust-errno
ExclusiveArch: %{rust_arches}
- rust-error-chain
ExclusiveArch: %{rust_arches}
- rust-escaper
ExclusiveArch: %{rust_arches}
- rust-escargot
ExclusiveArch: %{rust_arches}
- rust-euclid
ExclusiveArch: %{rust_arches}
- rust-event-listener
ExclusiveArch: %{rust_arches}
- rust-exa
ExclusiveArch: %{rust_arches}
- rust-executable-path
ExclusiveArch: %{rust_arches}
- rust-expat-sys
ExclusiveArch: %{rust_arches}
- rust-extend
ExclusiveArch: %{rust_arches}
- rust-extprim
ExclusiveArch: %{rust_arches}
- rust-extprim_literals_macros
ExclusiveArch: %{rust_arches}
- rust-fail
ExclusiveArch: %{rust_arches}
- rust-failure
ExclusiveArch: %{rust_arches}
- rust-failure-tools
ExclusiveArch: %{rust_arches}
- rust-failure_derive
ExclusiveArch: %{rust_arches}
- rust-fake
ExclusiveArch: %{rust_arches}
- rust-fake-simd
ExclusiveArch: %{rust_arches}
- rust-fake_clock
ExclusiveArch: %{rust_arches}
- rust-fallible-iterator
ExclusiveArch: %{rust_arches}
- rust-fallible-streaming-iterator
ExclusiveArch: %{rust_arches}
- rust-fallible_collections
ExclusiveArch: %{rust_arches}
- rust-fancy-regex
ExclusiveArch: %{rust_arches}
- rust-fastrand
ExclusiveArch: %{rust_arches}
- rust-fb_procfs
ExclusiveArch: %{rust_arches}
- rust-fbthrift_codegen_includer_proc_macro
ExclusiveArch: %{rust_arches}
- rust-fd-find
ExclusiveArch: %{rust_arches}
- rust-fd-lock
ExclusiveArch: %{rust_arches}
- rust-fdlimit
ExclusiveArch: %{rust_arches}
- rust-fedora
ExclusiveArch: %{rust_arches}
- rust-fedora-coreos-pinger
ExclusiveArch: %{rust_arches}
- rust-fedora-update-feedback
ExclusiveArch: %{rust_arches}
- rust-feed-rs
ExclusiveArch: %{rust_arches}
- rust-feedbin_api
ExclusiveArch: %{rust_arches}
- rust-feedly_api
ExclusiveArch: %{rust_arches}
- rust-femme
ExclusiveArch: %{rust_arches}
- rust-fern
ExclusiveArch: %{rust_arches}
- rust-fever_api
ExclusiveArch: %{rust_arches}
- rust-ffsend
ExclusiveArch: %{rust_arches}
- rust-ffsend-api
ExclusiveArch: %{rust_arches}
- rust-field-offset
ExclusiveArch: %{rust_arches}
- rust-file-per-thread-logger
ExclusiveArch: %{rust_arches}
- rust-filedescriptor
ExclusiveArch: %{rust_arches}
- rust-filesize
ExclusiveArch: %{rust_arches}
- rust-filetime
ExclusiveArch: %{rust_arches}
- rust-filetreelist
ExclusiveArch: %{rust_arches}
- rust-findshlibs
ExclusiveArch: %{rust_arches}
- rust-fixed
ExclusiveArch: %{rust_arches}
- rust-fixedbitset
ExclusiveArch: %{rust_arches}
- rust-flame
ExclusiveArch: %{rust_arches}
- rust-flate2
ExclusiveArch: %{rust_arches}
- rust-float-cmp
ExclusiveArch: %{rust_arches}
- rust-float-cmp0.6
ExclusiveArch: %{rust_arches}
- rust-float-ord
ExclusiveArch: %{rust_arches}
- rust-flume
ExclusiveArch: %{rust_arches}
- rust-fn-error-context
ExclusiveArch: %{rust_arches}
- rust-fnv
ExclusiveArch: %{rust_arches}
- rust-font-kit
ExclusiveArch: %{rust_arches}
- rust-foreign-types
ExclusiveArch: %{rust_arches}
- rust-foreign-types-macros
ExclusiveArch: %{rust_arches}
- rust-foreign-types-shared
ExclusiveArch: %{rust_arches}
- rust-foreign-types-shared0.1
ExclusiveArch: %{rust_arches}
- rust-foreign-types0.3
ExclusiveArch: %{rust_arches}
- rust-form_urlencoded
ExclusiveArch: %{rust_arches}
- rust-fragile
ExclusiveArch: %{rust_arches}
- rust-freetype
ExclusiveArch: %{rust_arches}
- rust-freetype-rs
ExclusiveArch: %{rust_arches}
- rust-freetype-sys
ExclusiveArch: %{rust_arches}
- rust-fs-set-times
ExclusiveArch: %{rust_arches}
- rust-fs2
ExclusiveArch: %{rust_arches}
- rust-fs_extra
ExclusiveArch: %{rust_arches}
- rust-funty
ExclusiveArch: %{rust_arches}
- rust-fuse
ExclusiveArch: %{rust_arches}
- rust-futf
ExclusiveArch: %{rust_arches}
- rust-futures
ExclusiveArch: %{rust_arches}
- rust-futures-channel
ExclusiveArch: %{rust_arches}
- rust-futures-core
ExclusiveArch: %{rust_arches}
- rust-futures-cpupool
ExclusiveArch: %{rust_arches}
- rust-futures-executor
ExclusiveArch: %{rust_arches}
- rust-futures-io
ExclusiveArch: %{rust_arches}
- rust-futures-lite
ExclusiveArch: %{rust_arches}
- rust-futures-macro
ExclusiveArch: %{rust_arches}
- rust-futures-sink
ExclusiveArch: %{rust_arches}
- rust-futures-task
ExclusiveArch: %{rust_arches}
- rust-futures-test
ExclusiveArch: %{rust_arches}
- rust-futures-timer
ExclusiveArch: %{rust_arches}
- rust-futures-util
ExclusiveArch: %{rust_arches}
- rust-futures0.1
ExclusiveArch: %{rust_arches}
- rust-fuzzy-matcher
ExclusiveArch: %{rust_arches}
- rust-fxhash
ExclusiveArch: %{rust_arches}
- rust-gcsf
ExclusiveArch: %{rust_arches}
- rust-gdk
ExclusiveArch: %{rust_arches}
- rust-gdk-pixbuf
ExclusiveArch: %{rust_arches}
- rust-gdk-pixbuf-sys
ExclusiveArch: %{rust_arches}
- rust-gdk-sys
ExclusiveArch: %{rust_arches}
- rust-gdk4
ExclusiveArch: %{rust_arches}
- rust-gdk4-sys
ExclusiveArch: %{rust_arches}
- rust-generic-array
ExclusiveArch: %{rust_arches}
- rust-generic-array0.12
ExclusiveArch: %{rust_arches}
- rust-genmesh
ExclusiveArch: %{rust_arches}
- rust-getch
ExclusiveArch: %{rust_arches}
- rust-gethostname
ExclusiveArch: %{rust_arches}
- rust-getopts
ExclusiveArch: %{rust_arches}
- rust-getrandom
ExclusiveArch: %{rust_arches}
- rust-getrandom0.1
ExclusiveArch: %{rust_arches}
- rust-getset
ExclusiveArch: %{rust_arches}
- rust-gettext-rs
ExclusiveArch: %{rust_arches}
- rust-gettext-sys
ExclusiveArch: %{rust_arches}
- rust-ghash
ExclusiveArch: %{rust_arches}
- rust-ghost
ExclusiveArch: %{rust_arches}
- rust-gif
ExclusiveArch: %{rust_arches}
- rust-gimli
ExclusiveArch: %{rust_arches}
- rust-gio
ExclusiveArch: %{rust_arches}
- rust-gio-sys
ExclusiveArch: %{rust_arches}
- rust-gir-format-check
ExclusiveArch: %{rust_arches}
- rust-git-delta
ExclusiveArch: %{rust_arches}
- rust-git-version
ExclusiveArch: %{rust_arches}
- rust-git-version-macro
ExclusiveArch: %{rust_arches}
- rust-git2
ExclusiveArch: %{rust_arches}
- rust-git2-curl
ExclusiveArch: %{rust_arches}
- rust-gitui
ExclusiveArch: %{rust_arches}
- rust-gl_generator
ExclusiveArch: %{rust_arches}
- rust-glam
ExclusiveArch: %{rust_arches}
- rust-glib
ExclusiveArch: %{rust_arches}
- rust-glib-macros
ExclusiveArch: %{rust_arches}
- rust-glib-sys
ExclusiveArch: %{rust_arches}
- rust-glob
ExclusiveArch: %{rust_arches}
- rust-globset
ExclusiveArch: %{rust_arches}
- rust-globwalk
ExclusiveArch: %{rust_arches}
- rust-glutin
ExclusiveArch: %{rust_arches}
- rust-glutin_egl_sys
ExclusiveArch: %{rust_arches}
- rust-glutin_glx_sys
ExclusiveArch: %{rust_arches}
- rust-gobject-sys
ExclusiveArch: %{rust_arches}
- rust-goblin
ExclusiveArch: %{rust_arches}
- rust-google-drive3-fork
ExclusiveArch: %{rust_arches}
- rust-gptman
ExclusiveArch: %{rust_arches}
- rust-graphene-rs
ExclusiveArch: %{rust_arches}
- rust-graphene-sys
ExclusiveArch: %{rust_arches}
- rust-grep
ExclusiveArch: %{rust_arches}
- rust-grep-cli
ExclusiveArch: %{rust_arches}
- rust-grep-matcher
ExclusiveArch: %{rust_arches}
- rust-grep-pcre2
ExclusiveArch: %{rust_arches}
- rust-grep-printer
ExclusiveArch: %{rust_arches}
- rust-grep-regex
ExclusiveArch: %{rust_arches}
- rust-grep-searcher
ExclusiveArch: %{rust_arches}
- rust-groupable
ExclusiveArch: %{rust_arches}
- rust-gsk4
ExclusiveArch: %{rust_arches}
- rust-gsk4-sys
ExclusiveArch: %{rust_arches}
- rust-gstreamer
ExclusiveArch: %{rust_arches}
- rust-gstreamer-audio
ExclusiveArch: %{rust_arches}
- rust-gstreamer-audio-sys
ExclusiveArch: %{rust_arches}
- rust-gstreamer-base
ExclusiveArch: %{rust_arches}
- rust-gstreamer-base-sys
ExclusiveArch: %{rust_arches}
- rust-gstreamer-editing-services
ExclusiveArch: %{rust_arches}
- rust-gstreamer-editing-services-sys
ExclusiveArch: %{rust_arches}
- rust-gstreamer-pbutils
ExclusiveArch: %{rust_arches}
- rust-gstreamer-pbutils-sys
ExclusiveArch: %{rust_arches}
- rust-gstreamer-player
ExclusiveArch: %{rust_arches}
- rust-gstreamer-player-sys
ExclusiveArch: %{rust_arches}
- rust-gstreamer-sys
ExclusiveArch: %{rust_arches}
- rust-gstreamer-video
ExclusiveArch: %{rust_arches}
- rust-gstreamer-video-sys
ExclusiveArch: %{rust_arches}
- rust-gtk
ExclusiveArch: %{rust_arches}
- rust-gtk-macros
ExclusiveArch: %{rust_arches}
- rust-gtk-rs-lgpl-docs
ExclusiveArch: %{rust_arches}
- rust-gtk-sys
ExclusiveArch: %{rust_arches}
- rust-gtk3-macros
ExclusiveArch: %{rust_arches}
- rust-gtk4
ExclusiveArch: %{rust_arches}
- rust-gtk4-macros
ExclusiveArch: %{rust_arches}
- rust-gtk4-sys
ExclusiveArch: %{rust_arches}
- rust-gzip-header
ExclusiveArch: %{rust_arches}
- rust-h2
ExclusiveArch: %{rust_arches}
- rust-h2_0.2
ExclusiveArch: %{rust_arches}
- rust-half
ExclusiveArch: %{rust_arches}
- rust-hamcrest
ExclusiveArch: %{rust_arches}
- rust-hamcrest2
ExclusiveArch: %{rust_arches}
- rust-handlebars
ExclusiveArch: %{rust_arches}
- rust-hashbrown
ExclusiveArch: %{rust_arches}
- rust-hashlink
ExclusiveArch: %{rust_arches}
- rust-headers
ExclusiveArch: %{rust_arches}
- rust-headers-core
ExclusiveArch: %{rust_arches}
- rust-headers-derive
ExclusiveArch: %{rust_arches}
- rust-heapsize
ExclusiveArch: %{rust_arches}
- rust-heatseeker
ExclusiveArch: %{rust_arches}
- rust-heck
ExclusiveArch: %{rust_arches}
- rust-hex
ExclusiveArch: %{rust_arches}
- rust-hex-literal
ExclusiveArch: %{rust_arches}
- rust-hex-literal-impl
ExclusiveArch: %{rust_arches}
- rust-hex-literal0.2
ExclusiveArch: %{rust_arches}
- rust-hexyl
ExclusiveArch: %{rust_arches}
- rust-hkdf
ExclusiveArch: %{rust_arches}
- rust-hmac
ExclusiveArch: %{rust_arches}
- rust-home
ExclusiveArch: %{rust_arches}
- rust-horrorshow
ExclusiveArch: %{rust_arches}
- rust-hostname
ExclusiveArch: %{rust_arches}
- rust-hostname-validator
ExclusiveArch: %{rust_arches}
- rust-hound
ExclusiveArch: %{rust_arches}
- rust-html2pango
ExclusiveArch: %{rust_arches}
- rust-html5ever
ExclusiveArch: %{rust_arches}
- rust-http
ExclusiveArch: %{rust_arches}
- rust-http-body
ExclusiveArch: %{rust_arches}
- rust-http-body0.3
ExclusiveArch: %{rust_arches}
- rust-http0.1
ExclusiveArch: %{rust_arches}
- rust-httparse
ExclusiveArch: %{rust_arches}
- rust-httpdate
ExclusiveArch: %{rust_arches}
- rust-human-sort
ExclusiveArch: %{rust_arches}
- rust-humansize
ExclusiveArch: %{rust_arches}
- rust-humantime
ExclusiveArch: %{rust_arches}
- rust-humantime-serde
ExclusiveArch: %{rust_arches}
- rust-humantime1
ExclusiveArch: %{rust_arches}
- rust-hyper
ExclusiveArch: %{rust_arches}
- rust-hyper-native-tls
ExclusiveArch: %{rust_arches}
- rust-hyper-rustls
ExclusiveArch: %{rust_arches}
- rust-hyper-staticfile
ExclusiveArch: %{rust_arches}
- rust-hyper-tls
ExclusiveArch: %{rust_arches}
- rust-hyper-tls0.4
ExclusiveArch: %{rust_arches}
- rust-hyper0.10
ExclusiveArch: %{rust_arches}
- rust-hyper0.13
ExclusiveArch: %{rust_arches}
- rust-hyperfine
ExclusiveArch: %{rust_arches}
- rust-i3ipc
ExclusiveArch: %{rust_arches}
- rust-id_tree
ExclusiveArch: %{rust_arches}
- rust-ident_case
ExclusiveArch: %{rust_arches}
- rust-idna
ExclusiveArch: %{rust_arches}
- rust-idna0.1
ExclusiveArch: %{rust_arches}
- rust-ignore
ExclusiveArch: %{rust_arches}
- rust-im-rc
ExclusiveArch: %{rust_arches}
- rust-image
ExclusiveArch: %{rust_arches}
- rust-image-roll
ExclusiveArch: %{rust_arches}
- rust-imgref
ExclusiveArch: %{rust_arches}
- rust-imgui
ExclusiveArch: %{rust_arches}
- rust-imgui-sys
ExclusiveArch: %{rust_arches}
- rust-imgui-winit-support
ExclusiveArch: %{rust_arches}
- rust-indexmap
ExclusiveArch: %{rust_arches}
- rust-indicatif
ExclusiveArch: %{rust_arches}
- rust-indoc
ExclusiveArch: %{rust_arches}
- rust-inflate
ExclusiveArch: %{rust_arches}
- rust-inotify
ExclusiveArch: %{rust_arches}
- rust-inotify-sys
ExclusiveArch: %{rust_arches}
- rust-input_buffer
ExclusiveArch: %{rust_arches}
- rust-insta
ExclusiveArch: %{rust_arches}
- rust-instant
ExclusiveArch: %{rust_arches}
- rust-interpolate_name
ExclusiveArch: %{rust_arches}
- rust-intervaltree
ExclusiveArch: %{rust_arches}
- rust-invalidstring
ExclusiveArch: %{rust_arches}
- rust-inventory
ExclusiveArch: %{rust_arches}
- rust-inventory-impl
ExclusiveArch: %{rust_arches}
- rust-io-lifetimes
ExclusiveArch: %{rust_arches}
- rust-ioctl-rs
ExclusiveArch: %{rust_arches}
- rust-iocuddle
ExclusiveArch: %{rust_arches}
- rust-iovec
ExclusiveArch: %{rust_arches}
- rust-ipnet
ExclusiveArch: %{rust_arches}
- rust-ipnetwork
ExclusiveArch: %{rust_arches}
- rust-iron
ExclusiveArch: %{rust_arches}
- rust-isahc
ExclusiveArch: %{rust_arches}
- rust-iso8601
ExclusiveArch: %{rust_arches}
- rust-iter-read
ExclusiveArch: %{rust_arches}
- rust-itertools
ExclusiveArch: %{rust_arches}
- rust-itertools-num
ExclusiveArch: %{rust_arches}
- rust-itertools0.8
ExclusiveArch: %{rust_arches}
- rust-itertools0.9
ExclusiveArch: %{rust_arches}
- rust-itoa
ExclusiveArch: %{rust_arches}
- rust-ivf
ExclusiveArch: %{rust_arches}
- rust-javascriptcore-rs
ExclusiveArch: %{rust_arches}
- rust-javascriptcore-rs-sys
ExclusiveArch: %{rust_arches}
- rust-jetscii
ExclusiveArch: %{rust_arches}
- rust-jieba-rs
ExclusiveArch: %{rust_arches}
- rust-jobserver
ExclusiveArch: %{rust_arches}
- rust-jpeg-decoder
ExclusiveArch: %{rust_arches}
- rust-jql
ExclusiveArch: %{rust_arches}
- rust-js-sys
ExclusiveArch: %{rust_arches}
- rust-js_int
ExclusiveArch: %{rust_arches}
- rust-json
ExclusiveArch: %{rust_arches}
- rust-just
ExclusiveArch: %{rust_arches}
- rust-jwalk
ExclusiveArch: %{rust_arches}
- rust-k9
ExclusiveArch: %{rust_arches}
- rust-keccak
ExclusiveArch: %{rust_arches}
- rust-khronos_api
ExclusiveArch: %{rust_arches}
- rust-kstring
ExclusiveArch: %{rust_arches}
- rust-kv-log-macro
ExclusiveArch: %{rust_arches}
- rust-lab
ExclusiveArch: %{rust_arches}
- rust-lalrpop
ExclusiveArch: %{rust_arches}
- rust-lalrpop-util
ExclusiveArch: %{rust_arches}
- rust-language-tags
ExclusiveArch: %{rust_arches}
- rust-lazy-init
ExclusiveArch: %{rust_arches}
- rust-lazy_static
ExclusiveArch: %{rust_arches}
- rust-lazycell
ExclusiveArch: %{rust_arches}
- rust-leb128
ExclusiveArch: %{rust_arches}
- rust-lewton
ExclusiveArch: %{rust_arches}
- rust-lexical-core
ExclusiveArch: %{rust_arches}
- rust-lexiclean
ExclusiveArch: %{rust_arches}
- rust-libbpf-cargo
ExclusiveArch: %{rust_arches}
- rust-libbpf-rs
ExclusiveArch: %{rust_arches}
- rust-libbpf-sys
ExclusiveArch: %{rust_arches}
- rust-libc
ExclusiveArch: %{rust_arches}
- rust-libcryptsetup-rs
ExclusiveArch: %{rust_arches}
- rust-libcryptsetup-rs-sys
ExclusiveArch: %{rust_arches}
- rust-libdbus-sys
ExclusiveArch: %{rust_arches}
- rust-libdeflate-sys
ExclusiveArch: %{rust_arches}
- rust-libdeflater
ExclusiveArch: %{rust_arches}
- rust-libflate
ExclusiveArch: %{rust_arches}
- rust-libflate_lz77
ExclusiveArch: %{rust_arches}
- rust-libgit2-sys
ExclusiveArch: %{rust_arches}
- rust-libhandy
ExclusiveArch: %{rust_arches}
- rust-libhandy-sys
ExclusiveArch: %{rust_arches}
- rust-libloading
ExclusiveArch: %{rust_arches}
- rust-libloading0.6
ExclusiveArch: %{rust_arches}
- rust-libm
ExclusiveArch: %{rust_arches}
- rust-libmount
ExclusiveArch: %{rust_arches}
- rust-libnotcurses-sys
ExclusiveArch: %{rust_arches}
- rust-liboverdrop
ExclusiveArch: %{rust_arches}
- rust-libpulse-binding
ExclusiveArch: %{rust_arches}
- rust-libpulse-sys
ExclusiveArch: %{rust_arches}
- rust-libslirp
ExclusiveArch: %{rust_arches}
- rust-libslirp-sys
ExclusiveArch: %{rust_arches}
- rust-libsqlite3-sys
ExclusiveArch: %{rust_arches}
- rust-libssh2-sys
ExclusiveArch: %{rust_arches}
- rust-libsystemd
ExclusiveArch: %{rust_arches}
- rust-libsystemd-sys
ExclusiveArch: %{rust_arches}
- rust-libudev
ExclusiveArch: %{rust_arches}
- rust-libudev-sys
ExclusiveArch: %{rust_arches}
- rust-libwebp
ExclusiveArch: %{rust_arches}
- rust-libwebp-sys2
ExclusiveArch: %{rust_arches}
- rust-libxml
ExclusiveArch: %{rust_arches}
- rust-libz-sys
ExclusiveArch: %{rust_arches}
- rust-line-wrap
ExclusiveArch: %{rust_arches}
- rust-line_drawing
ExclusiveArch: %{rust_arches}
- rust-link-cplusplus
ExclusiveArch: %{rust_arches}
- rust-linked-hash-map
ExclusiveArch: %{rust_arches}
- rust-linkify
ExclusiveArch: %{rust_arches}
- rust-lipsum
ExclusiveArch: %{rust_arches}
- rust-liquid
ExclusiveArch: %{rust_arches}
- rust-liquid-core
ExclusiveArch: %{rust_arches}
- rust-liquid-derive
ExclusiveArch: %{rust_arches}
- rust-liquid-lib
ExclusiveArch: %{rust_arches}
- rust-listenfd
ExclusiveArch: %{rust_arches}
- rust-lmdb
ExclusiveArch: %{rust_arches}
- rust-lmdb-sys
ExclusiveArch: %{rust_arches}
- rust-locale
ExclusiveArch: %{rust_arches}
- rust-locale_config
ExclusiveArch: %{rust_arches}
- rust-lock_api
ExclusiveArch: %{rust_arches}
- rust-lockfree
ExclusiveArch: %{rust_arches}
- rust-log
ExclusiveArch: %{rust_arches}
- rust-log-mdc
ExclusiveArch: %{rust_arches}
- rust-log-panics
ExclusiveArch: %{rust_arches}
- rust-log0.3
ExclusiveArch: %{rust_arches}
- rust-log4rs
ExclusiveArch: %{rust_arches}
- rust-loggerv
ExclusiveArch: %{rust_arches}
- rust-loopdev
ExclusiveArch: %{rust_arches}
- rust-lru-cache
ExclusiveArch: %{rust_arches}
- rust-lru_time_cache
ExclusiveArch: %{rust_arches}
- rust-lscolors
ExclusiveArch: %{rust_arches}
- rust-lsd
ExclusiveArch: %{rust_arches}
- rust-lzma-sys
ExclusiveArch: %{rust_arches}
- rust-lzw
ExclusiveArch: %{rust_arches}
- rust-mac
ExclusiveArch: %{rust_arches}
- rust-macro-attr
ExclusiveArch: %{rust_arches}
- rust-macroquad_macro
ExclusiveArch: %{rust_arches}
- rust-magic-crypt
ExclusiveArch: %{rust_arches}
- rust-maildir
ExclusiveArch: %{rust_arches}
- rust-mailparse
ExclusiveArch: %{rust_arches}
- rust-man
ExclusiveArch: %{rust_arches}
- rust-maplit
ExclusiveArch: %{rust_arches}
- rust-markup5ever
ExclusiveArch: %{rust_arches}
- rust-markup5ever_rcdom
ExclusiveArch: %{rust_arches}
- rust-match_cfg
ExclusiveArch: %{rust_arches}
- rust-matches
ExclusiveArch: %{rust_arches}
- rust-matrixcompare
ExclusiveArch: %{rust_arches}
- rust-matrixcompare-core
ExclusiveArch: %{rust_arches}
- rust-matrixcompare-mock
ExclusiveArch: %{rust_arches}
- rust-matrixmultiply
ExclusiveArch: %{rust_arches}
- rust-maxminddb
ExclusiveArch: %{rust_arches}
- rust-maybe-owned
ExclusiveArch: %{rust_arches}
- rust-maybe-uninit
ExclusiveArch: %{rust_arches}
- rust-mbox
ExclusiveArch: %{rust_arches}
- rust-mbrman
ExclusiveArch: %{rust_arches}
- rust-md-5
ExclusiveArch: %{rust_arches}
- rust-md5
ExclusiveArch: %{rust_arches}
- rust-mdl
ExclusiveArch: %{rust_arches}
- rust-memchr
ExclusiveArch: %{rust_arches}
- rust-memmap
ExclusiveArch: %{rust_arches}
- rust-memmap2
ExclusiveArch: %{rust_arches}
- rust-memmap2_0.1
ExclusiveArch: %{rust_arches}
- rust-memoffset
ExclusiveArch: %{rust_arches}
- rust-memoffset0.5
ExclusiveArch: %{rust_arches}
- rust-memsec
ExclusiveArch: %{rust_arches}
- rust-metadeps
ExclusiveArch: %{rust_arches}
- rust-migrations_internals
ExclusiveArch: %{rust_arches}
- rust-migrations_macros
ExclusiveArch: %{rust_arches}
- rust-mime
ExclusiveArch: %{rust_arches}
- rust-mime-sniffer
ExclusiveArch: %{rust_arches}
- rust-mime0.2
ExclusiveArch: %{rust_arches}
- rust-mime_guess
ExclusiveArch: %{rust_arches}
- rust-mime_guess1
ExclusiveArch: %{rust_arches}
- rust-miniflux_api
ExclusiveArch: %{rust_arches}
- rust-minify-html
ExclusiveArch: %{rust_arches}
- rust-minimp3
ExclusiveArch: %{rust_arches}
- rust-minimp3-sys
ExclusiveArch: %{rust_arches}
- rust-miniz-sys
ExclusiveArch: %{rust_arches}
- rust-miniz_oxide
ExclusiveArch: %{rust_arches}
- rust-miniz_oxide0.3
ExclusiveArch: %{rust_arches}
- rust-miniz_oxide_c_api
ExclusiveArch: %{rust_arches}
- rust-mint
ExclusiveArch: %{rust_arches}
- rust-mio
ExclusiveArch: %{rust_arches}
- rust-mio-extras
ExclusiveArch: %{rust_arches}
- rust-mio-uds
ExclusiveArch: %{rust_arches}
- rust-mio0.6
ExclusiveArch: %{rust_arches}
- rust-mktemp
ExclusiveArch: %{rust_arches}
- rust-mnt
ExclusiveArch: %{rust_arches}
- rust-mockito
ExclusiveArch: %{rust_arches}
- rust-modifier
ExclusiveArch: %{rust_arches}
- rust-more-asserts
ExclusiveArch: %{rust_arches}
- rust-mp4parse
ExclusiveArch: %{rust_arches}
- rust-msgbox
ExclusiveArch: %{rust_arches}
- rust-muldiv
ExclusiveArch: %{rust_arches}
- rust-multimap
ExclusiveArch: %{rust_arches}
- rust-multipart
ExclusiveArch: %{rust_arches}
- rust-mustache
ExclusiveArch: %{rust_arches}
- rust-nalgebra-macros
ExclusiveArch: %{rust_arches}
- rust-nasm-rs
ExclusiveArch: %{rust_arches}
- rust-native-tls
ExclusiveArch: %{rust_arches}
- rust-natord
ExclusiveArch: %{rust_arches}
- rust-navi
ExclusiveArch: %{rust_arches}
- rust-nb-connect
ExclusiveArch: %{rust_arches}
- rust-ncurses
ExclusiveArch: %{rust_arches}
- rust-net2
ExclusiveArch: %{rust_arches}
- rust-netlink-packet-core
ExclusiveArch: %{rust_arches}
- rust-netlink-packet-route
ExclusiveArch: %{rust_arches}
- rust-netlink-packet-utils
ExclusiveArch: %{rust_arches}
- rust-netlink-proto
ExclusiveArch: %{rust_arches}
- rust-netlink-sys
ExclusiveArch: %{rust_arches}
- rust-netmap_sys
ExclusiveArch: %{rust_arches}
- rust-nettle
ExclusiveArch: %{rust_arches}
- rust-nettle-sys
ExclusiveArch: %{rust_arches}
- rust-new_debug_unreachable
ExclusiveArch: %{rust_arches}
- rust-news-flash
ExclusiveArch: %{rust_arches}
- rust-newsblur_api
ExclusiveArch: %{rust_arches}
- rust-newtype_derive
ExclusiveArch: %{rust_arches}
- rust-nibble_vec
ExclusiveArch: %{rust_arches}
- rust-nickel
ExclusiveArch: %{rust_arches}
- rust-nix
ExclusiveArch: %{rust_arches}
- rust-nix0.14
ExclusiveArch: %{rust_arches}
- rust-nix0.17
ExclusiveArch: %{rust_arches}
- rust-nix0.18
ExclusiveArch: %{rust_arches}
- rust-nix0.20
ExclusiveArch: %{rust_arches}
- rust-no-panic
ExclusiveArch: %{rust_arches}
- rust-nodrop
ExclusiveArch: %{rust_arches}
- rust-nom
ExclusiveArch: %{rust_arches}
- rust-nom4
ExclusiveArch: %{rust_arches}
- rust-nom5
ExclusiveArch: %{rust_arches}
- rust-noop_proc_macro
ExclusiveArch: %{rust_arches}
- rust-normalize-line-endings
ExclusiveArch: %{rust_arches}
- rust-notify
ExclusiveArch: %{rust_arches}
- rust-notify-rust
ExclusiveArch: %{rust_arches}
- rust-num
ExclusiveArch: %{rust_arches}
- rust-num-bigint
ExclusiveArch: %{rust_arches}
- rust-num-bigint-dig
ExclusiveArch: %{rust_arches}
- rust-num-bigint0.3
ExclusiveArch: %{rust_arches}
- rust-num-complex
ExclusiveArch: %{rust_arches}
- rust-num-complex0.3
ExclusiveArch: %{rust_arches}
- rust-num-derive
ExclusiveArch: %{rust_arches}
- rust-num-integer
ExclusiveArch: %{rust_arches}
- rust-num-iter
ExclusiveArch: %{rust_arches}
- rust-num-rational
ExclusiveArch: %{rust_arches}
- rust-num-rational0.3
ExclusiveArch: %{rust_arches}
- rust-num-traits
ExclusiveArch: %{rust_arches}
- rust-num-traits0.1
ExclusiveArch: %{rust_arches}
- rust-num0.3
ExclusiveArch: %{rust_arches}
- rust-num_cpus
ExclusiveArch: %{rust_arches}
- rust-num_enum
ExclusiveArch: %{rust_arches}
- rust-num_enum_derive
ExclusiveArch: %{rust_arches}
- rust-number_prefix
ExclusiveArch: %{rust_arches}
- rust-numtoa
ExclusiveArch: %{rust_arches}
- rust-oauth2
ExclusiveArch: %{rust_arches}
- rust-obfstr
ExclusiveArch: %{rust_arches}
- rust-obj
ExclusiveArch: %{rust_arches}
- rust-object
ExclusiveArch: %{rust_arches}
- rust-odds
ExclusiveArch: %{rust_arches}
- rust-ogg
ExclusiveArch: %{rust_arches}
- rust-oid
ExclusiveArch: %{rust_arches}
- rust-once_cell
ExclusiveArch: %{rust_arches}
- rust-onig
ExclusiveArch: %{rust_arches}
- rust-onig_sys
ExclusiveArch: %{rust_arches}
- rust-oorandom
ExclusiveArch: %{rust_arches}
- rust-opaque-debug
ExclusiveArch: %{rust_arches}
- rust-open
ExclusiveArch: %{rust_arches}
- rust-openat
ExclusiveArch: %{rust_arches}
- rust-openat-ext
ExclusiveArch: %{rust_arches}
- rust-opener
ExclusiveArch: %{rust_arches}
- rust-openssh-keys
ExclusiveArch: %{rust_arches}
- rust-openssl
ExclusiveArch: %{rust_arches}
- rust-openssl-probe
ExclusiveArch: %{rust_arches}
- rust-openssl-sys
ExclusiveArch: %{rust_arches}
- rust-opml
ExclusiveArch: %{rust_arches}
- rust-ord_subset
ExclusiveArch: %{rust_arches}
- rust-ordered-float
ExclusiveArch: %{rust_arches}
- rust-ordered-multimap
ExclusiveArch: %{rust_arches}
- rust-os_info
ExclusiveArch: %{rust_arches}
- rust-os_pipe
ExclusiveArch: %{rust_arches}
- rust-os_str_bytes
ExclusiveArch: %{rust_arches}
- rust-osmesa-sys
ExclusiveArch: %{rust_arches}
- rust-osstrtools
ExclusiveArch: %{rust_arches}
- rust-ostree
ExclusiveArch: %{rust_arches}
- rust-ostree-sys
ExclusiveArch: %{rust_arches}
- rust-ouroboros
ExclusiveArch: %{rust_arches}
- rust-ouroboros_macro
ExclusiveArch: %{rust_arches}
- rust-owned-alloc
ExclusiveArch: %{rust_arches}
- rust-owned_ttf_parser
ExclusiveArch: %{rust_arches}
- rust-owning_ref
ExclusiveArch: %{rust_arches}
- rust-oxipng
ExclusiveArch: %{rust_arches}
- rust-packaging
ExclusiveArch: %{rust_arches}
- rust-pad
ExclusiveArch: %{rust_arches}
- rust-page_size
ExclusiveArch: %{rust_arches}
- rust-pager
ExclusiveArch: %{rust_arches}
- rust-palette
ExclusiveArch: %{rust_arches}
- rust-palette_derive
ExclusiveArch: %{rust_arches}
- rust-pam
ExclusiveArch: %{rust_arches}
- rust-pam-client
ExclusiveArch: %{rust_arches}
- rust-pam-sys
ExclusiveArch: %{rust_arches}
- rust-pancurses
ExclusiveArch: %{rust_arches}
- rust-pango
ExclusiveArch: %{rust_arches}
- rust-pango-sys
ExclusiveArch: %{rust_arches}
- rust-pangocairo
ExclusiveArch: %{rust_arches}
- rust-pangocairo-sys
ExclusiveArch: %{rust_arches}
- rust-parity-wasm
ExclusiveArch: %{rust_arches}
- rust-parking
ExclusiveArch: %{rust_arches}
- rust-parking_lot
ExclusiveArch: %{rust_arches}
- rust-parking_lot_core
ExclusiveArch: %{rust_arches}
- rust-parse-zoneinfo
ExclusiveArch: %{rust_arches}
- rust-parse_cfg
ExclusiveArch: %{rust_arches}
- rust-parsec-client
ExclusiveArch: %{rust_arches}
- rust-parsec-interface
ExclusiveArch: %{rust_arches}
- rust-partial-io
ExclusiveArch: %{rust_arches}
- rust-partition-identity
ExclusiveArch: %{rust_arches}
- rust-paste
ExclusiveArch: %{rust_arches}
- rust-paste-impl
ExclusiveArch: %{rust_arches}
- rust-path-absolutize
ExclusiveArch: %{rust_arches}
- rust-path-dedot
ExclusiveArch: %{rust_arches}
- rust-path-slash
ExclusiveArch: %{rust_arches}
- rust-pathdiff
ExclusiveArch: %{rust_arches}
- rust-pathfinder_geometry
ExclusiveArch: %{rust_arches}
- rust-pathfinder_simd
ExclusiveArch: %{rust_arches}
- rust-pbr
ExclusiveArch: %{rust_arches}
- rust-pcap
ExclusiveArch: %{rust_arches}
- rust-pcre2
ExclusiveArch: %{rust_arches}
- rust-pcre2-sys
ExclusiveArch: %{rust_arches}
- rust-peeking_take_while
ExclusiveArch: %{rust_arches}
- rust-peg
ExclusiveArch: %{rust_arches}
- rust-peg-macros
ExclusiveArch: %{rust_arches}
- rust-peg-runtime
ExclusiveArch: %{rust_arches}
- rust-peg0.5
ExclusiveArch: %{rust_arches}
- rust-pem
ExclusiveArch: %{rust_arches}
- rust-percent-encoding
ExclusiveArch: %{rust_arches}
- rust-percent-encoding1
ExclusiveArch: %{rust_arches}
- rust-peresil
ExclusiveArch: %{rust_arches}
- rust-permutate
ExclusiveArch: %{rust_arches}
- rust-permutohedron
ExclusiveArch: %{rust_arches}
- rust-pest
ExclusiveArch: %{rust_arches}
- rust-pest_derive
ExclusiveArch: %{rust_arches}
- rust-pest_generator
ExclusiveArch: %{rust_arches}
- rust-pest_meta
ExclusiveArch: %{rust_arches}
- rust-petgraph
ExclusiveArch: %{rust_arches}
- rust-phf
ExclusiveArch: %{rust_arches}
- rust-phf0.7
ExclusiveArch: %{rust_arches}
- rust-phf_codegen
ExclusiveArch: %{rust_arches}
- rust-phf_codegen0.7
ExclusiveArch: %{rust_arches}
- rust-phf_generator
ExclusiveArch: %{rust_arches}
- rust-phf_generator0.7
ExclusiveArch: %{rust_arches}
- rust-phf_macros
ExclusiveArch: %{rust_arches}
- rust-phf_macros0.7
ExclusiveArch: %{rust_arches}
- rust-phf_shared
ExclusiveArch: %{rust_arches}
- rust-phf_shared0.7
ExclusiveArch: %{rust_arches}
- rust-picky-asn1
ExclusiveArch: %{rust_arches}
- rust-picky-asn1-der
ExclusiveArch: %{rust_arches}
- rust-picky-asn1-x509
ExclusiveArch: %{rust_arches}
- rust-pico-args
ExclusiveArch: %{rust_arches}
- rust-pin-project
ExclusiveArch: %{rust_arches}
- rust-pin-project-internal
ExclusiveArch: %{rust_arches}
- rust-pin-project-internal0.4
ExclusiveArch: %{rust_arches}
- rust-pin-project-lite
ExclusiveArch: %{rust_arches}
- rust-pin-project-lite0.1
ExclusiveArch: %{rust_arches}
- rust-pin-project0.4
ExclusiveArch: %{rust_arches}
- rust-pin-utils
ExclusiveArch: %{rust_arches}
- rust-pipe
ExclusiveArch: %{rust_arches}
- rust-piper
ExclusiveArch: %{rust_arches}
- rust-pkcs11
ExclusiveArch: %{rust_arches}
- rust-pkg-config
ExclusiveArch: %{rust_arches}
- rust-plain
ExclusiveArch: %{rust_arches}
- rust-platform-dirs
ExclusiveArch: %{rust_arches}
- rust-platforms
ExclusiveArch: %{rust_arches}
- rust-pleaser
ExclusiveArch: %{rust_arches}
- rust-plist
ExclusiveArch: %{rust_arches}
- rust-plotters
ExclusiveArch: %{rust_arches}
- rust-plotters-backend
ExclusiveArch: %{rust_arches}
- rust-plotters-bitmap
ExclusiveArch: %{rust_arches}
- rust-plotters-svg
ExclusiveArch: %{rust_arches}
- rust-plugin
ExclusiveArch: %{rust_arches}
- rust-pnet_base
ExclusiveArch: %{rust_arches}
- rust-pnet_datalink
ExclusiveArch: %{rust_arches}
- rust-pnet_sys
ExclusiveArch: %{rust_arches}
- rust-png
ExclusiveArch: %{rust_arches}
- rust-podio
ExclusiveArch: %{rust_arches}
- rust-polling
ExclusiveArch: %{rust_arches}
- rust-polyval
ExclusiveArch: %{rust_arches}
- rust-pom
ExclusiveArch: %{rust_arches}
- rust-pommes
ExclusiveArch: %{rust_arches}
- rust-posish
ExclusiveArch: %{rust_arches}
- rust-ppv-lite86
ExclusiveArch: %{rust_arches}
- rust-pq-sys
ExclusiveArch: %{rust_arches}
- rust-precomputed-hash
ExclusiveArch: %{rust_arches}
- rust-predicates
ExclusiveArch: %{rust_arches}
- rust-predicates-core
ExclusiveArch: %{rust_arches}
- rust-predicates-tree
ExclusiveArch: %{rust_arches}
- rust-pretty-git-prompt
ExclusiveArch: %{rust_arches}
- rust-pretty-hex
ExclusiveArch: %{rust_arches}
- rust-pretty_assertions
ExclusiveArch: %{rust_arches}
- rust-pretty_assertions0.6
ExclusiveArch: %{rust_arches}
- rust-pretty_env_logger
ExclusiveArch: %{rust_arches}
- rust-prettytable-rs
ExclusiveArch: %{rust_arches}
- rust-proc-macro-crate
ExclusiveArch: %{rust_arches}
- rust-proc-macro-crate0.1
ExclusiveArch: %{rust_arches}
- rust-proc-macro-error
ExclusiveArch: %{rust_arches}
- rust-proc-macro-error-attr
ExclusiveArch: %{rust_arches}
- rust-proc-macro-hack
ExclusiveArch: %{rust_arches}
- rust-proc-macro-nested
ExclusiveArch: %{rust_arches}
- rust-proc-macro2
ExclusiveArch: %{rust_arches}
- rust-proc-macro2-0.4
ExclusiveArch: %{rust_arches}
- rust-proc-mounts
ExclusiveArch: %{rust_arches}
- rust-proc-quote
ExclusiveArch: %{rust_arches}
- rust-proc-quote-impl
ExclusiveArch: %{rust_arches}
- rust-procedural-masquerade
ExclusiveArch: %{rust_arches}
- rust-process_control
ExclusiveArch: %{rust_arches}
- rust-process_path
ExclusiveArch: %{rust_arches}
- rust-procfs
ExclusiveArch: %{rust_arches}
- rust-procs
ExclusiveArch: %{rust_arches}
- rust-progress-streams
ExclusiveArch: %{rust_arches}
- rust-prometheus
ExclusiveArch: %{rust_arches}
- rust-proptest
ExclusiveArch: %{rust_arches}
- rust-proptest-derive
ExclusiveArch: %{rust_arches}
- rust-proptest0.10
ExclusiveArch: %{rust_arches}
- rust-prost
ExclusiveArch: %{rust_arches}
- rust-prost-build
ExclusiveArch: %{rust_arches}
- rust-prost-derive
ExclusiveArch: %{rust_arches}
- rust-prost-types
ExclusiveArch: %{rust_arches}
- rust-protobuf
ExclusiveArch: %{rust_arches}
- rust-protobuf-codegen
ExclusiveArch: %{rust_arches}
- rust-protobuf-codegen-pure
ExclusiveArch: %{rust_arches}
- rust-protoc
ExclusiveArch: %{rust_arches}
- rust-protoc-rust
ExclusiveArch: %{rust_arches}
- rust-psa-crypto
ExclusiveArch: %{rust_arches}
- rust-psa-crypto-sys
ExclusiveArch: %{rust_arches}
- rust-psd
ExclusiveArch: %{rust_arches}
- rust-psm
ExclusiveArch: %{rust_arches}
- rust-psutil
ExclusiveArch: %{rust_arches}
- rust-ptr_meta
ExclusiveArch: %{rust_arches}
- rust-ptr_meta_derive
ExclusiveArch: %{rust_arches}
- rust-publicsuffix
ExclusiveArch: %{rust_arches}
- rust-pulldown-cmark
ExclusiveArch: %{rust_arches}
- rust-pulse
ExclusiveArch: %{rust_arches}
- rust-pure-rust-locales
ExclusiveArch: %{rust_arches}
- rust-pyo3
ExclusiveArch: %{rust_arches}
- rust-pyo3-macros
ExclusiveArch: %{rust_arches}
- rust-pyo3-macros-backend
ExclusiveArch: %{rust_arches}
- rust-python3-sys
ExclusiveArch: %{rust_arches}
- rust-qr2term
ExclusiveArch: %{rust_arches}
- rust-qrcode
ExclusiveArch: %{rust_arches}
- rust-qstring
ExclusiveArch: %{rust_arches}
- rust-quad-rand
ExclusiveArch: %{rust_arches}
- rust-quick-error
ExclusiveArch: %{rust_arches}
- rust-quick-error1
ExclusiveArch: %{rust_arches}
- rust-quick-xml
ExclusiveArch: %{rust_arches}
- rust-quick-xml0.20
ExclusiveArch: %{rust_arches}
- rust-quickcheck
ExclusiveArch: %{rust_arches}
- rust-quickcheck0.6
ExclusiveArch: %{rust_arches}
- rust-quickcheck0.9
ExclusiveArch: %{rust_arches}
- rust-quickcheck_macros
ExclusiveArch: %{rust_arches}
- rust-quickersort
ExclusiveArch: %{rust_arches}
- rust-quote
ExclusiveArch: %{rust_arches}
- rust-quote0.3
ExclusiveArch: %{rust_arches}
- rust-quote0.6
ExclusiveArch: %{rust_arches}
- rust-quoted_printable
ExclusiveArch: %{rust_arches}
- rust-r2d2
ExclusiveArch: %{rust_arches}
- rust-radium
ExclusiveArch: %{rust_arches}
- rust-radix64
ExclusiveArch: %{rust_arches}
- rust-radix_trie
ExclusiveArch: %{rust_arches}
- rust-rand
ExclusiveArch: %{rust_arches}
- rust-rand0.4
ExclusiveArch: %{rust_arches}
- rust-rand0.5
ExclusiveArch: %{rust_arches}
- rust-rand0.6
ExclusiveArch: %{rust_arches}
- rust-rand0.7
ExclusiveArch: %{rust_arches}
- rust-rand_chacha
ExclusiveArch: %{rust_arches}
- rust-rand_chacha0.1
ExclusiveArch: %{rust_arches}
- rust-rand_chacha0.2
ExclusiveArch: %{rust_arches}
- rust-rand_core
ExclusiveArch: %{rust_arches}
- rust-rand_core0.3
ExclusiveArch: %{rust_arches}
- rust-rand_core0.4
ExclusiveArch: %{rust_arches}
- rust-rand_core0.5
ExclusiveArch: %{rust_arches}
- rust-rand_distr
ExclusiveArch: %{rust_arches}
- rust-rand_distr0.2
ExclusiveArch: %{rust_arches}
- rust-rand_hc
ExclusiveArch: %{rust_arches}
- rust-rand_hc0.1
ExclusiveArch: %{rust_arches}
- rust-rand_isaac
ExclusiveArch: %{rust_arches}
- rust-rand_isaac0.1
ExclusiveArch: %{rust_arches}
- rust-rand_jitter
ExclusiveArch: %{rust_arches}
- rust-rand_jitter0.1
ExclusiveArch: %{rust_arches}
- rust-rand_os
ExclusiveArch: %{rust_arches}
- rust-rand_os0.1
ExclusiveArch: %{rust_arches}
- rust-rand_pcg
ExclusiveArch: %{rust_arches}
- rust-rand_pcg0.1
ExclusiveArch: %{rust_arches}
- rust-rand_pcg0.2
ExclusiveArch: %{rust_arches}
- rust-rand_xorshift
ExclusiveArch: %{rust_arches}
- rust-rand_xorshift0.1
ExclusiveArch: %{rust_arches}
- rust-rand_xorshift0.2
ExclusiveArch: %{rust_arches}
- rust-rand_xoshiro
ExclusiveArch: %{rust_arches}
- rust-random-fast-rng
ExclusiveArch: %{rust_arches}
- rust-random-trait
ExclusiveArch: %{rust_arches}
- rust-randomize
ExclusiveArch: %{rust_arches}
- rust-rav1e
ExclusiveArch: %{rust_arches}
- rust-raw-window-handle
ExclusiveArch: %{rust_arches}
- rust-rawpointer
ExclusiveArch: %{rust_arches}
- rust-rawslice
ExclusiveArch: %{rust_arches}
- rust-rayon
ExclusiveArch: %{rust_arches}
- rust-rayon-core
ExclusiveArch: %{rust_arches}
- rust-read_input
ExclusiveArch: %{rust_arches}
- rust-readability-fork
ExclusiveArch: %{rust_arches}
- rust-readwrite
ExclusiveArch: %{rust_arches}
- rust-recycler
ExclusiveArch: %{rust_arches}
- rust-ref-cast
ExclusiveArch: %{rust_arches}
- rust-ref-cast-impl
ExclusiveArch: %{rust_arches}
- rust-regalloc
ExclusiveArch: %{rust_arches}
- rust-regex
ExclusiveArch: %{rust_arches}
- rust-regex-automata
ExclusiveArch: %{rust_arches}
- rust-regex-syntax
ExclusiveArch: %{rust_arches}
- rust-region
ExclusiveArch: %{rust_arches}
- rust-relative-path
ExclusiveArch: %{rust_arches}
- rust-relay
ExclusiveArch: %{rust_arches}
- rust-remove_dir_all
ExclusiveArch: %{rust_arches}
- rust-rend
ExclusiveArch: %{rust_arches}
- rust-rental
ExclusiveArch: %{rust_arches}
- rust-rental-impl
ExclusiveArch: %{rust_arches}
- rust-reqwest
ExclusiveArch: %{rust_arches}
- rust-reqwest0.10
ExclusiveArch: %{rust_arches}
- rust-resize
ExclusiveArch: %{rust_arches}
- rust-resolv-conf
ExclusiveArch: %{rust_arches}
- rust-restson
ExclusiveArch: %{rust_arches}
- rust-retry
ExclusiveArch: %{rust_arches}
- rust-rgb
ExclusiveArch: %{rust_arches}
- rust-ring
ExclusiveArch: %{rust_arches}
- rust-ripgrep
ExclusiveArch: %{rust_arches}
- rust-rkyv
ExclusiveArch: %{rust_arches}
- rust-rkyv_derive
ExclusiveArch: %{rust_arches}
- rust-rle-decode-fast
ExclusiveArch: %{rust_arches}
- rust-rmp
ExclusiveArch: %{rust_arches}
- rust-rmp-serde
ExclusiveArch: %{rust_arches}
- rust-rodio
ExclusiveArch: %{rust_arches}
- rust-roff
ExclusiveArch: %{rust_arches}
- rust-ron
ExclusiveArch: %{rust_arches}
- rust-roxmltree
ExclusiveArch: %{rust_arches}
- rust-rpassword
ExclusiveArch: %{rust_arches}
- rust-rpick
ExclusiveArch: %{rust_arches}
- rust-rsa
ExclusiveArch: %{rust_arches}
- rust-rspec
ExclusiveArch: %{rust_arches}
- rust-rtnetlink
ExclusiveArch: %{rust_arches}
- rust-rudo
ExclusiveArch: %{rust_arches}
- rust-ruma
ExclusiveArch: %{rust_arches}
- rust-ruma-api
ExclusiveArch: %{rust_arches}
- rust-ruma-api-macros
ExclusiveArch: %{rust_arches}
- rust-ruma-appservice-api
ExclusiveArch: %{rust_arches}
- rust-ruma-client-api
ExclusiveArch: %{rust_arches}
- rust-ruma-common
ExclusiveArch: %{rust_arches}
- rust-ruma-events
ExclusiveArch: %{rust_arches}
- rust-ruma-events-macros
ExclusiveArch: %{rust_arches}
- rust-ruma-federation-api
ExclusiveArch: %{rust_arches}
- rust-ruma-identifiers
ExclusiveArch: %{rust_arches}
- rust-ruma-identifiers-macros
ExclusiveArch: %{rust_arches}
- rust-ruma-identifiers-validation
ExclusiveArch: %{rust_arches}
- rust-ruma-identity-service-api
ExclusiveArch: %{rust_arches}
- rust-ruma-push-gateway-api
ExclusiveArch: %{rust_arches}
- rust-ruma-serde
ExclusiveArch: %{rust_arches}
- rust-ruma-serde-macros
ExclusiveArch: %{rust_arches}
- rust-ruma-signatures
ExclusiveArch: %{rust_arches}
- rust-rusqlite
ExclusiveArch: %{rust_arches}
- rust-rust-embed
ExclusiveArch: %{rust_arches}
- rust-rust-embed-impl
ExclusiveArch: %{rust_arches}
- rust-rust-embed-utils
ExclusiveArch: %{rust_arches}
- rust-rust-ini
ExclusiveArch: %{rust_arches}
- rust-rust-stemmers
ExclusiveArch: %{rust_arches}
- rust-rust_decimal
ExclusiveArch: %{rust_arches}
- rust-rust_hawktracer
ExclusiveArch: %{rust_arches}
- rust-rust_hawktracer_normal_macro
ExclusiveArch: %{rust_arches}
- rust-rust_hawktracer_proc_macro
ExclusiveArch: %{rust_arches}
- rust-rust_hawktracer_sys
ExclusiveArch: %{rust_arches}
- rust-rustbus
ExclusiveArch: %{rust_arches}
- rust-rustbus_derive
ExclusiveArch: %{rust_arches}
- rust-rustc-demangle
ExclusiveArch: %{rust_arches}
- rust-rustc-hash
ExclusiveArch: %{rust_arches}
- rust-rustc-serialize
ExclusiveArch: %{rust_arches}
- rust-rustc-test
ExclusiveArch: %{rust_arches}
- rust-rustc_tools_util
ExclusiveArch: %{rust_arches}
- rust-rustc_version
ExclusiveArch: %{rust_arches}
- rust-rustc_version0.3
ExclusiveArch: %{rust_arches}
- rust-rustdoc-stripper
ExclusiveArch: %{rust_arches}
- rust-rustfilt
ExclusiveArch: %{rust_arches}
- rust-rustfix
ExclusiveArch: %{rust_arches}
- rust-rustio
ExclusiveArch: %{rust_arches}
- rust-rustls
ExclusiveArch: %{rust_arches}
- rust-rustls-native-certs
ExclusiveArch: %{rust_arches}
- rust-rusttype
ExclusiveArch: %{rust_arches}
- rust-rustversion
ExclusiveArch: %{rust_arches}
- rust-rusty-fork
ExclusiveArch: %{rust_arches}
- rust-rustyline
ExclusiveArch: %{rust_arches}
- rust-rustyline-derive
ExclusiveArch: %{rust_arches}
- rust-ryu
ExclusiveArch: %{rust_arches}
- rust-safe-transmute
ExclusiveArch: %{rust_arches}
- rust-safe_arch
ExclusiveArch: %{rust_arches}
- rust-safemem
ExclusiveArch: %{rust_arches}
- rust-same-file
ExclusiveArch: %{rust_arches}
- rust-sapp-kms
ExclusiveArch: %{rust_arches}
- rust-sapp-linux
ExclusiveArch: %{rust_arches}
- rust-sass-rs
ExclusiveArch: %{rust_arches}
- rust-sass-sys
ExclusiveArch: %{rust_arches}
- rust-scan_fmt
ExclusiveArch: %{rust_arches}
- rust-scheduled-thread-pool
ExclusiveArch: %{rust_arches}
- rust-scoped-tls
ExclusiveArch: %{rust_arches}
- rust-scoped-tls-hkt
ExclusiveArch: %{rust_arches}
- rust-scoped_threadpool
ExclusiveArch: %{rust_arches}
- rust-scopeguard
ExclusiveArch: %{rust_arches}
- rust-scopetime
ExclusiveArch: %{rust_arches}
- rust-scratch
ExclusiveArch: %{rust_arches}
- rust-scroll
ExclusiveArch: %{rust_arches}
- rust-scroll_derive
ExclusiveArch: %{rust_arches}
- rust-sct
ExclusiveArch: %{rust_arches}
- rust-sd
ExclusiveArch: %{rust_arches}
- rust-sd-notify
ExclusiveArch: %{rust_arches}
- rust-seahash
ExclusiveArch: %{rust_arches}
- rust-seahash3
ExclusiveArch: %{rust_arches}
- rust-secrecy
ExclusiveArch: %{rust_arches}
- rust-secret-service
ExclusiveArch: %{rust_arches}
- rust-semver
ExclusiveArch: %{rust_arches}
- rust-semver-parser
ExclusiveArch: %{rust_arches}
- rust-semver-parser0.7
ExclusiveArch: %{rust_arches}
- rust-semver-parser0.9
ExclusiveArch: %{rust_arches}
- rust-semver0.10
ExclusiveArch: %{rust_arches}
- rust-semver0.11
ExclusiveArch: %{rust_arches}
- rust-semver0.9
ExclusiveArch: %{rust_arches}
- rust-sequoia-autocrypt
ExclusiveArch: %{rust_arches}
- rust-sequoia-ipc
ExclusiveArch: %{rust_arches}
- rust-sequoia-keyring-linter
ExclusiveArch: %{rust_arches}
- rust-sequoia-net
ExclusiveArch: %{rust_arches}
- rust-sequoia-octopus-librnp
ExclusiveArch: %{rust_arches}
- rust-sequoia-openpgp
ExclusiveArch: %{rust_arches}
- rust-sequoia-sop
ExclusiveArch: %{rust_arches}
- rust-sequoia-sq
ExclusiveArch: %{rust_arches}
- rust-sequoia-sqv
ExclusiveArch: %{rust_arches}
- rust-serde
ExclusiveArch: %{rust_arches}
- rust-serde-big-array
ExclusiveArch: %{rust_arches}
- rust-serde-pickle
ExclusiveArch: %{rust_arches}
- rust-serde-value
ExclusiveArch: %{rust_arches}
- rust-serde-xml-rs
ExclusiveArch: %{rust_arches}
- rust-serde_bser
ExclusiveArch: %{rust_arches}
- rust-serde_bytes
ExclusiveArch: %{rust_arches}
- rust-serde_cbor
ExclusiveArch: %{rust_arches}
- rust-serde_derive
ExclusiveArch: %{rust_arches}
- rust-serde_fmt
ExclusiveArch: %{rust_arches}
- rust-serde_ignored
ExclusiveArch: %{rust_arches}
- rust-serde_json
ExclusiveArch: %{rust_arches}
- rust-serde_repr
ExclusiveArch: %{rust_arches}
- rust-serde_stacker
ExclusiveArch: %{rust_arches}
- rust-serde_test
ExclusiveArch: %{rust_arches}
- rust-serde_url_params
ExclusiveArch: %{rust_arches}
- rust-serde_urlencoded
ExclusiveArch: %{rust_arches}
- rust-serde_urlencoded0.6
ExclusiveArch: %{rust_arches}
- rust-serde_with_macros
ExclusiveArch: %{rust_arches}
- rust-serde_yaml
ExclusiveArch: %{rust_arches}
- rust-serial-core
ExclusiveArch: %{rust_arches}
- rust-serial_test
ExclusiveArch: %{rust_arches}
- rust-serial_test_derive
ExclusiveArch: %{rust_arches}
- rust-servo-fontconfig
ExclusiveArch: %{rust_arches}
- rust-servo-fontconfig-sys
ExclusiveArch: %{rust_arches}
- rust-sev
ExclusiveArch: %{rust_arches}
- rust-sevctl
ExclusiveArch: %{rust_arches}
- rust-sha-1
ExclusiveArch: %{rust_arches}
- rust-sha1
ExclusiveArch: %{rust_arches}
- rust-sha1collisiondetection
ExclusiveArch: %{rust_arches}
- rust-sha2
ExclusiveArch: %{rust_arches}
- rust-sha3
ExclusiveArch: %{rust_arches}
- rust-shadow-rs
ExclusiveArch: %{rust_arches}
- rust-shared_child
ExclusiveArch: %{rust_arches}
- rust-shared_library
ExclusiveArch: %{rust_arches}
- rust-shell-escape
ExclusiveArch: %{rust_arches}
- rust-shell-words
ExclusiveArch: %{rust_arches}
- rust-shellexpand
ExclusiveArch: %{rust_arches}
- rust-shellwords
ExclusiveArch: %{rust_arches}
- rust-shlex
ExclusiveArch: %{rust_arches}
- rust-signal-hook
ExclusiveArch: %{rust_arches}
- rust-signal-hook-registry
ExclusiveArch: %{rust_arches}
- rust-signal-hook0.1
ExclusiveArch: %{rust_arches}
- rust-silver
ExclusiveArch: %{rust_arches}
- rust-simba
ExclusiveArch: %{rust_arches}
- rust-simd_helpers
ExclusiveArch: %{rust_arches}
- rust-simdutf8
ExclusiveArch: %{rust_arches}
- rust-simple_asn1
ExclusiveArch: %{rust_arches}
- rust-simple_logger
ExclusiveArch: %{rust_arches}
- rust-simplelog
ExclusiveArch: %{rust_arches}
- rust-siphasher
ExclusiveArch: %{rust_arches}
- rust-size
ExclusiveArch: %{rust_arches}
- rust-sized-chunks
ExclusiveArch: %{rust_arches}
- rust-skeptic
ExclusiveArch: %{rust_arches}
- rust-skim
ExclusiveArch: %{rust_arches}
- rust-slab
ExclusiveArch: %{rust_arches}
- rust-slash-formatter
ExclusiveArch: %{rust_arches}
- rust-slice-deque
ExclusiveArch: %{rust_arches}
- rust-slog
ExclusiveArch: %{rust_arches}
- rust-slog-async
ExclusiveArch: %{rust_arches}
- rust-slog-scope
ExclusiveArch: %{rust_arches}
- rust-slog-term
ExclusiveArch: %{rust_arches}
- rust-slotmap
ExclusiveArch: %{rust_arches}
- rust-slug
ExclusiveArch: %{rust_arches}
- rust-sluice
ExclusiveArch: %{rust_arches}
- rust-smallstr
ExclusiveArch: %{rust_arches}
- rust-smallvec
ExclusiveArch: %{rust_arches}
- rust-smart-default
ExclusiveArch: %{rust_arches}
- rust-smawk
ExclusiveArch: %{rust_arches}
- rust-smithay-client-toolkit
ExclusiveArch: %{rust_arches}
- rust-smithay-client-toolkit0.12
ExclusiveArch: %{rust_arches}
- rust-smithay-clipboard
ExclusiveArch: %{rust_arches}
- rust-snafu
ExclusiveArch: %{rust_arches}
- rust-snafu-derive
ExclusiveArch: %{rust_arches}
- rust-snake_case
ExclusiveArch: %{rust_arches}
- rust-snowflake
ExclusiveArch: %{rust_arches}
- rust-socket2
ExclusiveArch: %{rust_arches}
- rust-socket2_0.3
ExclusiveArch: %{rust_arches}
- rust-sop
ExclusiveArch: %{rust_arches}
- rust-soup-sys
ExclusiveArch: %{rust_arches}
- rust-spin
ExclusiveArch: %{rust_arches}
- rust-spin_on
ExclusiveArch: %{rust_arches}
- rust-spinning_top
ExclusiveArch: %{rust_arches}
- rust-spmc
ExclusiveArch: %{rust_arches}
- rust-ssh-key-dir
ExclusiveArch: %{rust_arches}
- rust-stable_deref_trait
ExclusiveArch: %{rust_arches}
- rust-stacker
ExclusiveArch: %{rust_arches}
- rust-standback
ExclusiveArch: %{rust_arches}
- rust-starship
ExclusiveArch: %{rust_arches}
- rust-starship_module_config_derive
ExclusiveArch: %{rust_arches}
- rust-static_assertions
ExclusiveArch: %{rust_arches}
- rust-statistical
ExclusiveArch: %{rust_arches}
- rust-stb_truetype
ExclusiveArch: %{rust_arches}
- rust-stderrlog
ExclusiveArch: %{rust_arches}
- rust-streaming-stats
ExclusiveArch: %{rust_arches}
- rust-string
ExclusiveArch: %{rust_arches}
- rust-string_cache
ExclusiveArch: %{rust_arches}
- rust-string_cache_codegen
ExclusiveArch: %{rust_arches}
- rust-string_cache_shared
ExclusiveArch: %{rust_arches}
- rust-strings
ExclusiveArch: %{rust_arches}
- rust-strip-ansi-escapes
ExclusiveArch: %{rust_arches}
- rust-strong-xml
ExclusiveArch: %{rust_arches}
- rust-strong-xml-derive
ExclusiveArch: %{rust_arches}
- rust-strsim
ExclusiveArch: %{rust_arches}
- rust-structopt
ExclusiveArch: %{rust_arches}
- rust-structopt-derive
ExclusiveArch: %{rust_arches}
- rust-structopt-derive0.2
ExclusiveArch: %{rust_arches}
- rust-structopt0.2
ExclusiveArch: %{rust_arches}
- rust-strum
ExclusiveArch: %{rust_arches}
- rust-strum_macros
ExclusiveArch: %{rust_arches}
- rust-subtle
ExclusiveArch: %{rust_arches}
- rust-sudo_plugin
ExclusiveArch: %{rust_arches}
- rust-sudo_plugin-sys
ExclusiveArch: %{rust_arches}
- rust-sval
ExclusiveArch: %{rust_arches}
- rust-sval_derive
ExclusiveArch: %{rust_arches}
- rust-sval_json
ExclusiveArch: %{rust_arches}
- rust-svg_metadata
ExclusiveArch: %{rust_arches}
- rust-svgfilters
ExclusiveArch: %{rust_arches}
- rust-svgtypes
ExclusiveArch: %{rust_arches}
- rust-sxd-document
ExclusiveArch: %{rust_arches}
- rust-syn
ExclusiveArch: %{rust_arches}
- rust-syn-mid
ExclusiveArch: %{rust_arches}
- rust-syn0.15
ExclusiveArch: %{rust_arches}
- rust-synom
ExclusiveArch: %{rust_arches}
- rust-synstructure
ExclusiveArch: %{rust_arches}
- rust-syntect
ExclusiveArch: %{rust_arches}
- rust-sys-info
ExclusiveArch: %{rust_arches}
- rust-sysctl
ExclusiveArch: %{rust_arches}
- rust-sysinfo
ExclusiveArch: %{rust_arches}
- rust-syslog
ExclusiveArch: %{rust_arches}
- rust-system-deps
ExclusiveArch: %{rust_arches}
- rust-systemd
ExclusiveArch: %{rust_arches}
- rust-tabular
ExclusiveArch: %{rust_arches}
- rust-tabwriter
ExclusiveArch: %{rust_arches}
- rust-take
ExclusiveArch: %{rust_arches}
- rust-take_mut
ExclusiveArch: %{rust_arches}
- rust-takeable
ExclusiveArch: %{rust_arches}
- rust-takeable-option
ExclusiveArch: %{rust_arches}
- rust-tap
ExclusiveArch: %{rust_arches}
- rust-tar
ExclusiveArch: %{rust_arches}
- rust-target
ExclusiveArch: %{rust_arches}
- rust-target-lexicon
ExclusiveArch: %{rust_arches}
- rust-tealdeer
ExclusiveArch: %{rust_arches}
- rust-teloxide
ExclusiveArch: %{rust_arches}
- rust-teloxide-macros
ExclusiveArch: %{rust_arches}
- rust-tempdir
ExclusiveArch: %{rust_arches}
- rust-tempfile
ExclusiveArch: %{rust_arches}
- rust-temptree
ExclusiveArch: %{rust_arches}
- rust-tendril
ExclusiveArch: %{rust_arches}
- rust-tera
ExclusiveArch: %{rust_arches}
- rust-term
ExclusiveArch: %{rust_arches}
- rust-term0.6
ExclusiveArch: %{rust_arches}
- rust-term_grid
ExclusiveArch: %{rust_arches}
- rust-term_size
ExclusiveArch: %{rust_arches}
- rust-termcolor
ExclusiveArch: %{rust_arches}
- rust-terminal_size
ExclusiveArch: %{rust_arches}
- rust-terminfo
ExclusiveArch: %{rust_arches}
- rust-termion
ExclusiveArch: %{rust_arches}
- rust-termios
ExclusiveArch: %{rust_arches}
- rust-test-assembler
ExclusiveArch: %{rust_arches}
- rust-tester
ExclusiveArch: %{rust_arches}
- rust-testing_logger
ExclusiveArch: %{rust_arches}
- rust-textwrap
ExclusiveArch: %{rust_arches}
- rust-textwrap0.11
ExclusiveArch: %{rust_arches}
- rust-textwrap0.12
ExclusiveArch: %{rust_arches}
- rust-thiserror
ExclusiveArch: %{rust_arches}
- rust-thiserror-impl
ExclusiveArch: %{rust_arches}
- rust-thread-id
ExclusiveArch: %{rust_arches}
- rust-thread-scoped
ExclusiveArch: %{rust_arches}
- rust-thread_local
ExclusiveArch: %{rust_arches}
- rust-threadpool
ExclusiveArch: %{rust_arches}
- rust-tiff
ExclusiveArch: %{rust_arches}
- rust-tiger-digest
ExclusiveArch: %{rust_arches}
- rust-time
ExclusiveArch: %{rust_arches}
- rust-time-macros
ExclusiveArch: %{rust_arches}
- rust-time-macros-impl
ExclusiveArch: %{rust_arches}
- rust-time0.1
ExclusiveArch: %{rust_arches}
- rust-timebomb
ExclusiveArch: %{rust_arches}
- rust-timer
ExclusiveArch: %{rust_arches}
- rust-timerfd
ExclusiveArch: %{rust_arches}
- rust-tiny-keccak
ExclusiveArch: %{rust_arches}
- rust-tiny_http
ExclusiveArch: %{rust_arches}
- rust-tinyfiledialogs
ExclusiveArch: %{rust_arches}
- rust-tinytemplate
ExclusiveArch: %{rust_arches}
- rust-tinyvec
ExclusiveArch: %{rust_arches}
- rust-tinyvec_macros
ExclusiveArch: %{rust_arches}
- rust-tokei
ExclusiveArch: %{rust_arches}
- rust-tokio
ExclusiveArch: %{rust_arches}
- rust-tokio-codec
ExclusiveArch: %{rust_arches}
- rust-tokio-core
ExclusiveArch: %{rust_arches}
- rust-tokio-current-thread
ExclusiveArch: %{rust_arches}
- rust-tokio-executor
ExclusiveArch: %{rust_arches}
- rust-tokio-fs
ExclusiveArch: %{rust_arches}
- rust-tokio-io
ExclusiveArch: %{rust_arches}
- rust-tokio-io-pool
ExclusiveArch: %{rust_arches}
- rust-tokio-macros
ExclusiveArch: %{rust_arches}
- rust-tokio-macros0.2
ExclusiveArch: %{rust_arches}
- rust-tokio-mock-task
ExclusiveArch: %{rust_arches}
- rust-tokio-native-tls
ExclusiveArch: %{rust_arches}
- rust-tokio-openssl
ExclusiveArch: %{rust_arches}
- rust-tokio-openssl0.4
ExclusiveArch: %{rust_arches}
- rust-tokio-reactor
ExclusiveArch: %{rust_arches}
- rust-tokio-rustls
ExclusiveArch: %{rust_arches}
- rust-tokio-socks
ExclusiveArch: %{rust_arches}
- rust-tokio-socks0.3
ExclusiveArch: %{rust_arches}
- rust-tokio-stream
ExclusiveArch: %{rust_arches}
- rust-tokio-sync
ExclusiveArch: %{rust_arches}
- rust-tokio-tcp
ExclusiveArch: %{rust_arches}
- rust-tokio-test
ExclusiveArch: %{rust_arches}
- rust-tokio-threadpool
ExclusiveArch: %{rust_arches}
- rust-tokio-timer
ExclusiveArch: %{rust_arches}
- rust-tokio-tls
ExclusiveArch: %{rust_arches}
- rust-tokio-tls0.2
ExclusiveArch: %{rust_arches}
- rust-tokio-tungstenite
ExclusiveArch: %{rust_arches}
- rust-tokio-udp
ExclusiveArch: %{rust_arches}
- rust-tokio-uds
ExclusiveArch: %{rust_arches}
- rust-tokio-util
ExclusiveArch: %{rust_arches}
- rust-tokio-util0.2
ExclusiveArch: %{rust_arches}
- rust-tokio-util0.3
ExclusiveArch: %{rust_arches}
- rust-tokio0.1
ExclusiveArch: %{rust_arches}
- rust-tokio0.2
ExclusiveArch: %{rust_arches}
- rust-toml
ExclusiveArch: %{rust_arches}
- rust-toml0.4
ExclusiveArch: %{rust_arches}
- rust-tower-layer
ExclusiveArch: %{rust_arches}
- rust-tower-service
ExclusiveArch: %{rust_arches}
- rust-tower-test
ExclusiveArch: %{rust_arches}
- rust-tower-util
ExclusiveArch: %{rust_arches}
- rust-tpm2-policy
ExclusiveArch: %{rust_arches}
- rust-tracing
ExclusiveArch: %{rust_arches}
- rust-tracing-attributes
ExclusiveArch: %{rust_arches}
- rust-tracing-core
ExclusiveArch: %{rust_arches}
- rust-tracing-futures
ExclusiveArch: %{rust_arches}
- rust-traitobject
ExclusiveArch: %{rust_arches}
- rust-treebitmap
ExclusiveArch: %{rust_arches}
- rust-treeline
ExclusiveArch: %{rust_arches}
- rust-trust-dns-https
ExclusiveArch: %{rust_arches}
- rust-trust-dns-native-tls
ExclusiveArch: %{rust_arches}
- rust-trust-dns-native-tls0.19
ExclusiveArch: %{rust_arches}
- rust-trust-dns-openssl
ExclusiveArch: %{rust_arches}
- rust-trust-dns-openssl0.19
ExclusiveArch: %{rust_arches}
- rust-trust-dns-proto
ExclusiveArch: %{rust_arches}
- rust-trust-dns-proto0.19
ExclusiveArch: %{rust_arches}
- rust-trust-dns-resolver
ExclusiveArch: %{rust_arches}
- rust-trust-dns-resolver0.19
ExclusiveArch: %{rust_arches}
- rust-trust-dns-rustls
ExclusiveArch: %{rust_arches}
- rust-try-lock
ExclusiveArch: %{rust_arches}
- rust-try_from
ExclusiveArch: %{rust_arches}
- rust-try_or
ExclusiveArch: %{rust_arches}
- rust-trybuild
ExclusiveArch: %{rust_arches}
- rust-tss-esapi
ExclusiveArch: %{rust_arches}
- rust-tss-esapi-sys
ExclusiveArch: %{rust_arches}
- rust-ttf-parser
ExclusiveArch: %{rust_arches}
- rust-tui
ExclusiveArch: %{rust_arches}
- rust-tui-react
ExclusiveArch: %{rust_arches}
- rust-tui0.11
ExclusiveArch: %{rust_arches}
- rust-tui0.9
ExclusiveArch: %{rust_arches}
- rust-tuikit
ExclusiveArch: %{rust_arches}
- rust-tungstenite
ExclusiveArch: %{rust_arches}
- rust-twoway
ExclusiveArch: %{rust_arches}
- rust-typeable
ExclusiveArch: %{rust_arches}
- rust-typed-arena
ExclusiveArch: %{rust_arches}
- rust-typemap
ExclusiveArch: %{rust_arches}
- rust-typenum
ExclusiveArch: %{rust_arches}
- rust-typetag
ExclusiveArch: %{rust_arches}
- rust-typetag-impl
ExclusiveArch: %{rust_arches}
- rust-tzfile
ExclusiveArch: %{rust_arches}
- rust-ucd-parse
ExclusiveArch: %{rust_arches}
- rust-ucd-trie
ExclusiveArch: %{rust_arches}
- rust-ucd-util
ExclusiveArch: %{rust_arches}
- rust-unchecked-index
ExclusiveArch: %{rust_arches}
- rust-unescape
ExclusiveArch: %{rust_arches}
- rust-unic-char-property
ExclusiveArch: %{rust_arches}
- rust-unic-char-range
ExclusiveArch: %{rust_arches}
- rust-unic-common
ExclusiveArch: %{rust_arches}
- rust-unic-segment
ExclusiveArch: %{rust_arches}
- rust-unic-ucd-category
ExclusiveArch: %{rust_arches}
- rust-unic-ucd-common
ExclusiveArch: %{rust_arches}
- rust-unic-ucd-segment
ExclusiveArch: %{rust_arches}
- rust-unic-ucd-version
ExclusiveArch: %{rust_arches}
- rust-unicase
ExclusiveArch: %{rust_arches}
- rust-unicase1
ExclusiveArch: %{rust_arches}
- rust-unicode-bidi
ExclusiveArch: %{rust_arches}
- rust-unicode-linebreak
ExclusiveArch: %{rust_arches}
- rust-unicode-normalization
ExclusiveArch: %{rust_arches}
- rust-unicode-segmentation
ExclusiveArch: %{rust_arches}
- rust-unicode-truncate
ExclusiveArch: %{rust_arches}
- rust-unicode-width
ExclusiveArch: %{rust_arches}
- rust-unicode-xid
ExclusiveArch: %{rust_arches}
- rust-unicode-xid0.1
ExclusiveArch: %{rust_arches}
- rust-unicode_categories
ExclusiveArch: %{rust_arches}
- rust-unindent
ExclusiveArch: %{rust_arches}
- rust-universal-hash
ExclusiveArch: %{rust_arches}
- rust-unix_socket
ExclusiveArch: %{rust_arches}
- rust-unreachable
ExclusiveArch: %{rust_arches}
- rust-unsafe-any
ExclusiveArch: %{rust_arches}
- rust-unsafe-io
ExclusiveArch: %{rust_arches}
- rust-untrusted
ExclusiveArch: %{rust_arches}
- rust-uom
ExclusiveArch: %{rust_arches}
- rust-url
ExclusiveArch: %{rust_arches}
- rust-url1
ExclusiveArch: %{rust_arches}
- rust-url_serde
ExclusiveArch: %{rust_arches}
- rust-urlencoding
ExclusiveArch: %{rust_arches}
- rust-urlocator
ExclusiveArch: %{rust_arches}
- rust-urlshortener
ExclusiveArch: %{rust_arches}
- rust-users
ExclusiveArch: %{rust_arches}
- rust-users0.10
ExclusiveArch: %{rust_arches}
- rust-utf-8
ExclusiveArch: %{rust_arches}
- rust-utf8-cstr
ExclusiveArch: %{rust_arches}
- rust-utf8-ranges
ExclusiveArch: %{rust_arches}
- rust-utf8-width
ExclusiveArch: %{rust_arches}
- rust-utf8parse
ExclusiveArch: %{rust_arches}
- rust-uuid
ExclusiveArch: %{rust_arches}
- rust-uuid0.7
ExclusiveArch: %{rust_arches}
- rust-v_escape
ExclusiveArch: %{rust_arches}
- rust-v_escape_derive
ExclusiveArch: %{rust_arches}
- rust-v_frame
ExclusiveArch: %{rust_arches}
- rust-v_htmlescape
ExclusiveArch: %{rust_arches}
- rust-value-bag
ExclusiveArch: %{rust_arches}
- rust-varlink
ExclusiveArch: %{rust_arches}
- rust-varlink-cli
ExclusiveArch: %{rust_arches}
- rust-varlink_generator
ExclusiveArch: %{rust_arches}
- rust-varlink_parser
ExclusiveArch: %{rust_arches}
- rust-varlink_stdinterfaces
ExclusiveArch: %{rust_arches}
- rust-vcpkg
ExclusiveArch: %{rust_arches}
- rust-vec-arena
ExclusiveArch: %{rust_arches}
- rust-vec_map
ExclusiveArch: %{rust_arches}
- rust-vergen
ExclusiveArch: %{rust_arches}
- rust-vergen3
ExclusiveArch: %{rust_arches}
- rust-version
ExclusiveArch: %{rust_arches}
- rust-version-compare
ExclusiveArch: %{rust_arches}
- rust-version-sync
ExclusiveArch: %{rust_arches}
- rust-version-sync0.8
ExclusiveArch: %{rust_arches}
- rust-version_check
ExclusiveArch: %{rust_arches}
- rust-versions
ExclusiveArch: %{rust_arches}
- rust-virtio-bindings
ExclusiveArch: x86_64 aarch64 ppc64le
- rust-vm-memory
ExclusiveArch: x86_64 aarch64 ppc64le
- rust-vmm-sys-util
ExclusiveArch: x86_64 aarch64 ppc64le
- rust-vmw_backdoor
ExclusiveArch: %{rust_arches}
- rust-void
ExclusiveArch: %{rust_arches}
- rust-vsprintf
ExclusiveArch: %{rust_arches}
- rust-vte
ExclusiveArch: %{rust_arches}
- rust-vte0.3
ExclusiveArch: %{rust_arches}
- rust-vte_generate_state_changes
ExclusiveArch: %{rust_arches}
- rust-wait-timeout
ExclusiveArch: %{rust_arches}
- rust-waker-fn
ExclusiveArch: %{rust_arches}
- rust-walkdir
ExclusiveArch: %{rust_arches}
- rust-want
ExclusiveArch: %{rust_arches}
- rust-warp
ExclusiveArch: %{rust_arches}
- rust-warp0.2
ExclusiveArch: %{rust_arches}
- rust-wasm-bindgen
ExclusiveArch: %{rust_arches}
- rust-wasm-bindgen-backend
ExclusiveArch: %{rust_arches}
- rust-wasm-bindgen-futures
ExclusiveArch: %{rust_arches}
- rust-wasm-bindgen-macro
ExclusiveArch: %{rust_arches}
- rust-wasm-bindgen-macro-support
ExclusiveArch: %{rust_arches}
- rust-wasm-bindgen-shared
ExclusiveArch: %{rust_arches}
- rust-wasm-bindgen-test
ExclusiveArch: %{rust_arches}
- rust-wasm-bindgen-test-macro
ExclusiveArch: %{rust_arches}
- rust-wasmer_enumset
ExclusiveArch: %{rust_arches}
- rust-wasmer_enumset_derive
ExclusiveArch: %{rust_arches}
- rust-wasmparser
ExclusiveArch: %{rust_arches}
- rust-wasmtime-cache
ExclusiveArch: %{rust_arches}
- rust-wasmtime-environ
ExclusiveArch: %{rust_arches}
- rust-wasmtime-fiber
ExclusiveArch: %{rust_arches}
- rust-wast
ExclusiveArch: %{rust_arches}
- rust-wat
ExclusiveArch: %{rust_arches}
- rust-watchman_client
ExclusiveArch: %{rust_arches}
- rust-wayland-client
ExclusiveArch: %{rust_arches}
- rust-wayland-commons
ExclusiveArch: %{rust_arches}
- rust-wayland-cursor
ExclusiveArch: %{rust_arches}
- rust-wayland-egl
ExclusiveArch: %{rust_arches}
- rust-wayland-protocols
ExclusiveArch: %{rust_arches}
- rust-wayland-scanner
ExclusiveArch: %{rust_arches}
- rust-wayland-server
ExclusiveArch: %{rust_arches}
- rust-wayland-sys
ExclusiveArch: %{rust_arches}
- rust-web-sys
ExclusiveArch: %{rust_arches}
- rust-webbrowser
ExclusiveArch: %{rust_arches}
- rust-webkit2gtk
ExclusiveArch: %{rust_arches}
- rust-webkit2gtk-sys
ExclusiveArch: %{rust_arches}
- rust-webpki
ExclusiveArch: %{rust_arches}
- rust-webpki-roots
ExclusiveArch: %{rust_arches}
- rust-websocket
ExclusiveArch: %{rust_arches}
- rust-websocket-base
ExclusiveArch: %{rust_arches}
- rust-weezl
ExclusiveArch: %{rust_arches}
- rust-which
ExclusiveArch: %{rust_arches}
- rust-wide
ExclusiveArch: %{rust_arches}
- rust-wild
ExclusiveArch: %{rust_arches}
- rust-wildmatch
ExclusiveArch: %{rust_arches}
- rust-winit
ExclusiveArch: %{rust_arches}
- rust-witx
ExclusiveArch: %{rust_arches}
- rust-ws
ExclusiveArch: %{rust_arches}
- rust-wyz
ExclusiveArch: %{rust_arches}
- rust-x11
ExclusiveArch: %{rust_arches}
- rust-x11-clipboard
ExclusiveArch: %{rust_arches}
- rust-x11-dl
ExclusiveArch: %{rust_arches}
- rust-xattr
ExclusiveArch: %{rust_arches}
- rust-xcb
ExclusiveArch: %{rust_arches}
- rust-xcursor
ExclusiveArch: %{rust_arches}
- rust-xdg
ExclusiveArch: %{rust_arches}
- rust-xi-unicode
ExclusiveArch: %{rust_arches}
- rust-xkbcommon
ExclusiveArch: %{rust_arches}
- rust-xml-rs
ExclusiveArch: %{rust_arches}
- rust-xml5ever
ExclusiveArch: %{rust_arches}
- rust-xmlparser
ExclusiveArch: %{rust_arches}
- rust-xmltree
ExclusiveArch: %{rust_arches}
- rust-xmlwriter
ExclusiveArch: %{rust_arches}
- rust-xz2
ExclusiveArch: %{rust_arches}
- rust-y4m
ExclusiveArch: %{rust_arches}
- rust-yaml-rust
ExclusiveArch: %{rust_arches}
- rust-yaml-rust0.3
ExclusiveArch: %{rust_arches}
- rust-ybaas
ExclusiveArch: %{rust_arches}
- rust-ytop
ExclusiveArch: %{rust_arches}
- rust-yubibomb
ExclusiveArch: %{rust_arches}
- rust-yup-oauth2
ExclusiveArch: %{rust_arches}
- rust-zbase32
ExclusiveArch: %{rust_arches}
- rust-zbus
ExclusiveArch: %{rust_arches}
- rust-zbus_macros
ExclusiveArch: %{rust_arches}
- rust-zcomponents
ExclusiveArch: %{rust_arches}
- rust-zeroize
ExclusiveArch: %{rust_arches}
- rust-zeroize_derive
ExclusiveArch: %{rust_arches}
- rust-zincati
ExclusiveArch: %{rust_arches}
- rust-zip
ExclusiveArch: %{rust_arches}
- rust-zoneinfo_compiled
ExclusiveArch: %{rust_arches}
- rust-zopfli
ExclusiveArch: %{rust_arches}
- rust-zoxide
ExclusiveArch: %{rust_arches}
- rust-zram-generator
ExclusiveArch: %{rust_arches}
- rust-zstd
ExclusiveArch: %{rust_arches}
- rust-zstd-safe
ExclusiveArch: %{rust_arches}
- rust-zstd-sys
ExclusiveArch: %{rust_arches}
- rust-zvariant
ExclusiveArch: %{rust_arches}
- rust-zvariant_derive
ExclusiveArch: %{rust_arches}
- s390utils
ExclusiveArch: s390 s390x
- safetyblanket
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc64le
- sagemath
ExclusiveArch: aarch64 %{ix86} x86_64 ppc sparcv9
- sbcl
ExclusiveArch: %{arm} %{ix86} x86_64 ppc sparcv9 aarch64
- sbd
ExclusiveArch: i686 x86_64 s390x aarch64 ppc64le
- sbsigntools
ExclusiveArch: x86_64 aarch64 %{arm} %{ix86}
- seabios
ExclusiveArch: x86_64
- seadrive-gui
ExclusiveArch: %{qt5_qtwebengine_arches}
- seafile-client
ExclusiveArch: %{qt5_qtwebengine_arches}
- seamonkey
ExclusiveArch: x86_64
- seqan3
ExclusiveArch: %{power64} x86_64 aarch64
- servicelog
ExclusiveArch: ppc %{power64}
- sgabios
ExclusiveArch: %{ix86} x86_64
- sharpfont
ExclusiveArch: %mono_arches
- sharpziplib
ExclusiveArch: %{mono_arches}
- shim
ExclusiveArch: %{efi}
- shim-unsigned-aarch64
ExclusiveArch: aarch64
- shim-unsigned-x64
ExclusiveArch: x86_64
- sigul
ExclusiveArch: x86_64
- skychart
ExclusiveArch: %{fpc_arches}
- snapd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- soup-sharp
ExclusiveArch: %{mono_arches}
- sparkleshare
ExclusiveArch: %{mono_arches}
- spicctrl
ExclusiveArch: %{ix86} x86_64
- spice
ExclusiveArch: x86_64
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- springlobby
ExclusiveArch: %{ix86} x86_64
- squeekboard
ExclusiveArch: %{rust_arches}
- startdde
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- statsd
ExclusiveArch: %{nodejs_arches} noarch
- stratis-cli
ExclusiveArch: %{rust_arches} noarch
- stratisd
ExclusiveArch: %{rust_arches}
ExclusiveArch: ${rust_arches}
- stripesnoop
ExclusiveArch: %{ix86} x86_64
- supercollider
ExclusiveArch: %{qt5_qtwebengine_arches}
- supermin
ExclusiveArch: %{kernel_arches}
- svt-av1
ExclusiveArch: x86_64
- svt-vp9
ExclusiveArch: x86_64
- swift-lang
ExclusiveArch: x86_64 aarch64
- sysbench
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips}
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64 ppc64le s390x
- syslinux
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
- taglib-sharp
ExclusiveArch: %{mono_arches}
- tarantool
ExclusiveArch: %{ix86} x86_64
- tboot
ExclusiveArch: %{ix86} x86_64
- tdlib
ExclusiveArch: x86_64
- templates_parser
ExclusiveArch: %GPRbuild_arches
- ternimal
ExclusiveArch: %{rust_arches}
- testcloud
ExclusiveArch: %{kernel_arches} noarch
- themonospot-base
ExclusiveArch: %mono_arches
- themonospot-console
ExclusiveArch: %mono_arches
- themonospot-gui-gtk
ExclusiveArch: %mono_arches
- themonospot-plugin-avi
ExclusiveArch: %mono_arches
- themonospot-plugin-mkv
ExclusiveArch: %mono_arches
- thermald
ExclusiveArch: %{ix86} x86_64
- tilix
ExclusiveArch: %{ldc_arches}
- tmux-top
ExclusiveArch: %{go_arches}
- tomboy
ExclusiveArch: %{mono_arches}
- topojson-client
ExclusiveArch: %{nodejs_arches} noarch
- topojson-server
ExclusiveArch: %{nodejs_arches} noarch
- topojson-simplify
ExclusiveArch: %{nodejs_arches} noarch
- torbrowser-launcher
ExclusiveArch: %{ix86} x86_64
- tuned-profiles-nfv-host-bin
ExclusiveArch: %{ix86} x86_64
- uClibc
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips}
- ucx
ExclusiveArch: aarch64 ppc64le x86_64
- ugene
ExclusiveArch: %{ix86} x86_64
- uglify-js
ExclusiveArch: %{nodejs_arches} noarch
- uglify-js1
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- unetbootin
ExclusiveArch: %{ix86} x86_64
- ursa-major
ExclusiveArch: noarch aarch64 ppc64le s390x x86_64
- usd
ExclusiveArch: x86_64
- v8-314
ExclusiveArch: %{ix86} x86_64 %{arm} mips mipsel ppc ppc64
- valgrind
ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x armv7hl aarch64
- vboot-utils
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- vim-go
ExclusiveArch: %{?golang_arches}%{!?golang_arches:%{ix86} x86_64 %{arm}}
- virt-p2v
ExclusiveArch: x86_64
- virt-v2v
ExclusiveArch: x86_64
- virtualbox-guest-additions
ExclusiveArch: i686 x86_64
- vkd3d
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- vmaf
ExclusiveArch: x86_64
- vmem
ExclusiveArch: x86_64
- vmemcache
ExclusiveArch: x86_64 ppc64 ppc64le s390x aarch64
- vrq
ExclusiveArch: %{ix86} x86_64
- warsow
ExclusiveArch: %{ix86} x86_64 %{arm}
- warsow-data
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{ix86} x86_64 %{arm}
- webkit2-sharp
ExclusiveArch: %mono_arches
- wine
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
ExclusiveArch: %{ix86} %{arm}
- wine-dxvk
ExclusiveArch: %{ix86} x86_64
- winetricks
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- wxMaxima
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc sparcv9
- x2goclient
ExclusiveArch: x86_64
- xe-guest-utilities-latest
ExclusiveArch: %{ix86} x86_64
- xen
ExclusiveArch: %{ix86} x86_64 armv7hl aarch64
- xmlada
ExclusiveArch: %{GPRbuild_arches}
- xorg-x11-drv-armsoc
ExclusiveArch: %{arm} aarch64
- xorg-x11-drv-intel
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-openchrome
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-vesa
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-vmware
ExclusiveArch: %{ix86} x86_64 ia64
- xsp
ExclusiveArch: %mono_arches
- yarnpkg
ExclusiveArch: %{nodejs_arches} noarch
- zeromq-ada
ExclusiveArch: %{GPRbuild_arches}
- zig
ExclusiveArch: %{zig_arches}
- zlib-ada
ExclusiveArch: %{GPRbuild_arches}
- zlib-ng
ExclusiveArch: aarch64 i686 ppc64le s390x x86_64
- zola
ExclusiveArch: %{rust_arches}
2 years, 10 months
Architecture specific change in rpms/netcdf.git
by githook-noreply@fedoraproject.org
The package rpms/netcdf.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/netcdf.git/commit/?id=2c669adb34a....
Change:
+%ifnarch armv7hl
Thanks.
Full change:
============
commit 2c669adb34afcf70b6d96ee729bff6fb7658caf5
Author: Orion Poplawski <orion(a)nwra.com>
Date: Tue Aug 10 19:39:44 2021 -0600
Exclude mpi tests on armv7hl due to hanging test
diff --git a/netcdf.spec b/netcdf.spec
index f024b06..83e8112 100644
--- a/netcdf.spec
+++ b/netcdf.spec
@@ -244,12 +244,15 @@ fail=1
make -C build check || ( cat build/*/test-suite.log && exit $fail )
# Allow openmpi to run with more processes than cores
export OMPI_MCA_rmaps_base_oversubscribe=1
+# openmpi test hangs on armv7hl in h5_test after tst_h_rename
+%ifnarch armv7hl
for mpi in %{mpi_list}
do
module load mpi/$mpi-%{_arch}
make -C $mpi check || ( cat $mpi/*/test-suite.log && exit $fail )
module purge
done
+%endif
%ldconfig_scriptlets
2 years, 10 months
Architecture specific change in rpms/octave.git
by githook-noreply@fedoraproject.org
The package rpms/octave.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/octave.git/commit/?id=1ef35b6275c....
Change:
+%ifarch ppc64le
Thanks.
Full change:
============
commit 1ef35b6275c8d479dfba5bc8fa7bd594f57665bf
Author: Orion Poplawski <orion(a)nwra.com>
Date: Tue Aug 10 16:45:25 2021 -0600
Tests segfault on ppc64le
diff --git a/octave.spec b/octave.spec
index 3449198..a4b4794 100644
--- a/octave.spec
+++ b/octave.spec
@@ -376,7 +376,12 @@ $Xorg -noreset +extension GLX +extension RANDR +extension RENDER -logfile ./xorg
sleep 2
export DISPLAY=:99
export FLEXIBLAS=netlib
-make check %{?el7:|| :}
+%ifarch ppc64le
+# liboctave/array/dMatrix.cc-tst segfaults
+make check || :
+%else
+make check
+%endif
%ldconfig_scriptlets
commit 9c0483f76512c9bc2d779ad4c89b3c685b23f5a3
Author: Orion Poplawski <orion(a)nwra.com>
Date: Mon Aug 9 19:41:28 2021 -0600
Update to 6.3.0
diff --git a/.gitignore b/.gitignore
index b1681ba..e912b2b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -37,3 +37,4 @@ octave-3.2.4.tar.bz2
/octave-6.1.0.tar.lz
/octave-6.1.0-docs.tar.lz
/octave-6.2.0.tar.lz
+/octave-6.3.0.tar.lz
diff --git a/octave.spec b/octave.spec
index 0280e12..3449198 100644
--- a/octave.spec
+++ b/octave.spec
@@ -1,5 +1,5 @@
# From src/version.h:#define OCTAVE_API_VERSION
-%global octave_api api-v55
+%global octave_api api-v56
%global macrosdir %(d=%{_rpmconfigdir}/macros.d; [ -d $d ] || d=%{_sysconfdir}/rpm; echo $d)
@@ -36,8 +36,8 @@
Name: octave
Epoch: 6
-Version: 6.2.0
-Release: 2%{?dist}
+Version: 6.3.0
+Release: 1%{?dist}
Summary: A high-level language for numerical computations
License: GPLv3+
URL: http://www.octave.org
@@ -426,6 +426,9 @@ make check %{?el7:|| :}
%{_pkgdocdir}/refcard*.pdf
%changelog
+* Tue Aug 10 2021 Orion Poplawski <orion(a)nwra.com> - 6:6.3.0-1
+- Update to 6.3.0
+
* Mon Aug 09 2021 Orion Poplawski <orion(a)nwra.com> - 6:6.2.0-1
- Update to 6.2.0
diff --git a/sources b/sources
index 6edea8c..07f5390 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (octave-6.2.0.tar.lz) = bcd5c018c6761fff76f1495b9a7bdac3fa71722233ee9230e682b16215d2c95302944b910a540fbc89215148b7037727561b4ef00f3b5a48da898dcbba2b76fe
+SHA512 (octave-6.3.0.tar.lz) = c5acef1964373a1992d608736cbf433d1147a468504789bb30a52688cd60cdd050300e68b6d691c38e0fd3925c102feba208b2256bb463369bddac5a02d956e7
commit 66154bafb206b783460f95ffd22bf08bb1df2655
Author: Orion Poplawski <orion(a)nwra.com>
Date: Fri Jan 29 21:15:54 2021 -0700
Update to 6.2.0
diff --git a/.gitignore b/.gitignore
index 07bf830..b1681ba 100644
--- a/.gitignore
+++ b/.gitignore
@@ -34,3 +34,6 @@ octave-3.2.4.tar.bz2
/octave-5.1.0-docs.tar.lz
/octave-5.2.0.tar.lz
/octave-5.2.0-docs.tar.lz
+/octave-6.1.0.tar.lz
+/octave-6.1.0-docs.tar.lz
+/octave-6.2.0.tar.lz
diff --git a/octave.spec b/octave.spec
index 66049e5..0280e12 100644
--- a/octave.spec
+++ b/octave.spec
@@ -1,12 +1,12 @@
# From src/version.h:#define OCTAVE_API_VERSION
-%global octave_api api-v53
+%global octave_api api-v55
%global macrosdir %(d=%{_rpmconfigdir}/macros.d; [ -d $d ] || d=%{_sysconfdir}/rpm; echo $d)
%global builddocs 1
-# Use Qt5 on Fedora and EL8+
-%if 0%{?fedora} || 0%{?rhel} >= 8
+# Use Qt5 on Fedora and EL7+
+%if 0%{?fedora} || 0%{?rhel} >= 7
%bcond_without qt5
%else
%bcond_with qt5
@@ -36,8 +36,8 @@
Name: octave
Epoch: 6
-Version: 5.2.0
-Release: 14%{?dist}
+Version: 6.2.0
+Release: 2%{?dist}
Summary: A high-level language for numerical computations
License: GPLv3+
URL: http://www.octave.org
@@ -48,14 +48,6 @@ Source0: https://ftp.gnu.org/gnu/octave/octave-%{version}.tar.lz
Source1: macros.octave
Source2: xorg.conf
# Prebuilt docs from Fedora for EPEL
-Source3: octave-5.2.0-docs.tar.lz
-# SUNDIALS 3 support
-# https://savannah.gnu.org/bugs/?52475
-Patch1: octave-sundials3.patch
-# Fix readline 8.1 bracketed-paste support
-# https://savannah.gnu.org/bugs/?func=detailitem&item_id=59483
-# Backported patches
-Patch2: octave-readline.patch
Provides: octave(api) = %{octave_api}
Provides: bundled(gnulib)
@@ -225,13 +217,6 @@ This package contains documentation for Octave.
%if %{with blas64}
sed -i -e 's/OCTAVE_CHECK_LIB(suitesparseconfig,/OCTAVE_CHECK_LIB(suitesparseconfig64,/' configure.ac
%endif
-# EPEL7's autoconf/automake is too old so don't do
-# unneeded patches there
-%if 0%{?fedora}
-%patch1 -p1 -b .sundials3
-%patch2 -p1 -b .readline
-autoreconf -i
-%endif
%build
export AR=%{_bindir}/gcc-ar
@@ -295,9 +280,6 @@ cp -a doc/refcard/*.pdf %{buildroot}%{_pkgdocdir}/
# No info directory
rm -f %{buildroot}%{_infodir}/dir
-# EL7's makeinfo doesn't support @sortas, so use prebuilt docs
-%{?el7:tar xvf %SOURCE3 -C %{buildroot}}
-
# Make library links
mkdir -p %{buildroot}%{_sysconfdir}/ld.so.conf.d
echo "%{_libdir}/octave/%{version}%{?rctag}" > %{buildroot}%{_sysconfdir}/ld.so.conf.d/octave-%{_arch}.conf
@@ -444,6 +426,9 @@ make check %{?el7:|| :}
%{_pkgdocdir}/refcard*.pdf
%changelog
+* Mon Aug 09 2021 Orion Poplawski <orion(a)nwra.com> - 6:6.2.0-1
+- Update to 6.2.0
+
* Thu Jul 22 2021 Fedora Release Engineering <releng(a)fedoraproject.org> - 6:5.2.0-14
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
diff --git a/sources b/sources
index 824eb37..6edea8c 100644
--- a/sources
+++ b/sources
@@ -1,2 +1 @@
-SHA512 (octave-5.2.0.tar.lz) = e8f64c5703548e3f209aeaae51c3f6907db5189ec7790600be6f335d9edeb183d9dcfbf5ec711c5e30aa953877dd176a1c506ae90c505a52ed74dba6ce69c7f5
-SHA512 (octave-5.2.0-docs.tar.lz) = 6b1bf45446c7717153901ca0f39406c1b7dab6016012c51ccdce2f102f5ffae69262d3578a63adbc426910c31bbb7cee11221e5e224bb813630d829ed21b9ab6
+SHA512 (octave-6.2.0.tar.lz) = bcd5c018c6761fff76f1495b9a7bdac3fa71722233ee9230e682b16215d2c95302944b910a540fbc89215148b7037727561b4ef00f3b5a48da898dcbba2b76fe
2 years, 10 months