forked from mirrors/nixpkgs
8fa36fc8a1
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.
124 lines
2.8 KiB
Nix
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" ];
|
|
};
|
|
|
|
} |