xref: /aosp_15_r20/external/harfbuzz_ng/CMakeLists.txt (revision 2d1272b857b1f7575e6e246373e1cb218663db8a)
1*2d1272b8SAndroid Build Coastguard Workercmake_minimum_required(VERSION 3.12)
2*2d1272b8SAndroid Build Coastguard Workerproject(harfbuzz)
3*2d1272b8SAndroid Build Coastguard Worker
4*2d1272b8SAndroid Build Coastguard Workermessage(WARN "HarfBuzz has a Meson port and tries to migrate all the other build systems to it, please consider using it as we might remove our cmake port soon.")
5*2d1272b8SAndroid Build Coastguard Worker
6*2d1272b8SAndroid Build Coastguard Workerset(CMAKE_CXX_STANDARD 11)
7*2d1272b8SAndroid Build Coastguard Workerset(CMAKE_CXX_STANDARD_REQUIRED ON)
8*2d1272b8SAndroid Build Coastguard Worker
9*2d1272b8SAndroid Build Coastguard Worker## Limit framework build to Xcode generator
10*2d1272b8SAndroid Build Coastguard Workerif (BUILD_FRAMEWORK)
11*2d1272b8SAndroid Build Coastguard Worker  # for a framework build on macOS, use:
12*2d1272b8SAndroid Build Coastguard Worker  # cmake -DBUILD_FRAMEWORK=ON -Bbuild -H. -GXcode && cmake --build build
13*2d1272b8SAndroid Build Coastguard Worker  if (NOT "${CMAKE_GENERATOR}" STREQUAL "Xcode")
14*2d1272b8SAndroid Build Coastguard Worker    message(FATAL_ERROR
15*2d1272b8SAndroid Build Coastguard Worker      "You should use Xcode generator with BUILD_FRAMEWORK enabled")
16*2d1272b8SAndroid Build Coastguard Worker  endif ()
17*2d1272b8SAndroid Build Coastguard Worker  set (CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_64_BIT)")
18*2d1272b8SAndroid Build Coastguard Worker  set (CMAKE_MACOSX_RPATH ON)
19*2d1272b8SAndroid Build Coastguard Worker  set (BUILD_SHARED_LIBS ON)
20*2d1272b8SAndroid Build Coastguard Workerendif ()
21*2d1272b8SAndroid Build Coastguard Worker
22*2d1272b8SAndroid Build Coastguard Worker
23*2d1272b8SAndroid Build Coastguard Worker## Disallow in-source builds, as CMake generated make files can collide with autotools ones
24*2d1272b8SAndroid Build Coastguard Workerif (NOT MSVC AND "${PROJECT_BINARY_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}")
25*2d1272b8SAndroid Build Coastguard Worker  message(FATAL_ERROR
26*2d1272b8SAndroid Build Coastguard Worker    "
27*2d1272b8SAndroid Build Coastguard WorkerIn-source builds are not permitted!  Make a separate folder for"
28*2d1272b8SAndroid Build Coastguard Worker    " building, e.g.,"
29*2d1272b8SAndroid Build Coastguard Worker    "
30*2d1272b8SAndroid Build Coastguard Worker  mkdir build; cd build; cmake .."
31*2d1272b8SAndroid Build Coastguard Worker    "
32*2d1272b8SAndroid Build Coastguard WorkerBefore that, remove the files created by this failed run with"
33*2d1272b8SAndroid Build Coastguard Worker    "
34*2d1272b8SAndroid Build Coastguard Worker  rm -rf CMakeCache.txt CMakeFiles")
35*2d1272b8SAndroid Build Coastguard Workerendif ()
36*2d1272b8SAndroid Build Coastguard Worker
37*2d1272b8SAndroid Build Coastguard Worker
38*2d1272b8SAndroid Build Coastguard Worker## HarfBuzz build configurations
39*2d1272b8SAndroid Build Coastguard Workeroption(HB_HAVE_CAIRO "Enable cairo interop helpers" OFF)
40*2d1272b8SAndroid Build Coastguard Workeroption(HB_HAVE_FREETYPE "Enable freetype interop helpers" OFF)
41*2d1272b8SAndroid Build Coastguard Workeroption(HB_HAVE_GRAPHITE2 "Enable Graphite2 complementary shaper" OFF)
42*2d1272b8SAndroid Build Coastguard Workeroption(HB_HAVE_GLIB "Enable glib unicode functions" OFF)
43*2d1272b8SAndroid Build Coastguard Workeroption(HB_HAVE_ICU "Enable icu unicode functions" OFF)
44*2d1272b8SAndroid Build Coastguard Workerif (TARGET freetype)
45*2d1272b8SAndroid Build Coastguard Worker  set (HB_HAVE_FREETYPE ON)
46*2d1272b8SAndroid Build Coastguard Worker  add_definitions(-DHAVE_FREETYPE=1)
47*2d1272b8SAndroid Build Coastguard Workerendif ()
48*2d1272b8SAndroid Build Coastguard Workerif (APPLE)
49*2d1272b8SAndroid Build Coastguard Worker  option(HB_HAVE_CORETEXT "Enable CoreText shaper backend on macOS" ON)
50*2d1272b8SAndroid Build Coastguard Worker  set (CMAKE_MACOSX_RPATH ON)
51*2d1272b8SAndroid Build Coastguard Workerendif ()
52*2d1272b8SAndroid Build Coastguard Workerif (WIN32)
53*2d1272b8SAndroid Build Coastguard Worker  option(HB_HAVE_UNISCRIBE "Enable Uniscribe shaper backend on Windows" OFF)
54*2d1272b8SAndroid Build Coastguard Worker  option(HB_HAVE_GDI "Enable GDI integration helpers on Windows" OFF)
55*2d1272b8SAndroid Build Coastguard Worker  option(HB_HAVE_DIRECTWRITE "Enable DirectWrite shaper backend on Windows" OFF)
56*2d1272b8SAndroid Build Coastguard Workerendif ()
57*2d1272b8SAndroid Build Coastguard Workeroption(HB_BUILD_UTILS "Build harfbuzz utils, needs cairo, freetype, and glib properly be installed" OFF)
58*2d1272b8SAndroid Build Coastguard Workerif (HB_BUILD_UTILS)
59*2d1272b8SAndroid Build Coastguard Worker  set (HB_HAVE_GLIB ON)
60*2d1272b8SAndroid Build Coastguard Worker  set (HB_HAVE_FREETYPE ON)
61*2d1272b8SAndroid Build Coastguard Workerendif ()
62*2d1272b8SAndroid Build Coastguard Worker
63*2d1272b8SAndroid Build Coastguard Workeroption(HB_BUILD_SUBSET "Build harfbuzz-subset" ON)
64*2d1272b8SAndroid Build Coastguard Worker
65*2d1272b8SAndroid Build Coastguard Workeroption(HB_HAVE_GOBJECT "Enable GObject Bindings" OFF)
66*2d1272b8SAndroid Build Coastguard Workerif (HB_HAVE_GOBJECT)
67*2d1272b8SAndroid Build Coastguard Worker  set (HB_HAVE_GLIB ON)
68*2d1272b8SAndroid Build Coastguard Workerendif ()
69*2d1272b8SAndroid Build Coastguard Worker
70*2d1272b8SAndroid Build Coastguard Workeroption(HB_HAVE_INTROSPECTION "Enable building introspection (.gir/.typelib) files" OFF)
71*2d1272b8SAndroid Build Coastguard Workerif (HB_HAVE_INTROSPECTION)
72*2d1272b8SAndroid Build Coastguard Worker  set (HB_HAVE_GOBJECT ON)
73*2d1272b8SAndroid Build Coastguard Worker  set (HB_HAVE_GLIB ON)
74*2d1272b8SAndroid Build Coastguard Workerendif ()
75*2d1272b8SAndroid Build Coastguard Worker
76*2d1272b8SAndroid Build Coastguard Workerinclude_directories(AFTER
77*2d1272b8SAndroid Build Coastguard Worker  ${PROJECT_SOURCE_DIR}/src
78*2d1272b8SAndroid Build Coastguard Worker  ${PROJECT_BINARY_DIR}/src
79*2d1272b8SAndroid Build Coastguard Worker)
80*2d1272b8SAndroid Build Coastguard Worker
81*2d1272b8SAndroid Build Coastguard Worker# We need Python3_EXECUTABLE to be set for running the tests...
82*2d1272b8SAndroid Build Coastguard Workerfind_package(Python3 COMPONENTS Interpreter)
83*2d1272b8SAndroid Build Coastguard Worker
84*2d1272b8SAndroid Build Coastguard Worker## Functions and headers
85*2d1272b8SAndroid Build Coastguard Workerinclude (CheckFunctionExists)
86*2d1272b8SAndroid Build Coastguard Workerinclude (CheckIncludeFile)
87*2d1272b8SAndroid Build Coastguard Workerinclude (CheckIncludeFiles)
88*2d1272b8SAndroid Build Coastguard Workermacro (check_funcs) # Similar to AC_CHECK_FUNCS of autotools
89*2d1272b8SAndroid Build Coastguard Worker  foreach (func_name ${ARGN})
90*2d1272b8SAndroid Build Coastguard Worker    string(TOUPPER ${func_name} definition_to_add)
91*2d1272b8SAndroid Build Coastguard Worker    check_function_exists(${func_name} HAVE_${definition_to_add})
92*2d1272b8SAndroid Build Coastguard Worker    if (${HAVE_${definition_to_add}})
93*2d1272b8SAndroid Build Coastguard Worker      add_definitions(-DHAVE_${definition_to_add})
94*2d1272b8SAndroid Build Coastguard Worker    endif ()
95*2d1272b8SAndroid Build Coastguard Worker  endforeach ()
96*2d1272b8SAndroid Build Coastguard Workerendmacro ()
97*2d1272b8SAndroid Build Coastguard Workerif (UNIX)
98*2d1272b8SAndroid Build Coastguard Worker  list(APPEND CMAKE_REQUIRED_LIBRARIES m)
99*2d1272b8SAndroid Build Coastguard Workerendif ()
100*2d1272b8SAndroid Build Coastguard Workercheck_funcs(atexit mprotect sysconf getpagesize mmap isatty)
101*2d1272b8SAndroid Build Coastguard Workercheck_include_file(unistd.h HAVE_UNISTD_H)
102*2d1272b8SAndroid Build Coastguard Workerif (${HAVE_UNISTD_H})
103*2d1272b8SAndroid Build Coastguard Worker  add_definitions(-DHAVE_UNISTD_H)
104*2d1272b8SAndroid Build Coastguard Workerendif ()
105*2d1272b8SAndroid Build Coastguard Workercheck_include_file(sys/mman.h HAVE_SYS_MMAN_H)
106*2d1272b8SAndroid Build Coastguard Workerif (${HAVE_SYS_MMAN_H})
107*2d1272b8SAndroid Build Coastguard Worker  add_definitions(-DHAVE_SYS_MMAN_H)
108*2d1272b8SAndroid Build Coastguard Workerendif ()
109*2d1272b8SAndroid Build Coastguard Workercheck_include_file(stdbool.h HAVE_STDBOOL_H)
110*2d1272b8SAndroid Build Coastguard Workerif (${HAVE_STDBOOL_H})
111*2d1272b8SAndroid Build Coastguard Worker  add_definitions(-DHAVE_STDBOOL_H)
112*2d1272b8SAndroid Build Coastguard Workerendif ()
113*2d1272b8SAndroid Build Coastguard Worker
114*2d1272b8SAndroid Build Coastguard Worker# These will be used while making pkg-config .pc files
115*2d1272b8SAndroid Build Coastguard Workerset(PC_REQUIRES_PRIV "")
116*2d1272b8SAndroid Build Coastguard Workerset(PC_LIBS_PRIV "")
117*2d1272b8SAndroid Build Coastguard Worker
118*2d1272b8SAndroid Build Coastguard Workerif (NOT MSVC)
119*2d1272b8SAndroid Build Coastguard Worker  set(THREADS_PREFER_PTHREAD_FLAG ON)
120*2d1272b8SAndroid Build Coastguard Worker  find_package(Threads)
121*2d1272b8SAndroid Build Coastguard Worker  if (CMAKE_USE_PTHREADS_INIT)
122*2d1272b8SAndroid Build Coastguard Worker    add_definitions("-DHAVE_PTHREAD")
123*2d1272b8SAndroid Build Coastguard Worker    list(APPEND THIRD_PARTY_LIBS Threads::Threads)
124*2d1272b8SAndroid Build Coastguard Worker    list(APPEND PC_LIBS_PRIV -pthread)
125*2d1272b8SAndroid Build Coastguard Worker  endif ()
126*2d1272b8SAndroid Build Coastguard Workerendif ()
127*2d1272b8SAndroid Build Coastguard Worker
128*2d1272b8SAndroid Build Coastguard Workerif (MSVC)
129*2d1272b8SAndroid Build Coastguard Worker  add_definitions(-wd4244 -wd4267 -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS)
130*2d1272b8SAndroid Build Coastguard Worker  add_definitions(-bigobj)
131*2d1272b8SAndroid Build Coastguard Workerendif ()
132*2d1272b8SAndroid Build Coastguard Worker
133*2d1272b8SAndroid Build Coastguard Worker
134*2d1272b8SAndroid Build Coastguard Worker## Detect if we are running inside a distribution or regular repository folder
135*2d1272b8SAndroid Build Coastguard Worker# if (EXISTS "${PROJECT_SOURCE_DIR}/ChangeLog")
136*2d1272b8SAndroid Build Coastguard Worker#   # perhaps we are on dist directory
137*2d1272b8SAndroid Build Coastguard Worker#   set (IN_HB_DIST TRUE)
138*2d1272b8SAndroid Build Coastguard Worker#   #set (HB_VERSION_H "${PROJECT_SOURCE_DIR}/src/hb-version.h")
139*2d1272b8SAndroid Build Coastguard Worker# endif ()
140*2d1272b8SAndroid Build Coastguard Worker
141*2d1272b8SAndroid Build Coastguard Workerfile(READ meson.build MESONBUILD)
142*2d1272b8SAndroid Build Coastguard Workerstring(REGEX MATCH "version: '(([0-9]+)\\.([0-9]+)\\.([0-9]+))'," HB_VERSION_MATCH ${MESONBUILD})
143*2d1272b8SAndroid Build Coastguard Workerset (HB_VERSION ${CMAKE_MATCH_1})
144*2d1272b8SAndroid Build Coastguard Workerset (HB_VERSION_MAJOR ${CMAKE_MATCH_2})
145*2d1272b8SAndroid Build Coastguard Workerset (HB_VERSION_MINOR ${CMAKE_MATCH_3})
146*2d1272b8SAndroid Build Coastguard Workerset (HB_VERSION_MICRO ${CMAKE_MATCH_4})
147*2d1272b8SAndroid Build Coastguard Worker
148*2d1272b8SAndroid Build Coastguard Worker## Define sources and headers of the project
149*2d1272b8SAndroid Build Coastguard Workerset (project_sources ${PROJECT_SOURCE_DIR}/src/harfbuzz.cc) # use amalgam source
150*2d1272b8SAndroid Build Coastguard Workerset (subset_project_sources
151*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-number.cc
152*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-number.hh
153*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-ot-cff1-table.cc
154*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-ot-cff2-table.cc
155*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-ot-post-table-v2subset.hh
156*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-static.cc
157*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-subset-cff-common.cc
158*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-subset-cff-common.hh
159*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-subset-cff1.cc
160*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-subset-cff2.cc
161*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-subset-input.cc
162*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-subset-input.hh
163*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-subset-instancer-iup.hh
164*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-subset-instancer-iup.cc
165*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-subset-instancer-solver.hh
166*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-subset-instancer-solver.cc
167*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-subset-accelerator.hh
168*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-subset-plan.cc
169*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-subset-plan.hh
170*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-subset-plan-member-list.hh
171*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-subset-repacker.cc
172*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-subset.cc
173*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-subset.hh
174*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-repacker.hh
175*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/graph/graph.hh
176*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/graph/gsubgpos-graph.hh
177*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/graph/gsubgpos-context.hh
178*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/graph/gsubgpos-context.cc
179*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/graph/coverage-graph.hh
180*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/graph/classdef-graph.hh
181*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/graph/pairpos-graph.hh
182*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/graph/markbasepos-graph.hh
183*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/graph/split-helpers.hh
184*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/graph/serialize.hh
185*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/OT/Color/COLR/colrv1-closure.hh
186*2d1272b8SAndroid Build Coastguard Worker)
187*2d1272b8SAndroid Build Coastguard Workerset (project_extra_sources)
188*2d1272b8SAndroid Build Coastguard Workerset (project_headers
189*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-aat-layout.h
190*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-aat.h
191*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-blob.h
192*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-buffer.h
193*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-common.h
194*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-cplusplus.hh
195*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-deprecated.h
196*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-draw.h
197*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-face.h
198*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-font.h
199*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-map.h
200*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-ot-color.h
201*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-ot-deprecated.h
202*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-ot-font.h
203*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-ot-layout.h
204*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-ot-math.h
205*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-ot-meta.h
206*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-ot-metrics.h
207*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-ot-name.h
208*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-ot-shape.h
209*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-ot-var.h
210*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-ot.h
211*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-paint.h
212*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-set.h
213*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-shape-plan.h
214*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-shape.h
215*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-style.h
216*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-unicode.h
217*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-version.h
218*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb.h
219*2d1272b8SAndroid Build Coastguard Worker)
220*2d1272b8SAndroid Build Coastguard Workerset (subset_project_headers
221*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-subset.h
222*2d1272b8SAndroid Build Coastguard Worker     ${PROJECT_SOURCE_DIR}/src/hb-subset-repacker.h
223*2d1272b8SAndroid Build Coastguard Worker)
224*2d1272b8SAndroid Build Coastguard Worker
225*2d1272b8SAndroid Build Coastguard Worker## Find and include needed header folders and libraries
226*2d1272b8SAndroid Build Coastguard Workerif (HB_HAVE_FREETYPE AND NOT TARGET freetype)
227*2d1272b8SAndroid Build Coastguard Worker  include (FindFreetype)
228*2d1272b8SAndroid Build Coastguard Worker  if (NOT FREETYPE_FOUND)
229*2d1272b8SAndroid Build Coastguard Worker    message(FATAL_ERROR "HB_HAVE_FREETYPE was set, but we failed to find it. Maybe add a CMAKE_PREFIX_PATH= to your Freetype2 install prefix")
230*2d1272b8SAndroid Build Coastguard Worker  endif ()
231*2d1272b8SAndroid Build Coastguard Worker
232*2d1272b8SAndroid Build Coastguard Worker  list(APPEND THIRD_PARTY_LIBS ${FREETYPE_LIBRARIES})
233*2d1272b8SAndroid Build Coastguard Worker  include_directories(AFTER ${FREETYPE_INCLUDE_DIRS})
234*2d1272b8SAndroid Build Coastguard Worker  add_definitions(-DHAVE_FREETYPE=1)
235*2d1272b8SAndroid Build Coastguard Worker
236*2d1272b8SAndroid Build Coastguard Worker  list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-ft.h)
237*2d1272b8SAndroid Build Coastguard Worker
238*2d1272b8SAndroid Build Coastguard Worker  # So check_funcs can find its headers
239*2d1272b8SAndroid Build Coastguard Worker  set (CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${FREETYPE_INCLUDE_DIRS})
240*2d1272b8SAndroid Build Coastguard Worker  set (CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${FREETYPE_LIBRARIES})
241*2d1272b8SAndroid Build Coastguard Worker
242*2d1272b8SAndroid Build Coastguard Worker  check_funcs(FT_Get_Var_Blend_Coordinates FT_Set_Var_Blend_Coordinates FT_Done_MM_Var)
243*2d1272b8SAndroid Build Coastguard Workerendif ()
244*2d1272b8SAndroid Build Coastguard Worker
245*2d1272b8SAndroid Build Coastguard Workerif (HB_HAVE_FREETYPE)
246*2d1272b8SAndroid Build Coastguard Worker  list(APPEND PC_REQUIRES_PRIV "freetype2 >= 12.0.6")
247*2d1272b8SAndroid Build Coastguard Workerendif ()
248*2d1272b8SAndroid Build Coastguard Worker
249*2d1272b8SAndroid Build Coastguard Workerif (HB_HAVE_GRAPHITE2)
250*2d1272b8SAndroid Build Coastguard Worker  add_definitions(-DHAVE_GRAPHITE2)
251*2d1272b8SAndroid Build Coastguard Worker
252*2d1272b8SAndroid Build Coastguard Worker  find_path(GRAPHITE2_INCLUDE_DIR graphite2/Font.h)
253*2d1272b8SAndroid Build Coastguard Worker  find_library(GRAPHITE2_LIBRARY graphite2)
254*2d1272b8SAndroid Build Coastguard Worker
255*2d1272b8SAndroid Build Coastguard Worker  include_directories(${GRAPHITE2_INCLUDE_DIR})
256*2d1272b8SAndroid Build Coastguard Worker
257*2d1272b8SAndroid Build Coastguard Worker  list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-graphite2.h)
258*2d1272b8SAndroid Build Coastguard Worker
259*2d1272b8SAndroid Build Coastguard Worker  list(APPEND THIRD_PARTY_LIBS ${GRAPHITE2_LIBRARY})
260*2d1272b8SAndroid Build Coastguard Worker
261*2d1272b8SAndroid Build Coastguard Worker  list(APPEND PC_REQUIRES_PRIV "graphite2 >= 1.2.0")
262*2d1272b8SAndroid Build Coastguard Worker
263*2d1272b8SAndroid Build Coastguard Worker  mark_as_advanced(GRAPHITE2_INCLUDE_DIR GRAPHITE2_LIBRARY)
264*2d1272b8SAndroid Build Coastguard Workerendif ()
265*2d1272b8SAndroid Build Coastguard Worker
266*2d1272b8SAndroid Build Coastguard Workerif (HB_HAVE_GLIB)
267*2d1272b8SAndroid Build Coastguard Worker  add_definitions(-DHAVE_GLIB)
268*2d1272b8SAndroid Build Coastguard Worker
269*2d1272b8SAndroid Build Coastguard Worker  # https://github.com/WebKit/webkit/blob/master/Source/cmake/FindGLIB.cmake
270*2d1272b8SAndroid Build Coastguard Worker  find_package(PkgConfig)
271*2d1272b8SAndroid Build Coastguard Worker  pkg_check_modules(PC_GLIB QUIET glib-2.0)
272*2d1272b8SAndroid Build Coastguard Worker
273*2d1272b8SAndroid Build Coastguard Worker  find_library(GLIB_LIBRARIES NAMES glib-2.0 HINTS ${PC_GLIB_LIBDIR} ${PC_GLIB_LIBRARY_DIRS})
274*2d1272b8SAndroid Build Coastguard Worker  find_path(GLIBCONFIG_INCLUDE_DIR NAMES glibconfig.h HINTS ${PC_LIBDIR} ${PC_LIBRARY_DIRS} ${PC_GLIB_INCLUDEDIR} ${PC_GLIB_INCLUDE_DIRS} PATH_SUFFIXES glib-2.0/include)
275*2d1272b8SAndroid Build Coastguard Worker  find_path(GLIB_INCLUDE_DIR NAMES glib.h HINTS ${PC_GLIB_INCLUDEDIR} ${PC_GLIB_INCLUDE_DIRS} PATH_SUFFIXES glib-2.0)
276*2d1272b8SAndroid Build Coastguard Worker
277*2d1272b8SAndroid Build Coastguard Worker  include_directories(${GLIBCONFIG_INCLUDE_DIR} ${GLIB_INCLUDE_DIR})
278*2d1272b8SAndroid Build Coastguard Worker
279*2d1272b8SAndroid Build Coastguard Worker  list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-glib.h)
280*2d1272b8SAndroid Build Coastguard Worker
281*2d1272b8SAndroid Build Coastguard Worker  list(APPEND THIRD_PARTY_LIBS ${GLIB_LIBRARIES})
282*2d1272b8SAndroid Build Coastguard Worker
283*2d1272b8SAndroid Build Coastguard Worker  list(APPEND PC_REQUIRES_PRIV "glib-2.0 >= 2.19.1")
284*2d1272b8SAndroid Build Coastguard Worker
285*2d1272b8SAndroid Build Coastguard Worker  mark_as_advanced(GLIB_LIBRARIES GLIBCONFIG_INCLUDE_DIR GLIB_INCLUDE_DIR)
286*2d1272b8SAndroid Build Coastguard Workerendif ()
287*2d1272b8SAndroid Build Coastguard Worker
288*2d1272b8SAndroid Build Coastguard Workerif (HB_HAVE_ICU)
289*2d1272b8SAndroid Build Coastguard Worker  add_definitions(-DHAVE_ICU)
290*2d1272b8SAndroid Build Coastguard Worker
291*2d1272b8SAndroid Build Coastguard Worker  find_package(ICU REQUIRED COMPONENTS uc)
292*2d1272b8SAndroid Build Coastguard Worker
293*2d1272b8SAndroid Build Coastguard Worker  if (ICU_VERSION VERSION_GREATER_EQUAL 75.1)
294*2d1272b8SAndroid Build Coastguard Worker    set(CMAKE_CXX_STANDARD 17)
295*2d1272b8SAndroid Build Coastguard Worker  endif ()
296*2d1272b8SAndroid Build Coastguard Worker
297*2d1272b8SAndroid Build Coastguard Worker  list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-icu.h)
298*2d1272b8SAndroid Build Coastguard Worker
299*2d1272b8SAndroid Build Coastguard Worker  list(APPEND THIRD_PARTY_LIBS ICU::uc)
300*2d1272b8SAndroid Build Coastguard Workerendif ()
301*2d1272b8SAndroid Build Coastguard Worker
302*2d1272b8SAndroid Build Coastguard Workerif (APPLE AND HB_HAVE_CORETEXT)
303*2d1272b8SAndroid Build Coastguard Worker  # Apple Advanced Typography
304*2d1272b8SAndroid Build Coastguard Worker  add_definitions(-DHAVE_CORETEXT)
305*2d1272b8SAndroid Build Coastguard Worker
306*2d1272b8SAndroid Build Coastguard Worker  list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-coretext.h)
307*2d1272b8SAndroid Build Coastguard Worker
308*2d1272b8SAndroid Build Coastguard Worker  if (HB_IOS)
309*2d1272b8SAndroid Build Coastguard Worker    find_library(COREFOUNDATION CoreFoundation)
310*2d1272b8SAndroid Build Coastguard Worker    if (COREFOUNDATION)
311*2d1272b8SAndroid Build Coastguard Worker      list(APPEND THIRD_PARTY_LIBS ${COREFOUNDATION})
312*2d1272b8SAndroid Build Coastguard Worker      list(APPEND PC_LIBS_PRIV "-framework CoreFoundation")
313*2d1272b8SAndroid Build Coastguard Worker    endif ()
314*2d1272b8SAndroid Build Coastguard Worker    mark_as_advanced(COREFOUNDATION)
315*2d1272b8SAndroid Build Coastguard Worker
316*2d1272b8SAndroid Build Coastguard Worker    find_library(CORETEXT CoreText)
317*2d1272b8SAndroid Build Coastguard Worker    if (CORETEXT)
318*2d1272b8SAndroid Build Coastguard Worker      list(APPEND THIRD_PARTY_LIBS ${CORETEXT})
319*2d1272b8SAndroid Build Coastguard Worker      list(APPEND PC_LIBS_PRIV "-framework CoreText")
320*2d1272b8SAndroid Build Coastguard Worker    endif ()
321*2d1272b8SAndroid Build Coastguard Worker    mark_as_advanced(CORETEXT)
322*2d1272b8SAndroid Build Coastguard Worker
323*2d1272b8SAndroid Build Coastguard Worker    find_library(COREGRAPHICS CoreGraphics)
324*2d1272b8SAndroid Build Coastguard Worker    if (COREGRAPHICS)
325*2d1272b8SAndroid Build Coastguard Worker      list(APPEND THIRD_PARTY_LIBS ${COREGRAPHICS})
326*2d1272b8SAndroid Build Coastguard Worker      list(APPEND PC_LIBS_PRIV "-framework CoreGraphics")
327*2d1272b8SAndroid Build Coastguard Worker    endif ()
328*2d1272b8SAndroid Build Coastguard Worker    mark_as_advanced(COREGRAPHICS)
329*2d1272b8SAndroid Build Coastguard Worker  else ()
330*2d1272b8SAndroid Build Coastguard Worker    find_library(APPLICATION_SERVICES_FRAMEWORK ApplicationServices)
331*2d1272b8SAndroid Build Coastguard Worker    if (APPLICATION_SERVICES_FRAMEWORK)
332*2d1272b8SAndroid Build Coastguard Worker      list(APPEND THIRD_PARTY_LIBS ${APPLICATION_SERVICES_FRAMEWORK})
333*2d1272b8SAndroid Build Coastguard Worker      list(APPEND PC_LIBS_PRIV "-framework ApplicationServices")
334*2d1272b8SAndroid Build Coastguard Worker    endif ()
335*2d1272b8SAndroid Build Coastguard Worker
336*2d1272b8SAndroid Build Coastguard Worker    mark_as_advanced(APPLICATION_SERVICES_FRAMEWORK)
337*2d1272b8SAndroid Build Coastguard Worker  endif ()
338*2d1272b8SAndroid Build Coastguard Workerendif ()
339*2d1272b8SAndroid Build Coastguard Worker
340*2d1272b8SAndroid Build Coastguard Workerif (WIN32 AND HB_HAVE_GDI)
341*2d1272b8SAndroid Build Coastguard Worker  add_definitions(-DHAVE_GDI)
342*2d1272b8SAndroid Build Coastguard Worker  list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-gdi.h)
343*2d1272b8SAndroid Build Coastguard Worker  list(APPEND THIRD_PARTY_LIBS gdi32)
344*2d1272b8SAndroid Build Coastguard Worker  list(APPEND PC_LIBS_PRIV -lgdi32)
345*2d1272b8SAndroid Build Coastguard Workerendif ()
346*2d1272b8SAndroid Build Coastguard Worker
347*2d1272b8SAndroid Build Coastguard Workerif (WIN32 AND HB_HAVE_UNISCRIBE)
348*2d1272b8SAndroid Build Coastguard Worker  add_definitions(-DHAVE_UNISCRIBE)
349*2d1272b8SAndroid Build Coastguard Worker  list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-uniscribe.h)
350*2d1272b8SAndroid Build Coastguard Worker  list(APPEND THIRD_PARTY_LIBS usp10 gdi32 rpcrt4)
351*2d1272b8SAndroid Build Coastguard Worker  list(APPEND PC_LIBS_PRIV -lusp10 -lgdi32 -lrpcrt4)
352*2d1272b8SAndroid Build Coastguard Workerendif ()
353*2d1272b8SAndroid Build Coastguard Worker
354*2d1272b8SAndroid Build Coastguard Workerif (WIN32 AND HB_HAVE_DIRECTWRITE)
355*2d1272b8SAndroid Build Coastguard Worker  if (CMAKE_VERSION VERSION_GREATER 3.12)
356*2d1272b8SAndroid Build Coastguard Worker    check_include_files("windows.h;dwrite_1.h" HAVE_DWRITE_1_H LANGUAGE CXX)
357*2d1272b8SAndroid Build Coastguard Worker  else ()
358*2d1272b8SAndroid Build Coastguard Worker    check_include_files("windows.h;dwrite_1.h" HAVE_DWRITE_1_H)
359*2d1272b8SAndroid Build Coastguard Worker  endif ()
360*2d1272b8SAndroid Build Coastguard Worker  if (NOT HAVE_DWRITE_1_H)
361*2d1272b8SAndroid Build Coastguard Worker    message(FATAL_ERROR "DirectWrite was enabled explicitly, but required header is missing")
362*2d1272b8SAndroid Build Coastguard Worker  endif ()
363*2d1272b8SAndroid Build Coastguard Worker  add_definitions(-DHAVE_DIRECTWRITE)
364*2d1272b8SAndroid Build Coastguard Worker  list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-directwrite.h)
365*2d1272b8SAndroid Build Coastguard Workerendif ()
366*2d1272b8SAndroid Build Coastguard Worker
367*2d1272b8SAndroid Build Coastguard Workerif (HB_HAVE_CAIRO)
368*2d1272b8SAndroid Build Coastguard Worker  # https://github.com/WebKit/webkit/blob/master/Source/cmake/FindCairo.cmake
369*2d1272b8SAndroid Build Coastguard Worker  find_package(PkgConfig)
370*2d1272b8SAndroid Build Coastguard Worker  pkg_check_modules(PC_CAIRO QUIET cairo)
371*2d1272b8SAndroid Build Coastguard Worker
372*2d1272b8SAndroid Build Coastguard Worker  find_path(CAIRO_INCLUDE_DIRS NAMES cairo.h HINTS ${PC_CAIRO_INCLUDEDIR} ${PC_CAIRO_INCLUDE_DIRS} PATH_SUFFIXES cairo)
373*2d1272b8SAndroid Build Coastguard Worker  find_library(CAIRO_LIBRARIESNAMES cairo HINTS ${PC_CAIRO_LIBDIR} ${PC_CAIRO_LIBRARY_DIRS})
374*2d1272b8SAndroid Build Coastguard Worker  if (NOT CAIRO_LIBRARIESNAMES)
375*2d1272b8SAndroid Build Coastguard Worker    message(FATAL_ERROR "HB_HAVE_CAIRO is ON but Cairo libraries are not found")
376*2d1272b8SAndroid Build Coastguard Worker  endif()
377*2d1272b8SAndroid Build Coastguard Worker  include_directories(${CAIRO_INCLUDE_DIRS})
378*2d1272b8SAndroid Build Coastguard Worker  mark_as_advanced(CAIRO_INCLUDE_DIRS CAIRO_LIBRARIESNAMES)
379*2d1272b8SAndroid Build Coastguard Worker  add_definitions(-DHAVE_CAIRO=1)
380*2d1272b8SAndroid Build Coastguard Worker  list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-cairo.h)
381*2d1272b8SAndroid Build Coastguard Worker  list(APPEND THIRD_PARTY_LIBS ${CAIRO_LIBRARIESNAMES})
382*2d1272b8SAndroid Build Coastguard Workerendif()
383*2d1272b8SAndroid Build Coastguard Worker
384*2d1272b8SAndroid Build Coastguard Workerif (HB_HAVE_GOBJECT)
385*2d1272b8SAndroid Build Coastguard Worker  add_definitions(-DHAVE_GOBJECT)
386*2d1272b8SAndroid Build Coastguard Worker  include (FindPerl)
387*2d1272b8SAndroid Build Coastguard Worker
388*2d1272b8SAndroid Build Coastguard Worker  # Use the hints from glib-2.0.pc to find glib-mkenums
389*2d1272b8SAndroid Build Coastguard Worker  find_package(PkgConfig)
390*2d1272b8SAndroid Build Coastguard Worker  pkg_check_modules(PC_GLIB QUIET glib-2.0)
391*2d1272b8SAndroid Build Coastguard Worker  find_program(GLIB_MKENUMS glib-mkenums
392*2d1272b8SAndroid Build Coastguard Worker    HINTS ${PC_glib_mkenums}
393*2d1272b8SAndroid Build Coastguard Worker  )
394*2d1272b8SAndroid Build Coastguard Worker  set (GLIB_MKENUMS_CMD)
395*2d1272b8SAndroid Build Coastguard Worker
396*2d1272b8SAndroid Build Coastguard Worker  if (WIN32 AND NOT MINGW)
397*2d1272b8SAndroid Build Coastguard Worker    # In Visual Studio builds, shebang lines are not supported
398*2d1272b8SAndroid Build Coastguard Worker    # in the standard cmd.exe shell that we use, so we need to
399*2d1272b8SAndroid Build Coastguard Worker    # first determine whether glib-mkenums is a Python or PERL
400*2d1272b8SAndroid Build Coastguard Worker    # script
401*2d1272b8SAndroid Build Coastguard Worker    execute_process(COMMAND "${Python3_EXECUTABLE}" "${GLIB_MKENUMS}" --version
402*2d1272b8SAndroid Build Coastguard Worker      RESULT_VARIABLE GLIB_MKENUMS_PYTHON
403*2d1272b8SAndroid Build Coastguard Worker      OUTPUT_QUIET ERROR_QUIET
404*2d1272b8SAndroid Build Coastguard Worker    )
405*2d1272b8SAndroid Build Coastguard Worker    if (GLIB_MKENUMS_PYTHON EQUAL 0)
406*2d1272b8SAndroid Build Coastguard Worker      message("${GLIB_MKENUMS} is a Python script.")
407*2d1272b8SAndroid Build Coastguard Worker      set (GLIB_MKENUMS_CMD "${Python3_EXECUTABLE}" "${GLIB_MKENUMS}")
408*2d1272b8SAndroid Build Coastguard Worker    else ()
409*2d1272b8SAndroid Build Coastguard Worker      execute_process(COMMAND "${PERL_EXECUTABLE}" "${GLIB_MKENUMS}" --version
410*2d1272b8SAndroid Build Coastguard Worker        RESULT_VARIABLE GLIB_MKENUMS_PERL
411*2d1272b8SAndroid Build Coastguard Worker        OUTPUT_QUIET ERROR_QUIET
412*2d1272b8SAndroid Build Coastguard Worker      )
413*2d1272b8SAndroid Build Coastguard Worker      if (GLIB_MKENUMS_PERL EQUAL 0)
414*2d1272b8SAndroid Build Coastguard Worker        message("${GLIB_MKENUMS} is a PERL script.")
415*2d1272b8SAndroid Build Coastguard Worker        set (GLIB_MKENUMS_CMD "${PERL_EXECUTABLE}" "${GLIB_MKENUMS}")
416*2d1272b8SAndroid Build Coastguard Worker      endif ()
417*2d1272b8SAndroid Build Coastguard Worker      if (NOT GLIB_MKENUMS_PERL EQUAL 0 AND NOT GLIB_MKENUMS_PYTHON EQUAL 0)
418*2d1272b8SAndroid Build Coastguard Worker        message(FATAL_ERROR "Unable to determine type of glib-mkenums script")
419*2d1272b8SAndroid Build Coastguard Worker      endif ()
420*2d1272b8SAndroid Build Coastguard Worker    endif ()
421*2d1272b8SAndroid Build Coastguard Worker  else ()
422*2d1272b8SAndroid Build Coastguard Worker    set (GLIB_MKENUMS_CMD "${GLIB_MKENUMS}")
423*2d1272b8SAndroid Build Coastguard Worker  endif ()
424*2d1272b8SAndroid Build Coastguard Worker  if (NOT GLIB_MKENUMS_CMD)
425*2d1272b8SAndroid Build Coastguard Worker    message(FATAL_ERROR "HB_HAVE_GOBJECT was set, but we failed to find glib-mkenums, which is required")
426*2d1272b8SAndroid Build Coastguard Worker  endif ()
427*2d1272b8SAndroid Build Coastguard Worker
428*2d1272b8SAndroid Build Coastguard Worker  pkg_check_modules(PC_GOBJECT QUIET gobject-2.0)
429*2d1272b8SAndroid Build Coastguard Worker
430*2d1272b8SAndroid Build Coastguard Worker  find_library(GOBJECT_LIBRARIES NAMES gobject-2.0 HINTS ${PC_GLIB_LIBDIR} ${PC_GLIB_LIBRARY_DIRS})
431*2d1272b8SAndroid Build Coastguard Worker  find_path(GOBJECT_INCLUDE_DIR NAMES glib-object.h HINTS ${PC_GLIB_INCLUDEDIR} ${PC_GLIB_INCLUDE_DIRS} PATH_SUFFIXES glib-2.0)
432*2d1272b8SAndroid Build Coastguard Worker
433*2d1272b8SAndroid Build Coastguard Worker  include_directories(${GOBJECTCONFIG_INCLUDE_DIR} ${GOBJECT_INCLUDE_DIR})
434*2d1272b8SAndroid Build Coastguard Worker  mark_as_advanced(GOBJECT_LIBRARIES GOBJECT_INCLUDE_DIR)
435*2d1272b8SAndroid Build Coastguard Worker
436*2d1272b8SAndroid Build Coastguard Worker  list(APPEND hb_gobject_sources ${PROJECT_SOURCE_DIR}/src/hb-gobject-structs.cc)
437*2d1272b8SAndroid Build Coastguard Worker  list(APPEND hb_gobject_gen_sources
438*2d1272b8SAndroid Build Coastguard Worker    ${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.cc
439*2d1272b8SAndroid Build Coastguard Worker  )
440*2d1272b8SAndroid Build Coastguard Worker  list(APPEND hb_gobject_structs_headers
441*2d1272b8SAndroid Build Coastguard Worker    ${PROJECT_SOURCE_DIR}/src/hb-gobject-structs.h
442*2d1272b8SAndroid Build Coastguard Worker  )
443*2d1272b8SAndroid Build Coastguard Worker  list(APPEND hb_gobject_headers
444*2d1272b8SAndroid Build Coastguard Worker    ${PROJECT_SOURCE_DIR}/src/hb-gobject.h
445*2d1272b8SAndroid Build Coastguard Worker    ${hb_gobject_structs_headers}
446*2d1272b8SAndroid Build Coastguard Worker  )
447*2d1272b8SAndroid Build Coastguard Worker  list(APPEND hb_gobject_gen_headers
448*2d1272b8SAndroid Build Coastguard Worker    ${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.h
449*2d1272b8SAndroid Build Coastguard Worker  )
450*2d1272b8SAndroid Build Coastguard Worker
451*2d1272b8SAndroid Build Coastguard Worker  add_custom_command(
452*2d1272b8SAndroid Build Coastguard Worker    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.h
453*2d1272b8SAndroid Build Coastguard Worker    COMMAND ${GLIB_MKENUMS_CMD}
454*2d1272b8SAndroid Build Coastguard Worker      --template=${PROJECT_SOURCE_DIR}/src/hb-gobject-enums.h.tmpl
455*2d1272b8SAndroid Build Coastguard Worker      --identifier-prefix hb_
456*2d1272b8SAndroid Build Coastguard Worker      --symbol-prefix hb_gobject
457*2d1272b8SAndroid Build Coastguard Worker      ${hb_gobject_structs_headers}
458*2d1272b8SAndroid Build Coastguard Worker      ${project_headers}
459*2d1272b8SAndroid Build Coastguard Worker      > ${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.h.tmp
460*2d1272b8SAndroid Build Coastguard Worker    COMMAND "${CMAKE_COMMAND}"
461*2d1272b8SAndroid Build Coastguard Worker      "-DENUM_INPUT_SRC=${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.h.tmp"
462*2d1272b8SAndroid Build Coastguard Worker      "-DENUM_OUTPUT_SRC=${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.h"
463*2d1272b8SAndroid Build Coastguard Worker      -P ${PROJECT_SOURCE_DIR}/replace-enum-strings.cmake
464*2d1272b8SAndroid Build Coastguard Worker    DEPENDS ${PROJECT_SOURCE_DIR}/src/hb-gobject-enums.h.tmpl
465*2d1272b8SAndroid Build Coastguard Worker      ${hb_gobject_header}
466*2d1272b8SAndroid Build Coastguard Worker      ${project_headers}
467*2d1272b8SAndroid Build Coastguard Worker  )
468*2d1272b8SAndroid Build Coastguard Worker
469*2d1272b8SAndroid Build Coastguard Worker  add_custom_command(
470*2d1272b8SAndroid Build Coastguard Worker    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.cc
471*2d1272b8SAndroid Build Coastguard Worker    COMMAND ${GLIB_MKENUMS_CMD}
472*2d1272b8SAndroid Build Coastguard Worker      --template=${PROJECT_SOURCE_DIR}/src/hb-gobject-enums.cc.tmpl
473*2d1272b8SAndroid Build Coastguard Worker      --identifier-prefix hb_
474*2d1272b8SAndroid Build Coastguard Worker      --symbol-prefix hb_gobject
475*2d1272b8SAndroid Build Coastguard Worker      ${hb_gobject_header}
476*2d1272b8SAndroid Build Coastguard Worker      ${project_headers}
477*2d1272b8SAndroid Build Coastguard Worker      > ${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.cc.tmp
478*2d1272b8SAndroid Build Coastguard Worker    COMMAND "${CMAKE_COMMAND}"
479*2d1272b8SAndroid Build Coastguard Worker      "-DENUM_INPUT_SRC=${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.cc.tmp"
480*2d1272b8SAndroid Build Coastguard Worker      "-DENUM_OUTPUT_SRC=${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.cc"
481*2d1272b8SAndroid Build Coastguard Worker      -P ${PROJECT_SOURCE_DIR}/replace-enum-strings.cmake
482*2d1272b8SAndroid Build Coastguard Worker    DEPENDS ${PROJECT_SOURCE_DIR}/src/hb-gobject-enums.cc.tmpl
483*2d1272b8SAndroid Build Coastguard Worker      ${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.h
484*2d1272b8SAndroid Build Coastguard Worker      ${hb_gobject_header}
485*2d1272b8SAndroid Build Coastguard Worker      ${project_headers}
486*2d1272b8SAndroid Build Coastguard Worker  )
487*2d1272b8SAndroid Build Coastguard Workerendif ()
488*2d1272b8SAndroid Build Coastguard Worker
489*2d1272b8SAndroid Build Coastguard Worker
490*2d1272b8SAndroid Build Coastguard Worker## Define harfbuzz library
491*2d1272b8SAndroid Build Coastguard Workeradd_library(harfbuzz ${project_sources} ${project_extra_sources} ${project_headers})
492*2d1272b8SAndroid Build Coastguard Workertarget_link_libraries(harfbuzz ${THIRD_PARTY_LIBS})
493*2d1272b8SAndroid Build Coastguard Workertarget_include_directories(harfbuzz PUBLIC
494*2d1272b8SAndroid Build Coastguard Worker                           "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>"
495*2d1272b8SAndroid Build Coastguard Worker                           "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/harfbuzz>")
496*2d1272b8SAndroid Build Coastguard Workerif (HB_HAVE_FREETYPE AND TARGET freetype)
497*2d1272b8SAndroid Build Coastguard Worker  target_link_libraries(harfbuzz freetype)
498*2d1272b8SAndroid Build Coastguard Workerendif ()
499*2d1272b8SAndroid Build Coastguard Worker
500*2d1272b8SAndroid Build Coastguard Worker
501*2d1272b8SAndroid Build Coastguard Worker## Define harfbuzz-icu library
502*2d1272b8SAndroid Build Coastguard Workerif (HB_HAVE_ICU)
503*2d1272b8SAndroid Build Coastguard Worker  add_library(harfbuzz-icu ${PROJECT_SOURCE_DIR}/src/hb-icu.cc ${PROJECT_SOURCE_DIR}/src/hb-icu.h)
504*2d1272b8SAndroid Build Coastguard Worker  add_dependencies(harfbuzz-icu harfbuzz)
505*2d1272b8SAndroid Build Coastguard Worker  target_link_libraries(harfbuzz-icu harfbuzz ${THIRD_PARTY_LIBS})
506*2d1272b8SAndroid Build Coastguard Worker
507*2d1272b8SAndroid Build Coastguard Worker  if (BUILD_SHARED_LIBS)
508*2d1272b8SAndroid Build Coastguard Worker    set_target_properties(harfbuzz harfbuzz-icu PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
509*2d1272b8SAndroid Build Coastguard Worker  endif ()
510*2d1272b8SAndroid Build Coastguard Workerendif ()
511*2d1272b8SAndroid Build Coastguard Worker
512*2d1272b8SAndroid Build Coastguard Worker
513*2d1272b8SAndroid Build Coastguard Worker## Define harfbuzz-subset library
514*2d1272b8SAndroid Build Coastguard Workerif (HB_BUILD_SUBSET)
515*2d1272b8SAndroid Build Coastguard Worker  add_library(harfbuzz-subset ${subset_project_sources} ${subset_project_headers})
516*2d1272b8SAndroid Build Coastguard Worker  list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-subset.h ${PROJECT_SOURCE_DIR}/src/hb-subset-repacker.h)
517*2d1272b8SAndroid Build Coastguard Worker  add_dependencies(harfbuzz-subset harfbuzz)
518*2d1272b8SAndroid Build Coastguard Worker  target_link_libraries(harfbuzz-subset harfbuzz ${THIRD_PARTY_LIBS})
519*2d1272b8SAndroid Build Coastguard Worker
520*2d1272b8SAndroid Build Coastguard Worker  if (BUILD_SHARED_LIBS)
521*2d1272b8SAndroid Build Coastguard Worker    set_target_properties(harfbuzz harfbuzz-subset PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
522*2d1272b8SAndroid Build Coastguard Worker  endif ()
523*2d1272b8SAndroid Build Coastguard Workerendif ()
524*2d1272b8SAndroid Build Coastguard Worker
525*2d1272b8SAndroid Build Coastguard Workerif (UNIX OR MINGW OR VITA)
526*2d1272b8SAndroid Build Coastguard Worker  # Make symbols link locally
527*2d1272b8SAndroid Build Coastguard Worker  include (CheckCXXCompilerFlag)
528*2d1272b8SAndroid Build Coastguard Worker  CHECK_CXX_COMPILER_FLAG(-Bsymbolic-functions CXX_SUPPORTS_FLAG_BSYMB_FUNCS)
529*2d1272b8SAndroid Build Coastguard Worker  if (CXX_SUPPORTS_FLAG_BSYMB_FUNCS)
530*2d1272b8SAndroid Build Coastguard Worker    link_libraries(-Bsymbolic-functions)
531*2d1272b8SAndroid Build Coastguard Worker  endif ()
532*2d1272b8SAndroid Build Coastguard Worker
533*2d1272b8SAndroid Build Coastguard Worker  # As of CMake 3.0.0, the compiler id for Apple-provided Clang is now "AppleClang";
534*2d1272b8SAndroid Build Coastguard Worker  # thus we use MATCHES instead of STREQUAL to include either regular Clang or AppleClang
535*2d1272b8SAndroid Build Coastguard Worker  if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
536*2d1272b8SAndroid Build Coastguard Worker    # Make sure we don't link to libstdc++
537*2d1272b8SAndroid Build Coastguard Worker    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti -fno-exceptions")
538*2d1272b8SAndroid Build Coastguard Worker    set (CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "m") # libm
539*2d1272b8SAndroid Build Coastguard Worker    set (CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "")
540*2d1272b8SAndroid Build Coastguard Worker    set_target_properties(harfbuzz PROPERTIES LINKER_LANGUAGE C)
541*2d1272b8SAndroid Build Coastguard Worker    if (HB_BUILD_SUBSET)
542*2d1272b8SAndroid Build Coastguard Worker      set_target_properties(harfbuzz-subset PROPERTIES LINKER_LANGUAGE C)
543*2d1272b8SAndroid Build Coastguard Worker    endif ()
544*2d1272b8SAndroid Build Coastguard Worker
545*2d1272b8SAndroid Build Coastguard Worker    # No threadsafe statics as we do it ourselves
546*2d1272b8SAndroid Build Coastguard Worker    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-threadsafe-statics")
547*2d1272b8SAndroid Build Coastguard Worker  endif ()
548*2d1272b8SAndroid Build Coastguard Worker
549*2d1272b8SAndroid Build Coastguard Worker  CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
550*2d1272b8SAndroid Build Coastguard Worker  if (COMPILER_SUPPORTS_CXX11)
551*2d1272b8SAndroid Build Coastguard Worker    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
552*2d1272b8SAndroid Build Coastguard Worker  else()
553*2d1272b8SAndroid Build Coastguard Worker    message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
554*2d1272b8SAndroid Build Coastguard Worker  endif()
555*2d1272b8SAndroid Build Coastguard Workerendif ()
556*2d1272b8SAndroid Build Coastguard Worker
557*2d1272b8SAndroid Build Coastguard Worker
558*2d1272b8SAndroid Build Coastguard Worker## Define harfbuzz-gobject library
559*2d1272b8SAndroid Build Coastguard Workerif (HB_HAVE_GOBJECT)
560*2d1272b8SAndroid Build Coastguard Worker  add_library(harfbuzz-gobject
561*2d1272b8SAndroid Build Coastguard Worker    ${hb_gobject_sources}
562*2d1272b8SAndroid Build Coastguard Worker    ${hb_gobject_gen_sources}
563*2d1272b8SAndroid Build Coastguard Worker    ${hb_gobject_headers}
564*2d1272b8SAndroid Build Coastguard Worker    ${hb_gobject_gen_headers}
565*2d1272b8SAndroid Build Coastguard Worker  )
566*2d1272b8SAndroid Build Coastguard Worker  include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}/src)
567*2d1272b8SAndroid Build Coastguard Worker  add_dependencies(harfbuzz-gobject harfbuzz)
568*2d1272b8SAndroid Build Coastguard Worker  target_link_libraries(harfbuzz-gobject harfbuzz ${GOBJECT_LIBRARIES} ${THIRD_PARTY_LIBS})
569*2d1272b8SAndroid Build Coastguard Worker
570*2d1272b8SAndroid Build Coastguard Worker  if (BUILD_SHARED_LIBS)
571*2d1272b8SAndroid Build Coastguard Worker    set_target_properties(harfbuzz-gobject PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
572*2d1272b8SAndroid Build Coastguard Worker  endif ()
573*2d1272b8SAndroid Build Coastguard Workerendif ()
574*2d1272b8SAndroid Build Coastguard Worker
575*2d1272b8SAndroid Build Coastguard Worker## Define harfbuzz-cairo library
576*2d1272b8SAndroid Build Coastguard Workerif (HB_HAVE_CAIRO)
577*2d1272b8SAndroid Build Coastguard Worker  include_directories(${CAIRO_INCLUDE_DIRS})
578*2d1272b8SAndroid Build Coastguard Worker  add_library(harfbuzz-cairo ${PROJECT_SOURCE_DIR}/src/hb-cairo.cc ${PROJECT_SOURCE_DIR}/src/hb-static.cc ${PROJECT_SOURCE_DIR}/src/hb-cairo.h)
579*2d1272b8SAndroid Build Coastguard Worker  add_dependencies(harfbuzz-cairo harfbuzz)
580*2d1272b8SAndroid Build Coastguard Worker  target_link_libraries(harfbuzz-cairo harfbuzz ${THIRD_PARTY_LIBS})
581*2d1272b8SAndroid Build Coastguard Worker
582*2d1272b8SAndroid Build Coastguard Worker  if (BUILD_SHARED_LIBS)
583*2d1272b8SAndroid Build Coastguard Worker    set_target_properties(harfbuzz-cairo PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE)
584*2d1272b8SAndroid Build Coastguard Worker  endif ()
585*2d1272b8SAndroid Build Coastguard Workerendif()
586*2d1272b8SAndroid Build Coastguard Worker
587*2d1272b8SAndroid Build Coastguard Workerif (BUILD_SHARED_LIBS AND WIN32 AND NOT MINGW)
588*2d1272b8SAndroid Build Coastguard Worker  add_definitions("-DHB_DLL_EXPORT")
589*2d1272b8SAndroid Build Coastguard Workerendif ()
590*2d1272b8SAndroid Build Coastguard Worker
591*2d1272b8SAndroid Build Coastguard Worker# On Windows, g-ir-scanner requires a DLL build in order for it to work
592*2d1272b8SAndroid Build Coastguard Workerif (WIN32)
593*2d1272b8SAndroid Build Coastguard Worker  if (NOT BUILD_SHARED_LIBS)
594*2d1272b8SAndroid Build Coastguard Worker    message("Building introspection files on Windows requires BUILD_SHARED_LIBS to be enabled.")
595*2d1272b8SAndroid Build Coastguard Worker    set (HB_HAVE_INTROSPECTION OFF)
596*2d1272b8SAndroid Build Coastguard Worker  endif ()
597*2d1272b8SAndroid Build Coastguard Workerendif ()
598*2d1272b8SAndroid Build Coastguard Worker
599*2d1272b8SAndroid Build Coastguard Workerif (HB_HAVE_INTROSPECTION)
600*2d1272b8SAndroid Build Coastguard Worker  find_package(PkgConfig)
601*2d1272b8SAndroid Build Coastguard Worker  pkg_check_modules(PC_GI QUIET gobject-introspection-1.0)
602*2d1272b8SAndroid Build Coastguard Worker
603*2d1272b8SAndroid Build Coastguard Worker  find_program(G_IR_SCANNER g-ir-scanner
604*2d1272b8SAndroid Build Coastguard Worker    HINTS ${PC_g_ir_scanner}
605*2d1272b8SAndroid Build Coastguard Worker  )
606*2d1272b8SAndroid Build Coastguard Worker
607*2d1272b8SAndroid Build Coastguard Worker  find_program(G_IR_COMPILER g-ir-compiler
608*2d1272b8SAndroid Build Coastguard Worker    HINTS ${PC_g_ir_compiler}
609*2d1272b8SAndroid Build Coastguard Worker  )
610*2d1272b8SAndroid Build Coastguard Worker
611*2d1272b8SAndroid Build Coastguard Worker  if (WIN32 AND NOT MINGW)
612*2d1272b8SAndroid Build Coastguard Worker    # Note that since we already enable HB_HAVE_GOBJECT
613*2d1272b8SAndroid Build Coastguard Worker    # we would already have Python3_EXECUTABLE handy
614*2d1272b8SAndroid Build Coastguard Worker    set (G_IR_SCANNER_CMD "${Python3_EXECUTABLE}" "${G_IR_SCANNER}")
615*2d1272b8SAndroid Build Coastguard Worker  else ()
616*2d1272b8SAndroid Build Coastguard Worker    set (G_IR_SCANNER_CMD "${G_IR_SCANNER}")
617*2d1272b8SAndroid Build Coastguard Worker  endif ()
618*2d1272b8SAndroid Build Coastguard Worker
619*2d1272b8SAndroid Build Coastguard Worker  # We need to account for the varying output directories
620*2d1272b8SAndroid Build Coastguard Worker  # when we build using Visual Studio projects
621*2d1272b8SAndroid Build Coastguard Worker  if ("${CMAKE_GENERATOR}" MATCHES "Visual Studio*")
622*2d1272b8SAndroid Build Coastguard Worker    set (hb_libpath "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>")
623*2d1272b8SAndroid Build Coastguard Worker  else ()
624*2d1272b8SAndroid Build Coastguard Worker    set (hb_libpath "$<TARGET_FILE_DIR:harfbuzz-gobject>")
625*2d1272b8SAndroid Build Coastguard Worker  endif ()
626*2d1272b8SAndroid Build Coastguard Worker
627*2d1272b8SAndroid Build Coastguard Worker  # Get the CFlags that we used to build HarfBuzz/HarfBuzz-GObject
628*2d1272b8SAndroid Build Coastguard Worker  set (hb_defines_cflags "")
629*2d1272b8SAndroid Build Coastguard Worker  foreach (hb_cflag ${hb_cflags})
630*2d1272b8SAndroid Build Coastguard Worker    list(APPEND hb_defines_cflags "-D${hb_cflag}")
631*2d1272b8SAndroid Build Coastguard Worker  endforeach (hb_cflag)
632*2d1272b8SAndroid Build Coastguard Worker
633*2d1272b8SAndroid Build Coastguard Worker  # Get the other dependent libraries we used to build HarfBuzz/HarfBuzz-GObject
634*2d1272b8SAndroid Build Coastguard Worker  set (extra_libs "")
635*2d1272b8SAndroid Build Coastguard Worker  foreach (extra_lib ${THIRD_PARTY_LIBS})
636*2d1272b8SAndroid Build Coastguard Worker    # We don't want the .lib extension here...
637*2d1272b8SAndroid Build Coastguard Worker    string(REPLACE ".lib" "" extra_lib_stripped "${extra_lib}")
638*2d1272b8SAndroid Build Coastguard Worker    list(APPEND extra_libs "--extra-library=${extra_lib_stripped}")
639*2d1272b8SAndroid Build Coastguard Worker  endforeach ()
640*2d1272b8SAndroid Build Coastguard Worker
641*2d1272b8SAndroid Build Coastguard Worker  set (introspected_sources)
642*2d1272b8SAndroid Build Coastguard Worker  foreach (f
643*2d1272b8SAndroid Build Coastguard Worker    ${project_headers}
644*2d1272b8SAndroid Build Coastguard Worker    ${project_sources}
645*2d1272b8SAndroid Build Coastguard Worker    ${hb_gobject_gen_sources}
646*2d1272b8SAndroid Build Coastguard Worker    ${hb_gobject_gen_headers}
647*2d1272b8SAndroid Build Coastguard Worker    ${hb_gobject_sources}
648*2d1272b8SAndroid Build Coastguard Worker    ${hb_gobject_headers}
649*2d1272b8SAndroid Build Coastguard Worker  )
650*2d1272b8SAndroid Build Coastguard Worker    if (WIN32)
651*2d1272b8SAndroid Build Coastguard Worker      # Nasty issue: We need to make drive letters lower case,
652*2d1272b8SAndroid Build Coastguard Worker      # otherwise g-ir-scanner won't like it and give us a bunch
653*2d1272b8SAndroid Build Coastguard Worker      # of invalid items and unresolved types...
654*2d1272b8SAndroid Build Coastguard Worker      STRING(SUBSTRING "${f}" 0 1 drive)
655*2d1272b8SAndroid Build Coastguard Worker      STRING(SUBSTRING "${f}" 1 -1 path)
656*2d1272b8SAndroid Build Coastguard Worker      if (drive MATCHES "[A-Z]")
657*2d1272b8SAndroid Build Coastguard Worker        STRING(TOLOWER ${drive} drive_lower)
658*2d1272b8SAndroid Build Coastguard Worker        list(APPEND introspected_sources "${drive_lower}${path}")
659*2d1272b8SAndroid Build Coastguard Worker      else ()
660*2d1272b8SAndroid Build Coastguard Worker        list(APPEND introspected_sources "${f}")
661*2d1272b8SAndroid Build Coastguard Worker      endif ()
662*2d1272b8SAndroid Build Coastguard Worker    else ()
663*2d1272b8SAndroid Build Coastguard Worker      list(APPEND introspected_sources "${f}")
664*2d1272b8SAndroid Build Coastguard Worker    endif ()
665*2d1272b8SAndroid Build Coastguard Worker  endforeach ()
666*2d1272b8SAndroid Build Coastguard Worker
667*2d1272b8SAndroid Build Coastguard Worker  file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/src/hb_gir_list)
668*2d1272b8SAndroid Build Coastguard Worker  foreach (s ${introspected_sources})
669*2d1272b8SAndroid Build Coastguard Worker    file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/src/hb_gir_list "${s}\n")
670*2d1272b8SAndroid Build Coastguard Worker  endforeach ()
671*2d1272b8SAndroid Build Coastguard Worker
672*2d1272b8SAndroid Build Coastguard Worker  # Finally, build the introspection files...
673*2d1272b8SAndroid Build Coastguard Worker  add_custom_command(
674*2d1272b8SAndroid Build Coastguard Worker    TARGET harfbuzz-gobject
675*2d1272b8SAndroid Build Coastguard Worker    POST_BUILD
676*2d1272b8SAndroid Build Coastguard Worker    COMMAND ${G_IR_SCANNER_CMD}
677*2d1272b8SAndroid Build Coastguard Worker      --warn-all --no-libtool --verbose
678*2d1272b8SAndroid Build Coastguard Worker      --namespace=HarfBuzz
679*2d1272b8SAndroid Build Coastguard Worker      --nsversion=0.0
680*2d1272b8SAndroid Build Coastguard Worker      --symbol-prefix=hb
681*2d1272b8SAndroid Build Coastguard Worker      --symbol-prefix=hb_gobject
682*2d1272b8SAndroid Build Coastguard Worker      --identifier-prefix=hb_
683*2d1272b8SAndroid Build Coastguard Worker      --include GObject-2.0
684*2d1272b8SAndroid Build Coastguard Worker      --pkg-export=harfbuzz-gobject
685*2d1272b8SAndroid Build Coastguard Worker      --c-include=hb-gobject.h
686*2d1272b8SAndroid Build Coastguard Worker      --cflags-begin
687*2d1272b8SAndroid Build Coastguard Worker      -I${PROJECT_SOURCE_DIR}/src
688*2d1272b8SAndroid Build Coastguard Worker      -I${PROJECT_BINARY_DIR}/src
689*2d1272b8SAndroid Build Coastguard Worker      ${hb_includedir_cflags}
690*2d1272b8SAndroid Build Coastguard Worker      ${hb_defines_cflags}
691*2d1272b8SAndroid Build Coastguard Worker      -DHB_NO_SINGLE_HEADER_ERROR
692*2d1272b8SAndroid Build Coastguard Worker      -DHB_HAVE_GOBJECT
693*2d1272b8SAndroid Build Coastguard Worker      -DHB_EXTERN=
694*2d1272b8SAndroid Build Coastguard Worker      --cflags-end
695*2d1272b8SAndroid Build Coastguard Worker      --library=harfbuzz-gobject
696*2d1272b8SAndroid Build Coastguard Worker      --library=harfbuzz
697*2d1272b8SAndroid Build Coastguard Worker      -L${hb_libpath}
698*2d1272b8SAndroid Build Coastguard Worker      ${extra_libs}
699*2d1272b8SAndroid Build Coastguard Worker      --filelist ${CMAKE_CURRENT_BINARY_DIR}/src/hb_gir_list
700*2d1272b8SAndroid Build Coastguard Worker      -o ${hb_libpath}/HarfBuzz-0.0.gir
701*2d1272b8SAndroid Build Coastguard Worker    DEPENDS harfbuzz-gobject harfbuzz ${CMAKE_CURRENT_BINARY_DIR}/src/hb_gir_list
702*2d1272b8SAndroid Build Coastguard Worker  )
703*2d1272b8SAndroid Build Coastguard Worker
704*2d1272b8SAndroid Build Coastguard Worker  add_custom_command(
705*2d1272b8SAndroid Build Coastguard Worker    TARGET harfbuzz-gobject
706*2d1272b8SAndroid Build Coastguard Worker    POST_BUILD
707*2d1272b8SAndroid Build Coastguard Worker    COMMAND "${G_IR_COMPILER}"
708*2d1272b8SAndroid Build Coastguard Worker      --verbose --debug
709*2d1272b8SAndroid Build Coastguard Worker      --includedir ${CMAKE_CURRENT_BINARY_DIR}
710*2d1272b8SAndroid Build Coastguard Worker      ${hb_libpath}/HarfBuzz-0.0.gir
711*2d1272b8SAndroid Build Coastguard Worker      -o ${hb_libpath}/HarfBuzz-0.0.typelib
712*2d1272b8SAndroid Build Coastguard Worker    DEPENDS ${hb_libpath}/HarfBuzz-0.0.gir harfbuzz-gobject
713*2d1272b8SAndroid Build Coastguard Worker  )
714*2d1272b8SAndroid Build Coastguard Workerendif ()
715*2d1272b8SAndroid Build Coastguard Worker
716*2d1272b8SAndroid Build Coastguard Worker
717*2d1272b8SAndroid Build Coastguard Worker## Additional framework build configs
718*2d1272b8SAndroid Build Coastguard Workerif (BUILD_FRAMEWORK)
719*2d1272b8SAndroid Build Coastguard Worker  set (CMAKE_MACOSX_RPATH ON)
720*2d1272b8SAndroid Build Coastguard Worker  set_target_properties(harfbuzz PROPERTIES
721*2d1272b8SAndroid Build Coastguard Worker    FRAMEWORK TRUE
722*2d1272b8SAndroid Build Coastguard Worker    PUBLIC_HEADER "${project_headers}"
723*2d1272b8SAndroid Build Coastguard Worker    XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
724*2d1272b8SAndroid Build Coastguard Worker  )
725*2d1272b8SAndroid Build Coastguard Worker  set (MACOSX_FRAMEWORK_IDENTIFIER "harfbuzz")
726*2d1272b8SAndroid Build Coastguard Worker  set (MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${HB_VERSION}")
727*2d1272b8SAndroid Build Coastguard Worker  set (MACOSX_FRAMEWORK_BUNDLE_VERSION "${HB_VERSION}")
728*2d1272b8SAndroid Build Coastguard Workerendif ()
729*2d1272b8SAndroid Build Coastguard Worker
730*2d1272b8SAndroid Build Coastguard Worker
731*2d1272b8SAndroid Build Coastguard Worker## Additional harfbuzz build artifacts
732*2d1272b8SAndroid Build Coastguard Workerif (HB_BUILD_UTILS)
733*2d1272b8SAndroid Build Coastguard Worker  add_definitions("-DPACKAGE_NAME=\"HarfBuzz\"")
734*2d1272b8SAndroid Build Coastguard Worker  add_definitions("-DPACKAGE_VERSION=\"${HB_VERSION}\"")
735*2d1272b8SAndroid Build Coastguard Worker
736*2d1272b8SAndroid Build Coastguard Worker  if (HB_HAVE_CAIRO)
737*2d1272b8SAndroid Build Coastguard Worker    add_executable(hb-view
738*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/ansi-print.hh
739*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/face-options.hh
740*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/font-options.hh
741*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/hb-view.cc
742*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/helper-cairo-ansi.hh
743*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/helper-cairo-ft.hh
744*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/helper-cairo.hh
745*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/main-font-text.hh
746*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/options.hh
747*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/output-options.hh
748*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/shape-consumer.hh
749*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/shape-options.hh
750*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/text-options.hh
751*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/view-cairo.hh
752*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/view-options.hh
753*2d1272b8SAndroid Build Coastguard Worker    )
754*2d1272b8SAndroid Build Coastguard Worker    target_link_libraries(hb-view harfbuzz-cairo harfbuzz ${CAIRO_LIBRARIESNAMES})
755*2d1272b8SAndroid Build Coastguard Worker  endif()
756*2d1272b8SAndroid Build Coastguard Worker
757*2d1272b8SAndroid Build Coastguard Worker  add_executable(hb-shape
758*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/batch.hh
759*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/face-options.hh
760*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/font-options.hh
761*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/hb-shape.cc
762*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/main-font-text.hh
763*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/options.hh
764*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/output-options.hh
765*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/shape-consumer.hh
766*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/shape-format.hh
767*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/shape-options.hh
768*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/shape-output.hh
769*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/text-options.hh
770*2d1272b8SAndroid Build Coastguard Worker  )
771*2d1272b8SAndroid Build Coastguard Worker  target_link_libraries(hb-shape harfbuzz)
772*2d1272b8SAndroid Build Coastguard Worker
773*2d1272b8SAndroid Build Coastguard Worker  add_executable(hb-subset
774*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/batch.hh
775*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/face-options.hh
776*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/hb-subset.cc
777*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/main-font-text.hh
778*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/options.hh
779*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/output-options.hh
780*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/text-options.hh
781*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/helper-subset.hh
782*2d1272b8SAndroid Build Coastguard Worker  )
783*2d1272b8SAndroid Build Coastguard Worker  target_link_libraries(hb-subset harfbuzz harfbuzz-subset)
784*2d1272b8SAndroid Build Coastguard Worker
785*2d1272b8SAndroid Build Coastguard Worker  add_executable(hb-ot-shape-closure
786*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/face-options.hh
787*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/font-options.hh
788*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/hb-ot-shape-closure.cc
789*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/main-font-text.hh
790*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/options.hh
791*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/text-options.hh
792*2d1272b8SAndroid Build Coastguard Worker  )
793*2d1272b8SAndroid Build Coastguard Worker  target_link_libraries(hb-ot-shape-closure harfbuzz)
794*2d1272b8SAndroid Build Coastguard Worker
795*2d1272b8SAndroid Build Coastguard Worker  if (HB_HAVE_GOBJECT)
796*2d1272b8SAndroid Build Coastguard Worker    add_executable(hb-info
797*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/batch.hh
798*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/face-options.hh
799*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/font-options.hh
800*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/hb-info.cc
801*2d1272b8SAndroid Build Coastguard Worker        ${PROJECT_SOURCE_DIR}/util/options.hh
802*2d1272b8SAndroid Build Coastguard Worker    )
803*2d1272b8SAndroid Build Coastguard Worker    target_link_libraries(hb-info harfbuzz-gobject harfbuzz)
804*2d1272b8SAndroid Build Coastguard Worker  endif()
805*2d1272b8SAndroid Build Coastguard Workerendif ()
806*2d1272b8SAndroid Build Coastguard Worker
807*2d1272b8SAndroid Build Coastguard Worker
808*2d1272b8SAndroid Build Coastguard Worker## Install
809*2d1272b8SAndroid Build Coastguard Workerinclude (GNUInstallDirs)
810*2d1272b8SAndroid Build Coastguard Worker
811*2d1272b8SAndroid Build Coastguard Workerif (NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL)
812*2d1272b8SAndroid Build Coastguard Worker  install(FILES ${project_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/harfbuzz)
813*2d1272b8SAndroid Build Coastguard Worker  if (HB_HAVE_GOBJECT)
814*2d1272b8SAndroid Build Coastguard Worker    install(FILES ${hb_gobject_headers} ${hb_gobject_gen_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/harfbuzz)
815*2d1272b8SAndroid Build Coastguard Worker  endif ()
816*2d1272b8SAndroid Build Coastguard Workerendif ()
817*2d1272b8SAndroid Build Coastguard Worker
818*2d1272b8SAndroid Build Coastguard Worker# get these variables in the required format
819*2d1272b8SAndroid Build Coastguard Workerlist(REMOVE_DUPLICATES PC_REQUIRES_PRIV)
820*2d1272b8SAndroid Build Coastguard Workerstring(REPLACE ";" ", " PC_REQUIRES_PRIV "${PC_REQUIRES_PRIV}")
821*2d1272b8SAndroid Build Coastguard Workerlist(REMOVE_DUPLICATES PC_LIBS_PRIV)
822*2d1272b8SAndroid Build Coastguard Workerstring(REPLACE ";" " " PC_LIBS_PRIV "${PC_LIBS_PRIV}")
823*2d1272b8SAndroid Build Coastguard Worker
824*2d1272b8SAndroid Build Coastguard Worker# Macro to write pkg-config .pc configuration files
825*2d1272b8SAndroid Build Coastguard Workermacro ( make_pkgconfig_pc_file name )
826*2d1272b8SAndroid Build Coastguard Worker  file(READ "${PROJECT_SOURCE_DIR}/src/${name}.pc.in" FSTR)
827*2d1272b8SAndroid Build Coastguard Worker
828*2d1272b8SAndroid Build Coastguard Worker  string(REPLACE "%prefix%" "${CMAKE_INSTALL_PREFIX}" FSTR ${FSTR})
829*2d1272b8SAndroid Build Coastguard Worker  string(REPLACE "%exec_prefix%" "\${prefix}" FSTR ${FSTR})
830*2d1272b8SAndroid Build Coastguard Worker
831*2d1272b8SAndroid Build Coastguard Worker  if (IS_ABSOLUTE "${CMAKE_INSTALL_INCLUDEDIR}")
832*2d1272b8SAndroid Build Coastguard Worker    string(REPLACE "%includedir%" "${CMAKE_INSTALL_INCLUDEDIR}" FSTR ${FSTR})
833*2d1272b8SAndroid Build Coastguard Worker  else ()
834*2d1272b8SAndroid Build Coastguard Worker    string(REPLACE "%includedir%" "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}" FSTR ${FSTR})
835*2d1272b8SAndroid Build Coastguard Worker  endif ()
836*2d1272b8SAndroid Build Coastguard Worker
837*2d1272b8SAndroid Build Coastguard Worker  if (IS_ABSOLUTE "${CMAKE_INSTALL_LIBDIR}")
838*2d1272b8SAndroid Build Coastguard Worker    string(REPLACE "%libdir%" "${CMAKE_INSTALL_LIBDIR}" FSTR ${FSTR})
839*2d1272b8SAndroid Build Coastguard Worker  else ()
840*2d1272b8SAndroid Build Coastguard Worker    string(REPLACE "%libdir%" "\${prefix}/${CMAKE_INSTALL_LIBDIR}" FSTR ${FSTR})
841*2d1272b8SAndroid Build Coastguard Worker  endif ()
842*2d1272b8SAndroid Build Coastguard Worker
843*2d1272b8SAndroid Build Coastguard Worker  string(REPLACE "%VERSION%" "${HB_VERSION}" FSTR ${FSTR})
844*2d1272b8SAndroid Build Coastguard Worker  string(REPLACE "%requires_private%" "${PC_REQUIRES_PRIV}" FSTR ${FSTR})
845*2d1272b8SAndroid Build Coastguard Worker  string(REPLACE "%libs_private%" "${PC_LIBS_PRIV}" FSTR ${FSTR})
846*2d1272b8SAndroid Build Coastguard Worker
847*2d1272b8SAndroid Build Coastguard Worker  file(WRITE "${PROJECT_BINARY_DIR}/${name}.pc" ${FSTR})
848*2d1272b8SAndroid Build Coastguard Worker
849*2d1272b8SAndroid Build Coastguard Worker  install(
850*2d1272b8SAndroid Build Coastguard Worker    FILES "${PROJECT_BINARY_DIR}/${name}.pc"
851*2d1272b8SAndroid Build Coastguard Worker    DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig"
852*2d1272b8SAndroid Build Coastguard Worker    COMPONENT pkgconfig
853*2d1272b8SAndroid Build Coastguard Worker  )
854*2d1272b8SAndroid Build Coastguard Workerendmacro ( make_pkgconfig_pc_file )
855*2d1272b8SAndroid Build Coastguard Worker
856*2d1272b8SAndroid Build Coastguard Worker# Generate hb-features.h with the features we enabled
857*2d1272b8SAndroid Build Coastguard Workermacro (make_hb_features_h)
858*2d1272b8SAndroid Build Coastguard Worker  file(READ "${PROJECT_SOURCE_DIR}/src/hb-features.h.in" feature_h_in)
859*2d1272b8SAndroid Build Coastguard Worker  foreach(arg cairo coretext directwrite freetype gdi glib gobject graphite icu uniscribe wasm)
860*2d1272b8SAndroid Build Coastguard Worker    string(TOUPPER ${arg} feature_caps)
861*2d1272b8SAndroid Build Coastguard Worker    set(feature_instring "#mesondefine HB_HAS_${feature_caps}")
862*2d1272b8SAndroid Build Coastguard Worker    if (HB_HAVE_${feature_caps})
863*2d1272b8SAndroid Build Coastguard Worker      set(feature_outstring "#define HB_HAS_${feature_caps} 1")
864*2d1272b8SAndroid Build Coastguard Worker    else ()
865*2d1272b8SAndroid Build Coastguard Worker      set(feature_outstring "/* #undef HB_HAS_${feature_caps} */")
866*2d1272b8SAndroid Build Coastguard Worker    endif()
867*2d1272b8SAndroid Build Coastguard Worker    string(REPLACE ${feature_instring} ${feature_outstring} feature_h_in ${feature_h_in})
868*2d1272b8SAndroid Build Coastguard Worker  endforeach()
869*2d1272b8SAndroid Build Coastguard Worker  file(WRITE "${PROJECT_BINARY_DIR}/src/hb-features.h" ${feature_h_in})
870*2d1272b8SAndroid Build Coastguard Worker  if (NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL)
871*2d1272b8SAndroid Build Coastguard Worker    install(
872*2d1272b8SAndroid Build Coastguard Worker      FILES "${PROJECT_BINARY_DIR}/src/hb-features.h"
873*2d1272b8SAndroid Build Coastguard Worker      DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/harfbuzz"
874*2d1272b8SAndroid Build Coastguard Worker    )
875*2d1272b8SAndroid Build Coastguard Worker  endif()
876*2d1272b8SAndroid Build Coastguard Workerendmacro (make_hb_features_h)
877*2d1272b8SAndroid Build Coastguard Worker
878*2d1272b8SAndroid Build Coastguard Workerif (NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL)
879*2d1272b8SAndroid Build Coastguard Worker  install(TARGETS harfbuzz
880*2d1272b8SAndroid Build Coastguard Worker    EXPORT harfbuzzConfig
881*2d1272b8SAndroid Build Coastguard Worker    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
882*2d1272b8SAndroid Build Coastguard Worker    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
883*2d1272b8SAndroid Build Coastguard Worker    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
884*2d1272b8SAndroid Build Coastguard Worker    FRAMEWORK DESTINATION Library/Frameworks
885*2d1272b8SAndroid Build Coastguard Worker  )
886*2d1272b8SAndroid Build Coastguard Worker  make_pkgconfig_pc_file("harfbuzz")
887*2d1272b8SAndroid Build Coastguard Worker  install(EXPORT harfbuzzConfig
888*2d1272b8SAndroid Build Coastguard Worker      NAMESPACE harfbuzz::
889*2d1272b8SAndroid Build Coastguard Worker      DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/harfbuzz
890*2d1272b8SAndroid Build Coastguard Worker  )
891*2d1272b8SAndroid Build Coastguard Worker  if (HB_HAVE_ICU)
892*2d1272b8SAndroid Build Coastguard Worker    install(TARGETS harfbuzz-icu
893*2d1272b8SAndroid Build Coastguard Worker      ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
894*2d1272b8SAndroid Build Coastguard Worker      LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
895*2d1272b8SAndroid Build Coastguard Worker      RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
896*2d1272b8SAndroid Build Coastguard Worker      FRAMEWORK DESTINATION Library/Frameworks
897*2d1272b8SAndroid Build Coastguard Worker    )
898*2d1272b8SAndroid Build Coastguard Worker    make_pkgconfig_pc_file("harfbuzz-icu")
899*2d1272b8SAndroid Build Coastguard Worker  endif ()
900*2d1272b8SAndroid Build Coastguard Worker  if (HB_HAVE_CAIRO)
901*2d1272b8SAndroid Build Coastguard Worker    install(TARGETS harfbuzz-cairo
902*2d1272b8SAndroid Build Coastguard Worker      ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
903*2d1272b8SAndroid Build Coastguard Worker      LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
904*2d1272b8SAndroid Build Coastguard Worker      RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
905*2d1272b8SAndroid Build Coastguard Worker      FRAMEWORK DESTINATION Library/Frameworks
906*2d1272b8SAndroid Build Coastguard Worker    )
907*2d1272b8SAndroid Build Coastguard Worker    make_pkgconfig_pc_file("harfbuzz-cairo")
908*2d1272b8SAndroid Build Coastguard Worker  endif ()
909*2d1272b8SAndroid Build Coastguard Worker  if (HB_BUILD_SUBSET)
910*2d1272b8SAndroid Build Coastguard Worker    install(TARGETS harfbuzz-subset
911*2d1272b8SAndroid Build Coastguard Worker      ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
912*2d1272b8SAndroid Build Coastguard Worker    )
913*2d1272b8SAndroid Build Coastguard Worker    make_pkgconfig_pc_file("harfbuzz-subset")
914*2d1272b8SAndroid Build Coastguard Worker  endif ()
915*2d1272b8SAndroid Build Coastguard Worker  if (HB_BUILD_UTILS)
916*2d1272b8SAndroid Build Coastguard Worker    if (WIN32 AND BUILD_SHARED_LIBS)
917*2d1272b8SAndroid Build Coastguard Worker      install(TARGETS harfbuzz-subset
918*2d1272b8SAndroid Build Coastguard Worker        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
919*2d1272b8SAndroid Build Coastguard Worker      )
920*2d1272b8SAndroid Build Coastguard Worker    endif ()
921*2d1272b8SAndroid Build Coastguard Worker    if (HB_HAVE_CAIRO)
922*2d1272b8SAndroid Build Coastguard Worker      install(TARGETS hb-view
923*2d1272b8SAndroid Build Coastguard Worker        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
924*2d1272b8SAndroid Build Coastguard Worker      )
925*2d1272b8SAndroid Build Coastguard Worker    endif()
926*2d1272b8SAndroid Build Coastguard Worker    install(TARGETS hb-subset
927*2d1272b8SAndroid Build Coastguard Worker      RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
928*2d1272b8SAndroid Build Coastguard Worker    )
929*2d1272b8SAndroid Build Coastguard Worker
930*2d1272b8SAndroid Build Coastguard Worker    install(TARGETS hb-shape
931*2d1272b8SAndroid Build Coastguard Worker      RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
932*2d1272b8SAndroid Build Coastguard Worker    )
933*2d1272b8SAndroid Build Coastguard Worker
934*2d1272b8SAndroid Build Coastguard Worker    if (HB_HAVE_GOBJECT)
935*2d1272b8SAndroid Build Coastguard Worker      install(TARGETS hb-info
936*2d1272b8SAndroid Build Coastguard Worker        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
937*2d1272b8SAndroid Build Coastguard Worker      )
938*2d1272b8SAndroid Build Coastguard Worker    endif()
939*2d1272b8SAndroid Build Coastguard Worker
940*2d1272b8SAndroid Build Coastguard Worker    install(TARGETS hb-ot-shape-closure
941*2d1272b8SAndroid Build Coastguard Worker      RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
942*2d1272b8SAndroid Build Coastguard Worker    )
943*2d1272b8SAndroid Build Coastguard Worker  endif ()
944*2d1272b8SAndroid Build Coastguard Worker  if (HB_HAVE_GOBJECT)
945*2d1272b8SAndroid Build Coastguard Worker    install(TARGETS harfbuzz-gobject
946*2d1272b8SAndroid Build Coastguard Worker      ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
947*2d1272b8SAndroid Build Coastguard Worker      LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
948*2d1272b8SAndroid Build Coastguard Worker      RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
949*2d1272b8SAndroid Build Coastguard Worker    )
950*2d1272b8SAndroid Build Coastguard Worker    make_pkgconfig_pc_file("harfbuzz-gobject")
951*2d1272b8SAndroid Build Coastguard Worker    if (HB_HAVE_INTROSPECTION)
952*2d1272b8SAndroid Build Coastguard Worker      if ("${CMAKE_GENERATOR}" MATCHES "Visual Studio*")
953*2d1272b8SAndroid Build Coastguard Worker        set (hb_libpath "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>")
954*2d1272b8SAndroid Build Coastguard Worker      else ()
955*2d1272b8SAndroid Build Coastguard Worker        set (hb_libpath "$<TARGET_FILE_DIR:harfbuzz-gobject>")
956*2d1272b8SAndroid Build Coastguard Worker      endif ()
957*2d1272b8SAndroid Build Coastguard Worker
958*2d1272b8SAndroid Build Coastguard Worker      install(FILES "${hb_libpath}/HarfBuzz-0.0.gir"
959*2d1272b8SAndroid Build Coastguard Worker        DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/gir-1.0
960*2d1272b8SAndroid Build Coastguard Worker      )
961*2d1272b8SAndroid Build Coastguard Worker
962*2d1272b8SAndroid Build Coastguard Worker      install(FILES "${hb_libpath}/HarfBuzz-0.0.typelib"
963*2d1272b8SAndroid Build Coastguard Worker        DESTINATION ${CMAKE_INSTALL_LIBDIR}/girepository-1.0
964*2d1272b8SAndroid Build Coastguard Worker      )
965*2d1272b8SAndroid Build Coastguard Worker    endif ()
966*2d1272b8SAndroid Build Coastguard Worker  endif ()
967*2d1272b8SAndroid Build Coastguard Worker  make_hb_features_h()
968*2d1272b8SAndroid Build Coastguard Workerendif ()
969