-
-
Notifications
You must be signed in to change notification settings - Fork 14.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
pythonInterpreters.pypy{27,35}_prebuilt: init at 6.0.0
These interpreters are prebuilt by upstream and patched using patchelf. They are primarily added for testing purposes and development on the non-prebuilt PyPy interpreters as it can speed up translation significantly.
- Loading branch information
Showing
2 changed files
with
151 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,123 @@ | ||
{ stdenv | ||
, fetchurl | ||
, python-setup-hook | ||
, self | ||
, which | ||
# Dependencies | ||
, bzip2 | ||
, zlib | ||
, openssl | ||
, expat | ||
, libffi | ||
, ncurses | ||
, tcl | ||
, tk | ||
# For the Python package set | ||
, packageOverrides ? (self: super: {}) | ||
, sourceVersion | ||
, pythonVersion | ||
, sha256 | ||
, passthruFun | ||
}: | ||
|
||
# This version of PyPy is primarily added to speed-up translation of | ||
# our PyPy source build when developing that expression. | ||
|
||
with stdenv.lib; | ||
|
||
let | ||
isPy3k = majorVersion == "3"; | ||
passthru = passthruFun rec { | ||
inherit self sourceVersion pythonVersion packageOverrides; | ||
implementation = "pypy"; | ||
libPrefix = "pypy${pythonVersion}"; | ||
executable = "pypy${if isPy3k then "3" else ""}"; | ||
pythonForBuild = self; # Not possible to cross-compile with. | ||
sitePackages = "site-packages"; | ||
}; | ||
pname = "${passthru.executable}_prebuilt"; | ||
version = with sourceVersion; "${major}.${minor}.${patch}"; | ||
|
||
majorVersion = substring 0 1 pythonVersion; | ||
|
||
setupHook = python-setup-hook sitePackages; | ||
|
||
deps = [ | ||
bzip2 | ||
zlib | ||
openssl | ||
expat | ||
libffi | ||
ncurses | ||
tcl | ||
tk | ||
]; | ||
|
||
in with passthru; stdenv.mkDerivation { | ||
inherit pname version; | ||
|
||
src = fetchurl { | ||
url= "https://bitbucket.org/pypy/pypy/downloads/pypy${majorVersion}-v${version}-linux64.tar.bz2"; | ||
inherit sha256; | ||
}; | ||
|
||
buildInputs = [ which ]; | ||
|
||
installPhase = '' | ||
mkdir -p $out/lib | ||
echo "Moving files to $out" | ||
mv -t $out bin include lib-python lib_pypy site-packages | ||
mv $out/bin/libpypy*-c.so $out/lib/ | ||
rm $out/bin/*.debug | ||
echo "Patching binaries" | ||
interpreter=$(patchelf --print-interpreter $(readlink -f $(which patchelf))) | ||
patchelf --set-interpreter $interpreter \ | ||
--set-rpath $out/lib \ | ||
$out/bin/pypy* | ||
pushd $out | ||
find {lib,lib_pypy*} -name "*.so" -exec patchelf --replace-needed "libbz2.so.1.0" "libbz2.so.1" {} \; | ||
find {lib,lib_pypy*} -name "*.so" -exec patchelf --set-rpath ${stdenv.lib.makeLibraryPath deps} {} \; | ||
echo "Removing bytecode" | ||
find . -name "__pycache__" -type d -depth -exec rm -rf {} \; | ||
popd | ||
''; | ||
|
||
doInstallCheck = true; | ||
|
||
# Check whether importing of (extension) modules functions | ||
installCheckPhase = let | ||
modules = [ | ||
"ssl" | ||
"sys" | ||
"curses" | ||
] ++ optionals (!isPy3k) [ | ||
"Tkinter" | ||
] ++ optionals isPy3k [ | ||
"tkinter" | ||
]; | ||
imports = concatMapStringsSep "; " (x: "import ${x}") modules; | ||
in '' | ||
echo "Testing whether we can import modules" | ||
$out/bin/${executable} -c '${imports}' | ||
''; | ||
|
||
setupHook = python-setup-hook sitePackages; | ||
|
||
donPatchElf = true; | ||
dontStrip = true; | ||
|
||
inherit passthru; | ||
|
||
meta = with stdenv.lib; { | ||
homepage = http://pypy.org/; | ||
description = "Fast, compliant alternative implementation of the Python language (3.5.3)"; | ||
license = licenses.mit; | ||
platforms = [ "x86_64-linux" ]; | ||
}; | ||
|
||
} |