2021-08-08 10:44:19 +09:30
|
|
|
project('cairo', 'c', 'cpp',
|
2021-02-25 00:31:31 +00:00
|
|
|
meson_version: '>= 0.56.0',
|
2020-09-23 19:27:34 +01:00
|
|
|
version: run_command(find_program('version.py'), check: true).stdout().strip(),
|
2021-08-15 19:06:10 +01:00
|
|
|
default_options: ['warning_level=2'],
|
2018-05-21 20:08:22 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# Keep in sync with configure.ac!
|
|
|
|
|
freetype_required_version = '>= 9.7.3'
|
|
|
|
|
fontconfig_required_version = '>= 2.2.95'
|
|
|
|
|
xrender_required_version = '>= 0.6'
|
|
|
|
|
xcb_required_version = '>= 1.6'
|
|
|
|
|
xcb_render_required_version = '>= 1.6'
|
|
|
|
|
libudev_required_version = '>= 136'
|
|
|
|
|
glib_required_version = '>= 2.14'
|
|
|
|
|
|
2020-12-15 00:12:55 +00:00
|
|
|
# library versioning
|
|
|
|
|
version_arr = meson.project_version().split('.')
|
|
|
|
|
cairo_version_major = version_arr[0].to_int()
|
|
|
|
|
cairo_version_minor = version_arr[1].to_int()
|
|
|
|
|
cairo_version_micro = version_arr[2].to_int()
|
|
|
|
|
|
|
|
|
|
# The libtool shared library version stuff.
|
|
|
|
|
# Try and maintain compatibility with the previous library versioning.
|
|
|
|
|
cairo_version_sonum = cairo_version_major + 1
|
|
|
|
|
cairo_version = cairo_version_major * 10000 + cairo_version_minor * 100 + cairo_version_micro
|
|
|
|
|
|
|
|
|
|
if cairo_version_minor % 2 == 1
|
|
|
|
|
# unstable release
|
|
|
|
|
cairo_libversion = '@0@.@1@.0'.format(cairo_version_sonum, cairo_version)
|
|
|
|
|
else
|
|
|
|
|
# stable release
|
|
|
|
|
cairo_libversion = '@0@.@1@.@2@'.format(cairo_version_sonum, cairo_version, cairo_version_micro)
|
|
|
|
|
endif
|
|
|
|
|
|
2021-08-14 07:24:40 +00:00
|
|
|
conf = configuration_data()
|
|
|
|
|
|
2020-12-15 00:12:55 +00:00
|
|
|
cc = meson.get_compiler('c')
|
|
|
|
|
|
2021-08-14 07:24:40 +00:00
|
|
|
# Compiler flags
|
|
|
|
|
cflags = []
|
|
|
|
|
if cc.get_id() != 'msvc'
|
|
|
|
|
cflags += [
|
|
|
|
|
'-Wmissing-declarations',
|
|
|
|
|
'-Werror-implicit-function-declaration',
|
|
|
|
|
'-Wpointer-arith',
|
|
|
|
|
'-Wwrite-strings',
|
|
|
|
|
'-Wsign-compare',
|
|
|
|
|
'-Wpacked',
|
|
|
|
|
'-Wswitch-enum',
|
|
|
|
|
'-Wmissing-format-attribute',
|
|
|
|
|
'-Wvolatile-register-var',
|
|
|
|
|
'-Wstrict-aliasing=2',
|
|
|
|
|
'-Winit-self',
|
|
|
|
|
'-Wunsafe-loop-optimizations',
|
|
|
|
|
'-Wno-missing-field-initializers',
|
|
|
|
|
'-Wno-unused-parameter',
|
|
|
|
|
'-Wno-attributes',
|
|
|
|
|
'-Wno-long-long',
|
|
|
|
|
'-Winline'
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
cflags += ['-Wno-unused-but-set-variable',
|
|
|
|
|
'-Wno-enum-conversion'
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
cflags += [
|
|
|
|
|
'-fno-strict-aliasing',
|
|
|
|
|
'-fno-common'
|
|
|
|
|
]
|
|
|
|
|
|
2021-08-15 19:12:49 +01:00
|
|
|
if get_option('optimization') in ['1', '2', '3']
|
2022-10-14 16:28:11 +02:00
|
|
|
cflags += '-Wp,-D_FORTIFY_SOURCE=2'
|
2021-08-15 19:12:49 +01:00
|
|
|
endif
|
2021-08-14 07:24:40 +00:00
|
|
|
|
|
|
|
|
supported_cflags = cc.get_supported_arguments(cflags)
|
|
|
|
|
add_project_arguments(supported_cflags, language: 'c')
|
|
|
|
|
|
|
|
|
|
# We only wish to enable attribute(warn_unused_result) if we can prevent
|
|
|
|
|
# gcc from generating thousands of warnings about the misapplication of the
|
|
|
|
|
# attribute to void functions and variables.
|
|
|
|
|
warn_unused_result = ''
|
|
|
|
|
if supported_cflags.contains('-Wno-attributes')
|
|
|
|
|
if cc.compiles(files('meson-cc-tests/check-unused-result.c'), args : ['-Wno-attributes', '-Werror'])
|
|
|
|
|
warn_unused_result = '__attribute__((__warn_unused_result__))'
|
|
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
conf.set('WARN_UNUSED_RESULT', warn_unused_result)
|
|
|
|
|
endif
|
|
|
|
|
|
2018-05-21 20:08:22 +02:00
|
|
|
if cc.get_id() == 'msvc'
|
|
|
|
|
# Basic usage in the cairo type system that causes spammy and useless warnings
|
|
|
|
|
add_project_arguments('/wd4244', '/wd4146',
|
|
|
|
|
# Don't warn about double -> float truncation
|
|
|
|
|
'/wd4305',
|
|
|
|
|
language : 'c')
|
|
|
|
|
endif
|
|
|
|
|
|
2021-04-18 11:12:42 +01:00
|
|
|
add_project_arguments('-D_GNU_SOURCE', language: 'c')
|
|
|
|
|
|
2021-05-01 16:55:38 +01:00
|
|
|
# Autotools compatibility
|
|
|
|
|
add_project_arguments('-DHAVE_CONFIG_H', language: 'c')
|
|
|
|
|
|
2020-09-19 14:07:28 +01:00
|
|
|
# Make sure source directory hasn't been configured with autotools
|
2022-01-09 17:17:28 +05:30
|
|
|
fs = import('fs')
|
|
|
|
|
if fs.exists('config.h') or fs.exists('src/cairo-features.h') or fs.exists('src/cairo-supported-features.h')
|
|
|
|
|
error('''
|
|
|
|
|
The source directory '@0@' appears to contain
|
|
|
|
|
autotools configuration artifacts. This can cause difficult to
|
|
|
|
|
debug build problems. Please clean it up and then re-run meson.
|
|
|
|
|
'''.format(meson.source_root()))
|
2020-09-19 14:07:28 +01:00
|
|
|
endif
|
|
|
|
|
|
2018-05-21 20:08:22 +02:00
|
|
|
pkgmod = import('pkgconfig')
|
|
|
|
|
python3 = import('python').find_installation()
|
|
|
|
|
|
|
|
|
|
check_sizeofs = [
|
|
|
|
|
['void *', {'conf-name': 'SIZEOF_VOID_P'}],
|
|
|
|
|
['int'],
|
|
|
|
|
['long'],
|
|
|
|
|
['long long'],
|
|
|
|
|
['size_t'],
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
check_headers = [
|
|
|
|
|
['stdint.h'],
|
|
|
|
|
['inttypes.h'],
|
|
|
|
|
['sys/int_types.h'],
|
|
|
|
|
['fcntl.h'],
|
|
|
|
|
['unistd.h'],
|
|
|
|
|
['signal.h'],
|
|
|
|
|
['sys/stat.h'],
|
|
|
|
|
['sys/socket.h'],
|
2020-08-31 01:36:20 -06:00
|
|
|
['poll.h'],
|
2018-05-21 20:08:22 +02:00
|
|
|
['sys/poll.h'],
|
|
|
|
|
['sys/un.h'],
|
|
|
|
|
['sched.h', {'check-funcs': ['sched_getaffinity']}],
|
|
|
|
|
['sys/mman.h', {'check-funcs': ['mmap']}],
|
|
|
|
|
['time.h', {'check-funcs': ['clock_gettime']}],
|
|
|
|
|
['libgen.h'],
|
|
|
|
|
['byteswap.h'],
|
|
|
|
|
['signal.h'],
|
|
|
|
|
['setjmp.h'],
|
|
|
|
|
['fenv.h'],
|
|
|
|
|
['sys/wait.h'],
|
|
|
|
|
['sys/stat.h'],
|
|
|
|
|
['io.h'],
|
|
|
|
|
['fenv.h', {'check-funcs': ['feenableexcept', 'fedisableexcept', 'feclearexcept']}],
|
|
|
|
|
['xlocale.h'],
|
|
|
|
|
['sys/ioctl.h'],
|
2021-08-15 16:13:15 +09:30
|
|
|
['intsafe.h'],
|
2018-05-21 20:08:22 +02:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
check_types = [
|
|
|
|
|
['uint64_t', {'headers': ['stdint.h']}],
|
|
|
|
|
['uint128_t', {'headers': ['stdint.h']}],
|
|
|
|
|
['__uint128_t']
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
check_funcs = [
|
|
|
|
|
'alarm',
|
|
|
|
|
'ctime_r',
|
|
|
|
|
'localtime_r',
|
|
|
|
|
'gmtime_r',
|
|
|
|
|
'drand48',
|
|
|
|
|
'flockfile',
|
|
|
|
|
'funlockfile',
|
|
|
|
|
'getline',
|
|
|
|
|
'link',
|
|
|
|
|
'fork',
|
|
|
|
|
'waitpid',
|
|
|
|
|
'raise',
|
|
|
|
|
'newlocale',
|
|
|
|
|
'strtod_l',
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
check_thread_flags = [
|
|
|
|
|
[['-D_REENTRANT'], ['-lpthread']],
|
|
|
|
|
[['-pthread'], []],
|
|
|
|
|
[['-D_REENTRANT'], [], {'real': false}],
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
m_dep = cc.find_library('m', required: false)
|
|
|
|
|
# Used in util
|
|
|
|
|
gtk_dep = dependency('gtk+-2.0', required: get_option('gtk2-utils'))
|
|
|
|
|
|
|
|
|
|
deps = [m_dep]
|
|
|
|
|
test_deps = []
|
|
|
|
|
internal_deps = []
|
|
|
|
|
extra_link_args = []
|
|
|
|
|
|
2021-07-25 11:59:40 +09:30
|
|
|
if host_machine.endian() == 'big'
|
|
|
|
|
conf.set('WORDS_BIGENDIAN', 1)
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
float_order = cc.get_define('__FLOAT_WORD_ORDER__')
|
|
|
|
|
if float_order != ''
|
|
|
|
|
if float_order == cc.get_define('__ORDER_BIG_ENDIAN__')
|
|
|
|
|
conf.set('FLOAT_WORDS_BIGENDIAN', 1)
|
|
|
|
|
endif
|
|
|
|
|
else
|
|
|
|
|
# Assume same as platform endian
|
|
|
|
|
if host_machine.endian() == 'big'
|
|
|
|
|
conf.set('FLOAT_WORDS_BIGENDIAN', 1)
|
|
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
|
2018-05-21 20:08:22 +02:00
|
|
|
lzo_dep = dependency('lzo2', required: false)
|
|
|
|
|
if lzo_dep.found()
|
|
|
|
|
conf.set('HAVE_LZO', 1)
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
dl_dep = cc.find_library('dl', required: false)
|
|
|
|
|
if dl_dep.found() and cc.has_function('dlsym', dependencies: [dl_dep])
|
|
|
|
|
deps += [dl_dep]
|
|
|
|
|
conf.set('CAIRO_HAS_DLSYM', 1)
|
|
|
|
|
elif cc.has_function('dlsym')
|
|
|
|
|
conf.set('CAIRO_HAS_DLSYM', 1)
|
|
|
|
|
elif cc.has_function('dlsym', prefix: '#include <dlfcn.h>')
|
|
|
|
|
conf.set('CAIRO_HAS_DLSYM', 1)
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
feature_conf = configuration_data()
|
|
|
|
|
|
|
|
|
|
# Array of dictionaries, used to generate per-feature pc files
|
|
|
|
|
# Mandatory keys: name, description
|
|
|
|
|
# Optional keys: requires, libs
|
|
|
|
|
built_features = []
|
|
|
|
|
|
|
|
|
|
zlib_dep = dependency('zlib',
|
|
|
|
|
required: get_option('zlib'),
|
|
|
|
|
fallback : ['zlib', 'zlib_dep'],
|
|
|
|
|
)
|
|
|
|
|
if zlib_dep.found()
|
|
|
|
|
if zlib_dep.type_name() == 'internal'
|
|
|
|
|
internal_deps += [zlib_dep]
|
|
|
|
|
else
|
|
|
|
|
deps += [zlib_dep]
|
|
|
|
|
endif
|
|
|
|
|
conf.set('HAVE_ZLIB', 1)
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
png_dep = dependency('libpng',
|
|
|
|
|
required: get_option('png'),
|
2020-11-10 16:18:50 +05:30
|
|
|
fallback: ['libpng', 'libpng_dep']
|
2018-05-21 20:08:22 +02:00
|
|
|
)
|
|
|
|
|
if png_dep.found()
|
|
|
|
|
feature_conf.set('CAIRO_HAS_SVG_SURFACE', 1)
|
|
|
|
|
feature_conf.set('CAIRO_HAS_PNG_FUNCTIONS', 1)
|
|
|
|
|
built_features += [
|
|
|
|
|
{
|
|
|
|
|
'name': 'cairo-png',
|
|
|
|
|
'description': 'PNG functions',
|
2020-10-05 10:32:27 -04:00
|
|
|
'deps': [png_dep],
|
2018-05-21 20:08:22 +02:00
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
'name': 'cairo-svg',
|
|
|
|
|
'description': 'SVG surface backend',
|
2020-10-05 10:32:27 -04:00
|
|
|
'deps': [png_dep],
|
2018-05-21 20:08:22 +02:00
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
if png_dep.type_name() == 'internal'
|
|
|
|
|
internal_deps += [png_dep]
|
|
|
|
|
else
|
|
|
|
|
deps += [png_dep]
|
|
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
|
2021-04-19 11:49:31 -04:00
|
|
|
# Don't build fontconfig as a subproject on Windows unless
|
|
|
|
|
# explicitly requested
|
|
|
|
|
fontconfig_option = get_option('fontconfig')
|
|
|
|
|
if host_machine.system() == 'windows' and not fontconfig_option.enabled()
|
|
|
|
|
fontconfig_option = false
|
|
|
|
|
endif
|
|
|
|
|
|
2020-10-06 11:25:54 -04:00
|
|
|
fontconfig_dep = dependency('fontconfig',
|
2021-04-19 11:49:31 -04:00
|
|
|
required: fontconfig_option,
|
2020-10-06 11:25:54 -04:00
|
|
|
version: fontconfig_required_version,
|
|
|
|
|
fallback: ['fontconfig', 'fontconfig_dep'],
|
|
|
|
|
)
|
|
|
|
|
if fontconfig_dep.found()
|
|
|
|
|
fc_check_funcs = [
|
|
|
|
|
'FcInit',
|
|
|
|
|
'FcFini'
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
if fontconfig_dep.type_name() == 'internal'
|
|
|
|
|
foreach func : fc_check_funcs
|
|
|
|
|
conf.set('HAVE_@0@'.format(func.to_upper()), 1)
|
|
|
|
|
endforeach
|
|
|
|
|
internal_deps += [fontconfig_dep]
|
|
|
|
|
else
|
|
|
|
|
check_funcs += fc_check_funcs
|
|
|
|
|
deps += [fontconfig_dep]
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
feature_conf.set('CAIRO_HAS_FC_FONT', 1)
|
|
|
|
|
built_features += [{
|
|
|
|
|
'name': 'cairo-fc',
|
|
|
|
|
'description': 'Fontconfig font backend',
|
|
|
|
|
'deps': [fontconfig_dep],
|
|
|
|
|
}]
|
|
|
|
|
endif
|
|
|
|
|
|
2018-05-21 20:08:22 +02:00
|
|
|
freetype_dep = dependency('freetype2',
|
|
|
|
|
required: get_option('freetype'),
|
|
|
|
|
version: freetype_required_version,
|
|
|
|
|
fallback: ['freetype2', 'freetype_dep'],
|
|
|
|
|
)
|
|
|
|
|
if freetype_dep.found()
|
|
|
|
|
feature_conf.set('CAIRO_HAS_FT_FONT', 1)
|
|
|
|
|
built_features += [{
|
|
|
|
|
'name': 'cairo-ft',
|
|
|
|
|
'description': 'Freetype font backend',
|
2020-10-05 10:32:27 -04:00
|
|
|
'deps': [freetype_dep],
|
2020-10-06 11:25:54 -04:00
|
|
|
# cairo-ft.h includes fontconfig.h so it needs its cflags
|
|
|
|
|
'compile-deps': [fontconfig_dep.partial_dependency(compile_args: true, includes: true)],
|
2018-05-21 20:08:22 +02:00
|
|
|
}]
|
|
|
|
|
|
|
|
|
|
ft_check_funcs = [
|
|
|
|
|
'FT_Get_X11_Font_Format',
|
|
|
|
|
'FT_GlyphSlot_Embolden',
|
|
|
|
|
'FT_GlyphSlot_Oblique',
|
|
|
|
|
'FT_Load_Sfnt_Table',
|
|
|
|
|
'FT_Library_SetLcdFilter',
|
|
|
|
|
'FT_Get_Var_Design_Coordinates',
|
|
|
|
|
'FT_Done_MM_Var',
|
2022-06-16 21:44:04 +09:30
|
|
|
'FT_Palette_Select',
|
2018-05-21 20:08:22 +02:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
if freetype_dep.type_name() == 'internal'
|
|
|
|
|
foreach func : ft_check_funcs
|
|
|
|
|
conf.set('HAVE_@0@'.format(func.to_upper()), 1)
|
|
|
|
|
endforeach
|
|
|
|
|
internal_deps += [freetype_dep]
|
|
|
|
|
else
|
|
|
|
|
if not cc.links(files('meson-cc-tests/ft_has_color.c'), dependencies: freetype_dep, name: 'FT has color')
|
|
|
|
|
conf.set('FT_HAS_COLOR', '(0)')
|
|
|
|
|
endif
|
|
|
|
|
check_funcs += ft_check_funcs
|
|
|
|
|
deps += [freetype_dep]
|
|
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
x11_dep = dependency('x11', required: get_option('xlib'))
|
|
|
|
|
xext_dep = dependency('xext', required: get_option('xlib'))
|
|
|
|
|
if x11_dep.found() and xext_dep.found()
|
|
|
|
|
feature_conf.set('CAIRO_HAS_XLIB_SURFACE', 1)
|
|
|
|
|
built_features += [{
|
|
|
|
|
'name': 'cairo-xlib',
|
|
|
|
|
'description': 'Xlib surface backend',
|
2020-10-05 10:32:27 -04:00
|
|
|
'deps': [x11_dep, xext_dep],
|
2018-05-21 20:08:22 +02:00
|
|
|
}]
|
|
|
|
|
|
|
|
|
|
extra_headers = ['X11/Xlibint.h', 'X11/Xproto.h']
|
|
|
|
|
check_headers += [
|
|
|
|
|
['X11/extensions/XShm.h', {'extra-headers': extra_headers}],
|
|
|
|
|
['X11/extensions/shmproto.h', {'extra-headers': extra_headers}],
|
|
|
|
|
['X11/extensions/shmstr.h', {'extra-headers': extra_headers}],
|
|
|
|
|
]
|
|
|
|
|
deps += [x11_dep, xext_dep]
|
|
|
|
|
|
2021-02-25 10:52:45 +00:00
|
|
|
# Can skip the run check by providing the result in a cross file or
|
|
|
|
|
# native file as bool property value.
|
|
|
|
|
prop = meson.get_external_property('ipc_rmid_deferred_release', 'auto')
|
|
|
|
|
# We don't know the type of prop (bool, string) but need to differentiate
|
|
|
|
|
# between a set value (bool) or the fallback value (string), so convert to
|
2022-03-28 16:43:03 -04:00
|
|
|
# a string and check the string value.
|
2021-02-25 10:52:45 +00:00
|
|
|
prop_str = '@0@'.format(prop)
|
|
|
|
|
if prop_str in ['true', 'false']
|
|
|
|
|
ipc_rmid_deferred_release = (prop_str == 'true')
|
|
|
|
|
message('IPC_RMID_DEFERRED_RELEASE:', ipc_rmid_deferred_release)
|
|
|
|
|
elif prop_str == 'auto'
|
|
|
|
|
res = cc.run(files('meson-cc-tests/ipc_rmid_deferred_release.c'),
|
|
|
|
|
dependencies: [x11_dep, xext_dep],
|
|
|
|
|
name: 'shmctl IPC_RMID allowes subsequent attaches')
|
|
|
|
|
|
|
|
|
|
ipc_rmid_deferred_release = (res.returncode() == 0)
|
|
|
|
|
else
|
|
|
|
|
error('Unexpected value for external property ipc_rmid_deferred_release: @0@'.format(prop_str))
|
2018-05-21 20:08:22 +02:00
|
|
|
endif
|
2021-02-25 10:52:45 +00:00
|
|
|
|
|
|
|
|
conf.set10('IPC_RMID_DEFERRED_RELEASE', ipc_rmid_deferred_release)
|
2018-05-21 20:08:22 +02:00
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if feature_conf.get('CAIRO_HAS_XLIB_SURFACE', 0) == 1
|
|
|
|
|
xrender_dep = dependency('xrender', required: get_option('xlib'),
|
|
|
|
|
version: xrender_required_version)
|
|
|
|
|
|
|
|
|
|
if xrender_dep.found()
|
|
|
|
|
check_funcs += [
|
|
|
|
|
'XRenderCreateSolidFill',
|
|
|
|
|
'XRenderCreateLinearGradient',
|
|
|
|
|
'XRenderCreateRadialGradient',
|
|
|
|
|
'XRenderCreateConicalGradient',
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
deps += [xrender_dep]
|
|
|
|
|
|
|
|
|
|
built_features += [{
|
|
|
|
|
'name': 'cairo-xlib-xrender',
|
|
|
|
|
'description': 'Xlib Xrender surface backend',
|
2020-10-05 10:32:27 -04:00
|
|
|
'deps': [xrender_dep],
|
2018-05-21 20:08:22 +02:00
|
|
|
}]
|
|
|
|
|
feature_conf.set('CAIRO_HAS_XLIB_XRENDER_SURFACE', 1)
|
|
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
xcb_dep = dependency('xcb', required: get_option('xcb'),
|
|
|
|
|
version: xcb_required_version)
|
|
|
|
|
xcb_render_dep = dependency('xcb-render', required: get_option('xcb'),
|
|
|
|
|
version: xcb_render_required_version)
|
|
|
|
|
if xcb_dep.found() and xcb_render_dep.found()
|
|
|
|
|
feature_conf.set('CAIRO_HAS_XCB_SURFACE', 1)
|
|
|
|
|
built_features += [{
|
|
|
|
|
'name': 'cairo-xcb',
|
|
|
|
|
'description': 'XCB surface backend',
|
2020-10-05 10:32:27 -04:00
|
|
|
'deps': [xcb_dep, xcb_render_dep],
|
2018-05-21 20:08:22 +02:00
|
|
|
}]
|
|
|
|
|
|
|
|
|
|
deps += [xcb_dep, xcb_render_dep]
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if feature_conf.get('CAIRO_HAS_XCB_SURFACE', 0) == 1 and feature_conf.get('CAIRO_HAS_XLIB_SURFACE', 0) == 1
|
2021-02-25 01:27:10 +00:00
|
|
|
x11xcb_dep = dependency('x11-xcb', required: get_option('xlib-xcb'))
|
2018-05-21 20:08:22 +02:00
|
|
|
if x11xcb_dep.found()
|
|
|
|
|
deps += [x11xcb_dep]
|
|
|
|
|
feature_conf.set('CAIRO_HAS_XLIB_XCB_FUNCTIONS', 1)
|
|
|
|
|
built_features += [{
|
|
|
|
|
'name': 'cairo-xlib-xcb',
|
|
|
|
|
'description': 'Xlib/XCB functions',
|
2020-10-05 10:32:27 -04:00
|
|
|
'deps': [x11xcb_dep],
|
2018-05-21 20:08:22 +02:00
|
|
|
}]
|
|
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if feature_conf.get('CAIRO_HAS_XCB_SURFACE', 0) == 1
|
|
|
|
|
xcbshm_dep = dependency('xcb-shm', required: get_option('xcb'))
|
|
|
|
|
if xcbshm_dep.found()
|
|
|
|
|
feature_conf.set('CAIRO_HAS_XCB_SHM_FUNCTIONS', 1)
|
|
|
|
|
deps += [xcbshm_dep]
|
|
|
|
|
built_features += [{
|
|
|
|
|
'name': 'cairo-xcb-shm',
|
|
|
|
|
'description': 'XCB/SHM functions',
|
2020-10-05 10:32:27 -04:00
|
|
|
'deps': [xcbshm_dep],
|
2018-05-21 20:08:22 +02:00
|
|
|
}]
|
|
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
|
2020-09-26 19:25:21 +01:00
|
|
|
if host_machine.system() == 'darwin' and not get_option('quartz').disabled()
|
|
|
|
|
quartz_deps = dependency('appleframeworks', modules : ['CoreFoundation', 'ApplicationServices'], required: get_option('quartz'))
|
|
|
|
|
|
|
|
|
|
if quartz_deps.found()
|
|
|
|
|
deps += [quartz_deps]
|
|
|
|
|
|
|
|
|
|
feature_conf.set('CAIRO_HAS_QUARTZ_SURFACE', 1)
|
|
|
|
|
feature_conf.set('CAIRO_HAS_QUARTZ_IMAGE_SURFACE', 1)
|
|
|
|
|
|
|
|
|
|
built_features += [
|
|
|
|
|
{
|
|
|
|
|
'name': 'cairo-quartz',
|
|
|
|
|
'description': 'Quartz surface backend',
|
|
|
|
|
'deps': quartz_deps,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
'name': 'cairo-quartz-image',
|
|
|
|
|
'description': 'Quartz Image surface backend',
|
|
|
|
|
'deps': quartz_deps,
|
2022-04-07 16:51:16 -07:00
|
|
|
}]
|
|
|
|
|
compiler = meson.get_compiler('c')
|
|
|
|
|
if compiler.has_function('CTFontDrawGlyphs', prefix: '#include <ApplicationServices/ApplicationServices.h>',
|
|
|
|
|
dependencies: quartz_deps)
|
|
|
|
|
built_features += [
|
|
|
|
|
{
|
|
|
|
|
'name': 'cairo-quartz-font',
|
|
|
|
|
'description': 'Quartz font backend',
|
|
|
|
|
'deps': quartz_deps,
|
|
|
|
|
}]
|
|
|
|
|
feature_conf.set('CAIRO_HAS_QUARTZ_FONT', 1)
|
|
|
|
|
endif
|
2018-05-21 20:08:22 +02:00
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if host_machine.system() == 'windows'
|
2020-10-05 10:32:27 -04:00
|
|
|
win32_extra_deps = [
|
|
|
|
|
cc.find_library('gdi32'),
|
|
|
|
|
cc.find_library('msimg32'),
|
|
|
|
|
]
|
2018-05-21 20:08:22 +02:00
|
|
|
|
2020-10-05 10:32:27 -04:00
|
|
|
deps += win32_extra_deps
|
2018-05-21 20:08:22 +02:00
|
|
|
|
2020-10-05 10:32:27 -04:00
|
|
|
feature_conf.set('CAIRO_HAS_WIN32_SURFACE', 1)
|
2018-05-21 20:08:22 +02:00
|
|
|
feature_conf.set('CAIRO_HAS_WIN32_FONT', 1)
|
2020-10-05 10:32:27 -04:00
|
|
|
|
|
|
|
|
built_features += [
|
|
|
|
|
{
|
|
|
|
|
'name': 'cairo-win32',
|
|
|
|
|
'description': 'Microsoft Windows surface backend',
|
|
|
|
|
'deps': win32_extra_deps,
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
'name': 'cairo-win32-font',
|
|
|
|
|
'description': 'Microsoft Windows font backend',
|
|
|
|
|
'deps': win32_extra_deps,
|
|
|
|
|
}
|
|
|
|
|
]
|
2021-08-08 10:44:19 +09:30
|
|
|
|
|
|
|
|
cpp_compiler = meson.get_compiler('cpp')
|
2021-08-14 15:38:14 +09:30
|
|
|
d2d_dep = cpp_compiler.find_library('d2d1', required: false)
|
2021-08-08 10:44:19 +09:30
|
|
|
dwrite_dep = cpp_compiler.find_library('dwrite', required: false)
|
2021-08-14 15:38:14 +09:30
|
|
|
d2d_header = cpp_compiler.has_header('d2d1.h')
|
|
|
|
|
d2d_3_header = cpp_compiler.has_header('d2d1_3.h')
|
2021-08-08 10:44:19 +09:30
|
|
|
dwrite_header = cpp_compiler.has_header('dwrite.h')
|
2021-08-14 15:38:14 +09:30
|
|
|
dwrite_3_header = cpp_compiler.has_header('dwrite_3.h')
|
|
|
|
|
wincodec_dep = cpp_compiler.find_library('windowscodecs', required: false)
|
|
|
|
|
wincodec_header = cpp_compiler.has_header('wincodec.h')
|
2021-08-08 10:44:19 +09:30
|
|
|
|
2021-08-14 15:38:14 +09:30
|
|
|
if d2d_dep.found() and dwrite_dep.found() and d2d_header and dwrite_header and wincodec_dep.found() and wincodec_header
|
2021-08-08 10:44:19 +09:30
|
|
|
feature_conf.set('CAIRO_HAS_DWRITE_FONT', 1)
|
|
|
|
|
built_features += [{
|
|
|
|
|
'name': 'cairo-win32-dwrite-font',
|
|
|
|
|
'description': 'Microsoft Windows DWrite font backend',
|
2021-08-14 15:38:14 +09:30
|
|
|
'deps': [dwrite_dep, d2d_dep, wincodec_dep],
|
2021-08-08 10:44:19 +09:30
|
|
|
}]
|
2021-08-14 15:38:14 +09:30
|
|
|
deps += [dwrite_dep, d2d_dep, wincodec_dep]
|
|
|
|
|
|
|
|
|
|
if cpp_compiler.has_header('d2d1_3.h')
|
|
|
|
|
conf.set('HAVE_D2D1_3_H', 1)
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
# Exclude MinGW dwrite_3.h because it has a broken definition of DWRITE_COLOR_GLYPH_RUN1.
|
|
|
|
|
if cpp_compiler.has_header('dwrite_3.h') and cpp_compiler.get_define('__MINGW32__') == ''
|
|
|
|
|
conf.set('HAVE_DWRITE_3_H', 1)
|
|
|
|
|
endif
|
2021-08-08 10:44:19 +09:30
|
|
|
endif
|
2018-05-21 20:08:22 +02:00
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
# GL / GLESV2 / GLESV3 are mutually exclusive
|
|
|
|
|
gl_backend = get_option('gl-backend')
|
|
|
|
|
need_egl_functions = false
|
|
|
|
|
need_wgl_functions = false
|
|
|
|
|
need_glx_functions = false
|
|
|
|
|
|
|
|
|
|
if gl_backend in ['auto', 'gl']
|
2020-10-05 10:32:27 -04:00
|
|
|
gl_dep = dependency('gl', required: false)
|
2018-05-21 20:08:22 +02:00
|
|
|
if not gl_dep.found()
|
2020-10-05 10:32:27 -04:00
|
|
|
gl_dep = cc.find_library('GL', required: gl_backend == 'gl')
|
2018-05-21 20:08:22 +02:00
|
|
|
endif
|
2020-10-05 10:32:27 -04:00
|
|
|
if gl_dep.found() and \
|
|
|
|
|
cc.has_header('GL/gl.h', required: gl_backend == 'gl', dependencies: gl_dep) and \
|
|
|
|
|
cc.has_header('GL/glext.h', required: gl_backend == 'gl', dependencies: gl_dep)
|
|
|
|
|
deps += [gl_dep]
|
2018-05-21 20:08:22 +02:00
|
|
|
|
2020-10-05 10:32:27 -04:00
|
|
|
need_egl_functions = true
|
|
|
|
|
need_wgl_functions = true
|
|
|
|
|
need_glx_functions = true
|
2018-05-21 20:08:22 +02:00
|
|
|
|
2020-10-05 10:32:27 -04:00
|
|
|
feature_conf.set('CAIRO_HAS_GL_SURFACE', 1)
|
|
|
|
|
built_features += [{
|
|
|
|
|
'name': 'cairo-gl',
|
|
|
|
|
'description': 'OpenGL surface backend',
|
|
|
|
|
'deps': [gl_dep],
|
|
|
|
|
}]
|
|
|
|
|
endif
|
2018-05-21 20:08:22 +02:00
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if feature_conf.get('CAIRO_HAS_GL_SURFACE', 0) == 0 and ['auto', 'glesv2'].contains(gl_backend)
|
2020-10-05 10:32:27 -04:00
|
|
|
glesv2_dep = dependency('glesv2', required: false)
|
2018-05-21 20:08:22 +02:00
|
|
|
if not glesv2_dep.found()
|
2020-10-05 10:32:27 -04:00
|
|
|
glesv2_dep = cc.find_library('GLESv2', required: gl_backend == 'glesv2')
|
2018-05-21 20:08:22 +02:00
|
|
|
endif
|
2020-10-05 10:32:27 -04:00
|
|
|
if glesv2_dep.found() and \
|
|
|
|
|
cc.has_header('GLES2/gl2.h', required: gl_backend == 'glesv2', dependencies: glesv2_dep) and \
|
|
|
|
|
cc.has_header('GLES2/gl2ext.h', required: gl_backend == 'glesv2', dependencies: glesv2_dep)
|
|
|
|
|
deps += [glesv2_dep]
|
2018-05-21 20:08:22 +02:00
|
|
|
need_egl_functions = true
|
|
|
|
|
|
|
|
|
|
feature_conf.set('CAIRO_HAS_GLESV2_SURFACE', 1)
|
|
|
|
|
built_features += [{
|
|
|
|
|
'name': 'cairo-glesv2',
|
|
|
|
|
'source-key': 'cairo-gl',
|
|
|
|
|
'description': 'OpenGLESv2 surface backend',
|
2020-10-05 10:32:27 -04:00
|
|
|
'deps': [glesv2_dep],
|
2018-05-21 20:08:22 +02:00
|
|
|
}]
|
|
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if feature_conf.get('CAIRO_HAS_GL_SURFACE', 0) == 0 and feature_conf.get('CAIRO_HAS_GLESV2_SURFACE', 0) == 0 and ['auto', 'glesv3'].contains(gl_backend)
|
|
|
|
|
# glesv3 is provided via libGLESv2.so (there is no libGLESv3, nor glesv3.pc)
|
2020-10-05 10:32:27 -04:00
|
|
|
glesv3_dep = dependency('glesv2', required: false)
|
|
|
|
|
if not glesv3_dep.found()
|
|
|
|
|
glesv3_dep = cc.find_library('GLESv2', required: gl_backend == 'glesv3')
|
2018-05-21 20:08:22 +02:00
|
|
|
endif
|
|
|
|
|
|
2020-10-05 10:32:27 -04:00
|
|
|
if glesv3_dep.found() and \
|
|
|
|
|
cc.has_header('GLES3/gl3.h', required: gl_backend == 'glesv3', dependencies: glesv3_dep) and \
|
|
|
|
|
cc.has_header('GLES3/gl3ext.h', required: gl_backend == 'glesv3', dependencies: glesv3_dep)
|
|
|
|
|
deps += [glesv3_dep]
|
2018-05-21 20:08:22 +02:00
|
|
|
need_egl_functions = true
|
|
|
|
|
|
|
|
|
|
feature_conf.set('CAIRO_HAS_GLESV3_SURFACE', 1)
|
|
|
|
|
built_features += [{
|
|
|
|
|
'name': 'cairo-glesv3',
|
|
|
|
|
'source-key': 'cairo-gl',
|
|
|
|
|
'description': 'OpenGLESv3 surface backend',
|
2020-10-05 10:32:27 -04:00
|
|
|
'deps': [glesv3_dep],
|
2018-05-21 20:08:22 +02:00
|
|
|
}]
|
|
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if need_egl_functions
|
|
|
|
|
# FIXME: automagic
|
2020-10-05 10:32:27 -04:00
|
|
|
egl_extra_deps = []
|
2018-05-21 20:08:22 +02:00
|
|
|
egl_dep = dependency('egl', required: false)
|
|
|
|
|
if not egl_dep.found()
|
|
|
|
|
if cc.has_header('EGL/egl.h')
|
|
|
|
|
csi_dep = cc.find_library('csi', required: false)
|
|
|
|
|
if csi_dep.found() and cc.has_function('csi_stream_attachresource', dependencies: [csi_dep])
|
2020-10-05 10:32:27 -04:00
|
|
|
egl_extra_deps += csi_dep
|
2018-05-21 20:08:22 +02:00
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
foreach libname : ['EGL', 'egl13', 'egl12', 'egl11']
|
|
|
|
|
dep = cc.find_library(libname, required: false)
|
|
|
|
|
if dep.found() and cc.has_function('eglGetError', dependencies: [dep])
|
2020-10-05 10:32:27 -04:00
|
|
|
egl_dep = dep
|
2018-05-21 20:08:22 +02:00
|
|
|
break
|
|
|
|
|
endif
|
|
|
|
|
endforeach
|
|
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
|
2020-10-05 10:32:27 -04:00
|
|
|
if egl_dep.found()
|
|
|
|
|
deps += egl_dep
|
2018-05-21 20:08:22 +02:00
|
|
|
feature_conf.set('CAIRO_HAS_EGL_FUNCTIONS', 1)
|
|
|
|
|
built_features += [{
|
|
|
|
|
'name': 'cairo-egl',
|
|
|
|
|
'description': 'EGL functions',
|
2020-10-05 10:32:27 -04:00
|
|
|
'deps': [egl_dep] + egl_extra_deps,
|
2018-05-21 20:08:22 +02:00
|
|
|
}]
|
|
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if need_glx_functions
|
|
|
|
|
# FIXME: automagic
|
|
|
|
|
if cc.has_header('GL/glx.h')
|
|
|
|
|
feature_conf.set('CAIRO_HAS_GLX_FUNCTIONS', 1)
|
|
|
|
|
built_features += [{
|
|
|
|
|
'name': 'cairo-glx',
|
|
|
|
|
'description': 'GLX functions',
|
2020-10-05 10:32:27 -04:00
|
|
|
'deps': [cc.find_library('GL')],
|
2018-05-21 20:08:22 +02:00
|
|
|
}]
|
|
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
# Untested
|
|
|
|
|
if need_wgl_functions
|
|
|
|
|
# FIXME: automagic
|
|
|
|
|
if cc.has_header('windows.h')
|
|
|
|
|
feature_conf.set('CAIRO_HAS_WGL_FUNCTIONS', 1)
|
|
|
|
|
built_features += [{
|
|
|
|
|
'name': 'cairo-wgl',
|
|
|
|
|
'description': 'WGL functions',
|
|
|
|
|
}]
|
|
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
gobject_dep = dependency('gobject-2.0',
|
|
|
|
|
required: get_option('glib'),
|
|
|
|
|
fallback: ['glib', 'libgobject_dep']
|
|
|
|
|
)
|
|
|
|
|
glib_dep = dependency('glib-2.0',
|
|
|
|
|
required: get_option('glib'),
|
|
|
|
|
version: glib_required_version,
|
|
|
|
|
fallback: ['glib', 'libglib_dep'],
|
|
|
|
|
)
|
|
|
|
|
if gobject_dep.found() and glib_dep.found()
|
|
|
|
|
feature_conf.set('CAIRO_HAS_GOBJECT_FUNCTIONS', 1)
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if zlib_dep.found()
|
|
|
|
|
feature_conf.set('CAIRO_HAS_SCRIPT_SURFACE', 1)
|
|
|
|
|
built_features += [{
|
|
|
|
|
'name': 'cairo-script',
|
|
|
|
|
'description': 'script surface backend',
|
2020-10-05 10:32:27 -04:00
|
|
|
'deps': [zlib_dep],
|
2018-05-21 20:08:22 +02:00
|
|
|
}]
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if zlib_dep.found()
|
|
|
|
|
feature_conf.set('CAIRO_HAS_PS_SURFACE', 1)
|
|
|
|
|
built_features += [{
|
|
|
|
|
'name': 'cairo-ps',
|
|
|
|
|
'description': 'PostScript surface backend',
|
2020-10-05 10:32:27 -04:00
|
|
|
'deps': [zlib_dep],
|
2018-05-21 20:08:22 +02:00
|
|
|
}]
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if zlib_dep.found()
|
|
|
|
|
feature_conf.set('CAIRO_HAS_PDF_SURFACE', 1)
|
|
|
|
|
built_features += [{
|
|
|
|
|
'name': 'cairo-pdf',
|
|
|
|
|
'description': 'PDF surface backend',
|
2020-10-05 10:32:27 -04:00
|
|
|
'deps': [zlib_dep],
|
2018-05-21 20:08:22 +02:00
|
|
|
}]
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if zlib_dep.found()
|
2021-05-02 21:25:48 +02:00
|
|
|
conf.set('CAIRO_HAS_INTERPRETER', 1)
|
2018-05-21 20:08:22 +02:00
|
|
|
endif
|
|
|
|
|
|
2022-02-15 13:31:48 +00:00
|
|
|
if zlib_dep.found() and png_dep.found() and get_option('xml').enabled()
|
2018-05-21 20:08:22 +02:00
|
|
|
feature_conf.set('CAIRO_HAS_XML_SURFACE', 1)
|
|
|
|
|
built_features += [{
|
|
|
|
|
'name': 'cairo-xml',
|
|
|
|
|
'description': 'XML surface backend',
|
2020-10-05 10:32:27 -04:00
|
|
|
'deps': [zlib_dep],
|
2018-05-21 20:08:22 +02:00
|
|
|
}]
|
|
|
|
|
endif
|
|
|
|
|
|
2021-02-23 11:36:24 +00:00
|
|
|
bfd_dep = cc.find_library('bfd', has_headers: ['bfd.h'], required: get_option('symbol-lookup'))
|
|
|
|
|
if bfd_dep.found() and \
|
|
|
|
|
cc.has_function('bfd_openr', dependencies: [bfd_dep]) and \
|
|
|
|
|
cc.links(files('meson-cc-tests/bfd-section-flags.c'), name: 'bfd_section_flags', dependencies: bfd_dep)
|
2021-02-23 10:33:23 +00:00
|
|
|
conf.set('HAVE_BFD', 1)
|
|
|
|
|
deps += [bfd_dep]
|
2021-02-23 11:36:24 +00:00
|
|
|
elif get_option('symbol-lookup').enabled()
|
|
|
|
|
error('symbol lookup via bfd was enabled via options but is not available (bfd might be too old)')
|
2018-05-21 20:08:22 +02:00
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if conf.get('HAVE_BFD', 0) == 1
|
|
|
|
|
conf.set('CAIRO_HAS_SYMBOL_LOOKUP', 1)
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if feature_conf.get('CAIRO_HAS_PS_SURFACE', 0) == 1
|
|
|
|
|
gs = find_program('gs', required: get_option('tests'))
|
|
|
|
|
libspectre_dep = dependency('libspectre', version: '>= 0.2.0',
|
|
|
|
|
required: get_option('spectre'))
|
|
|
|
|
if gs.found() and libspectre_dep.found()
|
|
|
|
|
conf.set('CAIRO_CAN_TEST_PS_SURFACE', 1)
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if libspectre_dep.found()
|
|
|
|
|
conf.set('CAIRO_HAS_SPECTRE', 1)
|
2021-03-01 14:06:02 +01:00
|
|
|
test_deps += [libspectre_dep]
|
2018-05-21 20:08:22 +02:00
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if feature_conf.get('CAIRO_HAS_PDF_SURFACE', 0) == 1
|
|
|
|
|
poppler_dep = dependency('poppler-glib', version: '>= 0.17.4',
|
|
|
|
|
required: get_option('tests'))
|
|
|
|
|
if poppler_dep.found() and cc.has_function('poppler_page_render', dependencies: [poppler_dep])
|
|
|
|
|
conf.set('CAIRO_CAN_TEST_PDF_SURFACE', 1)
|
|
|
|
|
test_deps += [poppler_dep]
|
|
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if feature_conf.get('CAIRO_HAS_SVG_SURFACE', 0) == 1
|
|
|
|
|
librsvg_dep = dependency('librsvg-2.0', version: '>= 2.35.0',
|
|
|
|
|
required: get_option('tests'))
|
|
|
|
|
if librsvg_dep.found()
|
|
|
|
|
conf.set('CAIRO_CAN_TEST_SVG_SURFACE', 1)
|
|
|
|
|
test_deps += [librsvg_dep]
|
|
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
pixman_dep = dependency('pixman-1',
|
|
|
|
|
version: '>= 0.36.0',
|
|
|
|
|
fallback: ['pixman', 'idep_pixman'],
|
|
|
|
|
)
|
|
|
|
|
if pixman_dep.found()
|
|
|
|
|
feature_conf.set('CAIRO_HAS_IMAGE_SURFACE', 1)
|
|
|
|
|
conf.set('HAS_PIXMAN_GLYPHS', 1)
|
|
|
|
|
if pixman_dep.type_name() == 'internal'
|
|
|
|
|
internal_deps += [pixman_dep]
|
|
|
|
|
else
|
|
|
|
|
deps += [pixman_dep]
|
|
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
feature_conf.set('CAIRO_FEATURES_H', true)
|
|
|
|
|
feature_conf.set('CAIRO_HAS_USER_FONT', 1)
|
|
|
|
|
|
|
|
|
|
feature_conf.set('CAIRO_HAS_MIME_SURFACE', 1)
|
|
|
|
|
feature_conf.set('CAIRO_HAS_RECORDING_SURFACE', 1)
|
|
|
|
|
feature_conf.set('CAIRO_HAS_OBSERVER_SURFACE', 1)
|
|
|
|
|
|
2020-07-31 14:42:50 +01:00
|
|
|
if not get_option('tee').disabled()
|
|
|
|
|
feature_conf.set('CAIRO_HAS_TEE_SURFACE', 1)
|
|
|
|
|
built_features += [{
|
|
|
|
|
'name': 'cairo-tee',
|
|
|
|
|
'description': 'Tee surface backend',
|
|
|
|
|
}]
|
|
|
|
|
endif
|
2018-05-21 20:08:22 +02:00
|
|
|
|
|
|
|
|
incbase = include_directories('.')
|
|
|
|
|
|
|
|
|
|
foreach check : check_sizeofs
|
|
|
|
|
type = check[0]
|
|
|
|
|
opts = check.length() > 1 ? check[1] : {}
|
|
|
|
|
|
|
|
|
|
conf_name = opts.get('conf-name', 'SIZEOF_@0@'.format(type.underscorify().to_upper()))
|
|
|
|
|
|
|
|
|
|
conf.set(conf_name, cc.sizeof(type))
|
|
|
|
|
endforeach
|
|
|
|
|
|
|
|
|
|
foreach check : check_headers
|
|
|
|
|
name = check[0]
|
|
|
|
|
opts = check.length() > 1 ? check[1] : {}
|
|
|
|
|
prefix = ''
|
|
|
|
|
|
|
|
|
|
foreach header : opts.get('extra-headers', [])
|
|
|
|
|
prefix += '#include <@0@>\n'.format(header)
|
|
|
|
|
endforeach
|
|
|
|
|
|
|
|
|
|
if cc.has_header(name, prefix: prefix)
|
|
|
|
|
conf.set('HAVE_@0@'.format(name.to_upper().underscorify()), 1)
|
|
|
|
|
check_funcs += check.length() > 1 ? check[1].get('check-funcs', []) : []
|
|
|
|
|
endif
|
|
|
|
|
endforeach
|
|
|
|
|
|
|
|
|
|
foreach check : check_types
|
|
|
|
|
name = check[0]
|
|
|
|
|
opts = check.length() > 1 ? check[1] : {}
|
|
|
|
|
prefix = ''
|
|
|
|
|
|
|
|
|
|
foreach header : opts.get('headers', [])
|
|
|
|
|
prefix += '#include <@0@>\n'.format(header)
|
|
|
|
|
endforeach
|
|
|
|
|
|
|
|
|
|
if cc.has_type(name, prefix: prefix)
|
|
|
|
|
conf.set('HAVE_@0@'.format(name.to_upper()), 1)
|
|
|
|
|
endif
|
|
|
|
|
endforeach
|
|
|
|
|
|
|
|
|
|
foreach name : check_funcs
|
|
|
|
|
if cc.has_function(name, dependencies: deps)
|
|
|
|
|
conf.set('HAVE_@0@'.format(name.to_upper()), 1)
|
|
|
|
|
endif
|
|
|
|
|
endforeach
|
|
|
|
|
|
2021-08-01 17:30:06 -07:00
|
|
|
conf.set('HAVE_STRNDUP', cc.has_function('strndup', prefix : '#include <string.h>'))
|
|
|
|
|
|
2018-05-21 20:08:22 +02:00
|
|
|
pthread_c_args = []
|
|
|
|
|
pthread_link_args = []
|
|
|
|
|
|
|
|
|
|
foreach thread_flags : check_thread_flags
|
|
|
|
|
if not conf.has('CAIRO_HAS_PTHREAD')
|
|
|
|
|
cflags = thread_flags[0]
|
|
|
|
|
lflags = thread_flags[1]
|
|
|
|
|
real_pthread = thread_flags.length() > 2 ? thread_flags[2].get('real', true) : true
|
|
|
|
|
|
|
|
|
|
if cc.links(files('meson-cc-tests/pthread.c'), args: cflags + lflags, name: 'pthreads')
|
|
|
|
|
conf.set('CAIRO_HAS_PTHREAD', 1)
|
|
|
|
|
if real_pthread
|
|
|
|
|
conf.set('CAIRO_HAS_REAL_PTHREAD', 1)
|
|
|
|
|
endif
|
|
|
|
|
pthread_c_args = cflags
|
|
|
|
|
pthread_link_args = lflags
|
|
|
|
|
endif
|
|
|
|
|
endif
|
|
|
|
|
endforeach
|
|
|
|
|
|
|
|
|
|
extra_link_args += pthread_link_args
|
|
|
|
|
|
|
|
|
|
if cc.links(files('meson-cc-tests/atomic-ops-cxx11.c'), name: 'Atomic ops: cxx11')
|
|
|
|
|
conf.set('HAVE_CXX11_ATOMIC_PRIMITIVES', 1)
|
|
|
|
|
elif cc.links(files('meson-cc-tests/atomic-ops-gcc-legacy.c'), name: 'Atomic ops: gcc legacy')
|
|
|
|
|
conf.set('HAVE_GCC_LEGACY_ATOMICS', 1)
|
|
|
|
|
elif cc.has_header('atomic_ops.h')
|
|
|
|
|
conf.set('HAVE_LIB_ATOMIC_OPS', 1)
|
|
|
|
|
elif cc.has_header('libkern/OSAtomic.h')
|
|
|
|
|
conf.set('HAVE_OS_ATOMIC_OPS', 1)
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
test_mkdir_c_args = []
|
|
|
|
|
if conf.get('HAVE_SYS_STAT_H', 0) == 1
|
|
|
|
|
test_mkdir_c_args += ['-DHAVE_SYS_STAT_H']
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if conf.get('HAVE_IO_H', 0) == 1
|
|
|
|
|
test_mkdir_c_args += ['-DHAVE_IO_H']
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if cc.links(files('meson-cc-tests/mkdir-variant-1.c'), args: test_mkdir_c_args)
|
|
|
|
|
conf.set('HAVE_MKDIR', 1)
|
|
|
|
|
elif cc.links(files('meson-cc-tests/mkdir-variant-2.c'), args: test_mkdir_c_args)
|
|
|
|
|
conf.set('HAVE_MKDIR', 2)
|
|
|
|
|
else
|
|
|
|
|
conf.set('HAVE_MKDIR', 0)
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
if not ['x86', 'x86_64'].contains(host_machine.cpu_family())
|
|
|
|
|
conf.set('ATOMIC_OP_NEEDS_MEMORY_BARRIER', 1)
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
have_ld_preload = ['linux', 'freebsd', 'darwin', 'dragonfly'].contains(host_machine.system())
|
|
|
|
|
|
|
|
|
|
if have_ld_preload and zlib_dep.found() and conf.get('CAIRO_HAS_REAL_PTHREAD', 0) == 1 and conf.get('CAIRO_HAS_DLSYM', 0) == 1
|
|
|
|
|
conf.set('CAIRO_HAS_TRACE', 1)
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
rt_dep = cc.find_library('rt', required: false)
|
|
|
|
|
have_shm = false
|
|
|
|
|
if rt_dep.found() and cc.has_function('shm_open', dependencies: [rt_dep])
|
|
|
|
|
have_shm = true
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
# This to make sure we don't run checks against internal deps
|
|
|
|
|
deps += internal_deps
|
|
|
|
|
|
|
|
|
|
subdir('src')
|
|
|
|
|
|
|
|
|
|
if feature_conf.get('CAIRO_HAS_PNG_FUNCTIONS', 0) == 1
|
|
|
|
|
subdir('boilerplate')
|
|
|
|
|
else
|
2021-09-12 15:55:31 +01:00
|
|
|
cairoboilerplate_dep = dependency('', required: false)
|
2018-05-21 20:08:22 +02:00
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
subdir('util')
|
|
|
|
|
|
|
|
|
|
if not get_option('tests').disabled() and feature_conf.get('CAIRO_HAS_PNG_FUNCTIONS', 0) == 1
|
|
|
|
|
subdir('test')
|
2021-05-15 10:53:08 +02:00
|
|
|
subdir('perf')
|
2018-05-21 20:08:22 +02:00
|
|
|
endif
|
|
|
|
|
|
2021-04-27 12:08:52 +01:00
|
|
|
if get_option('gtk_doc')
|
|
|
|
|
doc_srcdir = include_directories('src')
|
|
|
|
|
subdir('doc/public')
|
|
|
|
|
endif
|
|
|
|
|
|
2018-05-21 20:08:22 +02:00
|
|
|
configure_file(output: 'config.h', configuration: conf)
|
|
|
|
|
|
|
|
|
|
foreach feature: built_features
|
2020-10-05 10:32:27 -04:00
|
|
|
feature_deps = feature.get('deps', [])
|
|
|
|
|
feature_libs = feature.get('libs', [])
|
2020-10-06 11:25:54 -04:00
|
|
|
feature_compile_deps = feature.get('compile-deps', [])
|
2020-09-26 19:25:21 +01:00
|
|
|
pkgmod.generate(libraries: [libcairo, feature_deps, feature_libs],
|
2020-10-05 10:32:27 -04:00
|
|
|
name: feature['name'],
|
|
|
|
|
description: feature['description'] + ' for cairo graphics library',
|
|
|
|
|
)
|
|
|
|
|
meson.override_dependency(feature['name'],
|
2021-02-24 02:57:37 +02:00
|
|
|
declare_dependency(dependencies: [libcairo_dep, feature_deps, feature_compile_deps],
|
2020-10-05 10:32:27 -04:00
|
|
|
link_args: feature_libs,
|
|
|
|
|
)
|
2018-05-21 20:08:22 +02:00
|
|
|
)
|
|
|
|
|
endforeach
|
|
|
|
|
|
2020-07-31 14:42:50 +01:00
|
|
|
# summary
|
2022-01-09 17:17:28 +05:30
|
|
|
summary({
|
|
|
|
|
'Image': true,
|
|
|
|
|
'Recording': true,
|
|
|
|
|
'Observer': true,
|
|
|
|
|
'Mime': true,
|
|
|
|
|
'Tee': feature_conf.get('CAIRO_HAS_TEE_SURFACE', 0) == 1,
|
|
|
|
|
'XML': feature_conf.get('CAIRO_HAS_XML_SURFACE', 0) == 1,
|
|
|
|
|
'Xlib': feature_conf.get('CAIRO_HAS_XLIB_SURFACE', 0) == 1,
|
|
|
|
|
'Xlib Xrender': feature_conf.get('CAIRO_HAS_XLIB_XRENDER_SURFACE', 0) == 1,
|
|
|
|
|
'Quartz': feature_conf.get('CAIRO_HAS_QUARTZ_SURFACE', 0) == 1,
|
|
|
|
|
'Quartz-image': feature_conf.get('CAIRO_HAS_QUARTZ_IMAGE_SURFACE', 0) == 1,
|
|
|
|
|
'XCB': feature_conf.get('CAIRO_HAS_XCB_SURFACE', 0) == 1,
|
|
|
|
|
'Win32': feature_conf.get('CAIRO_HAS_WIN32_SURFACE', 0) == 1,
|
|
|
|
|
'CairoScript': feature_conf.get('CAIRO_HAS_SCRIPT_SURFACE', 0) == 1,
|
|
|
|
|
'PostScript': feature_conf.get('CAIRO_HAS_PS_SURFACE', 0) == 1,
|
|
|
|
|
'PDF': feature_conf.get('CAIRO_HAS_PDF_SURFACE', 0) == 1,
|
|
|
|
|
'SVG': feature_conf.get('CAIRO_HAS_SVG_SURFACE', 0) == 1,
|
|
|
|
|
'OpenGL': feature_conf.get('CAIRO_HAS_GL_SURFACE', 0) == 1,
|
|
|
|
|
'OpenGL ES 2.0': feature_conf.get('CAIRO_HAS_GLESV2_SURFACE', 0) == 1,
|
|
|
|
|
'OpenGL ES 3.0': feature_conf.get('CAIRO_HAS_GLESV3_SURFACE', 0) == 1,
|
|
|
|
|
}, section: 'Surface Backends', bool_yn: true)
|
|
|
|
|
|
|
|
|
|
summary({
|
|
|
|
|
'User': true,
|
|
|
|
|
'FreeType': feature_conf.get('CAIRO_HAS_FT_FONT', 0) == 1,
|
|
|
|
|
'Fontconfig': feature_conf.get('CAIRO_HAS_FC_FONT', 0) == 1,
|
|
|
|
|
'Win32': feature_conf.get('CAIRO_HAS_WIN32_FONT', 0) == 1,
|
2021-08-08 10:44:19 +09:30
|
|
|
'Win32 DWrite': feature_conf.get('CAIRO_HAS_DWRITE_FONT', 0) == 1,
|
2022-01-09 17:17:28 +05:30
|
|
|
'Quartz': feature_conf.get('CAIRO_HAS_QUARTZ_FONT', 0) == 1,
|
|
|
|
|
}, section: 'Font Backends', bool_yn: true)
|
|
|
|
|
|
|
|
|
|
summary({
|
|
|
|
|
'PNG functions': feature_conf.get('CAIRO_HAS_PNG_FUNCTIONS', 0) == 1,
|
|
|
|
|
'GLX functions': feature_conf.get('CAIRO_HAS_GLX_FUNCTIONS', 0) == 1,
|
|
|
|
|
'WGL functions': feature_conf.get('CAIRO_HAS_WGL_FUNCTIONS', 0) == 1,
|
|
|
|
|
'EGL functions': feature_conf.get('CAIRO_HAS_EGL_FUNCTIONS', 0) == 1,
|
|
|
|
|
'X11-xcb': feature_conf.get('CAIRO_HAS_XLIB_XCB_FUNCTIONS', 0) == 1,
|
|
|
|
|
'XCB-shm': feature_conf.get('CAIRO_HAS_XCB_SHM_FUNCTIONS', 0) == 1,
|
|
|
|
|
}, section: 'Functions', bool_yn: true)
|
|
|
|
|
|
|
|
|
|
summary({
|
|
|
|
|
'cairo-trace:': conf.get('CAIRO_HAS_TRACE', 0) == 1,
|
|
|
|
|
'cairo-script-interpreter': conf.get('CAIRO_HAS_INTERPRETER', 0) == 1,
|
|
|
|
|
'API reference': get_option('gtk_doc'),
|
|
|
|
|
}, section: 'Features and Utilities', bool_yn: true)
|