python3: add C++ compiler support for distutils

This implements 095095c4 ('python: add C++ compiler support for distutils')
for python3. Should fix various problems with python packages on darwin.
This commit is contained in:
Dmitry Kalinkin 2018-04-26 17:54:25 -04:00
parent 893bf70a1c
commit 31010e0f89
No known key found for this signature in database
GPG Key ID: 5157B3EC8B2CA333
4 changed files with 43 additions and 6 deletions

View File

@ -1,4 +1,4 @@
{ stdenv, fetchurl
{ stdenv, fetchurl, fetchpatch
, bzip2
, expat
, libffi
@ -39,6 +39,8 @@ let
++ optionals x11Support [ tcl tk libX11 xproto ]
++ optionals stdenv.isDarwin [ CF configd ];
hasDistutilsCxxPatch = !(stdenv.cc.isGNU or false);
in stdenv.mkDerivation {
name = "python3-${version}";
pythonVersion = majorVersion;
@ -69,6 +71,16 @@ in stdenv.mkDerivation {
./ld_library_path.patch
] ++ optionals (x11Support && stdenv.isDarwin) [
./use-correct-tcl-tk-on-darwin.patch
] ++ optionals hasDistutilsCxxPatch [
# Fix for http://bugs.python.org/issue1222585
# Upstream distutils is calling C compiler to compile C++ code, which
# only works for GCC and Apple Clang. This makes distutils to call C++
# compiler when needed.
(fetchpatch {
url = "https://bugs.python.org/file47046/python-3.x-distutils-C++.patch";
sha256 = "0dgdn9k2kmw4wh90vdnjcrnn97ylxgx7mbn9l87fwz6j501jqvk8";
extraPrefix = "";
})
];
postPatch = ''
@ -166,7 +178,7 @@ in stdenv.mkDerivation {
passthru = let
pythonPackages = callPackage ../../../../../top-level/python-packages.nix {python=self; overrides=packageOverrides;};
in rec {
inherit libPrefix sitePackages x11Support;
inherit libPrefix sitePackages x11Support hasDistutilsCxxPatch;
executable = "${libPrefix}m";
buildEnv = callPackage ../../wrapper.nix { python = self; inherit (pythonPackages) requiredPythonModules; };
withPackages = import ../../with-packages.nix { inherit buildEnv pythonPackages;};

View File

@ -39,6 +39,8 @@ let
++ optionals x11Support [ tcl tk libX11 xproto ]
++ optionals stdenv.isDarwin [ CF configd ];
hasDistutilsCxxPatch = !(stdenv.cc.isGNU or false);
in stdenv.mkDerivation {
name = "python3-${version}";
pythonVersion = majorVersion;
@ -69,6 +71,16 @@ in stdenv.mkDerivation {
./ld_library_path.patch
] ++ optionals (x11Support && stdenv.isDarwin) [
./use-correct-tcl-tk-on-darwin.patch
] ++ optionals hasDistutilsCxxPatch [
# Fix for http://bugs.python.org/issue1222585
# Upstream distutils is calling C compiler to compile C++ code, which
# only works for GCC and Apple Clang. This makes distutils to call C++
# compiler when needed.
(fetchpatch {
url = "https://bugs.python.org/file47046/python-3.x-distutils-C++.patch";
sha256 = "0dgdn9k2kmw4wh90vdnjcrnn97ylxgx7mbn9l87fwz6j501jqvk8";
extraPrefix = "";
})
];
postPatch = ''
@ -160,7 +172,7 @@ in stdenv.mkDerivation {
passthru = let
pythonPackages = callPackage ../../../../../top-level/python-packages.nix {python=self; overrides=packageOverrides;};
in rec {
inherit libPrefix sitePackages x11Support;
inherit libPrefix sitePackages x11Support hasDistutilsCxxPatch;
executable = "${libPrefix}m";
buildEnv = callPackage ../../wrapper.nix { python = self; inherit (pythonPackages) requiredPythonModules; };
withPackages = import ../../with-packages.nix { inherit buildEnv pythonPackages;};

View File

@ -42,6 +42,8 @@ let
nativeBuildInputs =
optional (stdenv.hostPlatform != stdenv.buildPlatform) buildPackages.python3;
hasDistutilsCxxPatch = !(stdenv.cc.isGNU or false);
in stdenv.mkDerivation {
name = "python3-${version}";
pythonVersion = majorVersion;
@ -71,6 +73,16 @@ in stdenv.mkDerivation {
./no-ldconfig.patch
] ++ optionals (x11Support && stdenv.isDarwin) [
./use-correct-tcl-tk-on-darwin.patch
] ++ optionals hasDistutilsCxxPatch [
# Fix for http://bugs.python.org/issue1222585
# Upstream distutils is calling C compiler to compile C++ code, which
# only works for GCC and Apple Clang. This makes distutils to call C++
# compiler when needed.
(fetchpatch {
url = "https://bugs.python.org/file47046/python-3.x-distutils-C++.patch";
sha256 = "0dgdn9k2kmw4wh90vdnjcrnn97ylxgx7mbn9l87fwz6j501jqvk8";
extraPrefix = "";
})
];
postPatch = ''
@ -183,7 +195,7 @@ in stdenv.mkDerivation {
passthru = let
pythonPackages = callPackage ../../../../../top-level/python-packages.nix {python=self; overrides=packageOverrides;};
in rec {
inherit libPrefix sitePackages x11Support;
inherit libPrefix sitePackages x11Support hasDistutilsCxxPatch;
executable = "${libPrefix}m";
buildEnv = callPackage ../../wrapper.nix { python = self; inherit (pythonPackages) requiredPythonModules; };
withPackages = import ../../with-packages.nix { inherit buildEnv pythonPackages;};

View File

@ -14,8 +14,9 @@ buildPythonPackage rec {
buildInputs = [ gfortran nose blas ];
patches = lib.optionals (python.hasDistutilsCxxPatch or false) [
# See cpython 2.7 patches.
# numpy.distutils is used by cython during it's check phase
# We patch cpython/distutils to fix https://bugs.python.org/issue1222585
# Patching of numpy.distutils is needed to prevent it from undoing the
# patch to distutils.
./numpy-distutils-C++.patch
];