about summary refs log tree commit diff
diff options
context:
space:
mode:
authorThiago Kenji Okada <thiagokokada@gmail.com>2023-01-08 22:41:29 +0000
committerGitHub <noreply@github.com>2023-01-08 22:41:29 +0000
commit4b7664384c7600dadb4dc8d1708626d073681b40 (patch)
treeff000239392c6fda9e5d4075b1ed0ee70c09c670
parent2baec0c687d0755d3f24b2a93d579dafc16a6587 (diff)
parent4b74c3c3d1cba8d25c6aa2313218959100cd9d8c (diff)
Merge pull request #209675 from thiagokokada/pypy-refactor
pypy{27,38,39}: refactor derivation
-rw-r--r--pkgs/development/interpreters/python/pypy/default.nix105
-rw-r--r--pkgs/development/interpreters/python/pypy/prebuilt.nix8
-rw-r--r--pkgs/development/interpreters/python/pypy/prebuilt_2_7.nix8
3 files changed, 68 insertions, 53 deletions
diff --git a/pkgs/development/interpreters/python/pypy/default.nix b/pkgs/development/interpreters/python/pypy/default.nix
index e9c2e3d1aa0e8..6fad25ee8d630 100644
--- a/pkgs/development/interpreters/python/pypy/default.nix
+++ b/pkgs/development/interpreters/python/pypy/default.nix
@@ -19,11 +19,9 @@
 
 assert zlibSupport -> zlib != null;
 
-with lib;
-
 let
