Imported Upstream version 0.9.0
[platform/upstream/libjxl.git] / cmake / FindBrotli.cmake
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()