Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[GLUTEN-8194][VL] Add icu port and enable test component on vcpkg #8196

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions dev/vcpkg/ports/icu/disable-escapestr-tool.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
diff --git a/source/tools/Makefile.in b/source/tools/Makefile.in
index e0896f1..5ead980 100644
--- a/source/tools/Makefile.in
+++ b/source/tools/Makefile.in
@@ -19,9 +19,9 @@ SUBDIRS = toolutil ctestfw makeconv genrb genbrk \
gencnval gensprep icuinfo genccode gencmn icupkg pkgdata \
gentest gennorm2 gencfu gendict icuexportdata

-ifneq (@platform_make_fragment_name@,mh-cygwin-msvc)
-SUBDIRS += escapesrc
-endif
+#ifneq (@platform_make_fragment_name@,mh-cygwin-msvc)
+#SUBDIRS += escapesrc
+#endif

## List of phony targets
.PHONY : all all-local all-recursive install install-local \
20 changes: 20 additions & 0 deletions dev/vcpkg/ports/icu/disable-static-prefix.patch
Original file line number Diff line number Diff line change
@@ -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)
13 changes: 13 additions & 0 deletions dev/vcpkg/ports/icu/fix-extra.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
diff --urN a/source/extra/Makefile.in b/source/extra/Makefile.in
--- a/source/extra/Makefile.in
+++ b/source/extra/Makefile.in
@@ -23,7 +23,7 @@
## 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 \

35 changes: 35 additions & 0 deletions dev/vcpkg/ports/icu/fix-win-build.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
diff --git a/source/configure.ac b/source/configure.ac
index 425fdc7..97210f8 100644
--- a/source/configure.ac
+++ b/source/configure.ac
@@ -114,6 +114,15 @@ AC_ARG_ENABLE([icu-config],
esac], [enable_icu_config=true])
AC_SUBST(INSTALL_ICU_CONFIG, [$enable_icu_config])

+AC_ARG_ENABLE([icu-build-win],
+ AS_HELP_STRING([--enable-icu-build-win], [install icu-build-win]),
+ [case "${enableval}" in
+ yes) enable_icu_build_win=true ;;
+ no) enable_icu_build_win=false ;;
+ *) AC_MSG_ERROR([bad value '${enableval}' for --enable-icu-build-win]) ;;
+ esac], [enable_icu_build_win=true])
+AC_SUBST(INSTALL_ICU_BUILD_WIN, [$enable_icu_build_win])
+
# Check whether to build debug libraries
AC_MSG_CHECKING([whether to build debug libraries])
enabled=no
@@ -263,12 +272,14 @@ ICU_CHECK_MH_FRAG
# Checks for libraries and other host specific stuff
# On HP/UX, don't link to -lm from a shared lib because it isn't
# PIC (at least on 10.2)
+if test "$enable_icu_build_win" = no; then
case "${host}" in
*-*-hpux*) AC_CHECK_LIB(m, floor, LIB_M="-lm") ;;

*) AC_CHECK_LIB(m, floor)
LIB_M="" ;;
esac
+fi
AC_SUBST(LIB_M)

# Check whether to build shared libraries
25 changes: 25 additions & 0 deletions dev/vcpkg/ports/icu/fix_parallel_build_on_windows.patch
Original file line number Diff line number Diff line change
@@ -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


#####################################################
26 changes: 26 additions & 0 deletions dev/vcpkg/ports/icu/mingw-dll-install.patch
Original file line number Diff line number Diff line change
@@ -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
200 changes: 200 additions & 0 deletions dev/vcpkg/ports/icu/portfile.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
string(REGEX MATCH "^[0-9]*" ICU_VERSION_MAJOR "${VERSION}")
string(REPLACE "." "_" VERSION2 "${VERSION}")
string(REPLACE "." "-" VERSION3 "${VERSION}")

vcpkg_download_distfile(
ARCHIVE
URLS "https://github.com/unicode-org/icu/releases/download/release-${VERSION3}/icu4c-${VERSION2}-src.tgz"
FILENAME "icu4c-${VERSION2}-src.tgz"
SHA512 e788e372716eecebc39b56bbc88f3a458e21c3ef20631c2a3d7ef05794a678fe8dad482a03a40fdb9717109a613978c7146682e98ee16fade5668d641d5c48f8
)

vcpkg_extract_source_archive(SOURCE_PATH
ARCHIVE "${ARCHIVE}"
PATCHES
disable-escapestr-tool.patch
remove-MD-from-configure.patch
fix_parallel_build_on_windows.patch
fix-extra.patch
mingw-dll-install.patch
disable-static-prefix.patch # https://gitlab.kitware.com/cmake/cmake/-/issues/16617; also mingw.
fix-win-build.patch
)

vcpkg_find_acquire_program(PYTHON3)
set(ENV{PYTHON} "${PYTHON3}")

if(VCPKG_TARGET_IS_WINDOWS)
list(APPEND CONFIGURE_OPTIONS --enable-icu-build-win)
endif()

list(APPEND CONFIGURE_OPTIONS --disable-samples --disable-layoutex)

list(APPEND CONFIGURE_OPTIONS_RELEASE --disable-debug --enable-release)
list(APPEND CONFIGURE_OPTIONS_DEBUG --enable-debug --disable-release)

set(RELEASE_TRIPLET ${TARGET_TRIPLET}-rel)
set(DEBUG_TRIPLET ${TARGET_TRIPLET}-dbg)

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_configure_make(
SOURCE_PATH "${SOURCE_PATH}"
AUTOCONFIG
PROJECT_SUBPATH source
ADDITIONAL_MSYS_PACKAGES autoconf-archive
OPTIONS ${CONFIGURE_OPTIONS}
OPTIONS_RELEASE ${CONFIGURE_OPTIONS_RELEASE}
OPTIONS_DEBUG ${CONFIGURE_OPTIONS_DEBUG}
DETERMINE_BUILD_TRIPLET
)

