From f553ec30390caddbbfb44336a48a51b63ba9e9f1 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Mon, 12 Feb 2018 12:23:42 +0000 Subject: meson: Update rules for introspection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Building introspection should not be gated on cross-compilation: it's perfectly acceptable to use an helper binary to run the introspection scanner when cross-compiling — in fact, it's what projects like Yocto do. Instead, we should have an option to disable the introspection generation explicitly. Additionally, when building introspection data for ancillary Pango libraries, like PangoCairo or PangoXft, we should depend on the GIR target, instead of adding an `--include-uninstalled` extra argument for the introspection scanner; this allows building Pango as a sub-project of another project, and lets Meson deal with the appropriate paths and arguments when invoking the scanner. --- meson.build | 2 +- meson_options.txt | 4 + pango/meson.build | 314 +++++++++++++++++++++++++++++------------------------- 3 files changed, 176 insertions(+), 144 deletions(-) diff --git a/meson.build b/meson.build index 2f6f539f..be636123 100644 --- a/meson.build +++ b/meson.build @@ -6,7 +6,7 @@ project('pango', 'c', 'cpp', 'warning_level=1', 'c_std=c99', ], - meson_version : '>= 0.40.1') + meson_version : '>= 0.43.0') add_project_arguments([ '-D_POSIX_C_SOURCE=200809L', '-D_POSIX_THREAD_SAFE_FUNCTIONS', '-D_GNU_SOURCE', ], language: 'c') diff --git a/meson_options.txt b/meson_options.txt index e5f60225..ac641269 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -2,3 +2,7 @@ option('enable_docs', description: 'Build API reference for Pango using GTK-Doc', type: 'boolean', value: false) +option('gir', + description: 'Build the GObject introspection data for Pango', + type: 'boolean', + value: true) diff --git a/pango/meson.build b/pango/meson.build index 6301410d..93f0740a 100644 --- a/pango/meson.build +++ b/pango/meson.build @@ -65,19 +65,23 @@ 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') -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)) +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_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' @@ -102,44 +106,52 @@ pango_cflags = [ pango_inc = include_directories('.') -libpango = shared_library('pango-@0@'.format(pango_api_version), - sources: pango_sources + pango_enums, - version: pango_libversion, - soversion: pango_soversion, - install: true, - dependencies: [ gobject_dep, mathlib_dep, thai_dep, fribidi_dep ], - include_directories: [ root_inc, pango_inc ], - c_args: common_cflags + pango_debug_cflags + pango_cflags, - link_args: common_ldflags) +libpango = library( + 'pango-@0@'.format(pango_api_version), + sources: pango_sources + pango_enums, + version: pango_libversion, + soversion: pango_soversion, + install: true, + dependencies: [ gobject_dep, mathlib_dep, thai_dep, fribidi_dep ], + 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] -if not meson.is_cross_build() + +build_gir = get_option('gir') + +if build_gir gir_args = [ '--quiet', '-DPANGO_ENABLE_BACKEND', '-DPANGO_ENABLE_ENGINE', ] - pango_gir = gnome.generate_gir(libpango, - sources: pango_sources + pango_headers + [ pango_enum_h ], - namespace: 'Pango', - nsversion: pango_api_version, - identifier_prefix: 'Pango', - symbol_prefix: 'pango', - export_packages: 'pango', - includes: [ 'GObject-2.0', 'cairo-1.0', ], - install: true, - extra_args: gir_args + [ - '--c-include=pango/pango.h', - ]) + pango_gir = gnome.generate_gir( + libpango, + sources: pango_sources + pango_headers + [ pango_enum_h ], + namespace: 'Pango', + nsversion: pango_api_version, + identifier_prefix: 'Pango', + symbol_prefix: 'pango', + export_packages: 'pango', + includes: [ 'GObject-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) +libpango_dep = declare_dependency( + link_with: libpango, + include_directories: pango_inc, + dependencies: pango_deps, + sources: pango_dep_sources, +) # FreeType if freetype_dep.found() @@ -180,42 +192,47 @@ if freetype_dep.found() install_headers(pangoft2_headers, subdir: pango_api_path) - libpangoft2 = shared_library('pangoft2-@0@'.format(pango_api_version), - sources: pangoft2_sources, - version: pango_libversion, - soversion: pango_soversion, - 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) + libpangoft2 = library( + 'pangoft2-@0@'.format(pango_api_version), + sources: pangoft2_sources, + version: pango_libversion, + soversion: pango_soversion, + 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 not meson.is_cross_build() - pangoft2_gir = gnome.generate_gir(libpangoft2, - sources: pangoft2_headers + pangoft2_public_sources, - dependencies: [ libpango_dep, pango_gir_dep ], - namespace: 'PangoFT2', - nsversion: pango_api_version, - identifier_prefix: 'PangoFT2', - symbol_prefix: 'pango_ft2', - export_packages: 'pangoft2', - includes: [ 'GObject-2.0', 'cairo-1.0', 'freetype2-2.0', 'fontconfig-2.0', ], - install: true, - extra_args: gir_args + [ - '--c-include=pango/pangoft2.h', - '--include-uninstalled=./pango/Pango-1.0.gir', - ]) + if build_gir + pangoft2_gir = gnome.generate_gir( + libpangoft2, + sources: pangoft2_headers + pangoft2_public_sources, + dependencies: [ libpango_dep, pango_gir_dep ], + namespace: 'PangoFT2', + nsversion: pango_api_version, + identifier_prefix: 'PangoFT2', + symbol_prefix: 'pango_ft2', + export_packages: 'pangoft2', + includes: [ pango_gir[0], 'GObject-2.0', 'cairo-1.0', 'freetype2-2.0', 'fontconfig-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) + libpangoft2_dep = declare_dependency( + link_with: libpangoft2, + include_directories: pango_inc, + dependencies: pango_deps + [ libpango_dep ], + sources: pangoft2_dep_sources, + ) endif # Xft @@ -233,42 +250,45 @@ if xft_dep.found() install_headers(pangoxft_headers, subdir: pango_api_path) - libpangoxft = shared_library('pangoxft-@0@'.format(pango_api_version), - sources: pangoxft_sources, - version: pango_libversion, - soversion: pango_soversion, - 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) + libpangoxft = library( + 'pangoxft-@0@'.format(pango_api_version), + sources: pangoxft_sources, + version: pango_libversion, + soversion: pango_soversion, + 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 not meson.is_cross_build() - pangoxft_gir = gnome.generate_gir(libpangoxft, - sources: pangoxft_headers + pangoxft_sources, - dependencies: [ libpango_dep, libpangoft2_dep, pango_gir_dep, pangoft2_gir_dep ], - namespace: 'PangoXft', - nsversion: pango_api_version, - identifier_prefix: 'PangoXft', - symbol_prefix: 'pango_xft', - export_packages: 'pangoxft', - includes: [ 'GObject-2.0', 'xft-2.0', 'xlib-2.0' ], - install: true, - extra_args: gir_args + [ - '--c-include=pango/pangoxft.h', - '--include-uninstalled=./pango/Pango-1.0.gir', - '--include-uninstalled=./pango/PangoFT2-1.0.gir', - ]) + if build_gir + pangoxft_gir = gnome.generate_gir( + libpangoxft, + sources: pangoxft_headers + pangoxft_sources, + dependencies: [ libpango_dep, libpangoft2_dep, pango_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], 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) + libpangoxft_dep = declare_dependency( + link_with: libpangoxft, + include_directories: root_inc, + dependencies: pango_deps + [ libpango_dep, libpangoft2_dep ], + sources: pangoxft_dep_sources, + ) endif # Win32 @@ -300,21 +320,25 @@ if host_system == 'windows' install_headers(pangowin32_headers, subdir: pango_api_path) - libpangowin32 = shared_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 ]) + 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 ], + ) endif # Cairo @@ -372,39 +396,43 @@ if cairo_dep.found() install_headers(pangocairo_headers, subdir: pango_api_path) - libpangocairo = shared_library('pangocairo-@0@'.format(pango_api_version), - sources: pangocairo_sources, - version: pango_libversion, - soversion: pango_soversion, - 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) + libpangocairo = library( + 'pangocairo-@0@'.format(pango_api_version), + sources: pangocairo_sources, + version: pango_libversion, + soversion: pango_soversion, + 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 not meson.is_cross_build() - 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: [ 'GObject-2.0', 'cairo-1.0' ], - install: true, - extra_args: gir_args + [ - '--c-include=pango/pangocairo.h', - '--include-uninstalled=./pango/Pango-1.0.gir', - ]) + 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) + libpangocairo_dep = declare_dependency( + link_with: libpangocairo, + include_directories: root_inc, + dependencies: pango_deps + [ libpango_dep ], + sources: pangocairo_dep_sources, + ) endif -- cgit v1.2.1