-  isPy3k = substring 0 1 pythonVersion == "3";
-  isPy39OrNewer = versionAtLeast pythonVersion "3.9";
+  isPy3k = (lib.versions.major pythonVersion) == "3";
+  isPy39OrNewer = lib.versionAtLeast pythonVersion "3.9";
   passthru = passthruFun {
     inherit self sourceVersion pythonVersion packageOverrides;
     implementation = "pypy";
@@ -54,25 +52,23 @@ in with passthru; stdenv.mkDerivation rec {
   nativeBuildInputs = [ pkg-config ];
   buildInputs = [
     bzip2 openssl pythonForPypy libffi ncurses expat sqlite tk tcl libX11 gdbm db
-  ]  ++ optionals isPy3k [
+  ]  ++ lib.optionals isPy3k [
     xz
-  ] ++ optionals (stdenv ? cc && stdenv.cc.libc != null) [
+  ] ++ lib.optionals (stdenv ? cc && stdenv.cc.libc != null) [
     stdenv.cc.libc
-  ] ++ optionals zlibSupport [
+  ] ++ lib.optionals zlibSupport [
     zlib
-  ] ++ optionals stdenv.isDarwin [
+  ] ++ lib.optionals stdenv.isDarwin [
     libunwind Security
   ];
 
-  hardeningDisable = optional stdenv.isi686 "pic";
-
   # Remove bootstrap python from closure
   dontPatchShebangs = true;
   disallowedReferences = [ python ];
 
-  C_INCLUDE_PATH = makeSearchPathOutput "dev" "include" buildInputs;
-  LIBRARY_PATH = makeLibraryPath buildInputs;
-  LD_LIBRARY_PATH = makeLibraryPath (filter (x : x.outPath != stdenv.cc.libc.outPath or "") buildInputs);
+  C_INCLUDE_PATH = lib.makeSearchPathOutput "dev" "include" buildInputs;
+  LIBRARY_PATH = lib.makeLibraryPath buildInputs;
+  LD_LIBRARY_PATH = lib.makeLibraryPath (builtins.filter (x : x.outPath != stdenv.cc.libc.outPath or "") buildInputs);
 
   patches = [
     ./dont_fetch_vendored_deps.patch
@@ -96,14 +92,47 @@ in with passthru; stdenv.mkDerivation rec {
     substituteInPlace lib_pypy/pypy_tools/build_cffi_imports.py \
       --replace "multiprocessing.cpu_count()" "$NIX_BUILD_CORES"
 
-    substituteInPlace "lib-python/${if isPy3k then "3/tkinter/tix.py" else "2.7/lib-tk/Tix.py"}" --replace "os.environ.get('TIX_LIBRARY')" "os.environ.get('TIX_LIBRARY') or '${tix}/lib'"
+    substituteInPlace "lib-python/${if isPy3k then "3/tkinter/tix.py" else "2.7/lib-tk/Tix.py"}" \
+      --replace "os.environ.get('TIX_LIBRARY')" "os.environ.get('TIX_LIBRARY') or '${tix}/lib'"
   '';
 
   buildPhase = ''
+    runHook preBuild
+
     ${pythonForPypy.interpreter} rpython/bin/rpython \
       --make-jobs="$NIX_BUILD_CORES" \
       -Ojit \
       --batch pypy/goal/targetpypystandalone.py
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{bin,include,lib,${executable}-c}
+
+    cp -R {include,lib_pypy,lib-python,${executable}-c} $out/${executable}-c
+    cp lib${executable}-c${stdenv.hostPlatform.extensions.sharedLibrary} $out/lib/
+    ln -s $out/${executable}-c/${executable}-c $out/bin/${executable}
+    ${lib.optionalString isPy39OrNewer "ln -s $out/bin/${executable} $out/bin/pypy3"}
+
+    # other packages expect to find stuff according to libPrefix
+    ln -s $out/${executable}-c/include $out/include/${libPrefix}
+    ln -s $out/${executable}-c/lib-python/${if isPy3k then "3" else pythonVersion} $out/lib/${libPrefix}
+
+    # Include a sitecustomize.py file
+    cp ${../sitecustomize.py} $out/lib/${libPrefix}/${sitePackages}/sitecustomize.py
+
+    runHook postInstall
+  '';
+
+  preFixup = lib.optionalString (stdenv.isDarwin) ''
+    install_name_tool -change @rpath/lib${executable}-c.dylib $out/lib/lib${executable}-c.dylib $out/bin/${executable}
+  '' + lib.optionalString (stdenv.isDarwin && stdenv.isAarch64) ''
+    mkdir -p $out/${executable}-c/pypy/bin
+    mv $out/bin/${executable} $out/${executable}-c/pypy/bin/${executable}
+    ln -s $out/${executable}-c/pypy/bin/${executable} $out/bin/${executable}
   '';
 
   setupHook = python-setup-hook sitePackages;
@@ -117,12 +146,12 @@ in with passthru; stdenv.mkDerivation rec {
       "test_shutil"
       # disable socket because it has two actual network tests that fail
       "test_socket"
-    ] ++ optionals (!isPy3k) [
+    ] ++ lib.optionals (!isPy3k) [
       # disable test_urllib2net, test_urllib2_localnet, and test_urllibnet because they require networking (example.com)
       "test_urllib2net"
       "test_urllibnet"
       "test_urllib2_localnet"
-    ] ++ optionals isPy3k [
+    ] ++ lib.optionals isPy3k [
       # disable asyncio due to https://github.com/NixOS/nix/issues/1238
       "test_asyncio"
       # disable os due to https://github.com/NixOS/nixpkgs/issues/10496
@@ -140,35 +169,25 @@ in with passthru; stdenv.mkDerivation rec {
     export TERM="xterm";
     export HOME="$TMPDIR";
 
-    ${pythonForPypy.interpreter} ./pypy/test_all.py --pypy=./${executable}-c -k 'not (${concatStringsSep " or " disabledTests})' lib-python
+    ${pythonForPypy.interpreter} ./pypy/test_all.py --pypy=./${executable}-c -k 'not (${lib.concatStringsSep " or " disabledTests})' lib-python
   '';
 
-  installPhase = ''
-    mkdir -p $out/{bin,include,lib,${executable}-c}
-
-    cp -R {include,lib_pypy,lib-python,${executable}-c} $out/${executable}-c
-    cp lib${executable}-c${stdenv.hostPlatform.extensions.sharedLibrary} $out/lib/
-    ln -s $out/${executable}-c/${executable}-c $out/bin/${executable}
-    ${optionalString isPy39OrNewer "ln -s $out/bin/${executable}-c $out/bin/pypy3"}
-
-    # other packages expect to find stuff according to libPrefix
-    ln -s $out/${executable}-c/include $out/include/${libPrefix}
-    ln -s $out/${executable}-c/lib-python/${if isPy3k then "3" else pythonVersion} $out/lib/${libPrefix}
-
-    ${lib.optionalString stdenv.isDarwin ''
-      install_name_tool -change @rpath/lib${executable}-c.dylib $out/lib/lib${executable}-c.dylib $out/bin/${executable}
-    ''}
-    ${lib.optionalString (stdenv.isDarwin && stdenv.isAarch64) ''
-      mkdir -p $out/${executable}-c/pypy/bin
-      mv $out/bin/${executable} $out/${executable}-c/pypy/bin/${executable}
-      ln -s $out/${executable}-c/pypy/bin/${executable} $out/bin/${executable}
-    ''}
-
-    # verify cffi modules
-    $out/bin/${executable} -c ${if isPy3k then "'import tkinter;import sqlite3;import curses;import lzma'" else "'import Tkinter;import sqlite3;import curses'"}
-
-    # Include a sitecustomize.py file
-    cp ${../sitecustomize.py} $out/lib/${libPrefix}/${sitePackages}/sitecustomize.py
+  # verify cffi modules
+  doInstallCheck = true;
+  installCheckPhase = let
+    modules = [
+      "curses"
+      "sqlite3"
+    ] ++ lib.optionals (!isPy3k) [
+      "Tkinter"
+    ] ++ lib.optionals isPy3k [
+      "tkinter"
+      "lzma"
+    ];
+    imports = lib.concatMapStringsSep "; " (x: "import ${x}") modules;
+  in ''
+    echo "Testing whether we can import modules"
+    $out/bin/${executable} -c '${imports}'
   '';
 
   inherit passthru;
diff --git a/pkgs/development/interpreters/python/pypy/prebuilt.nix b/pkgs/development/interpreters/python/pypy/prebuilt.nix
index af782654fbdbd..a25ab8a782210 100644
--- a/pkgs/development/interpreters/python/pypy/prebuilt.nix
+++ b/pkgs/development/interpreters/python/pypy/prebuilt.nix
@@ -26,8 +26,6 @@
 # This version of PyPy is primarily added to speed-up translation of
 # our PyPy source build when developing that expression.
 
-with lib;
-
 let
   isPy3k = majorVersion == "3";
   passthru = passthruFun rec {
@@ -138,12 +136,12 @@ in with passthru; stdenv.mkDerivation {
       "ssl"
       "sys"
       "curses"
-    ] ++ optionals (!isPy3k) [
+    ] ++ lib.optionals (!isPy3k) [
       "Tkinter"
-    ] ++ optionals isPy3k [
+    ] ++ lib.optionals isPy3k [
       "tkinter"
     ];
-    imports = concatMapStringsSep "; " (x: "import ${x}") modules;
+    imports = lib.concatMapStringsSep "; " (x: "import ${x}") modules;
   in ''
     echo "Testing whether we can import modules"
     $out/bin/${executable} -c '${imports}'
diff --git a/pkgs/development/interpreters/python/pypy/prebuilt_2_7.nix b/pkgs/development/interpreters/python/pypy/prebuilt_2_7.nix
index d57d77351c510..a95e0c2f651e9 100644
--- a/pkgs/development/interpreters/python/pypy/prebuilt_2_7.nix
+++ b/pkgs/development/interpreters/python/pypy/prebuilt_2_7.nix
@@ -26,8 +26,6 @@
 # This version of PyPy is primarily added to speed-up translation of
 # our PyPy source build when developing that expression.
 
-with lib;
-
 let
   isPy3k = majorVersion == "3";
   passthru = passthruFun {
@@ -134,12 +132,12 @@ in with passthru; stdenv.mkDerivation {
       "ssl"
       "sys"
       "curses"
-    ] ++ optionals (!isPy3k) [
+    ] ++ lib.optionals (!isPy3k) [
       "Tkinter"
-    ] ++ optionals isPy3k [
+    ] ++ lib.optionals isPy3k [
       "tkinter"
     ];
-    imports = concatMapStringsSep "; " (x: "import ${x}") modules;
+    imports = lib.concatMapStringsSep "; " (x: "import ${x}") modules;
   in ''
     echo "Testing whether we can import modules"
     $out/bin/${executable} -c '${imports}'