ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 1 | cmake_minimum_required(VERSION 2.8.0) |
| 2 | project(harfbuzz) |
| 3 | |
Khaled Hosny | c860955 | 2017-12-06 00:43:28 +0200 | [diff] [blame] | 4 | enable_testing() |
Ebrahim Byagowi | 1527369 | 2017-05-13 21:32:56 +0430 | [diff] [blame] | 5 | |
| 6 | ## Limit framework build to Xcode generator |
| 7 | if (BUILD_FRAMEWORK) |
Ebrahim Byagowi | c97a7ec | 2018-01-16 14:18:09 +0330 | [diff] [blame] | 8 | # for a framework build on macOS, use: |
| 9 | # cmake -DBUILD_FRAMEWORK=ON -Bbuild -H. -GXcode && cmake --build build |
Ebrahim Byagowi | 1527369 | 2017-05-13 21:32:56 +0430 | [diff] [blame] | 10 | if (NOT "${CMAKE_GENERATOR}" STREQUAL "Xcode") |
| 11 | message(FATAL_ERROR |
| 12 | "You should use Xcode generator with BUILD_FRAMEWORK enabled") |
| 13 | endif () |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 14 | set (CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_64_BIT)") |
| 15 | set (CMAKE_MACOSX_RPATH ON) |
| 16 | set (BUILD_SHARED_LIBS ON) |
Ebrahim Byagowi | 1527369 | 2017-05-13 21:32:56 +0430 | [diff] [blame] | 17 | endif () |
| 18 | |
| 19 | |
Ebrahim Byagowi | bf50dda | 2017-05-04 20:31:42 +0430 | [diff] [blame] | 20 | ## Disallow in-source builds, as CMake generated make files can collide with autotools ones |
| 21 | if (NOT MSVC AND "${PROJECT_BINARY_DIR}" STREQUAL "${PROJECT_SOURCE_DIR}") |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 22 | message(FATAL_ERROR |
| 23 | " |
| 24 | In-source builds are not permitted! Make a separate folder for" |
| 25 | " building, e.g.," |
| 26 | " |
| 27 | mkdir build; cd build; cmake .." |
| 28 | " |
| 29 | Before that, remove the files created by this failed run with" |
| 30 | " |
| 31 | rm -rf CMakeCache.txt CMakeFiles") |
| 32 | endif () |
Ebrahim Byagowi | bf50dda | 2017-05-04 20:31:42 +0430 | [diff] [blame] | 33 | |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 34 | |
| 35 | ## HarfBuzz build configurations |
ebraminio | adfd4ae | 2017-04-11 23:18:18 +0430 | [diff] [blame] | 36 | option(HB_HAVE_FREETYPE "Enable freetype interop helpers" OFF) |
| 37 | option(HB_HAVE_GRAPHITE2 "Enable Graphite2 complementary shaper" OFF) |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 38 | option(HB_BUILTIN_UCDN "Use HarfBuzz provided UCDN" ON) |
ebraminio | adfd4ae | 2017-04-11 23:18:18 +0430 | [diff] [blame] | 39 | option(HB_HAVE_GLIB "Enable glib unicode functions" OFF) |
| 40 | option(HB_HAVE_ICU "Enable icu unicode functions" OFF) |
ebraminio | 6966413 | 2017-04-19 22:59:46 +0430 | [diff] [blame] | 41 | if (APPLE) |
| 42 | option(HB_HAVE_CORETEXT "Enable CoreText shaper backend on macOS" ON) |
Ebrahim Byagowi | 3c7aeb5 | 2018-01-09 01:39:42 +0330 | [diff] [blame] | 43 | set (CMAKE_MACOSX_RPATH ON) |
ebraminio | 6966413 | 2017-04-19 22:59:46 +0430 | [diff] [blame] | 44 | endif () |
| 45 | if (WIN32) |
| 46 | option(HB_HAVE_UNISCRIBE "Enable Uniscribe shaper backend on Windows" OFF) |
Chun-wei Fan | 162575f | 2017-10-18 22:27:28 +0800 | [diff] [blame] | 47 | option(HB_HAVE_DIRECTWRITE "Enable DirectWrite shaper backend on Windows" OFF) |
ebraminio | 6966413 | 2017-04-19 22:59:46 +0430 | [diff] [blame] | 48 | endif () |
ebraminio | 3a8bc57 | 2017-04-11 21:32:14 +0430 | [diff] [blame] | 49 | option(HB_BUILD_UTILS "Build harfbuzz utils, needs cairo, freetype, and glib properly be installed" OFF) |
| 50 | if (HB_BUILD_UTILS) |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 51 | set (HB_HAVE_GLIB ON) |
| 52 | set (HB_HAVE_FREETYPE ON) |
ebraminio | 3a8bc57 | 2017-04-11 21:32:14 +0430 | [diff] [blame] | 53 | endif () |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 54 | |
Ebrahim Byagowi | 1b7bfb5 | 2018-10-30 10:19:40 +0330 | [diff] [blame] | 55 | option(HB_BUILD_SUBSET "Build harfbuzz-subset" ON) |
| 56 | option(HB_BUILD_TESTS "Build harfbuzz tests" ON) |
| 57 | |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 58 | option(HB_HAVE_GOBJECT "Enable GObject Bindings" OFF) |
| 59 | if (HB_HAVE_GOBJECT) |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 60 | set (HB_HAVE_GLIB ON) |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 61 | endif () |
| 62 | |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 63 | option(HB_HAVE_INTROSPECTION "Enable building introspection (.gir/.typelib) files" OFF) |
| 64 | if (HB_HAVE_INTROSPECTION) |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 65 | set (HB_HAVE_GOBJECT ON) |
| 66 | set (HB_HAVE_GLIB ON) |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 67 | endif () |
| 68 | |
Ebrahim Byagowi | 72bec1c | 2018-01-05 12:42:20 +0330 | [diff] [blame] | 69 | option(HB_CHECK OFF "Do a configuration suitable for testing (shared library and enable all options)") |
| 70 | if (HB_CHECK) |
| 71 | set (BUILD_SHARED_LIBS ON) |
| 72 | set (HB_BUILD_UTILS ON) |
| 73 | set (HB_BUILTIN_UCDN ON) |
| 74 | set (HB_HAVE_ICU) |
| 75 | set (HB_HAVE_GLIB ON) |
| 76 | #set (HB_HAVE_GOBJECT ON) |
| 77 | #set (HB_HAVE_INTROSPECTION ON) |
| 78 | set (HB_HAVE_FREETYPE ON) |
| 79 | set (HB_HAVE_GRAPHITE2 ON) |
| 80 | if (WIN32) |
| 81 | set (HB_HAVE_UNISCRIBE ON) |
| 82 | set (HB_HAVE_DIRECTWRITE ON) |
| 83 | elseif (APPLE) |
| 84 | set (HB_HAVE_CORETEXT ON) |
| 85 | endif () |
| 86 | endif () |
| 87 | |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 88 | include_directories(AFTER |
ebraminio | d2acaf6 | 2017-04-05 02:21:23 -0700 | [diff] [blame] | 89 | ${PROJECT_SOURCE_DIR}/src |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 90 | ${PROJECT_BINARY_DIR}/src |
Ebrahim Byagowi | 5ed26fc | 2018-01-04 10:11:34 +0330 | [diff] [blame] | 91 | ) |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 92 | |
Chun-wei Fan | 162575f | 2017-10-18 22:27:28 +0800 | [diff] [blame] | 93 | add_definitions(-DHAVE_FALLBACK) |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 94 | |
Chun-wei Fan | 89dbabf | 2018-03-12 13:27:38 +0800 | [diff] [blame] | 95 | # We need PYTHON_EXECUTABLE to be set for running the tests... |
| 96 | include (FindPythonInterp) |
Ebrahim Byagowi | 71e0ed9 | 2018-01-10 15:45:12 +0330 | [diff] [blame] | 97 | |
Ebrahim Byagowi | 07885e6 | 2018-02-03 12:53:48 +0330 | [diff] [blame] | 98 | ## Functions and headers |
Ebrahim Byagowi | 71e0ed9 | 2018-01-10 15:45:12 +0330 | [diff] [blame] | 99 | include (CheckFunctionExists) |
| 100 | include (CheckIncludeFile) |
| 101 | macro (check_funcs) # Similar to AC_CHECK_FUNCS of autotools |
| 102 | foreach (func_name ${ARGN}) |
Bruce Mitchener | 257d0e5 | 2018-10-19 22:49:21 +0700 | [diff] [blame] | 103 | string(TOUPPER ${func_name} definition_to_add) |
| 104 | check_function_exists(${func_name} HAVE_${definition_to_add}) |
| 105 | if (${HAVE_${definition_to_add}}) |
| 106 | add_definitions(-DHAVE_${definition_to_add}) |
Ebrahim Byagowi | 71e0ed9 | 2018-01-10 15:45:12 +0330 | [diff] [blame] | 107 | endif () |
| 108 | endforeach () |
| 109 | endmacro () |
Chun-wei Fan | 89dbabf | 2018-03-12 13:27:38 +0800 | [diff] [blame] | 110 | if (UNIX) |
| 111 | list(APPEND CMAKE_REQUIRED_LIBRARIES m) |
| 112 | endif () |
| 113 | check_funcs(atexit mprotect sysconf getpagesize mmap isatty newlocale strtod_l round) |
Ebrahim Byagowi | 07885e6 | 2018-02-03 12:53:48 +0330 | [diff] [blame] | 114 | check_include_file(unistd.h HAVE_UNISTD_H) |
| 115 | if (${HAVE_UNISTD_H}) |
| 116 | add_definitions(-DHAVE_UNISTD_H) |
Ebrahim Byagowi | 71e0ed9 | 2018-01-10 15:45:12 +0330 | [diff] [blame] | 117 | endif () |
Ebrahim Byagowi | 07885e6 | 2018-02-03 12:53:48 +0330 | [diff] [blame] | 118 | check_include_file(sys/mman.h HAVE_SYS_MMAN_H) |
| 119 | if (${HAVE_SYS_MMAN_H}) |
| 120 | add_definitions(-DHAVE_SYS_MMAN_H) |
| 121 | endif () |
Ebrahim Byagowi | 71e0ed9 | 2018-01-10 15:45:12 +0330 | [diff] [blame] | 122 | check_include_file(xlocale.h HAVE_XLOCALE_H) |
| 123 | if (${HAVE_XLOCALE_H}) |
| 124 | add_definitions(-DHAVE_XLOCALE_H) |
| 125 | endif () |
Chun-wei Fan | 89dbabf | 2018-03-12 13:27:38 +0800 | [diff] [blame] | 126 | check_include_file(stdbool.h HAVE_STDBOOL_H) |
| 127 | if (${HAVE_STDBOOL_H}) |
| 128 | add_definitions(-DHAVE_STDBOOL_H) |
| 129 | endif () |
Ebrahim Byagowi | 71e0ed9 | 2018-01-10 15:45:12 +0330 | [diff] [blame] | 130 | |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 131 | |
| 132 | if (MSVC) |
| 133 | add_definitions(-wd4244 -wd4267 -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS) |
| 134 | endif () |
| 135 | |
Ebrahim Byagowi | bf50dda | 2017-05-04 20:31:42 +0430 | [diff] [blame] | 136 | |
Ebrahim Byagowi | 1527369 | 2017-05-13 21:32:56 +0430 | [diff] [blame] | 137 | ## Detect if we are running inside a distribution or regular repository folder |
Ebrahim Byagowi | 0eec331 | 2018-02-28 11:53:39 +0330 | [diff] [blame] | 138 | # if (EXISTS "${PROJECT_SOURCE_DIR}/ChangeLog") |
| 139 | # # perhaps we are on dist directory |
| 140 | # set (IN_HB_DIST TRUE) |
| 141 | # #set (HB_VERSION_H "${PROJECT_SOURCE_DIR}/src/hb-version.h") |
| 142 | # endif () |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 143 | |
Ebrahim Byagowi | bf50dda | 2017-05-04 20:31:42 +0430 | [diff] [blame] | 144 | |
ebraminio | 3a8bc57 | 2017-04-11 21:32:14 +0430 | [diff] [blame] | 145 | ## Extract variables from Makefile files |
Ebrahim Byagowi | 2dbdeb1 | 2017-12-29 23:13:29 +0330 | [diff] [blame] | 146 | function (extract_make_variable variable makefile_source) |
| 147 | string(REGEX MATCH "${variable} = ([^$]+)\\$" temp ${makefile_source}) |
| 148 | string(REGEX MATCHALL "[^ \n\t\\]+" listVar ${CMAKE_MATCH_1}) |
| 149 | set (${variable} ${listVar} PARENT_SCOPE) |
| 150 | endfunction () |
| 151 | |
| 152 | # http://stackoverflow.com/a/27630120 |
| 153 | function (add_prefix_to_list var prefix) |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 154 | set (listVar "") |
Ebrahim Byagowi | 2dbdeb1 | 2017-12-29 23:13:29 +0330 | [diff] [blame] | 155 | foreach (f ${${var}}) |
ebraminio | 3a8bc57 | 2017-04-11 21:32:14 +0430 | [diff] [blame] | 156 | list(APPEND listVar "${prefix}${f}") |
ebraminio | adfd4ae | 2017-04-11 23:18:18 +0430 | [diff] [blame] | 157 | endforeach () |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 158 | set (${var} "${listVar}" PARENT_SCOPE) |
ebraminio | d2acaf6 | 2017-04-05 02:21:23 -0700 | [diff] [blame] | 159 | endfunction () |
| 160 | |
ebraminio | 3a8bc57 | 2017-04-11 21:32:14 +0430 | [diff] [blame] | 161 | file(READ ${PROJECT_SOURCE_DIR}/src/Makefile.sources SRCSOURCES) |
| 162 | file(READ ${PROJECT_SOURCE_DIR}/util/Makefile.sources UTILSOURCES) |
ebraminio | adfd4ae | 2017-04-11 23:18:18 +0430 | [diff] [blame] | 163 | file(READ ${PROJECT_SOURCE_DIR}/src/hb-ucdn/Makefile.sources UCDNSOURCES) |
| 164 | |
Ebrahim Byagowi | 2dbdeb1 | 2017-12-29 23:13:29 +0330 | [diff] [blame] | 165 | extract_make_variable(HB_BASE_sources ${SRCSOURCES}) |
| 166 | add_prefix_to_list(HB_BASE_sources "${PROJECT_SOURCE_DIR}/src/") |
| 167 | extract_make_variable(HB_BASE_headers ${SRCSOURCES}) |
| 168 | add_prefix_to_list(HB_BASE_headers "${PROJECT_SOURCE_DIR}/src/") |
| 169 | extract_make_variable(HB_FALLBACK_sources ${SRCSOURCES}) |
| 170 | add_prefix_to_list(HB_FALLBACK_sources "${PROJECT_SOURCE_DIR}/src/") |
ebraminio | 3a8bc57 | 2017-04-11 21:32:14 +0430 | [diff] [blame] | 171 | |
Garret Rieger | f83a43b | 2018-02-02 17:50:45 -0800 | [diff] [blame] | 172 | extract_make_variable(HB_SUBSET_sources ${SRCSOURCES}) |
| 173 | add_prefix_to_list(HB_SUBSET_sources "${PROJECT_SOURCE_DIR}/src/") |
| 174 | |
| 175 | extract_make_variable(HB_SUBSET_headers ${SRCSOURCES}) |
| 176 | add_prefix_to_list(HB_SUBSET_headers "${PROJECT_SOURCE_DIR}/src/") |
| 177 | |
Ebrahim Byagowi | 2dbdeb1 | 2017-12-29 23:13:29 +0330 | [diff] [blame] | 178 | extract_make_variable(HB_BASE_RAGEL_GENERATED_sources ${SRCSOURCES}) |
Behdad Esfahbod | b91e8da | 2018-02-23 22:51:17 -0800 | [diff] [blame] | 179 | #if (IN_HB_DIST) |
Ebrahim Byagowi | 2dbdeb1 | 2017-12-29 23:13:29 +0330 | [diff] [blame] | 180 | add_prefix_to_list(HB_BASE_RAGEL_GENERATED_sources "${PROJECT_SOURCE_DIR}/src/") |
Behdad Esfahbod | b91e8da | 2018-02-23 22:51:17 -0800 | [diff] [blame] | 181 | #else () |
| 182 | # add_prefix_to_list(HB_BASE_RAGEL_GENERATED_sources "${PROJECT_BINARY_DIR}/src/") |
Behdad Esfahbod | b91e8da | 2018-02-23 22:51:17 -0800 | [diff] [blame] | 183 | #endif () |
ebraminio | 3a8bc57 | 2017-04-11 21:32:14 +0430 | [diff] [blame] | 184 | |
Ebrahim Byagowi | 2dbdeb1 | 2017-12-29 23:13:29 +0330 | [diff] [blame] | 185 | extract_make_variable(HB_VIEW_sources ${UTILSOURCES}) |
| 186 | add_prefix_to_list(HB_VIEW_sources "${PROJECT_SOURCE_DIR}/util/") |
| 187 | extract_make_variable(HB_SHAPE_sources ${UTILSOURCES}) |
| 188 | add_prefix_to_list(HB_SHAPE_sources "${PROJECT_SOURCE_DIR}/util/") |
Garret Rieger | f83a43b | 2018-02-02 17:50:45 -0800 | [diff] [blame] | 189 | extract_make_variable(HB_SUBSET_CLI_sources ${UTILSOURCES}) |
| 190 | add_prefix_to_list(HB_SUBSET_CLI_sources "${PROJECT_SOURCE_DIR}/util/") |
Ebrahim Byagowi | 2dbdeb1 | 2017-12-29 23:13:29 +0330 | [diff] [blame] | 191 | extract_make_variable(HB_OT_SHAPE_CLOSURE_sources ${UTILSOURCES}) |
| 192 | add_prefix_to_list(HB_OT_SHAPE_CLOSURE_sources "${PROJECT_SOURCE_DIR}/util/") |
ebraminio | 6966413 | 2017-04-19 22:59:46 +0430 | [diff] [blame] | 193 | |
Ebrahim Byagowi | 2dbdeb1 | 2017-12-29 23:13:29 +0330 | [diff] [blame] | 194 | extract_make_variable(LIBHB_UCDN_sources ${UCDNSOURCES}) |
| 195 | add_prefix_to_list(LIBHB_UCDN_sources "${PROJECT_SOURCE_DIR}/src/hb-ucdn/") |
| 196 | |
ebraminio | adfd4ae | 2017-04-11 23:18:18 +0430 | [diff] [blame] | 197 | |
ebraminio | 3a8bc57 | 2017-04-11 21:32:14 +0430 | [diff] [blame] | 198 | file(READ configure.ac CONFIGUREAC) |
| 199 | string(REGEX MATCH "\\[(([0-9]+)\\.([0-9]+)\\.([0-9]+))\\]" HB_VERSION_MATCH ${CONFIGUREAC}) |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 200 | set (HB_VERSION ${CMAKE_MATCH_1}) |
| 201 | set (HB_VERSION_MAJOR ${CMAKE_MATCH_2}) |
| 202 | set (HB_VERSION_MINOR ${CMAKE_MATCH_3}) |
| 203 | set (HB_VERSION_MICRO ${CMAKE_MATCH_4}) |
Ebrahim Byagowi | bf50dda | 2017-05-04 20:31:42 +0430 | [diff] [blame] | 204 | |
ebraminio | d2acaf6 | 2017-04-05 02:21:23 -0700 | [diff] [blame] | 205 | |
Ebrahim Byagowi | 1527369 | 2017-05-13 21:32:56 +0430 | [diff] [blame] | 206 | ## Define ragel tasks |
Ebrahim Byagowi | 0eec331 | 2018-02-28 11:53:39 +0330 | [diff] [blame] | 207 | # if (NOT IN_HB_DIST) |
Behdad Esfahbod | 58d4d19 | 2018-12-01 19:34:18 -0500 | [diff] [blame] | 208 | # foreach (ragel_output IN ITEMS ${HB_BASE_RAGEL_GENERATED_sources}) |
Ebrahim Byagowi | 0eec331 | 2018-02-28 11:53:39 +0330 | [diff] [blame] | 209 | # string(REGEX MATCH "([^/]+)\\.hh" temp ${ragel_output}) |
| 210 | # set (target_name ${CMAKE_MATCH_1}) |
| 211 | # add_custom_command(OUTPUT ${ragel_output} |
| 212 | # COMMAND ${RAGEL} -G2 -o ${ragel_output} ${PROJECT_SOURCE_DIR}/src/${target_name}.rl -I ${PROJECT_SOURCE_DIR} ${ARGN} |
| 213 | # DEPENDS ${PROJECT_SOURCE_DIR}/src/${target_name}.rl |
| 214 | # ) |
| 215 | # add_custom_target(harfbuzz_${target_name} DEPENDS ${PROJECT_BINARY_DIR}/src/${target_name}) |
| 216 | # endforeach () |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 217 | |
Ebrahim Byagowi | 0eec331 | 2018-02-28 11:53:39 +0330 | [diff] [blame] | 218 | # mark_as_advanced(RAGEL) |
| 219 | # endif () |
Ebrahim Byagowi | bf50dda | 2017-05-04 20:31:42 +0430 | [diff] [blame] | 220 | |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 221 | |
Ebrahim Byagowi | 1527369 | 2017-05-13 21:32:56 +0430 | [diff] [blame] | 222 | ## Generate hb-version.h |
Ebrahim Byagowi | 0eec331 | 2018-02-28 11:53:39 +0330 | [diff] [blame] | 223 | # if (NOT IN_HB_DIST) |
Behdad Esfahbod | b91e8da | 2018-02-23 22:51:17 -0800 | [diff] [blame] | 224 | # set (HB_VERSION_H_IN "${PROJECT_SOURCE_DIR}/src/hb-version.h.in") |
| 225 | # set (HB_VERSION_H "${PROJECT_BINARY_DIR}/src/hb-version.h") |
| 226 | # set_source_files_properties("${HB_VERSION_H}" PROPERTIES GENERATED true) |
| 227 | # configure_file("${HB_VERSION_H_IN}" "${HB_VERSION_H}.tmp" @ONLY) |
| 228 | # execute_process(COMMAND "${CMAKE_COMMAND}" -E copy_if_different |
| 229 | # "${HB_VERSION_H}.tmp" |
| 230 | # "${HB_VERSION_H}" |
| 231 | # ) |
| 232 | # file(REMOVE "${HB_VERSION_H}.tmp") |
Ebrahim Byagowi | 0eec331 | 2018-02-28 11:53:39 +0330 | [diff] [blame] | 233 | # endif () |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 234 | |
Ebrahim Byagowi | 1527369 | 2017-05-13 21:32:56 +0430 | [diff] [blame] | 235 | |
ebraminio | 3a8bc57 | 2017-04-11 21:32:14 +0430 | [diff] [blame] | 236 | ## Define sources and headers of the project |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 237 | set (project_sources |
ebraminio | d2acaf6 | 2017-04-05 02:21:23 -0700 | [diff] [blame] | 238 | ${HB_BASE_sources} |
| 239 | ${HB_BASE_RAGEL_GENERATED_sources} |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 240 | |
Chun-wei Fan | 162575f | 2017-10-18 22:27:28 +0800 | [diff] [blame] | 241 | ${HB_FALLBACK_sources} |
Garret Rieger | 0f3c756 | 2018-02-08 14:59:32 -0800 | [diff] [blame] | 242 | ) |
Garret Rieger | f83a43b | 2018-02-02 17:50:45 -0800 | [diff] [blame] | 243 | |
Garret Rieger | 0f3c756 | 2018-02-08 14:59:32 -0800 | [diff] [blame] | 244 | set (subset_project_sources |
Garret Rieger | f83a43b | 2018-02-02 17:50:45 -0800 | [diff] [blame] | 245 | ${HB_SUBSET_sources} |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 246 | ) |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 247 | |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 248 | set (project_extra_sources) |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 249 | |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 250 | set (project_headers |
Behdad Esfahbod | b91e8da | 2018-02-23 22:51:17 -0800 | [diff] [blame] | 251 | #${HB_VERSION_H} |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 252 | |
| 253 | ${HB_BASE_headers} |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 254 | ) |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 255 | |
Garret Rieger | 0f3c756 | 2018-02-08 14:59:32 -0800 | [diff] [blame] | 256 | set (subset_project_headers |
| 257 | ${HB_SUBSET_headers} |
| 258 | ) |
| 259 | |
Ebrahim Byagowi | bf50dda | 2017-05-04 20:31:42 +0430 | [diff] [blame] | 260 | |
| 261 | ## Find and include needed header folders and libraries |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 262 | if (HB_HAVE_FREETYPE) |
Ebrahim Byagowi | 71e0ed9 | 2018-01-10 15:45:12 +0330 | [diff] [blame] | 263 | include (FindFreetype) |
Khaled Hosny | 6760021 | 2017-10-12 12:05:08 +0300 | [diff] [blame] | 264 | if (NOT FREETYPE_FOUND) |
| 265 | 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") |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 266 | endif () |
Khaled Hosny | 6760021 | 2017-10-12 12:05:08 +0300 | [diff] [blame] | 267 | |
| 268 | list(APPEND THIRD_PARTY_LIBS ${FREETYPE_LIBRARIES}) |
| 269 | include_directories(AFTER ${FREETYPE_INCLUDE_DIRS}) |
Ebrahim Byagowi | 3d61576 | 2018-01-22 21:23:19 +0330 | [diff] [blame] | 270 | add_definitions(-DHAVE_FREETYPE=1) |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 271 | |
ebraminio | 3a8bc57 | 2017-04-11 21:32:14 +0430 | [diff] [blame] | 272 | list(APPEND project_sources ${PROJECT_SOURCE_DIR}/src/hb-ft.cc) |
| 273 | list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-ft.h) |
Ebrahim Byagowi | 3c7aeb5 | 2018-01-09 01:39:42 +0330 | [diff] [blame] | 274 | |
Ebrahim Byagowi | 29d9012 | 2018-01-30 10:01:46 +0330 | [diff] [blame] | 275 | # So check_funcs can find its headers |
Ebrahim Byagowi | 71e0ed9 | 2018-01-10 15:45:12 +0330 | [diff] [blame] | 276 | set (CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${FREETYPE_INCLUDE_DIRS}) |
| 277 | set (CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${FREETYPE_LIBRARIES}) |
Ebrahim Byagowi | 29d9012 | 2018-01-30 10:01:46 +0330 | [diff] [blame] | 278 | |
Ebrahim Byagowi | 71e0ed9 | 2018-01-10 15:45:12 +0330 | [diff] [blame] | 279 | check_funcs(FT_Get_Var_Blend_Coordinates FT_Set_Var_Blend_Coordinates FT_Done_MM_Var) |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 280 | endif () |
| 281 | |
ebraminio | adfd4ae | 2017-04-11 23:18:18 +0430 | [diff] [blame] | 282 | if (HB_HAVE_GRAPHITE2) |
| 283 | add_definitions(-DHAVE_GRAPHITE2) |
| 284 | |
| 285 | find_path(GRAPHITE2_INCLUDE_DIR graphite2/Font.h) |
| 286 | find_library(GRAPHITE2_LIBRARY graphite2) |
| 287 | |
| 288 | include_directories(${GRAPHITE2_INCLUDE_DIR}) |
| 289 | |
| 290 | list(APPEND project_sources ${PROJECT_SOURCE_DIR}/src/hb-graphite2.cc) |
| 291 | list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-graphite2.h) |
| 292 | |
| 293 | list(APPEND THIRD_PARTY_LIBS ${GRAPHITE2_LIBRARY}) |
ebraminio | 6966413 | 2017-04-19 22:59:46 +0430 | [diff] [blame] | 294 | |
| 295 | mark_as_advanced(GRAPHITE2_INCLUDE_DIR GRAPHITE2_LIBRARY) |
ebraminio | adfd4ae | 2017-04-11 23:18:18 +0430 | [diff] [blame] | 296 | endif () |
| 297 | |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 298 | if (HB_BUILTIN_UCDN) |
| 299 | include_directories(src/hb-ucdn) |
| 300 | add_definitions(-DHAVE_UCDN) |
| 301 | |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 302 | list(APPEND project_sources ${PROJECT_SOURCE_DIR}/src/hb-ucdn.cc) |
| 303 | list(APPEND project_extra_sources ${LIBHB_UCDN_sources}) |
ebraminio | 3a8bc57 | 2017-04-11 21:32:14 +0430 | [diff] [blame] | 304 | endif () |
| 305 | |
| 306 | if (HB_HAVE_GLIB) |
| 307 | add_definitions(-DHAVE_GLIB) |
| 308 | |
| 309 | # https://github.com/WebKit/webkit/blob/master/Source/cmake/FindGLIB.cmake |
| 310 | find_package(PkgConfig) |
| 311 | pkg_check_modules(PC_GLIB QUIET glib-2.0) |
| 312 | |
| 313 | find_library(GLIB_LIBRARIES NAMES glib-2.0 HINTS ${PC_GLIB_LIBDIR} ${PC_GLIB_LIBRARY_DIRS}) |
| 314 | 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) |
| 315 | find_path(GLIB_INCLUDE_DIR NAMES glib.h HINTS ${PC_GLIB_INCLUDEDIR} ${PC_GLIB_INCLUDE_DIRS} PATH_SUFFIXES glib-2.0) |
| 316 | |
| 317 | include_directories(${GLIBCONFIG_INCLUDE_DIR} ${GLIB_INCLUDE_DIR}) |
| 318 | |
| 319 | list(APPEND project_sources ${PROJECT_SOURCE_DIR}/src/hb-glib.cc) |
| 320 | list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-glib.h) |
| 321 | |
| 322 | list(APPEND THIRD_PARTY_LIBS ${GLIB_LIBRARIES}) |
ebraminio | 6966413 | 2017-04-19 22:59:46 +0430 | [diff] [blame] | 323 | |
| 324 | mark_as_advanced(GLIB_LIBRARIES GLIBCONFIG_INCLUDE_DIR GLIB_INCLUDE_DIR) |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 325 | endif () |
| 326 | |
ebraminio | adfd4ae | 2017-04-11 23:18:18 +0430 | [diff] [blame] | 327 | if (HB_HAVE_ICU) |
| 328 | add_definitions(-DHAVE_ICU) |
| 329 | |
| 330 | # https://github.com/WebKit/webkit/blob/master/Source/cmake/FindICU.cmake |
| 331 | find_package(PkgConfig) |
| 332 | pkg_check_modules(PC_ICU QUIET icu-uc) |
| 333 | |
| 334 | find_path(ICU_INCLUDE_DIR NAMES unicode/utypes.h HINTS ${PC_ICU_INCLUDE_DIRS} ${PC_ICU_INCLUDEDIR}) |
| 335 | find_library(ICU_LIBRARY NAMES libicuuc cygicuuc cygicuuc32 icuuc HINTS ${PC_ICU_LIBRARY_DIRS} ${PC_ICU_LIBDIR}) |
| 336 | |
| 337 | include_directories(${ICU_INCLUDE_DIR}) |
| 338 | |
| 339 | list(APPEND project_sources ${PROJECT_SOURCE_DIR}/src/hb-icu.cc) |
| 340 | list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-icu.h) |
| 341 | |
| 342 | list(APPEND THIRD_PARTY_LIBS ${ICU_LIBRARY}) |
ebraminio | 6966413 | 2017-04-19 22:59:46 +0430 | [diff] [blame] | 343 | |
| 344 | mark_as_advanced(ICU_INCLUDE_DIR ICU_LIBRARY) |
ebraminio | adfd4ae | 2017-04-11 23:18:18 +0430 | [diff] [blame] | 345 | endif () |
| 346 | |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 347 | if (APPLE AND HB_HAVE_CORETEXT) |
| 348 | # Apple Advanced Typography |
| 349 | add_definitions(-DHAVE_CORETEXT) |
| 350 | |
ebraminio | 3a8bc57 | 2017-04-11 21:32:14 +0430 | [diff] [blame] | 351 | list(APPEND project_sources ${PROJECT_SOURCE_DIR}/src/hb-coretext.cc) |
| 352 | list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-coretext.h) |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 353 | |
Ebrahim Byagowi | 187df7d | 2018-10-10 17:12:52 +0330 | [diff] [blame] | 354 | if (HB_IOS) |
| 355 | find_library(COREFOUNDATION CoreFoundation) |
| 356 | if (COREFOUNDATION) |
| 357 | list(APPEND THIRD_PARTY_LIBS ${COREFOUNDATION}) |
| 358 | endif () |
| 359 | mark_as_advanced(COREFOUNDATION) |
Ebrahim Byagowi | 3d61576 | 2018-01-22 21:23:19 +0330 | [diff] [blame] | 360 | |
Ebrahim Byagowi | 187df7d | 2018-10-10 17:12:52 +0330 | [diff] [blame] | 361 | find_library(CORETEXT CoreText) |
| 362 | if (CORETEXT) |
| 363 | list(APPEND THIRD_PARTY_LIBS ${CORETEXT}) |
| 364 | endif () |
| 365 | mark_as_advanced(CORETEXT) |
| 366 | |
| 367 | find_library(COREGRAPHICS CoreGraphics) |
| 368 | if (COREGRAPHICS) |
| 369 | list(APPEND THIRD_PARTY_LIBS ${COREGRAPHICS}) |
| 370 | endif () |
| 371 | mark_as_advanced(COREGRAPHICS) |
| 372 | else () |
| 373 | find_library(APPLICATION_SERVICES_FRAMEWORK ApplicationServices) |
| 374 | if (APPLICATION_SERVICES_FRAMEWORK) |
| 375 | list(APPEND THIRD_PARTY_LIBS ${APPLICATION_SERVICES_FRAMEWORK}) |
| 376 | endif () |
| 377 | |
| 378 | mark_as_advanced(APPLICATION_SERVICES_FRAMEWORK) |
| 379 | endif () |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 380 | endif () |
| 381 | |
| 382 | if (WIN32 AND HB_HAVE_UNISCRIBE) |
| 383 | add_definitions(-DHAVE_UNISCRIBE) |
| 384 | |
ebraminio | 3a8bc57 | 2017-04-11 21:32:14 +0430 | [diff] [blame] | 385 | list(APPEND project_sources ${PROJECT_SOURCE_DIR}/src/hb-uniscribe.cc) |
| 386 | list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-uniscribe.h) |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 387 | |
ebraminio | 3a8bc57 | 2017-04-11 21:32:14 +0430 | [diff] [blame] | 388 | list(APPEND THIRD_PARTY_LIBS usp10 gdi32 rpcrt4) |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 389 | endif () |
| 390 | |
| 391 | if (WIN32 AND HB_HAVE_DIRECTWRITE) |
| 392 | add_definitions(-DHAVE_DIRECTWRITE) |
| 393 | |
ebraminio | 3a8bc57 | 2017-04-11 21:32:14 +0430 | [diff] [blame] | 394 | list(APPEND project_sources ${PROJECT_SOURCE_DIR}/src/hb-directwrite.cc) |
| 395 | list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-directwrite.h) |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 396 | |
ebraminio | 3a8bc57 | 2017-04-11 21:32:14 +0430 | [diff] [blame] | 397 | list(APPEND THIRD_PARTY_LIBS dwrite rpcrt4) |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 398 | endif () |
Ebrahim Byagowi | bf50dda | 2017-05-04 20:31:42 +0430 | [diff] [blame] | 399 | |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 400 | if (HB_HAVE_GOBJECT) |
Ebrahim Byagowi | 71e0ed9 | 2018-01-10 15:45:12 +0330 | [diff] [blame] | 401 | include (FindPerl) |
Ebrahim Byagowi | 3d61576 | 2018-01-22 21:23:19 +0330 | [diff] [blame] | 402 | |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 403 | # Use the hints from glib-2.0.pc to find glib-mkenums |
| 404 | find_package(PkgConfig) |
| 405 | pkg_check_modules(PC_GLIB QUIET glib-2.0) |
| 406 | find_program(GLIB_MKENUMS glib-mkenums |
| 407 | HINTS ${PC_glib_mkenums} |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 408 | ) |
| 409 | set (GLIB_MKENUMS_CMD) |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 410 | |
| 411 | if (WIN32 AND NOT MINGW) |
| 412 | # In Visual Studio builds, shebang lines are not supported |
| 413 | # in the standard cmd.exe shell that we use, so we need to |
| 414 | # first determine whether glib-mkenums is a Python or PERL |
| 415 | # script |
| 416 | execute_process(COMMAND "${PYTHON_EXECUTABLE}" "${GLIB_MKENUMS}" --version |
| 417 | RESULT_VARIABLE GLIB_MKENUMS_PYTHON |
| 418 | OUTPUT_QUIET ERROR_QUIET |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 419 | ) |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 420 | if (GLIB_MKENUMS_PYTHON EQUAL 0) |
| 421 | message("${GLIB_MKENUMS} is a Python script.") |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 422 | set (GLIB_MKENUMS_CMD "${PYTHON_EXECUTABLE}" "${GLIB_MKENUMS}") |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 423 | else () |
| 424 | execute_process(COMMAND "${PERL_EXECUTABLE}" "${GLIB_MKENUMS}" --version |
| 425 | RESULT_VARIABLE GLIB_MKENUMS_PERL |
| 426 | OUTPUT_QUIET ERROR_QUIET |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 427 | ) |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 428 | if (GLIB_MKENUMS_PERL EQUAL 0) |
| 429 | message("${GLIB_MKENUMS} is a PERL script.") |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 430 | set (GLIB_MKENUMS_CMD "${PERL_EXECUTABLE}" "${GLIB_MKENUMS}") |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 431 | endif () |
| 432 | if (NOT GLIB_MKENUMS_PERL EQUAL 0 AND NOT GLIB_MKENUMS_PYTHON EQUAL 0) |
| 433 | message(FATAL_ERROR "Unable to determine type of glib-mkenums script") |
| 434 | endif () |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 435 | endif () |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 436 | else () |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 437 | set (GLIB_MKENUMS_CMD "${GLIB_MKENUMS}") |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 438 | endif () |
| 439 | if (NOT GLIB_MKENUMS_CMD) |
| 440 | message(FATAL_ERROR "HB_HAVE_GOBJECT was set, but we failed to find glib-mkenums, which is required") |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 441 | endif () |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 442 | |
| 443 | pkg_check_modules(PC_GOBJECT QUIET gobject-2.0) |
| 444 | |
| 445 | find_library(GOBJECT_LIBRARIES NAMES gobject-2.0 HINTS ${PC_GLIB_LIBDIR} ${PC_GLIB_LIBRARY_DIRS}) |
| 446 | find_path(GOBJECT_INCLUDE_DIR NAMES glib-object.h HINTS ${PC_GLIB_INCLUDEDIR} ${PC_GLIB_INCLUDE_DIRS} PATH_SUFFIXES glib-2.0) |
| 447 | |
| 448 | include_directories(${GOBJECTCONFIG_INCLUDE_DIR} ${GOBJECT_INCLUDE_DIR}) |
| 449 | mark_as_advanced(GOBJECT_LIBRARIES GOBJECT_INCLUDE_DIR) |
| 450 | |
| 451 | list(APPEND hb_gobject_sources ${PROJECT_SOURCE_DIR}/src/hb-gobject-structs.cc) |
| 452 | list(APPEND hb_gobject_gen_sources |
| 453 | ${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.cc |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 454 | ) |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 455 | list(APPEND hb_gobject_structs_headers |
| 456 | ${PROJECT_SOURCE_DIR}/src/hb-gobject-structs.h |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 457 | ) |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 458 | list(APPEND hb_gobject_headers |
| 459 | ${PROJECT_SOURCE_DIR}/src/hb-gobject.h |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 460 | ${hb_gobject_structs_headers} |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 461 | ) |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 462 | list(APPEND hb_gobject_gen_headers |
| 463 | ${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.h |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 464 | ) |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 465 | |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 466 | add_custom_command( |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 467 | OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.h |
| 468 | COMMAND ${GLIB_MKENUMS_CMD} |
| 469 | --template=${PROJECT_SOURCE_DIR}/src/hb-gobject-enums.h.tmpl |
| 470 | --identifier-prefix hb_ |
| 471 | --symbol-prefix hb_gobject |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 472 | ${hb_gobject_structs_headers} |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 473 | ${project_headers} |
| 474 | > ${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.h.tmp |
| 475 | COMMAND "${CMAKE_COMMAND}" |
| 476 | "-DENUM_INPUT_SRC=${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.h.tmp" |
| 477 | "-DENUM_OUTPUT_SRC=${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.h" |
| 478 | -P ${PROJECT_SOURCE_DIR}/replace-enum-strings.cmake |
| 479 | DEPENDS ${PROJECT_SOURCE_DIR}/src/hb-gobject-enums.h.tmpl |
| 480 | ${hb_gobject_header} |
| 481 | ${project_headers} |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 482 | ) |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 483 | |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 484 | add_custom_command( |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 485 | OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.cc |
| 486 | COMMAND ${GLIB_MKENUMS_CMD} |
| 487 | --template=${PROJECT_SOURCE_DIR}/src/hb-gobject-enums.cc.tmpl |
| 488 | --identifier-prefix hb_ |
| 489 | --symbol-prefix hb_gobject |
| 490 | ${hb_gobject_header} |
| 491 | ${project_headers} |
| 492 | > ${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.cc.tmp |
| 493 | COMMAND "${CMAKE_COMMAND}" |
| 494 | "-DENUM_INPUT_SRC=${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.cc.tmp" |
| 495 | "-DENUM_OUTPUT_SRC=${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.cc" |
| 496 | -P ${PROJECT_SOURCE_DIR}/replace-enum-strings.cmake |
| 497 | DEPENDS ${PROJECT_SOURCE_DIR}/src/hb-gobject-enums.cc.tmpl |
| 498 | ${CMAKE_CURRENT_BINARY_DIR}/src/hb-gobject-enums.h |
| 499 | ${hb_gobject_header} |
| 500 | ${project_headers} |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 501 | ) |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 502 | endif () |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 503 | |
Ebrahim Byagowi | 5ed26fc | 2018-01-04 10:11:34 +0330 | [diff] [blame] | 504 | |
ebraminio | a41d5ea | 2017-04-14 04:25:50 +0430 | [diff] [blame] | 505 | ## Atomic ops availability detection |
| 506 | file(WRITE "${PROJECT_BINARY_DIR}/try_compile_intel_atomic_primitives.c" |
| 507 | " void memory_barrier (void) { __sync_synchronize (); } |
| 508 | int atomic_add (int *i) { return __sync_fetch_and_add (i, 1); } |
| 509 | int mutex_trylock (int *m) { return __sync_lock_test_and_set (m, 1); } |
| 510 | void mutex_unlock (int *m) { __sync_lock_release (m); } |
ebraminio | 7593142 | 2017-04-14 05:08:11 +0430 | [diff] [blame] | 511 | int main () { return 0; } |
ebraminio | a41d5ea | 2017-04-14 04:25:50 +0430 | [diff] [blame] | 512 | ") |
| 513 | try_compile(HB_HAVE_INTEL_ATOMIC_PRIMITIVES |
| 514 | ${PROJECT_BINARY_DIR}/try_compile_intel_atomic_primitives |
rdb | 5e14e5f | 2018-01-16 17:04:33 +0100 | [diff] [blame] | 515 | ${PROJECT_BINARY_DIR}/try_compile_intel_atomic_primitives.c) |
ebraminio | a41d5ea | 2017-04-14 04:25:50 +0430 | [diff] [blame] | 516 | if (HB_HAVE_INTEL_ATOMIC_PRIMITIVES) |
| 517 | add_definitions(-DHAVE_INTEL_ATOMIC_PRIMITIVES) |
| 518 | endif () |
| 519 | |
| 520 | file(WRITE "${PROJECT_BINARY_DIR}/try_compile_solaris_atomic_ops.c" |
| 521 | " #include <atomic.h> |
| 522 | /* This requires Solaris Studio 12.2 or newer: */ |
| 523 | #include <mbarrier.h> |
| 524 | void memory_barrier (void) { __machine_rw_barrier (); } |
| 525 | int atomic_add (volatile unsigned *i) { return atomic_add_int_nv (i, 1); } |
| 526 | void *atomic_ptr_cmpxchg (volatile void **target, void *cmp, void *newval) { return atomic_cas_ptr (target, cmp, newval); } |
ebraminio | 7593142 | 2017-04-14 05:08:11 +0430 | [diff] [blame] | 527 | int main () { return 0; } |
ebraminio | a41d5ea | 2017-04-14 04:25:50 +0430 | [diff] [blame] | 528 | ") |
| 529 | try_compile(HB_HAVE_SOLARIS_ATOMIC_OPS |
| 530 | ${PROJECT_BINARY_DIR}/try_compile_solaris_atomic_ops |
rdb | 5e14e5f | 2018-01-16 17:04:33 +0100 | [diff] [blame] | 531 | ${PROJECT_BINARY_DIR}/try_compile_solaris_atomic_ops.c) |
ebraminio | cb021e1 | 2017-04-14 04:31:17 +0430 | [diff] [blame] | 532 | if (HB_HAVE_SOLARIS_ATOMIC_OPS) |
| 533 | add_definitions(-DHAVE_SOLARIS_ATOMIC_OPS) |
ebraminio | a41d5ea | 2017-04-14 04:25:50 +0430 | [diff] [blame] | 534 | endif () |
ebraminio | a41d5ea | 2017-04-14 04:25:50 +0430 | [diff] [blame] | 535 | |
Ebrahim Byagowi | bf50dda | 2017-05-04 20:31:42 +0430 | [diff] [blame] | 536 | |
| 537 | ## Define harfbuzz library |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 538 | add_library(harfbuzz ${project_sources} ${project_extra_sources} ${project_headers}) |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 539 | target_link_libraries(harfbuzz ${THIRD_PARTY_LIBS}) |
| 540 | |
Garret Rieger | 0f3c756 | 2018-02-08 14:59:32 -0800 | [diff] [blame] | 541 | ## Define harfbuzz-subset library |
Ebrahim Byagowi | 1b7bfb5 | 2018-10-30 10:19:40 +0330 | [diff] [blame] | 542 | if (HB_BUILD_SUBSET) |
Ebrahim Byagowi | 187df7d | 2018-10-10 17:12:52 +0330 | [diff] [blame] | 543 | add_library(harfbuzz-subset ${subset_project_sources} ${subset_project_headers}) |
| 544 | add_dependencies(harfbuzz-subset harfbuzz) |
| 545 | target_link_libraries(harfbuzz-subset harfbuzz ${THIRD_PARTY_LIBS}) |
Garret Rieger | 0f3c756 | 2018-02-08 14:59:32 -0800 | [diff] [blame] | 546 | |
Ebrahim Byagowi | 187df7d | 2018-10-10 17:12:52 +0330 | [diff] [blame] | 547 | if (BUILD_SHARED_LIBS) |
| 548 | set_target_properties(harfbuzz harfbuzz-subset PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE) |
| 549 | endif () |
Ebrahim Byagowi | ac92ed7 | 2018-05-08 01:05:15 +0430 | [diff] [blame] | 550 | endif () |
| 551 | |
Ebrahim Byagowi | 90f01ba | 2018-01-16 22:00:21 +0330 | [diff] [blame] | 552 | if (UNIX OR MINGW) |
| 553 | # Make symbols link locally |
Ebrahim Byagowi | eff36cd | 2018-03-30 22:25:35 +0430 | [diff] [blame] | 554 | include (CheckCXXCompilerFlag) |
Joel Winarske | d68f00e | 2018-03-16 12:14:27 -0700 | [diff] [blame] | 555 | check_cxx_compiler_flag(-Bsymbolic-functions CXX_SUPPORTS_FLAG_BSYMB_FUNCS) |
Ebrahim Byagowi | eff36cd | 2018-03-30 22:25:35 +0430 | [diff] [blame] | 556 | if (CXX_SUPPORTS_FLAG_BSYMB_FUNCS) |
Joel Winarske | d68f00e | 2018-03-16 12:14:27 -0700 | [diff] [blame] | 557 | link_libraries(-Bsymbolic-functions) |
Ebrahim Byagowi | eff36cd | 2018-03-30 22:25:35 +0430 | [diff] [blame] | 558 | endif () |
Ebrahim Byagowi | 90f01ba | 2018-01-16 22:00:21 +0330 | [diff] [blame] | 559 | |
Ebrahim Byagowi | 29d9012 | 2018-01-30 10:01:46 +0330 | [diff] [blame] | 560 | if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") |
Ebrahim Byagowi | 844f48e | 2018-02-10 23:13:12 +0330 | [diff] [blame] | 561 | # Make sure we don't link to libstdc++ |
Ebrahim Byagowi | 29d9012 | 2018-01-30 10:01:46 +0330 | [diff] [blame] | 562 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti -fno-exceptions") |
| 563 | set (CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "m") # libm |
| 564 | set (CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "") |
| 565 | set_target_properties(harfbuzz PROPERTIES LINKER_LANGUAGE C) |
Ebrahim Byagowi | 1b7bfb5 | 2018-10-30 10:19:40 +0330 | [diff] [blame] | 566 | if (HB_BUILD_SUBSET) |
Ebrahim Byagowi | 187df7d | 2018-10-10 17:12:52 +0330 | [diff] [blame] | 567 | set_target_properties(harfbuzz-subset PROPERTIES LINKER_LANGUAGE C) |
| 568 | endif () |
Ebrahim Byagowi | 0080614 | 2018-01-19 01:12:31 +0330 | [diff] [blame] | 569 | |
Ebrahim Byagowi | 844f48e | 2018-02-10 23:13:12 +0330 | [diff] [blame] | 570 | # No threadsafe statics as we do it ourselves |
Ebrahim Byagowi | 29d9012 | 2018-01-30 10:01:46 +0330 | [diff] [blame] | 571 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-threadsafe-statics") |
Ebrahim Byagowi | 90f01ba | 2018-01-16 22:00:21 +0330 | [diff] [blame] | 572 | endif () |
| 573 | endif () |
| 574 | |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 575 | ## Define harfbuzz-gobject library |
| 576 | if (HB_HAVE_GOBJECT) |
| 577 | add_library(harfbuzz-gobject |
| 578 | ${hb_gobject_sources} |
| 579 | ${hb_gobject_gen_sources} |
| 580 | ${hb_gobject_headers} |
| 581 | ${hb_gobject_gen_headers} |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 582 | ) |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 583 | include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR}/src) |
| 584 | add_dependencies(harfbuzz-gobject harfbuzz) |
| 585 | target_link_libraries(harfbuzz-gobject harfbuzz ${GOBJECT_LIBRARIES} ${THIRD_PARTY_LIBS}) |
Ebrahim Byagowi | ac92ed7 | 2018-05-08 01:05:15 +0430 | [diff] [blame] | 586 | |
| 587 | if (BUILD_SHARED_LIBS) |
| 588 | set_target_properties(harfbuzz-gobject PROPERTIES VISIBILITY_INLINES_HIDDEN TRUE) |
| 589 | endif () |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 590 | endif () |
Ebrahim Byagowi | bf50dda | 2017-05-04 20:31:42 +0430 | [diff] [blame] | 591 | |
Ebrahim Byagowi | 42d3271 | 2018-03-16 22:39:58 +0330 | [diff] [blame] | 592 | if (BUILD_SHARED_LIBS AND WIN32 AND NOT MINGW) |
Chun-wei Fan | 8e4ad1d | 2018-07-25 18:12:34 +0800 | [diff] [blame] | 593 | add_definitions("-DHB_DLL_EXPORT") |
Nikolaus Waxweiler | 22de9bf | 2018-03-14 10:29:24 +0000 | [diff] [blame] | 594 | endif () |
| 595 | |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 596 | # On Windows, g-ir-scanner requires a DLL build in order for it to work |
| 597 | if (WIN32) |
| 598 | if (NOT BUILD_SHARED_LIBS) |
| 599 | message("Building introspection files on Windows requires BUILD_SHARED_LIBS to be enabled.") |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 600 | set (HB_HAVE_INTROSPECTION OFF) |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 601 | endif () |
| 602 | endif () |
| 603 | |
| 604 | if (HB_HAVE_INTROSPECTION) |
| 605 | |
| 606 | find_package(PkgConfig) |
| 607 | pkg_check_modules(PC_GI QUIET gobject-introspection-1.0) |
| 608 | |
| 609 | find_program(G_IR_SCANNER g-ir-scanner |
| 610 | HINTS ${PC_g_ir_scanner} |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 611 | ) |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 612 | |
| 613 | find_program(G_IR_COMPILER g-ir-compiler |
| 614 | HINTS ${PC_g_ir_compiler} |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 615 | ) |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 616 | |
| 617 | if (WIN32 AND NOT MINGW) |
| 618 | # Note that since we already enable HB_HAVE_GOBJECT |
| 619 | # we would already have PYTHON_EXECUTABLE handy |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 620 | set (G_IR_SCANNER_CMD "${PYTHON_EXECUTABLE}" "${G_IR_SCANNER}") |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 621 | else () |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 622 | set (G_IR_SCANNER_CMD "${G_IR_SCANNER}") |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 623 | endif () |
| 624 | |
| 625 | # We need to account for the varying output directories |
| 626 | # when we build using Visual Studio projects |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 627 | if ("${CMAKE_GENERATOR}" MATCHES "Visual Studio*") |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 628 | set (hb_libpath "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>") |
| 629 | else () |
| 630 | set (hb_libpath "$<TARGET_FILE_DIR:harfbuzz-gobject>") |
| 631 | endif () |
| 632 | |
| 633 | # Get the CFlags that we used to build HarfBuzz/HarfBuzz-GObject |
| 634 | set (hb_defines_cflags "") |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 635 | foreach (hb_cflag ${hb_cflags}) |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 636 | list(APPEND hb_defines_cflags "-D${hb_cflag}") |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 637 | endforeach (hb_cflag) |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 638 | |
| 639 | # Get the other dependent libraries we used to build HarfBuzz/HarfBuzz-GObject |
| 640 | set (extra_libs "") |
| 641 | foreach (extra_lib ${THIRD_PARTY_LIBS}) |
| 642 | # We don't want the .lib extension here... |
| 643 | string(REPLACE ".lib" "" extra_lib_stripped "${extra_lib}") |
| 644 | list(APPEND extra_libs "--extra-library=${extra_lib_stripped}") |
| 645 | endforeach () |
| 646 | |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 647 | set (introspected_sources) |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 648 | foreach (f |
| 649 | ${project_headers} |
| 650 | ${project_sources} |
| 651 | ${hb_gobject_gen_sources} |
| 652 | ${hb_gobject_gen_headers} |
| 653 | ${hb_gobject_sources} |
| 654 | ${hb_gobject_headers} |
Ebrahim Byagowi | 5ed26fc | 2018-01-04 10:11:34 +0330 | [diff] [blame] | 655 | ) |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 656 | if (WIN32) |
| 657 | # Nasty issue: We need to make drive letters lower case, |
| 658 | # otherwise g-ir-scanner won't like it and give us a bunch |
| 659 | # of invalid items and unresolved types... |
| 660 | STRING(SUBSTRING "${f}" 0 1 drive) |
| 661 | STRING(SUBSTRING "${f}" 1 -1 path) |
| 662 | if (drive MATCHES "[A-Z]") |
| 663 | STRING(TOLOWER ${drive} drive_lower) |
| 664 | list(APPEND introspected_sources "${drive_lower}${path}") |
| 665 | else () |
| 666 | list(APPEND introspected_sources "${f}") |
| 667 | endif () |
| 668 | else () |
| 669 | list(APPEND introspected_sources "${f}") |
| 670 | endif () |
| 671 | endforeach () |
| 672 | |
Chun-wei Fan | e9b8002 | 2018-03-12 16:23:57 +0800 | [diff] [blame] | 673 | file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/src/hb_gir_list) |
| 674 | foreach (s ${introspected_sources}) |
| 675 | file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/src/hb_gir_list "${s}\n") |
| 676 | endforeach () |
| 677 | |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 678 | # Finally, build the introspection files... |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 679 | add_custom_command( |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 680 | TARGET harfbuzz-gobject |
| 681 | POST_BUILD |
| 682 | COMMAND ${G_IR_SCANNER_CMD} |
| 683 | --warn-all --no-libtool --verbose |
| 684 | -n hb |
| 685 | --namespace=HarfBuzz |
| 686 | --nsversion=0.0 |
| 687 | --identifier-prefix=hb_ |
| 688 | --include GObject-2.0 |
| 689 | --pkg-export=harfbuzz |
| 690 | --cflags-begin |
| 691 | -I${PROJECT_SOURCE_DIR}/src |
| 692 | -I${PROJECT_BINARY_DIR}/src |
| 693 | ${hb_includedir_cflags} |
| 694 | ${hb_defines_cflags} |
| 695 | -DHB_H |
| 696 | -DHB_H_IN |
| 697 | -DHB_OT_H |
| 698 | -DHB_OT_H_IN |
Chun-wei Fan | 09b16c5 | 2018-12-12 01:23:53 +0800 | [diff] [blame] | 699 | -DHB_AAT_H |
| 700 | -DHB_AAT_H_IN |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 701 | -DHB_GOBJECT_H |
| 702 | -DHB_GOBJECT_H_IN |
| 703 | -DHB_EXTERN= |
| 704 | --cflags-end |
| 705 | --library=harfbuzz-gobject |
| 706 | --library=harfbuzz |
| 707 | -L${hb_libpath} |
| 708 | ${extra_libs} |
Chun-wei Fan | e9b8002 | 2018-03-12 16:23:57 +0800 | [diff] [blame] | 709 | --filelist ${CMAKE_CURRENT_BINARY_DIR}/src/hb_gir_list |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 710 | -o ${hb_libpath}/HarfBuzz-0.0.gir |
Chun-wei Fan | e9b8002 | 2018-03-12 16:23:57 +0800 | [diff] [blame] | 711 | DEPENDS harfbuzz-gobject harfbuzz ${CMAKE_CURRENT_BINARY_DIR}/src/hb_gir_list |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 712 | ) |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 713 | |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 714 | add_custom_command( |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 715 | TARGET harfbuzz-gobject |
| 716 | POST_BUILD |
| 717 | COMMAND "${G_IR_COMPILER}" |
| 718 | --verbose --debug |
| 719 | --includedir ${CMAKE_CURRENT_BINARY_DIR} |
| 720 | ${hb_libpath}/HarfBuzz-0.0.gir |
| 721 | -o ${hb_libpath}/HarfBuzz-0.0.typelib |
| 722 | DEPENDS ${hb_libpath}/HarfBuzz-0.0.gir harfbuzz-gobject |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 723 | ) |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 724 | endif () |
| 725 | |
Ebrahim Byagowi | 5ed26fc | 2018-01-04 10:11:34 +0330 | [diff] [blame] | 726 | |
Ebrahim Byagowi | 1527369 | 2017-05-13 21:32:56 +0430 | [diff] [blame] | 727 | ## Additional framework build configs |
| 728 | if (BUILD_FRAMEWORK) |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 729 | set (CMAKE_MACOSX_RPATH ON) |
Ebrahim Byagowi | 1527369 | 2017-05-13 21:32:56 +0430 | [diff] [blame] | 730 | set_target_properties(harfbuzz PROPERTIES |
| 731 | FRAMEWORK TRUE |
| 732 | PUBLIC_HEADER "${project_headers}" |
| 733 | XCODE_ATTRIBUTE_INSTALL_PATH "@rpath" |
| 734 | ) |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 735 | set (MACOSX_FRAMEWORK_IDENTIFIER "harfbuzz") |
| 736 | set (MACOSX_FRAMEWORK_SHORT_VERSION_STRING "${HB_VERSION}") |
| 737 | set (MACOSX_FRAMEWORK_BUNDLE_VERSION "${HB_VERSION}") |
Ebrahim Byagowi | 1527369 | 2017-05-13 21:32:56 +0430 | [diff] [blame] | 738 | endif () |
| 739 | |
| 740 | |
Ebrahim Byagowi | bf50dda | 2017-05-04 20:31:42 +0430 | [diff] [blame] | 741 | ## Additional harfbuzz build artifacts |
ebraminio | 3a8bc57 | 2017-04-11 21:32:14 +0430 | [diff] [blame] | 742 | if (HB_BUILD_UTILS) |
| 743 | # https://github.com/WebKit/webkit/blob/master/Source/cmake/FindCairo.cmake |
| 744 | find_package(PkgConfig) |
| 745 | pkg_check_modules(PC_CAIRO QUIET cairo) |
| 746 | |
| 747 | find_path(CAIRO_INCLUDE_DIRS NAMES cairo.h HINTS ${PC_CAIRO_INCLUDEDIR} ${PC_CAIRO_INCLUDE_DIRS} PATH_SUFFIXES cairo) |
| 748 | find_library(CAIRO_LIBRARIESNAMES cairo HINTS ${PC_CAIRO_LIBDIR} ${PC_CAIRO_LIBRARY_DIRS}) |
| 749 | |
| 750 | add_definitions("-DPACKAGE_NAME=\"HarfBuzz\"") |
| 751 | add_definitions("-DPACKAGE_VERSION=\"${HB_VERSION}\"") |
| 752 | include_directories(${CAIRO_INCLUDE_DIRS}) |
| 753 | |
| 754 | add_executable(hb-view ${HB_VIEW_sources}) |
| 755 | target_link_libraries(hb-view harfbuzz ${CAIRO_LIBRARIESNAMES}) |
| 756 | |
| 757 | add_executable(hb-shape ${HB_SHAPE_sources}) |
| 758 | target_link_libraries(hb-shape harfbuzz) |
| 759 | |
Garret Rieger | f83a43b | 2018-02-02 17:50:45 -0800 | [diff] [blame] | 760 | add_executable(hb-subset ${HB_SUBSET_CLI_sources}) |
Garret Rieger | 0f3c756 | 2018-02-08 14:59:32 -0800 | [diff] [blame] | 761 | target_link_libraries(hb-subset harfbuzz harfbuzz-subset) |
Garret Rieger | f83a43b | 2018-02-02 17:50:45 -0800 | [diff] [blame] | 762 | |
ebraminio | 3a8bc57 | 2017-04-11 21:32:14 +0430 | [diff] [blame] | 763 | add_executable(hb-ot-shape-closure ${HB_OT_SHAPE_CLOSURE_sources}) |
| 764 | target_link_libraries(hb-ot-shape-closure harfbuzz) |
ebraminio | 6966413 | 2017-04-19 22:59:46 +0430 | [diff] [blame] | 765 | |
Ebrahim Byagowi | bf50dda | 2017-05-04 20:31:42 +0430 | [diff] [blame] | 766 | mark_as_advanced(CAIRO_INCLUDE_DIRS CAIRO_LIBRARIESNAMES) |
ebraminio | 3a8bc57 | 2017-04-11 21:32:14 +0430 | [diff] [blame] | 767 | endif () |
| 768 | |
Ebrahim Byagowi | bf50dda | 2017-05-04 20:31:42 +0430 | [diff] [blame] | 769 | |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 770 | ## Install |
Ebrahim Byagowi | 71e0ed9 | 2018-01-10 15:45:12 +0330 | [diff] [blame] | 771 | include (GNUInstallDirs) |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 772 | |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 773 | if (NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL) |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 774 | install(FILES ${project_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/harfbuzz) |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 775 | if (HB_HAVE_GOBJECT) |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 776 | install(FILES ${hb_gobject_headers} ${hb_gobject_gen_headers} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/harfbuzz) |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 777 | endif () |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 778 | endif () |
| 779 | |
| 780 | if (NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL) |
| 781 | install(TARGETS harfbuzz |
Simon Hausmann | 6a97d0f | 2018-09-17 10:33:34 +0200 | [diff] [blame] | 782 | EXPORT harfbuzzConfig |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 783 | ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} |
| 784 | LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} |
| 785 | RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} |
Ebrahim Byagowi | 1527369 | 2017-05-13 21:32:56 +0430 | [diff] [blame] | 786 | FRAMEWORK DESTINATION Library/Frameworks |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 787 | ) |
Simon Hausmann | 6a97d0f | 2018-09-17 10:33:34 +0200 | [diff] [blame] | 788 | install(EXPORT harfbuzzConfig |
| 789 | NAMESPACE harfbuzz:: |
| 790 | DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/harfbuzz |
| 791 | ) |
Chun-wei Fan | 162575f | 2017-10-18 22:27:28 +0800 | [diff] [blame] | 792 | if (HB_BUILD_UTILS) |
Chun-wei Fan | 8e4ad1d | 2018-07-25 18:12:34 +0800 | [diff] [blame] | 793 | if (WIN32 AND BUILD_SHARED_LIBS) |
| 794 | install(TARGETS harfbuzz-subset |
| 795 | RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} |
| 796 | ) |
| 797 | endif () |
Chun-wei Fan | 162575f | 2017-10-18 22:27:28 +0800 | [diff] [blame] | 798 | install(TARGETS hb-view |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 799 | RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} |
Chun-wei Fan | 162575f | 2017-10-18 22:27:28 +0800 | [diff] [blame] | 800 | ) |
Chun-wei Fan | 7c43ada | 2018-03-12 16:43:53 +0800 | [diff] [blame] | 801 | install(TARGETS hb-subset |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 802 | RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} |
Chun-wei Fan | 162575f | 2017-10-18 22:27:28 +0800 | [diff] [blame] | 803 | ) |
| 804 | |
| 805 | install(TARGETS hb-shape |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 806 | RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} |
Chun-wei Fan | 162575f | 2017-10-18 22:27:28 +0800 | [diff] [blame] | 807 | ) |
| 808 | |
| 809 | install(TARGETS hb-ot-shape-closure |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 810 | RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} |
Chun-wei Fan | 162575f | 2017-10-18 22:27:28 +0800 | [diff] [blame] | 811 | ) |
| 812 | endif () |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 813 | if (HB_HAVE_GOBJECT) |
| 814 | install(TARGETS harfbuzz-gobject |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 815 | ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} |
| 816 | LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} |
| 817 | RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 818 | ) |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 819 | if (HB_HAVE_INTROSPECTION) |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 820 | if ("${CMAKE_GENERATOR}" MATCHES "Visual Studio*") |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 821 | set (hb_libpath "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>") |
| 822 | else () |
| 823 | set (hb_libpath "$<TARGET_FILE_DIR:harfbuzz-gobject>") |
| 824 | endif () |
| 825 | |
| 826 | install(FILES "${hb_libpath}/HarfBuzz-0.0.gir" |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 827 | DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/gir-1.0 |
Ebrahim Byagowi | 5ed26fc | 2018-01-04 10:11:34 +0330 | [diff] [blame] | 828 | ) |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 829 | |
| 830 | install(FILES "${hb_libpath}/HarfBuzz-0.0.typelib" |
Ebrahim Byagowi | 24b30fa | 2017-12-25 22:01:28 +0330 | [diff] [blame] | 831 | DESTINATION ${CMAKE_INSTALL_LIBDIR}/girepository-1.0 |
| 832 | ) |
Chun-wei Fan | 41b1825 | 2017-10-19 18:36:32 +0800 | [diff] [blame] | 833 | endif () |
Chun-wei Fan | 53db221 | 2017-10-18 15:43:57 +0800 | [diff] [blame] | 834 | endif () |
ebraminio | 7d64c0e | 2017-04-04 15:03:51 +0430 | [diff] [blame] | 835 | endif () |
Khaled Hosny | c860955 | 2017-12-06 00:43:28 +0200 | [diff] [blame] | 836 | |
Bruce Mitchener | 4f80078 | 2018-01-04 18:37:35 +0700 | [diff] [blame] | 837 | if (UNIX AND CMAKE_GENERATOR STREQUAL "Ninja") |
| 838 | if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") |
Ebrahim Byagowi | 29d9012 | 2018-01-30 10:01:46 +0330 | [diff] [blame] | 839 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fcolor-diagnostics") |
| 840 | set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fcolor-diagnostics") |
Bruce Mitchener | 4f80078 | 2018-01-04 18:37:35 +0700 | [diff] [blame] | 841 | endif () |
| 842 | if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") |
Ebrahim Byagowi | 29d9012 | 2018-01-30 10:01:46 +0330 | [diff] [blame] | 843 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color") |
| 844 | set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdiagnostics-color") |
Bruce Mitchener | 4f80078 | 2018-01-04 18:37:35 +0700 | [diff] [blame] | 845 | endif () |
| 846 | endif () |
Ebrahim Byagowi | 5ed26fc | 2018-01-04 10:11:34 +0330 | [diff] [blame] | 847 | |
Ebrahim Byagowi | 72bec1c | 2018-01-05 12:42:20 +0330 | [diff] [blame] | 848 | |
Ebrahim Byagowi | 1b7bfb5 | 2018-10-30 10:19:40 +0330 | [diff] [blame] | 849 | if (HB_BUILD_TESTS) |
Ebrahim Byagowi | 187df7d | 2018-10-10 17:12:52 +0330 | [diff] [blame] | 850 | ## src/ executables |
| 851 | foreach (prog main test test-would-substitute test-size-params test-buffer-serialize hb-ot-tag test-unicode-ranges) |
| 852 | set (prog_name ${prog}) |
| 853 | if (${prog_name} STREQUAL "test") |
| 854 | # test can not be used as a valid executable name on cmake, lets special case it |
| 855 | set (prog_name test-test) |
| 856 | endif () |
| 857 | add_executable(${prog_name} ${PROJECT_SOURCE_DIR}/src/${prog}.cc) |
| 858 | target_link_libraries(${prog_name} harfbuzz ${THIRD_PARTY_LIBS}) |
| 859 | endforeach () |
| 860 | set_target_properties(hb-ot-tag PROPERTIES COMPILE_FLAGS "-DMAIN") |
Ebrahim Byagowi | 29d9012 | 2018-01-30 10:01:46 +0330 | [diff] [blame] | 861 | |
Ebrahim Byagowi | 187df7d | 2018-10-10 17:12:52 +0330 | [diff] [blame] | 862 | ## Tests |
| 863 | if (UNIX OR MINGW) |
| 864 | if (BUILD_SHARED_LIBS) |
| 865 | # generate harfbuzz.def after build completion |
| 866 | add_custom_command(TARGET harfbuzz POST_BUILD |
| 867 | COMMAND "${PYTHON_EXECUTABLE}" ${PROJECT_SOURCE_DIR}/src/gen-def.py ${PROJECT_BINARY_DIR}/harfbuzz.def ${project_headers} |
| 868 | WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/src) |
Ebrahim Byagowi | c97a7ec | 2018-01-16 14:18:09 +0330 | [diff] [blame] | 869 | |
Ebrahim Byagowi | 187df7d | 2018-10-10 17:12:52 +0330 | [diff] [blame] | 870 | add_test(NAME check-static-inits.sh |
| 871 | COMMAND ${PROJECT_SOURCE_DIR}/src/check-static-inits.sh |
| 872 | WORKING_DIRECTORY ${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/harfbuzz.dir/src # ugly hack |
| 873 | ) |
| 874 | add_test(NAME check-libstdc++.sh COMMAND ${PROJECT_SOURCE_DIR}/src/check-libstdc++.sh) |
| 875 | add_test(NAME check-symbols.sh COMMAND ${PROJECT_SOURCE_DIR}/src/check-symbols.sh) |
Ebrahim Byagowi | 8b60e7c | 2018-01-22 18:37:26 +0330 | [diff] [blame] | 876 | |
Ebrahim Byagowi | 187df7d | 2018-10-10 17:12:52 +0330 | [diff] [blame] | 877 | set_tests_properties( |
| 878 | check-static-inits.sh check-libstdc++.sh check-symbols.sh |
| 879 | PROPERTIES |
| 880 | ENVIRONMENT "libs=.;srcdir=${PROJECT_SOURCE_DIR}/src" |
| 881 | SKIP_RETURN_CODE 77) |
| 882 | endif () |
| 883 | |
| 884 | add_test(NAME check-c-linkage-decls.sh COMMAND ./check-c-linkage-decls.sh) |
| 885 | add_test(NAME check-header-guards.sh COMMAND ./check-header-guards.sh) |
| 886 | add_test(NAME check-externs.sh COMMAND ./check-externs.sh) |
| 887 | add_test(NAME check-includes.sh COMMAND ./check-includes.sh) |
Ebrahim Byagowi | a9b650d | 2018-02-12 15:10:13 +0330 | [diff] [blame] | 888 | set_tests_properties( |
Ebrahim Byagowi | 187df7d | 2018-10-10 17:12:52 +0330 | [diff] [blame] | 889 | check-c-linkage-decls.sh check-header-guards.sh check-externs.sh check-includes.sh |
Ebrahim Byagowi | a9b650d | 2018-02-12 15:10:13 +0330 | [diff] [blame] | 890 | PROPERTIES |
Ebrahim Byagowi | 187df7d | 2018-10-10 17:12:52 +0330 | [diff] [blame] | 891 | WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/src |
Ebrahim Byagowi | a9b650d | 2018-02-12 15:10:13 +0330 | [diff] [blame] | 892 | SKIP_RETURN_CODE 77) |
Ebrahim Byagowi | 5ed26fc | 2018-01-04 10:11:34 +0330 | [diff] [blame] | 893 | endif () |
| 894 | |
Ebrahim Byagowi | 187df7d | 2018-10-10 17:12:52 +0330 | [diff] [blame] | 895 | # Needs to come last so that variables defined above are passed to |
| 896 | # subdirectories. |
| 897 | add_subdirectory(test) |
Ebrahim Byagowi | 5ed26fc | 2018-01-04 10:11:34 +0330 | [diff] [blame] | 898 | endif () |