diff options
author | Frederik Rietdijk <fridh@fridh.nl> | 2019-01-02 20:09:44 +0100 |
---|---|---|
committer | Frederik Rietdijk <fridh@fridh.nl> | 2019-01-04 10:45:22 +0100 |
commit | f665828fa374580f4b2fd725761d23e18f55e526 (patch) | |
tree | 3bae5444b8a2fdec44f7cf41656c6b2e9a9c9b32 /pkgs/development/interpreters/python/cpython | |
parent | 613498af978d65a7497cdd0dfd4f15c834348c61 (diff) | |
download | nixlib-f665828fa374580f4b2fd725761d23e18f55e526.tar nixlib-f665828fa374580f4b2fd725761d23e18f55e526.tar.gz nixlib-f665828fa374580f4b2fd725761d23e18f55e526.tar.bz2 nixlib-f665828fa374580f4b2fd725761d23e18f55e526.tar.lz nixlib-f665828fa374580f4b2fd725761d23e18f55e526.tar.xz nixlib-f665828fa374580f4b2fd725761d23e18f55e526.tar.zst nixlib-f665828fa374580f4b2fd725761d23e18f55e526.zip |
Python: improve cross-compilation
This changeset allows for cross-compilation of Python packages. Packages built with buildPythonPackage are not allowed to refer to the build machine. Executables that have shebangs will refer to the host.
Diffstat (limited to 'pkgs/development/interpreters/python/cpython')
-rw-r--r-- | pkgs/development/interpreters/python/cpython/2.7/default.nix | 3 | ||||
-rw-r--r-- | pkgs/development/interpreters/python/cpython/default.nix | 29 |
2 files changed, 24 insertions, 8 deletions
diff --git a/pkgs/development/interpreters/python/cpython/2.7/default.nix b/pkgs/development/interpreters/python/cpython/2.7/default.nix index 23b88b168b5b..249c4ac9cf79 100644 --- a/pkgs/development/interpreters/python/cpython/2.7/default.nix +++ b/pkgs/development/interpreters/python/cpython/2.7/default.nix @@ -32,6 +32,9 @@ assert x11Support -> tcl != null with stdenv.lib; let + + pythonForBuild = buildPackages.${"python${sourceVersion.major}${sourceVersion.minor}"}; + passthru = passthruFun rec { inherit self sourceVersion packageOverrides; implementation = "cpython"; diff --git a/pkgs/development/interpreters/python/cpython/default.nix b/pkgs/development/interpreters/python/cpython/default.nix index 0d1794f04fab..6e738a598dc4 100644 --- a/pkgs/development/interpreters/python/cpython/default.nix +++ b/pkgs/development/interpreters/python/cpython/default.nix @@ -21,6 +21,7 @@ , sourceVersion , sha256 , passthruFun +, bash }: assert x11Support -> tcl != null @@ -46,7 +47,8 @@ let nativeBuildInputs = [ nukeReferences ] ++ optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ - buildPackages.stdenv.cc crossPython + buildPackages.stdenv.cc + pythonForBuild ]; buildInputs = filter (p: p != null) [ @@ -56,11 +58,11 @@ let hasDistutilsCxxPatch = !(stdenv.cc.isGNU or false); - crossPython = buildPackages.${"python${sourceVersion.major}${sourceVersion.minor}"}; + pythonForBuild = buildPackages.${"python${sourceVersion.major}${sourceVersion.minor}"}; - pythonForBuild = if stdenv.hostPlatform == stdenv.buildPlatform then + pythonForBuildInterpreter = if stdenv.hostPlatform == stdenv.buildPlatform then "$out/bin/python" - else crossPython.interpreter; + else pythonForBuild.interpreter; in with passthru; stdenv.mkDerivation { pname = "python3"; @@ -215,14 +217,25 @@ in with passthru; stdenv.mkDerivation { # We rebuild three times, once for each optimization level # Python 3.7 implements PEP 552, introducing support for deterministic bytecode. # This is automatically used when `SOURCE_DATE_EPOCH` is set. - find $out -name "*.py" | ${pythonForBuild} -m compileall -q -f -x "lib2to3" -i - - find $out -name "*.py" | ${pythonForBuild} -O -m compileall -q -f -x "lib2to3" -i - - find $out -name "*.py" | ${pythonForBuild} -OO -m compileall -q -f -x "lib2to3" -i - + find $out -name "*.py" | ${pythonForBuildInterpreter} -m compileall -q -f -x "lib2to3" -i - + find $out -name "*.py" | ${pythonForBuildInterpreter} -O -m compileall -q -f -x "lib2to3" -i - + find $out -name "*.py" | ${pythonForBuildInterpreter} -OO -m compileall -q -f -x "lib2to3" -i - + ''; + + preFixup = stdenv.lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) '' + # Ensure patch-shebangs uses shebangs of host interpreter. + export PATH=${stdenv.lib.makeBinPath [ "$out" bash ]}:$PATH ''; # Enforce that we don't have references to the OpenSSL -dev package, which we # explicitly specify in our configure flags above. - disallowedReferences = [ openssl.dev ]; + disallowedReferences = [ + openssl.dev + ] ++ stdenv.lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ + # Ensure we don't have references to build-time packages. + # These typically end up in shebangs. + pythonForBuild buildPackages.bash + ]; inherit passthru; |