pango_sources = [ 'break.c', 'ellipsize.c', 'fonts.c', 'glyphstring.c', 'itemize.c', 'modules.c', 'pango-attributes.c', 'pango-bidi-type.c', 'pango-color.c', 'pango-context.c', 'pango-coverage.c', 'pango-emoji.c', 'pango-engine.c', 'pango-fontmap.c', 'pango-fontset.c', 'pango-fontset-simple.c', 'pango-glyph-item.c', 'pango-gravity.c', 'pango-item.c', 'pango-language.c', 'pango-layout.c', 'pango-markup.c', 'pango-matrix.c', 'pango-renderer.c', 'pango-script.c', 'pango-tabs.c', 'pango-utils.c', 'reorder-items.c', 'shape.c', 'serializer.c', 'json/gtkjsonparser.c', 'json/gtkjsonprinter.c', ] pango_headers = [ 'pango.h', 'pango-attributes.h', 'pango-bidi-type.h', 'pango-break.h', 'pango-color.h', 'pango-context.h', 'pango-coverage.h', 'pango-direction.h', 'pango-engine.h', 'pango-font.h', 'pango-fontmap.h', 'pango-fontset.h', 'pango-fontset-simple.h', 'pango-glyph.h', 'pango-glyph-item.h', 'pango-gravity.h', 'pango-item.h', 'pango-language.h', 'pango-layout.h', 'pango-matrix.h', 'pango-markup.h', 'pango-modules.h', 'pango-renderer.h', 'pango-script.h', 'pango-tabs.h', 'pango-types.h', 'pango-utils.h', ] pango_installed_headers = pango_headers + [ 'pango-version-macros.h' ] install_headers(pango_installed_headers, subdir: pango_api_path) # Features header pango_features_conf = configuration_data() pango_features_conf.set('PANGO_VERSION_MAJOR', pango_major_version) pango_features_conf.set('PANGO_VERSION_MINOR', pango_minor_version) pango_features_conf.set('PANGO_VERSION_MICRO', pango_micro_version) pango_features_conf.set('PANGO_API_VERSION', pango_api_version) pango_features_conf.set('PANGO_CURRENT_MINUS_AGE', '0') pango_features_h = configure_file( input: 'pango-features.h.meson', output: 'pango-features.h', configuration: pango_features_conf, install: true, install_dir: join_paths(pango_includedir, pango_api_path), ) # Enumerations for GType pango_enums = gnome.mkenums( 'pango-enum-types', sources: pango_headers, c_template: 'pango-enum-types.c.template', h_template: 'pango-enum-types.h.template', install_dir: join_paths(pango_includedir, pango_api_path), install_header: true, ) pango_enum_h = pango_enums[1] if host_system == 'windows' pango_rc = configure_file( input: 'pango.rc.in', output: 'pango.rc', configuration: pango_features_conf, ) pango_res = import('windows').compile_resources(pango_rc) pango_sources += pango_res endif pango_cflags = [ '-DG_LOG_DOMAIN="Pango"', '-DG_LOG_USE_STRUCTURED=1', '-DPANGO_COMPILATION', '-DSYSCONFDIR="@0@"'.format(pango_sysconfdir), '-DLIBDIR="@0@"'.format(pango_libdir), ] pango_inc = include_directories('.') libpango = library( pango_api_name, sources: pango_sources + pango_enums, version: pango_libversion, soversion: pango_soversion, darwin_versions : pango_osxversion, install: true, dependencies: pango_deps, include_directories: [ root_inc, pango_inc ], c_args: common_cflags + pango_debug_cflags + pango_cflags, link_args: common_ldflags, ) pango_dep_sources = [pango_enum_h] gir = find_program('g-ir-scanner', required : get_option('introspection')) build_gir = gir.found() and (not meson.is_cross_build() or get_option('introspection').enabled()) if build_gir gir_args = [ '--quiet', ] harfbuzz_gobject_dep = dependency('harfbuzz-gobject', version: harfbuzz_req_version, required: false, fallback: ['harfbuzz', 'libharfbuzz_gobject_dep']) if harfbuzz_gobject_dep.found() pango_deps += harfbuzz_gobject_dep endif pango_gir = gnome.generate_gir( libpango, sources: pango_sources + pango_headers + [ pango_enum_h, pango_features_h ], namespace: 'Pango', nsversion: pango_api_version, identifier_prefix: 'Pango', symbol_prefix: 'pango', export_packages: 'pango', dependencies: pango_deps, includes: [ 'HarfBuzz-0.0', 'GObject-2.0', 'Gio-2.0', 'cairo-1.0' ], header: 'pango/pango.h', install: true, extra_args: gir_args, ) pango_gir_dep = declare_dependency(sources: pango_gir) pango_dep_sources += pango_gir endif libpango_dep = declare_dependency( link_with: libpango, include_directories: pango_inc, dependencies: pango_deps, sources: pango_dep_sources, ) meson.override_dependency('pango', libpango_dep) pango_pkg_requires = ['gobject-2.0'] if harfbuzz_dep.type_name() == 'pkgconfig' pango_pkg_requires += 'harfbuzz' endif pkgconfig.generate(libpango, name: 'Pango', description: 'Internationalized text handling', requires: pango_pkg_requires, filebase: 'pango', subdirs: pango_api_name, ) # FreeType if build_pangoft2 pangofc_headers = [ 'pangofc-font.h', 'pangofc-fontmap.h', 'pangofc-decoder.h', ] pangofc_public_sources = [ 'pangofc-font.c', 'pangofc-fontmap.c', 'pangofc-decoder.c', 'pango-trace.c', ] pangoot_headers = [ 'pango-ot.h', ] pangoot_public_sources = [ 'pango-ot-buffer.c', 'pango-ot-info.c', 'pango-ot-ruleset.c', 'pango-ot-tag.c', ] pangoft2_headers = [ 'pangoft2.h', ] pangoft2_public_sources = [ 'pangoft2-fontmap.c', 'pangoft2-render.c', 'pangoft2.c', ] pangoft2_sources = pangofc_public_sources + pangoot_public_sources + pangoft2_public_sources if host_system == 'windows' pangoft2_rc = configure_file( input: 'pangoft2.rc.in', output: 'pangoft2.rc', configuration: pango_features_conf, ) pangoft2_res = import('windows').compile_resources(pangoft2_rc) pangoft2_sources += pangoft2_res endif install_headers(pangoft2_headers + pangofc_headers + pangoot_headers, subdir: pango_api_path) libpangoft2 = library( 'pangoft2-@0@'.format(pango_api_version), sources: pangoft2_sources, version: pango_libversion, soversion: pango_soversion, darwin_versions : pango_osxversion, install: true, dependencies: pango_deps + [ libpango_dep ], include_directories: [ root_inc, pango_inc ], c_args: common_cflags + pango_debug_cflags + pango_cflags + [ '-DPANGO_DISABLE_DEPRECATION_WARNINGS', ], link_args: common_ldflags, ) pangoft2_dep_sources = [] if build_gir pangofc_gir = gnome.generate_gir( libpangoft2, sources: pangofc_headers + pangofc_public_sources, dependencies: [ libpango_dep, pango_gir_dep ], namespace: 'PangoFc', nsversion: pango_api_version, identifier_prefix: 'PangoFc', symbol_prefix: 'pango_fc', export_packages: 'pangofc', includes: [ pango_gir[0], 'fontconfig-2.0', ], header: 'pango/pangofc-fontmap.h', install: true, extra_args: gir_args, ) pangofc_gir_dep = declare_dependency(sources: pangofc_gir) pangoft2_dep_sources += pangofc_gir # Deprecated API, still needed for PangoXft pangoot_gir = gnome.generate_gir( libpangoft2, sources: pangoot_headers + pangoot_public_sources, dependencies: [ libpango_dep, pango_gir_dep, pangofc_gir_dep ], namespace: 'PangoOT', nsversion: pango_api_version, identifier_prefix: 'PangoOT', symbol_prefix: 'pango_ot', export_packages: 'pangoot', includes: [ pangofc_gir[0], 'freetype2-2.0', ], header: 'pango/pango-ot.h', install: true, extra_args: gir_args, ) pangoot_gir_dep = declare_dependency(sources: pangoot_gir) pangoft2_dep_sources += pangoot_gir pangoft2_gir = gnome.generate_gir( libpangoft2, sources: pangoft2_headers + pangoft2_public_sources, dependencies: [ libpango_dep, pango_gir_dep, pangofc_gir_dep, pangoot_gir_dep ], namespace: 'PangoFT2', nsversion: pango_api_version, identifier_prefix: 'PangoFT2', symbol_prefix: 'pango_ft2', export_packages: 'pangoft2', includes: [ pangofc_gir[0], 'freetype2-2.0', ], header: 'pango/pangoft2.h', install: true, extra_args: gir_args, ) pangoft2_gir_dep = declare_dependency(sources: pangoft2_gir) pangoft2_dep_sources += pangoft2_gir endif libpangoft2_dep = declare_dependency( link_with: libpangoft2, include_directories: pango_inc, dependencies: pango_deps + [ libpango_dep ], sources: pangoft2_dep_sources, ) meson.override_dependency('pangoft2', libpangoft2_dep) pkgconfig.generate(libpangoft2, name: 'Pango FT2 and Pango Fc', description: 'Freetype 2.0 and fontconfig font support for Pango', filebase: 'pangoft2', subdirs: pango_api_name, requires: [ 'pango', freetype2_pc, fontconfig_pc ], ) # Since we split the introspection data, we also need a split pkg-config # file for Vala pkgconfig.generate( name: 'Pango OT', description: 'OpenType font support for Pango (deprecated)', filebase: 'pangoot', subdirs: pango_api_name, requires: [ 'pangoft2' ], ) pkgconfig.generate( name: 'Pango FC', description: 'Fontconfig support for Pango', filebase: 'pangofc', subdirs: pango_api_name, requires: [ 'pangoft2' ], ) else # For usage as a subproject libpangoft2_dep = dependency('', required : false) # Needed for making ft2 no-op while generating pangoxft_gir below pangoft2_gir_dep = dependency('', required : false) pangoft2_gir = [[]] endif # Xft if xft_dep.found() and fontconfig_dep.found() pangoxft_headers = [ 'pangoxft.h', 'pangoxft-render.h', ] pangoxft_sources = [ 'pangoxft-font.c', 'pangoxft-fontmap.c', 'pangoxft-render.c', ] install_headers(pangoxft_headers, subdir: pango_api_path) libpangoxft = library( 'pangoxft-@0@'.format(pango_api_version), sources: pangoxft_sources, version: pango_libversion, soversion: pango_soversion, darwin_versions : pango_osxversion, install: true, dependencies: pango_deps + [ libpango_dep, libpangoft2_dep ], include_directories: [ root_inc, pango_inc ], c_args: common_cflags + pango_debug_cflags + pango_cflags + [ '-DPANGO_DISABLE_DEPRECATION_WARNINGS', ], link_args: common_ldflags, ) pangoxft_dep_sources = [] if build_gir pangoxft_gir = gnome.generate_gir( libpangoxft, sources: pangoxft_headers + pangoxft_sources, dependencies: [ libpango_dep, libpangoft2_dep, pango_gir_dep, pangoot_gir_dep, pangoft2_gir_dep ], namespace: 'PangoXft', nsversion: pango_api_version, identifier_prefix: 'PangoXft', symbol_prefix: 'pango_xft', export_packages: 'pangoxft', includes: [ pango_gir[0], pangoot_gir[0], pangoft2_gir[0], 'GObject-2.0', 'xft-2.0', 'xlib-2.0' ], header: 'pango/pangoxft.h', install: true, extra_args: gir_args, ) pangoxft_dep_sources += pangoxft_gir endif libpangoxft_dep = declare_dependency( link_with: libpangoxft, include_directories: root_inc, dependencies: pango_deps + [ libpango_dep, libpangoft2_dep ], sources: pangoxft_dep_sources, ) meson.override_dependency('pangoxft', libpangoxft_dep) pkgconfig.generate(libpangoxft, name: 'Pango Xft', description: 'Xft font support for Pango', filebase: 'pangoxft', subdirs: pango_api_name, requires: [ 'pangoft2', 'xft' ], ) else # For usage as a subproject libpangoxft_dep = dependency('', required: false) endif # Win32 if host_system == 'windows' pangowin32_headers = [ 'pangowin32.h', ] pangowin32_sources = [ 'pangowin32.c', 'pangowin32-fontcache.c', 'pangowin32-fontmap.c', 'pangowin32-dwrite-fontmap.cpp', ] pangowin32_deps = pango_deps + [ libpango_dep, cc.find_library('gdi32'), cc.find_library('dwrite'), ] pangowin32_rc = configure_file( input: 'pangowin32.rc.in', output: 'pangowin32.rc', configuration: pango_features_conf, ) pangowin32_res = import('windows').compile_resources(pangowin32_rc) pangowin32_sources += pangowin32_res install_headers(pangowin32_headers, subdir: pango_api_path) libpangowin32 = library( 'pangowin32-@0@'.format(pango_api_version), sources: pangowin32_sources, version: pango_libversion, soversion: pango_soversion, install: true, dependencies: pangowin32_deps, include_directories: [ root_inc, pango_inc ], c_args: common_cflags + pango_debug_cflags + pango_cflags + [ '-DPANGO_DISABLE_DEPRECATION_WARNINGS', ], link_args: common_ldflags, ) libpangowin32_dep = declare_dependency( link_with: libpangowin32, include_directories: root_inc, dependencies: pango_deps + [ libpango_dep ], ) meson.override_dependency('pangowin32', libpangowin32_dep) pkgconfig.generate(libpangowin32, name: 'Pango Win32', description: 'Win32 GDI font support for Pango', filebase: 'pangowin32', subdirs: pango_api_name, requires: 'pango', ) else # For usage as a subproject libpangowin32_dep = dependency('', required: false) endif # Cairo if cairo_dep.found() pangocairo_headers = [ 'pangocairo.h', ] pangocairo_sources = [ 'pangocairo-context.c', 'pangocairo-font.c', 'pangocairo-fontmap.c', 'pangocairo-render.c', ] pangocairo_deps = pango_deps + [ libpango_dep ] if pango_font_backends.contains('freetype') pangocairo_sources += [ 'pangocairo-fcfont.c', 'pangocairo-fcfontmap.c', ] pangocairo_deps += libpangoft2_dep endif if host_system == 'windows' and pango_font_backends.contains('win32') pangocairo_sources += [ 'pangocairo-win32font.c', 'pangocairo-win32fontmap.c', ] pangocairo_rc = configure_file( input: 'pangocairo.rc.in', output: 'pangocairo.rc', configuration: pango_features_conf, ) pangocairo_res = import('windows').compile_resources(pangocairo_rc) pangocairo_sources += pangocairo_res pangocairo_deps += cc.find_library('gdi32') pangocairo_deps += libpangowin32_dep endif if host_system == 'darwin' and pango_font_backends.contains('quartz') pangocairo_sources += [ 'pangocoretext.c', 'pangocoretext-fontmap.c', 'pangocairo-coretextfont.c', 'pangocairo-coretextfontmap.c', ] endif install_headers(pangocairo_headers, subdir: pango_api_path) libpangocairo = library( 'pangocairo-@0@'.format(pango_api_version), sources: pangocairo_sources, version: pango_libversion, soversion: pango_soversion, darwin_versions : pango_osxversion, install: true, dependencies: pango_deps + pangocairo_deps, include_directories: [ root_inc, pango_inc ], c_args: common_cflags + pango_debug_cflags + pango_cflags + [ '-DPANGO_DISABLE_DEPRECATION_WARNINGS', ], link_args: common_ldflags ) pangocairo_dep_sources = [] if build_gir pangocairo_gir = gnome.generate_gir( libpangocairo, sources: pangocairo_headers + pangocairo_sources, dependencies: [ pangocairo_deps, pango_gir_dep ], namespace: 'PangoCairo', nsversion: pango_api_version, identifier_prefix: 'PangoCairo', symbol_prefix: 'pango_cairo', export_packages: 'pangocairo', includes: [ pango_gir[0], 'GObject-2.0', 'cairo-1.0' ], header: 'pango/pangocairo.h', install: true, extra_args: gir_args, ) pangocairo_dep_sources += pangocairo_gir endif libpangocairo_dep = declare_dependency( link_with: libpangocairo, include_directories: root_inc, dependencies: pango_deps + [ libpango_dep ], sources: pangocairo_dep_sources, ) meson.override_dependency('pangocairo', libpangocairo_dep) # Create pangocairo.pc according to whether we found Cairo # manually if cairo_found_type in ['pkgconfig', 'internal'] pango_cairo_requires = [ 'pango', cairo_pc ] else pango_cairo_requires = [ 'pango' ] endif pkgconfig.generate(libpangocairo, name: 'Pango Cairo', description: 'Cairo rendering support for Pango', filebase: 'pangocairo', subdirs: pango_api_name, requires: pango_cairo_requires, ) else # For usage as a subproject libpangocairo_dep = dependency('', required: false) endif