weston/shared/meson.build
Alexandros Frantzis 8b6daa41ab libweston: Introduce a safer wayland signal emission
Wayland signals (wl_signal) do not reliably handle changes to the
notification list during signal emission. Such scenarios occasionally
come up and can be difficult to investigate and debug.

This commit introduces the weston_signal_emit_mutable() function which can be
used in place of wl_signal_emit() and safely implements the following
behavior regarding notification list changes:

1. Listeners deleted during a signal emission and which have not already been
   notified at the time of deletion are not notified by that emission.

2. Listeners added during signal emission are ignored by that emission.

The implementation of weston_signal_emit_mutable() is copied from the
wlr_signal_emit_safe() function of the wlroots project.

Signed-off-by: Alexandros Frantzis <alexandros.frantzis@collabora.com>
2021-12-14 17:55:06 +00:00

86 lines
2 KiB
Meson

srcs_libshared = [
'config-parser.c',
'option-parser.c',
'signal.c',
'file-util.c',
'os-compatibility.c',
'xalloc.c',
]
deps_libshared = [dep_wayland_client, dep_wayland_server]
lib_libshared = static_library(
'shared',
srcs_libshared,
include_directories: common_inc,
dependencies: deps_libshared,
pic: true,
install: false
)
dep_libshared = declare_dependency(
link_with: lib_libshared,
include_directories: public_inc,
dependencies: deps_libshared
)
srcs_cairo_shared = [
'image-loader.c',
'cairo-util.c',
'frame.c',
]
deps_cairo_shared = [
dep_libshared,
dependency('cairo'),
dependency('libpng'),
dep_pixman,
dep_libm,
]
dep_pango = dependency('pango', required: false)
dep_pangocairo = dependency('pangocairo', required: false)
dep_glib = dependency('glib-2.0', version: '>= 2.36', required: false)
if dep_pango.found() and dep_pangocairo.found() and dep_glib.found()
deps_cairo_shared += [ dep_pango, dep_pangocairo, dep_glib ]
config_h.set('HAVE_PANGO', '1')
endif
if get_option('image-jpeg')
dep_libjpeg = dependency('libjpeg', required: false)
if not dep_libjpeg.found()
dep_libjpeg = cc.find_library('jpeg', required: false)
endif
if not dep_libjpeg.found()
error('JPEG image loading requires libjpeg or jpeg, neither was found. Or, you can use \'-Dimage-jpeg=false\'.')
endif
deps_cairo_shared += dep_libjpeg
config_h.set('HAVE_JPEG', '1')
endif
if get_option('image-webp')
dep_webp = dependency('libwebp', required: false)
if not dep_webp.found()
error('WEBP image loading requires libwebp which was not found. Or, you can use \'-Dimage-webp=false\'.')
endif
deps_cairo_shared += dep_webp
config_h.set('HAVE_WEBP', '1')
endif
lib_cairo_shared = static_library(
'cairo-shared',
srcs_cairo_shared,
include_directories: common_inc,
dependencies: deps_cairo_shared,
install: false
)
dep_lib_cairo_shared = declare_dependency(
link_with: lib_cairo_shared,
dependencies: deps_cairo_shared
)
dep_matrix_c = declare_dependency(
sources: 'matrix.c',
include_directories: public_inc,
dependencies: dep_libm
)