aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/icu/portfile.cmake
diff options
context:
space:
mode:
authorEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
committerEthan Morgan <ethan@gweithio.com>2026-02-14 16:44:06 +0000
commit54409423f767d8b1cf30cb7d0efca6b4ca138823 (patch)
treed915ac7828703ce4b963efdd9728a1777ba18c1e /vcpkg/ports/icu/portfile.cmake
move to own git serverHEADmaster
Diffstat (limited to 'vcpkg/ports/icu/portfile.cmake')
-rw-r--r--vcpkg/ports/icu/portfile.cmake157
1 files changed, 157 insertions, 0 deletions
diff --git a/vcpkg/ports/icu/portfile.cmake b/vcpkg/ports/icu/portfile.cmake
new file mode 100644
index 0000000..75d4bfd
--- /dev/null
+++ b/vcpkg/ports/icu/portfile.cmake
@@ -0,0 +1,157 @@
+vcpkg_download_distfile(
+ ARCHIVE
+ URLS "https://github.com/unicode-org/icu/releases/download/release-${VERSION}/icu4c-${VERSION}-sources.tgz"
+ FILENAME "icu4c-${VERSION}-sources.tgz"
+ SHA512 c366398fdb50afc6355a8c45ed1d68a18eaa5f07a5d1c4555becbcfb9d4073e65ebe1e9caf24b93779b11b36cd813c98dd59e4b19f008851f25c7262811c112d
+)
+
+vcpkg_extract_source_archive(SOURCE_PATH
+ ARCHIVE "${ARCHIVE}"
+ PATCHES
+ disable-static-prefix.patch # https://gitlab.kitware.com/cmake/cmake/-/issues/16617; also mingw.
+ fix_parallel_build_on_windows.patch
+ mh-darwin.patch
+ mh-mingw.patch
+ mh-msys-msvc.patch
+ subdirs.patch
+ vcpkg-cross-data.patch
+)
+
+vcpkg_find_acquire_program(PYTHON3)
+set(ENV{PYTHON} "${PYTHON3}")
+
+vcpkg_list(SET CONFIGURE_OPTIONS)
+vcpkg_list(SET BUILD_OPTIONS)
+
+if(VCPKG_TARGET_IS_EMSCRIPTEN)
+ vcpkg_list(APPEND CONFIGURE_OPTIONS --disable-extras icu_cv_host_frag=mh-linux)
+ vcpkg_list(APPEND BUILD_OPTIONS "\"PKGDATA_OPTS=--without-assembly -O ../data/icupkg.inc\"")
+elseif(VCPKG_TARGET_IS_UWP)
+ vcpkg_list(APPEND CONFIGURE_OPTIONS --disable-extras ac_cv_func_tzset=no ac_cv_func__tzset=no)
+ string(APPEND VCPKG_C_FLAGS " -DU_PLATFORM_HAS_WINUWP_API=1")
+ string(APPEND VCPKG_CXX_FLAGS " -DU_PLATFORM_HAS_WINUWP_API=1")
+ vcpkg_list(APPEND BUILD_OPTIONS "\"PKGDATA_OPTS=--windows-uwp-build -O ../data/icupkg.inc\"")
+elseif(VCPKG_TARGET_IS_OSX AND VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
+ vcpkg_list(APPEND CONFIGURE_OPTIONS --enable-rpath)
+ if(DEFINED CMAKE_INSTALL_NAME_DIR)
+ vcpkg_list(APPEND BUILD_OPTIONS "ID_PREFIX=${CMAKE_INSTALL_NAME_DIR}")
+ endif()
+endif()
+
+if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
+ list(APPEND CONFIGURE_OPTIONS ac_cv_lib_m_floor=no)
+endif()
+
+if("tools" IN_LIST FEATURES)
+ list(APPEND CONFIGURE_OPTIONS --enable-tools)
+else()
+ list(APPEND CONFIGURE_OPTIONS --disable-tools)
+endif()
+if(CMAKE_HOST_WIN32 AND VCPKG_TARGET_IS_MINGW AND NOT HOST_TRIPLET MATCHES "mingw")
+ # Assuming no cross compiling because the host (windows) pkgdata tool doesn't
+ # use the '/' path separator when creating compiler commands for mingw bash.
+elseif(VCPKG_CROSSCOMPILING)
+ set(TOOL_PATH "${CURRENT_HOST_INSTALLED_DIR}/tools/${PORT}")
+ # convert to unix path
+ string(REGEX REPLACE "^([a-zA-Z]):/" "/\\1/" _VCPKG_TOOL_PATH "${TOOL_PATH}")
+ list(APPEND CONFIGURE_OPTIONS "--with-cross-build=${_VCPKG_TOOL_PATH}")
+endif()
+
+vcpkg_make_configure(
+ SOURCE_PATH "${SOURCE_PATH}/source"
+ # AUTORECONF # needs Autoconf version 2.72
+ OPTIONS
+ ${CONFIGURE_OPTIONS}
+ --disable-samples
+ --disable-tests
+ --disable-layoutex
+ OPTIONS_RELEASE
+ --disable-debug
+ --enable-release
+ OPTIONS_DEBUG
+ --enable-debug
+ --disable-release
+)
+vcpkg_make_install(OPTIONS ${BUILD_OPTIONS})
+
+file(REMOVE_RECURSE
+ "${CURRENT_PACKAGES_DIR}/share"
+ "${CURRENT_PACKAGES_DIR}/debug/share"
+ "${CURRENT_PACKAGES_DIR}/lib/icu"
+ "${CURRENT_PACKAGES_DIR}/debug/lib/icu"
+ "${CURRENT_PACKAGES_DIR}/debug/lib/icud")
+
+file(GLOB TEST_LIBS
+ "${CURRENT_PACKAGES_DIR}/lib/*test*"
+ "${CURRENT_PACKAGES_DIR}/debug/lib/*test*")
+if(TEST_LIBS)
+ file(REMOVE ${TEST_LIBS})
+endif()
+
+if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
+ # force U_STATIC_IMPLEMENTATION macro
+ foreach(HEADER utypes.h utf_old.h platform.h)
+ vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/include/unicode/${HEADER}" "defined(U_STATIC_IMPLEMENTATION)" "1")
+ endforeach()
+endif()
+
+# Install executables from /tools/icu/sbin to /tools/icu/bin on unix (/bin because icu require this for cross compiling)
+if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_OSX AND "tools" IN_LIST FEATURES)
+ vcpkg_copy_tools(
+ TOOL_NAMES icupkg gennorm2 gencmn genccode gensprep
+ SEARCH_DIR "${CURRENT_PACKAGES_DIR}/tools/icu/sbin"
+ DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin"
+ )
+endif()
+
+file(REMOVE_RECURSE
+ "${CURRENT_PACKAGES_DIR}/tools/icu/sbin"
+ "${CURRENT_PACKAGES_DIR}/tools/icu/debug")
+
+# To cross compile, we need some files at specific positions. So lets copy them
+file(GLOB CROSS_COMPILE_DEFS "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/config/icucross.*")
+file(INSTALL ${CROSS_COMPILE_DEFS} DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}/config")
+
+if(VCPKG_TARGET_IS_WINDOWS)
+ string(REGEX MATCH "^[0-9]*" ICU_VERSION_MAJOR "${VERSION}")
+ file(GLOB RELEASE_DLLS "${CURRENT_PACKAGES_DIR}/lib/*icu*${ICU_VERSION_MAJOR}.dll")
+ file(COPY ${RELEASE_DLLS} DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin")
+
+ # copy dlls
+ file(GLOB RELEASE_DLLS "${CURRENT_PACKAGES_DIR}/lib/*icu*${ICU_VERSION_MAJOR}.dll")
+ file(COPY ${RELEASE_DLLS} DESTINATION "${CURRENT_PACKAGES_DIR}/bin")
+ if(NOT VCPKG_BUILD_TYPE)
+ file(GLOB DEBUG_DLLS "${CURRENT_PACKAGES_DIR}/debug/lib/*icu*${ICU_VERSION_MAJOR}.dll")
+ file(COPY ${DEBUG_DLLS} DESTINATION "${CURRENT_PACKAGES_DIR}/debug/bin")
+ endif()
+
+ # remove any remaining dlls in /lib
+ file(GLOB DUMMY_DLLS "${CURRENT_PACKAGES_DIR}/lib/*.dll" "${CURRENT_PACKAGES_DIR}/debug/lib/*.dll")
+ if(DUMMY_DLLS)
+ file(REMOVE ${DUMMY_DLLS})
+ endif()
+
+ vcpkg_copy_pdbs()
+endif()
+
+vcpkg_fixup_pkgconfig()
+set(cxx_link_libraries "")
+if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
+ block(PROPAGATE cxx_link_libraries)
+ vcpkg_cmake_get_vars(cmake_vars_file)
+ include("${cmake_vars_file}")
+ list(REMOVE_ITEM VCPKG_DETECTED_CMAKE_CXX_IMPLICIT_LINK_LIBRARIES ${VCPKG_DETECTED_CMAKE_C_IMPLICIT_LINK_LIBRARIES})
+ list(TRANSFORM VCPKG_DETECTED_CMAKE_CXX_IMPLICIT_LINK_LIBRARIES REPLACE "^([^/]+)\$" "-l\\1")
+ string(JOIN " " cxx_link_libraries ${VCPKG_DETECTED_CMAKE_CXX_IMPLICIT_LINK_LIBRARIES})
+ endblock()
+ vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/lib/pkgconfig/icu-uc.pc" "baselibs = " "baselibs = ${cxx_link_libraries} ")
+ if(NOT VCPKG_BUILD_TYPE)
+ vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/icu-uc.pc" "baselibs = " "baselibs = ${cxx_link_libraries} ")
+ endif()
+endif()
+
+vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/tools/icu/bin/icu-config" "${CURRENT_INSTALLED_DIR}" "`dirname $0`/../../../" IGNORE_UNCHANGED)
+vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/tools/icu/bin/icu-config" "${CURRENT_HOST_INSTALLED_DIR}" "`dirname $0`/../../../../${_HOST_TRIPLET}/" IGNORE_UNCHANGED)
+
+configure_file("${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake" "${CURRENT_PACKAGES_DIR}/share/${PORT}/vcpkg-cmake-wrapper.cmake" @ONLY)
+vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE")