guix_mirror_bot pushed a commit to branch master
in repository guix.
commit 7036e5f60055eab2321a6ff300d2cb6120efa3d6
Author: Maxim Cournoyer <[email protected]>
AuthorDate: Mon Oct 6 19:55:03 2025 +0900
gnu: pypy3: Bootstrap via pypy2.
* gnu/packages/pypy.scm (pypy3): Inherit from pypy2. Delete duplicate
fields.
[#:phases] {build}: Use pypy2 instead of python2.
[native-inputs] {python2}: Replace with pypy2. Through the inherited pypy2
native inputs: remove python2-pycparser; add python2-cffi; remove gzip and
tar.
[inputs]: Through the pypy2 inherited inputs, remove glibc.
Change-Id: Ie9761056711aa6df002a1bff3aa98a9dcf90a738
---
gnu/packages/pypy.scm | 261 +++++++++++++++++++++-----------------------------
1 file changed, 110 insertions(+), 151 deletions(-)
diff --git a/gnu/packages/pypy.scm b/gnu/packages/pypy.scm
index 886450edbc..ba04a0b920 100644
--- a/gnu/packages/pypy.scm
+++ b/gnu/packages/pypy.scm
@@ -199,6 +199,7 @@ Python code natively, including C extensions.")
(define-public pypy
(package
+ (inherit pypy2)
(name "pypy")
(version "7.3.20")
(source (origin
@@ -208,161 +209,119 @@ Python code natively, including C extensions.")
(sha256
(base32
"1yq6n888fxfdqid29q3w8bn7ii800bjkf44w82kjwgh0c2kxv1kp"))))
- (build-system gnu-build-system)
(arguments
- (list
- #:tests? #f ;FIXME: 43 out of 364 tests are failing
-
- ;; XXX: ELF file 'pypy.debug' makes 'validate-needed-in-runpath' throw:
- ;; <https://issues.guix.gnu.org/57653>.
- #:validate-runpath? #f
-
- #:modules '((ice-9 ftw) (ice-9 match)
- (guix build utils) (guix build gnu-build-system))
- #:disallowed-references (list nss-certs)
- #:phases
- #~(modify-phases %standard-phases
- (delete 'configure)
- (add-after 'unpack 'patch-source
- (lambda* (#:key inputs #:allow-other-keys)
- (substitute* '("rpython/rlib/clibffi.py")
- ;; find_library does not work for libc
- (("ctypes\\.util\\.find_library\\('c'\\)") "'libc.so'"))
- (substitute* '("lib_pypy/cffi/_pycparser/ply/cpp.py")
- ;; Make reproducible (XXX: unused?)
- (("time\\.localtime\\(\\)") "time.gmtime(0)"))
- (substitute* '("pypy/module/sys/version.py")
- ;; Make reproducible
- (("t\\.gmtime\\(\\)") "t.gmtime(0)"))
- (substitute* '("lib_pypy/_tkinter/tklib_build.py")
- ;; Link to versioned libtcl and libtk
- (("linklibs = \\['tcl', 'tk'\\]")
- "linklibs = ['tcl8.6', 'tk8.6']")
- (("incdirs = \\[\\]")
- (string-append
- "incdirs = ['"
- #$(this-package-input "tcl") "/include', '"
- #$(this-package-input "tk") "/include']")))
- (substitute* '("lib_pypy/_curses_build.py")
- ;; Find curses
- (("/usr/local")
- #$(this-package-input "ncurses")))
- (substitute* '("lib_pypy/_dbm.py")
- ;; Use gdbm compat library, so we don’t need to pull
- ;; in bdb.
- (("ctypes.util.find_library\\('db'\\)")
- (format #f "~s" (search-input-file
- inputs "lib/libgdbm_compat.so"))))
- (substitute* '("lib_pypy/_sqlite3_build.py")
- ;; Always use search paths
- (("sys\\.platform\\.startswith\\('freebsd'\\)") "True")
- ;; Find sqlite3
- (("/usr/local") (assoc-ref inputs "sqlite"))
- (("libname = 'sqlite3'")
- (format #f "libname = ~s"
- (search-input-file inputs "lib/libsqlite3.so.0"))))
- (substitute* '("lib-python/3/subprocess.py")
- ;; Fix shell path
- (("/bin/sh")
- (search-input-file inputs "/bin/sh")))
- (substitute* '("lib-python/3/distutils/unixccompiler.py")
- ;; gcc-toolchain does not provide symlink cc -> gcc
- (("\"cc\"") "\"gcc\""))))
- (add-after 'unpack 'set-source-file-times-to-1980
- ;; copied from python package, required by zip testcase
- (lambda _
- (let ((circa-1980 (* 10 366 24 60 60)))
- (ftw "." (lambda (file stat flag)
- (utime file circa-1980 circa-1980)
- #t)))))
- (replace 'build
- (lambda _
- (with-directory-excursion "pypy/goal"
- ;; Build with jit optimization.
- (invoke "python2"
- "../../rpython/bin/rpython"
- (string-append "--make-jobs="
- (number->string (parallel-job-count)))
- "-Ojit"
- "targetpypystandalone"
- "--allworkingmodules"))
- ;; Build c modules and package everything, so tests work.
- (with-directory-excursion "pypy/tool/release"
- (invoke "python2" "package.py"
- "--archive-name" "pypy-dist"
- "--builddir" (getcwd)))))
- (replace 'check
- (lambda* (#:key tests? #:allow-other-keys)
- (if tests?
- (begin
- (setenv "HOME" "/tmp") ; test_with_pip tries to
+ (substitute-keyword-arguments (package-arguments pypy2)
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (replace 'patch-source
+ ;; Overridden from pypy2 because some file names have changed.
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* '("rpython/rlib/clibffi.py")
+ ;; find_library does not work for libc
+ (("ctypes\\.util\\.find_library\\('c'\\)") "'libc.so'"))
+ (substitute* '("lib_pypy/cffi/_pycparser/ply/cpp.py")
+ ;; Make reproducible (XXX: unused?)
+ (("time\\.localtime\\(\\)") "time.gmtime(0)"))
+ (substitute* '("pypy/module/sys/version.py")
+ ;; Make reproducible
+ (("t\\.gmtime\\(\\)") "t.gmtime(0)"))
+ (substitute* '("lib_pypy/_tkinter/tklib_build.py")
+ ;; Link to versioned libtcl and libtk
+ (("linklibs = \\['tcl', 'tk'\\]")
+ "linklibs = ['tcl8.6', 'tk8.6']")
+ (("incdirs = \\[\\]")
+ (string-append
+ "incdirs = ['"
+ #$(this-package-input "tcl") "/include', '"
+ #$(this-package-input "tk") "/include']")))
+ (substitute* '("lib_pypy/_curses_build.py")
+ ;; Find curses
+ (("/usr/local")
+ #$(this-package-input "ncurses")))
+ (substitute* '("lib_pypy/_dbm.py")
+ ;; Use gdbm compat library, so we don’t need to pull
+ ;; in bdb.
+ (("ctypes.util.find_library\\('db'\\)")
+ (format #f "~s" (search-input-file
+ inputs "lib/libgdbm_compat.so"))))
+ (substitute* '("lib_pypy/_sqlite3_build.py")
+ ;; Always use search paths
+ (("sys\\.platform\\.startswith\\('freebsd'\\)") "True")
+ ;; Find sqlite3
+ (("/usr/local") (assoc-ref inputs "sqlite"))
+ (("libname = 'sqlite3'")
+ (format #f "libname = ~s"
+ (search-input-file inputs "lib/libsqlite3.so.0"))))
+ (substitute* '("lib-python/3/subprocess.py")
+ ;; Fix shell path
+ (("/bin/sh")
+ (search-input-file inputs "/bin/sh")))
+ (substitute* '("lib-python/3/distutils/unixccompiler.py")
+ ;; gcc-toolchain does not provide symlink cc -> gcc
+ (("\"cc\"") (format #f "~s" #$(cc-for-target))))))
+ (replace 'build
+ (lambda _
+ (with-directory-excursion "pypy/goal"
+ ;; Build with jit optimization.
+ (invoke "pypy2"
+ "../../rpython/bin/rpython"
+ (string-append "--cc=" #$(cc-for-target))
+ (string-append "--make-jobs="
+ (number->string (parallel-job-count)))
+ "-Ojit"
+ "targetpypystandalone"
+ "--allworkingmodules"))
+ ;; Build c modules and package everything, so tests work.
+ (with-directory-excursion "pypy/tool/release"
+ (invoke "pypy2" "package.py"
+ "--archive-name" "pypy-dist"
+ "--builddir" (getcwd)))))
+ (replace 'check
+ (lambda* (#:key tests? #:allow-other-keys)
+ (if tests?
+ (begin
+ (setenv "HOME" "/tmp") ; test_with_pip tries to
; access ~/.cache/pip
- ;; Run library tests only (no interpreter unit tests).
- ;; This is what Gentoo does.
- (invoke "python" "pypy/test_all.py"
- "--pypy=pypy/tool/release/pypy-dist/bin/pypy3"
- "lib-python"))
- (format #t "test suite not run~%"))))
- (replace 'install
- (lambda* (#:key inputs outputs #:allow-other-keys)
- (let* ((bin-pypy3 (string-append #$output "/bin/pypy3"))
- (shebang-match-python "#!.+/bin/python")
- (shebang-pypy3 (string-append "#!" bin-pypy3))
- (dist-dir "pypy/tool/release/pypy-dist"))
- (with-directory-excursion dist-dir
- ;; Delete test data.
- (for-each
- (lambda (x)
- (delete-file-recursively (string-append
- "lib/pypy3.11/" x)))
- '("tkinter/test"
- "test"
- "lib2to3/tests"
- "idlelib/idle_test"
- "distutils/tests"
- "ctypes/test"
- "unittest/test"))
- ;; Patch shebang referencing python.
- (substitute* '("lib/pypy3.11/cgi.py"
- "lib/pypy3.11/encodings/rot_13.py")
- ((shebang-match-python) shebang-pypy3))
- (with-fluids ((%default-port-encoding "ISO-8859-1"))
- (substitute* '("lib/pypy3.11/_md5.py"
- "lib/pypy3.11/_sha1.py")
- ((shebang-match-python) shebang-pypy3))))
- (copy-recursively dist-dir #$output)))))))
+ ;; Run library tests only (no interpreter unit tests).
+ ;; This is what Gentoo does.
+ (invoke "python" "pypy/test_all.py"
+ "--pypy=pypy/tool/release/pypy-dist/bin/pypy3"
+ "lib-python"))
+ (format #t "test suite not run~%"))))
+ (replace 'install
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let* ((bin-pypy3 (string-append #$output "/bin/pypy3"))
+ (shebang-match-python "#!.+/bin/python")
+ (shebang-pypy3 (string-append "#!" bin-pypy3))
+ (dist-dir "pypy/tool/release/pypy-dist"))
+ (with-directory-excursion dist-dir
+ ;; Delete test data.
+ (for-each
+ (lambda (x)
+ (delete-file-recursively (string-append
+ "lib/pypy3.11/" x)))
+ '("tkinter/test"
+ "test"
+ "lib2to3/tests"
+ "idlelib/idle_test"
+ "distutils/tests"
+ "ctypes/test"
+ "unittest/test"))
+ ;; Patch shebang referencing python.
+ (substitute* '("lib/pypy3.11/cgi.py"
+ "lib/pypy3.11/encodings/rot_13.py")
+ ((shebang-match-python) shebang-pypy3))
+ (with-fluids ((%default-port-encoding "ISO-8859-1"))
+ (substitute* '("lib/pypy3.11/_md5.py"
+ "lib/pypy3.11/_sha1.py")
+ ((shebang-match-python) shebang-pypy3))))
+ (copy-recursively dist-dir #$output))))))))
(native-inputs
- (list gzip
- nss-certs ; For ssl tests
- pkg-config
- python-2
- python2-pycparser
- tar)) ; Required for package.py
+ (modify-inputs (package-native-inputs pypy2)
+ (replace "python2" pypy2)))
(inputs
- (list bzip2
- expat
- gdbm
- glibc
- libffi-pic
- ncurses
- openssl
- sqlite
- tcl
- tk
- xz
- zlib))
- (home-page "https://www.pypy.org/")
- (synopsis "Python implementation with just-in-time compilation")
- (description "PyPy is a faster, alternative implementation of the Python
-programming language employing a just-in-time compiler. It supports most
-Python code natively, including C extensions.")
- (license (list license:expat ; pypy itself; _pytest/
- license:psfl ; python standard library in lib-python/
- license:asl2.0 ; dotviewer/font/ and some of lib-python/
- license:gpl3+ ;
./rpython/rlib/rvmprof/src/shared/libbacktrace/dwarf2.*
- license:bsd-3 ; lib_pypy/cffi/_pycparser/ply/
- (license:non-copyleft
- "http://www.unicode.org/copyright.html")))))
+ (modify-inputs (package-inputs pypy2)
+ (append xz)))))
(define-public pypy3
(deprecated-package "pypy3" pypy))