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