From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp2 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id GCMSMLy3CWGYFwEAgWs5BA (envelope-from ) for ; Tue, 03 Aug 2021 23:40:12 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp2 with LMTPS id KESuK7y3CWGITgAAB5/wlQ (envelope-from ) for ; Tue, 03 Aug 2021 21:40:12 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id C41CA46E9 for ; Tue, 3 Aug 2021 23:40:11 +0200 (CEST) Received: from localhost ([::1]:44370 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mB28w-0000Bo-I4 for larch@yhetil.org; Tue, 03 Aug 2021 17:40:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52632) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mB28o-0000Bf-Uh for guix-patches@gnu.org; Tue, 03 Aug 2021 17:40:02 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:58369) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mB28o-0007mZ-NN for guix-patches@gnu.org; Tue, 03 Aug 2021 17:40:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1mB28o-0006u5-GT for guix-patches@gnu.org; Tue, 03 Aug 2021 17:40:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#44656] [PATCH] Upgrade pypy3 Resent-From: Maxim Cournoyer Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Tue, 03 Aug 2021 21:40:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 44656 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: Lars-Dominik Braun Cc: 44656@debbugs.gnu.org Received: via spool by 44656-submit@debbugs.gnu.org id=B44656.162802678926510 (code B ref 44656); Tue, 03 Aug 2021 21:40:02 +0000 Received: (at 44656) by debbugs.gnu.org; 3 Aug 2021 21:39:49 +0000 Received: from localhost ([127.0.0.1]:41682 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mB28Q-0006tG-Hq for submit@debbugs.gnu.org; Tue, 03 Aug 2021 17:39:49 -0400 Received: from mail-qv1-f41.google.com ([209.85.219.41]:46747) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mB28N-0006t1-DJ for 44656@debbugs.gnu.org; Tue, 03 Aug 2021 17:39:36 -0400 Received: by mail-qv1-f41.google.com with SMTP id d17so150750qvn.13 for <44656@debbugs.gnu.org>; Tue, 03 Aug 2021 14:39:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=OpwbC5wNiMw5QSGbe0lcMK7mf8CERy7ujdTr/tzMXr4=; b=N10ZextUjkHr34uYMS4YnREcpbKHez8sA7cZjHp/FXs/9e38WxQXtPAE/Qe7+NtVGL SR/TZxb/Yu/JMuEpA5JiHKXXMhP+3y+I9zbXrwLTN+OJmaabcgSSYcWIPIWmWRxD6jtr WE9AZtXAKCRQz4YlKYGHRO14bqb215VRchmbPj3gSftHtLrnP1tGotMd9f1r73aK4NWI KQm+ijJNnUOMS0UfmU04yTnjkwJL5FB/6ggY/ejnHiT2Dk/WVVMYF66pd0pCiRcThh/E SMhH6pQDcU0cjeLvqjabyWyrmLsD1UgjQlA1NXlLuxnC6RwNE26vJg6B8c0SRdznlmSU xydg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=OpwbC5wNiMw5QSGbe0lcMK7mf8CERy7ujdTr/tzMXr4=; b=hl1nPyDcqVVR8etnwUzQXQZp4r5tugK2GpLMskLquzPT5iXy49UsGWjb5ZXTn6DqAa sYNb0Su2/uq4Zujm4M97vfPmvRtQ6I3F9pIcrALBNnYCP9yQCUl71IY5u4dZxgT2IXGb DS4wMMQ4KS7uGMYOOTogW/cD0JVKOlHsIa442SxOCQD8XGzJu8h/ITJUSxSH1YdU5BNV t22760IsGr6DIkmuo5aOptvHFdlxxxNDHKRgh86lPQq1eSpCSyEd/0YA8+RGnGeK4pGn AmTsahAUMRWllo4GdZF3wVxx+8yKksioiFPBbc8cXDI80V2koGJVLUrGCE3Z5W/sTarI Wb2w== X-Gm-Message-State: AOAM53006ugyEUsmoWRd+qCHpFZTI3WAT2eLPUtZFnX64wZWYOQHph3L yk9C/mpTtKXuVZR5nIXOAJh8yxW96dVck+B3 X-Google-Smtp-Source: ABdhPJzHtr4ClEHS+HVwGyaSAg+FjRGUyKz4CLAtIfOjxLiVDNuwolq0GsbeRbyBJerX9v4WoeVDWA== X-Received: by 2002:a0c:ca09:: with SMTP id c9mr23566375qvk.61.1628026769645; Tue, 03 Aug 2021 14:39:29 -0700 (PDT) Received: from hurd (dsl-10-129-132.b2b2c.ca. [72.10.129.132]) by smtp.gmail.com with ESMTPSA id d28sm141160qkj.25.2021.08.03.14.39.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Aug 2021 14:39:29 -0700 (PDT) From: Maxim Cournoyer References: <20201115123911.GA1956@noor.fritz.box> Date: Tue, 03 Aug 2021 17:39:28 -0400 In-Reply-To: <20201115123911.GA1956@noor.fritz.box> (Lars-Dominik Braun's message of "Sun, 15 Nov 2020 13:39:11 +0100") Message-ID: <87eeba8ay7.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: "Guix-patches" X-Migadu-Flow: FLOW_IN ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1628026812; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:resent-cc: resent-from:resent-sender:resent-message-id:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=OpwbC5wNiMw5QSGbe0lcMK7mf8CERy7ujdTr/tzMXr4=; b=JlPDye/ikmTjhILDKegp3dXdCAryCAWeKdpxJppv7UUOgZaw8iDZB4b+ALhA7G+ZabSSuG nuG9bnxJvBekST/h+Pf3MNmubdUj8VOocYcOWW4lt3XUl617nGzVg/efSLuf9yrJIsJ2vN UrQs/eLdBytuas5iDuODUwkoowOjH62SNl9Ps8skTyFxFyA/PyZqkYLup6WyaJ9lg1p9Kx MvF6d1HzwWTXf8+axGBKdF/GEjsmQyTuCT+AsfQN4G2WhcJ4F2NK9OR29z6rh1Yj1X1fQ5 k7x3FEcwf163y9CDhQkOW7MFwtL9kfVwWY8MsszmLIycPR3dxx+YB/CA9R6ioQ== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1628026812; a=rsa-sha256; cv=none; b=U3WAsNZKPqsopdRRKUGrNCoiwHIVo6lsbdXUrEwzlSQauTOw304V150eFni5q1caz2PSPb +w0xFvnyKMT6FvZ0pRREpP0W2iFpVwTwDal17zLysLdLE/ZaJFsmttY4QquavkpKsH9YTE LssLfyu/rn8uvn1+XL1pR8ge0BHPehnODnBx1PCAsaE7FYpPfBvMjvmICzoZEG8V25JW48 Lx1rrcOMbUSYnr+UUhUiWhD8DNwYsIrS5zOkZnzREPv8y0ZgfcxnM1+uCAzFTV0bpC5KAQ /QW2FJtuo6H+XyBS5gHvR2NerxBMwdeZIDlH+h5iq1crK3ir/Yw5Ai+0HwRbAw== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=gmail.com header.s=20161025 header.b=N10ZextU; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none); spf=pass (aspmx1.migadu.com: domain of guix-patches-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-patches-bounces@gnu.org X-Migadu-Spam-Score: -1.31 Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=gmail.com header.s=20161025 header.b=N10ZextU; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none); spf=pass (aspmx1.migadu.com: domain of guix-patches-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-patches-bounces@gnu.org X-Migadu-Queue-Id: C41CA46E9 X-Spam-Score: -1.31 X-Migadu-Scanner: scn0.migadu.com X-TUID: L7mBgVZ6Q1aQ Hi Lars, Lars-Dominik Braun writes: > Hi, > > the first patch in this series upgrades pypy3 to 7.3.2 and the second > adjusts several aspects of the package. > > Lars > > >>>From caf5e4bf9acd10f91de2e6a9c60185475144a1b9 Mon Sep 17 00:00:00 2001 > From: Lars-Dominik Braun > Date: Sun, 15 Nov 2020 10:54:26 +0100 > Subject: [PATCH 2/2] gnu: pypy3: Various package fixes. > > * gnu/packages/python.scm (pypy3) [patches]: Add new patch. > [inputs]: Remove bash-minimal and add nss-certs. > [native-inputs]: Remove nss-certs here. In Guix we leave the choice of the TLS certs to the users; meaning we don't hard-code their location in packages and instead have the users explicitly install them (and in the case of OpenSSL, set the necessary environment variables), the same we do for icons and other 'choosable' things; while convenient the above goes against this tradition. > [arguments]: Use gdbm compat library, add 2to3 binary. > [native-search-paths]: Add search path. > * gnu/packages/patches/pypy3-7.3.1-ssl-paths.patch: New file. > * gnu/local.mk: Add it. > --- > gnu/local.mk | 1 + > .../patches/pypy3-7.3.1-ssl-paths.patch | 41 +++++++ > gnu/packages/python.scm | 109 ++++++++++++------ > 3 files changed, 116 insertions(+), 35 deletions(-) > create mode 100644 gnu/packages/patches/pypy3-7.3.1-ssl-paths.patch > > diff --git a/gnu/local.mk b/gnu/local.mk > index 91a3295e75..b644391a11 100644 > --- a/gnu/local.mk > +++ b/gnu/local.mk > @@ -1536,6 +1536,7 @@ dist_patch_DATA =3D \ > %D%/packages/patches/python-unittest2-remove-argparse.patch \ > %D%/packages/patches/python-waitress-fix-tests.patch \ > %D%/packages/patches/pypy3-7.3.1-fix-tests.patch \ > + %D%/packages/patches/pypy3-7.3.1-ssl-paths.patch \ > %D%/packages/patches/qemu-build-info-manual.patch \ > %D%/packages/patches/qemu-glibc-2.27.patch \ > %D%/packages/patches/qrcodegen-cpp-make-install.patch \ > diff --git a/gnu/packages/patches/pypy3-7.3.1-ssl-paths.patch b/gnu/packa= ges/patches/pypy3-7.3.1-ssl-paths.patch > new file mode 100644 > index 0000000000..d21133b4ae > --- /dev/null > +++ b/gnu/packages/patches/pypy3-7.3.1-ssl-paths.patch > @@ -0,0 +1,41 @@ > +Fix default certificate search path, still allowing the user to override= it > +with environment variables. > + > +--- a/lib_pypy/_cffi_ssl/_stdssl/__init__.py > ++++ b/lib_pypy/_cffi_ssl/_stdssl/__init__.py > +@@ -1679,20 +1679,9 @@ def get_default_verify_paths(): > + https://golang.org/src/crypto/x509/root_linux.go (for the files) > + ''' > + certFiles =3D [ > +- "/etc/ssl/certs/ca-certificates.crt", # Debian/U= buntu/Gentoo etc. > +- "/etc/pki/tls/certs/ca-bundle.crt", # Fedora/R= HEL 6 > +- "/etc/ssl/ca-bundle.pem", # OpenSUSE > +- "/etc/pki/tls/cacert.pem", # OpenELEC > +- "/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem", # CentOS/R= HEL 7 > +- "/etc/ssl/cert.pem", # Alpine L= inux > + ] > + certDirectories =3D [ > +- "/etc/ssl/certs", # SLES10/SLES11 > +- "/system/etc/security/cacerts", # Android > +- "/usr/local/share/certs", # FreeBSD > +- "/etc/pki/tls/certs", # Fedora/RHEL > +- "/etc/openssl/certs", # NetBSD > +- "/var/ssl/certs", # AIX > ++ "@GUIX_CERT_PATH@", > + ] > + > + # optimization: reuse the values from a local varaible > +@@ -1707,9 +1696,10 @@ def get_default_verify_paths(): > + ofile =3D _cstr_decode_fs(lib.X509_get_default_cert_file()) > + odir =3D _cstr_decode_fs(lib.X509_get_default_cert_dir()) > + > +- if os.path.exists(ofile) and os.path.exists(odir): > +- get_default_verify_paths.retval =3D (ofile_env, ofile, odir_env= , odir) > +- return get_default_verify_paths.retval > ++ if not os.path.exists(ofile): > ++ ofile =3D None > ++ if not os.path.exists(odir): > ++ odir =3D None > + > + # OpenSSL didn't supply the goods. Try some other options > + for f in certFiles: As mentioned above, the choice of certs should not be hard coded the in the package definition. The correct behavior of honoring SSL_CERT_DIR and SSL_CERT_FILE environment variables, and falling back to the system provided location is sane, so the above patch is unwelcome, IMHO. > diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm > index 8ef8ae2e1d..c0bd3335e3 100644 > --- a/gnu/packages/python.scm > +++ b/gnu/packages/python.scm > @@ -696,7 +696,8 @@ ease from the desktop to a microcontroller or embedde= d system.") > (sha256 > (base32 > "03f1fdw6yk2mypa9pbmgk26r8y1hhmw801l6g36zry9zsvz7aqgx")) > - (patches (search-patches "pypy3-7.3.1-fix-tests.patch")))) > + (patches (search-patches "pypy3-7.3.1-fix-tests.patch" > + "pypy3-7.3.1-ssl-paths.patch")))) > (build-system gnu-build-system) > (native-inputs > `(("python-2" ,python-2) > @@ -704,13 +705,13 @@ ease from the desktop to a microcontroller or embed= ded system.") > ("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) > + ("nss-certs" ,nss-certs) ; For ssl module This change is not needed without the TLS patching above. > ("expat" ,expat) > ("bzip2" ,bzip2) > ("sqlite" ,sqlite) > @@ -718,10 +719,9 @@ ease from the desktop to a microcontroller or embedd= ed system.") > ("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 fa= iling. > + `(#:tests? #f ;FIXME: Disabled for now, there are many tests failin= g. > #:modules ((ice-9 ftw) (ice-9 match) > (guix build utils) (guix build gnu-build-system)) > #:phases (modify-phases %standard-phases > @@ -750,6 +750,11 @@ ease from the desktop to a microcontroller or embedd= ed system.") > (substitute* '("lib_pypy/_curses_build.py") > ;; Find curses > (("/usr/local") (assoc-ref inputs "ncurses"))) > + (substitute* '("lib_pypy/_dbm.py") > + ;; Use gdbm compat library, so we don=E2=80=99t = need to pull in bdb > + (("ctypes.util.find_library\\('db'\\)") > + (string-append "'" (assoc-ref inputs "gdbm") > + "/lib/libgdbm_compat.so'"))) OK. > (substitute* '("lib_pypy/_sqlite3_build.py") > ;; Always use search paths > (("sys\\.platform\\.startswith\\('freebsd'\\)") = "True") > @@ -761,11 +766,18 @@ ease from the desktop to a microcontroller or embed= ded system.") > "/lib/libsqlite3.so.0'"))) > (substitute* '("lib-python/3/subprocess.py") > ;; Fix shell path > - (("/bin/sh") > - (string-append (assoc-ref inputs "bash-minimal"= ) "/bin/sh"))) > + (("/bin/sh") (which "sh"))) OK. > (substitute* '("lib-python/3/distutils/unixccompil= er.py") > ;; gcc-toolchain does not provide symlink cc -> = gcc > (("\"cc\"") "\"gcc\"")) > + (substitute* '("lib_pypy/_cffi_ssl/_stdssl/__init_= _.py") > + ;; Add nss-certs to default certificate search p= ath, > + ;; otherwise every packages has to specify nss-c= erts and > + ;; openssl as input to set the proper env variab= les. > + ;; Depends on -ssl-paths.patch. > + (("@GUIX_CERT_PATH@") > + (string-append (assoc-ref inputs "nss-certs") > + "/etc/ssl/certs"))) Not every package; the required SSL environment variables it should be set in the environment by the user or by via a native search path, and the certs manually provided (installed) by the user. > #t)) > (add-after > 'unpack 'set-source-file-times-to-1980 > @@ -785,7 +797,8 @@ ease from the desktop to a microcontroller or embedde= d system.") > (string-append "--make-jobs=3D" > (number->string (parallel= -job-count))) > "-Ojit" > - "targetpypystandalone")) > + "targetpypystandalone" > + "--allworkingmodules")) > ;; Build c modules and package everything, so test= s work. > (with-directory-excursion "pypy/tool/release" > (unsetenv "PYTHONPATH") ; Do not use the system= =E2=80=99s python libs: > @@ -793,7 +806,12 @@ ease from the desktop to a microcontroller or embedd= ed system.") > ; attribute 'IntFlag' > (invoke "python2" "package.py" > "--archive-name" "pypy-dist" > - "--builddir" (getcwd))))) > + "--builddir" (getcwd)) > + ;; install pip and setuptools into the dist dire= ctory. > + ;; XXX: Breaks virtualenv, because it does not s= et +w > + ;; on files copied from the store. > + ;(invoke "pypy-dist/bin/pypy3" "-m" "ensurepip") > + ))) Since the above attempt to bundle pip failed and is new, I'd just leave it out. > (replace 'check > (lambda* (#:key tests? #:allow-other-keys) > (if tests? > @@ -811,32 +829,54 @@ ease from the desktop to a microcontroller or embed= ded system.") > #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-pyth= on/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))))) > + (let* ((out (assoc-ref outputs "out")) > + (bin-pypy3 (string-append out "/bin/pypy3")) > + (shebang-match-python "#!.+/bin/python") > + (shebang-pypy3 (string-append "#!" bin-pypy= 3)) > + (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-python/3/" x= ))) > + '("tkinter/test" > + "test" > + "sqlite3/test" > + "lib2to3/tests" > + "idlelib/idle_test" > + "distutils/tests" > + "ctypes/test" > + "unittest/test")) > + ;; Patch shebang referencing python2 > + (substitute* '("lib-python/3/cgi.py" > + "lib-python/3/encodings/rot_13.= py") > + ((shebang-match-python) shebang-pypy3)) > + (with-fluids ((%default-port-encoding "ISO-885= 9-1")) > + (substitute* '("lib_pypy/_md5.py" > + "lib_pypy/_sha1.py= ") > + ((shebang-match-python) shebang= -pypy3)))) > + (copy-recursively dist-dir out) > + ;; Make sure pypy3 is callable as python/python3= , so we > + ;; don=E2=80=99t have to patch every single pack= age. > + (symlink bin-pypy3 (string-append out "/bin/pyth= on")) > + (symlink bin-pypy3 (string-append out "/bin/pyth= on3")) > + ;; 2to3 is missing from pypy3, create it. > + (let ((2to3 (string-append out "/bin/2to3"))) > + (call-with-output-file 2to3 > + (lambda (port) > + (format port "#!~a~%" (string-append out "= /bin/pypy3")) > + (format port " > +import sys > +from lib2to3.main import main > + > +sys.exit(main('lib2to3.fixes'))"))) > + (chmod 2to3 #o755)) > + #t)))))) I'm unconvinced about the above symlinks; it seems preferable for users to be able to unambiguously run both pypy3 and python3 (cpython) in the same profile without conflicts. The pypy3 package on Debian contains the following, for example: --8<---------------cut here---------------start------------->8--- $ apt-file show pypy3 pypy3: /usr/bin/pypy3 pypy3: /usr/bin/pypy3clean pypy3: /usr/bin/pypy3compile pypy3: /usr/lib/libpypy3-c.so pypy3: /usr/lib/pypy3/bin/libpypy3-c.so pypy3: /usr/lib/pypy3/bin/pypy3-c pypy3: /usr/lib/pypy3/include/pypy_decl.h pypy3: /usr/lib/pypy3/include/pypy_macros.h pypy3: /usr/lib/pypy3/include/pypy_marshal_decl.h pypy3: /usr/lib/pypy3/include/pypy_structmember_decl.h pypy3: /usr/lib/pypy3/lib_pypy/_audioop_cffi.pypy36-pp73-x86_64-linux-gnu.so pypy3: /usr/lib/pypy3/lib_pypy/_blake2/_blake2b_cffi.pypy36-pp73-x86_64-lin= ux-gnu.so pypy3: /usr/lib/pypy3/lib_pypy/_blake2/_blake2s_cffi.pypy36-pp73-x86_64-lin= ux-gnu.so pypy3: /usr/lib/pypy3/lib_pypy/_curses_cffi.pypy36-pp73-x86_64-linux-gnu.so pypy3: /usr/lib/pypy3/lib_pypy/_decimal_cffi.pypy36-pp73-x86_64-linux-gnu.so pypy3: /usr/lib/pypy3/lib_pypy/_gdbm_cffi.pypy36-pp73-x86_64-linux-gnu.so pypy3: /usr/lib/pypy3/lib_pypy/_lzma_cffi.pypy36-pp73-x86_64-linux-gnu.so pypy3: /usr/lib/pypy3/lib_pypy/_pwdgrp_cffi.pypy36-pp73-x86_64-linux-gnu.so pypy3: /usr/lib/pypy3/lib_pypy/_pypy_openssl.pypy36-pp73-x86_64-linux-gnu.so pypy3: /usr/lib/pypy3/lib_pypy/_resource_cffi.pypy36-pp73-x86_64-linux-gnu.= so pypy3: /usr/lib/pypy3/lib_pypy/_sha3/_sha3_cffi.pypy36-pp73-x86_64-linux-gn= u.so pypy3: /usr/lib/pypy3/lib_pypy/_sqlite3_cffi.pypy36-pp73-x86_64-linux-gnu.so pypy3: /usr/lib/pypy3/lib_pypy/_syslog_cffi.pypy36-pp73-x86_64-linux-gnu.so pypy3: /usr/share/doc/pypy3/TODO.Debian pypy3: /usr/share/doc/pypy3/changelog.Debian.gz pypy3: /usr/share/doc/pypy3/copyright pypy3: /usr/share/lintian/overrides/pypy3 pypy3: /usr/share/man/man1/pypy3.1.gz --8<---------------cut here---------------end--------------->8--- > + (native-search-paths > + (list (search-path-specification > + (variable "PYTHONPATH") > + (files '("lib/pypy3.6/site-packages"))))) About this search path, how it is supposed to work? The version is wrong (3.6) and the package doesn't include this directory, and we do not have a pypy build system or other pypy packages that would make use of it. Am I missing something? Thank you! Maxim