diff --git a/.github/workflows/amd64_windows_cmake_cpp.yml b/.github/workflows/amd64_windows_cmake_cpp.yml
index d30baf8625..d7904aeee6 100644
--- a/.github/workflows/amd64_windows_cmake_cpp.yml
+++ b/.github/workflows/amd64_windows_cmake_cpp.yml
@@ -13,7 +13,7 @@ jobs:
{generator: "Visual Studio 17 2022", config: Debug, build_target: ALL_BUILD, test_target: RUN_TESTS, install_target: INSTALL},
]
fail-fast: false
- name: Windows • ${{ matrix.cmake.generator }} (${{ matrix.cmake.config }}) • C++
+ name: Windows • VS 2022 (${{ matrix.cmake.config }}) • C++
runs-on: windows-latest
env:
CTEST_OUTPUT_ON_FAILURE: 1
@@ -27,7 +27,7 @@ jobs:
run: >
cmake -S. -Bbuild
-G "${{ matrix.cmake.generator }}"
- -DCMAKE_BUILD_TYPE=${{ matrix.cmake.config }}
+ -DCMAKE_CONFIGURATION_TYPES=${{ matrix.cmake.config }}
-DBUILD_DEPS=ON
-DCMAKE_INSTALL_PREFIX=install
- name: Build
diff --git a/.github/workflows/amd64_windows_cmake_dotnet.yml b/.github/workflows/amd64_windows_cmake_dotnet.yml
index 4e8e612092..9010ebfd66 100644
--- a/.github/workflows/amd64_windows_cmake_dotnet.yml
+++ b/.github/workflows/amd64_windows_cmake_dotnet.yml
@@ -12,7 +12,7 @@ jobs:
{generator: "Visual Studio 17 2022", config: Release, build_target: ALL_BUILD, test_target: RUN_TESTS, install_target: INSTALL},
]
fail-fast: false
- name: Windows • ${{ matrix.cmake.generator }} • .Net
+ name: Windows • VS 2022 • .Net
runs-on: windows-latest
env:
CTEST_OUTPUT_ON_FAILURE: 1
diff --git a/.github/workflows/amd64_windows_cmake_java.yml b/.github/workflows/amd64_windows_cmake_java.yml
index 190ebf7d3f..e1f1b18b3f 100644
--- a/.github/workflows/amd64_windows_cmake_java.yml
+++ b/.github/workflows/amd64_windows_cmake_java.yml
@@ -28,7 +28,7 @@ jobs:
{distrib: 'microsoft', version: '21'}, # 2028/09
]
fail-fast: false
- name: Windows • ${{ matrix.cmake.generator }} • ${{ matrix.java.distrib }}-${{ matrix.java.version }}
+ name: Windows • VS 2022 • ${{ matrix.java.distrib }}-${{ matrix.java.version }}
runs-on: windows-latest
env:
CTEST_OUTPUT_ON_FAILURE: 1
diff --git a/.github/workflows/amd64_windows_cmake_python.yml b/.github/workflows/amd64_windows_cmake_python.yml
index 7cc795f5c3..0b6191ccf0 100644
--- a/.github/workflows/amd64_windows_cmake_python.yml
+++ b/.github/workflows/amd64_windows_cmake_python.yml
@@ -19,7 +19,7 @@ jobs:
{version: "3.13", dir: Python313},
]
fail-fast: false
- name: Windows • ${{ matrix.cmake.generator }} • Python-${{ matrix.python.version }}
+ name: Windows • VS 2022 • Python-${{ matrix.python.version }}
runs-on: windows-latest
env:
CTEST_OUTPUT_ON_FAILURE: 1
diff --git a/.github/workflows/arm64_macos_cmake_cpp.yml b/.github/workflows/arm64_macos_cmake_cpp.yml
index 8388c59aa1..92071673df 100644
--- a/.github/workflows/arm64_macos_cmake_cpp.yml
+++ b/.github/workflows/arm64_macos_cmake_cpp.yml
@@ -14,7 +14,7 @@ jobs:
]
fail-fast: false
name: MacOS • ${{ matrix.cmake.generator }} • C++
- runs-on: macos-latest # macos arm64 based runner
+ runs-on: macos-latest # macos M1 based runner
steps:
- uses: actions/checkout@v4
- name: Check cmake
diff --git a/Dependencies.txt b/Dependencies.txt
index 2ec6f3297b..23cc7b11eb 100644
--- a/Dependencies.txt
+++ b/Dependencies.txt
@@ -1,6 +1,6 @@
ZLIB=1.3.1
abseil-cpp=20240722.0
-Protobuf=v26.1
+Protobuf=v28.3
Eigen=3.4.0
Re2=2024-04-01
CoinUtils=2.11.6
diff --git a/cmake/README.md b/cmake/README.md
index 07c0d3fee8..f656bde866 100644
--- a/cmake/README.md
+++ b/cmake/README.md
@@ -246,6 +246,8 @@ cmake -S. -Bbuild -LH
| `USE_DOTNET_CORE_31` | OFF | Enable .Net Core 3.1 LTS support
Only available if `BUILD_DOTNET=ON` and not targeting arm64 platform |
| `USE_DOTNET_6` | ON | Enable .Net 6 LTS support
Only available if `BUILD_DOTNET=ON` |
| `USE_DOTNET_7` | OFF | Enable .Net 7 support
Only available if `BUILD_DOTNET=ON` |
+| `USE_DOTNET_8` | OFF | Enable .Net 8 LTS support
Only available if `BUILD_DOTNET=ON` |
+| `USE_DOTNET_9` | OFF | Enable .Net 9 support
Only available if `BUILD_DOTNET=ON` |
| `UNIVERSAL_DOTNET_PACKAGE` | OFF | Build a multi platform package (i.e. `Google.OrTools` will depends on all runtime packages)
Only available if `BUILD_DOTNET=ON` |
| | | |
| `SKIP_GPG` | ON | Disable GPG sign
Only available if `BUILD_JAVA=ON` |
diff --git a/cmake/dependencies/CMakeLists.txt b/cmake/dependencies/CMakeLists.txt
index 868b5459eb..2fa8d309de 100644
--- a/cmake/dependencies/CMakeLists.txt
+++ b/cmake/dependencies/CMakeLists.txt
@@ -49,7 +49,7 @@ endif()
include(FetchContent)
set(FETCHCONTENT_QUIET OFF)
set(FETCHCONTENT_UPDATES_DISCONNECTED ON)
-set(BUILD_SHARED_LIBS OFF)
+set(BUILD_SHARED_LIBS ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(BUILD_TESTING OFF)
set(CMAKE_Fortran_COMPILER OFF)
@@ -101,17 +101,17 @@ if(BUILD_Protobuf)
message(CHECK_START "Fetching Protobuf")
list(APPEND CMAKE_MESSAGE_INDENT " ")
set(protobuf_BUILD_TESTS OFF)
- set(protobuf_BUILD_SHARED_LIBS OFF)
+ set(protobuf_BUILD_SHARED_LIBS ON)
set(protobuf_BUILD_EXPORT OFF)
set(protobuf_MSVC_STATIC_RUNTIME OFF)
#set(protobuf_BUILD_LIBUPB ON)
FetchContent_Declare(
Protobuf
GIT_REPOSITORY "https://github.com/protocolbuffers/protobuf.git"
- GIT_TAG "v26.1"
+ GIT_TAG "v28.3"
GIT_SHALLOW TRUE
GIT_SUBMODULES ""
- PATCH_COMMAND git apply --ignore-whitespace "${CMAKE_CURRENT_LIST_DIR}/../../patches/protobuf-v26.1.patch"
+ PATCH_COMMAND git apply --ignore-whitespace "${CMAKE_CURRENT_LIST_DIR}/../../patches/protobuf-v28.3.patch"
)
FetchContent_MakeAvailable(Protobuf)
list(POP_BACK CMAKE_MESSAGE_INDENT)
@@ -295,6 +295,9 @@ endif()
# ##############################################################################
# Coin-OR does not support C++17/C++20 (use of 'register' storage class specifier)
set(CMAKE_CXX_STANDARD 11)
+if(WIN32)
+ set(BUILD_SHARED_LIBS OFF)
+endif()
if(BUILD_CoinUtils)
message(CHECK_START "Fetching CoinUtils")
@@ -388,6 +391,9 @@ if(BUILD_Cbc)
message(CHECK_PASS "fetched")
endif()
+if(WIN32)
+ set(BUILD_SHARED_LIBS ON)
+endif()
if(MSVC)
set(CMAKE_CXX_STANDARD 20)
else()
@@ -412,7 +418,14 @@ if(BUILD_googletest)
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
set(INSTALL_GTEST OFF)
set(GTEST_HAS_ABSL ON)
+ if(WIN32)
+ set(BUILD_SHARED_LIBS OFF)
+ endif()
FetchContent_MakeAvailable(googletest)
+ if(WIN32)
+ set(BUILD_SHARED_LIBS ON)
+ endif()
+
list(POP_BACK CMAKE_MESSAGE_INDENT)
message(CHECK_PASS "fetched")
endif()
@@ -430,7 +443,13 @@ if(BUILD_benchmark)
set(BENCHMARK_ENABLE_TESTING OFF)
set(BENCHMARK_ENABLE_WERROR OFF)
set(BENCHMARK_ENABLE_INSTALL OFF)
+ if(WIN32)
+ set(BUILD_SHARED_LIBS OFF)
+ endif()
FetchContent_MakeAvailable(benchmark)
+ if(WIN32)
+ set(BUILD_SHARED_LIBS ON)
+ endif()
list(POP_BACK CMAKE_MESSAGE_INDENT)
message(CHECK_PASS "fetched")
endif()
diff --git a/cmake/host.CMakeLists.txt b/cmake/host.CMakeLists.txt
index b58971db9d..28baee21a8 100644
--- a/cmake/host.CMakeLists.txt
+++ b/cmake/host.CMakeLists.txt
@@ -121,9 +121,9 @@ set(protobuf_WITH_ZLIB OFF)
FetchContent_Declare(
protobuf
GIT_REPOSITORY "https://github.com/protocolbuffers/protobuf.git"
- GIT_TAG "v26.1"
+ GIT_TAG "v28.3"
GIT_SUBMODULES ""
- PATCH_COMMAND git apply "${CMAKE_CURRENT_LIST_DIR}/@PATCHES_PATH@/protobuf-v26.1.patch")
+ PATCH_COMMAND git apply "${CMAKE_CURRENT_LIST_DIR}/@PATCHES_PATH@/protobuf-v28.3.patch")
FetchContent_MakeAvailable(protobuf)
list(POP_BACK CMAKE_MESSAGE_INDENT)
message(CHECK_PASS "fetched")
diff --git a/cmake/java.cmake b/cmake/java.cmake
index 5b2f2e6bd5..d9ad71b901 100644
--- a/cmake/java.cmake
+++ b/cmake/java.cmake
@@ -306,6 +306,145 @@ add_custom_command(
$
$<${is_ortools_shared}:$>
${JAVA_RESSOURCES_PATH}/${JAVA_NATIVE_PROJECT}/
+ COMMAND ${CMAKE_COMMAND} -E
+ $,copy,true>
+ $<${need_unix_zlib_lib}:$>
+ $<${need_windows_zlib_lib}:$>
+ ${JAVA_RESSOURCES_PATH}/${JAVA_NATIVE_PROJECT}/
+ COMMAND ${CMAKE_COMMAND} -E
+ $,copy,true>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_windows_absl_lib}:$>
+ ${JAVA_RESSOURCES_PATH}/${JAVA_NATIVE_PROJECT}/
+
+ COMMAND ${CMAKE_COMMAND} -E
+ $,copy,true>
+ $<${need_unix_re2_lib}:$>
+ $<${need_windows_re2_lib}:$>
+ ${JAVA_RESSOURCES_PATH}/${JAVA_NATIVE_PROJECT}/
+
+ COMMAND ${CMAKE_COMMAND} -E
+ $,copy,true>
+ $<${need_unix_protobuf_lib}:$>
+ $<${need_unix_protobuf_lib}:$>
+ $<${need_windows_protobuf_lib}:$>
+ $<${need_windows_protobuf_lib}:$>
+ ${JAVA_RESSOURCES_PATH}/${JAVA_NATIVE_PROJECT}/
+
+ COMMAND ${CMAKE_COMMAND} -E
+ $
+ $<${need_unix_coinutils_lib}:$>
+ ${JAVA_RESSOURCES_PATH}/${JAVA_NATIVE_PROJECT}/
+ COMMAND ${CMAKE_COMMAND} -E
+ $
+ $<${need_unix_osi_lib}:$>
+ ${JAVA_RESSOURCES_PATH}/${JAVA_NATIVE_PROJECT}/
+ COMMAND ${CMAKE_COMMAND} -E
+ $
+ $<${need_unix_clp_lib}:$>
+ $<${need_unix_clp_lib}:$>
+ $<${need_unix_clp_lib}:$>
+ ${JAVA_RESSOURCES_PATH}/${JAVA_NATIVE_PROJECT}/
+ COMMAND ${CMAKE_COMMAND} -E
+ $
+ $<${need_unix_cgl_lib}:$>
+ ${JAVA_RESSOURCES_PATH}/${JAVA_NATIVE_PROJECT}/
+ COMMAND ${CMAKE_COMMAND} -E
+ $
+ $<${need_unix_cbc_lib}:$>
+ $<${need_unix_cbc_lib}:$>
+ $<${need_unix_cbc_lib}:$>
+ ${JAVA_RESSOURCES_PATH}/${JAVA_NATIVE_PROJECT}/
+
+ COMMAND ${CMAKE_COMMAND} -E
+ $,copy,true>
+ $<${need_unix_highs_lib}:$>
+ $<${need_windows_highs_lib}:$>
+ ${JAVA_RESSOURCES_PATH}/${JAVA_NATIVE_PROJECT}/
+
COMMAND ${MAVEN_EXECUTABLE} compile -B
COMMAND ${MAVEN_EXECUTABLE} package -B $<$:-Dfatjar=true>
COMMAND ${MAVEN_EXECUTABLE} install -B $<$:-Dgpg.skip=true>
diff --git a/cmake/python.cmake b/cmake/python.cmake
index 619eae713e..6cc3dc9857 100644
--- a/cmake/python.cmake
+++ b/cmake/python.cmake
@@ -456,9 +456,147 @@ add_custom_command(
COMMAND ${CMAKE_COMMAND} -E remove -f ortools_timestamp
COMMAND ${CMAKE_COMMAND} -E make_directory ${PYTHON_PROJECT}/.libs
COMMAND ${CMAKE_COMMAND} -E
- $,SHARED_LIBRARY>,copy,true>
- $<$,SHARED_LIBRARY>:$>
- ${PYTHON_PROJECT}/.libs
+ $,copy,true>
+ $<${need_unix_zlib_lib}:$>
+ $<${need_windows_zlib_lib}:$>
+ ${PYTHON_PROJECT}/.libs
+ COMMAND ${CMAKE_COMMAND} -E
+ $,copy,true>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_unix_absl_lib}:$>
+ $<${need_windows_absl_lib}:$>
+ ${PYTHON_PROJECT}/.libs
+
+ COMMAND ${CMAKE_COMMAND} -E
+ $
+ $<${need_unix_re2_lib}:$>
+ ${PYTHON_PROJECT}/.libs
+
+ COMMAND ${CMAKE_COMMAND} -E
+ $,copy,true>
+ $<${need_unix_protobuf_lib}:$>
+ $<${need_unix_protobuf_lib}:$>
+ $<${need_windows_protobuf_lib}:$>
+ $<${need_windows_protobuf_lib}:$>
+ ${PYTHON_PROJECT}/.libs
+
+ COMMAND ${CMAKE_COMMAND} -E
+ $
+ $<${need_unix_coinutils_lib}:$>
+ ${PYTHON_PROJECT}/.libs
+ COMMAND ${CMAKE_COMMAND} -E
+ $
+ $<${need_unix_osi_lib}:$>
+ ${PYTHON_PROJECT}/.libs
+ COMMAND ${CMAKE_COMMAND} -E
+ $
+ $<${need_unix_clp_lib}:$>
+ $<${need_unix_clp_lib}:$>
+ $<${need_unix_clp_lib}:$>
+ ${PYTHON_PROJECT}/.libs
+ COMMAND ${CMAKE_COMMAND} -E
+ $
+ $<${need_unix_cgl_lib}:$>
+ ${PYTHON_PROJECT}/.libs
+ COMMAND ${CMAKE_COMMAND} -E
+ $
+ $<${need_unix_cbc_lib}:$>
+ $<${need_unix_cbc_lib}:$>
+ $<${need_unix_cbc_lib}:$>
+ ${PYTHON_PROJECT}/.libs
+
+ COMMAND ${CMAKE_COMMAND} -E
+ $,copy,true>
+ $<${need_unix_highs_lib}:$>
+ $<${need_windows_highs_lib}:$>
+ ${PYTHON_PROJECT}/.libs
+
+ COMMAND ${CMAKE_COMMAND} -E
+ $
+ $<${is_ortools_shared}:$>
+ ${PYTHON_PROJECT}/.libs
COMMAND ${CMAKE_COMMAND} -E touch ${PROJECT_BINARY_DIR}/python/ortools_timestamp
MAIN_DEPENDENCY
ortools/python/setup.py.in
diff --git a/ortools/dotnet/Google.OrTools-full.csproj.in b/ortools/dotnet/Google.OrTools-full.csproj.in
index 94fe0d295a..86acea665e 100644
--- a/ortools/dotnet/Google.OrTools-full.csproj.in
+++ b/ortools/dotnet/Google.OrTools-full.csproj.in
@@ -184,7 +184,7 @@
-
+
diff --git a/ortools/dotnet/Google.OrTools-local.csproj.in b/ortools/dotnet/Google.OrTools-local.csproj.in
index 851b23a537..83175a918a 100644
--- a/ortools/dotnet/Google.OrTools-local.csproj.in
+++ b/ortools/dotnet/Google.OrTools-local.csproj.in
@@ -172,7 +172,7 @@
-
+
diff --git a/ortools/dotnet/Google.OrTools.runtime.csproj.in b/ortools/dotnet/Google.OrTools.runtime.csproj.in
index ad6d3dba0c..50a23ea38a 100644
--- a/ortools/dotnet/Google.OrTools.runtime.csproj.in
+++ b/ortools/dotnet/Google.OrTools.runtime.csproj.in
@@ -26,7 +26,113 @@
runtimes/@DOTNET_RID@/native/%(Filename)%(Extension)
true
diff --git a/ortools/java/com/google/ortools/Loader.java b/ortools/java/com/google/ortools/Loader.java
index a1243d0839..8f67a28a94 100644
--- a/ortools/java/com/google/ortools/Loader.java
+++ b/ortools/java/com/google/ortools/Loader.java
@@ -131,8 +131,37 @@ public class Loader {
loaded = true;
return;
} catch (IOException | UnsatisfiedLinkError e) {
+ // Do nothing.
// System.out.println("Can't System.load(jniortools)");
- throw new RuntimeException(e);
+ }
+
+ // On windows, try to load each libraries one by one.
+ // System.out.println("Prefix: " + Platform.RESOURCE_PREFIX);
+ if (Platform.RESOURCE_PREFIX.equals("win32-x86-64")) {
+ try {
+ URI resourceURI = getNativeResourceURI();
+ Path tempPath = unpackNativeResources(resourceURI);
+ // libraries order does matter !
+ List dlls = Arrays.asList(
+ "zlib1", "abseil_dll", "re2", "utf8_validity", "libprotobuf", "highs", "jniortools");
+ for (String dll : dlls) {
+ try {
+ // System.out.println("System.load(" + dll + ")");
+ System.load(tempPath.resolve(RESOURCE_PATH)
+ .resolve(System.mapLibraryName(dll))
+ .toAbsolutePath()
+ .toString());
+ } catch (UnsatisfiedLinkError e) {
+ System.out.println("System.load(" + dll + ") failed!");
+ throw new RuntimeException(e);
+ }
+ }
+ loaded = true;
+ return;
+ } catch (IOException e) {
+ // Do nothing.
+ // System.out.println("unpack failed");
+ }
}
}
}
diff --git a/ortools/java/pom-full.xml.in b/ortools/java/pom-full.xml.in
index ae6b07cc1b..0172065fa7 100644
--- a/ortools/java/pom-full.xml.in
+++ b/ortools/java/pom-full.xml.in
@@ -109,7 +109,7 @@
com.google.protobuf
protobuf-java
- 4.26.1
+ 4.28.3
diff --git a/ortools/java/pom-local.xml.in b/ortools/java/pom-local.xml.in
index 3861137fad..d6544d6bca 100644
--- a/ortools/java/pom-local.xml.in
+++ b/ortools/java/pom-local.xml.in
@@ -81,7 +81,7 @@
com.google.protobuf
protobuf-java
- 4.26.1
+ 4.28.3
diff --git a/ortools/python/__init__.py.in b/ortools/python/__init__.py.in
index 5c23ff8534..8eed3a3e5c 100644
--- a/ortools/python/__init__.py.in
+++ b/ortools/python/__init__.py.in
@@ -43,3 +43,23 @@ This repository contains several component:
__docformat__ = "markdown" # explicitly disable rST processing above.
__version__ = "@PROJECT_VERSION@"
+
+import os
+
+def _load_ortools_libs():
+ """Load shared libraries on Windows"""
+ if os.name == "nt":
+ try:
+ from ctypes import WinDLL
+ basedir = os.path.dirname(__file__)
+ except:
+ pass
+ else:
+ for dll in ["zlib1.dll", "abseil_dll.dll", "utf8_validity.dll", "libprotobuf.dll", "highs.dll"]:
+ dll_path = os.path.join(basedir, ".libs", dll)
+ if os.path.exists(dll_path):
+ print(f"load {dll_path}...")
+ WinDLL(dll_path)
+
+
+_load_ortools_libs()
diff --git a/ortools/python/setup.py.in b/ortools/python/setup.py.in
index e60b038049..68fd5375ef 100644
--- a/ortools/python/setup.py.in
+++ b/ortools/python/setup.py.in
@@ -46,11 +46,14 @@ setup(
'absl-py >= 2.0.0',
'numpy >= 1.13.3',
'pandas >= 2.0.0',
- 'protobuf >= 5.26.1,<5.27',
+ 'protobuf >= 5.28.3,<5.29',
'immutabledict >= 3.0.0',
],
package_data={
- '@PYTHON_PROJECT@':[$<$,SHARED_LIBRARY>:'.libs/*','../$'>],
+ '@PYTHON_PROJECT@':[
+ '.libs/*',
+ $<$,SHARED_LIBRARY>:'../$'>
+ ],
'@PYTHON_PROJECT@.init.python':[
'$',
'*.pyi'
diff --git a/patches/BUILD.bazel b/patches/BUILD.bazel
index 9adce1f26c..66d2505fd6 100644
--- a/patches/BUILD.bazel
+++ b/patches/BUILD.bazel
@@ -14,7 +14,6 @@
exports_files([
"abseil-cpp-20240722.0.patch",
"highs-v1.8.0.patch",
- "protobuf-v26.1.patch",
"protobuf-v28.3.patch",
"pybind11_abseil.patch",
"pybind11_bazel.patch",
diff --git a/patches/protobuf-v26.1.patch b/patches/protobuf-v26.1.patch
deleted file mode 100644
index 3e0935fcf8..0000000000
--- a/patches/protobuf-v26.1.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 312eeb928..3e154785b 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -41,7 +41,7 @@ else (BUILD_SHARED_LIBS)
- endif (BUILD_SHARED_LIBS)
- option(protobuf_BUILD_SHARED_LIBS "Build Shared Libraries" ${protobuf_BUILD_SHARED_LIBS_DEFAULT})
- include(CMakeDependentOption)
--cmake_dependent_option(protobuf_MSVC_STATIC_RUNTIME "Link static runtime libraries" ON
-+cmake_dependent_option(protobuf_MSVC_STATIC_RUNTIME "Link static runtime libraries" OFF
- "NOT protobuf_BUILD_SHARED_LIBS" OFF)
- set(protobuf_WITH_ZLIB_DEFAULT ON)
- option(protobuf_WITH_ZLIB "Build with zlib support" ${protobuf_WITH_ZLIB_DEFAULT})
-@@ -158,24 +158,16 @@ endif()
-
- set(_protobuf_FIND_ZLIB)
- if (protobuf_WITH_ZLIB)
-- find_package(ZLIB)
-- if (ZLIB_FOUND)
-- set(HAVE_ZLIB 1)
-- # FindZLIB module define ZLIB_INCLUDE_DIRS variable
-- # Set ZLIB_INCLUDE_DIRECTORIES for compatible
-- set(ZLIB_INCLUDE_DIRECTORIES ${ZLIB_INCLUDE_DIRECTORIES} ${ZLIB_INCLUDE_DIRS})
-- # Using imported target if exists
-- if (TARGET ZLIB::ZLIB)
-- set(ZLIB_LIBRARIES ZLIB::ZLIB)
-- set(_protobuf_FIND_ZLIB "if(NOT ZLIB_FOUND)\n find_package(ZLIB)\nendif()")
-- endif (TARGET ZLIB::ZLIB)
-- else (ZLIB_FOUND)
-- set(HAVE_ZLIB 0)
-- # Explicitly set these to empty (override NOT_FOUND) so cmake doesn't
-- # complain when we use them later.
-- set(ZLIB_INCLUDE_DIRECTORIES)
-- set(ZLIB_LIBRARIES)
-- endif (ZLIB_FOUND)
-+ if (NOT TARGET ZLIB::ZLIB)
-+ find_package(ZLIB REQUIRED)
-+ endif()
-+ set(HAVE_ZLIB 1)
-+ # FindZLIB module define ZLIB_INCLUDE_DIRS variable
-+ # Set ZLIB_INCLUDE_DIRECTORIES for compatible
-+ set(ZLIB_INCLUDE_DIRECTORIES ${ZLIB_INCLUDE_DIRECTORIES} ${ZLIB_INCLUDE_DIRS})
-+ # Using imported target if exists
-+ set(ZLIB_LIBRARIES ZLIB::ZLIB)
-+ set(_protobuf_FIND_ZLIB "if(NOT ZLIB_FOUND AND NOT TARGET ZLIB::ZLIB)\n find_package(ZLIB REQUIRED)\nendif()")
- endif (protobuf_WITH_ZLIB)
-
- # We need to link with libatomic on systems that do not have builtin atomics, or
-@@ -277,7 +269,6 @@ else (MSVC)
- endif (MSVC)
-
- include_directories(
-- ${ZLIB_INCLUDE_DIRECTORIES}
- ${protobuf_BINARY_DIR}
- # Support #include-ing other top-level directories, i.e. upb_generator.
- ${protobuf_SOURCE_DIR}
-diff --git a/cmake/install.cmake b/cmake/install.cmake
-index 52914a8ea..d7dc5f232 100644
---- a/cmake/install.cmake
-+++ b/cmake/install.cmake
-@@ -31,6 +31,7 @@ foreach(_library ${_protobuf_libraries})
- set_property(TARGET ${_library}
- PROPERTY INTERFACE_INCLUDE_DIRECTORIES
- $
-+ $
- $)
- if (UNIX AND NOT APPLE)
- set_property(TARGET ${_library}