diff --git a/pkgs/development/libraries/science/math/or-tools/default.nix b/pkgs/development/libraries/science/math/or-tools/default.nix index 3c3fac71a1e4..998ae934a397 100644 --- a/pkgs/development/libraries/science/math/or-tools/default.nix +++ b/pkgs/development/libraries/science/math/or-tools/default.nix @@ -7,8 +7,9 @@ eigen, ensureNewerSourcesForZipFilesHook, fetchFromGitHub, - replaceVars, + fetchpatch, glpk, + highs, lib, pkg-config, protobuf, @@ -20,45 +21,54 @@ zlib, }: -let - pybind11_protobuf = fetchFromGitHub { - owner = "pybind"; - repo = "pybind11_protobuf"; - rev = "b713501f1da56d9b76c42f89efd00b97c26c9eac"; - hash = "sha256-f6pzRWextH+7lm1xzyhx98wCIWH3lbhn59gSCcjsBVw="; - }; -in stdenv.mkDerivation rec { pname = "or-tools"; - version = "9.7"; + version = "9.11"; src = fetchFromGitHub { owner = "google"; repo = "or-tools"; - rev = "v${version}"; - hash = "sha256-eHukf6TbY2dx7iEf8WfwfWsjDEubPtRO02ju0kHtASo="; + tag = "v${version}"; + hash = "sha256-aRhUAs9Otvra7VPJvrf0fhDCGpYhOw1//BC4dFJ7/xI="; }; patches = [ - (replaceVars ./offline.patch { - pybind11_protobuf = "../../pybind11_protobuf"; + (fetchpatch { + name = "0001-Do-not-try-to-copy-pybind11_abseil-status-extension-.patch"; + url = "https://build.opensuse.org/public/source/science/google-or-tools/0001-Do-not-try-to-copy-pybind11_abseil-status-extension-.patch?rev=19"; + hash = "sha256-QHQ9E3mhTznJVKB+nP/9jct3uz+SPcOZ7w5tjOQ8iuk="; + }) + (fetchpatch { + name = "0001-Revert-python-Fix-python-install-on-windows-breaks-L.patch"; + url = "https://build.opensuse.org/public/source/science/google-or-tools/0001-Revert-python-Fix-python-install-on-windows-breaks-L.patch?rev=19"; + hash = "sha256-BNB3KlgjpWcZtb9e68Jkc/4xC4K0c+Iisw0eS6ltYXE="; + }) + (fetchpatch { + name = "0001-Fix-up-broken-CMake-rules-for-bundled-pybind-stuff.patch"; + url = "https://build.opensuse.org/public/source/science/google-or-tools/0001-Fix-up-broken-CMake-rules-for-bundled-pybind-stuff.patch?rev=19"; + hash = "sha256-r38ZbRkEW1ZvJb0Uf56c0+HcnfouZZJeEYlIK7quSjQ="; }) ]; # or-tools normally attempts to build Protobuf for the build platform when # cross-compiling. Instead, just tell it where to find protoc. - postPatch = '' - echo "set(PROTOC_PRG $(type -p protoc))" > cmake/host.cmake - - cp -R ${pybind11_protobuf} pybind11_protobuf - chmod -R u+w pybind11_protobuf - ''; + postPatch = + '' + echo "set(PROTOC_PRG $(type -p protoc))" > cmake/host.cmake + '' + # Patches from OpenSUSE: + # https://build.opensuse.org/projects/science/packages/google-or-tools/files/google-or-tools.spec?expand=1 + + '' + sed -i -e '/CMAKE_DEPENDENT_OPTION(INSTALL_DOC/ s/BUILD_CXX AND BUILD_DOC/BUILD_CXX/' CMakeLists.txt + find . -iname \*CMakeLists.txt -exec sed -i -e 's/pybind11_native_proto_caster/pybind11_protobuf::pybind11_native_proto_caster/' '{}' \; + sed -i -e 's/TARGET pybind11_native_proto_caster/TARGET pybind11_protobuf::pybind11_native_proto_caster/' cmake/check_deps.cmake + sed -i -e "/protobuf/ { s/.*,/'protobuf >= 5.26',/ }" ortools/python/setup.py.in + ''; cmakeFlags = [ "-DBUILD_DEPS=OFF" "-DBUILD_PYTHON=ON" "-DBUILD_pybind11=OFF" - "-DBUILD_pybind11_protobuf=ON" "-DCMAKE_INSTALL_BINDIR=bin" "-DCMAKE_INSTALL_INCLUDEDIR=include" "-DCMAKE_INSTALL_LIBDIR=lib" @@ -95,6 +105,8 @@ stdenv.mkDerivation rec { glpk python.pkgs.absl-py python.pkgs.pybind11 + python.pkgs.pybind11-abseil + python.pkgs.pybind11-protobuf python.pkgs.pytest python.pkgs.scipy python.pkgs.setuptools @@ -104,23 +116,18 @@ stdenv.mkDerivation rec { ]; propagatedBuildInputs = [ abseil-cpp + highs protobuf - (python.pkgs.protobuf4.override { protobuf = protobuf; }) + (python.pkgs.protobuf.override { protobuf = protobuf; }) python.pkgs.numpy + python.pkgs.pandas + python.pkgs.immutabledict ]; nativeCheckInputs = [ python.pkgs.matplotlib - python.pkgs.pandas python.pkgs.virtualenv ]; - env.NIX_CFLAGS_COMPILE = toString [ - # fatal error: 'python/google/protobuf/proto_api.h' file not found - "-I${protobuf.src}" - # fatal error: 'pybind11_protobuf/native_proto_caster.h' file not found - "-I${pybind11_protobuf}" - ]; - # some tests fail on linux and hang on darwin doCheck = false; @@ -149,7 +156,7 @@ stdenv.mkDerivation rec { description = '' Google's software suite for combinatorial optimization. ''; - mainProgram = "fzn-ortools"; + mainProgram = "fzn-cp-sat"; maintainers = with maintainers; [ andersk ]; platforms = with platforms; linux ++ darwin; }; diff --git a/pkgs/development/libraries/science/math/or-tools/offline.patch b/pkgs/development/libraries/science/math/or-tools/offline.patch deleted file mode 100644 index 1a2a4dbe3631..000000000000 --- a/pkgs/development/libraries/science/math/or-tools/offline.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/cmake/dependencies/CMakeLists.txt b/cmake/dependencies/CMakeLists.txt -index af3a28c113..ba92c3c55e 100644 ---- a/cmake/dependencies/CMakeLists.txt -+++ b/cmake/dependencies/CMakeLists.txt -@@ -177,9 +177,8 @@ if(BUILD_PYTHON AND BUILD_pybind11_protobuf) - list(APPEND CMAKE_MESSAGE_INDENT " ") - FetchContent_Declare( - pybind11_protobuf -- GIT_REPOSITORY "https://github.com/pybind/pybind11_protobuf.git" -- GIT_TAG "main" -- PATCH_COMMAND git apply --ignore-whitespace "${CMAKE_CURRENT_LIST_DIR}/../../patches/pybind11_protobuf.patch" -+ SOURCE_DIR @pybind11_protobuf@ -+ PATCH_COMMAND patch -p1 < "${CMAKE_CURRENT_LIST_DIR}/../../patches/pybind11_protobuf.patch" - ) - FetchContent_MakeAvailable(pybind11_protobuf) - list(POP_BACK CMAKE_MESSAGE_INDENT) diff --git a/pkgs/development/python-modules/pybind11-abseil/default.nix b/pkgs/development/python-modules/pybind11-abseil/default.nix new file mode 100644 index 000000000000..de497d6eec18 --- /dev/null +++ b/pkgs/development/python-modules/pybind11-abseil/default.nix @@ -0,0 +1,60 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + fetchpatch, + cmake, + abseil-cpp, + pybind11, + python, +}: + +buildPythonPackage rec { + pname = "pybind11-abseil"; + version = "202402.0"; + pyproject = false; + + src = fetchFromGitHub { + owner = "pybind"; + repo = "pybind11_abseil"; + rev = "v${version}"; + hash = "sha256-hFVuGzEFqAEm2p2RmfhFtLB6qOqNuVNcwcLh8dIWi0k="; + }; + + patches = [ + (fetchpatch { + name = "pybind11_abseil.patch"; + url = "https://build.opensuse.org/public/source/openSUSE:Factory/pybind11-abseil/pybind11_abseil.patch?rev=2"; + hash = "sha256-zwxCIhYMvexdSUmKM22OMBMEo0NRDgMtSVMDySFCn6U="; + }) + (fetchpatch { + name = "use-system-packages-if-possible.patch"; + url = "https://build.opensuse.org/public/source/openSUSE:Factory/pybind11-abseil/use-system-packages-if-possible.patch?rev=2"; + hash = "sha256-CLHOSni2ej6ICtvMtBoCIpR9CNPPibwIS+hYbOCAwBE="; + }) + (fetchpatch { + name = "0001-Install-headers-and-CMake-development-files.patch"; + url = "https://build.opensuse.org/public/source/openSUSE:Factory/pybind11-abseil/0001-Install-headers-and-CMake-development-files.patch?rev=2"; + hash = "sha256-TU9AzvF83aROY4gwys2ITOcdtjEm4x2IbhX4cHNWp0M="; + }) + ]; + + nativeBuildInputs = [ cmake ]; + + buildInputs = [ + abseil-cpp + pybind11 + ]; + + cmakeFlags = [ + (lib.cmakeFeature "CMAKE_INSTALL_PYDIR" "${placeholder "out"}/${python.sitePackages}") + (lib.cmakeFeature "Python_EXECUTABLE" python.interpreter) + ]; + + meta = { + description = "Pybind11 bindings for the Abseil C++ Common Libraries"; + homepage = "https://github.com/pybind/pybind11_abseil"; + license = lib.licenses.bsd3; + maintainers = with lib.maintainers; [ wegank ]; + }; +} diff --git a/pkgs/development/python-modules/pybind11-protobuf/default.nix b/pkgs/development/python-modules/pybind11-protobuf/default.nix new file mode 100644 index 000000000000..eef20b7c3744 --- /dev/null +++ b/pkgs/development/python-modules/pybind11-protobuf/default.nix @@ -0,0 +1,51 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + fetchpatch, + cmake, + abseil-cpp_202301, + protobuf_23, + pybind11, +}: + +buildPythonPackage { + pname = "pybind11-protobuf"; + version = "0-unstable-2024-11-01"; + pyproject = false; + + src = fetchFromGitHub { + owner = "pybind"; + repo = "pybind11_protobuf"; + rev = "90b1a5b9de768340069c15b603d467c21cac5e0b"; + hash = "sha256-3OuwRP9MhxmcfeDx+p74Fz6iLqi9FXbR3t3BtafesKk="; + }; + + patches = [ + (fetchpatch { + name = "0006-Add-install-target-for-CMake-builds.patch"; + url = "https://build.opensuse.org/public/source/openSUSE:Factory/pybind11_protobuf/0006-Add-install-target-for-CMake-builds.patch?rev=2"; + hash = "sha256-tjaOr6f+JCRft0SWd0Zfte7FEOYOP7RrW0Vjz34rX6I="; + }) + (fetchpatch { + name = "0007-CMake-Use-Python-Module.patch"; + url = "https://build.opensuse.org/public/source/openSUSE:Factory/pybind11_protobuf/0007-CMake-Use-Python-Module.patch?rev=2"; + hash = "sha256-A1dhfh31FMBHBdCfoYmQrInZvO/DeuVMUL57PpUHYfA="; + }) + ]; + + nativeBuildInputs = [ cmake ]; + + buildInputs = [ + abseil-cpp_202301 + protobuf_23 + pybind11 + ]; + + meta = { + description = "Pybind11 bindings for Google's Protocol Buffers"; + homepage = "https://github.com/pybind/pybind11_protobuf"; + license = lib.licenses.bsd3; + maintainers = with lib.maintainers; [ wegank ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 8a8d2bdc8683..c253c9d35785 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -16801,14 +16801,15 @@ with pkgs; or-tools = callPackage ../development/libraries/science/math/or-tools { inherit (darwin) DarwinTools; - stdenv = if stdenv.hostPlatform.isDarwin then overrideSDK stdenv "11.0" else stdenv; python = python3; - protobuf = protobuf_23; - # or-tools builds with -std=c++20, so abseil-cpp must + protobuf = protobuf_26.override { + abseil-cpp = abseil-cpp_202407; + }; + # or-tools builds with -std=c++17, so abseil-cpp must # also be built that way - abseil-cpp = abseil-cpp_202301.override { + abseil-cpp = abseil-cpp_202407.override { static = true; - cxxStandard = "20"; + cxxStandard = "17"; }; }; diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index f49f6b5d1ca9..b83c4c5cdb0c 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -11752,6 +11752,10 @@ self: super: with self; { pybind11 = callPackage ../development/python-modules/pybind11 { }; + pybind11-abseil = callPackage ../development/python-modules/pybind11-abseil { }; + + pybind11-protobuf = callPackage ../development/python-modules/pybind11-protobuf { }; + pybind11-stubgen = callPackage ../development/python-modules/pybind11-stubgen { }; pybindgen = callPackage ../development/python-modules/pybindgen { };