|
Packit |
0ec9dd |
project('pango', 'c', 'cpp',
|
|
Packit |
0ec9dd |
version: '1.42.3',
|
|
Packit |
0ec9dd |
license: 'LGPLv2.1+',
|
|
Packit |
0ec9dd |
default_options: [
|
|
Packit |
0ec9dd |
'buildtype=debugoptimized',
|
|
Packit |
0ec9dd |
'warning_level=1',
|
|
Packit |
0ec9dd |
'c_std=c99',
|
|
Packit |
0ec9dd |
],
|
|
Packit |
0ec9dd |
meson_version : '>= 0.43.0')
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
add_project_arguments([ '-D_POSIX_C_SOURCE=200809L', '-D_POSIX_THREAD_SAFE_FUNCTIONS', '-D_GNU_SOURCE', ], language: 'c')
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
pango_prefix = get_option('prefix')
|
|
Packit |
0ec9dd |
pango_libdir = join_paths(pango_prefix, get_option('libdir'))
|
|
Packit |
0ec9dd |
pango_sysconfdir = join_paths(pango_prefix, get_option('sysconfdir'))
|
|
Packit |
0ec9dd |
pango_includedir = join_paths(pango_prefix, get_option('includedir'))
|
|
Packit |
0ec9dd |
pango_datadir = join_paths(pango_prefix, get_option('datadir'))
|
|
Packit |
0ec9dd |
pango_libexecdir = join_paths(pango_prefix, get_option('libexecdir'))
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
version = meson.project_version().split('.')
|
|
Packit |
0ec9dd |
pango_major_version = version[0].to_int()
|
|
Packit |
0ec9dd |
pango_minor_version = version[1].to_int()
|
|
Packit |
0ec9dd |
pango_micro_version = version[2].to_int()
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
pango_interface_age = pango_minor_version.is_odd() ? 0 : pango_micro_version
|
|
Packit |
0ec9dd |
pango_binary_age = pango_minor_version * 100 + pango_micro_version
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
pango_api_version = '@0@.0'.format(pango_major_version)
|
|
Packit |
0ec9dd |
pango_api_path = 'pango-@0@/pango'.format(pango_api_version)
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
pango_conf = configuration_data()
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
pango_conf.set('PANGO_BINARY_AGE', pango_binary_age)
|
|
Packit |
0ec9dd |
pango_conf.set('PANGO_INTERFACE_AGE', pango_interface_age)
|
|
Packit |
0ec9dd |
pango_conf.set('PANGO_VERSION_MAJOR', pango_major_version)
|
|
Packit |
0ec9dd |
pango_conf.set('PANGO_VERSION_MINOR', pango_minor_version)
|
|
Packit |
0ec9dd |
pango_conf.set('PANGO_VERSION_MICRO', pango_micro_version)
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
# Maintain version scheme with libtool
|
|
Packit |
0ec9dd |
pango_soversion = 0
|
|
Packit |
0ec9dd |
pango_libversion = '@0@.@1@.@2@'.format(pango_soversion, (pango_binary_age - pango_interface_age), pango_interface_age)
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
cc = meson.get_compiler('c')
|
|
Packit |
0ec9dd |
host_system = host_machine.system()
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
# Compiler and linker flags
|
|
Packit |
0ec9dd |
common_cflags = []
|
|
Packit |
0ec9dd |
common_cppflags = []
|
|
Packit |
0ec9dd |
common_ldflags = []
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
# Add more compiler warnings to the default set
|
|
Packit |
0ec9dd |
if cc.get_id() == 'msvc'
|
|
Packit |
0ec9dd |
# Compiler options taken from msvc_recommended_pragmas.h
|
|
Packit |
0ec9dd |
# in GLib, based on _Win32_Programming_ by Rector and Newcomer
|
|
Packit |
0ec9dd |
test_cflags = []
|
|
Packit |
0ec9dd |
add_project_arguments([ '-FImsvc_recommended_pragmas.h' ], language: 'c')
|
|
Packit |
0ec9dd |
test_c_only_flags = []
|
|
Packit |
0ec9dd |
elif cc.get_id() == 'gcc' or cc.get_id() == 'clang'
|
|
Packit |
0ec9dd |
test_c_only_flags = [
|
|
Packit |
0ec9dd |
'-Wimplicit-function-declaration',
|
|
Packit |
0ec9dd |
'-Wstrict-prototypes',
|
|
Packit |
0ec9dd |
'-Wmissing-prototypes',
|
|
Packit |
0ec9dd |
'-Wnested-externs',
|
|
Packit |
0ec9dd |
'-Wold-style-definition',
|
|
Packit |
0ec9dd |
'-Wno-int-conversion',
|
|
Packit |
0ec9dd |
'-Wno-discarded-qualifiers',
|
|
Packit |
0ec9dd |
]
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
test_cflags = test_c_only_flags + [
|
|
Packit |
0ec9dd |
'-fno-strict-aliasing',
|
|
Packit |
0ec9dd |
'-Wpointer-arith',
|
|
Packit |
0ec9dd |
'-Wmissing-declarations',
|
|
Packit |
0ec9dd |
'-Wformat=2',
|
|
Packit |
0ec9dd |
'-Wformat-nonliteral',
|
|
Packit |
0ec9dd |
'-Wformat-security',
|
|
Packit |
0ec9dd |
'-Wunused',
|
|
Packit |
0ec9dd |
'-Wcast-align',
|
|
Packit |
0ec9dd |
'-Wmissing-noreturn',
|
|
Packit |
0ec9dd |
'-Wmissing-format-attribute',
|
|
Packit |
0ec9dd |
'-Wmissing-include-dirs',
|
|
Packit |
0ec9dd |
'-Wlogical-op',
|
|
Packit |
0ec9dd |
'-Wno-uninitialized',
|
|
Packit |
0ec9dd |
'-Wno-shadow',
|
|
Packit |
0ec9dd |
'-Werror=redundant-decls',
|
|
Packit |
0ec9dd |
'-Werror=implicit',
|
|
Packit |
0ec9dd |
'-Werror=nonnull',
|
|
Packit |
0ec9dd |
'-Werror=init-self',
|
|
Packit |
0ec9dd |
'-Werror=main',
|
|
Packit |
0ec9dd |
'-Werror=missing-braces',
|
|
Packit |
0ec9dd |
'-Werror=sequence-point',
|
|
Packit |
0ec9dd |
'-Werror=return-type',
|
|
Packit |
0ec9dd |
'-Werror=trigraphs',
|
|
Packit |
0ec9dd |
'-Werror=array-bounds',
|
|
Packit |
0ec9dd |
'-Werror=write-strings',
|
|
Packit |
0ec9dd |
'-Werror=address',
|
|
Packit |
0ec9dd |
'-Werror=int-to-pointer-cast',
|
|
Packit |
0ec9dd |
'-Werror=pointer-to-int-cast',
|
|
Packit |
0ec9dd |
'-Werror=empty-body',
|
|
Packit |
0ec9dd |
'-Werror=write-strings',
|
|
Packit |
0ec9dd |
'-Wundef', # FIXME: https://bugzilla.gnome.org/show_bug.cgi?id=792481
|
|
Packit |
0ec9dd |
]
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
if host_system == 'windows'
|
|
Packit |
0ec9dd |
test_cflags += [ '-mms-bitfields' ]
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
else
|
|
Packit |
0ec9dd |
test_cflags = []
|
|
Packit |
0ec9dd |
test_c_only_flags = []
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
# Symbol visibility
|
|
Packit |
0ec9dd |
if get_option('default_library') != 'static'
|
|
Packit |
0ec9dd |
if host_system == 'windows'
|
|
Packit |
0ec9dd |
pango_conf.set('DLL_EXPORT', true)
|
|
Packit |
0ec9dd |
pango_conf.set('_PANGO_EXTERN', '__declspec(dllexport) extern')
|
|
Packit |
0ec9dd |
if cc.get_id() != 'msvc'
|
|
Packit |
0ec9dd |
test_cflags += ['-fvisibility=hidden']
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
else
|
|
Packit |
0ec9dd |
pango_conf.set('_PANGO_EXTERN', '__attribute__((visibility("default"))) extern')
|
|
Packit |
0ec9dd |
test_cflags += ['-fvisibility=hidden']
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
# Check all compiler flags
|
|
Packit |
0ec9dd |
foreach cflag: test_cflags
|
|
Packit |
0ec9dd |
if cc.has_argument(cflag)
|
|
Packit |
0ec9dd |
common_cflags += [ cflag ]
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endforeach
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
# Isolate the C++ compiler flags
|
|
Packit |
0ec9dd |
foreach cflag: common_cflags
|
|
Packit |
0ec9dd |
if not test_c_only_flags.contains(cflag)
|
|
Packit |
0ec9dd |
common_cppflags += [ cflag ]
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endforeach
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
# Linker flags
|
|
Packit |
0ec9dd |
if host_machine.system() == 'linux'
|
|
Packit |
0ec9dd |
foreach ldflag: [ '-Wl,-Bsymbolic', '-Wl,-z,relro', '-Wl,-z,now', ]
|
|
Packit |
0ec9dd |
if cc.has_argument(ldflag)
|
|
Packit |
0ec9dd |
common_ldflags += [ ldflag ]
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endforeach
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
# Maintain compatibility with autotools on macOS
|
|
Packit |
0ec9dd |
if host_machine.system() == 'darwin'
|
|
Packit |
0ec9dd |
common_ldflags += [ '-compatibility_version 1', '-current_version 1.0', ]
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
# Functions
|
|
Packit |
0ec9dd |
checked_funcs = [
|
|
Packit |
0ec9dd |
'sysconf',
|
|
Packit |
0ec9dd |
'getpagesize',
|
|
Packit |
0ec9dd |
'flockfile',
|
|
Packit |
0ec9dd |
'strtok_r',
|
|
Packit |
0ec9dd |
]
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
foreach f: checked_funcs
|
|
Packit |
0ec9dd |
if cc.has_function(f)
|
|
Packit |
0ec9dd |
pango_conf.set('HAVE_' + f.underscorify().to_upper(), 1)
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endforeach
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
# Headers
|
|
Packit |
0ec9dd |
checked_headers = [
|
|
Packit |
0ec9dd |
'unistd.h',
|
|
Packit |
0ec9dd |
'sys/mman.h',
|
|
Packit |
0ec9dd |
'dirent.h',
|
|
Packit |
0ec9dd |
]
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
foreach h: checked_headers
|
|
Packit |
0ec9dd |
if cc.has_header(h)
|
|
Packit |
0ec9dd |
pango_conf.set('HAVE_' + h.underscorify().to_upper(), 1)
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endforeach
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
buildtype = get_option('buildtype')
|
|
Packit |
0ec9dd |
if buildtype.startswith('debug')
|
|
Packit |
0ec9dd |
pango_debug_cflags = [ '-DPANGO_ENABLE_DEBUG', ]
|
|
Packit |
0ec9dd |
elif buildtype == 'release'
|
|
Packit |
0ec9dd |
pango_debug_cflags = [ '-DG_DISABLE_CAST_CHECKS', ]
|
|
Packit |
0ec9dd |
# TODO: We may want a configuration argument to add `G_DISABLE_CHECKS`
|
|
Packit |
0ec9dd |
# and `G_DISABLE_ASSERT` from the build, for specific build environments.
|
|
Packit |
0ec9dd |
# On the other hand, those who need these symbols can inject them in their
|
|
Packit |
0ec9dd |
# build as well.
|
|
Packit |
0ec9dd |
else
|
|
Packit |
0ec9dd |
pango_debug_cflags = []
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
# Dependencies
|
|
Packit |
0ec9dd |
pango_deps = []
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
glib_req_version = '>= 2.33.12'
|
|
Packit |
0ec9dd |
fribidi_req_version = '>= 0.19.7'
|
|
Packit |
0ec9dd |
libthai_req_version = '>= 0.1.9'
|
|
Packit |
0ec9dd |
harfbuzz_req_version = '>= 1.4.2'
|
|
Packit |
0ec9dd |
fontconfig_req_version = '>= 2.11.91'
|
|
Packit |
0ec9dd |
xft_req_version = '>= 2.0.0'
|
|
Packit |
0ec9dd |
cairo_req_version = '>= 1.12.10'
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
# libm
|
|
Packit |
0ec9dd |
mathlib_dep = cc.find_library('m', required: false)
|
|
Packit |
0ec9dd |
pango_deps += mathlib_dep
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
# gobject
|
|
Packit |
0ec9dd |
gobject_dep = dependency('gobject-2.0', version: glib_req_version)
|
|
Packit |
0ec9dd |
pango_deps += gobject_dep
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
fribidi_dep = dependency('fribidi', version: fribidi_req_version)
|
|
Packit |
0ec9dd |
pango_deps += fribidi_dep
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
thai_dep = dependency('libthai', version: libthai_req_version, required: false)
|
|
Packit |
0ec9dd |
if thai_dep.found()
|
|
Packit |
0ec9dd |
pango_conf.set('HAVE_LIBTHAI', 1)
|
|
Packit |
0ec9dd |
pango_deps += thai_dep
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
if cc.has_function('th_brk_find_breaks', dependencies: thai_dep)
|
|
Packit |
0ec9dd |
pango_conf.set('HAVE_TH_BRK_FIND_BREAKS', 1)
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
# These are for the various .pc files so that things will link
|
|
Packit |
0ec9dd |
# properly, depending on whether we have the pkg-config files
|
|
Packit |
0ec9dd |
# for those non-GNOME dependencies, or when we find them manually
|
|
Packit |
0ec9dd |
# for MSVC builds, as their MSVC build systems do not generate
|
|
Packit |
0ec9dd |
# pkg-config files for them
|
|
Packit |
0ec9dd |
cairo_pc = ''
|
|
Packit |
0ec9dd |
cairo_lib = ''
|
|
Packit |
0ec9dd |
harfbuzz_pc=''
|
|
Packit |
0ec9dd |
freetype2_pc=''
|
|
Packit |
0ec9dd |
fontconfig_pc=''
|
|
Packit |
0ec9dd |
harfbuzz_lib=''
|
|
Packit |
0ec9dd |
freetype2_lib=''
|
|
Packit |
0ec9dd |
fontconfig_lib=''
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
harfbuzz_dep = dependency('harfbuzz', version: harfbuzz_req_version, required: false)
|
|
Packit |
0ec9dd |
if harfbuzz_dep.found()
|
|
Packit |
0ec9dd |
harfbuzz_pc = 'harfbuzz'
|
|
Packit |
0ec9dd |
else
|
|
Packit |
0ec9dd |
if cc.get_id() == 'msvc' and cc.has_header('hb.h')
|
|
Packit |
0ec9dd |
# The CMake build files for HarfBuzz (which is used for MSVC builds) do not
|
|
Packit |
0ec9dd |
# generate pkg-config files, so look for harfbuzz.lib
|
|
Packit |
0ec9dd |
harfbuzz_dep = cc.find_library('harfbuzz', required: false)
|
|
Packit |
0ec9dd |
if harfbuzz_dep.found()
|
|
Packit |
0ec9dd |
harfbuzz_lib = '-lharfbuzz'
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
if harfbuzz_dep.found()
|
|
Packit |
0ec9dd |
pango_deps += harfbuzz_dep
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
fontconfig_dep = dependency('fontconfig', version: fontconfig_req_version, required: false)
|
|
Packit |
0ec9dd |
if fontconfig_dep.found()
|
|
Packit |
0ec9dd |
fontconfig_pc = 'fontconfig'
|
|
Packit |
0ec9dd |
else
|
|
Packit |
0ec9dd |
if cc.get_id() == 'msvc' and cc.has_header('fontconfig/fontconfig.h')
|
|
Packit |
0ec9dd |
# Look for the Visual Studio-style import library if FontConfig's .pc file cannot be
|
|
Packit |
0ec9dd |
# found on Visual Studio
|
|
Packit |
0ec9dd |
fontconfig_dep = cc.find_library('fontconfig', required: false)
|
|
Packit |
0ec9dd |
if fontconfig_dep.found()
|
|
Packit |
0ec9dd |
fontconfig_lib = '-lfontconfig'
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
if fontconfig_dep.found()
|
|
Packit |
0ec9dd |
pango_deps += fontconfig_dep
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
if cc.has_function('FcWeightFromOpenTypeDouble', dependencies: fontconfig_dep)
|
|
Packit |
0ec9dd |
pango_conf.set('HAVE_FCWEIGHTFROMOPENTYPEDOUBLE', 1)
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
# The first version of freetype with a pkg-config file is 2.1.5
|
|
Packit |
0ec9dd |
# We require both fontconfig and freetype if we are to have either.
|
|
Packit |
0ec9dd |
freetype_dep = dependency('freetype2', required: false)
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
if freetype_dep.found()
|
|
Packit |
0ec9dd |
freetype2_pc = 'freetype2'
|
|
Packit |
0ec9dd |
else
|
|
Packit |
0ec9dd |
if cc.get_id() == 'msvc' and cc.has_header('ft2build.h')
|
|
Packit |
0ec9dd |
foreach ft2_lib: ['freetype', 'freetypemt']
|
|
Packit |
0ec9dd |
if not freetype_dep.found()
|
|
Packit |
0ec9dd |
freetype_dep = cc.find_library(ft2_lib, required: false)
|
|
Packit |
0ec9dd |
if freetype_dep.found()
|
|
Packit |
0ec9dd |
freetype2_lib = '-l@0@'.format(ft2_lib)
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endforeach
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
# To build pangoft2, we need HarfBuzz, FontConfig and FreeType
|
|
Packit |
0ec9dd |
build_pangoft2 = harfbuzz_dep.found() and fontconfig_dep.found() and freetype_dep.found()
|
|
Packit |
0ec9dd |
if build_pangoft2
|
|
Packit |
0ec9dd |
pango_conf.set('HAVE_FREETYPE', 1)
|
|
Packit |
0ec9dd |
pango_deps += freetype_dep
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
xft_dep = dependency('xft', version: xft_req_version, required: false)
|
|
Packit |
0ec9dd |
if xft_dep.found()
|
|
Packit |
0ec9dd |
pango_conf.set('HAVE_XFT', 1)
|
|
Packit |
0ec9dd |
pango_deps += dependency('xrender', required: false)
|
|
Packit |
0ec9dd |
pango_deps += xft_dep
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
if host_system == 'darwin'
|
|
Packit |
0ec9dd |
has_core_text = cc.links('''#include <Carbon/Carbon.h>
|
|
Packit |
0ec9dd |
int main (void) {
|
|
Packit |
0ec9dd |
CTGetCoreTextVersion ();
|
|
Packit |
0ec9dd |
return 0;
|
|
Packit |
0ec9dd |
}''',
|
|
Packit |
0ec9dd |
name: 'CoreText availability',
|
|
Packit |
0ec9dd |
dependencies: dependency('appleframeworks', modules: 'ApplicationServices'))
|
|
Packit |
0ec9dd |
if has_core_text
|
|
Packit |
0ec9dd |
pango_conf.set('HAVE_CORE_TEXT', 1)
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
cairo_pkgconfig_found = false
|
|
Packit |
0ec9dd |
cairo_dep = dependency('cairo', version: cairo_req_version, required: false)
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
if cairo_dep.found()
|
|
Packit |
0ec9dd |
cairo_pkgconfig_found = true
|
|
Packit |
0ec9dd |
else
|
|
Packit |
0ec9dd |
if cc.get_id() == 'msvc' and cc.has_header('cairo.h')
|
|
Packit |
0ec9dd |
cairo_dep = cc.find_library('cairo', required: false)
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
pango_font_backends = []
|
|
Packit |
0ec9dd |
pango_cairo_backends = []
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
if cairo_pkgconfig_found
|
|
Packit |
0ec9dd |
# Check the following Cairo font backends
|
|
Packit |
0ec9dd |
# - dependency
|
|
Packit |
0ec9dd |
# - version
|
|
Packit |
0ec9dd |
# - define
|
|
Packit |
0ec9dd |
# - backend name
|
|
Packit |
0ec9dd |
# Note that Cairo can be built with FreeType but without FontConfig
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
cairo_font_backends = [
|
|
Packit |
0ec9dd |
[ 'cairo-ft', cairo_req_version, 'HAVE_CAIRO_FREETYPE', 'freetype', ],
|
|
Packit |
0ec9dd |
[ 'cairo-win32', cairo_req_version, 'HAVE_CAIRO_WIN32', 'win32', ],
|
|
Packit |
0ec9dd |
[ 'cairo-quartz', cairo_req_version, 'HAVE_CAIRO_QUARTZ', 'quartz', ],
|
|
Packit |
0ec9dd |
]
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
foreach b: cairo_font_backends
|
|
Packit |
0ec9dd |
dep = dependency(b[0], version: b[1], required: false)
|
|
Packit |
0ec9dd |
if dep.found()
|
|
Packit |
0ec9dd |
if b[0] == 'cairo-ft'
|
|
Packit |
0ec9dd |
if build_pangoft2
|
|
Packit |
0ec9dd |
pango_conf.set(b[2], 1)
|
|
Packit |
0ec9dd |
pango_font_backends += b[3]
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
else
|
|
Packit |
0ec9dd |
pango_conf.set(b[2], 1)
|
|
Packit |
0ec9dd |
pango_font_backends += b[3]
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endforeach
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
if pango_font_backends.length() == 0
|
|
Packit |
0ec9dd |
error('No Cairo font backends found')
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
# Check the following Cairo surface backends
|
|
Packit |
0ec9dd |
# - dependency
|
|
Packit |
0ec9dd |
# - version
|
|
Packit |
0ec9dd |
# - define
|
|
Packit |
0ec9dd |
# - backend name
|
|
Packit |
0ec9dd |
cairo_surface_backends = [
|
|
Packit |
0ec9dd |
[ 'cairo-png', cairo_req_version, 'HAVE_CAIRO_PNG', 'png', ],
|
|
Packit |
0ec9dd |
[ 'cairo-ps', cairo_req_version, 'HAVE_CAIRO_PS', 'ps', ],
|
|
Packit |
0ec9dd |
[ 'cairo-pdf', cairo_req_version, 'HAVE_CAIRO_PDF', 'pdf', ],
|
|
Packit |
0ec9dd |
[ 'cairo-xlib', cairo_req_version, 'HAVE_CAIRO_XLIB', 'xlib', ],
|
|
Packit |
0ec9dd |
]
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
foreach b: cairo_surface_backends
|
|
Packit |
0ec9dd |
dep = dependency(b[0], version: b[1], required: false)
|
|
Packit |
0ec9dd |
if dep.found()
|
|
Packit |
0ec9dd |
pango_conf.set(b[2], 1)
|
|
Packit |
0ec9dd |
pango_cairo_backends += b[3]
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endforeach
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
# This is to set up pangocairo.pc so that things that refer to
|
|
Packit |
0ec9dd |
# it will link correctly
|
|
Packit |
0ec9dd |
cairo_pc = 'cairo'
|
|
Packit |
0ec9dd |
elif (cc.get_id() == 'msvc' and cairo_dep.found())
|
|
Packit |
0ec9dd |
# Fallback: Look for Cairo items manually
|
|
Packit |
0ec9dd |
# We need to check for headers for some
|
|
Packit |
0ec9dd |
cairo_headers = [ 'win32', 'quartz', 'ps', 'pdf', 'xlib' ]
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
foreach header : cairo_headers
|
|
Packit |
0ec9dd |
if cc.has_header('cairo-@0@.h'.format(header))
|
|
Packit |
0ec9dd |
pango_conf.set('HAVE_CAIRO_@0@'.format(header.underscorify().to_upper()), 1)
|
|
Packit |
0ec9dd |
if header == 'win32' or header == 'quartz'
|
|
Packit |
0ec9dd |
pango_font_backends += header
|
|
Packit |
0ec9dd |
else
|
|
Packit |
0ec9dd |
pango_cairo_backends += header
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endforeach
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
# Other cairo features that we need to check for symbols
|
|
Packit |
0ec9dd |
# Note that Cairo with FreeType support can be without FontConfig
|
|
Packit |
0ec9dd |
# support, so we must check for FontConfig support in Cairo
|
|
Packit |
0ec9dd |
if cc.links('''#include <cairo-ft.h>
|
|
Packit |
0ec9dd |
int main() {
|
|
Packit |
0ec9dd |
FcPattern *p = NULL;
|
|
Packit |
0ec9dd |
cairo_ft_font_face_create_for_pattern (p);
|
|
Packit |
0ec9dd |
return 0;
|
|
Packit |
0ec9dd |
}''',
|
|
Packit |
0ec9dd |
dependencies: cairo_dep,
|
|
Packit |
0ec9dd |
name : 'Cairo is built with FreeType and FontConfig support')
|
|
Packit |
0ec9dd |
if build_pangoft2
|
|
Packit |
0ec9dd |
pango_conf.set('HAVE_CAIRO_FREETYPE', 1)
|
|
Packit |
0ec9dd |
pango_font_backends += 'freetype'
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
if pango_font_backends.length() == 0
|
|
Packit |
0ec9dd |
error('No Cairo font backends found')
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
# Check for Cairo's libpng output surface support
|
|
Packit |
0ec9dd |
if cc.links('''#include <cairo.h>
|
|
Packit |
0ec9dd |
#include <stdio.h>
|
|
Packit |
0ec9dd |
int main() {
|
|
Packit |
0ec9dd |
cairo_surface_t *s = NULL;
|
|
Packit |
0ec9dd |
const char *f = "abc.png";
|
|
Packit |
0ec9dd |
cairo_surface_write_to_png (s, f);
|
|
Packit |
0ec9dd |
return 0;
|
|
Packit |
0ec9dd |
}''',
|
|
Packit |
0ec9dd |
dependencies: cairo_dep,
|
|
Packit |
0ec9dd |
name : 'Cairo is built with PNG output surface support')
|
|
Packit |
0ec9dd |
pango_conf.set('HAVE_CAIRO_PNG', 1)
|
|
Packit |
0ec9dd |
pango_cairo_backends += 'png'
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
# This is to set up pangocairo.pc so that things that refer to
|
|
Packit |
0ec9dd |
# it will link correctly, when we don't have pkg-config files for cairo
|
|
Packit |
0ec9dd |
cairo_lib = '-lcairo'
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
if cairo_dep.found()
|
|
Packit |
0ec9dd |
pango_conf.set('HAVE_CAIRO', 1)
|
|
Packit |
0ec9dd |
pango_deps += cairo_dep
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
pangocairo_requires = ''
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
if pango_font_backends.contains('freetype')
|
|
Packit |
0ec9dd |
pangocairo_requires += 'pangoft2 '
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
if pango_font_backends.contains('win32')
|
|
Packit |
0ec9dd |
pangocairo_requires += 'pangowin32 '
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
# Compat variables for pkgconfig
|
|
Packit |
0ec9dd |
pkgconf = configuration_data()
|
|
Packit |
0ec9dd |
pkgconf.set('prefix', pango_prefix)
|
|
Packit |
0ec9dd |
pkgconf.set('exec_prefix', pango_prefix)
|
|
Packit |
0ec9dd |
pkgconf.set('libdir', pango_libdir)
|
|
Packit |
0ec9dd |
pkgconf.set('includedir', pango_includedir)
|
|
Packit |
0ec9dd |
pkgconf.set('VERSION', meson.project_version())
|
|
Packit |
0ec9dd |
pkgconf.set('PANGO_API_VERSION', pango_api_version)
|
|
Packit |
0ec9dd |
pkgconf.set('PKGCONFIG_CAIRO_REQUIRES', pangocairo_requires)
|
|
Packit |
0ec9dd |
pkgconf.set('CAIRO_PC', cairo_pc)
|
|
Packit |
0ec9dd |
pkgconf.set('CAIRO_LIB', cairo_lib)
|
|
Packit |
0ec9dd |
pkgconf.set('FREETYPE2_PC', freetype2_pc)
|
|
Packit |
0ec9dd |
pkgconf.set('FREETYPE2_LIB', freetype2_lib)
|
|
Packit |
0ec9dd |
pkgconf.set('FONTCONFIG_PC', fontconfig_pc)
|
|
Packit |
0ec9dd |
pkgconf.set('FONTCONFIG_LIB', fontconfig_lib)
|
|
Packit |
0ec9dd |
pkgconf.set('HARFBUZZ_PC', harfbuzz_pc)
|
|
Packit |
0ec9dd |
pkgconf.set('HARFBUZZ_LIB', harfbuzz_lib)
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
pkgconf_files = [
|
|
Packit |
0ec9dd |
[ 'pango.pc' ],
|
|
Packit |
0ec9dd |
[ 'pangowin32.pc', host_system == 'windows' ],
|
|
Packit |
0ec9dd |
[ 'pangoft2.pc', build_pangoft2 ],
|
|
Packit |
0ec9dd |
[ 'pangoxft.pc', xft_dep.found() ],
|
|
Packit |
0ec9dd |
[ 'pangocairo.pc', cairo_dep.found() ],
|
|
Packit |
0ec9dd |
]
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
foreach pkg: pkgconf_files
|
|
Packit |
0ec9dd |
pkg_name = pkg[0]
|
|
Packit |
0ec9dd |
pkg_enabled = pkg.get(1, true)
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
if pkg_enabled
|
|
Packit |
0ec9dd |
configure_file(input: pkg_name + '.in',
|
|
Packit |
0ec9dd |
output: pkg_name,
|
|
Packit |
0ec9dd |
configuration: pkgconf,
|
|
Packit |
0ec9dd |
install: true,
|
|
Packit |
0ec9dd |
install_dir: join_paths(pango_libdir, 'pkgconfig'))
|
|
Packit |
0ec9dd |
endif
|
|
Packit |
0ec9dd |
endforeach
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
gnome = import('gnome')
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
# Internal configuration header
|
|
Packit |
0ec9dd |
configure_file(output: 'config.h', configuration: pango_conf)
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
root_inc = include_directories('.')
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
subdir('pango')
|
|
Packit |
0ec9dd |
subdir('utils')
|
|
Packit |
0ec9dd |
subdir('examples')
|
|
Packit |
0ec9dd |
subdir('tests')
|
|
Packit |
0ec9dd |
subdir('tools')
|
|
Packit |
0ec9dd |
|
|
Packit |
0ec9dd |
if get_option('enable_docs')
|
|
Packit |
0ec9dd |
subdir('docs')
|
|
Packit |
0ec9dd |
endif
|