if(VCPKG_TARGET_IS_OSX AND VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")

vcpkg_build_make()
# remove this block if https://unicode-org.atlassian.net/browse/ICU-21458
# is resolved and use the configure script instead
if(DEFINED CMAKE_INSTALL_NAME_DIR)
set(ID_PREFIX "${CMAKE_INSTALL_NAME_DIR}")
else()
set(ID_PREFIX "@rpath")
endif()

# install_name_tool may be missing if cross-compiling
find_program(
INSTALL_NAME_TOOL
install_name_tool
HINTS /usr/bin /Library/Developer/CommandLineTools/usr/bin/
DOC "Absolute path of install_name_tool"
REQUIRED
)

message(STATUS "setting rpath prefix for macOS dynamic libraries")

if("tools" IN_LIST FEATURES)
set(LIBICUTU_RPATH "libicutu")
endif()

#31680: Fix @rpath in both debug and release build
foreach(CONFIG_TRIPLE IN ITEMS ${DEBUG_TRIPLET} ${RELEASE_TRIPLET})
# add ID_PREFIX to libicudata libicui18n libicuio libicutu libicuuc
foreach(LIB_NAME IN ITEMS libicudata libicui18n libicuio ${LIBICUTU_RPATH} libicuuc)
vcpkg_execute_build_process(
COMMAND "${INSTALL_NAME_TOOL}" -id "${ID_PREFIX}/${LIB_NAME}.${ICU_VERSION_MAJOR}.dylib"
"${LIB_NAME}.${VERSION}.dylib"
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${CONFIG_TRIPLE}/lib"
LOGNAME "make-build-fix-rpath-${CONFIG_TRIPLE}"
)
endforeach()

# add ID_PREFIX to libicui18n libicuio libicutu dependencies
foreach(LIB_NAME IN ITEMS libicui18n libicuio)
vcpkg_execute_build_process(
COMMAND "${INSTALL_NAME_TOOL}" -change "libicuuc.${ICU_VERSION_MAJOR}.dylib"
"${ID_PREFIX}/libicuuc.${ICU_VERSION_MAJOR}.dylib"
"${LIB_NAME}.${VERSION}.dylib"
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${CONFIG_TRIPLE}/lib"
LOGNAME "make-build-fix-rpath-${CONFIG_TRIPLE}"
)
vcpkg_execute_build_process(
COMMAND "${INSTALL_NAME_TOOL}" -change "libicudata.${ICU_VERSION_MAJOR}.dylib"
"${ID_PREFIX}/libicudata.${ICU_VERSION_MAJOR}.dylib"
"${LIB_NAME}.${VERSION}.dylib"
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${CONFIG_TRIPLE}/lib"
LOGNAME "make-build-fix-rpath-${CONFIG_TRIPLE}"
)
endforeach()

# add ID_PREFIX to remaining libicuio libicutu dependencies
foreach(LIB_NAME libicuio libicutu)
vcpkg_execute_build_process(
COMMAND "${INSTALL_NAME_TOOL}" -change "libicui18n.${ICU_VERSION_MAJOR}.dylib"
"${ID_PREFIX}/libicui18n.${ICU_VERSION_MAJOR}.dylib"
"${LIB_NAME}.${VERSION}.dylib"
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${CONFIG_TRIPLE}/lib"
LOGNAME "make-build-fix-rpath-${CONFIG_TRIPLE}"
)
endforeach()

# add ID_PREFIX to libicuuc dependencies
vcpkg_execute_build_process(
COMMAND "${INSTALL_NAME_TOOL}" -change "libicudata.${ICU_VERSION_MAJOR}.dylib"
"${ID_PREFIX}/libicudata.${ICU_VERSION_MAJOR}.dylib"
"libicuuc.${VERSION}.dylib"
WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${CONFIG_TRIPLE}/lib"
LOGNAME "make-build-fix-rpath-${CONFIG_TRIPLE}"
)
endforeach()

endif()

vcpkg_install_make()

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")

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}/${RELEASE_TRIPLET}/config/icucross.*")
file(INSTALL ${CROSS_COMPILE_DEFS} DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}/config")

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()
vcpkg_fixup_pkgconfig()

vcpkg_replace_string("${CURRENT_PACKAGES_DIR}/tools/icu/bin/icu-config" "${CURRENT_INSTALLED_DIR}" "`dirname $0`/../../../")

file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE")
18 changes: 18 additions & 0 deletions dev/vcpkg/ports/icu/remove-MD-from-configure.patch
Original file line number Diff line number Diff line change
@@ -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)
8 changes: 8 additions & 0 deletions dev/vcpkg/ports/icu/vcpkg-cmake-wrapper.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
cmake_policy(PUSH)
cmake_policy(SET CMP0057 NEW)
if(NOT "COMPONENTS" IN_LIST ARGS)
_find_package(${ARGS} COMPONENTS data)
else()
_find_package(${ARGS})
endif()
cmake_policy(POP)
22 changes: 22 additions & 0 deletions dev/vcpkg/ports/icu/vcpkg.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"name": "icu",
"version": "73.1",
"description": "Mature and widely used Unicode and localization library.",
"homepage": "https://icu.unicode.org/home",
"license": "ICU",
"supports": "!uwp",
"dependencies": [
{
"name": "icu",
"host": true,
"features": [
"tools"
]
}
],
"features": {
"tools": {
"description": "Build tools"
}
}
}
Loading