3
0
Fork 0
forked from mirrors/nixpkgs
nixpkgs/pkgs/development/interpreters/python/pypy/prebuilt.nix
Dmitry Kalinkin 8fa36fc8a1 python: provide hasCxxDistutils attribute for pythonPackages.numpy
Patching numpy.distutils used to be required for pythonPackages.cython
to build on darwin. It was later accidentally disabled during one of the
refactorings, but that did not break cython. This change reinstantiates
the patch. It still applies, so it should be low maintenance and it can
still be useful.
2019-04-28 09:17:59 +02:00

124 lines
2.8 KiB
Nix

{ 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";
hasDistutilsCxxPatch = false;
};
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 (${pythonVersion})";
license = licenses.mit;
platforms = [ "x86_64-linux" ];
};
}