forked from haiku/haikuwebkit
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathWebKitFindPackage.cmake
182 lines (160 loc) · 7.28 KB
/
WebKitFindPackage.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
# This file overrides the behavior of find_package for WebKit projects.
#
# CMake provides Find modules that are used within WebKit. However there are ports
# where the default behavior does not work and they need to explicitly set their
# values. There are also targets available in later versions of CMake which are
# nicer to work with.
#
# The purpose of this file is to make the behavior of find_package consistent
# across ports and CMake versions.
# CMake provided targets. Remove wrappers whenever the minimum version is bumped.
#
# CURL::libcurl : since 3.12
# ICU::<C> : since 3.7
# Freetype::Freetype: since 3.10
# LibXml2::LibXml2: since 3.12
# LibXslt::LibXslt: since never
# JPEG::JPEG: since 3.12
# OpenSSL::SSL: Since 3.4
# PNG::PNG : since 3.4
# Threads::Threads: since 3.1
# ZLIB::ZLIB: Since 3.1
macro(find_package package)
set(_found_package OFF)
# Apple internal builds for Windows need to use _DEBUG_SUFFIX so manually
# find all third party libraries that have a corresponding Find module within
# CMake's distribution.
if (WTF_PLATFORM_APPLE_WIN)
set(_found_package ON)
if ("${package}" STREQUAL "ICU")
find_path(ICU_INCLUDE_DIR NAMES unicode/utypes.h)
find_library(ICU_I18N_LIBRARY NAMES libicuin${DEBUG_SUFFIX})
find_library(ICU_UC_LIBRARY NAMES libicuuc${DEBUG_SUFFIX})
# AppleWin does not provide a separate data library
find_library(ICU_DATA_LIBRARY NAMES libicuuc${DEBUG_SUFFIX})
if (NOT ICU_INCLUDE_DIR OR NOT ICU_I18N_LIBRARY OR NOT ICU_UC_LIBRARY)
message(FATAL_ERROR "Could not find ICU")
endif ()
set(ICU_INCLUDE_DIRS ${ICU_INCLUDE_DIR})
set(ICU_LIBRARIES ${ICU_I18N_LIBRARY} ${ICU_UC_LIBRARY})
set(ICU_FOUND ON)
elseif ("${package}" STREQUAL "LibXml2")
find_path(LIBXML2_INCLUDE_DIR NAMES libxml/xpath.h)
find_library(LIBXML2_LIBRARY NAMES libxml2${DEBUG_SUFFIX})
if (NOT LIBXML2_INCLUDE_DIR OR NOT LIBXML2_LIBRARY)
message(FATAL_ERROR "Could not find LibXml2")
endif ()
set(LIBXML2_INCLUDE_DIRS ${LIBXML2_INCLUDE_DIR})
set(LIBXML2_LIBRARIES ${LIBXML2_LIBRARY})
set(LIBXML2_FOUND ON)
elseif ("${package}" STREQUAL "LibXslt")
find_path(LIBXSLT_INCLUDE_DIR NAMES libxslt/xslt.h)
find_library(LIBXSLT_LIBRARY NAMES libxslt${DEBUG_SUFFIX})
if (NOT LIBXSLT_INCLUDE_DIR OR NOT LIBXSLT_LIBRARY)
message(FATAL_ERROR "Could not find LibXslt")
endif ()
find_library(LIBXSLT_EXSLT_LIBRARY NAMES libexslt${DEBUG_SUFFIX})
set(LIBXSLT_INCLUDE_DIRS ${LIBXSLT_INCLUDE_DIR})
set(LIBXSLT_LIBRARIES ${LIBXSLT_LIBRARY})
set(LIBXSLT_FOUND ON)
elseif ("${package}" STREQUAL "ZLIB")
find_path(ZLIB_INCLUDE_DIR NAMES zlib.h PATH_SUFFIXES zlib)
find_library(ZLIB_LIBRARY NAMES zdll${DEBUG_SUFFIX})
if (NOT ZLIB_INCLUDE_DIR OR NOT ZLIB_LIBRARY)
message(FATAL_ERROR "Could not find ZLIB")
endif ()
set(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR})
set(ZLIB_LIBRARIES ${ZLIB_LIBRARY})
set(ZLIB_FOUND ON)
else ()
set(_found_package OFF)
endif ()
endif ()
# Apple builds have a unique location for ICU
if (USE_APPLE_ICU AND "${package}" STREQUAL "ICU")
set(_found_package ON)
set(ICU_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/ICU/Headers)
# Apple just has a single tbd/dylib for ICU.
find_library(ICU_I18N_LIBRARY icucore)
find_library(ICU_UC_LIBRARY icucore)
find_library(ICU_DATA_LIBRARY icucore)
set(ICU_LIBRARIES ${ICU_UC_LIBRARY})
set(ICU_FOUND ON)
message(STATUS "Found ICU: ${ICU_LIBRARIES}")
endif ()
if (NOT _found_package)
_find_package(${ARGV})
endif ()
# Create targets that are present in later versions of CMake or are referenced above
if ("${package}" STREQUAL "CURL")
if (CURL_FOUND AND NOT TARGET CURL::libcurl)
add_library(CURL::libcurl UNKNOWN IMPORTED)
set_target_properties(CURL::libcurl PROPERTIES
IMPORTED_LOCATION "${CURL_LIBRARIES}"
INTERFACE_INCLUDE_DIRECTORIES "${CURL_INCLUDE_DIRS}"
)
endif ()
elseif ("${package}" STREQUAL "ICU")
if (ICU_FOUND AND NOT TARGET ICU::data)
add_library(ICU::data UNKNOWN IMPORTED)
set_target_properties(ICU::data PROPERTIES
IMPORTED_LOCATION "${ICU_DATA_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${ICU_INCLUDE_DIRS}"
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
)
add_library(ICU::i18n UNKNOWN IMPORTED)
set_target_properties(ICU::i18n PROPERTIES
IMPORTED_LOCATION "${ICU_I18N_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${ICU_INCLUDE_DIRS}"
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
)
add_library(ICU::uc UNKNOWN IMPORTED)
set_target_properties(ICU::uc PROPERTIES
IMPORTED_LOCATION "${ICU_UC_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${ICU_INCLUDE_DIRS}"
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
)
endif ()
elseif ("${package}" STREQUAL "LibXml2")
if (LIBXML2_FOUND AND NOT TARGET LibXml2::LibXml2)
add_library(LibXml2::LibXml2 UNKNOWN IMPORTED)
set_target_properties(LibXml2::LibXml2 PROPERTIES
IMPORTED_LOCATION "${LIBXML2_LIBRARIES}"
INTERFACE_INCLUDE_DIRECTORIES "${LIBXML2_INCLUDE_DIRS}"
INTERFACE_COMPILE_OPTIONS "${LIBXML2_DEFINITIONS}"
)
endif ()
elseif ("${package}" STREQUAL "LibXslt")
if (LIBXSLT_FOUND AND NOT TARGET LibXslt::LibXslt)
add_library(LibXslt::LibXslt UNKNOWN IMPORTED)
set_target_properties(LibXslt::LibXslt PROPERTIES
IMPORTED_LOCATION "${LIBXSLT_LIBRARIES}"
INTERFACE_INCLUDE_DIRECTORIES "${LIBXSLT_INCLUDE_DIR}"
INTERFACE_COMPILE_OPTIONS "${LIBXSLT_DEFINITIONS}"
)
endif ()
if (LIBXSLT_EXSLT_LIBRARY AND NOT TARGET LibXslt::LibExslt)
add_library(LibXslt::LibExslt UNKNOWN IMPORTED)
set_target_properties(LibXslt::LibExslt PROPERTIES
IMPORTED_LOCATION "${LIBXSLT_EXSLT_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${LIBXSLT_INCLUDE_DIR}"
)
endif ()
elseif ("${package}" STREQUAL "JPEG")
if (JPEG_FOUND AND NOT TARGET JPEG::JPEG)
add_library(JPEG::JPEG UNKNOWN IMPORTED)
set_target_properties(JPEG::JPEG PROPERTIES
IMPORTED_LOCATION "${JPEG_LIBRARIES}"
INTERFACE_INCLUDE_DIRECTORIES "${JPEG_INCLUDE_DIR}"
)
endif ()
elseif ("${package}" STREQUAL "ZLIB")
if (ZLIB_FOUND AND NOT TARGET ZLIB::ZLIB)
add_library(ZLIB::ZLIB UNKNOWN IMPORTED)
set_target_properties(ZLIB::ZLIB PROPERTIES
IMPORTED_LOCATION "${ZLIB_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${ZLIB_INCLUDE_DIRS}"
)
endif ()
endif ()
endmacro()