1pango_sources = [ 2 'break.c', 3 'ellipsize.c', 4 'fonts.c', 5 'glyphstring.c', 6 'modules.c', 7 'pango-attributes.c', 8 'pango-bidi-type.c', 9 'pango-color.c', 10 'pango-context.c', 11 'pango-coverage.c', 12 'pango-emoji.c', 13 'pango-engine.c', 14 'pango-fontmap.c', 15 'pango-fontset.c', 16 'pango-glyph-item.c', 17 'pango-gravity.c', 18 'pango-item.c', 19 'pango-language.c', 20 'pango-layout.c', 21 'pango-markup.c', 22 'pango-matrix.c', 23 'pango-renderer.c', 24 'pango-script.c', 25 'pango-tabs.c', 26 'pango-utils.c', 27 'reorder-items.c', 28 'shape.c', 29 'pangofc-shape.c', 30] 31 32pango_headers = [ 33 'pango.h', 34 'pango-attributes.h', 35 'pango-bidi-type.h', 36 'pango-break.h', 37 'pango-context.h', 38 'pango-coverage.h', 39 'pango-direction.h', 40 'pango-engine.h', 41 'pango-font.h', 42 'pango-fontmap.h', 43 'pango-fontset.h', 44 'pango-glyph.h', 45 'pango-glyph-item.h', 46 'pango-gravity.h', 47 'pango-item.h', 48 'pango-language.h', 49 'pango-layout.h', 50 'pango-matrix.h', 51 'pango-modules.h', 52 'pango-renderer.h', 53 'pango-script.h', 54 'pango-tabs.h', 55 'pango-types.h', 56 'pango-utils.h', 57] 58 59pango_installed_headers = pango_headers + [ 'pango-version-macros.h' ] 60 61install_headers(pango_installed_headers, subdir: pango_api_path) 62 63# Features header 64pango_features_conf = configuration_data() 65pango_features_conf.set('PANGO_VERSION_MAJOR', pango_major_version) 66pango_features_conf.set('PANGO_VERSION_MINOR', pango_minor_version) 67pango_features_conf.set('PANGO_VERSION_MICRO', pango_micro_version) 68pango_features_conf.set('PANGO_API_VERSION', pango_api_version) 69pango_features_conf.set('PANGO_CURRENT_MINUS_AGE', '0') 70 71pango_features_h = configure_file( 72 input: 'pango-features.h.meson', 73 output: 'pango-features.h', 74 configuration: pango_features_conf, 75 install: true, 76 install_dir: join_paths(pango_includedir, pango_api_path), 77) 78 79# Enumerations for GType 80pango_enums = gnome.mkenums( 81 'pango-enum-types', 82 sources: pango_headers, 83 c_template: 'pango-enum-types.c.template', 84 h_template: 'pango-enum-types.h.template', 85 install_dir: join_paths(pango_includedir, pango_api_path), 86 install_header: true, 87) 88pango_enum_h = pango_enums[1] 89 90if host_system == 'windows' 91 pango_rc = configure_file( 92 input: 'pango.rc.in', 93 output: 'pango.rc', 94 configuration: pango_features_conf, 95 ) 96 pango_res = import('windows').compile_resources(pango_rc) 97 pango_sources += pango_res 98endif 99 100pango_cflags = [ 101 '-DG_LOG_DOMAIN="Pango"', 102 '-DG_LOG_USE_STRUCTURED=1', 103 '-DPANGO_COMPILATION', 104 '-DSYSCONFDIR="@0@"'.format(pango_sysconfdir), 105 '-DLIBDIR="@0@"'.format(pango_libdir), 106] 107 108pango_inc = include_directories('.') 109 110libpango = library( 111 pango_api_name, 112 sources: pango_sources + pango_enums, 113 version: pango_libversion, 114 soversion: pango_soversion, 115 darwin_versions : pango_osxversion, 116 install: true, 117 dependencies: pango_deps, 118 include_directories: [ root_inc, pango_inc ], 119 c_args: common_cflags + pango_debug_cflags + pango_cflags, 120 link_args: common_ldflags, 121) 122 123pango_dep_sources = [pango_enum_h] 124 125gir = find_program('g-ir-scanner', required : get_option('introspection')) 126build_gir = gir.found() and (not meson.is_cross_build() or get_option('introspection').enabled()) 127 128if build_gir 129 gir_args = [ 130 '--quiet', 131 ] 132 harfbuzz_gobject_dep = dependency('harfbuzz-gobject', version: harfbuzz_req_version, required: false) 133 134 if not harfbuzz_gobject_dep.found() and cc.get_argument_syntax() == 'msvc' 135 # The CMake build files for HarfBuzz (which is used for MSVC builds) do not 136 # generate pkg-config files, so look for harfbuzz-gobject.lib 137 harfbuzz_gobject_dep = cc.find_library('harfbuzz-gobject', has_headers: ['hb-gobject.h'], required: false) 138 endif 139 140 if not harfbuzz_gobject_dep.found() 141 harfbuzz_gobject_dep = dependency('harfbuzz-gobject', version: harfbuzz_req_version, required: false, 142 fallback: ['harfbuzz', 'libharfbuzz_gobject_dep']) 143 endif 144 145 if harfbuzz_gobject_dep.found() 146 pango_deps += harfbuzz_gobject_dep 147 endif 148 pango_gir = gnome.generate_gir( 149 libpango, 150 sources: pango_sources + pango_headers + [ pango_enum_h, pango_features_h ], 151 namespace: 'Pango', 152 nsversion: pango_api_version, 153 identifier_prefix: 'Pango', 154 symbol_prefix: 'pango', 155 export_packages: 'pango', 156 dependencies: pango_deps, 157 includes: [ 'HarfBuzz-0.0', 'GObject-2.0', 'cairo-1.0', ], 158 header: 'pango/pango.h', 159 install: true, 160 extra_args: gir_args, 161 ) 162 pango_gir_dep = declare_dependency(sources: pango_gir) 163 pango_dep_sources += pango_gir 164endif 165 166libpango_dep = declare_dependency( 167 link_with: libpango, 168 include_directories: pango_inc, 169 dependencies: pango_deps, 170 sources: pango_dep_sources, 171) 172meson.override_dependency('pango', libpango_dep) 173 174pango_pkg_requires = ['gobject-2.0'] 175if harfbuzz_dep.type_name() == 'pkgconfig' 176 pango_pkg_requires += 'harfbuzz' 177endif 178 179pkgconfig.generate(libpango, 180 name: 'Pango', 181 description: 'Internationalized text handling', 182 requires: pango_pkg_requires, 183 filebase: 'pango', 184 subdirs: pango_api_name, 185) 186 187# FreeType 188if build_pangoft2 189 pangofc_headers = [ 190 'pangofc-font.h', 191 'pangofc-fontmap.h', 192 'pangofc-decoder.h', 193 ] 194 195 pangofc_public_sources = [ 196 'pangofc-font.c', 197 'pangofc-fontmap.c', 198 'pangofc-decoder.c', 199 'pango-trace.c', 200 ] 201 202 pangoot_headers = [ 203 'pango-ot.h', 204 ] 205 206 pangoot_public_sources = [ 207 'pango-ot-buffer.c', 208 'pango-ot-info.c', 209 'pango-ot-ruleset.c', 210 'pango-ot-tag.c', 211 ] 212 213 pangoft2_headers = [ 214 'pangoft2.h', 215 ] 216 217 pangoft2_public_sources = [ 218 'pangoft2-fontmap.c', 219 'pangoft2-render.c', 220 'pangoft2.c', 221 ] 222 223 pangoft2_sources = pangofc_public_sources + pangoot_public_sources + pangoft2_public_sources 224 225 if host_system == 'windows' 226 pangoft2_rc = configure_file( 227 input: 'pangoft2.rc.in', 228 output: 'pangoft2.rc', 229 configuration: pango_features_conf, 230 ) 231 pangoft2_res = import('windows').compile_resources(pangoft2_rc) 232 pangoft2_sources += pangoft2_res 233 endif 234 235 install_headers(pangoft2_headers + pangofc_headers + pangoot_headers, subdir: pango_api_path) 236 237 libpangoft2 = library( 238 'pangoft2-@0@'.format(pango_api_version), 239 sources: pangoft2_sources, 240 version: pango_libversion, 241 soversion: pango_soversion, 242 darwin_versions : pango_osxversion, 243 install: true, 244 dependencies: pango_deps + [ libpango_dep ], 245 include_directories: [ root_inc, pango_inc ], 246 c_args: common_cflags + pango_debug_cflags + pango_cflags + [ 247 '-DPANGO_DISABLE_DEPRECATION_WARNINGS', 248 ], 249 link_args: common_ldflags, 250 ) 251 252 pangoft2_dep_sources = [] 253 254 if build_gir 255 pangofc_gir = gnome.generate_gir( 256 libpangoft2, 257 sources: pangofc_headers + pangofc_public_sources, 258 dependencies: [ libpango_dep, pango_gir_dep ], 259 namespace: 'PangoFc', 260 nsversion: pango_api_version, 261 identifier_prefix: 'PangoFc', 262 symbol_prefix: 'pango_fc', 263 export_packages: 'pangofc', 264 includes: [ pango_gir[0], 'fontconfig-2.0', ], 265 header: 'pango/pangofc-fontmap.h', 266 install: true, 267 extra_args: gir_args, 268 ) 269 pangofc_gir_dep = declare_dependency(sources: pangofc_gir) 270 pangoft2_dep_sources += pangofc_gir 271 272 # Deprecated API, still needed for PangoXft 273 pangoot_gir = gnome.generate_gir( 274 libpangoft2, 275 sources: pangoot_headers + pangoot_public_sources, 276 dependencies: [ libpango_dep, pango_gir_dep, pangofc_gir_dep ], 277 namespace: 'PangoOT', 278 nsversion: pango_api_version, 279 identifier_prefix: 'PangoOT', 280 symbol_prefix: 'pango_ot', 281 export_packages: 'pangoot', 282 includes: [ pangofc_gir[0], 'freetype2-2.0', ], 283 header: 'pango/pango-ot.h', 284 install: true, 285 extra_args: gir_args, 286 ) 287 pangoot_gir_dep = declare_dependency(sources: pangoot_gir) 288 pangoft2_dep_sources += pangoot_gir 289 290 pangoft2_gir = gnome.generate_gir( 291 libpangoft2, 292 sources: pangoft2_headers + pangoft2_public_sources, 293 dependencies: [ libpango_dep, pango_gir_dep, pangofc_gir_dep, pangoot_gir_dep ], 294 namespace: 'PangoFT2', 295 nsversion: pango_api_version, 296 identifier_prefix: 'PangoFT2', 297 symbol_prefix: 'pango_ft2', 298 export_packages: 'pangoft2', 299 includes: [ pangofc_gir[0], 'freetype2-2.0', ], 300 header: 'pango/pangoft2.h', 301 install: true, 302 extra_args: gir_args, 303 ) 304 pangoft2_gir_dep = declare_dependency(sources: pangoft2_gir) 305 pangoft2_dep_sources += pangoft2_gir 306 endif 307 308 libpangoft2_dep = declare_dependency( 309 link_with: libpangoft2, 310 include_directories: pango_inc, 311 dependencies: pango_deps + [ libpango_dep ], 312 sources: pangoft2_dep_sources, 313 ) 314 meson.override_dependency('pangoft2', libpangoft2_dep) 315 316 pkgconfig.generate(libpangoft2, 317 name: 'Pango FT2 and Pango Fc', 318 description: 'Freetype 2.0 and fontconfig font support for Pango', 319 filebase: 'pangoft2', 320 subdirs: pango_api_name, 321 requires: [ 'pango', freetype2_pc, fontconfig_pc ], 322 ) 323 324 # Since we split the introspection data, we also need a split pkg-config 325 # file for Vala 326 pkgconfig.generate( 327 name: 'Pango OT', 328 description: 'OpenType font support for Pango (deprecated)', 329 filebase: 'pangoot', 330 subdirs: pango_api_name, 331 requires: [ 'pangoft2' ], 332 ) 333 334 pkgconfig.generate( 335 name: 'Pango FC', 336 description: 'Fontconfig support for Pango', 337 filebase: 'pangofc', 338 subdirs: pango_api_name, 339 requires: [ 'pangoft2' ], 340 ) 341else 342 # For usage as a subproject 343 libpangoft2_dep = dependency('', required : false) 344 # Needed for making ft2 no-op while generating pangoxft_gir below 345 pangoft2_gir_dep = dependency('', required : false) 346 pangoft2_gir = [[]] 347endif 348 349# Xft 350if xft_dep.found() and fontconfig_dep.found() 351 pangoxft_headers = [ 352 'pangoxft.h', 353 'pangoxft-render.h', 354 ] 355 356 pangoxft_sources = [ 357 'pangoxft-font.c', 358 'pangoxft-fontmap.c', 359 'pangoxft-render.c', 360 ] 361 362 install_headers(pangoxft_headers, subdir: pango_api_path) 363 364 libpangoxft = library( 365 'pangoxft-@0@'.format(pango_api_version), 366 sources: pangoxft_sources, 367 version: pango_libversion, 368 soversion: pango_soversion, 369 darwin_versions : pango_osxversion, 370 install: true, 371 dependencies: pango_deps + [ libpango_dep, libpangoft2_dep ], 372 include_directories: [ root_inc, pango_inc ], 373 c_args: common_cflags + pango_debug_cflags + pango_cflags + [ 374 '-DPANGO_DISABLE_DEPRECATION_WARNINGS', 375 ], 376 link_args: common_ldflags, 377 ) 378 pangoxft_dep_sources = [] 379 380 if build_gir 381 pangoxft_gir = gnome.generate_gir( 382 libpangoxft, 383 sources: pangoxft_headers + pangoxft_sources, 384 dependencies: [ libpango_dep, libpangoft2_dep, pango_gir_dep, pangoot_gir_dep, pangoft2_gir_dep ], 385 namespace: 'PangoXft', 386 nsversion: pango_api_version, 387 identifier_prefix: 'PangoXft', 388 symbol_prefix: 'pango_xft', 389 export_packages: 'pangoxft', 390 includes: [ pango_gir[0], pangoot_gir[0], pangoft2_gir[0], 'GObject-2.0', 'xft-2.0', 'xlib-2.0' ], 391 header: 'pango/pangoxft.h', 392 install: true, 393 extra_args: gir_args, 394 ) 395 pangoxft_dep_sources += pangoxft_gir 396 endif 397 398 libpangoxft_dep = declare_dependency( 399 link_with: libpangoxft, 400 include_directories: root_inc, 401 dependencies: pango_deps + [ libpango_dep, libpangoft2_dep ], 402 sources: pangoxft_dep_sources, 403 ) 404 meson.override_dependency('pangoxft', libpangoxft_dep) 405 406 pkgconfig.generate(libpangoxft, 407 name: 'Pango Xft', 408 description: 'Xft font support for Pango', 409 filebase: 'pangoxft', 410 subdirs: pango_api_name, 411 requires: [ 'pangoft2', 'xft' ], 412 ) 413else 414 # For usage as a subproject 415 libpangoxft_dep = dependency('', required: false) 416endif 417 418# Win32 419if host_system == 'windows' 420 pangowin32_headers = [ 421 'pangowin32.h', 422 ] 423 424 pangowin32_sources = [ 425 'pangowin32.c', 426 'pangowin32-fontcache.c', 427 'pangowin32-fontmap.c', 428 ] 429 430 pangowin32_deps = pango_deps + [ 431 libpango_dep, 432 cc.find_library('gdi32'), 433 ] 434 435 pangowin32_rc = configure_file( 436 input: 'pangowin32.rc.in', 437 output: 'pangowin32.rc', 438 configuration: pango_features_conf, 439 ) 440 pangowin32_res = import('windows').compile_resources(pangowin32_rc) 441 pangowin32_sources += pangowin32_res 442 443 install_headers(pangowin32_headers, subdir: pango_api_path) 444 445 libpangowin32 = library( 446 'pangowin32-@0@'.format(pango_api_version), 447 sources: pangowin32_sources, 448 version: pango_libversion, 449 soversion: pango_soversion, 450 install: true, 451 dependencies: pangowin32_deps, 452 include_directories: [ root_inc, pango_inc ], 453 c_args: common_cflags + pango_debug_cflags + pango_cflags + [ 454 '-DPANGO_DISABLE_DEPRECATION_WARNINGS', 455 ], 456 link_args: common_ldflags, 457 ) 458 459 libpangowin32_dep = declare_dependency( 460 link_with: libpangowin32, 461 include_directories: root_inc, 462 dependencies: pango_deps + [ libpango_dep ], 463 ) 464 meson.override_dependency('pangowin32', libpangowin32_dep) 465 466 pkgconfig.generate(libpangowin32, 467 name: 'Pango Win32', 468 description: 'Win32 GDI font support for Pango', 469 filebase: 'pangowin32', 470 subdirs: pango_api_name, 471 requires: 'pango', 472 ) 473else 474 # For usage as a subproject 475 libpangowin32_dep = dependency('', required: false) 476endif 477 478# Cairo 479if cairo_dep.found() 480 pangocairo_headers = [ 481 'pangocairo.h', 482 ] 483 484 pangocairo_sources = [ 485 'pangocairo-context.c', 486 'pangocairo-font.c', 487 'pangocairo-fontmap.c', 488 'pangocairo-render.c', 489 ] 490 491 pangocairo_deps = pango_deps + [ libpango_dep ] 492 493 if pango_font_backends.contains('freetype') 494 pangocairo_sources += [ 495 'pangocairo-fcfont.c', 496 'pangocairo-fcfontmap.c', 497 ] 498 499 pangocairo_deps += libpangoft2_dep 500 endif 501 502 if host_system == 'windows' and pango_font_backends.contains('win32') 503 pangocairo_sources += [ 504 'pangocairo-win32font.c', 505 'pangocairo-win32fontmap.c', 506 ] 507 508 pangocairo_rc = configure_file( 509 input: 'pangocairo.rc.in', 510 output: 'pangocairo.rc', 511 configuration: pango_features_conf, 512 ) 513 pangocairo_res = import('windows').compile_resources(pangocairo_rc) 514 pangocairo_sources += pangocairo_res 515 516 pangocairo_deps += cc.find_library('gdi32') 517 pangocairo_deps += libpangowin32_dep 518 endif 519 520 if host_system == 'darwin' and pango_font_backends.contains('quartz') 521 pangocairo_sources += [ 522 'pangocoretext.c', 523 'pangocoretext-fontmap.c', 524 'pangocairo-coretextfont.c', 525 'pangocairo-coretextfontmap.c', 526 ] 527 endif 528 529 install_headers(pangocairo_headers, subdir: pango_api_path) 530 531 libpangocairo = library( 532 'pangocairo-@0@'.format(pango_api_version), 533 sources: pangocairo_sources, 534 version: pango_libversion, 535 soversion: pango_soversion, 536 darwin_versions : pango_osxversion, 537 install: true, 538 dependencies: pango_deps + pangocairo_deps, 539 include_directories: [ root_inc, pango_inc ], 540 c_args: common_cflags + pango_debug_cflags + pango_cflags + [ 541 '-DPANGO_DISABLE_DEPRECATION_WARNINGS', 542 ], 543 link_args: common_ldflags 544 ) 545 pangocairo_dep_sources = [] 546 547 if build_gir 548 pangocairo_gir = gnome.generate_gir( 549 libpangocairo, 550 sources: pangocairo_headers + pangocairo_sources, 551 dependencies: [ pangocairo_deps, pango_gir_dep ], 552 namespace: 'PangoCairo', 553 nsversion: pango_api_version, 554 identifier_prefix: 'PangoCairo', 555 symbol_prefix: 'pango_cairo', 556 export_packages: 'pangocairo', 557 includes: [ pango_gir[0], 'GObject-2.0', 'cairo-1.0' ], 558 header: 'pango/pangocairo.h', 559 install: true, 560 extra_args: gir_args, 561 ) 562 pangocairo_dep_sources += pangocairo_gir 563 endif 564 565 libpangocairo_dep = declare_dependency( 566 link_with: libpangocairo, 567 include_directories: root_inc, 568 dependencies: pango_deps + [ libpango_dep ], 569 sources: pangocairo_dep_sources, 570 ) 571 meson.override_dependency('pangocairo', libpangocairo_dep) 572 573 # Create pangocairo.pc according to whether we found Cairo 574 # manually 575 if ['pkgconfig', 'internal'].contains(cairo_found_type) 576 pango_cairo_requires = [ 'pango', cairo_pc ] 577 else 578 pango_cairo_requires = [ 'pango' ] 579 endif 580 581 pkgconfig.generate(libpangocairo, 582 name: 'Pango Cairo', 583 description: 'Cairo rendering support for Pango', 584 filebase: 'pangocairo', 585 subdirs: pango_api_name, 586 requires: pango_cairo_requires, 587 ) 588else 589 # For usage as a subproject 590 libpangocairo_dep = dependency('', required: false) 591endif 592