diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2017-05-16 12:08:25 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2017-05-19 17:23:47 +0100 |
commit | 5d3af9bf597cf42bd39bf2e4275c7f0746a947b5 (patch) | |
tree | 7878cef8e2c6cd67232001f3ef27c0091e2ca83d /pango/meson.build | |
parent | 4819027c6e072c2e9e45228f8afd5d0767545026 (diff) | |
download | pango-5d3af9bf597cf42bd39bf2e4275c7f0746a947b5.tar.gz |
build: Add Meson build system
Meson is a meta build system that is:
- fast
- simpler to understand and use
- portable to multiple platforms through different backends
- well integrated with the GNOME platform
- well maintained
Using Meson allows us to build Pango much more quickly, and on all the
platforms we currently target, without any loss of functionality,
compared to Autotools.
Some timing comparisons with hot ccache for both build systems:
* autogen.sh: * meson
real 0m11.149s real 0m2.525s
user 0m8.153s user 0m1.609s
sys 0m2.363s sys 0m1.206s
* make -j$(($(nproc) + 2)) * ninja
real 0m9.186s real 0m3.387s
user 0m16.295s user 0m6.887s
sys 0m5.337s sys 0m1.318s
--------------------------------------------------------------
* autotools * meson + ninja
real 0m27.669s real 0m5.772s
user 0m45.622s user 0m8.465s
sys 0m10.698s sys 0m2.357s
System: Intel Core i7-7500U, SSD, 16GB of RAM
Diffstat (limited to 'pango/meson.build')
-rw-r--r-- | pango/meson.build | 363 |
1 files changed, 363 insertions, 0 deletions
diff --git a/pango/meson.build b/pango/meson.build new file mode 100644 index 00000000..bbc6a579 --- /dev/null +++ b/pango/meson.build @@ -0,0 +1,363 @@ +subdir('mini-fribidi') + +pango_sources = [ + 'break.c', + 'ellipsize.c', + 'fonts.c', + 'glyphstring.c', + 'modules.c', + 'pango-attributes.c', + 'pango-bidi-type.c', + 'pango-color.c', + 'pango-context.c', + 'pango-coverage.c', + 'pango-engine.c', + 'pango-fontmap.c', + 'pango-fontset.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', +] + +pango_headers = [ + 'pango.h', + 'pango-attributes.h', + 'pango-bidi-type.h', + 'pango-break.h', + 'pango-context.h', + 'pango-coverage.h', + 'pango-engine.h', + 'pango-font.h', + 'pango-fontmap.h', + 'pango-fontset.h', + 'pango-glyph.h', + 'pango-glyph-item.h', + 'pango-gravity.h', + 'pango-item.h', + 'pango-language.h', + 'pango-layout.h', + 'pango-matrix.h', + 'pango-modules.h', + 'pango-renderer.h', + 'pango-script.h', + 'pango-tabs.h', + 'pango-types.h', + 'pango-utils.h', + 'pango-version-macros.h', +] + +install_headers(pango_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) + +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] + +pango_cflags = [ + '-DG_LOG_DOMAIN="Pango"', + '-DG_LOG_USE_STRUCTURED=1', + '-DPANGO_ENABLE_BACKEND', + '-DPANGO_ENABLE_ENGINE', + '-DSYSCONFDIR="@0@"'.format(pango_sysconfdir), + '-DLIBDIR="@0@"'.format(pango_libdir), +] + +pango_inc = include_directories('.') + +libpango = shared_library('pango-@0@'.format(pango_api_version), + sources: pango_sources + pango_enums, + soversion: pango_soversion, + install: true, + dependencies: [ gobject_dep, mathlib_dep, thai_dep, mini_fribidi_dep ], + include_directories: [ root_inc, pango_inc ], + c_args: common_cflags + pango_debug_cflags + pango_cflags, + link_args: common_ldflags) + +libpango_dep = declare_dependency(link_with: libpango, + include_directories: pango_inc, + dependencies: pango_deps, + sources: pango_enums) + +if not meson.is_cross_build() + 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_dep = declare_dependency(sources: pango_gir) +endif + +# FreeType +if freetype_dep.found() + pangoft2_headers = [ + 'pango-ot.h', + 'pangofc-font.h', + 'pangofc-fontmap.h', + 'pangofc-decoder.h', + 'pangoft2.h', + ] + + pangoft2_public_sources = [ + 'pangofc-font.c', + 'pangofc-fontmap.c', + 'pangofc-decoder.c', + 'pangofc-shape.c', + 'pangoft2.c', + ] + + pangoft2_sources = pangoft2_public_sources + [ + 'pangoft2-fontmap.c', + 'pangoft2-render.c', + 'pango-ot-buffer.c', + 'pango-ot-info.c', + 'pango-ot-ruleset.c', + 'pango-ot-tag.c', + ] + + install_headers(pangoft2_headers, subdir: pango_api_path) + + libpangoft2 = shared_library('libpangoft2-@0@'.format(pango_api_version), + sources: pangoft2_sources + [ pango_enum_h ], + 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_dep = declare_dependency(link_with: libpangoft2, + include_directories: pango_inc, + dependencies: pango_deps + [ libpango_dep ]) + + if not meson.is_cross_build() + pangoft2_gir = gnome.generate_gir(libpangoft2, + sources: pangoft2_headers + pangoft2_public_sources, + dependencies: 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', + ]) + + pangoft2_gir_dep = declare_dependency(sources: pangoft2_gir) + endif +endif + +# Xft +if xft_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 = shared_library('libpangoxft-@0@'.format(pango_api_version), + sources: pangoxft_sources + [ pango_enum_h ], + 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_dep = declare_dependency(link_with: libpangoxft, + include_directories: root_inc, + dependencies: pango_deps + [ libpango_dep, libpangoft2_dep ]) + + if not meson.is_cross_build() + pangoxft_gir = gnome.generate_gir(libpangoxft, + sources: pangoxft_headers + pangoxft_sources, + dependencies: [ pango_gir_dep, pangoft2_gir_dep ], + namespace: 'PangoXft', + nsversion: pango_api_version, + identifier_prefix: 'PangoXft', + symbols_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-@0@.gir'.format(pango_api_version), + '--include-uninstalled=pango/PangoFT2-@0@.gir'.format(pango_api_version), + ]) + + pangoxft_gir_dep = declare_dependency(sources: pangoxft_gir) + endif +endif + +# Win32 +if host_system.contains('windows') + pangowin32_headers = [ + 'pangowin32.h', + ] + + pangowin32_sources = [ + 'pangowin32.c', + 'pangowin32-fontcache.c', + 'pangowin32-fontmap.c', + 'pangowin32-shape.c', + ] + + pangowin32_deps = pango_deps + [ + libpango_dep, + cc.find_library('gdi32'), + cc.find_library('usp10'), + ] + + install_headers(pangowin32_headers, subdir: pango_api_path) + + libpangowin32 = shared_library('libpangowin32-@0@'.format(pango_api_version), + sources: pangowin32_sources + [ pango_enum_h ], + 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 +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 ] + pangocairo_gir_deps = [ pango_gir_dep, ] + pangocairo_gir_args = [] + + if pango_font_backends.contains('freetype') + pangocairo_sources += [ + 'pangocairo-fcfont.c', + 'pangocairo-fcfontmap.c', + ] + + pangocairo_deps += libpangoft2_dep + pangocairo_gir_args += '--include-uninstalled=pango/PangoFT2-@0@.gir'.format(pango_api_version) + pangocairo_gir_deps += pangoft2_gir_dep + endif + + if host_system.contains('windows') and pango_font_backends.contains('win32') + pangocairo_sources += [ + 'pangocairo-win32font.c', + 'pangocairo-win32fontmap.c', + ] + pangocairo_deps += cc.find_library('gdi32') + pangocairo_deps += libpangowin32_dep + endif + + if host_system.contains('darwin') and pango_font_backends.contains('quartz') + pangocairo_sources += [ + 'pangocoretext.c', + 'pangocoretext-fontmap.c', + 'pangocoretext-shape.c', + 'pangocairo-coretextfont.c', + 'pangocairo-coretextfontmap.c', + ] + pangocairo_deps += dependency('appleframeworks', modules: [ 'CoreFoundation', 'ApplicationServices' ]) + endif + + install_headers(pangocairo_headers, subdir: pango_api_path) + + libpangocairo = shared_library('libpangocairo-@0@'.format(pango_api_version), + sources: pangocairo_sources + [ pango_enum_h ], + 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_dep = declare_dependency(link_with: libpangocairo, + include_directories: root_inc, + dependencies: pango_deps + [ libpango_dep ]) + + if not meson.is_cross_build() + pangocairo_gir = gnome.generate_gir(libpangocairo, + sources: pangocairo_headers + pangocairo_sources, + dependencies: pangocairo_gir_deps, + namespace: 'PangoCairo', + nsversion: pango_api_version, + identifier_prefix: 'PangoCairo', + symbols_prefix: 'pango_cairo', + export_packages: 'pangocairo', + includes: [ 'GObject-2.0', 'cairo-1.0' ], + install: true, + extra_args: gir_args + pangocairo_gir_args + [ + '--c-include=pango/pangocairo.h', + ]) + + pangocairo_gir_dep = declare_dependency(sources: pangocairo_gir) + endif +endif |