1 # Copyright (c) 2012, Intel Corporation
2 # Copyright (c) 2019 Sony Interactive Entertainment Inc.
4 # Redistribution and use in source and binary forms, with or without
5 # modification, are permitted provided that the following conditions are met:
7 # * Redistributions of source code must retain the above copyright notice, this
8 # list of conditions and the following disclaimer.
9 # * Redistributions in binary form must reproduce the above copyright notice,
10 # this list of conditions and the following disclaimer in the documentation
11 # and/or other materials provided with the distribution.
12 # * Neither the name of Intel Corporation nor the names of its contributors may
13 # be used to endorse or promote products derived from this software without
14 # specific prior written permission.
16 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20 # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 # POSSIBILITY OF SUCH DAMAGE.
28 # Try to find Harfbuzz include and library directories.
30 # After successful discovery, this will set for inclusion where needed:
31 # HarfBuzz_INCLUDE_DIRS - containg the HarfBuzz headers
32 # HarfBuzz_LIBRARIES - containg the HarfBuzz library
34 #[=======================================================================[.rst:
38 Find HarfBuzz headers and libraries.
43 ``HarfBuzz::HarfBuzz``
44 The HarfBuzz library, if found.
47 The HarfBuzz ICU library, if found.
52 This will define the following variables in your project:
55 true if (the requested version of) HarfBuzz is available.
57 the version of HarfBuzz.
58 ``HarfBuzz_LIBRARIES``
59 the libraries to link against to use HarfBuzz.
60 ``HarfBuzz_INCLUDE_DIRS``
61 where to find the HarfBuzz headers.
62 ``HarfBuzz_COMPILE_OPTIONS``
63 this should be passed to target_compile_options(), if the
64 target is not used for linking
66 #]=======================================================================]
68 find_package(PkgConfig QUIET)
69 pkg_check_modules(PC_HARFBUZZ QUIET harfbuzz)
70 set(HarfBuzz_COMPILE_OPTIONS ${PC_HARFBUZZ_CFLAGS_OTHER})
71 set(HarfBuzz_VERSION ${PC_HARFBUZZ_CFLAGS_VERSION})
73 find_path(HarfBuzz_INCLUDE_DIR
75 HINTS ${PC_HARFBUZZ_INCLUDEDIR} ${PC_HARFBUZZ_INCLUDE_DIRS}
76 PATH_SUFFIXES harfbuzz
79 find_library(HarfBuzz_LIBRARY
80 NAMES ${HarfBuzz_NAMES} harfbuzz
81 HINTS ${PC_HARFBUZZ_LIBDIR} ${PC_HARFBUZZ_LIBRARY_DIRS}
84 if (HarfBuzz_INCLUDE_DIR AND NOT HarfBuzz_VERSION)
85 if (EXISTS "${HarfBuzz_INCLUDE_DIR}/hb-version.h")
86 file(READ "${HarfBuzz_INCLUDE_DIR}/hb-version.h" _harfbuzz_version_content)
88 string(REGEX MATCH "#define +HB_VERSION_STRING +\"([0-9]+\\.[0-9]+\\.[0-9]+)\"" _dummy "${_harfbuzz_version_content}")
89 set(HarfBuzz_VERSION "${CMAKE_MATCH_1}")
93 if ("${HarfBuzz_FIND_VERSION}" VERSION_GREATER "${HarfBuzz_VERSION}")
94 if (HarfBuzz_FIND_REQUIRED)
96 "Required version (" ${HarfBuzz_FIND_VERSION} ")"
97 " is higher than found version (" ${HarfBuzz_VERSION} ")")
100 "Required version (" ${HarfBuzz_FIND_VERSION} ")"
101 " is higher than found version (" ${HarfBuzz_VERSION} ")")
102 unset(HarfBuzz_VERSION)
103 unset(HarfBuzz_INCLUDE_DIRS)
104 unset(HarfBuzz_LIBRARIES)
110 if (HarfBuzz_INCLUDE_DIR AND HarfBuzz_LIBRARY)
111 set(_HarfBuzz_REQUIRED_LIBS_FOUND ON)
112 set(HarfBuzz_LIBS_FOUND "HarfBuzz (required): ${HarfBuzz_LIBRARY}")
114 set(_HarfBuzz_REQUIRED_LIBS_FOUND OFF)
115 set(HarfBuzz_LIBS_NOT_FOUND "HarfBuzz (required)")
118 if (NOT CMAKE_VERSION VERSION_LESS 3.3)
119 if ("ICU" IN_LIST HarfBuzz_FIND_COMPONENTS)
120 pkg_check_modules(PC_HARFBUZZ_ICU QUIET harfbuzz-icu)
121 set(HarfBuzz_ICU_COMPILE_OPTIONS ${PC_HARFBUZZ_ICU_CFLAGS_OTHER})
123 find_path(HarfBuzz_ICU_INCLUDE_DIR
125 HINTS ${PC_HARFBUZZ_ICU_INCLUDEDIR} ${PC_HARFBUZZ_ICU_INCLUDE_DIRS}
126 PATH_SUFFIXES harfbuzz
129 find_library(HarfBuzz_ICU_LIBRARY
130 NAMES ${HarfBuzz_ICU_NAMES} harfbuzz-icu
131 HINTS ${PC_HARFBUZZ_ICU_LIBDIR} ${PC_HARFBUZZ_ICU_LIBRARY_DIRS}
134 if (HarfBuzz_ICU_LIBRARY)
135 if (HarfBuzz_FIND_REQUIRED_ICU)
136 list(APPEND HarfBuzz_LIBS_FOUND "ICU (required): ${HarfBuzz_ICU_LIBRARY}")
138 list(APPEND HarfBuzz_LIBS_FOUND "ICU (optional): ${HarfBuzz_ICU_LIBRARY}")
141 if (HarfBuzz_FIND_REQUIRED_ICU)
142 set(_HarfBuzz_REQUIRED_LIBS_FOUND OFF)
143 list(APPEND HarfBuzz_LIBS_NOT_FOUND "ICU (required)")
145 list(APPEND HarfBuzz_LIBS_NOT_FOUND "ICU (optional)")
151 if (NOT HarfBuzz_FIND_QUIETLY)
152 if (HarfBuzz_LIBS_FOUND)
153 message(STATUS "Found the following HarfBuzz libraries:")
154 foreach (found ${HarfBuzz_LIBS_FOUND})
155 message(STATUS " ${found}")
158 if (HarfBuzz_LIBS_NOT_FOUND)
159 message(STATUS "The following HarfBuzz libraries were not found:")
160 foreach (found ${HarfBuzz_LIBS_NOT_FOUND})
161 message(STATUS " ${found}")
166 include(FindPackageHandleStandardArgs)
167 find_package_handle_standard_args(HarfBuzz
168 FOUND_VAR HarfBuzz_FOUND
169 REQUIRED_VARS HarfBuzz_INCLUDE_DIR HarfBuzz_LIBRARY _HarfBuzz_REQUIRED_LIBS_FOUND
170 VERSION_VAR HarfBuzz_VERSION
173 if (NOT CMAKE_VERSION VERSION_LESS 3.1)
174 if (HarfBuzz_LIBRARY AND NOT TARGET HarfBuzz::HarfBuzz)
175 add_library(HarfBuzz::HarfBuzz UNKNOWN IMPORTED GLOBAL)
176 set_target_properties(HarfBuzz::HarfBuzz PROPERTIES
177 IMPORTED_LOCATION "${HarfBuzz_LIBRARY}"
178 INTERFACE_COMPILE_OPTIONS "${HarfBuzz_COMPILE_OPTIONS}"
179 INTERFACE_INCLUDE_DIRECTORIES "${HarfBuzz_INCLUDE_DIR}"
183 if (HarfBuzz_ICU_LIBRARY AND NOT TARGET HarfBuzz::ICU)
184 add_library(HarfBuzz::ICU UNKNOWN IMPORTED GLOBAL)
185 set_target_properties(HarfBuzz::ICU PROPERTIES
186 IMPORTED_LOCATION "${HarfBuzz_ICU_LIBRARY}"
187 INTERFACE_COMPILE_OPTIONS "${HarfBuzz_ICU_COMPILE_OPTIONS}"
188 INTERFACE_INCLUDE_DIRECTORIES "${HarfBuzz_ICU_INCLUDE_DIR}"
195 HarfBuzz_ICU_INCLUDE_DIR
201 set(HarfBuzz_LIBRARIES ${HarfBuzz_LIBRARY} ${HarfBuzz_ICU_LIBRARY})
202 set(HarfBuzz_INCLUDE_DIRS ${HarfBuzz_INCLUDE_DIR} ${HarfBuzz_ICU_INCLUDE_DIR})