diff options
author | Thiago Kenji Okada <thiagokokada@gmail.com> | 2023-01-08 22:41:29 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-08 22:41:29 +0000 |
commit | 4b7664384c7600dadb4dc8d1708626d073681b40 (patch) | |
tree | ff000239392c6fda9e5d4075b1ed0ee70c09c670 | |
parent | 2baec0c687d0755d3f24b2a93d579dafc16a6587 (diff) | |
parent | 4b74c3c3d1cba8d25c6aa2313218959100cd9d8c (diff) |
Merge pull request #209675 from thiagokokada/pypy-refactor
pypy{27,38,39}: refactor derivation
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}' |