]>
Commit | Line | Data |
---|---|---|
1e59de90 TL |
1 | vcpkg_fail_port_install(ON_TARGET "uwp") |
2 | ||
3 | set(ICU_VERSION_MAJOR 69) | |
4 | set(ICU_VERSION_MINOR 1) | |
5 | set(VERSION "${ICU_VERSION_MAJOR}.${ICU_VERSION_MINOR}") | |
6 | set(VERSION2 "${ICU_VERSION_MAJOR}_${ICU_VERSION_MINOR}") | |
7 | set(VERSION3 "${ICU_VERSION_MAJOR}-${ICU_VERSION_MINOR}") | |
8 | ||
9 | vcpkg_download_distfile( | |
10 | ARCHIVE | |
11 | URLS "https://github.com/unicode-org/icu/releases/download/release-${VERSION3}/icu4c-${VERSION2}-src.tgz" | |
12 | FILENAME "icu4c-${VERSION2}-src.tgz" | |
13 | SHA512 d4aeb781715144ea6e3c6b98df5bbe0490bfa3175221a1d667f3e6851b7bd4a638fa4a37d4a921ccb31f02b5d15a6dded9464d98051964a86f7b1cde0ff0aab7 | |
14 | ) | |
15 | vcpkg_extract_source_archive_ex( | |
16 | OUT_SOURCE_PATH SOURCE_PATH | |
17 | ARCHIVE ${ARCHIVE} | |
18 | PATCHES | |
19 | ${CMAKE_CURRENT_LIST_DIR}/disable-escapestr-tool.patch | |
20 | ${CMAKE_CURRENT_LIST_DIR}/remove-MD-from-configure.patch | |
21 | ${CMAKE_CURRENT_LIST_DIR}/fix_parallel_build_on_windows.patch | |
22 | ${CMAKE_CURRENT_LIST_DIR}/fix-extra.patch | |
23 | ) | |
24 | ||
25 | vcpkg_find_acquire_program(PYTHON3) | |
26 | set(ENV{PYTHON} "${PYTHON3}") | |
27 | ||
28 | list(APPEND CONFIGURE_OPTIONS --disable-samples --disable-tests --disable-layoutex) | |
29 | ||
30 | list(APPEND CONFIGURE_OPTIONS_RELEASE --disable-debug --enable-release) | |
31 | list(APPEND CONFIGURE_OPTIONS_DEBUG --enable-debug --disable-release) | |
32 | ||
33 | set(RELEASE_TRIPLET ${TARGET_TRIPLET}-rel) | |
34 | set(DEBUG_TRIPLET ${TARGET_TRIPLET}-dbg) | |
35 | ||
36 | if(NOT "${TARGET_TRIPLET}" STREQUAL "${HOST_TRIPLET}") | |
37 | # cross compiling | |
38 | list(APPEND CONFIGURE_OPTIONS "--with-cross-build=${_VCPKG_INSTALLED_DIR}/${HOST_TRIPLET}/tools/${PORT}") | |
39 | endif() | |
40 | ||
41 | if(VCPKG_TARGET_IS_WINDOWS) | |
42 | if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64") | |
43 | set(BUILD_TRIPLET --host=x86_64-w64-mingw32) | |
44 | else() | |
45 | set(BUILD_TRIPLET --host=i686-w64-mingw32) | |
46 | endif() | |
47 | endif() | |
48 | ||
49 | vcpkg_configure_make( | |
50 | SOURCE_PATH ${SOURCE_PATH} | |
51 | PROJECT_SUBPATH source | |
52 | BUILD_TRIPLET ${BUILD_TRIPLET} | |
53 | OPTIONS ${CONFIGURE_OPTIONS} | |
54 | OPTIONS_RELEASE ${CONFIGURE_OPTIONS_RELEASE} | |
55 | OPTIONS_DEBUG ${CONFIGURE_OPTIONS_DEBUG} | |
56 | ) | |
57 | ||
58 | if(VCPKG_TARGET_IS_OSX AND VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic" AND (NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")) | |
59 | ||
60 | vcpkg_build_make() | |
61 | # remove this block if https://unicode-org.atlassian.net/browse/ICU-21458 | |
62 | # is resolved and use the configure script instead | |
63 | if(DEFINED CMAKE_INSTALL_NAME_DIR) | |
64 | set(ID_PREFIX "${CMAKE_INSTALL_NAME_DIR}") | |
65 | else() | |
66 | set(ID_PREFIX "@rpath") | |
67 | endif() | |
68 | ||
69 | # install_name_tool may be missing if cross-compiling | |
70 | find_program( | |
71 | INSTALL_NAME_TOOL | |
72 | install_name_tool | |
73 | HINTS /usr/bin /Library/Developer/CommandLineTools/usr/bin/ | |
74 | DOC "Absolute path of install_name_tool" | |
75 | REQUIRED | |
76 | ) | |
77 | ||
78 | message(STATUS "setting rpath prefix for macOS dynamic libraries") | |
79 | ||
80 | # add ID_PREFIX to libicudata libicui18n libicuio libicutu libicuuc | |
81 | foreach(LIB_NAME libicudata libicui18n libicuio libicutu libicuuc) | |
82 | vcpkg_execute_build_process( | |
83 | COMMAND ${INSTALL_NAME_TOOL} -id "${ID_PREFIX}/${LIB_NAME}.${ICU_VERSION_MAJOR}.dylib" | |
84 | "${LIB_NAME}.${VERSION}.dylib" | |
85 | WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${RELEASE_TRIPLET}/lib" | |
86 | LOGNAME "make-build-fix-rpath-${RELEASE_TRIPLET}" | |
87 | ) | |
88 | endforeach() | |
89 | ||
90 | # add ID_PREFIX to libicui18n libicuio libicutu dependencies | |
91 | foreach(LIB_NAME libicui18n libicuio) | |
92 | vcpkg_execute_build_process( | |
93 | COMMAND ${INSTALL_NAME_TOOL} -change "libicuuc.${ICU_VERSION_MAJOR}.dylib" | |
94 | "${ID_PREFIX}/libicuuc.${ICU_VERSION_MAJOR}.dylib" | |
95 | "${LIB_NAME}.${VERSION}.dylib" | |
96 | WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${RELEASE_TRIPLET}/lib" | |
97 | LOGNAME "make-build-fix-rpath-${RELEASE_TRIPLET}" | |
98 | ) | |
99 | vcpkg_execute_build_process( | |
100 | COMMAND ${INSTALL_NAME_TOOL} -change "libicudata.${ICU_VERSION_MAJOR}.dylib" | |
101 | "${ID_PREFIX}/libicudata.${ICU_VERSION_MAJOR}.dylib" | |
102 | "${LIB_NAME}.${VERSION}.dylib" | |
103 | WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${RELEASE_TRIPLET}/lib" | |
104 | LOGNAME "make-build-fix-rpath-${RELEASE_TRIPLET}" | |
105 | ) | |
106 | endforeach() | |
107 | ||
108 | # add ID_PREFIX to remaining libicuio libicutu dependencies | |
109 | foreach(LIB_NAME libicuio libicutu) | |
110 | vcpkg_execute_build_process( | |
111 | COMMAND ${INSTALL_NAME_TOOL} -change "libicui18n.${ICU_VERSION_MAJOR}.dylib" | |
112 | "${ID_PREFIX}/libicui18n.${ICU_VERSION_MAJOR}.dylib" | |
113 | "${LIB_NAME}.${VERSION}.dylib" | |
114 | WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${RELEASE_TRIPLET}/lib" | |
115 | LOGNAME "make-build-fix-rpath-${RELEASE_TRIPLET}" | |
116 | ) | |
117 | endforeach() | |
118 | ||
119 | # add ID_PREFIX to libicuuc dependencies | |
120 | vcpkg_execute_build_process( | |
121 | COMMAND ${INSTALL_NAME_TOOL} -change "libicudata.${ICU_VERSION_MAJOR}.dylib" | |
122 | "${ID_PREFIX}/libicudata.${ICU_VERSION_MAJOR}.dylib" | |
123 | "libicuuc.${VERSION}.dylib" | |
124 | WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${RELEASE_TRIPLET}/lib" | |
125 | LOGNAME "make-build-fix-rpath-${RELEASE_TRIPLET}" | |
126 | ) | |
127 | ||
128 | # make install | |
129 | vcpkg_execute_build_process( | |
130 | COMMAND bash --noprofile --norc -c "make install" | |
131 | WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${RELEASE_TRIPLET}" | |
132 | LOGNAME "make-install-${RELEASE_TRIPLET}") | |
133 | message(STATUS "Package ${RELEASE_TRIPLET} done") | |
134 | ||
135 | else() | |
136 | vcpkg_install_make() | |
137 | endif() | |
138 | ||
139 | if(VCPKG_TARGET_IS_MINGW) | |
140 | file(GLOB ICU_TOOLS | |
141 | ${CURRENT_PACKAGES_DIR}/bin/*${VCPKG_HOST_EXECUTABLE_SUFFIX} | |
142 | ${CURRENT_PACKAGES_DIR}/debug/bin/*${VCPKG_HOST_EXECUTABLE_SUFFIX} | |
143 | ${CURRENT_PACKAGES_DIR}/bin/icu-config | |
144 | ${CURRENT_PACKAGES_DIR}/debug/bin/icu-config) | |
145 | file(REMOVE ${ICU_TOOLS}) | |
146 | endif() | |
147 | ||
148 | file(REMOVE_RECURSE | |
149 | ${CURRENT_PACKAGES_DIR}/share | |
150 | ${CURRENT_PACKAGES_DIR}/debug/share | |
151 | ${CURRENT_PACKAGES_DIR}/lib/icu | |
152 | ${CURRENT_PACKAGES_DIR}/debug/lib/icu | |
153 | ${CURRENT_PACKAGES_DIR}/debug/lib/icud) | |
154 | ||
155 | file(GLOB TEST_LIBS | |
156 | ${CURRENT_PACKAGES_DIR}/lib/*test* | |
157 | ${CURRENT_PACKAGES_DIR}/debug/lib/*test*) | |
158 | file(REMOVE ${TEST_LIBS}) | |
159 | ||
160 | if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") | |
161 | if(VCPKG_TARGET_IS_WINDOWS) | |
162 | # rename static libraries to match import libs | |
163 | # see https://gitlab.kitware.com/cmake/cmake/issues/16617 | |
164 | foreach(MODULE dt in io tu uc) | |
165 | if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") | |
166 | file(RENAME ${CURRENT_PACKAGES_DIR}/lib/sicu${MODULE}${VCPKG_TARGET_STATIC_LIBRARY_SUFFIX} ${CURRENT_PACKAGES_DIR}/lib/icu${MODULE}${VCPKG_TARGET_STATIC_LIBRARY_SUFFIX}) | |
167 | endif() | |
168 | ||
169 | if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") | |
170 | file(RENAME ${CURRENT_PACKAGES_DIR}/debug/lib/sicu${MODULE}d${VCPKG_TARGET_STATIC_LIBRARY_SUFFIX} ${CURRENT_PACKAGES_DIR}/debug/lib/icu${MODULE}d${VCPKG_TARGET_STATIC_LIBRARY_SUFFIX}) | |
171 | endif() | |
172 | endforeach() | |
173 | ||
174 | file(GLOB_RECURSE pkg_files LIST_DIRECTORIES false ${CURRENT_PACKAGES_DIR}/*.pc) | |
175 | message(STATUS "${pkg_files}") | |
176 | foreach(pkg_file IN LISTS pkg_files) | |
177 | message(STATUS "${pkg_file}") | |
178 | file(READ ${pkg_file} PKG_FILE) | |
179 | string(REGEX REPLACE "-ls([^ \\t\\n]+)" "-l\\1" PKG_FILE "${PKG_FILE}" ) | |
180 | file(WRITE ${pkg_file} "${PKG_FILE}") | |
181 | endforeach() | |
182 | endif() | |
183 | ||
184 | # force U_STATIC_IMPLEMENTATION macro | |
185 | foreach(HEADER utypes.h utf_old.h platform.h) | |
186 | file(READ ${CURRENT_PACKAGES_DIR}/include/unicode/${HEADER} HEADER_CONTENTS) | |
187 | string(REPLACE "defined(U_STATIC_IMPLEMENTATION)" "1" HEADER_CONTENTS "${HEADER_CONTENTS}") | |
188 | file(WRITE ${CURRENT_PACKAGES_DIR}/include/unicode/${HEADER} "${HEADER_CONTENTS}") | |
189 | endforeach() | |
190 | endif() | |
191 | ||
192 | # Install executables from /tools/icu/sbin to /tools/icu/bin on unix (/bin because icu require this for cross compiling) | |
193 | if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_OSX) | |
194 | vcpkg_copy_tools( | |
195 | TOOL_NAMES icupkg gennorm2 gencmn genccode gensprep | |
196 | SEARCH_DIR ${CURRENT_PACKAGES_DIR}/tools/icu/sbin | |
197 | DESTINATION ${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin | |
198 | ) | |
199 | endif() | |
200 | ||
201 | file(REMOVE_RECURSE | |
202 | ${CURRENT_PACKAGES_DIR}/tools/icu/sbin | |
203 | ${CURRENT_PACKAGES_DIR}/tools/icu/debug) | |
204 | ||
205 | # To cross compile, we need some files at specific positions. So lets copy them | |
206 | file(GLOB CROSS_COMPILE_DEFS ${CURRENT_BUILDTREES_DIR}/${RELEASE_TRIPLET}/config/icucross.*) | |
207 | file(INSTALL ${CROSS_COMPILE_DEFS} DESTINATION ${CURRENT_PACKAGES_DIR}/tools/${PORT}/config) | |
208 | ||
209 | if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") | |
210 | file(GLOB RELEASE_DLLS ${CURRENT_PACKAGES_DIR}/lib/icu*${ICU_VERSION_MAJOR}.dll) | |
211 | file(COPY ${RELEASE_DLLS} DESTINATION ${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin) | |
212 | endif() | |
213 | ||
214 | # copy dlls | |
215 | if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") | |
216 | file(GLOB RELEASE_DLLS ${CURRENT_PACKAGES_DIR}/lib/icu*${ICU_VERSION_MAJOR}.dll) | |
217 | file(COPY ${RELEASE_DLLS} DESTINATION ${CURRENT_PACKAGES_DIR}/bin) | |
218 | endif() | |
219 | if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") | |
220 | file(GLOB DEBUG_DLLS ${CURRENT_PACKAGES_DIR}/debug/lib/icu*${ICU_VERSION_MAJOR}.dll) | |
221 | file(COPY ${DEBUG_DLLS} DESTINATION ${CURRENT_PACKAGES_DIR}/debug/bin) | |
222 | endif() | |
223 | ||
224 | # remove any remaining dlls in /lib | |
225 | file(GLOB DUMMY_DLLS ${CURRENT_PACKAGES_DIR}/lib/*.dll ${CURRENT_PACKAGES_DIR}/debug/lib/*.dll) | |
226 | if(DUMMY_DLLS) | |
227 | file(REMOVE ${DUMMY_DLLS}) | |
228 | endif() | |
229 | ||
230 | vcpkg_copy_pdbs() | |
231 | vcpkg_fixup_pkgconfig(SYSTEM_LIBRARIES pthread m) | |
232 | ||
233 | # Handle copyright | |
234 | file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright) |