cmake_minimum_required(VERSION 3.22)
project(carma_installer C CXX)
list(PREPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include(FetchContent)
if(NOT CARMA_DEPS)
    set(CARMA_DEPS "${CMAKE_CURRENT_BINARY_DIR}/deps")
endif()
set(CMAKE_POLICY_VERSION_MINIMUM 3.5)
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
set(BUILD_TESTING OFF CACHE BOOL "" FORCE)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
FetchContent_Declare(carma_bzip SOURCE_DIR "${CARMA_DEPS}/bzip2" URL https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz URL_HASH SHA256=ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269)
FetchContent_GetProperties(carma_bzip)
if(NOT carma_bzip_POPULATED)
    FetchContent_Populate(carma_bzip)
endif()
add_library(carma_bzip2 STATIC ${carma_bzip_SOURCE_DIR}/blocksort.c ${carma_bzip_SOURCE_DIR}/huffman.c ${carma_bzip_SOURCE_DIR}/crctable.c ${carma_bzip_SOURCE_DIR}/randtable.c ${carma_bzip_SOURCE_DIR}/compress.c ${carma_bzip_SOURCE_DIR}/decompress.c ${carma_bzip_SOURCE_DIR}/bzlib.c)
target_include_directories(carma_bzip2 PUBLIC ${carma_bzip_SOURCE_DIR})
add_library(BZip2::BZip2 ALIAS carma_bzip2)
set(BZIP2_INCLUDE_DIR "${carma_bzip_SOURCE_DIR}" CACHE PATH "" FORCE)
set(BZIP2_LIBRARY carma_bzip2 CACHE STRING "" FORCE)
FetchContent_Declare(carma_xz SOURCE_DIR "${CARMA_DEPS}/xz" URL https://github.com/tukaani-project/xz/releases/download/v5.4.6/xz-5.4.6.tar.xz URL_HASH SHA256=b92d4e3a438affcf13362a1305cd9d94ed47ddda22e456a42791e630a5644f5c)
FetchContent_MakeAvailable(carma_xz)
set(BOOST_INCLUDE_LIBRARIES filesystem iostreams program_options date_time system CACHE STRING "" FORCE)
set(BOOST_IOSTREAMS_ENABLE_ZSTD OFF CACHE BOOL "" FORCE)
set(BOOST_IOSTREAMS_ENABLE_LZMA OFF CACHE BOOL "" FORCE)
set(BOOST_IOSTREAMS_ENABLE_BZIP2 ON CACHE BOOL "" FORCE)
set(BOOST_IOSTREAMS_ENABLE_ZLIB ON CACHE BOOL "" FORCE)
FetchContent_Declare(carma_boost SOURCE_DIR "${CARMA_DEPS}/boost" URL https://github.com/boostorg/boost/releases/download/boost-1.85.0/boost-1.85.0-cmake.tar.xz URL_HASH SHA256=0a9cc56ceae46986f5f4d43fe0311d90cf6d2fa9028258a95cab49ffdacf92ad)
FetchContent_MakeAvailable(carma_boost)
FetchContent_Declare(carma_inno SOURCE_DIR "${CARMA_DEPS}/inno" URL https://codeload.github.com/dscharrer/innoextract/tar.gz/6e9e34ed0876014fdb46e684103ef8c3605e382e URL_HASH SHA256=4d885b27e452dcb137a9d97736b19478447f172bcfed1aa98d80138e9a4c08ae)
FetchContent_GetProperties(carma_inno)
if(NOT carma_inno_POPULATED)
    FetchContent_Populate(carma_inno)
endif()
# Integration-only patch: use the dependency targets above instead of searching
# host libraries during cross compilation. The extraction implementation is unchanged.
file(READ "${carma_inno_SOURCE_DIR}/CMakeLists.txt" inno_cmake)
string(FIND "${inno_cmake}" "if(USE_LZMA)\n\tfind_package" first)
string(FIND "${inno_cmake}" "set(INNOEXTRACT_HAVE_ICONV 0)" last)
if(first LESS 0 OR last LESS first)
    message(FATAL_ERROR "Pinned innoextract build integration no longer matches")
endif()
string(SUBSTRING "${inno_cmake}" 0 ${first} before)
string(SUBSTRING "${inno_cmake}" ${last} -1 after)
set(replacement "set(INNOEXTRACT_HAVE_LZMA 1)\nset(Boost_VERSION_MACRO 108500)\nset(LIBRARIES Boost::iostreams Boost::filesystem Boost::date_time Boost::system Boost::program_options liblzma)\n")
file(COPY "${carma_inno_SOURCE_DIR}/" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/inno-source")
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/inno-source/CMakeLists.txt" "${before}${replacement}${after}")
set(WITH_CONV builtin CACHE STRING "" FORCE)
set(BUILD_TESTS OFF CACHE BOOL "" FORCE)
add_subdirectory("${CMAKE_CURRENT_BINARY_DIR}/inno-source" inno-build)
file(GLOB boost_header_dirs "${carma_boost_SOURCE_DIR}/libs/*/include" "${carma_boost_SOURCE_DIR}/libs/numeric/*/include")
target_include_directories(innoextract SYSTEM PRIVATE ${boost_header_dirs} "${carma_xz_SOURCE_DIR}/src/liblzma/api")
set_target_properties(innoextract PROPERTIES OUTPUT_NAME libinnoextract SUFFIX .so RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/out")
if(ANDROID)
    target_link_options(innoextract PRIVATE -Wl,-z,max-page-size=16384 -Wl,-z,common-page-size=16384)
endif()
