From feb20da98fe546ab5342e0d7720da8fcda53daab Mon Sep 17 00:00:00 2001 From: Weijia Wang <9713184+wegank@users.noreply.github.com> Date: Mon, 5 Feb 2024 23:43:59 +0100 Subject: [PATCH] or-tools: 9.4 -> 9.7 --- .../science/math/or-tools/default.nix | 64 ++++++++++++------- .../or-tools/fix-stringview-compile.patch | 36 ----------- .../science/math/or-tools/offline.patch | 16 +++++ pkgs/top-level/all-packages.nix | 4 +- 4 files changed, 60 insertions(+), 60 deletions(-) delete mode 100644 pkgs/development/libraries/science/math/or-tools/fix-stringview-compile.patch create mode 100644 pkgs/development/libraries/science/math/or-tools/offline.patch diff --git a/pkgs/development/libraries/science/math/or-tools/default.nix b/pkgs/development/libraries/science/math/or-tools/default.nix index acb0ece75463..cb4670204d11 100644 --- a/pkgs/development/libraries/science/math/or-tools/default.nix +++ b/pkgs/development/libraries/science/math/or-tools/default.nix @@ -6,7 +6,7 @@ , eigen , ensureNewerSourcesForZipFilesHook , fetchFromGitHub -, fetchpatch +, substituteAll , glpk , lib , pkg-config @@ -19,53 +19,57 @@ , 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.4"; + version = "9.7"; src = fetchFromGitHub { owner = "google"; repo = "or-tools"; rev = "v${version}"; - sha256 = "sha256-joWonJGuxlgHhXLznRhC1MDltQulXzpo4Do9dec1bLY="; + hash = "sha256-eHukf6TbY2dx7iEf8WfwfWsjDEubPtRO02ju0kHtASo="; }; + patches = [ - # Disable test that requires external input: https://github.com/google/or-tools/issues/3429 - (fetchpatch { - url = "https://github.com/google/or-tools/commit/7072ae92ec204afcbfce17d5360a5884c136ce90.patch"; - hash = "sha256-iWE+atp308q7pC1L1FD6sK8LvWchZ3ofxvXssguozbM="; + (substituteAll { + src = ./offline.patch; + pybind11_protobuf = "../../pybind11_protobuf"; }) - # Fix test that broke in parallel builds: https://github.com/google/or-tools/issues/3461 - (fetchpatch { - url = "https://github.com/google/or-tools/commit/a26602f24781e7bfcc39612568aa9f4010bb9736.patch"; - hash = "sha256-gM0rW0xRXMYaCwltPK0ih5mdo3HtX6mKltJDHe4gbLc="; - }) - # Backport fix in cmake test configuration where pip installs newer version from PyPi over local build, - # breaking checkPhase: https://github.com/google/or-tools/issues/3260 - (fetchpatch { - url = "https://github.com/google/or-tools/commit/edd1544375bd55f79168db315151a48faa548fa0.patch"; - hash = "sha256-S//1YM3IoRCp3Ghg8zMF0XXgIpVmaw4gH8cVb9eUbqM="; - }) - # Don't use non-existent member of string_view. Partial patch from commit - # https://github.com/google/or-tools/commit/c5a2fa1eb673bf652cb9ad4f5049d054b8166e17.patch - ./fix-stringview-compile.patch ]; # 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 ''; 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" "-DFETCH_PYTHON_DEPS=OFF" "-DUSE_GLPK=ON" "-DUSE_SCIP=OFF" "-DPython3_EXECUTABLE=${python.pythonOnBuildForHost.interpreter}" ] ++ lib.optionals stdenv.isDarwin [ "-DCMAKE_MACOSX_RPATH=OFF" ]; + + strictDeps = true; + nativeBuildInputs = [ cmake ensureNewerSourcesForZipFilesHook @@ -78,14 +82,18 @@ stdenv.mkDerivation rec { ] ++ (with python.pythonOnBuildForHost.pkgs; [ pip mypy-protobuf + mypy ]); buildInputs = [ + abseil-cpp bzip2 cbc eigen glpk python.pkgs.absl-py python.pkgs.pybind11 + python.pkgs.pytest + python.pkgs.scipy python.pkgs.setuptools python.pkgs.wheel re2 @@ -103,7 +111,19 @@ stdenv.mkDerivation rec { python.pkgs.virtualenv ]; - doCheck = true; + 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; + + preCheck = '' + export LD_LIBRARY_PATH=$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}$PWD/lib + ''; # This extra configure step prevents the installer from littering # $out/bin with sample programs that only really function as tests, diff --git a/pkgs/development/libraries/science/math/or-tools/fix-stringview-compile.patch b/pkgs/development/libraries/science/math/or-tools/fix-stringview-compile.patch deleted file mode 100644 index 760ab80a38e4..000000000000 --- a/pkgs/development/libraries/science/math/or-tools/fix-stringview-compile.patch +++ /dev/null @@ -1,36 +0,0 @@ -diff --git a/ortools/lp_data/lp_parser.cc b/ortools/lp_data/lp_parser.cc -index 58286306e5..bd26c019ab 100644 ---- a/ortools/lp_data/lp_parser.cc -+++ b/ortools/lp_data/lp_parser.cc -@@ -185,7 +185,7 @@ bool LPParser::ParseIntegerVariablesList(StringPiece line) { - - bool LPParser::ParseConstraint(StringPiece constraint) { - const StatusOr parsed_constraint_or_status = -- ::operations_research::glop::ParseConstraint(constraint.as_string()); -+ ::operations_research::glop::ParseConstraint(constraint); - if (!parsed_constraint_or_status.ok()) return false; - const ParsedConstraint& parsed_constraint = - parsed_constraint_or_status.value(); -@@ -342,10 +342,9 @@ TokenType LPParser::ConsumeToken(StringPiece* sp) { - - } // namespace - --StatusOr ParseConstraint(absl::string_view constraint_view) { -+StatusOr ParseConstraint(absl::string_view constraint) { - ParsedConstraint parsed_constraint; - // Get the name, if present. -- StringPiece constraint{constraint_view}; - StringPiece constraint_copy{constraint}; - std::string consumed_name; - Fractional consumed_coeff; -@@ -413,8 +412,8 @@ StatusOr ParseConstraint(absl::string_view constraint_view) { - right_bound = consumed_coeff; - if (ConsumeToken(&constraint, &consumed_name, &consumed_coeff) != - TokenType::END) { -- return absl::InvalidArgumentError(absl::StrCat( -- "End of input was expected, found: ", constraint.as_string())); -+ return absl::InvalidArgumentError( -+ absl::StrCat("End of input was expected, found: ", constraint)); - } - } - diff --git a/pkgs/development/libraries/science/math/or-tools/offline.patch b/pkgs/development/libraries/science/math/or-tools/offline.patch new file mode 100644 index 000000000000..1a2a4dbe3631 --- /dev/null +++ b/pkgs/development/libraries/science/math/or-tools/offline.patch @@ -0,0 +1,16 @@ +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/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index bca72068589a..989476f13a7d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -37751,10 +37751,10 @@ with pkgs; inherit (darwin) DarwinTools; stdenv = if stdenv.isDarwin then overrideSDK stdenv "11.0" else stdenv; python = python3; - protobuf = protobuf_21; + protobuf = protobuf_23; # or-tools builds with -std=c++20, so abseil-cpp must # also be built that way - abseil-cpp = abseil-cpp.override { + abseil-cpp = abseil-cpp_202301.override { static = true; cxxStandard = "20"; };