diff options
-rw-r--r-- | docs/meson.build | 108 | ||||
-rw-r--r-- | docs/xml/gtkdocentities.ent.in | 8 | ||||
-rw-r--r-- | docs/xml/meson.build | 10 | ||||
-rw-r--r-- | examples/meson.build | 22 | ||||
-rw-r--r-- | meson.build | 348 | ||||
-rw-r--r-- | meson_options.txt | 4 | ||||
-rw-r--r-- | pango-view/meson.build | 40 | ||||
-rw-r--r-- | pango/meson.build | 363 | ||||
-rw-r--r-- | pango/mini-fribidi/meson.build | 19 | ||||
-rw-r--r-- | pango/pango-features.h.meson | 10 | ||||
-rw-r--r-- | tests/meson.build | 57 | ||||
-rw-r--r-- | tools/meson.build | 5 |
12 files changed, 994 insertions, 0 deletions
diff --git a/docs/meson.build b/docs/meson.build new file mode 100644 index 00000000..23496897 --- /dev/null +++ b/docs/meson.build @@ -0,0 +1,108 @@ +subdir('xml') + +version_xml_conf = configuration_data() +version_xml_conf.set('PANGO_VERSION', meson.project_version()) +configure_file(input: 'version.xml.in', + output: 'version.xml', + configuration: version_xml_conf) + +private_headers = [ + 'ftglue.h', + 'modules.h', + 'pangoatsui-private.h', + 'pangocairo-private.h', + 'pangocairo-fc.h', + 'pangocairo-win32.h', + 'pangocairo-atsui.h', + 'pango-color-table.h', + 'pango-engine-private.h', + 'pango-impl-utils.h', + 'pango-glyph-item-private.h', + 'pango-layout-private.h', + 'pango-script-table.h', + 'pango-script-private.h', + 'pangofc-private.h', + 'pangoft2-private.h', + 'pangowin32-private.h', + 'pangoatsui-private.h', + 'pangox-private.h', + 'pangoxft-private.h', + 'pango-ot-private.h', + 'pango-script-lang-table.h', + 'pango-language-sample-table.h', + 'pangocoretext-private.h', + 'pangoatsui-private.h', + 'mini-fribidi', +] + +if not host_system.contains('darwin') + private_headers += [ + 'pangocairo-coretextfont.h', + 'pangocairo-coretext.h', + 'pangocoretext.h', + ] +endif + +if not host_system.contains('windows') + private_headers += [ + 'pangocairo-win32.h', + 'pangowin32.h', + ] +endif + +content_files = [ + 'pango_markup.sgml', + 'version.xml', +] + +html_images = [ + 'layout.gif', + 'rotated-text.png', +] + +docdeps = [ libpango_dep ] + +if freetype_dep.found() + docdeps += libpangoft2_dep +endif + +if xft_dep.found() + docdeps += libpangoxft_dep +endif + +if cairo_dep.found() + docdeps += libpangocairo_dep +endif + +glib_prefix = dependency('glib-2.0').get_pkgconfig_variable('prefix') +glib_docpath = join_paths(glib_prefix, 'share', 'gtk-doc', 'html') +cairo_prefix = dependency('cairo').get_pkgconfig_variable('prefix') +cairo_docpath = join_paths(cairo_prefix, 'share', 'gtk-doc', 'html') +docpath = join_paths(pango_datadir, 'gtk-doc', 'html') + +gnome.gtkdoc('pango', + main_xml: 'pango-docs.sgml', + src_dir: [ + join_paths(meson.source_root(), 'pango'), + join_paths(meson.build_root(), 'pango'), + ], + dependencies: docdeps, + gobject_typesfile: 'pango.types', + scan_args: [ + '--rebuild-types', + '--deprecated-guards=PANGO_DISABLE_DEPRECATED', + '--ignore-decorators=_PANGO_EXTERN', + '--ignore-headers=' + ' '.join(private_headers), + ], + mkdb_args: [ + '--sgml-mode', + '--output-format=xml', + ], + fixxref_args: [ + '--html-dir=@0@'.format(docpath), + '--extra-dir=@0@'.format(join_paths(glib_docpath, 'glib')), + '--extra-dir=@0@'.format(join_paths(glib_docpath, 'gobject')), + '--extra-dir=@0@'.format(join_paths(cairo_docpath, 'cairo')), + ], + html_assets: html_images, + install: true) diff --git a/docs/xml/gtkdocentities.ent.in b/docs/xml/gtkdocentities.ent.in new file mode 100644 index 00000000..f12c9ff7 --- /dev/null +++ b/docs/xml/gtkdocentities.ent.in @@ -0,0 +1,8 @@ +<!ENTITY package "@PACKAGE@"> +<!ENTITY package_bugreport "@PACKAGE_BUGREPORT@"> +<!ENTITY package_name "@PACKAGE_NAME@"> +<!ENTITY package_string "@PACKAGE_STRING@"> +<!ENTITY package_tarname "@PACKAGE_TARNAME@"> +<!ENTITY package_url "@PACKAGE_URL@"> +<!ENTITY package_version "@PACKAGE_VERSION@"> +<!ENTITY package_api_version "@PACKAGE_API_VERSION@"> diff --git a/docs/xml/meson.build b/docs/xml/meson.build new file mode 100644 index 00000000..2a4cf4b7 --- /dev/null +++ b/docs/xml/meson.build @@ -0,0 +1,10 @@ +ent_conf = configuration_data() +ent_conf.set('PACKAGE', meson.project_name()) +ent_conf.set('PACKAGE_BUGREPORT', 'https://bugzilla.gnome.org/enter_bug.cgi?product=pango') +ent_conf.set('PACKAGE_NAME', meson.project_name()) +ent_conf.set('PACKAGE_STRING', meson.project_name()) +ent_conf.set('PACKAGE_TARNAME', '@0@-@1@'.format(meson.project_name(), meson.project_version())) +ent_conf.set('PACKAGE_URL', 'https://developer.gnome.org/pango/stable') +ent_conf.set('PACKAGE_VERSION', meson.project_version()) +ent_conf.set('PACKAGE_API_VERSION', pango_api_version) +configure_file(input: 'gtkdocentities.ent.in', output: 'gtkdocentities.ent', configuration: ent_conf) diff --git a/examples/meson.build b/examples/meson.build new file mode 100644 index 00000000..ebcec9b8 --- /dev/null +++ b/examples/meson.build @@ -0,0 +1,22 @@ +examples = [] + +if pango_cairo_backends.contains('png') + examples += [ + 'cairoshape', + 'cairosimple', + 'cairotwisted', + ] +endif + +examples_deps = [ libpango_dep, libpangocairo_dep, ] + +if pango_font_backends.contains('freetype') + examples_deps += libpangoft2_dep +endif + +foreach e: examples + executable(e, '@0@.c'.format(e), + dependencies: examples_deps + pango_deps, + include_directories: root_inc, + install: false) +endforeach diff --git a/meson.build b/meson.build new file mode 100644 index 00000000..58b92e4f --- /dev/null +++ b/meson.build @@ -0,0 +1,348 @@ +project('pango', 'c', version: '1.40.5', + license: 'LGPLv2.1+', + default_options: [ + 'buildtype=debugoptimized', + 'warning_level=1', + 'c_std=c99', + ], + meson_version : '>= 0.40.0') + +add_project_arguments([ '-D_POSIX_C_SOURCE', '-D_POSIX_THREAD_SAFE_FUNCTIONS', '-D_GNU_SOURCE', ], language: 'c') + +pango_prefix = get_option('prefix') +pango_libdir = join_paths(pango_prefix, get_option('libdir')) +pango_sysconfdir = join_paths(pango_prefix, get_option('sysconfdir')) +pango_includedir = join_paths(pango_prefix, get_option('includedir')) +pango_datadir = join_paths(pango_prefix, get_option('datadir')) + +version = meson.project_version().split('.') +pango_major_version = version[0].to_int() +pango_minor_version = version[1].to_int() +pango_micro_version = version[2].to_int() + +pango_interface_age = pango_minor_version.is_odd() ? 0 : pango_micro_version +pango_binary_age = pango_minor_version * 100 + pango_micro_version + +pango_api_version = '@0@.0'.format(pango_major_version) +pango_api_path = 'pango-@0@/pango'.format(pango_api_version) + +pango_conf = configuration_data() + +pango_conf.set('PANGO_BINARY_AGE', pango_binary_age) +pango_conf.set('PANGO_INTERFACE_AGE', pango_interface_age) +pango_conf.set('PANGO_VERSION_MAJOR', pango_major_version) +pango_conf.set('PANGO_VERSION_MINOR', pango_minor_version) +pango_conf.set('PANGO_VERSION_MICRO', pango_micro_version) + +# Maintain version scheme with libtool +pango_soversion = '0.@0@.@1@'.format((pango_binary_age - pango_interface_age), pango_interface_age) + +cc = meson.get_compiler('c') +host_system = host_machine.system() + +# Compiler and linker flags +common_cflags = [] +common_ldflags = [] + +# Add more compiler warnings to the default set +if cc.get_id() == 'msvc' + # Compiler options taken from msvc_recommended_pragmas.h + # in GLib, based on _Win32_Programming_ by Rector and Newcomer + test_cflags = [ + '-we4002', # too many actual parameters for macro + '-we4003', # not enough actual parameters for macro + '-w14010', # single-line comment contains line-continuation character + '-we4013', # 'function' undefined; assuming extern returning int + '-w14016', # no function return type; using int as default + '-we4020', # too many actual parameters + '-we4021', # too few actual parameters + '-we4027', # function declared without formal parameter list + '-we4029', # declared formal parameter list different from definition + '-we4033', # 'function' must return a value + '-we4035', # 'function' : no return value + '-we4045', # array bounds overflow + '-we4047', # different levels of indirection + '-we4049', # terminating line number emission + '-we4053', # an expression of type void was used as an operand + '-we4071', # no function prototype given + '-we4819', # the file contains a character that cannot be represented in the current code page + ] +elif cc.get_id() == 'gcc' or cc.get_id() == 'clang' + test_cflags = [ + '-fno-strict-aliasing', + '-Wpointer-arith', + '-Wmissing-declarations', + '-Wimplicit-function-declaration', + '-Wformat=2', + '-Wformat-nonliteral', + '-Wformat-security', + '-Wstrict-prototypes', + '-Wmissing-prototypes', + '-Wnested-externs', + '-Wold-style-definition', + '-Wunused', + '-Wcast-align', + '-Wmissing-noreturn', + '-Wmissing-format-attribute', + '-Wmissing-include-dirs', + '-Wlogical-op', + '-Wno-uninitialized', + '-Wno-shadow', + '-Wno-int-conversion', + '-Wno-discarded-qualifiers', + '-Werror=redundant-decls', + '-Werror=implicit', + '-Werror=nonnull', + '-Werror=init-self', + '-Werror=main', + '-Werror=missing-braces', + '-Werror=sequence-point', + '-Werror=return-type', + '-Werror=trigraphs', + '-Werror=array-bounds', + '-Werror=write-strings', + '-Werror=address', + '-Werror=int-to-pointer-cast', + '-Werror=pointer-to-int-cast', + '-Werror=empty-body', + '-Werror=write-strings', + '-Werror=undef', + ] +else + test_cflags = [] +endif + +foreach cflag: test_cflags + if cc.has_argument(cflag) + common_cflags += [ cflag ] + endif +endforeach + +# Symbol visibility +if get_option('default_library') != 'static' + if host_machine.system() == 'windows' + pango_conf.set('DLL_EXPORT', true) + if cc.get_id() == 'msvc' + pango_conf.set('_PANGO_EXTERN', '__declspec(dllexport) extern') + else + pango_conf.set('_PANGO_EXTERN', '__attribute__((visibility("default"))) __declspec(dllexport) extern') + common_cflags += ['-fvisibility=hidden'] + endif + else + pango_conf.set('_PANGO_EXTERN', '__attribute__((visibility("default"))) extern') + common_cflags += ['-fvisibility=hidden'] + endif +endif + +# Linker flags +if host_machine.system() == 'linux' + foreach ldflag: [ '-Wl,-Bsymbolic', '-Wl,-z,relro', '-Wl,-z,now', ] + if cc.has_argument(ldflag) + common_ldflags += [ ldflag ] + endif + endforeach +endif + +# Maintain compatibility with autotools on macOS +if host_machine.system() == 'darwin' + common_ldflags += [ '-compatibility_version=1', '-current_version=1.0', ] +endif + +# Functions +checked_funcs = [ + 'sysconf', + 'getpagesize', + 'flockfile', + 'strtok_r', +] + +foreach f: checked_funcs + if cc.has_function(f) + pango_conf.set('HAVE_' + f.underscorify().to_upper(), 1) + endif +endforeach + +# Headers +checked_headers = [ + 'unistd.h', + 'sys/mman.h', + 'dirent.h', +] + +foreach h: checked_headers + if cc.has_header(h) + pango_conf.set('HAVE_' + h.underscorify().to_upper(), 1) + endif +endforeach + +buildtype = get_option('buildtype') +if buildtype == 'debug' or buildtype == 'debugoptimized' + pango_debug_cflags = [ '-DPANGO_ENABLE_DEBUG', ] +elif buildtype == 'release' + pango_debug_cflags = [ '-DG_DISABLE_CAST_CHECKS', ] +else + pango_debug_cflags = [] +endif + +# Dependencies +pango_deps = [] + +glib_req_version = '>= 2.33.12' +libthai_req_version = '>= 0.1.9' +harfbuzz_req_version = '>= 1.2.3' +fontconfig_req_version = '>= 2.10.91' +xft_req_version = '>= 2.0.0' +cairo_req_version = '>= 1.12.10' + +# libm +mathlib_dep = cc.find_library('m', required: false) +pango_deps += mathlib_dep + +# gobject +gobject_dep = dependency('gobject-2.0', version: glib_req_version) +pango_deps += gobject_dep + +thai_dep = dependency('libthai', version: libthai_req_version, required: false) +if thai_dep.found() + pango_conf.set('HAVE_LIBTHAI', 1) + pango_deps += thai_dep +endif + +harfbuzz_dep = dependency('harfbuzz', version: harfbuzz_req_version, required: false) +if harfbuzz_dep.found() + pango_deps += harfbuzz_dep +endif + +fontconfig_dep = dependency('fontconfig', version: fontconfig_req_version, required: false) +if fontconfig_dep.found() + pango_deps += fontconfig_dep + + if cc.has_function('FcWeightFromOpenType', dependencies: fontconfig_dep) + pango_conf.set('HAVE_FCWEIGHTFROMOPENTYPE', 1) + endif +endif + +# The first version of freetype with a pkg-config file is 2.1.5 +freetype_dep = dependency('freetype2', required: false) +if freetype_dep.found() + pango_conf.set('HAVE_FREETYPE', 1) + pango_deps += freetype_dep +endif + +xft_dep = dependency('xft', version: xft_req_version, required: false) +if xft_dep.found() + pango_conf.set('HAVE_XFT', 1) + pango_deps += dependency('xrender', required: false) + pango_deps += xft_dep +endif + +if host_system == 'darwin' + has_core_text = cc.links('''#include <Carbon/Carbon.h> + int main (void) { + CTGetCoreTextVersion (); + return 0; + }''', + name: 'CoreText availability', + dependencies: dependency('appleframeworks', modules: 'ApplicationServices')) + if has_core_text + pango_conf.set('HAVE_CORE_TEXT', 1) + endif +endif + +cairo_dep = dependency('cairo', version: cairo_req_version, required: false) +if cairo_dep.found() + # Check the following Cairo font backends + # - dependency + # - version + # - define + # - backend name + cairo_font_backends = [ + [ 'cairo-ft', cairo_req_version, 'HAVE_CAIRO_FREETYPE', 'freetype', ], + [ 'cairo-win32', cairo_req_version, 'HAVE_CAIRO_WIN32', 'win32', ], + [ 'cairo-quartz', cairo_req_version, 'HAVE_CAIRO_QUARTZ', 'quartz', ], + ] + + pango_font_backends = [] + + foreach b: cairo_font_backends + dep = dependency(b[0], version: b[1], required: false) + if dep.found() + pango_conf.set(b[2], 1) + pango_font_backends += b[3] + endif + endforeach + + if pango_font_backends.length() == 0 + error('No Cairo font backends found') + endif + + # Check the following Cairo surface backends + # - dependency + # - version + # - define + # - backend name + cairo_surface_backends = [ + [ 'cairo-png', cairo_req_version, 'HAVE_CAIRO_PNG', 'png', ], + [ 'cairo-ps', cairo_req_version, 'HAVE_CAIRO_PS', 'ps', ], + [ 'cairo-pdf', cairo_req_version, 'HAVE_CAIRO_PDF', 'pdf', ], + [ 'cairo-xlib', cairo_req_version, 'HAVE_CAIRO_XLIB', 'xlib', ], + ] + + pango_cairo_backends = [] + + foreach b: cairo_surface_backends + dep = dependency(b[0], version: b[1], required: false) + if dep.found() + pango_conf.set(b[2], 1) + pango_cairo_backends += b[3] + endif + endforeach + + pango_conf.set('HAVE_CAIRO', 1) + pango_deps += cairo_dep + + pangocairo_requires = [] + + if pango_font_backends.contains('freetype') + pangocairo_requires += 'pangoft2' + endif + + if pango_font_backends.contains('win32') + pangocairo_requires += 'pangowin32' + endif +endif + +# Compat variables for pkgconfig +pkgconf = configuration_data() +pkgconf.set('prefix', pango_prefix) +pkgconf.set('exec_prefix', pango_prefix) +pkgconf.set('libdir', pango_libdir) +pkgconf.set('includedir', pango_includedir) +pkgconf.set('VERSION', meson.project_version()) +pkgconf.set('PANGO_API_VERSION', pango_api_version) +pkgconf.set('PKGCONFIG_CAIRO_REQUIRES', pangocairo_requires) + +foreach pkg: [ 'pango.pc', 'pangowin32.pc', 'pangoft2.pc', 'pangoxft.pc', 'pangocairo.pc', ] + configure_file(input: '@0@.in'.format(pkg), + output: pkg, + configuration: pkgconf, + install: true, + install_dir: join_paths(pango_libdir, 'pkgconfig')) +endforeach + +gnome = import('gnome') + +# Internal configuration header +configure_file(output: 'config.h', configuration: pango_conf) + +root_inc = include_directories('.') + +subdir('pango') +subdir('examples') +subdir('pango-view') +subdir('tests') +subdir('tools') + +if get_option('enable-gtk-doc') + subdir('docs') +endif diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 00000000..783c1d59 --- /dev/null +++ b/meson_options.txt @@ -0,0 +1,4 @@ +option('enable-gtk-doc', + description: 'Build API reference for Pango using GTK-Doc', + type: 'boolean', + default: 'false') diff --git a/pango-view/meson.build b/pango-view/meson.build new file mode 100644 index 00000000..12c2a438 --- /dev/null +++ b/pango-view/meson.build @@ -0,0 +1,40 @@ +pango_view_sources = [ + 'pango-view.c', + 'viewer-main.c', + 'viewer-render.c', +] + +pango_view_deps = [ + pango_deps, + libpango_dep, +] + +if freetype_dep.found() + pango_view_sources += 'viewer-pangoft2.c' + pango_view_deps += libpangoft2_dep +endif + +if xft_dep.found() + pango_view_sources += [ + 'viewer-pangoxft.c', + 'viewer-x.c', + ] + pango_view_deps += [ libpangoft2_dep, libpangoxft_dep, ] +endif + +if cairo_dep.found() + pango_view_sources += [ + 'viewer-cairo.c', + 'viewer-pangocairo.c', + ] + pango_view_deps += libpangocairo_dep +endif + +executable('pango-view', pango_view_sources, + dependencies: pango_view_deps, + include_directories: [ root_inc ], + install: true, + c_args: [ + '-DPACKAGE_NAME="@0@"'.format(meson.project_name()), + '-DPACKAGE_VERSION="@0@"'.format(meson.project_version()), + ]) 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 diff --git a/pango/mini-fribidi/meson.build b/pango/mini-fribidi/meson.build new file mode 100644 index 00000000..e9dab258 --- /dev/null +++ b/pango/mini-fribidi/meson.build @@ -0,0 +1,19 @@ +mini_fribidi_sources = [ + 'fribidi.c', + 'fribidi_char_type.c', + 'fribidi_types.c', +] + +mini_fribidi_lib = static_library('libmini-fribidi', sources: mini_fribidi_sources, + dependencies: [ mathlib_dep, gobject_dep ], + include_directories: root_inc, + c_args: common_cflags + [ + '-DSYSCONFDIR="@0@"'.format(pango_sysconfdir), + '-DLIBDIR="@0@"'.format(pango_libdir), + ]) + +mini_fribidi_dep = declare_dependency(link_with: mini_fribidi_lib, + dependencies: [ mathlib_dep, gobject_dep ], + include_directories: [ + include_directories('.'), + ]) diff --git a/pango/pango-features.h.meson b/pango/pango-features.h.meson new file mode 100644 index 00000000..af50695b --- /dev/null +++ b/pango/pango-features.h.meson @@ -0,0 +1,10 @@ +#ifndef PANGO_FEATURES_H +#define PANGO_FEATURES_H + +#mesondefine PANGO_VERSION_MAJOR +#mesondefine PANGO_VERSION_MINOR +#mesondefine PANGO_VERSION_MICRO + +#define PANGO_VERSION_STRING "PANGO_VERSION_MAJOR.PANGO_VERSION_MINOR.PANGO_VERSION_MICRO" + +#endif /* PANGO_FEATURES_H */ diff --git a/tests/meson.build b/tests/meson.build new file mode 100644 index 00000000..1a21101b --- /dev/null +++ b/tests/meson.build @@ -0,0 +1,57 @@ +test_cflags = [ + '-DSRCDIR=@0@'.format(meson.current_source_dir()), +] + +if xft_dep.found() + test_cflags += [ '-DHAVE_X', '-DHAVE_XFT' ] +endif + +if freetype_dep.found() + test_cflags += '-DHAVE_FREETYPE' +endif + +if host_system.contains('windows') + test_cflags += '-DHAVE_WIN32' +endif + +test_env = [ + 'srcdir=@0@'.format(meson.current_source_dir()), + 'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()), + 'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()), +] + +tests = [ + [ 'testboundaries' ], + [ 'testboundaries_ucd' ], + [ 'testcolor' ], + [ 'testscript' ], +] + +if freetype_dep.found() + tests += [ + [ 'test-ot-tags', [ 'test-ot-tags.c' ], [ libpangoft2_dep ] ], + ] +endif + +if cairo_dep.found() + tests += [ + [ 'testiter', [ 'testiter.c' ], [ libpangocairo_dep ] ], + [ 'test-pangocairo-threads', [ 'test-pangocairo-threads.c' ], [ libpangocairo_dep, cairo_dep ] ], + [ 'markup-parse', [ 'markup-parse.c' ], [ libpangocairo_dep ] ], + [ 'test-layout', [ 'test-layout.c', 'test-common.c' ], [ libpangocairo_dep ] ], + [ 'test-font', [ 'test-font.c' ], [ libpangocairo_dep ] ], + [ 'testattributes', [ 'testattributes.c', 'test-common.c' ], [ libpangocairo_dep ] ], + ] +endif + +foreach t: tests + name = t[0] + src = t.get(1, [ '@0@.c'.format(name) ]) + deps = t.get(2, [ libpango_dep ]) + + bin = executable(name, src, + dependencies: deps, + include_directories: root_inc, + c_args: common_cflags + pango_debug_cflags) + test(name, bin, env: test_env) +endforeach diff --git a/tools/meson.build b/tools/meson.build new file mode 100644 index 00000000..37a3be76 --- /dev/null +++ b/tools/meson.build @@ -0,0 +1,5 @@ +executable('gen-script-for-lang', 'gen-script-for-lang.c', + dependencies: pango_deps + [ libpango_dep ], + c_args: common_cflags + pango_debug_cflags + [ '-DPANGO_DISABLE_DEPRECATED' ], + include_directories: root_inc, + install: false) |