about summary refs log tree commit diff
path: root/pkgs/development/python-modules/datatable
diff options
context:
space:
mode:
authorJon <jonringer@users.noreply.github.com>2019-08-01 10:54:41 -0700
committerWael Nasreddine <wael.nasreddine@gmail.com>2019-08-01 10:54:41 -0700
commitb1f0e2ace1b08d6d571e015430b8ae127a249c73 (patch)
treefa564c3600b5dce1ee4fafe05d1d1b01091e654e /pkgs/development/python-modules/datatable
parented5ed93422de9243bf4642b241d755db43eaf279 (diff)
python3Packages.datatable: fix the Darwin build (#65613)
Diffstat (limited to 'pkgs/development/python-modules/datatable')
-rw-r--r--pkgs/development/python-modules/datatable/default.nix30
-rw-r--r--pkgs/development/python-modules/datatable/hardcode-library-paths.patch43
-rw-r--r--pkgs/development/python-modules/datatable/remove-compiler-monkeypatch_disable-native-relocation.patch28
3 files changed, 96 insertions, 5 deletions
diff --git a/pkgs/development/python-modules/datatable/default.nix b/pkgs/development/python-modules/datatable/default.nix
index 3ea926ac23bea..200ebef1faaaf 100644
--- a/pkgs/development/python-modules/datatable/default.nix
+++ b/pkgs/development/python-modules/datatable/default.nix
@@ -1,11 +1,16 @@
-{ lib
+{ blessed
 , buildPythonPackage
 , fetchPypi
-, pythonOlder
+, lib
+, libcxx
+, libcxxabi
 , llvm
-, typesentry
-, blessed
+, openmp
 , pytest
+, pythonOlder
+, stdenv
+, substituteAll
+, typesentry
 }:
 
 buildPythonPackage rec {
@@ -17,10 +22,25 @@ buildPythonPackage rec {
     sha256 = "1s8z81zffrckvdwrrl0pkjc7gsdvjxw59xgg6ck81dl7gkh5grjk";
   };
 
+  patches = [
+    # Disable the compiler monkey patching, and remove the task that's copying
+    # the native dependencies to the build directory.
+    ./remove-compiler-monkeypatch_disable-native-relocation.patch
+  ] ++ lib.optionals stdenv.isDarwin [
+    # Replace the library auto-detection with hardcoded paths.
+    (substituteAll {
+      src = ./hardcode-library-paths.patch;
+
+      libomp_dylib = "${lib.getLib openmp}/lib/libomp.dylib";
+      libcxx_dylib = "${lib.getLib libcxx}/lib/libc++.1.dylib";
+      libcxxabi_dylib = "${lib.getLib libcxxabi}/lib/libc++abi.dylib";
+    })
+  ];
+
   disabled = pythonOlder "3.5";
 
   propagatedBuildInputs = [ typesentry blessed ];
-  buildInputs = [ llvm ];
+  buildInputs = [ llvm ] ++ lib.optionals stdenv.isDarwin [ openmp ];
   checkInputs = [ pytest ];
 
   LLVM = llvm;
diff --git a/pkgs/development/python-modules/datatable/hardcode-library-paths.patch b/pkgs/development/python-modules/datatable/hardcode-library-paths.patch
new file mode 100644
index 0000000000000..76c2f0e1dd7f1
--- /dev/null
+++ b/pkgs/development/python-modules/datatable/hardcode-library-paths.patch
@@ -0,0 +1,43 @@
+diff --git a/ci/setup_utils.py b/ci/setup_utils.py
+index 66b385a..6255af0 100644
+--- a/ci/setup_utils.py
++++ b/ci/setup_utils.py
+@@ -600,37 +600,7 @@ def find_linked_dynamic_libraries():
+     them as a list of absolute paths.
+     """
+     with TaskContext("Find the required dynamic libraries") as log:
+-        llvm = get_llvm()
+-        libs = required_link_libraries()
+-        resolved = []
+-        for libname in libs:
+-            if llvm:
+-                fullpath = os.path.join(llvm, "lib", libname)
+-                if os.path.isfile(fullpath):
+-                    resolved.append(fullpath)
+-                    log.info("Library `%s` found at %s" % (libname, fullpath))
+-                    continue
+-                else:
+-                    log.info("%s does not exist" % fullpath)
+-            # Rely on the shell `locate` command to find the dynamic libraries.
+-            proc = subprocess.Popen(["locate", libname], stdout=subprocess.PIPE,
+-                                    stderr=subprocess.PIPE)
+-            stdout, stderr = proc.communicate()
+-            if proc.returncode == 0:
+-                results = stdout.decode().strip().split("\n")
+-                results = [r for r in results if r]
+-                if results:
+-                    results.sort(key=len)
+-                    fullpath = results[0]
+-                    assert os.path.isfile(fullpath), "Invalid path: %r" % (fullpath,)
+-                    resolved.append(fullpath)
+-                    log.info("Library `%s` found at %s" % (libname, fullpath))
+-                    continue
+-                else:
+-                    log.fatal("Cannot locate dynamic library `%s`" % libname)
+-            else:
+-                log.fatal("`locate` command returned the following error:\n%s"
+-                          % stderr.decode())
++        resolved = ["@libomp_dylib@", "@libcxx_dylib@", "@libcxxabi_dylib@"]
+         return resolved
+ 
+ 
diff --git a/pkgs/development/python-modules/datatable/remove-compiler-monkeypatch_disable-native-relocation.patch b/pkgs/development/python-modules/datatable/remove-compiler-monkeypatch_disable-native-relocation.patch
new file mode 100644
index 0000000000000..7cdbfa9072416
--- /dev/null
+++ b/pkgs/development/python-modules/datatable/remove-compiler-monkeypatch_disable-native-relocation.patch
@@ -0,0 +1,28 @@
+diff --git a/setup.py b/setup.py
+index 58fc875..8032561 100644
+--- a/setup.py
++++ b/setup.py
+@@ -141,23 +141,6 @@ if cmd in ("build", "bdist_wheel", "build_ext", "install"):
+     extra_link_args = get_extra_link_args()
+     cpp_files = get_c_sources("c")
+ 
+-    with TaskContext("Copy dynamic libraries") as log:
+-        # Copy system libraries into the datatable/lib folder, so that they can
+-        # be packaged with the wheel
+-        libs = find_linked_dynamic_libraries()
+-        for libpath in libs:
+-            trgfile = os.path.join("datatable", "lib",
+-                                   os.path.basename(libpath))
+-            if os.path.exists(trgfile):
+-                log.info("File %s already exists, skipped" % trgfile)
+-            else:
+-                log.info("Copying %s to %s" % (libpath, trgfile))
+-                shutil.copy(libpath, trgfile)
+-
+-    if ismacos():
+-        monkey_patch_compiler()
+-
+-
+ # Create the git version file
+ if cmd in ("build", "sdist", "bdist_wheel", "install"):
+     make_git_version_file(True)