cmake_minimum_required(VERSION 3.2) if(NOT ICU_VERSION) message(FATAL_ERROR "ICU_VERSION not set") endif() if(NOT ICU_ROOT) if(DEFINED ENV{ICU_ROOT}) set(ICU_ROOT $ENV{ICU_ROOT}) else() message(FATAL_ERROR "ICU_ROOT not set") endif() endif() string(REPLACE "." "-" ICU_VERSION_dash ${ICU_VERSION}) string(REPLACE "." "_" ICU_VERSION_under ${ICU_VERSION}) set(ICU_DOWNLOAD_BASE "https://github.com/unicode-org/icu/releases/download") set(ICU_C_DOWNLOAD_BASE "${ICU_DOWNLOAD_BASE}/release-${ICU_VERSION_dash}/icu4c-${ICU_VERSION_under}") set(ICU_URLS "") if(WIN32) list(APPEND ICU_URLS "${ICU_C_DOWNLOAD_BASE}-Win32-MSVC2019.zip") list(APPEND ICU_URLS "${ICU_C_DOWNLOAD_BASE}-Win64-MSVC2019.zip") elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux") if(ICU_VERSION VERSION_GREATER "71.1") list(APPEND ICU_URLS "${ICU_C_DOWNLOAD_BASE}-Ubuntu22.04-x64.tgz") else() list(APPEND ICU_URLS "${ICU_C_DOWNLOAD_BASE}-Ubuntu20.04-x64.tgz") endif() else() message(FATAL_ERROR "Support for this OS(${CMAKE_HOST_SYSTEM_NAME}) not implemented") endif() foreach(url IN LISTS ICU_URLS) file(TO_NATIVE_PATH "${ICU_ROOT}/icu.zip" archive) message(STATUS "Downloading ${url}") file(DOWNLOAD "${url}" "${archive}" SHOW_PROGRESS STATUS DOWNLOAD_STATUS) list(GET DOWNLOAD_STATUS 0 STATUS_CODE) list(GET DOWNLOAD_STATUS 1 ERROR_MESSAGE) if(STATUS_CODE EQUAL 0) message(STATUS "Download completed successfully!") else() message(FATAL_ERROR "Error occurred during download: ${ERROR_MESSAGE}") endif() message(STATUS "Extracting ${archive} to ${ICU_ROOT}") if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.18) file(ARCHIVE_EXTRACT INPUT "${archive}" DESTINATION "${ICU_ROOT}" VERBOSE) else() execute_process( COMMAND ${CMAKE_COMMAND} -E tar xvf "${archive}" WORKING_DIRECTORY "${ICU_ROOT}" RESULT_VARIABLE STATUS ) if(STATUS AND NOT STATUS EQUAL 0) message(FATAL_ERROR "Extraction failed: ${STATUS}") endif() endif() file(REMOVE "${archive}") endforeach() file(GLOB paths ${ICU_ROOT}/*/usr/local/*) foreach(path IN LISTS paths) get_filename_component(folder "${path}" NAME) file(RENAME "${path}" "${ICU_ROOT}/${folder}") endforeach()