blob: a35d15a4f49aa518a64abb661bdf237b6b0c92c5 [file] [log] [blame]
# 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 (APPLE AND "${package}" STREQUAL "ICU")
set(_found_package ON)
set(ICU_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/ICU/Headers)
# Apple just has a single dylib for ICU
set(ICU_I18N_LIBRARY /usr/lib/libicucore.dylib)
set(ICU_UC_LIBRARY /usr/lib/libicucore.dylib)
set(ICU_DATA_LIBRARY /usr/lib/libicucore.dylib)
set(ICU_LIBRARIES ${ICU_UC_LIBRARY})
set(ICU_FOUND ON)
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()