tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

FindHarfBuzz.cmake (7351B)


      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 - containing the HarfBuzz headers
     32 # HarfBuzz_LIBRARIES - containing the HarfBuzz library
     33 
     34 #[=======================================================================[.rst:
     35 FindHarfBuzz
     36 --------------
     37 
     38 Find HarfBuzz headers and libraries.
     39 
     40 Imported Targets
     41 ^^^^^^^^^^^^^^^^
     42 
     43 ``HarfBuzz::HarfBuzz``
     44  The HarfBuzz library, if found.
     45 
     46 ``HarfBuzz::ICU``
     47  The HarfBuzz ICU library, if found.
     48 
     49 Result Variables
     50 ^^^^^^^^^^^^^^^^
     51 
     52 This will define the following variables in your project:
     53 
     54 ``HarfBuzz_FOUND``
     55  true if (the requested version of) HarfBuzz is available.
     56 ``HarfBuzz_VERSION``
     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
     65 
     66 #]=======================================================================]
     67 
     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})
     72 
     73 find_path(HarfBuzz_INCLUDE_DIR
     74    NAMES hb.h
     75    HINTS ${PC_HARFBUZZ_INCLUDEDIR} ${PC_HARFBUZZ_INCLUDE_DIRS}
     76    PATH_SUFFIXES harfbuzz
     77 )
     78 
     79 find_library(HarfBuzz_LIBRARY
     80    NAMES ${HarfBuzz_NAMES} harfbuzz
     81    HINTS ${PC_HARFBUZZ_LIBDIR} ${PC_HARFBUZZ_LIBRARY_DIRS}
     82 )
     83 
     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)
     87 
     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}")
     90    endif ()
     91 endif ()
     92 
     93 if ("${HarfBuzz_FIND_VERSION}" VERSION_GREATER "${HarfBuzz_VERSION}")
     94  if (HarfBuzz_FIND_REQUIRED)
     95    message(FATAL_ERROR
     96      "Required version (" ${HarfBuzz_FIND_VERSION} ")"
     97      " is higher than found version (" ${HarfBuzz_VERSION} ")")
     98  else ()
     99    message(WARNING
    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)
    105    return ()
    106  endif ()
    107 endif ()
    108 
    109 # Find components
    110 if (HarfBuzz_INCLUDE_DIR AND HarfBuzz_LIBRARY)
    111    set(_HarfBuzz_REQUIRED_LIBS_FOUND ON)
    112    set(HarfBuzz_LIBS_FOUND "HarfBuzz (required): ${HarfBuzz_LIBRARY}")
    113 else ()
    114    set(_HarfBuzz_REQUIRED_LIBS_FOUND OFF)
    115    set(HarfBuzz_LIBS_NOT_FOUND "HarfBuzz (required)")
    116 endif ()
    117 
    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})
    122 
    123      find_path(HarfBuzz_ICU_INCLUDE_DIR
    124          NAMES hb-icu.h
    125          HINTS ${PC_HARFBUZZ_ICU_INCLUDEDIR} ${PC_HARFBUZZ_ICU_INCLUDE_DIRS}
    126          PATH_SUFFIXES harfbuzz
    127      )
    128 
    129      find_library(HarfBuzz_ICU_LIBRARY
    130          NAMES ${HarfBuzz_ICU_NAMES} harfbuzz-icu
    131          HINTS ${PC_HARFBUZZ_ICU_LIBDIR} ${PC_HARFBUZZ_ICU_LIBRARY_DIRS}
    132      )
    133 
    134      if (HarfBuzz_ICU_LIBRARY)
    135          if (HarfBuzz_FIND_REQUIRED_ICU)
    136              list(APPEND HarfBuzz_LIBS_FOUND "ICU (required): ${HarfBuzz_ICU_LIBRARY}")
    137          else ()
    138            list(APPEND HarfBuzz_LIBS_FOUND "ICU (optional): ${HarfBuzz_ICU_LIBRARY}")
    139          endif ()
    140      else ()
    141          if (HarfBuzz_FIND_REQUIRED_ICU)
    142            set(_HarfBuzz_REQUIRED_LIBS_FOUND OFF)
    143            list(APPEND HarfBuzz_LIBS_NOT_FOUND "ICU (required)")
    144          else ()
    145            list(APPEND HarfBuzz_LIBS_NOT_FOUND "ICU (optional)")
    146          endif ()
    147      endif ()
    148  endif ()
    149 endif ()
    150 
    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}")
    156        endforeach ()
    157    endif ()
    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}")
    162        endforeach ()
    163    endif ()
    164 endif ()
    165 
    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
    171 )
    172 
    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}"
    180      )
    181  endif ()
    182 
    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}"
    189      )
    190  endif ()
    191 endif ()
    192 
    193 mark_as_advanced(
    194    HarfBuzz_INCLUDE_DIR
    195    HarfBuzz_ICU_INCLUDE_DIR
    196    HarfBuzz_LIBRARY
    197    HarfBuzz_ICU_LIBRARY
    198 )
    199 
    200 if (HarfBuzz_FOUND)
    201   set(HarfBuzz_LIBRARIES ${HarfBuzz_LIBRARY} ${HarfBuzz_ICU_LIBRARY})
    202   set(HarfBuzz_INCLUDE_DIRS ${HarfBuzz_INCLUDE_DIR} ${HarfBuzz_ICU_INCLUDE_DIR})
    203 endif ()