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