FindBrotli.cmake (2259B)
1 # Copyright (c) the JPEG XL Project Authors. All rights reserved. 2 # 3 # Use of this source code is governed by a BSD-style 4 # license that can be found in the LICENSE file. 5 6 set(brlibs brotlicommon brotlienc brotlidec) 7 8 find_package(PkgConfig QUIET) 9 if (PkgConfig_FOUND) 10 foreach(brlib IN ITEMS ${brlibs}) 11 string(TOUPPER "${brlib}" BRPREFIX) 12 pkg_check_modules("PC_${BRPREFIX}" lib${brlib}) 13 endforeach() 14 endif() 15 16 find_path(BROTLI_INCLUDE_DIR 17 NAMES brotli/decode.h 18 HINTS ${PC_BROTLICOMMON_INCLUDEDIR} ${PC_BROTLICOMMON_INCLUDE_DIRS} 19 ) 20 21 foreach(brlib IN ITEMS ${brlibs}) 22 string(TOUPPER "${brlib}" BRPREFIX) 23 find_library(${BRPREFIX}_LIBRARY 24 NAMES ${${BRPREFIX}_NAMES} ${brlib} 25 HINTS ${PC_${BRPREFIX}_LIBDIR} ${PC_${BRPREFIX}_LIBRARY_DIRS} 26 ) 27 28 if (${BRPREFIX}_LIBRARY AND NOT TARGET ${brlib}) 29 if(CMAKE_VERSION VERSION_LESS "3.13.5") 30 add_library(${brlib} INTERFACE IMPORTED GLOBAL) 31 set_property(TARGET ${brlib} PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${BROTLI_INCLUDE_DIR}) 32 target_link_libraries(${brlib} INTERFACE ${${BRPREFIX}_LIBRARY}) 33 set_property(TARGET ${brlib} PROPERTY INTERFACE_COMPILE_OPTIONS ${PC_${BRPREFIX}_CFLAGS_OTHER}) 34 else() 35 add_library(${brlib} INTERFACE IMPORTED GLOBAL) 36 target_include_directories(${brlib} 37 INTERFACE ${BROTLI_INCLUDE_DIR}) 38 target_link_libraries(${brlib} 39 INTERFACE ${${BRPREFIX}_LIBRARY}) 40 target_link_options(${brlib} 41 INTERFACE ${PC_${BRPREFIX}_LDFLAGS_OTHER}) 42 target_compile_options(${brlib} 43 INTERFACE ${PC_${BRPREFIX}_CFLAGS_OTHER}) 44 endif() 45 endif() 46 endforeach() 47 48 if (BROTLICOMMON_FOUND AND BROTLIENC_FOUND AND BROTLIDEC_FOUND) 49 set(Brotli_FOUND ON) 50 else () 51 set(Brotli_FOUND OFF) 52 endif() 53 54 include(FindPackageHandleStandardArgs) 55 find_package_handle_standard_args(Brotli 56 FOUND_VAR Brotli_FOUND 57 REQUIRED_VARS 58 BROTLI_INCLUDE_DIR 59 BROTLICOMMON_LIBRARY 60 BROTLIENC_LIBRARY 61 BROTLIDEC_LIBRARY 62 VERSION_VAR Brotli_VERSION 63 ) 64 65 mark_as_advanced( 66 BROTLI_INCLUDE_DIR 67 BROTLICOMMON_LIBRARY 68 BROTLIENC_LIBRARY 69 BROTLIDEC_LIBRARY 70 ) 71 72 if (Brotli_FOUND) 73 set(Brotli_LIBRARIES ${BROTLICOMMON_LIBRARY} ${BROTLIENC_LIBRARY} ${BROTLIDEC_LIBRARY}) 74 set(Brotli_INCLUDE_DIRS ${BROTLI_INCLUDE_DIR}) 75 endif()