aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/icu
diff options
context:
space:
mode:
Diffstat (limited to 'vcpkg/ports/icu')
-rw-r--r--vcpkg/ports/icu/disable-static-prefix.patch20
-rw-r--r--vcpkg/ports/icu/fix_parallel_build_on_windows.patch25
-rw-r--r--vcpkg/ports/icu/mh-darwin.patch14
-rw-r--r--vcpkg/ports/icu/mh-mingw.patch26
-rw-r--r--vcpkg/ports/icu/mh-msys-msvc.patch22
-rw-r--r--vcpkg/ports/icu/portfile.cmake157
-rw-r--r--vcpkg/ports/icu/remove-MD-from-configure.patch18
-rw-r--r--vcpkg/ports/icu/subdirs.patch25
-rw-r--r--vcpkg/ports/icu/vcpkg-cmake-wrapper.cmake134
-rw-r--r--vcpkg/ports/icu/vcpkg-cross-data.patch13
-rw-r--r--vcpkg/ports/icu/vcpkg.json30
11 files changed, 484 insertions, 0 deletions
diff --git a/vcpkg/ports/icu/disable-static-prefix.patch b/vcpkg/ports/icu/disable-static-prefix.patch
new file mode 100644
index 0000000..4e63e33
--- /dev/null
+++ b/vcpkg/ports/icu/disable-static-prefix.patch
@@ -0,0 +1,20 @@
+diff --git a/source/icudefs.mk.in b/source/icudefs.mk.in
+index 24bd97a..33169de 100644
+--- a/source/icudefs.mk.in
++++ b/source/icudefs.mk.in
+@@ -213,13 +213,13 @@ LIBICU = $(LIBPREFIX)$(ICUPREFIX)
+
+ ## If we can't use the shared libraries, use the static libraries
+ ifneq ($(ENABLE_SHARED),YES)
+-STATIC_PREFIX_WHEN_USED = s
++STATIC_PREFIX_WHEN_USED =
+ else
+ STATIC_PREFIX_WHEN_USED =
+ endif
+
+ # Static library prefix and file extension
+-STATIC_PREFIX = s
++STATIC_PREFIX =
+ LIBSICU = $(LIBPREFIX)$(STATIC_PREFIX)$(ICUPREFIX)
+ A = a
+ SOBJ = $(SO)
diff --git a/vcpkg/ports/icu/fix_parallel_build_on_windows.patch b/vcpkg/ports/icu/fix_parallel_build_on_windows.patch
new file mode 100644
index 0000000..6bd9109
--- /dev/null
+++ b/vcpkg/ports/icu/fix_parallel_build_on_windows.patch
@@ -0,0 +1,25 @@
+diff --urN a/source/data/Makefile.in b/source/data/Makefile.in
+--- a/source/data/Makefile.in
++++ b/source/data/Makefile.in
+@@ -236,11 +236,12 @@
+ ## Include the main build rules for data files
+ include $(top_builddir)/$(subdir)/rules.mk
+
++PKGDATA_LIST = $(TMP_DIR)/icudata.lst
+
+ ifeq ($(ENABLE_SO_VERSION_DATA),1)
+ ifeq ($(PKGDATA_MODE),dll)
+ SO_VERSION_DATA = $(OUTTMPDIR)/icudata.res
+-$(SO_VERSION_DATA) : $(MISCSRCDIR)/icudata.rc | $(TMP_DIR)/dirs.timestamp
++$(SO_VERSION_DATA) : $(MISCSRCDIR)/icudata.rc $(PKGDATA_LIST)
+ ifeq ($(MSYS_RC_MODE),1)
+ rc.exe -i$(srcdir)/../common -i$(top_builddir)/common -fo$@ $(CPPFLAGS) $<
+ else
+@@ -249,7 +250,6 @@
+ endif
+ endif
+
+-PKGDATA_LIST = $(TMP_DIR)/icudata.lst
+
+
+ #####################################################
diff --git a/vcpkg/ports/icu/mh-darwin.patch b/vcpkg/ports/icu/mh-darwin.patch
new file mode 100644
index 0000000..3de8459
--- /dev/null
+++ b/vcpkg/ports/icu/mh-darwin.patch
@@ -0,0 +1,14 @@
+diff --git a/source/config/mh-darwin b/source/config/mh-darwin
+index 7b15709..e2cdbdb 100644
+--- a/source/config/mh-darwin
++++ b/source/config/mh-darwin
+@@ -31,7 +31,8 @@ SHLIB.cc= $(CXX) -dynamiclib -dynamic $(CXXFLAGS) $(LDFLAGS) $(LD_SOOPTIONS)
+
+ ## Compiler switches to embed a library name and version information
+ ifeq ($(ENABLE_RPATH),YES)
+-LD_SONAME = -Wl,-compatibility_version -Wl,$(SO_TARGET_VERSION_MAJOR) -Wl,-current_version -Wl,$(SO_TARGET_VERSION) -install_name $(libdir)/$(notdir $(MIDDLE_SO_TARGET))
++ID_PREFIX = @rpath
++LD_SONAME = -Wl,-compatibility_version -Wl,$(SO_TARGET_VERSION_MAJOR) -Wl,-current_version -Wl,$(SO_TARGET_VERSION) -install_name $(ID_PREFIX)/$(notdir $(MIDDLE_SO_TARGET))
+ else
+ LD_SONAME = -Wl,-compatibility_version -Wl,$(SO_TARGET_VERSION_MAJOR) -Wl,-current_version -Wl,$(SO_TARGET_VERSION) -install_name $(notdir $(MIDDLE_SO_TARGET)) $(PKGDATA_TRAILING_SPACE)
+ endif
diff --git a/vcpkg/ports/icu/mh-mingw.patch b/vcpkg/ports/icu/mh-mingw.patch
new file mode 100644
index 0000000..af3b448
--- /dev/null
+++ b/vcpkg/ports/icu/mh-mingw.patch
@@ -0,0 +1,26 @@
+diff --git a/source/config/mh-mingw b/source/config/mh-mingw
+index 30f6e5be81..b6364551ea 100644
+--- a/source/config/mh-mingw
++++ b/source/config/mh-mingw
+@@ -13,7 +13,7 @@
+ # On Windows we generally have the DLLs in the bin directory rather than the lib directory.
+ # This setting moves the ICU DLLs into the bin folder for MinGW/MSYS2 when "make install" is run.
+ # If you prefer to have the DLLs in the lib folder, then set this to NO instead.
+-MINGW_MOVEDLLSTOBINDIR = YES
++MINGW_MOVEDLLSTOBINDIR = NO
+
+ # We install sbin tools into the same bin directory because
+ # pkgdata needs some of the tools in sbin, and we can't always depend on
+diff --git a/source/config/mh-mingw64 b/source/config/mh-mingw64
+index fb64c56260..a43cc4dd71 100644
+--- a/source/config/mh-mingw64
++++ b/source/config/mh-mingw64
+@@ -10,7 +10,7 @@
+ # On Windows we generally have the DLLs in the bin directory rather than the lib directory.
+ # This setting moves the ICU DLLs into the bin folder for MinGW/MSYS2 when "make install" is run.
+ # If you prefer to have the DLLs in the lib folder, then set this to NO instead.
+-MINGW_MOVEDLLSTOBINDIR = YES
++MINGW_MOVEDLLSTOBINDIR = NO
+
+ # This file is similar to mh-mingw
+ # Any changes made here may also need to be made in mh-mingw
diff --git a/vcpkg/ports/icu/mh-msys-msvc.patch b/vcpkg/ports/icu/mh-msys-msvc.patch
new file mode 100644
index 0000000..4b49bb0
--- /dev/null
+++ b/vcpkg/ports/icu/mh-msys-msvc.patch
@@ -0,0 +1,22 @@
+diff --git a/source/config/mh-msys-msvc b/source/config/mh-msys-msvc
+index 6f50798..2a669b3 100644
+--- a/source/config/mh-msys-msvc
++++ b/source/config/mh-msys-msvc
+@@ -54,7 +54,7 @@ endif
+ # -D_CRT_SECURE_NO_DEPRECATE is needed to quiet warnings about using standard C functions.
+ # -utf-8 set source file encoding to utf-8.
+ CFLAGS+=-GF -nologo -utf-8
+-CXXFLAGS+=-GF -nologo -EHsc -Zc:wchar_t -utf-8
++CXXFLAGS+=-GF -nologo -EHsc -Zc:wchar_t -utf-8 -std:c++17
+ CPPFLAGS+=-D_CRT_SECURE_NO_DEPRECATE
+ DEFS+=-DWIN32 -DCYGWINMSVC
+ LDFLAGS+=-nologo
+@@ -90,8 +90,6 @@ LIBSICU = $(STATIC_PREFIX)$(ICUPREFIX)
+ A = lib
+
+ # Cygwin's ar can't handle Win64 right now. So we use Microsoft's tool instead.
+-AR = LIB.EXE#M#
+-ARFLAGS := -nologo $(ARFLAGS:r=)#M#
+ RANLIB = ls -s#M#
+ AR_OUTOPT = -OUT:#M#
+
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")
diff --git a/vcpkg/ports/icu/remove-MD-from-configure.patch b/vcpkg/ports/icu/remove-MD-from-configure.patch
new file mode 100644
index 0000000..fe4782b
--- /dev/null
+++ b/vcpkg/ports/icu/remove-MD-from-configure.patch
@@ -0,0 +1,18 @@
+diff -urN a/source/runConfigureICU b/source/runConfigureICU
+--- a/source/runConfigureICU 2018-03-26 21:38:44.000000000 +0800
++++ b/source/runConfigureICU 2018-08-26 09:04:53.197454400 +0800
+@@ -322,10 +322,10 @@
+ THE_COMP="Microsoft Visual C++"
+ CC=cl; export CC
+ CXX=cl; export CXX
+- RELEASE_CFLAGS='-Gy -MD'
+- RELEASE_CXXFLAGS='-Gy -MD'
+- DEBUG_CFLAGS='-FS -Zi -MDd'
+- DEBUG_CXXFLAGS='-FS -Zi -MDd'
++ RELEASE_CFLAGS='-Gy'
++ RELEASE_CXXFLAGS='-Gy'
++ DEBUG_CFLAGS='-FS -Zi'
++ DEBUG_CXXFLAGS='-FS -Zi'
+ DEBUG_LDFLAGS='-DEBUG'
+ ;;
+ *BSD)
diff --git a/vcpkg/ports/icu/subdirs.patch b/vcpkg/ports/icu/subdirs.patch
new file mode 100644
index 0000000..9832fad
--- /dev/null
+++ b/vcpkg/ports/icu/subdirs.patch
@@ -0,0 +1,25 @@
+diff --git a/source/extra/Makefile.in b/source/extra/Makefile.in
+index 2e48dba..3bbae74 100644
+--- a/source/extra/Makefile.in
++++ b/source/extra/Makefile.in
+@@ -23,7 +23,7 @@ subdir = extra
+ ## Files to remove for 'make clean'
+ CLEANFILES = *~
+
+-SUBDIRS = scrptrun uconv
++SUBDIRS = uconv
+
+ ## List of phony targets
+ .PHONY : all all-local all-recursive install install-local \
+diff --git a/source/tools/Makefile.in b/source/tools/Makefile.in
+index e0896f1..d009382 100644
+--- a/source/tools/Makefile.in
++++ b/source/tools/Makefile.in
+@@ -20,7 +20,6 @@ gencnval gensprep icuinfo genccode gencmn icupkg pkgdata \
+ gentest gennorm2 gencfu gendict icuexportdata
+
+ ifneq (@platform_make_fragment_name@,mh-cygwin-msvc)
+-SUBDIRS += escapesrc
+ endif
+
+ ## List of phony targets
diff --git a/vcpkg/ports/icu/vcpkg-cmake-wrapper.cmake b/vcpkg/ports/icu/vcpkg-cmake-wrapper.cmake
new file mode 100644
index 0000000..2132129
--- /dev/null
+++ b/vcpkg/ports/icu/vcpkg-cmake-wrapper.cmake
@@ -0,0 +1,134 @@
+set(z_vcpkg_icu_fixup "")
+set(z_vcpkg_icu_config_mode_args "${ARGS}")
+list(FILTER z_vcpkg_icu_config_mode_args INCLUDE REGEX "^(CONFIGS?|HINTS|NAMES|NO_MODULE|PATH_SUFFIXES|PATHS)\$")
+if(z_vcpkg_icu_config_mode_args STREQUAL "")
+ cmake_policy(PUSH)
+ cmake_policy(SET CMP0057 NEW)
+ if("@VCPKG_LIBRARY_LINKAGE@" STREQUAL "static")
+ # Fix problem: Static link libraries, ordered for traditional linker
+ if("io" IN_LIST ARGS AND NOT TARGET ICU::io)
+ if("in" IN_LIST ARGS)
+ list(APPEND z_vcpkg_icu_fixup "io->in")
+ list(REMOVE_ITEM ARGS in)
+ list(APPEND ARGS COMPONENTS in)
+ else()
+ list(APPEND z_vcpkg_icu_fixup "io->i18n")
+ list(REMOVE_ITEM ARGS i18n)
+ list(APPEND ARGS COMPONENTS i18n)
+ endif()
+ endif()
+ if("i18n" IN_LIST ARGS AND NOT TARGET ICU::i18n)
+ list(APPEND z_vcpkg_icu_fixup "i18n->uc")
+ list(REMOVE_ITEM ARGS uc)
+ list(APPEND ARGS COMPONENTS uc)
+ endif()
+ if("in" IN_LIST ARGS AND NOT TARGET ICU::in)
+ list(APPEND z_vcpkg_icu_fixup "in->uc")
+ list(REMOVE_ITEM ARGS uc)
+ list(APPEND ARGS COMPONENTS uc)
+ endif()
+ if("uc" IN_LIST ARGS AND NOT TARGET ICU::uc)
+ if("dt" IN_LIST ARGS)
+ list(APPEND z_vcpkg_icu_fixup "uc->dt")
+ list(REMOVE_ITEM ARGS dt)
+ list(APPEND ARGS COMPONENTS dt)
+ else()
+ list(APPEND z_vcpkg_icu_fixup "uc->data")
+ list(REMOVE_ITEM ARGS data)
+ list(APPEND ARGS COMPONENTS data)
+ endif()
+ # Fix problem: C++ linkage
+ add_library(ICU::uc STATIC IMPORTED)
+ list(APPEND z_vcpkg_icu_fixup "uc->c++")
+ endif()
+ endif()
+ # Fix problem: Find debug variant without 'd' suffix
+ # Fix problem: Apply NAMES_PER_DIR
+ if("data" IN_LIST ARGS)
+ find_library(ICU_DATA_LIBRARY_RELEASE NAMES icudata icudt NAMES_PER_DIR PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib" NO_DEFAULT_PATH REQUIRED)
+ find_library(ICU_DATA_LIBRARY_DEBUG NAMES icudatad icudtd icudata icudt NAMES_PER_DIR PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib" NO_DEFAULT_PATH)
+ endif()
+ if("dt" IN_LIST ARGS)
+ find_library(ICU_DT_LIBRARY_RELEASE NAMES icudata icudt NAMES_PER_DIR PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib" NO_DEFAULT_PATH REQUIRED)
+ find_library(ICU_DT_LIBRARY_DEBUG NAMES icudatad icudtd icudata icudt NAMES_PER_DIR PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib" NO_DEFAULT_PATH)
+ endif()
+ if("i18n" IN_LIST ARGS)
+ find_library(ICU_I18N_LIBRARY_RELEASE NAMES icui18n icuin NAMES_PER_DIR PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib" NO_DEFAULT_PATH REQUIRED)
+ find_library(ICU_I18N_LIBRARY_DEBUG NAMES icui18nd icuind icui18n icuin NAMES_PER_DIR PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib" NO_DEFAULT_PATH)
+ endif()
+ if("in" IN_LIST ARGS)
+ find_library(ICU_IN_LIBRARY_RELEASE NAMES icui18n icuin NAMES_PER_DIR PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib" NO_DEFAULT_PATH REQUIRED)
+ find_library(ICU_IN_LIBRARY_DEBUG NAMES icui18nd icuind icui18n icuin NAMES_PER_DIR PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib" NO_DEFAULT_PATH)
+ endif()
+ if("io" IN_LIST ARGS)
+ find_library(ICU_IO_LIBRARY_RELEASE NAMES icuio NAMES_PER_DIR PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib" NO_DEFAULT_PATH REQUIRED)
+ find_library(ICU_IO_LIBRARY_DEBUG NAMES icuiod icuio NAMES_PER_DIR PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib" NO_DEFAULT_PATH)
+ endif()
+ if("tu" IN_LIST ARGS)
+ # optional, subject to icu[tools].
+ find_library(ICU_TU_LIBRARY_RELEASE NAMES icutu NAMES_PER_DIR PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib" NO_DEFAULT_PATH)
+ find_library(ICU_TU_LIBRARY_DEBUG NAMES icutud icutu NAMES_PER_DIR PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib" NO_DEFAULT_PATH)
+ endif()
+ if("uc" IN_LIST ARGS)
+ find_library(ICU_UC_LIBRARY_RELEASE NAMES icuuc NAMES_PER_DIR PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib" NO_DEFAULT_PATH REQUIRED)
+ find_library(ICU_UC_LIBRARY_DEBUG NAMES icuucd icuuc NAMES_PER_DIR PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib" NO_DEFAULT_PATH)
+ endif()
+ cmake_policy(POP)
+endif()
+
+_find_package(${ARGS})
+
+if(ICU_FOUND AND NOT z_vcpkg_icu_fixup STREQUAL "")
+ cmake_policy(PUSH)
+ cmake_policy(SET CMP0057 NEW)
+ if("uc->c++" IN_LIST z_vcpkg_icu_fixup)
+ list(REMOVE_ITEM z_vcpkg_icu_fixup "uc->c++")
+ if(ICU_INCLUDE_DIR)
+ set_target_properties(ICU::uc PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${ICU_INCLUDE_DIR}")
+ endif()
+ if(EXISTS "${ICU_UC_LIBRARY}")
+ set_target_properties(ICU::uc PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
+ IMPORTED_LOCATION "${ICU_UC_LIBRARY}")
+ endif()
+ if(EXISTS "${ICU_UC_LIBRARY_RELEASE}")
+ set_property(TARGET ICU::uc APPEND PROPERTY
+ IMPORTED_CONFIGURATIONS RELEASE)
+ set_target_properties(ICU::uc PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
+ IMPORTED_LOCATION_RELEASE "${ICU_UC_LIBRARY_RELEASE}")
+ endif()
+ if(EXISTS "${ICU_UC_LIBRARY_DEBUG}")
+ set_property(TARGET ICU::uc APPEND PROPERTY
+ IMPORTED_CONFIGURATIONS DEBUG)
+ set_target_properties(ICU::uc PROPERTIES
+ IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
+ IMPORTED_LOCATION_DEBUG "${ICU_UC_LIBRARY_DEBUG}")
+ endif()
+ endif()
+ if("i18n->uc" IN_LIST z_vcpkg_icu_fixup)
+ list(REMOVE_ITEM z_vcpkg_icu_fixup "i18n->uc")
+ set_target_properties(ICU::i18n PROPERTIES INTERFACE_LINK_LIBRARIES ICU::uc)
+ endif()
+ if("in->uc" IN_LIST z_vcpkg_icu_fixup)
+ list(REMOVE_ITEM z_vcpkg_icu_fixup "in->uc")
+ set_target_properties(ICU::in PROPERTIES INTERFACE_LINK_LIBRARIES ICU::uc)
+ endif()
+ if("uc->data" IN_LIST z_vcpkg_icu_fixup)
+ list(REMOVE_ITEM z_vcpkg_icu_fixup "uc->data")
+ set_target_properties(ICU::uc PROPERTIES INTERFACE_LINK_LIBRARIES ICU::data)
+ endif()
+ if("uc->dt" IN_LIST z_vcpkg_icu_fixup)
+ list(REMOVE_ITEM z_vcpkg_icu_fixup "uc->dt")
+ set_target_properties(ICU::uc PROPERTIES INTERFACE_LINK_LIBRARIES ICU::dt)
+ endif()
+ if(NOT z_vcpkg_icu_fixup STREQUAL "")
+ message(WARNING "Missing fixup handler for ${z_vcpkg_icu_fixup}.")
+ endif()
+ cmake_policy(POP)
+endif()
+
+if(TARGET ICU::uc)
+ target_compile_features(ICU::uc INTERFACE cxx_std_17)
+endif()
diff --git a/vcpkg/ports/icu/vcpkg-cross-data.patch b/vcpkg/ports/icu/vcpkg-cross-data.patch
new file mode 100644
index 0000000..36f2dd3
--- /dev/null
+++ b/vcpkg/ports/icu/vcpkg-cross-data.patch
@@ -0,0 +1,13 @@
+diff --git a/source/configure b/source/configure
+index d1b5812..1dfbf59 100755
+--- a/source/configure
++++ b/source/configure
+@@ -8063,7 +8063,7 @@ fi
+
+
+
+-if test "$tools" = true || test "$cross_compiling" = "yes"; then
++if true; then
+ DATA_TRUE=
+ U_HAVE_DATA=1
+ else
diff --git a/vcpkg/ports/icu/vcpkg.json b/vcpkg/ports/icu/vcpkg.json
new file mode 100644
index 0000000..95957ac
--- /dev/null
+++ b/vcpkg/ports/icu/vcpkg.json
@@ -0,0 +1,30 @@
+{
+ "name": "icu",
+ "version": "78.1",
+ "description": "Mature and widely used Unicode and localization library.",
+ "homepage": "https://icu.unicode.org/home",
+ "license": "ICU",
+ "dependencies": [
+ {
+ "name": "icu",
+ "host": true,
+ "features": [
+ "tools"
+ ]
+ },
+ {
+ "name": "vcpkg-cmake-get-vars",
+ "host": true
+ },
+ {
+ "name": "vcpkg-make",
+ "host": true
+ }
+ ],
+ "features": {
+ "tools": {
+ "description": "Build tools",
+ "supports": "!uwp"
+ }
+ }
+}