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