qt5base-lts/cmake/FindWrapBrotli.cmake
Li Xinwei 5d2da76c1e make FindWrapBrotli.cmake not depend on vcpkg or PkgConfig
Currently, FindWrapBrotli.cmake depends on vcpkg or PkgConfig. But for
users who build Brotli by themselves and don't have vcpkg or PkgConfig,
the Brotli cannot be found.

As a reference, I use following CMake commands to build Brotli:
cmake path/to/Brotli/source -G"Ninja Multi-Config"
-DCMAKE_CONFIGURATION_TYPES=Release;Debug -DCMAKE_CROSS_CONFIGS=all
-DCMAKE_DEFAULT_CONFIGS=all -DCMAKE_DEBUG_POSTFIX=d
-DCMAKE_INSTALL_PREFIX=path/to/install

Pick-to: 6.1
Change-Id: I2fa8d3293dd55ebc18937e13fac40d144ca4c1e2
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2021-04-20 18:15:33 +08:00

91 lines
4.0 KiB
CMake

if(TARGET WrapBrotli::WrapBrotliDec)
set(WrapBrotli_FOUND ON)
return()
endif()
# From VCPKG
find_package(unofficial-brotli CONFIG QUIET)
if (unofficial-brotli_FOUND)
add_library(WrapBrotli::WrapBrotliDec INTERFACE IMPORTED)
target_link_libraries(WrapBrotli::WrapBrotliDec INTERFACE unofficial::brotli::brotlidec)
add_library(WrapBrotli::WrapBrotliEnc INTERFACE IMPORTED)
target_link_libraries(WrapBrotli::WrapBrotliEnc INTERFACE unofficial::brotli::brotlienc)
add_library(WrapBrotli::WrapBrotliCommon INTERFACE IMPORTED)
target_link_libraries(WrapBrotli::WrapBrotliCommon INTERFACE unofficial::brotli::brotlicommon)
set(WrapBrotli_FOUND ON)
else()
find_package(PkgConfig QUIET)
if (PKG_CONFIG_FOUND)
pkg_check_modules(libbrotlidec QUIET libbrotlidec IMPORTED_TARGET)
if (libbrotlidec_FOUND)
add_library(WrapBrotli::WrapBrotliDec INTERFACE IMPORTED)
target_link_libraries(WrapBrotli::WrapBrotliDec INTERFACE PkgConfig::libbrotlidec)
set(WrapBrotli_FOUND ON)
endif()
pkg_check_modules(libbrotlienc QUIET libbrotlienc IMPORTED_TARGET)
if (libbrotlienc_FOUND)
add_library(WrapBrotli::WrapBrotliEnc INTERFACE IMPORTED)
target_link_libraries(WrapBrotli::WrapBrotliEnc INTERFACE PkgConfig::libbrotlienc)
set(WrapBrotli_FOUND ON)
endif()
pkg_check_modules(libbrotlicommon QUIET libbrotlicommon IMPORTED_TARGET)
if (libbrotlicommon_FOUND)
add_library(WrapBrotli::WrapBrotliCommon INTERFACE IMPORTED)
target_link_libraries(WrapBrotli::WrapBrotliCommon INTERFACE PkgConfig::libbrotlicommon)
set(WrapBrotli_FOUND ON)
endif()
else()
find_path(BROTLI_INCLUDE_DIR NAMES "brotli/decode.h")
foreach(lib_name BrotliDec BrotliEnc BrotliCommon)
string(TOLOWER ${lib_name} lower_lib_name)
find_library(${lib_name}_LIBRARY_RELEASE
NAMES ${lower_lib_name} ${lower_lib_name}-static)
find_library(${lib_name}_LIBRARY_DEBUG
NAMES ${lower_lib_name}d ${lower_lib_name}-staticd
${lower_lib_name} ${lower_lib_name}-static)
include(SelectLibraryConfigurations)
select_library_configurations(${lib_name})
if (BROTLI_INCLUDE_DIR AND ${lib_name}_LIBRARY)
set(${lib_name}_FOUND TRUE)
endif()
if (${lib_name}_FOUND AND NOT TARGET WrapBrotli::Wrap${lib_name})
add_library(WrapBrotli::Wrap${lib_name} UNKNOWN IMPORTED)
set_target_properties(WrapBrotli::Wrap${lib_name} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${BROTLI_INCLUDE_DIR}"
IMPORTED_LOCATION "${${lib_name}_LIBRARY}")
if(${lib_name}_LIBRARY_RELEASE)
foreach(config_name RELEASE RELWITHDEBINFO MINSIZEREL)
set_property(TARGET WrapBrotli::Wrap${lib_name} APPEND PROPERTY
IMPORTED_CONFIGURATIONS ${config_name})
set_target_properties(WrapBrotli::Wrap${lib_name} PROPERTIES
IMPORTED_LOCATION_${config_name} "${${lib_name}_LIBRARY_RELEASE}")
endforeach()
endif()
if(${lib_name}_LIBRARY_DEBUG)
set_property(TARGET WrapBrotli::Wrap${lib_name} APPEND PROPERTY
IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(WrapBrotli::Wrap${lib_name} PROPERTIES
IMPORTED_LOCATION_DEBUG "${${lib_name}_LIBRARY_DEBUG}")
endif()
endif()
endforeach()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(WrapBrotli REQUIRED_VARS
BrotliDec_FOUND BrotliEnc_FOUND BrotliCommon_FOUND)
endif()
endif()