From 48a9ec56bec5c384cb4476948d35549b770be51b Mon Sep 17 00:00:00 2001
From: Vladimir Davydov <vdavydov@tarantool.org>
Date: Tue, 7 Nov 2023 11:22:21 +0300
Subject: [PATCH] cmake: allow to use bundled zzip

There's EMBED_LUZIP cmake option that embeds the Lua zip module in
Tarantool binary. Since the Lua zip module depends on the zzip library,
it also links the zzip library. The option is used only by Tarantool EE
so there's no config for bundling the zzip library in the CE repository.
Now, that we bundle all static build dependencies in the main project
cmake config, let's add zzip bundling code here as well. The code of
/cmake/BuildZZIP.make is copied from /static-build/CMakeLists.txt of
the EE repository.

Follow-up #9242

NO_DOC=build
NO_TEST=build
NO_CHANGELOG=build

(cherry picked from commit 140fd68188bf634c2bc998b628535bacb57f5516)
---
 CMakeLists.txt        | 12 ++++++++--
 cmake/BuildZZIP.cmake | 54 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 64 insertions(+), 2 deletions(-)
 create mode 100644 cmake/BuildZZIP.cmake

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 49c1915311..2183ecbfea 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -433,9 +433,17 @@ endif()
 #
 # ZZIP
 #
+
+option(ENABLE_BUNDLED_ZZIP "Enable building of the bundled zzip"
+    ${BUILD_STATIC_WITH_BUNDLED_LIBS})
 if(EMBED_LUAZIP)
-    set(ZZIP_FIND_REQUIRED ON)
-    find_package(ZZIP)
+    if(ENABLE_BUNDLED_ZZIP)
+        include(BuildZZIP)
+        add_dependencies(build_bundled_libs bundled-zzip)
+    else()
+        set(ZZIP_FIND_REQUIRED ON)
+        find_package(ZZIP)
+    endif()
 endif()
 
 #
diff --git a/cmake/BuildZZIP.cmake b/cmake/BuildZZIP.cmake
new file mode 100644
index 0000000000..4a9005f8b6
--- /dev/null
+++ b/cmake/BuildZZIP.cmake
@@ -0,0 +1,54 @@
+set(ZZIP_VERSION v0.13.71)
+set(ZZIP_HASH 1aa094186cf2222e4cda1b91b8fb8f60)
+set(ZZIP_INSTALL_DIR ${PROJECT_BINARY_DIR}/build/zzip)
+set(ZZIP_INCLUDE_DIR ${ZZIP_INSTALL_DIR}/include)
+set(ZZIP_LIBRARY ${ZZIP_INSTALL_DIR}/lib/libzzip-0.a)
+set(ZZIP_CFLAGS "${DEPENDENCY_CFLAGS} -O2")
+
+if(APPLE)
+    set(ZZIP_CFLAGS "${ZZIP_CFLAGS} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT}")
+endif()
+
+set(ZZIP_CMAKE_FLAGS
+    "-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}"
+    "-DCMAKE_C_FLAGS=${ZZIP_CFLAGS}"
+    "-DCMAKE_INSTALL_PREFIX=${ZZIP_INSTALL_DIR}"
+    "-DCMAKE_BUILD_TYPE=Release"
+    "-DBUILD_STATIC_LIBS=TRUE"
+    "-DBUILD_SHARED_LIBS=FALSE"
+    "-DZZIPDOCS=FALSE"
+    "-DZZIPBINS=FALSE"
+    "-DZZIPWRAP=FALSE"
+    "-DZZIPTEST=FALSE"
+    "-DZZIPSDL=FALSE"
+)
+
+if(ENABLED_BUNDLED_ZLIB)
+    list(APPEND ZZIP_CMAKE_FLAGS
+        "-DCMAKE_PREFIX_PATH=${ZLIB_INSTALL_DIR}"
+        "-DCMAKE_FIND_USE_CMAKE_SYSTEM_PATH=FALSE"
+    )
+endif()
+
+ExternalProject_Add(bundled-zzip-project
+    PREFIX ${ZZIP_INSTALL_DIR}
+    URL https://github.com/gdraheim/zziplib/archive/${ZZIP_VERSION}.tar.gz
+    URL_MD5 ${ZZIP_HASH}
+    CMAKE_ARGS ${ZZIP_CMAKE_FLAGS}
+    BUILD_BYPRODUCTS ${ZZIP_LIBRARY}
+)
+
+if(ENABLE_BUNDLED_ZLIB)
+    add_dependencies(bundled-zzip-project bundled-zlib)
+endif()
+
+add_library(bundled-zzip STATIC IMPORTED GLOBAL)
+set_target_properties(bundled-zzip PROPERTIES IMPORTED_LOCATION
+    ${ZZIP_LIBRARY})
+add_dependencies(bundled-zzip bundled-zzip-project)
+
+set(ZZIP_FOUND TRUE)
+set(ZZIP_LIBRARIES ${ZZIP_LIBRARY})
+set(ZZIP_INCLUDE_DIRS ${ZZIP_INCLUDE_DIR})
+
+message(STATUS "Using bundled zzip")
-- 
GitLab