about summary refs log tree commit diff
path: root/nixpkgs/pkgs/development/python-modules/h3/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/development/python-modules/h3/default.nix')
-rw-r--r--nixpkgs/pkgs/development/python-modules/h3/default.nix66
1 files changed, 50 insertions, 16 deletions
diff --git a/nixpkgs/pkgs/development/python-modules/h3/default.nix b/nixpkgs/pkgs/development/python-modules/h3/default.nix
index 46b774a25c1e..e66a3f5e9fcb 100644
--- a/nixpkgs/pkgs/development/python-modules/h3/default.nix
+++ b/nixpkgs/pkgs/development/python-modules/h3/default.nix
@@ -1,35 +1,69 @@
-{ lib, stdenv
+{ autoPatchelfHook
 , buildPythonPackage
 , cmake
-, fetchPypi
+, cython
+, fetchFromGitHub
 , h3
-, python
+, lib
+, numpy
+, pytestCheckHook
+, scikit-build
+, stdenv
 }:
 
 buildPythonPackage rec {
   pname = "h3";
-  version = "3.7.0";
+  version = "3.7.1";
 
-  src = fetchPypi {
-    inherit pname version;
-    sha256 = "cd27fc8ecd9183f93934079b7c986401f499030ff2e2171eace9de462fab561d";
+  # pypi version does not include tests
+  src = fetchFromGitHub {
+    owner = "uber";
+    repo = "h3-py";
+    rev = "v${version}";
+    sha256 = "sha256-MIVV3kZGsIsaJ/ccJOK3+j1VwkUsZGHS5d1sGOBa1Ec=";
   };
 
-  patches = [
-    ./disable-custom-install.patch
-    ./hardcode-h3-path.patch
+  dontConfigure = true;
+
+  checkInputs = [ pytestCheckHook ];
+
+  nativeBuildInputs = [
+    scikit-build cmake cython
+  ] ++ lib.optionals stdenv.hostPlatform.isLinux [
+    # On Linux the .so files ends up referring to libh3.so instead of the full
+    # Nix store path. I'm not sure why this is happening! On Darwin it works
+    # fine.
+    autoPatchelfHook
   ];
 
-  preBuild = ''
-    substituteInPlace h3/h3.py \
-      --subst-var-by libh3_path ${h3}/lib/libh3${stdenv.hostPlatform.extensions.sharedLibrary}
-  '';
+  # This is not needed per-se, it's only added for autoPatchelfHook to work
+  # correctly. See the note above ^^
+  buildInputs = lib.optionals stdenv.hostPlatform.isLinux [ h3 ];
+
+  propagatedBuildInputs = [ numpy ];
+
+  # The following prePatch replaces the h3lib compilation with using the h3 packaged in nixpkgs.
+  #
+  # - Remove the h3lib submodule.
+  # - Patch CMakeLists to avoid building h3lib, and use h3 instead.
+  prePatch =
+    let
+      cmakeCommands = ''
+        include_directories(${h3}/include/h3)
+        link_directories(${h3}/lib)
+      '';
+    in ''
+      rm -r src/h3lib
+      substituteInPlace CMakeLists.txt --replace "add_subdirectory(src/h3lib)" "${cmakeCommands}"
+    '';
+
+  # Extra check to make sure we can import it from Python
+  pythonImportsCheck = [ "h3" ];
 
   meta = with lib; {
     homepage = "https://github.com/uber/h3-py";
-    description = "This library provides Python bindings for the H3 Core Library.";
+    description = "Hierarchical hexagonal geospatial indexing system";
     license = licenses.asl20;
-    platforms = platforms.unix ++ platforms.darwin;
     maintainers = [ maintainers.kalbasit ];
   };
 }