diff options
author | fuzzard <fuzzard@kodi.tv> | 2024-05-04 10:39:20 +1000 |
---|---|---|
committer | fuzzard <fuzzard@kodi.tv> | 2024-05-09 09:09:47 +1000 |
commit | fffd282919581873a2be4f3ad13ea2462e5d79ab (patch) | |
tree | 94f0b5b696d7f3cd17849cb06483f25f7660fbe5 | |
parent | 0b1c6b4b8e416502b85a23b7751cd97818dc5eec (diff) | |
download | xbmc-fffd282919581873a2be4f3ad13ea2462e5d79ab.tar.xz |
[cmake][modules] FindBrotli module
Cmake does not have a system based module, so create a simple one for our usage
-rw-r--r-- | cmake/modules/FindBrotli.cmake | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/cmake/modules/FindBrotli.cmake b/cmake/modules/FindBrotli.cmake new file mode 100644 index 0000000000..3b8a0befc6 --- /dev/null +++ b/cmake/modules/FindBrotli.cmake @@ -0,0 +1,68 @@ +#.rst: +# FindBrotli +# ---------- +# Finds the Brotli library +# +# This will define the following target ALIAS: +# +# Brotli::Brotli - The Brotli library +# +# The following IMPORTED targets are made +# +# Brotli::BrotliCommon - The brotlicommon library +# Brotli::BrotliDec - The brotlidec library +# + +if(NOT TARGET Brotli::Brotli) + find_package(PkgConfig) + if(PKG_CONFIG_FOUND AND NOT (WIN32 OR WINDOWSSTORE)) + pkg_check_modules(BROTLICOMMON libbrotlicommon QUIET) + # First item is the full path of the library file found + # pkg_check_modules does not populate a variable of the found library explicitly + list(GET BROTLICOMMON_LINK_LIBRARIES 0 BROTLICOMMON_LIBRARY) + + pkg_check_modules(BROTLIDEC libbrotlidec QUIET) + # First item is the full path of the library file found + # pkg_check_modules does not populate a variable of the found library explicitly + list(GET BROTLIDEC_LINK_LIBRARIES 0 BROTLIDEC_LIBRARY) + + set(BROTLI_INCLUDE_DIR ${BROTLICOMMON_INCLUDEDIR}) + set(BROTLI_VERSION ${BROTLICOMMON_VERSION}) + else() + find_path(BROTLI_INCLUDE_DIR NAMES brotli/decode.h + HINTS ${DEPENDS_PATH}/include ${BROTLICOMMON_INCLUDEDIR} + ${${CORE_PLATFORM_LC}_SEARCH_CONFIG}) + find_library(BROTLICOMMON_LIBRARY NAMES brotlicommon + HINTS ${DEPENDS_PATH}/lib ${BROTLICOMON_LIBDIR} + ${${CORE_PLATFORM_LC}_SEARCH_CONFIG}) + + find_library(BROTLIDEC_LIBRARY NAMES brotlidec + HINTS ${DEPENDS_PATH}/lib ${BROTLIDEC_LIBDIR} + ${${CORE_PLATFORM_LC}_SEARCH_CONFIG}) + endif() + + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args(Brotli + REQUIRED_VARS BROTLICOMMON_LIBRARY BROTLIDEC_LIBRARY BROTLI_INCLUDE_DIR + VERSION_VAR BROTLI_VERSION) + + if(BROTLI_FOUND) + add_library(Brotli::BrotliCommon UNKNOWN IMPORTED) + set_target_properties(Brotli::BrotliCommon PROPERTIES + IMPORTED_LOCATION "${BROTLICOMMON_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${BROTLI_INCLUDE_DIR}") + + add_library(Brotli::BrotliDec UNKNOWN IMPORTED) + set_target_properties(Brotli::BrotliDec PROPERTIES + IMPORTED_LOCATION "${BROTLIDEC_LIBRARY}" + INTERFACE_LINK_LIBRARIES Brotli::BrotliCommon + INTERFACE_INCLUDE_DIRECTORIES "${BROTLI_INCLUDE_DIR}") + + add_library(Brotli::Brotli ALIAS Brotli::BrotliDec) + + else() + if(Brotli_FIND_REQUIRED) + message(FATAL_ERROR "Brotli libraries were not found.") + endif() + endif() +endif() |