From be2eda3dc1cbfdd50ff93b43867708435076472f Mon Sep 17 00:00:00 2001
From: Vladimir Davydov <vdavydov@tarantool.org>
Date: Wed, 22 Nov 2023 14:04:31 +0300
Subject: [PATCH] cmake: use legacy layout for static-build bundled libs

SVACE stopped working after commit 98b38e89ba054 ("cmake: allow to
bundle static dependencies in main project") changed the bundled libs
directory layout. To fix this, let's introduce the new cmake option
BUNDLED_LIBS_INSTALL_DIR and set it in static-build/CMakeLists.txt to
the legacy location. Also, let's use the legacy directories for each
external project's PREFIX, SOURCE_DIR, BINARY_DIR, and STAMP_DIR.

Follow-up #9242

NO_DOC=build
NO_TEST=build
NO_CHANGELOG=build

(cherry picked from commit 37b1c2871cb7f07d127ef5ba969a9921f5b87905)
---
 CMakeLists.txt                               |  4 ++++
 cmake/BuildICONV.cmake                       |  5 ++++-
 cmake/BuildICU.cmake                         |  5 ++++-
 cmake/BuildOpenSSL.cmake                     |  5 ++++-
 cmake/BuildReadline.cmake                    | 10 ++++++++--
 cmake/BuildZLIB.cmake                        |  5 ++++-
 cmake/BuildZZIP.cmake                        |  5 ++++-
 static-build/cmake/AddTarantoolProject.cmake |  1 +
 8 files changed, 33 insertions(+), 7 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2b5f11345f..d2adb2555b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -60,6 +60,10 @@ if(BUILD_STATIC_WITH_BUNDLED_LIBS)
     set(BUILD_STATIC ON)
 endif()
 
+if(NOT BUNDLED_LIBS_INSTALL_DIR)
+    set(BUNDLED_LIBS_INSTALL_DIR ${PROJECT_BINARY_DIR}/build)
+endif()
+
 include(cmake/utils.cmake)
 include(cmake/pod2man.cmake)
 # the order is significant: we need to know os and compiler to configure libs
diff --git a/cmake/BuildICONV.cmake b/cmake/BuildICONV.cmake
index ebd71bc1b1..5a417aabe6 100644
--- a/cmake/BuildICONV.cmake
+++ b/cmake/BuildICONV.cmake
@@ -1,6 +1,6 @@
 set(ICONV_VERSION 1.17)
 set(ICONV_HASH d718cd5a59438be666d1575855be72c3)
-set(ICONV_INSTALL_DIR ${PROJECT_BINARY_DIR}/build/iconv)
+set(ICONV_INSTALL_DIR ${BUNDLED_LIBS_INSTALL_DIR}/iconv-prefix)
 set(ICONV_INCLUDE_DIR ${ICONV_INSTALL_DIR}/include)
 set(ICONV_LIBRARY ${ICONV_INSTALL_DIR}/lib/libiconv.a)
 set(ICONV_CFLAGS "${DEPENDENCY_CFLAGS} -O2")
@@ -14,6 +14,9 @@ endif()
 
 ExternalProject_Add(bundled-iconv-project
     PREFIX ${ICONV_INSTALL_DIR}
+    SOURCE_DIR ${ICONV_INSTALL_DIR}/src/iconv
+    BINARY_DIR ${ICONV_INSTALL_DIR}/src/iconv-build
+    STAMP_DIR ${ICONV_INSTALL_DIR}/src/iconv-stamp
     URL URL ${BACKUP_STORAGE}/libiconv/libiconv-${ICONV_VERSION}.tar.gz
     URL_MD5 ${ICONV_HASH}
     CONFIGURE_COMMAND <SOURCE_DIR>/configure
diff --git a/cmake/BuildICU.cmake b/cmake/BuildICU.cmake
index 4810a41453..dcfe1bc32c 100644
--- a/cmake/BuildICU.cmake
+++ b/cmake/BuildICU.cmake
@@ -1,7 +1,7 @@
 set(ICU_VERSION release-71-1/icu4c-71_1)
 set(ICU_HASH e06ffc96f59762bd3c929b217445aaec)
 set(ICU_PATCHES_DIR ${PROJECT_SOURCE_DIR}/patches)
-set(ICU_INSTALL_DIR ${PROJECT_BINARY_DIR}/build/icu)
+set(ICU_INSTALL_DIR ${BUNDLED_LIBS_INSTALL_DIR}/icu-prefix)
 set(ICU_INCLUDE_DIR ${ICU_INSTALL_DIR}/include)
 set(ICU_I18N_LIBRARY ${ICU_INSTALL_DIR}/lib/libicui18n.a)
 set(ICU_UC_LIBRARY ${ICU_INSTALL_DIR}/lib/libicuuc.a)
@@ -19,6 +19,9 @@ endif()
 
 ExternalProject_Add(bundled-icu-project
     PREFIX ${ICU_INSTALL_DIR}
+    SOURCE_DIR ${ICU_INSTALL_DIR}/src/icu
+    BINARY_DIR ${ICU_INSTALL_DIR}/src/icu-build
+    STAMP_DIR ${ICU_INSTALL_DIR}/src/icu-stamp
     URL https://github.com/unicode-org/icu/releases/download/${ICU_VERSION}-src.tgz
     URL_MD5 ${ICU_HASH}
     CONFIGURE_COMMAND <SOURCE_DIR>/source/configure
diff --git a/cmake/BuildOpenSSL.cmake b/cmake/BuildOpenSSL.cmake
index 4c440e5692..015e14220b 100644
--- a/cmake/BuildOpenSSL.cmake
+++ b/cmake/BuildOpenSSL.cmake
@@ -1,7 +1,7 @@
 set(OPENSSL_VERSION 1.1.1q)
 set(OPENSSL_HASH c685d239b6a6e1bd78be45624c092f51)
 set(OPENSSL_PATCHES_DIR ${PROJECT_SOURCE_DIR}/patches)
-set(OPENSSL_INSTALL_DIR ${PROJECT_BINARY_DIR}/build/openssl)
+set(OPENSSL_INSTALL_DIR ${BUNDLED_LIBS_INSTALL_DIR}/openssl-prefix)
 set(OPENSSL_INCLUDE_DIR ${OPENSSL_INSTALL_DIR}/include)
 set(OPENSSL_CRYPTO_LIBRARY ${OPENSSL_INSTALL_DIR}/lib/libcrypto.a)
 set(OPENSSL_SSL_LIBRARY ${OPENSSL_INSTALL_DIR}/lib/libssl.a)
@@ -16,6 +16,9 @@ endif()
 
 ExternalProject_Add(bundled-openssl-project
     PREFIX ${OPENSSL_INSTALL_DIR}
+    SOURCE_DIR ${OPENSSL_INSTALL_DIR}/src/openssl
+    BINARY_DIR ${OPENSSL_INSTALL_DIR}/src/openssl-build
+    STAMP_DIR ${OPENSSL_INSTALL_DIR}/src/openssl-stamp
     URL ${BACKUP_STORAGE}/openssl/openssl-${OPENSSL_VERSION}.tar.gz
     URL_MD5 ${OPENSSL_HASH}
     CONFIGURE_COMMAND <SOURCE_DIR>/config
diff --git a/cmake/BuildReadline.cmake b/cmake/BuildReadline.cmake
index 1516efc491..ef3e501c1f 100644
--- a/cmake/BuildReadline.cmake
+++ b/cmake/BuildReadline.cmake
@@ -1,6 +1,6 @@
 set(NCURSES_VERSION 6.3-20220716)
 set(NCURSES_HASH 2b7a0e31ebbd8144680f985d61f5bbd5)
-set(NCURSES_INSTALL_DIR ${PROJECT_BINARY_DIR}/build/ncurses)
+set(NCURSES_INSTALL_DIR ${BUNDLED_LIBS_INSTALL_DIR}/ncurses-prefix)
 set(NCURSES_LIBRARY ${NCURSES_INSTALL_DIR}/lib/libncurses.a)
 set(NCURSES_TINFO_LIBRARY ${NCURSES_INSTALL_DIR}/lib/libtinfo.a)
 set(NCURSES_CFLAGS "${DEPENDENCY_CFLAGS} -O2")
@@ -11,7 +11,7 @@ set(NCURSES_LDFLAGS "")
 set(READLINE_VERSION 8.0)
 set(READLINE_HASH 7e6c1f16aee3244a69aba6e438295ca3)
 set(READLINE_PATCHES_DIR ${PROJECT_SOURCE_DIR}/patches)
-set(READLINE_INSTALL_DIR ${PROJECT_BINARY_DIR}/build/readline)
+set(READLINE_INSTALL_DIR ${BUNDLED_LIBS_INSTALL_DIR}/readline-prefix)
 set(READLINE_INCLUDE_DIR ${READLINE_INSTALL_DIR}/include)
 set(READLINE_LIBRARY ${READLINE_INSTALL_DIR}/lib/libreadline.a)
 set(READLINE_CFLAGS "${DEPENDENCY_CFLAGS} -O2")
@@ -29,6 +29,9 @@ endif()
 
 ExternalProject_Add(bundled-ncurses-project
     PREFIX ${NCURSES_INSTALL_DIR}
+    SOURCE_DIR ${NCURSES_INSTALL_DIR}/src/ncurses
+    BINARY_DIR ${NCURSES_INSTALL_DIR}/src/ncurses-build
+    STAMP_DIR ${NCURSES_INSTALL_DIR}/src/ncurses-stamp
     URL ${BACKUP_STORAGE}/ncurses/ncurses-${NCURSES_VERSION}.tgz
     URL_MD5 ${NCURSES_HASH}
     CONFIGURE_COMMAND <SOURCE_DIR>/configure
@@ -73,6 +76,9 @@ add_dependencies(bundled-ncurses-tinfo bundled-ncurses-project)
 
 ExternalProject_Add(bundled-readline-project
     PREFIX ${READLINE_INSTALL_DIR}
+    SOURCE_DIR ${READLINE_INSTALL_DIR}/src/readline
+    BINARY_DIR ${READLINE_INSTALL_DIR}/src/readline-build
+    STAMP_DIR ${READLINE_INSTALL_DIR}/src/readline-stamp
     URL ${BACKUP_STORAGE}/readline/readline-${READLINE_VERSION}.tar.gz
     URL_MD5 ${READLINE_HASH}
     CONFIGURE_COMMAND <SOURCE_DIR>/configure
diff --git a/cmake/BuildZLIB.cmake b/cmake/BuildZLIB.cmake
index f813102ac0..b4aeec84ec 100644
--- a/cmake/BuildZLIB.cmake
+++ b/cmake/BuildZLIB.cmake
@@ -1,6 +1,6 @@
 set(ZLIB_VERSION 1.2.12)
 set(ZLIB_HASH 5fc414a9726be31427b440b434d05f78)
-set(ZLIB_INSTALL_DIR ${PROJECT_BINARY_DIR}/build/zlib)
+set(ZLIB_INSTALL_DIR ${BUNDLED_LIBS_INSTALL_DIR}/zlib-prefix)
 set(ZLIB_INCLUDE_DIR ${ZLIB_INSTALL_DIR}/include)
 set(ZLIB_LIBRARY ${ZLIB_INSTALL_DIR}/lib/libz.a)
 set(ZLIB_CFLAGS "${DEPENDENCY_CFLAGS} -O2")
@@ -14,6 +14,9 @@ endif()
 
 ExternalProject_Add(bundled-zlib-project
     PREFIX ${ZLIB_INSTALL_DIR}
+    SOURCE_DIR ${ZLIB_INSTALL_DIR}/src/zlib
+    BINARY_DIR ${ZLIB_INSTALL_DIR}/src/zlib-build
+    STAMP_DIR ${ZLIB_INSTALL_DIR}/src/zlib-stamp
     URL ${BACKUP_STORAGE}/zlib/zlib-${ZLIB_VERSION}.tar.gz
     URL_MD5 ${ZLIB_HASH}
     CONFIGURE_COMMAND env
diff --git a/cmake/BuildZZIP.cmake b/cmake/BuildZZIP.cmake
index 8847873525..b819351e29 100644
--- a/cmake/BuildZZIP.cmake
+++ b/cmake/BuildZZIP.cmake
@@ -1,6 +1,6 @@
 set(ZZIP_VERSION v0.13.71)
 set(ZZIP_HASH 1aa094186cf2222e4cda1b91b8fb8f60)
-set(ZZIP_INSTALL_DIR ${PROJECT_BINARY_DIR}/build/zzip)
+set(ZZIP_INSTALL_DIR ${BUNDLED_LIBS_INSTALL_DIR}/zzip-prefix)
 set(ZZIP_INCLUDE_DIR ${ZZIP_INSTALL_DIR}/include)
 set(ZZIP_LIBRARY ${ZZIP_INSTALL_DIR}/lib/libzzip-0.a)
 set(ZZIP_CFLAGS "${DEPENDENCY_CFLAGS} -O2")
@@ -33,6 +33,9 @@ endif()
 
 ExternalProject_Add(bundled-zzip-project
     PREFIX ${ZZIP_INSTALL_DIR}
+    SOURCE_DIR ${ZZIP_INSTALL_DIR}/src/zzip
+    BINARY_DIR ${ZZIP_INSTALL_DIR}/src/zzip-build
+    STAMP_DIR ${ZZIP_INSTALL_DIR}/src/zzip-stamp
     URL https://github.com/gdraheim/zziplib/archive/${ZZIP_VERSION}.tar.gz
     URL_MD5 ${ZZIP_HASH}
     CMAKE_ARGS ${ZZIP_CMAKE_FLAGS}
diff --git a/static-build/cmake/AddTarantoolProject.cmake b/static-build/cmake/AddTarantoolProject.cmake
index afd7f093b6..09b9717cb2 100644
--- a/static-build/cmake/AddTarantoolProject.cmake
+++ b/static-build/cmake/AddTarantoolProject.cmake
@@ -10,6 +10,7 @@ ExternalProject_Add(tarantool
         -DCMAKE_INSTALL_LOCALSTATEDIR=<INSTALL_DIR>/var
         -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
         -DBUILD_STATIC_WITH_BUNDLED_LIBS=TRUE
+        -DBUNDLED_LIBS_INSTALL_DIR=${PROJECT_BINARY_DIR}
         -DENABLE_DIST=TRUE
         -DENABLE_HARDENING=${ENABLE_HARDENING}
         -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-- 
GitLab