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