From 625cdb05d71fd60eecad5f4673fa94af3472061b Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Fri, 22 May 2020 16:02:26 +0200 Subject: gnu: Add pypy3. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * gnu/packages/python.scm (pypy3): New public variable. * gnu/packages/patches/pypy3-7.3.1-fix-tests.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it Signed-off-by: Ludovic Courtès --- gnu/packages/python.scm | 171 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) (limited to 'gnu/packages/python.scm') diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm index 1ec002df73..9469f89bcf 100644 --- a/gnu/packages/python.scm +++ b/gnu/packages/python.scm @@ -80,12 +80,17 @@ (define-module (gnu packages python) #:use-module (gnu packages) #:use-module (gnu packages base) #:use-module (gnu packages bash) + #:use-module (gnu packages certs) + #:use-module (gnu packages check) #:use-module (gnu packages compression) #:use-module (gnu packages dbm) #:use-module (gnu packages hurd) #:use-module (gnu packages libffi) + #:use-module (gnu packages ncurses) #:use-module (gnu packages pkg-config) + #:use-module (gnu packages python-xyz) #:use-module (gnu packages readline) + #:use-module (gnu packages shells) #:use-module (gnu packages sqlite) #:use-module (gnu packages tcl) #:use-module (gnu packages tls) @@ -631,3 +636,169 @@ (define-public micropython compatible with normal Python as possible to allow you to transfer code with ease from the desktop to a microcontroller or embedded system.") (license license:expat))) + +(define-public pypy3 + (package + (name "pypy3") + (version "7.3.1") + (source (origin + (method url-fetch) + (uri (string-append "https://bitbucket.org/pypy/pypy/downloads/" ; + "pypy3.6-v" version "-src.tar.bz2")) + (sha256 + (base32 + "10zsk8jby8j6visk5mzikpb1cidvz27qq4pfpa26jv53klic6b0c")) + (patches (search-patches "pypy3-7.3.1-fix-tests.patch")))) + (build-system gnu-build-system) + (native-inputs + `(("python-2" ,python-2) + ("pkg-config" ,pkg-config) + ("tar" ,tar) ; Required for package.py + ("python2-pycparser" ,python2-pycparser) + ("python2-hypothesis" ,python2-hypothesis) + ("nss-certs" ,nss-certs) ; For ssl tests + ("gzip" ,gzip))) + (inputs + `(("libffi" ,libffi) + ("zlib" ,zlib) + ("ncurses" ,ncurses) + ("openssl" ,openssl) + ("expat" ,expat) + ("bzip2" ,bzip2) + ("sqlite" ,sqlite) + ("gdbm" ,gdbm) + ("tcl" ,tcl) + ("tk" ,tk) + ("glibc" ,glibc) + ("bash-minimal" ,bash-minimal) ; Used as /bin/sh + ("xz" ,xz))) ; liblzma + (arguments + `(#:tests? #f ;FIXME: Disabled for now, there are many tests failing. + #:modules ((ice-9 ftw) (ice-9 match) + (guix build utils) (guix build gnu-build-system)) + #:phases (modify-phases %standard-phases + (delete 'configure) + (add-after 'unpack 'patch-source + (lambda* (#:key inputs outputs #: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 = ['" + (assoc-ref inputs "tcl") + "/include', '" + (assoc-ref inputs "tk") + "/include']"))) + (substitute* '("lib_pypy/_curses_build.py") + ;; Find curses + (("/usr/local") (assoc-ref inputs "ncurses"))) + (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'") + (string-append "libname = '" + (assoc-ref inputs "sqlite") + "/lib/libsqlite3.so.0'"))) + (substitute* '("lib-python/3/subprocess.py") + ;; Fix shell path + (("/bin/sh") + (string-append (assoc-ref inputs "bash-minimal") "/bin/sh"))) + (substitute* '("lib-python/3/distutils/unixccompiler.py") + ;; gcc-toolchain does not provide symlink cc -> gcc + (("\"cc\"") "\"gcc\"")) + #t)) + (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)) + #t))) + (replace 'build + (lambda* (#:key inputs #:allow-other-keys) + (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")) + ;; Build c modules and package everything, so tests work. + (with-directory-excursion "pypy/tool/release" + (unsetenv "PYTHONPATH") ; Do not use the system’s python libs: + ; AttributeError: module 'enum' has no + ; attribute 'IntFlag' + (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 + ; access ~/.cache/pip + ;; Run library tests only (no interpreter unit + ;; tests). This is what Gentoo does. + (invoke + "python2" + "pypy/test_all.py" + "--pypy=pypy/tool/release/pypy-dist/bin/pypy3" + "lib-python")) + (format #t "test suite not run~%")) + #t)) + (replace 'install + (lambda* (#:key inputs outputs #:allow-other-keys) + (with-directory-excursion "pypy/tool/release" + ;; Delete test data. + (for-each + (lambda (x) + (delete-file-recursively (string-append + "pypy-dist/lib-python/3/" x))) + '("tkinter/test" + "test" + "sqlite3/test" + "lib2to3/tests" + "idlelib/idle_test" + "distutils/tests" + "ctypes/test" + "unittest/test")) + ;; Patch shebang referencing python2 + (substitute* '("pypy-dist/lib-python/3/cgi.py" + "pypy-dist/lib-python/3/encodings/rot_13.py") + (("#!.+/bin/python") + (string-append "#!" (assoc-ref outputs "out") "/bin/pypy3"))) + (with-fluids ((%default-port-encoding "ISO-8859-1")) + (substitute* '("pypy-dist/lib_pypy/_md5.py" + "pypy-dist/lib_pypy/_sha1.py") + (("#!.+/bin/python") + (string-append "#!" (assoc-ref outputs "out") "/bin/pypy3")))) + (copy-recursively "pypy-dist" (assoc-ref outputs "out"))) + #t))))) + (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"))))) + -- cgit v1.2.3