Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 38 additions & 31 deletions pkgs/development/libraries/science/math/or-tools/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@
eigen,
ensureNewerSourcesForZipFilesHook,
fetchFromGitHub,
replaceVars,
fetchpatch,
glpk,
highs,
lib,
pkg-config,
protobuf,
Expand All @@ -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"
Expand Down Expand Up @@ -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
Expand All @@ -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;

Expand Down Expand Up @@ -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;
};
Expand Down
16 changes: 0 additions & 16 deletions pkgs/development/libraries/science/math/or-tools/offline.patch

This file was deleted.

60 changes: 60 additions & 0 deletions pkgs/development/python-modules/pybind11-abseil/default.nix
Original file line number Diff line number Diff line change
@@ -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 ];
};
}
51 changes: 51 additions & 0 deletions pkgs/development/python-modules/pybind11-protobuf/default.nix
Original file line number Diff line number Diff line change
@@ -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 ];
};
}
11 changes: 6 additions & 5 deletions pkgs/top-level/all-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -16814,14 +16814,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";
};
};

Expand Down
4 changes: 4 additions & 0 deletions pkgs/top-level/python-packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -11750,6 +11750,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 { };
Expand Down