mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2025-10-28 05:40:14 -04:00
If WAYLAND_DEBUG contains the token "thread_id", and gettid() is available, then include the current thread ID in the output from wl_closure_print. If multiple threads are sending requests, then those requests can get interleaved. That's usually fine, but for wl_surface requests and commits, that can cause problems ranging from incorrect behavior to protocol errors. Being able to see which requests are sent by different threads would make such problems much easier to diagnose. Signed-off-by: Kyle Brenneman <kbrenneman@nvidia.com>
143 lines
3.7 KiB
Meson
143 lines
3.7 KiB
Meson
project(
|
|
'wayland', 'c',
|
|
version: '1.24.90',
|
|
license: 'MIT',
|
|
meson_version: '>= 0.57.0',
|
|
default_options: [
|
|
'warning_level=2',
|
|
'buildtype=debugoptimized',
|
|
'c_std=c99',
|
|
]
|
|
)
|
|
wayland_version = meson.project_version().split('.')
|
|
|
|
config_h = configuration_data()
|
|
config_h.set_quoted('PACKAGE', meson.project_name())
|
|
config_h.set_quoted('PACKAGE_VERSION', meson.project_version())
|
|
|
|
cc_args = []
|
|
if host_machine.system() not in ['freebsd', 'openbsd']
|
|
cc_args += ['-D_POSIX_C_SOURCE=200809L']
|
|
endif
|
|
add_project_arguments(cc_args, language: 'c')
|
|
|
|
compiler_flags = [
|
|
'-Wno-unused-parameter',
|
|
'-Wstrict-prototypes',
|
|
'-Wmissing-prototypes',
|
|
'-fvisibility=hidden',
|
|
]
|
|
|
|
cc = meson.get_compiler('c')
|
|
add_project_arguments(
|
|
cc.get_supported_arguments(compiler_flags),
|
|
language: 'c'
|
|
)
|
|
|
|
foreach h: [ 'sys/prctl.h', 'sys/procctl.h', 'sys/ucred.h' ]
|
|
config_h.set('HAVE_' + h.underscorify().to_upper(), cc.has_header(h))
|
|
endforeach
|
|
|
|
have_funcs = [
|
|
'accept4',
|
|
'mkostemp',
|
|
'posix_fallocate',
|
|
'prctl',
|
|
'memfd_create',
|
|
'mremap',
|
|
'strndup',
|
|
'gettid',
|
|
]
|
|
foreach f: have_funcs
|
|
config_h.set('HAVE_' + f.underscorify().to_upper(), cc.has_function(f))
|
|
endforeach
|
|
config_h.set10('HAVE_XUCRED_CR_PID', cc.has_member('struct xucred', 'cr_pid', prefix : '#include <sys/ucred.h>'))
|
|
have_broken_msg_cmsg_cloexec = false
|
|
if host_machine.system() == 'freebsd'
|
|
have_broken_msg_cmsg_cloexec = not cc.compiles('''
|
|
#include <sys/param.h> /* To get __FreeBSD_version. */
|
|
#if __FreeBSD_version < 1300502 || \
|
|
(__FreeBSD_version >= 1400000 && __FreeBSD_version < 1400006)
|
|
/*
|
|
* FreeBSD had a broken implementation of MSG_CMSG_CLOEXEC between 2015 and
|
|
* 2021. Check if we are compiling against a version that includes the fix
|
|
* (https://cgit.freebsd.org/src/commit/?id=6ceacebdf52211).
|
|
*/
|
|
#error "Broken MSG_CMSG_CLOEXEC"
|
|
#endif
|
|
''', name : 'MSG_CMSG_CLOEXEC works correctly')
|
|
endif
|
|
config_h.set10('HAVE_BROKEN_MSG_CMSG_CLOEXEC', have_broken_msg_cmsg_cloexec)
|
|
|
|
if get_option('libraries')
|
|
if host_machine.system() in ['freebsd', 'openbsd']
|
|
# When building for FreeBSD, epoll(7) is provided by a userspace
|
|
# wrapper around kqueue(2).
|
|
epoll_dep = dependency('epoll-shim')
|
|
else
|
|
# Otherwise, assume that epoll(7) is supported natively.
|
|
epoll_dep = []
|
|
endif
|
|
ffi_dep = dependency('libffi')
|
|
|
|
decls = [
|
|
{ 'header': 'sys/signalfd.h', 'symbol': 'SFD_CLOEXEC' },
|
|
{ 'header': 'sys/timerfd.h', 'symbol': 'TFD_CLOEXEC' },
|
|
{ 'header': 'time.h', 'symbol': 'CLOCK_MONOTONIC' },
|
|
]
|
|
|
|
foreach d: decls
|
|
if not cc.has_header_symbol(d['header'], d['symbol'], dependencies: epoll_dep, args: cc_args)
|
|
error('@0@ is needed to compile Wayland libraries'.format(d['symbol']))
|
|
endif
|
|
endforeach
|
|
|
|
rt_dep = []
|
|
if not cc.has_function('clock_gettime', prefix: '#include <time.h>')
|
|
rt_dep = cc.find_library('rt')
|
|
if not cc.has_function('clock_gettime', prefix: '#include <time.h>', dependencies: rt_dep, args: cc_args)
|
|
error('clock_gettime not found')
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
configure_file(
|
|
output: 'config.h',
|
|
configuration: config_h,
|
|
)
|
|
|
|
pkgconfig = import('pkgconfig')
|
|
|
|
wayland_protocol_xml = files('protocol/wayland.xml')
|
|
|
|
root_inc = include_directories('.')
|
|
protocol_inc = include_directories('protocol')
|
|
src_inc = include_directories('src')
|
|
|
|
subdir('src')
|
|
|
|
if get_option('libraries')
|
|
subdir('cursor')
|
|
subdir('egl')
|
|
endif
|
|
if get_option('tests')
|
|
subdir('tests')
|
|
endif
|
|
if get_option('documentation')
|
|
subdir('doc')
|
|
endif
|
|
|
|
if get_option('scanner')
|
|
install_data([
|
|
'wayland-scanner.mk',
|
|
'protocol/wayland.xml',
|
|
'protocol/wayland.dtd',
|
|
],
|
|
install_dir: join_paths(get_option('prefix'), get_option('datadir'), 'wayland'),
|
|
)
|
|
|
|
install_data(
|
|
[ 'wayland-scanner.m4' ],
|
|
install_dir: join_paths(get_option('prefix'), get_option('datadir'), 'aclocal'),
|
|
)
|
|
endif
|