You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

186 lines
6.7 KiB

  1. # Copyright (c) 2012, Intel Corporation
  2. # Copyright (c) 2019 Sony Interactive Entertainment Inc.
  3. #
  4. # Redistribution and use in source and binary forms, with or without
  5. # modification, are permitted provided that the following conditions are met:
  6. #
  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.
  15. #
  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.
  27. #
  28. # Try to find Harfbuzz include and library directories.
  29. #
  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
  33. #[=======================================================================[.rst:
  34. FindHarfBuzz
  35. --------------
  36. Find HarfBuzz headers and libraries.
  37. Imported Targets
  38. ^^^^^^^^^^^^^^^^
  39. ``HarfBuzz::HarfBuzz``
  40. The HarfBuzz library, if found.
  41. ``HarfBuzz::ICU``
  42. The HarfBuzz ICU library, if found.
  43. Result Variables
  44. ^^^^^^^^^^^^^^^^
  45. This will define the following variables in your project:
  46. ``HarfBuzz_FOUND``
  47. true if (the requested version of) HarfBuzz is available.
  48. ``HarfBuzz_VERSION``
  49. the version of HarfBuzz.
  50. ``HarfBuzz_LIBRARIES``
  51. the libraries to link against to use HarfBuzz.
  52. ``HarfBuzz_INCLUDE_DIRS``
  53. where to find the HarfBuzz headers.
  54. ``HarfBuzz_COMPILE_OPTIONS``
  55. this should be passed to target_compile_options(), if the
  56. target is not used for linking
  57. #]=======================================================================]
  58. find_package(PkgConfig QUIET)
  59. pkg_check_modules(PC_HARFBUZZ QUIET harfbuzz)
  60. set(HarfBuzz_COMPILE_OPTIONS ${PC_HARFBUZZ_CFLAGS_OTHER})
  61. set(HarfBuzz_VERSION ${PC_HARFBUZZ_CFLAGS_VERSION})
  62. find_path(HarfBuzz_INCLUDE_DIR
  63. NAMES hb.h
  64. HINTS ${PC_HARFBUZZ_INCLUDEDIR} ${PC_HARFBUZZ_INCLUDE_DIRS}
  65. PATH_SUFFIXES harfbuzz
  66. )
  67. find_library(HarfBuzz_LIBRARY
  68. NAMES ${HarfBuzz_NAMES} harfbuzz
  69. HINTS ${PC_HARFBUZZ_LIBDIR} ${PC_HARFBUZZ_LIBRARY_DIRS}
  70. )
  71. if (HarfBuzz_INCLUDE_DIR AND NOT HarfBuzz_VERSION)
  72. if (EXISTS "${HarfBuzz_INCLUDE_DIR}/hb-version.h")
  73. file(READ "${HarfBuzz_INCLUDE_DIR}/hb-version.h" _harfbuzz_version_content)
  74. string(REGEX MATCH "#define +HB_VERSION_STRING +\"([0-9]+\.[0-9]+\.[0-9]+)\"" _dummy "${_harfbuzz_version_content}")
  75. set(HarfBuzz_VERSION "${CMAKE_MATCH_1}")
  76. endif ()
  77. endif ()
  78. if ("${HarfBuzz_FIND_VERSION}" VERSION_GREATER "${HarfBuzz_VERSION}")
  79. message(FATAL_ERROR "Required version (" ${HarfBuzz_FIND_VERSION} ") is higher than found version (" ${HarfBuzz_VERSION} ")")
  80. endif ()
  81. # Find components
  82. if (HarfBuzz_INCLUDE_DIR AND HarfBuzz_LIBRARY)
  83. set(_HarfBuzz_REQUIRED_LIBS_FOUND ON)
  84. set(HarfBuzz_LIBS_FOUND "HarfBuzz (required): ${HarfBuzz_LIBRARY}")
  85. else ()
  86. set(_HarfBuzz_REQUIRED_LIBS_FOUND OFF)
  87. set(HarfBuzz_LIBS_NOT_FOUND "HarfBuzz (required)")
  88. endif ()
  89. if ("ICU" IN_LIST HarfBuzz_FIND_COMPONENTS)
  90. pkg_check_modules(PC_HARFBUZZ_ICU QUIET harfbuzz-icu)
  91. set(HarfBuzz_ICU_COMPILE_OPTIONS ${PC_HARFBUZZ_ICU_CFLAGS_OTHER})
  92. find_path(HarfBuzz_ICU_INCLUDE_DIR
  93. NAMES hb-icu.h
  94. HINTS ${PC_HARFBUZZ_ICU_INCLUDEDIR} ${PC_HARFBUZZ_ICU_INCLUDE_DIRS}
  95. PATH_SUFFIXES harfbuzz
  96. )
  97. find_library(HarfBuzz_ICU_LIBRARY
  98. NAMES ${HarfBuzz_ICU_NAMES} harfbuzz-icu
  99. HINTS ${PC_HARFBUZZ_ICU_LIBDIR} ${PC_HARFBUZZ_ICU_LIBRARY_DIRS}
  100. )
  101. if (HarfBuzz_ICU_LIBRARY)
  102. if (HarfBuzz_FIND_REQUIRED_ICU)
  103. list(APPEND HarfBuzz_LIBS_FOUND "ICU (required): ${HarfBuzz_ICU_LIBRARY}")
  104. else ()
  105. list(APPEND HarfBuzz_LIBS_FOUND "ICU (optional): ${HarfBuzz_ICU_LIBRARY}")
  106. endif ()
  107. else ()
  108. if (HarfBuzz_FIND_REQUIRED_ICU)
  109. set(_HarfBuzz_REQUIRED_LIBS_FOUND OFF)
  110. list(APPEND HarfBuzz_LIBS_NOT_FOUND "ICU (required)")
  111. else ()
  112. list(APPEND HarfBuzz_LIBS_NOT_FOUND "ICU (optional)")
  113. endif ()
  114. endif ()
  115. endif ()
  116. if (NOT HarfBuzz_FIND_QUIETLY)
  117. if (HarfBuzz_LIBS_FOUND)
  118. message(STATUS "Found the following HarfBuzz libraries:")
  119. foreach (found ${HarfBuzz_LIBS_FOUND})
  120. message(STATUS " ${found}")
  121. endforeach ()
  122. endif ()
  123. if (HarfBuzz_LIBS_NOT_FOUND)
  124. message(STATUS "The following HarfBuzz libraries were not found:")
  125. foreach (found ${HarfBuzz_LIBS_NOT_FOUND})
  126. message(STATUS " ${found}")
  127. endforeach ()
  128. endif ()
  129. endif ()
  130. include(FindPackageHandleStandardArgs)
  131. find_package_handle_standard_args(HarfBuzz
  132. FOUND_VAR HarfBuzz_FOUND
  133. REQUIRED_VARS HarfBuzz_INCLUDE_DIR HarfBuzz_LIBRARY _HarfBuzz_REQUIRED_LIBS_FOUND
  134. VERSION_VAR HarfBuzz_VERSION
  135. )
  136. if (HarfBuzz_LIBRARY AND NOT TARGET HarfBuzz::HarfBuzz)
  137. add_library(HarfBuzz::HarfBuzz UNKNOWN IMPORTED GLOBAL)
  138. set_target_properties(HarfBuzz::HarfBuzz PROPERTIES
  139. IMPORTED_LOCATION "${HarfBuzz_LIBRARY}"
  140. INTERFACE_COMPILE_OPTIONS "${HarfBuzz_COMPILE_OPTIONS}"
  141. INTERFACE_INCLUDE_DIRECTORIES "${HarfBuzz_INCLUDE_DIR}"
  142. )
  143. endif ()
  144. if (HarfBuzz_ICU_LIBRARY AND NOT TARGET HarfBuzz::ICU)
  145. add_library(HarfBuzz::ICU UNKNOWN IMPORTED GLOBAL)
  146. set_target_properties(HarfBuzz::ICU PROPERTIES
  147. IMPORTED_LOCATION "${HarfBuzz_ICU_LIBRARY}"
  148. INTERFACE_COMPILE_OPTIONS "${HarfBuzz_ICU_COMPILE_OPTIONS}"
  149. INTERFACE_INCLUDE_DIRECTORIES "${HarfBuzz_ICU_INCLUDE_DIR}"
  150. )
  151. endif ()
  152. mark_as_advanced(
  153. HarfBuzz_INCLUDE_DIR
  154. HarfBuzz_ICU_INCLUDE_DIR
  155. HarfBuzz_LIBRARY
  156. HarfBuzz_ICU_LIBRARY
  157. )
  158. if (HarfBuzz_FOUND)
  159. set(HarfBuzz_LIBRARIES ${HarfBuzz_LIBRARY} ${HarfBuzz_ICU_LIBRARY})
  160. set(HarfBuzz_INCLUDE_DIRS ${HarfBuzz_INCLUDE_DIR} ${HarfBuzz_ICU_INCLUDE_DIR})
  161. endif ()