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))

Reply via email to