diff --git a/CMakeLists.txt b/CMakeLists.txt
index 92d613433e..bf3e5dbb23 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -176,6 +176,10 @@ CMAKE_DEPENDENT_OPTION(BUILD_ZLIB "Build the ZLIB dependency Library" OFF
"NOT BUILD_DEPS" ON)
message(STATUS "Build ZLIB: ${BUILD_ZLIB}")
+CMAKE_DEPENDENT_OPTION(BUILD_BZip2 "Build the BZip2 dependency Library" OFF
+ "NOT BUILD_DEPS" ON)
+message(STATUS "Build BZip2: ${BUILD_BZip2}")
+
CMAKE_DEPENDENT_OPTION(BUILD_absl "Build the abseil-cpp dependency Library" OFF
"NOT BUILD_DEPS" ON)
message(STATUS "Build abseil-cpp: ${BUILD_absl}")
diff --git a/cmake/README.md b/cmake/README.md
index c3f207ec67..d8ac411f36 100644
--- a/cmake/README.md
+++ b/cmake/README.md
@@ -114,6 +114,7 @@ the option `-DBUILD_DEPS=ON` (`OFF` by default) or compile some of them using
the options below (see [CMake Options](#cmake-options) below).
* zlib (`BUILD_ZLIB`),
+* bzip2 (`BUILD_BZip2`),
* Google Abseil-cpp (`BUILD_absl`),
* Google Protobuf (`BUILD_Protobuf`),
* COIN-OR solvers:
@@ -196,6 +197,7 @@ cmake -S. -Bbuild -LH
| | | |
| `BUILD_DEPS` | OFF* | Default to ON if `BUILD_JAVA=ON` or `BUILD_PYTHON=ON` or `BUILD_DOTNET=ON` |
| `BUILD_ZLIB` | OFF* | Build the zlib dynamic library
**Forced** to ON if `BUILD_DEPS=ON` |
+| `BUILD_BZip2` | OFF* | Build the bzip2 dynamic library
**Forced** to ON if `BUILD_DEPS=ON` |
| `BUILD_absl` | OFF* | Build the abseil-cpp dynamic libraries
**Forced** to ON if `BUILD_DEPS=ON` |
| `BUILD_Protobuf` | OFF* | Build the protobuf dynamic libraries
**Forced** to ON if `BUILD_DEPS=ON` |
| `BUILD_re2` | OFF* | Build the re2 dynamic libraries
**Forced** to ON if `BUILD_DEPS=ON` |
diff --git a/cmake/check_deps.cmake b/cmake/check_deps.cmake
index 4e6cc73058..b7d5b2c018 100644
--- a/cmake/check_deps.cmake
+++ b/cmake/check_deps.cmake
@@ -16,6 +16,10 @@ if(NOT TARGET ZLIB::ZLIB)
message(FATAL_ERROR "Target ZLIB::ZLIB not available.")
endif()
+if(NOT TARGET BZip2::BZip2)
+ message(FATAL_ERROR "Target BZip2::BZip2 not available.")
+endif()
+
if(NOT TARGET absl::base)
message(FATAL_ERROR "Target absl::base not available.")
endif()
diff --git a/cmake/cpp.cmake b/cmake/cpp.cmake
index 7035615140..9acfea8745 100644
--- a/cmake/cpp.cmake
+++ b/cmake/cpp.cmake
@@ -578,6 +578,7 @@ endif()
target_link_libraries(${PROJECT_NAME} PUBLIC
${CMAKE_DL_LIBS}
ZLIB::ZLIB
+ BZip2::BZip2
${ABSL_DEPS}
protobuf::libprotobuf
${RE2_DEPS}
diff --git a/cmake/dependencies/CMakeLists.txt b/cmake/dependencies/CMakeLists.txt
index 5983b1cb14..04a6cc5f60 100644
--- a/cmake/dependencies/CMakeLists.txt
+++ b/cmake/dependencies/CMakeLists.txt
@@ -73,6 +73,27 @@ if(BUILD_ZLIB)
message(CHECK_PASS "fetched")
endif()
+# ##############################################################################
+# BZip2
+# ##############################################################################
+if(BUILD_BZip2)
+ message(CHECK_START "Fetching BZip2")
+ list(APPEND CMAKE_MESSAGE_INDENT " ")
+ set(ENABLE_LIB_ONLY ON)
+ FetchContent_Declare(
+ BZip2
+ GIT_REPOSITORY "https://gitlab.com/bzip2/bzip2.git"
+ GIT_TAG "master"
+ # GIT_TAG "bzip2-1.0.8" # CMake support not available
+ GIT_SHALLOW TRUE
+ PATCH_COMMAND git apply --ignore-whitespace
+ "${CMAKE_CURRENT_LIST_DIR}/../../patches/bzip2.patch"
+ )
+ FetchContent_MakeAvailable(BZip2)
+ list(POP_BACK CMAKE_MESSAGE_INDENT)
+ message(CHECK_PASS "fetched")
+endif()
+
# ##############################################################################
# ABSEIL-CPP
# ##############################################################################
diff --git a/cmake/docs/cmake.dot b/cmake/docs/cmake.dot
index f16a364e8c..30a7947e2a 100644
--- a/cmake/docs/cmake.dot
+++ b/cmake/docs/cmake.dot
@@ -34,6 +34,13 @@ digraph CMake {
label = "madler/zlib.git + cmake patch";
}
+ subgraph clusterBZIP2 {
+ BZip2 [label="BZip2::BZip2", color=royalblue];
+
+ color=royalblue;
+ label = "bzip2/bzip2.git + cmake patch";
+ }
+
subgraph clusterAbsl {
Absl [label="absl::absl_*", color=royalblue];
@@ -195,6 +202,7 @@ digraph CMake {
PKG_CPP -> EX_CPP;
ZLIB -> OR_SRC;
+ BZip2 -> OR_SRC;
Absl -> OR_SRC;
Protobuf -> OR_SRC;
Re2 -> OR_SRC;
diff --git a/cmake/docs/cmake.svg b/cmake/docs/cmake.svg
index ae7a62782c..9d3cbb5d26 100644
--- a/cmake/docs/cmake.svg
+++ b/cmake/docs/cmake.svg
@@ -4,11 +4,11 @@
-