Commit feb20da9 authored by Weijia Wang's avatar Weijia Wang
Browse files

or-tools: 9.4 -> 9.7

parent d0306536
Loading
Loading
Loading
Loading
+42 −22
Original line number Diff line number Diff line
@@ -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=";
    })
    # 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=";
    (substituteAll {
      src = ./offline.patch;
      pybind11_protobuf = "../../pybind11_protobuf";
    })
    # 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,
+0 −36
Original line number Diff line number Diff line
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<ParsedConstraint> 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<ParsedConstraint> ParseConstraint(absl::string_view constraint_view) {
+StatusOr<ParsedConstraint> 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<ParsedConstraint> 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));
     }
   }
 
+16 −0
Original line number Diff line number Diff line
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)
+2 −2
Original line number Diff line number Diff line
@@ -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";
    };