Add Meson build system

Meson is a build system, currently implemented in Python, with multiple
output backends, including Ninja and Make. The build file syntax is
clean and easy to read unlike autotools. In practise, configuring and
building with Meson and Ninja has been observed to be much faster than
with autotools. Also cross-building support is excellent.

More information at http://mesonbuild.com

Since moving to Meson requires some changes from users in any case, we
took this opportunity to revamp build options. Most of the build options
still exist, some have changed names or more, and a few have been
dropped. The option to choose the Cairo flavour is not implemented since
for the longest time the Cairo image backend has been the only
recommended one.

This Meson build should be fully functional and it installs everything
an all-enabled autotools build does. Installed pkg-config files have
some minor differences that should be insignificant. Building of some
developer documentation that was never installed with autotools is
missing.

It is expected that the autotools build system will be removed soon
after the next Weston release.

Signed-off-by: Daniel Stone <daniels@collabora.com>
Co-authored-by: Pekka Paalanen <pq@iki.fi>
Signed-off-by: Pekka Paalanen <pq@iki.fi>
This commit is contained in:
Daniel Stone 2016-11-24 15:54:51 +00:00 committed by Pekka Paalanen
parent ed75c89fd5
commit 8011b0fa03
18 changed files with 2139 additions and 0 deletions

367
clients/meson.build Normal file
View File

@ -0,0 +1,367 @@
if get_option('resize-pool')
config_h.set('USE_RESIZE_POOL', '1')
endif
srcs_toytoolkit = [
'window.c',
xdg_shell_unstable_v6_client_protocol_h,
xdg_shell_unstable_v6_protocol_c,
text_cursor_position_client_protocol_h,
text_cursor_position_protocol_c,
relative_pointer_unstable_v1_client_protocol_h,
relative_pointer_unstable_v1_protocol_c,
pointer_constraints_unstable_v1_client_protocol_h,
pointer_constraints_unstable_v1_protocol_c,
ivi_application_client_protocol_h,
ivi_application_protocol_c,
]
deps_toytoolkit = [
dep_wayland_client,
dep_lib_cairo_shared,
dep_xkbcommon,
dependency('wayland-cursor'),
cc.find_library('util'),
]
lib_toytoolkit = static_library(
'toytoolkit',
srcs_toytoolkit,
include_directories: include_directories('..', '../shared'),
dependencies: deps_toytoolkit,
install: false,
)
dep_toytoolkit = declare_dependency(
link_with: lib_toytoolkit,
dependencies: deps_toytoolkit,
)
simple_clients = [
{
'name': 'damage',
'sources': [
'simple-damage.c',
viewporter_client_protocol_h,
viewporter_protocol_c,
xdg_shell_unstable_v6_client_protocol_h,
xdg_shell_unstable_v6_protocol_c,
fullscreen_shell_unstable_v1_client_protocol_h,
fullscreen_shell_unstable_v1_protocol_c,
],
'dep_objs': [ dep_wayland_client, dep_libshared ]
},
{
'name': 'dmabuf-v4l',
'sources': [
'simple-dmabuf-v4l.c',
linux_dmabuf_unstable_v1_client_protocol_h,
linux_dmabuf_unstable_v1_protocol_c,
xdg_shell_unstable_v6_client_protocol_h,
xdg_shell_unstable_v6_protocol_c,
fullscreen_shell_unstable_v1_client_protocol_h,
fullscreen_shell_unstable_v1_protocol_c,
],
'dep_objs': [ dep_wayland_client, dep_libdrm_headers ]
},
{
'name': 'egl',
'sources': [
'simple-egl.c',
xdg_shell_unstable_v6_client_protocol_h,
xdg_shell_unstable_v6_protocol_c,
ivi_application_client_protocol_h,
ivi_application_protocol_c,
],
'dep_objs': [ dep_wayland_client, dep_libshared, dep_libm ],
'deps': [ 'egl', 'wayland-egl', 'glesv2', 'wayland-cursor' ]
},
# weston-simple-im is handled specially separately due to install_dir and odd window.h usage
{
'name': 'shm',
'sources': [
'simple-shm.c',
xdg_shell_unstable_v6_client_protocol_h,
xdg_shell_unstable_v6_protocol_c,
fullscreen_shell_unstable_v1_client_protocol_h,
fullscreen_shell_unstable_v1_protocol_c,
ivi_application_client_protocol_h,
ivi_application_protocol_c,
],
'dep_objs': [ dep_wayland_client, dep_libshared ]
},
{
'name': 'touch',
'sources': [
'simple-touch.c',
],
'dep_objs': [ dep_wayland_client, dep_libshared ]
},
]
simple_clients_enabled = get_option('simple-clients')
simple_build_all = simple_clients_enabled.contains('all')
foreach t : simple_clients
if simple_build_all or simple_clients_enabled.contains(t.get('name'))
t_name = 'weston-simple-' + t.get('name')
t_deps = t.get('dep_objs', [])
foreach depname : t.get('deps', [])
dep = dependency(depname, required: false)
if not dep.found()
error('@0@ requires @1@ which was not found. If you rather not build this, drop "@2@" from simple-clients option.'.format(t_name, depname, t.get('name')))
endif
t_deps += dep
endforeach
executable(
t_name, t.get('sources'),
include_directories: include_directories('..'),
dependencies: t_deps,
install: true
)
endif
endforeach
if simple_build_all or simple_clients_enabled.contains('im')
executable(
'weston-simple-im', [
'simple-im.c',
input_method_unstable_v1_client_protocol_h,
input_method_unstable_v1_protocol_c,
],
include_directories: include_directories('..'),
dependencies: [
dep_libshared,
dep_wayland_client,
dep_xkbcommon,
dependency('wayland-cursor'),
dependency('cairo')
],
install: true,
install_dir: dir_libexec
)
endif
tools_enabled = get_option('tools')
tools_list = [
{
'name': 'calibrator',
'sources': [
'calibrator.c',
'../shared/matrix.c',
],
'deps': [ dep_toytoolkit ],
},
{
'name': 'debug',
'sources': [
'weston-debug.c',
weston_debug_client_protocol_h,
weston_debug_protocol_c,
],
'deps': [ dep_wayland_client ]
},
{
'name': 'info',
'sources': [
'weston-info.c',
presentation_time_client_protocol_h,
presentation_time_protocol_c,
linux_dmabuf_unstable_v1_client_protocol_h,
linux_dmabuf_unstable_v1_protocol_c,
tablet_unstable_v2_client_protocol_h,
tablet_unstable_v2_protocol_c,
xdg_output_unstable_v1_client_protocol_h,
xdg_output_unstable_v1_protocol_c,
],
'deps': [ dep_wayland_client, dep_libshared ]
},
{
'name': 'terminal',
'sources': [ 'terminal.c' ],
'deps': [ dep_toytoolkit ],
},
{
'name': 'touch-calibrator',
'sources': [
'touch-calibrator.c',
'../shared/matrix.c',
weston_touch_calibration_client_protocol_h,
weston_touch_calibration_protocol_c,
],
'deps': [ dep_toytoolkit ],
},
]
foreach t : tools_list
if tools_enabled.contains(t.get('name'))
executable(
'weston-@0@'.format(t.get('name')),
t.get('sources'),
include_directories: include_directories('..', '../shared'),
dependencies: t.get('deps', []),
install: true
)
endif
endforeach
demo_clients = [
{ 'basename': 'clickdot' },
{
'basename': 'cliptest',
'add_sources': [ '../libweston/vertex-clipping.c' ]
},
{ 'basename': 'confine' },
{ 'basename': 'dnd' },
{
'basename': 'editor',
'add_sources': [
text_input_unstable_v1_client_protocol_h,
text_input_unstable_v1_protocol_c,
],
'add_deps': [ dependency('pangocairo') ]
},
{ 'basename': 'eventdemo' },
{ 'basename': 'flower' },
{
'basename': 'fullscreen',
'add_sources': [
fullscreen_shell_unstable_v1_client_protocol_h,
fullscreen_shell_unstable_v1_protocol_c,
]
},
{ 'basename': 'image' },
{ 'basename': 'multi-resource' },
{
'basename': 'presentation-shm',
'add_sources': [
presentation_time_client_protocol_h,
presentation_time_protocol_c,
]
},
{ 'basename': 'resizor' },
{
'basename': 'scaler',
'add_sources': [
viewporter_client_protocol_h,
viewporter_protocol_c,
]
},
{ 'basename': 'smoke' },
{ 'basename': 'stacking' },
{
'basename': 'subsurfaces',
'add_deps': [ dep_egl, dep_glesv2, dep_wl_egl ]
},
{ 'basename': 'transformed' },
]
if get_option('demo-clients')
foreach t : demo_clients
t_name = 'weston-' + t.get('basename')
t_srcs = [ t.get('basename') + '.c' ] + t.get('add_sources', [])
t_deps = [ dep_toytoolkit ] + t.get('add_deps', [])
executable(
t_name, t_srcs,
include_directories: include_directories('..', '../shared'),
dependencies: t_deps,
install: true
)
endforeach
endif
simple_dmabuf_drm_opts = get_option('simple-dmabuf-drm')
simple_dmabuf_drm_deps = []
foreach driver : [ 'etnaviv', 'intel', 'freedreno' ]
if simple_dmabuf_drm_opts.contains(driver)
required = true
enabled = true
elif simple_dmabuf_drm_opts.contains('auto')
required = get_option('auto_features').enabled()
enabled = not get_option('auto_features').disabled()
else
enabled = false
endif
if enabled
dep = dependency('libdrm_' + driver, required: required)
if dep.found()
simple_dmabuf_drm_deps += dep
config_h.set('HAVE_LIBDRM_' + driver.to_upper(), 1)
endif
endif
endforeach
if simple_dmabuf_drm_deps.length() > 0
executable(
'weston-simple-dmabuf-drm',
'simple-dmabuf-drm.c',
xdg_shell_unstable_v6_client_protocol_h,
xdg_shell_unstable_v6_protocol_c,
fullscreen_shell_unstable_v1_client_protocol_h,
fullscreen_shell_unstable_v1_protocol_c,
linux_dmabuf_unstable_v1_client_protocol_h,
linux_dmabuf_unstable_v1_protocol_c,
include_directories: include_directories('..'),
dependencies: [
dep_wayland_client,
dep_libdrm,
simple_dmabuf_drm_deps
],
install: true
)
endif
if get_option('shell-desktop')
exe_keyboard = executable(
'weston-keyboard',
'keyboard.c',
text_input_unstable_v1_client_protocol_h,
text_input_unstable_v1_protocol_c,
input_method_unstable_v1_client_protocol_h,
input_method_unstable_v1_protocol_c,
include_directories: include_directories('..'),
dependencies: dep_toytoolkit,
install_dir: get_option('libexecdir'),
install: true
)
env_modmap += 'weston-keyboard=@0@;'.format(exe_keyboard.full_path())
exe_shooter = executable(
'weston-screenshooter',
'screenshot.c',
weston_screenshooter_client_protocol_h,
weston_screenshooter_protocol_c,
include_directories: include_directories('..'),
dependencies: dep_toytoolkit,
install_dir: get_option('libexecdir'),
install: true
)
env_modmap += 'weston-screenshooter=@0@;'.format(exe_shooter.full_path())
exe_shell_desktop = executable(
'weston-desktop-shell',
'desktop-shell.c',
weston_desktop_shell_client_protocol_h,
weston_desktop_shell_protocol_c,
include_directories: include_directories('..'),
dependencies: dep_toytoolkit,
install_dir: get_option('libexecdir'),
install: true
)
env_modmap += 'weston-desktop-shell=@0@;'.format(exe_shell_desktop.full_path())
endif
if get_option('shell-ivi')
exe_shell_ivi_ui = executable(
'weston-ivi-shell-user-interface',
'ivi-shell-user-interface.c',
ivi_hmi_controller_client_protocol_h,
ivi_hmi_controller_protocol_c,
ivi_application_client_protocol_h,
ivi_application_protocol_c,
include_directories: include_directories('..'),
dependencies: dep_toytoolkit,
install: true,
install_dir: get_option('libexecdir')
)
env_modmap += 'weston-ivi-shell-user-interface=@0@;'.format(exe_shell_ivi_ui.full_path())
endif

146
compositor/meson.build Normal file
View File

@ -0,0 +1,146 @@
srcs_weston = [
git_version_h,
'main.c',
'text-backend.c',
'weston-screenshooter.c',
text_input_unstable_v1_server_protocol_h,
text_input_unstable_v1_protocol_c,
input_method_unstable_v1_server_protocol_h,
input_method_unstable_v1_protocol_c,
weston_screenshooter_server_protocol_h,
weston_screenshooter_protocol_c,
]
deps_weston = [
dep_libshared,
dep_libweston,
dep_libinput,
dep_libdl,
dep_threads,
]
if get_option('xwayland')
srcs_weston += 'xwayland.c'
config_h.set_quoted('XSERVER_PATH', get_option('xwayland-path'))
endif
exe_weston = executable(
'weston',
srcs_weston,
include_directories: include_directories('..', '../shared'),
link_args: [ '-export-dynamic' ],
dependencies: deps_weston,
install: true
)
install_headers('weston.h', subdir: 'weston')
pkgconfig.generate(
filebase: 'weston',
name: 'Weston Plugin API',
version: version_weston,
description: 'Header files for Weston plugin development',
requires_private: [ lib_weston ],
variables: [
'libexecdir=' + join_paths('${prefix}', get_option('libexecdir')),
'pkglibexecdir=${libexecdir}/weston'
],
subdirs: 'weston'
)
install_data(
'weston.desktop',
install_dir: join_paths(dir_data, 'wayland-sessions')
)
if get_option('screenshare')
srcs_screenshare = [
'screen-share.c',
fullscreen_shell_unstable_v1_client_protocol_h,
fullscreen_shell_unstable_v1_protocol_c,
]
deps_screenshare = [
dep_libweston,
dep_wayland_client,
]
plugin_screenshare = shared_library(
'screen-share',
srcs_screenshare,
include_directories: include_directories('..', '../shared'),
dependencies: deps_screenshare,
name_prefix: '',
install: true,
install_dir: dir_module_weston
)
env_modmap += 'screen-share.so=@0@;'.format(plugin_screenshare.full_path())
endif
if get_option('color-management-lcms')
config_h.set('HAVE_LCMS', '1')
srcs_lcms = [
'cms-static.c',
'cms-helper.c',
]
deps_lcms = [
dep_libweston,
dependency('lcms2'),
]
plugin_lcms = shared_library(
'cms-static',
srcs_lcms,
include_directories: include_directories('..', '../shared'),
dependencies: deps_lcms,
name_prefix: '',
install: true,
install_dir: dir_module_weston
)
env_modmap += 'cms-static.so=@0@;'.format(plugin_lcms.full_path())
endif
if get_option('color-management-colord')
if not get_option('color-management-lcms')
error('LCMS must be enabled to support colord')
endif
srcs_colord = [
'cms-colord.c',
'cms-helper.c',
]
deps_colord = [
dep_libweston,
dependency('colord', version: '>= 0.1.27')
]
plugin_colord = shared_library(
'cms-colord',
srcs_colord,
include_directories: include_directories('..', '../shared'),
dependencies: deps_colord,
name_prefix: '',
install: true,
install_dir: dir_module_weston
)
env_modmap += 'cms-colord.so=@0@;'.format(plugin_colord.full_path())
endif
if get_option('systemd')
plugin_systemd_notify = shared_library(
'systemd-notify',
'systemd-notify.c',
include_directories: include_directories('..', '../shared'),
dependencies: [ dep_libweston, dependency('libsystemd') ],
name_prefix: '',
install: true,
install_dir: dir_module_weston
)
env_modmap += 'systemd-notify.so=@0@;'.format(plugin_systemd_notify.full_path())
endif
weston_ini_config = configuration_data()
weston_ini_config.set('bindir', dir_bin)
weston_ini_config.set('libexecdir', dir_libexec)
weston_ini_config.set('abs_top_srcdir', meson.source_root())
weston_ini_config.set('abs_top_builddir', meson.build_root())
configure_file(
input: '../weston.ini.in',
output: 'weston.ini',
configuration: weston_ini_config
)

29
data/meson.build Normal file
View File

@ -0,0 +1,29 @@
install_data(
[
'background.png',
'border.png',
'fullscreen.png',
'home.png',
'icon_editor.png',
'icon_flower.png',
'icon_ivi_clickdot.png',
'icon_ivi_flower.png',
'icon_ivi_simple-egl.png',
'icon_ivi_simple-shm.png',
'icon_ivi_smoke.png',
'icon_terminal.png',
'icon_window.png',
'panel.png',
'pattern.png',
'random.png',
'sidebyside.png',
'sign_close.png',
'sign_maximize.png',
'sign_minimize.png',
'terminal.png',
'tiling.png',
'wayland.png',
'wayland.svg',
],
install_dir: join_paths(dir_data, 'weston')
)

29
desktop-shell/meson.build Normal file
View File

@ -0,0 +1,29 @@
if get_option('shell-desktop')
config_h.set_quoted('WESTON_SHELL_CLIENT', get_option('desktop-shell-client-default'))
srcs_shell_desktop = [
'shell.c',
'exposay.c',
'input-panel.c',
'../shared/matrix.c',
weston_desktop_shell_server_protocol_h,
weston_desktop_shell_protocol_c,
input_method_unstable_v1_server_protocol_h,
input_method_unstable_v1_protocol_c,
]
deps_shell_desktop = [
dep_libshared,
dep_lib_desktop,
dep_libweston,
]
plugin_shell_desktop = shared_library(
'desktop-shell',
srcs_shell_desktop,
include_directories: include_directories('..', '../shared'),
dependencies: deps_shell_desktop,
name_prefix: '',
install: true,
install_dir: dir_module_weston
)
env_modmap += 'desktop-shell.so=@0@;'.format(plugin_shell_desktop.full_path())
endif

View File

@ -0,0 +1,17 @@
if get_option('shell-fullscreen')
srcs_shell_fullscreen = [
'fullscreen-shell.c',
'../shared/matrix.c',
fullscreen_shell_unstable_v1_server_protocol_h,
fullscreen_shell_unstable_v1_protocol_c,
]
shared_library(
'fullscreen-shell',
srcs_shell_fullscreen,
include_directories: include_directories('..', '../shared'),
dependencies: dep_libweston,
name_prefix: '',
install: true,
install_dir: dir_module_weston
)
endif

53
ivi-shell/meson.build Normal file
View File

@ -0,0 +1,53 @@
if get_option('shell-ivi')
srcs_shell_ivi = [
'ivi-shell.c',
'ivi-layout.c',
'ivi-layout-transition.c',
ivi_application_server_protocol_h,
ivi_application_protocol_c,
input_method_unstable_v1_server_protocol_h,
input_method_unstable_v1_protocol_c,
]
plugin_shell_ivi = shared_library(
'ivi-shell',
srcs_shell_ivi,
include_directories: include_directories('..', '../shared'),
dependencies: dep_libweston,
name_prefix: '',
install: true,
install_dir: dir_module_weston
)
env_modmap += 'ivi-shell.so=@0@;'.format(plugin_shell_ivi.full_path())
install_headers('ivi-layout-export.h', subdir: 'weston')
srcs_ivi_hmi = [
'hmi-controller.c',
ivi_hmi_controller_server_protocol_h,
ivi_hmi_controller_protocol_c,
]
plugin_ivi_hmi = shared_library(
'hmi-controller',
srcs_ivi_hmi,
include_directories: include_directories('..', '../shared'),
dependencies: dep_libweston,
name_prefix: '',
install: true,
install_dir: dir_module_weston
)
env_modmap += 'hmi-controller.so=@0@;'.format(plugin_ivi_hmi.full_path())
ivi_test_config = configuration_data()
ivi_test_config.set('bindir', dir_bin)
ivi_test_config.set('libexecdir', dir_libexec)
ivi_test_config.set('abs_top_srcdir', meson.current_source_dir())
ivi_test_config.set('abs_top_builddir', meson.current_build_dir())
ivi_test_config.set('plugin_prefix', meson.current_build_dir())
ivi_test_config.set('westondatadir', join_paths(dir_data, 'weston'))
ivi_test_ini = configure_file(
input: '../ivi-shell/weston.ini.in',
output: 'weston-ivi-test.ini',
install: false,
configuration: ivi_test_config
)
endif

View File

@ -0,0 +1,35 @@
srcs_libdesktop = [
'libweston-desktop.c',
'client.c',
'seat.c',
'surface.c',
'xwayland.c',
'wl-shell.c',
'xdg-shell-v6.c',
xdg_shell_unstable_v6_server_protocol_h,
xdg_shell_unstable_v6_protocol_c,
]
lib_desktop = shared_library(
'weston-desktop-@0@'.format(libweston_major),
srcs_libdesktop,
include_directories: include_directories('..', '../shared'),
install: true,
version: '0.0.@0@'.format(libweston_revision),
dependencies: dep_libweston
)
dep_lib_desktop = declare_dependency(
link_with: lib_desktop,
dependencies: dep_libweston
)
install_headers('libweston-desktop.h', subdir: dir_include_libweston)
pkgconfig.generate(
filebase: 'libweston-desktop-@0@'.format(libweston_major),
name: 'libweston-desktop',
version: version_weston,
description: 'Desktop shells abstraction library for libweston compositors',
libraries: lib_desktop,
requires_private: [ lib_weston, dep_wayland_server ],
subdirs: dir_include_libweston
)

View File

@ -0,0 +1 @@
#define BUILD_ID "@VCS_TAG@"

438
libweston/meson.build Normal file
View File

@ -0,0 +1,438 @@
deps_libweston = [
dep_wayland_server,
dep_pixman,
dep_libm,
dep_libdl,
dep_libdrm_headers,
dep_libshared,
dep_xkbcommon,
]
srcs_libweston = [
git_version_h,
'animation.c',
'bindings.c',
'clipboard.c',
'compositor.c',
'data-device.c',
'input.c',
'linux-dmabuf.c',
'log.c',
'noop-renderer.c',
'pixel-formats.c',
'pixman-renderer.c',
'plugin-registry.c',
'screenshooter.c',
'timeline.c',
'touch-calibration.c',
'weston-debug.c',
'zoom.c',
'../shared/matrix.c',
linux_dmabuf_unstable_v1_protocol_c,
linux_dmabuf_unstable_v1_server_protocol_h,
input_method_unstable_v1_protocol_c,
input_method_unstable_v1_server_protocol_h,
input_timestamps_unstable_v1_protocol_c,
input_timestamps_unstable_v1_server_protocol_h,
presentation_time_protocol_c,
presentation_time_server_protocol_h,
pointer_constraints_unstable_v1_protocol_c,
pointer_constraints_unstable_v1_server_protocol_h,
relative_pointer_unstable_v1_protocol_c,
relative_pointer_unstable_v1_server_protocol_h,
weston_screenshooter_protocol_c,
weston_screenshooter_server_protocol_h,
text_cursor_position_protocol_c,
text_cursor_position_server_protocol_h,
text_input_unstable_v1_protocol_c,
text_input_unstable_v1_server_protocol_h,
weston_touch_calibration_protocol_c,
weston_touch_calibration_server_protocol_h,
viewporter_protocol_c,
viewporter_server_protocol_h,
weston_debug_protocol_c,
weston_debug_server_protocol_h,
]
install_headers(
'compositor.h',
'plugin-registry.h',
'timeline-object.h',
'windowed-output-api.h',
'../shared/config-parser.h',
'../shared/matrix.h',
'../shared/zalloc.h',
subdir: dir_include_libweston
)
lib_weston = shared_library(
'weston-@0@'.format(libweston_major),
srcs_libweston,
include_directories: include_directories('..', '../shared'),
link_args: [ '-export-dynamic' ],
install: true,
version: '0.0.@0@'.format(libweston_revision),
dependencies: deps_libweston
)
dep_libweston = declare_dependency(
link_with: lib_weston,
include_directories: include_directories('.'),
dependencies: deps_libweston
)
pkgconfig.generate(
filebase: 'libweston-@0@'.format(libweston_major),
name: 'libweston API',
version: version_weston,
description: 'Header files for libweston compositors development',
libraries: lib_weston,
requires_private: [ dep_wayland_server, dep_pixman, dep_xkbcommon ],
subdirs: dir_include_libweston
)
pkgconfig.generate(
filebase: 'libweston-@0@-protocols'.format(libweston_major),
name: 'libWeston Protocols',
version: version_weston,
description: 'libWeston protocol files',
variables: [
'datarootdir=' + join_paths('${prefix}', get_option('datadir')),
'pkgdatadir=' + join_paths('${pc_sysrootdir}${datarootdir}', dir_protocol_libweston)
],
install_dir: dir_data_pc
)
srcs_session_helper = [
'launcher-direct.c',
'launcher-util.c',
'launcher-weston-launch.c',
]
deps_session_helper = [
# for compositor.h needing pixman.h
dep_pixman.partial_dependency(compile_args: true)
]
if get_option('backend-drm')
deps_session_helper += dep_libdrm
endif
systemd_dep = dependency('', required: false)
if get_option('launcher-logind')
systemd_dep = dependency('libsystemd', version: '>= 209', required: false)
if systemd_dep.found()
config_h.set('HAVE_SYSTEMD_LOGIN_209', '1')
else
systemd_dep = dependency('libsystemd-login', version: '>= 198')
endif
config_h.set('HAVE_DBUS', '1')
config_h.set('HAVE_SYSTEMD_LOGIN', '1')
srcs_session_helper += [
'dbus.c',
'launcher-logind.c',
]
deps_session_helper += [
dependency('dbus-1', version: '>= 1.6'),
systemd_dep,
]
endif
lib_session_helper = static_library(
'session-helper',
srcs_session_helper,
include_directories: include_directories('..', '../shared'),
dependencies: deps_session_helper,
install: false
)
dep_session_helper = declare_dependency(link_with: lib_session_helper)
if get_option('backend-drm')
config_h.set('BUILD_DRM_COMPOSITOR', '1')
srcs_drm = [
'compositor-drm.c',
'libbacklight.c',
'libinput-device.c',
'libinput-seat.c',
linux_dmabuf_unstable_v1_protocol_c,
linux_dmabuf_unstable_v1_server_protocol_h,
presentation_time_server_protocol_h,
]
deps_drm = [
dep_libweston,
dep_session_helper,
dep_libdrm,
dep_libinput,
dependency('libudev', version: '>= 136'),
]
if get_option('renderer-gl')
dep_gbm = dependency('gbm')
if dep_gbm.version().version_compare('>= 17.1')
config_h.set('HAVE_GBM_MODIFIERS', '1')
endif
if dep_gbm.version().version_compare('>= 17.2')
config_h.set('HAVE_GBM_FD_IMPORT', '1')
endif
deps_drm += dep_gbm
endif
if get_option('backend-drm-screencast-vaapi')
srcs_drm += 'vaapi-recorder.c'
deps_drm += [
dependency('libva', version: '>= 0.34.0'),
dependency('libva-drm', version: '>= 0.34.0'),
dependency('threads'),
]
config_h.set('BUILD_VAAPI_RECORDER', '1')
endif
if dep_libdrm.version().version_compare('>= 2.4.71')
config_h.set('HAVE_DRM_ADDFB2_MODIFIERS', '1')
endif
if dep_libdrm.version().version_compare('>= 2.4.78')
config_h.set('HAVE_DRM_ATOMIC', '1')
endif
if dep_libdrm.version().version_compare('>= 2.4.83')
config_h.set('HAVE_DRM_FORMATS_BLOB', '1')
endif
plugin_drm = shared_library(
'drm-backend',
srcs_drm,
include_directories: include_directories('..', '../shared'),
dependencies: deps_drm,
name_prefix: '',
install: true,
install_dir: dir_module_libweston
)
env_modmap += 'drm-backend.so=@0@;'.format(plugin_drm.full_path())
install_headers('compositor-drm.h', subdir: dir_include_libweston)
endif
if get_option('backend-headless')
config_h.set('BUILD_HEADLESS_COMPOSITOR', '1')
srcs_headless = [
'compositor-headless.c',
presentation_time_server_protocol_h,
]
plugin_headless = shared_library(
'headless-backend',
srcs_headless,
include_directories: include_directories('..', '../shared'),
dependencies: dep_libweston,
name_prefix: '',
install: true,
install_dir: dir_module_libweston,
)
env_modmap += 'headless-backend.so=@0@;'.format(plugin_headless.full_path())
install_headers('compositor-headless.h', subdir: dir_include_libweston)
endif
if get_option('backend-rdp')
config_h.set('BUILD_RDP_COMPOSITOR', '1')
dep_frdp = dependency('freerdp2', version: '>= 2.0.0', required: false)
if not dep_frdp.found()
dep_frdp = dependency('freerdp', version: '>= 1.1.0')
endif
if cc.has_header('freerdp/version.h', dependencies: dep_frdp)
config_h.set('HAVE_FREERDP_VERSION_H', '1')
endif
if cc.has_member(
'SURFACE_BITS_COMMAND', 'bmp',
dependencies : dep_frdp,
prefix : '#include <freerdp/update.h>'
)
config_h.set('HAVE_SURFACE_BITS_BMP', '1')
endif
deps_rdp = [
dep_libweston,
dep_frdp,
]
plugin_rdp = shared_library(
'rdp-backend',
'compositor-rdp.c',
include_directories: include_directories('..', '../shared'),
dependencies: deps_rdp,
name_prefix: '',
install: true,
install_dir: dir_module_libweston
)
env_modmap += 'rdp-backend.so=@0@;'.format(plugin_rdp.full_path())
install_headers('compositor-rdp.h', subdir: dir_include_libweston)
endif
if get_option('backend-wayland')
config_h.set('BUILD_WAYLAND_COMPOSITOR', '1')
srcs_wlwl = [
'compositor-wayland.c',
fullscreen_shell_unstable_v1_client_protocol_h,
fullscreen_shell_unstable_v1_protocol_c,
presentation_time_protocol_c,
presentation_time_server_protocol_h,
xdg_shell_unstable_v6_client_protocol_h,
xdg_shell_unstable_v6_protocol_c,
]
deps_wlwl = [
dependency('wayland-client'),
dependency('wayland-cursor'),
dep_pixman,
dep_libweston,
dep_lib_cairo_shared,
]
if get_option('renderer-gl')
deps_wlwl += dep_wl_egl
endif
plugin_wlwl = shared_library(
'wayland-backend',
srcs_wlwl,
include_directories: include_directories('..', '../shared'),
dependencies: deps_wlwl,
name_prefix: '',
install: true,
install_dir: dir_module_libweston
)
env_modmap += 'wayland-backend.so=@0@;'.format(plugin_wlwl.full_path())
install_headers('compositor-wayland.h', subdir: dir_include_libweston)
endif
if get_option('backend-x11')
config_h.set('BUILD_X11_COMPOSITOR', '1')
srcs_x11 = [
'compositor-x11.c',
presentation_time_server_protocol_h,
]
deps_x11 = [
dependency('xcb', version: '>= 1.8'),
dependency('xcb-shm'),
dependency('x11'),
dependency('x11-xcb'),
dep_lib_cairo_shared,
dep_pixman,
]
dep_xcb_xkb = dependency('xcb-xkb', version: '>= 1.9', required: false)
if dep_xcb_xkb.found()
deps_x11 += dep_xcb_xkb
config_h.set('HAVE_XCB_XKB', '1')
endif
if get_option('renderer-gl')
deps_x11 += dependency('egl')
endif
plugin_x11 = shared_library(
'x11-backend',
srcs_x11,
include_directories: include_directories('..', '../shared'),
dependencies: deps_x11,
name_prefix: '',
install: true,
install_dir: dir_module_libweston
)
env_modmap += 'x11-backend.so=@0@;'.format(plugin_x11.full_path())
install_headers('compositor-x11.h', subdir: dir_include_libweston)
endif
if get_option('backend-fbdev')
config_h.set('BUILD_FBDEV_COMPOSITOR', '1')
srcs_fbdev = [
'compositor-fbdev.c',
'libinput-device.c',
'libinput-seat.c',
presentation_time_server_protocol_h,
]
deps_fbdev = [
dep_libweston,
dep_session_helper,
dep_libinput,
dependency('libudev', version: '>= 136'),
]
plugin_fbdev = shared_library(
'fbdev-backend',
srcs_fbdev,
include_directories: include_directories('..', '../shared'),
dependencies: deps_fbdev,
name_prefix: '',
install: true,
install_dir: dir_module_libweston
)
env_modmap += 'fbdev-backend.so=@0@;'.format(plugin_fbdev.full_path())
install_headers('compositor-fbdev.h', subdir: dir_include_libweston)
endif
if get_option('renderer-gl')
config_h.set('ENABLE_EGL', '1')
if not dep_egl.found() or not dep_glesv2.found()
error('gl-renderer enabled but EGL/GLESv2 not found')
endif
srcs_renderer_gl = [
'gl-renderer.c',
'vertex-clipping.c',
'../shared/matrix.c',
linux_dmabuf_unstable_v1_protocol_c,
linux_dmabuf_unstable_v1_server_protocol_h,
]
deps_renderer_gl = [
dep_egl,
dep_glesv2,
dep_pixman,
dep_libweston,
dep_libdrm_headers,
]
plugin_gl = shared_library(
'gl-renderer',
srcs_renderer_gl,
include_directories: include_directories('..', '../shared'),
dependencies: deps_renderer_gl,
name_prefix: '',
install: true,
install_dir: dir_module_libweston
)
env_modmap += 'gl-renderer.so=@0@;'.format(plugin_gl.full_path())
endif
if get_option('weston-launch')
dep_pam = cc.find_library('pam')
if not cc.has_function('pam_open_session', dependencies: dep_pam)
error('pam_open_session not found for weston-launch')
endif
executable(
'weston-launch',
'weston-launch.c',
dependencies: [dep_pam, systemd_dep, dep_libdrm],
include_directories: include_directories('..'),
install: true
)
endif

53
man/meson.build Normal file
View File

@ -0,0 +1,53 @@
man_conf = configuration_data()
man_conf.set('weston_native_backend', opt_backend_native)
man_conf.set('weston_modules_dir', dir_module_weston)
man_conf.set('libweston_modules_dir', dir_module_libweston)
man_conf.set('weston_shell_client', get_option('desktop-shell-client-default'))
man_conf.set('weston_libexecdir', dir_libexec)
man_conf.set('weston_bindir', dir_bin)
man_conf.set('xserver_path', get_option('xwayland-path'))
man_conf.set('version', version_weston)
configure_file(
input: 'weston.man',
output: 'weston.1',
install: true,
install_dir: join_paths(dir_man, 'man1'),
configuration: man_conf
)
configure_file(
input: 'weston-debug.man',
output: 'weston-debug.1',
install: true,
install_dir: join_paths(dir_man, 'man1'),
configuration: man_conf
)
configure_file(
input: 'weston.ini.man',
output: 'weston.ini.5',
install: true,
install_dir: join_paths(dir_man, 'man5'),
configuration: man_conf
)
if get_option('backend-drm')
configure_file(
input: 'weston-drm.man',
output: 'weston-drm.7',
install: true,
install_dir: join_paths(dir_man, 'man7'),
configuration: man_conf
)
endif
if get_option('backend-rdp')
configure_file(
input: 'weston-rdp.man',
output: 'weston-rdp.7',
install: true,
install_dir: join_paths(dir_man, 'man7'),
configuration: man_conf
)
endif

174
meson.build Normal file
View File

@ -0,0 +1,174 @@
project('weston',
'c',
version: '5.0.90',
default_options: [
'warning_level=2',
'c_std=gnu99',
'b_lundef=false',
],
meson_version: '>= 0.47',
license: 'MIT/Expat',
)
libweston_major = 5
# libweston_revision is manufactured to follow the autotools build's
# library file naming, thanks to libtool
version_weston = meson.project_version()
version_weston_arr = version_weston.split('.')
if libweston_major > version_weston_arr[0].to_int()
if libweston_major > version_weston_arr[0].to_int() + 1
error('Bad versions in meson.build: libweston_major is too high')
endif
libweston_revision = 0
elif libweston_major == version_weston_arr[0].to_int()
libweston_revision = version_weston_arr[2].to_int()
else
error('Bad versions in meson.build: libweston_major is too low')
endif
dir_prefix = get_option('prefix')
dir_bin = join_paths(dir_prefix, get_option('bindir'))
dir_data = join_paths(dir_prefix, get_option('datadir'))
dir_include = join_paths(dir_prefix, get_option('includedir'))
dir_include_libweston = 'libweston-@0@'.format(libweston_major)
dir_lib = join_paths(dir_prefix, get_option('libdir'))
dir_libexec = join_paths(dir_prefix, get_option('libexecdir'))
dir_module_weston = join_paths(dir_lib, 'weston')
dir_module_libweston = join_paths(dir_lib, 'libweston-@0@'.format(libweston_major))
dir_data_pc = join_paths(dir_data, 'pkgconfig')
dir_lib_pc = join_paths(dir_lib, 'pkgconfig')
dir_man = join_paths(dir_prefix, get_option('mandir'))
dir_protocol_libweston = 'weston/protocols' # XXX: this should be 'libweston'
pkgconfig = import('pkgconfig')
libweston_version_h = configuration_data()
libweston_version_h.set('WESTON_VERSION_MAJOR', version_weston_arr[0])
libweston_version_h.set('WESTON_VERSION_MINOR', version_weston_arr[1])
libweston_version_h.set('WESTON_VERSION_MICRO', version_weston_arr[2])
libweston_version_h.set('WESTON_VERSION', version_weston)
version_h = configure_file(
input: 'libweston/version.h.in',
output: 'version.h',
configuration: libweston_version_h
)
install_headers(version_h, subdir: dir_include_libweston)
git_version_h = vcs_tag(
input: 'libweston/git-version.h.meson',
output: 'git-version.h',
fallback: version_weston
)
config_h = configuration_data()
cc = meson.get_compiler('c')
global_args = []
global_args_maybe = [
'-Wno-unused-parameter',
'-Wno-shift-negative-value', # required due to Pixman
'-Wno-missing-field-initializers',
'-fvisibility=hidden',
'-DIN_WESTON',
]
foreach a : global_args_maybe
if cc.has_argument(a)
global_args += a
endif
endforeach
add_global_arguments(global_args, language: 'c')
if cc.has_header_symbol('sys/sysmacros.h', 'major')
config_h.set('MAJOR_IN_SYSMACROS', 1)
elif cc.has_header_symbol('sys/mkdev.h', 'major')
config_h.set('MAJOR_IN_MKDEV', 1)
endif
optional_libc_funcs = [
'mkostemp', 'strchrnul', 'initgroups', 'posix_fallocate'
]
foreach func : optional_libc_funcs
if cc.has_function(func)
config_h.set('HAVE_' + func.to_upper(), 1)
endif
endforeach
optional_system_headers = [
'linux/sync_file.h'
]
foreach hdr : optional_system_headers
if cc.has_header(hdr)
config_h.set('HAVE_' + hdr.underscorify().to_upper(), 1)
endif
endforeach
env_modmap = ''
config_h.set('_GNU_SOURCE', '1')
config_h.set('_ALL_SOURCE', '1')
config_h.set_quoted('PACKAGE_STRING', 'weston @0@'.format(version_weston))
config_h.set_quoted('PACKAGE_VERSION', version_weston)
config_h.set_quoted('VERSION', version_weston)
config_h.set_quoted('PACKAGE_URL', 'https://wayland.freedesktop.org')
config_h.set_quoted('PACKAGE_BUGREPORT', 'https://gitlab.freedesktop.org/wayland/weston/issues/')
config_h.set_quoted('BINDIR', dir_bin)
config_h.set_quoted('DATADIR', dir_data)
config_h.set_quoted('LIBEXECDIR', dir_libexec)
config_h.set_quoted('MODULEDIR', dir_module_weston)
config_h.set_quoted('LIBWESTON_MODULEDIR', dir_module_libweston)
backend_default = get_option('backend-default')
if backend_default == 'auto'
foreach b : [ 'headless', 'fbdev', 'x11', 'wayland', 'drm' ]
if get_option('backend-' + b)
backend_default = b
endif
endforeach
endif
opt_backend_native = backend_default + '-backend.so'
config_h.set_quoted('WESTON_NATIVE_BACKEND', opt_backend_native)
message('The default backend is ' + backend_default)
if not get_option('backend-' + backend_default)
error('Backend @0@ was chosen as native but is not being built.'.format(backend_default))
endif
dep_xkbcommon = dependency('xkbcommon', version: '>= 0.3.0')
if dep_xkbcommon.version().version_compare('>= 0.5.0')
config_h.set('HAVE_XKBCOMMON_COMPOSE', '1')
endif
dep_wayland_server = dependency('wayland-server', version: '>= 1.12.0')
dep_wayland_client = dependency('wayland-client', version: '>= 1.12.0')
dep_pixman = dependency('pixman-1', version: '>= 0.25.2')
dep_libinput = dependency('libinput', version: '>= 0.8.0')
dep_libm = cc.find_library('m')
dep_libdl = cc.find_library('dl')
dep_libdrm = dependency('libdrm', version: '>= 2.4.68')
dep_libdrm_headers = dep_libdrm.partial_dependency(compile_args: true)
dep_egl = dependency('egl', required: false)
dep_wl_egl = dependency('wayland-egl')
dep_glesv2 = dependency('glesv2', required: false)
dep_threads = dependency('threads')
subdir('protocol')
subdir('shared')
subdir('libweston')
subdir('libweston-desktop')
subdir('xwayland')
subdir('compositor')
subdir('desktop-shell')
subdir('fullscreen-shell')
subdir('ivi-shell')
subdir('remoting')
subdir('clients')
subdir('wcap')
subdir('tests')
subdir('data')
subdir('man')
configure_file(output: 'config.h', install: false, configuration: config_h)
# TODO: process doc/doxygen/*.doxygen.in

206
meson_options.txt Normal file
View File

@ -0,0 +1,206 @@
# This option is not implemented:
# --with-cairo=[image|gl|glesv2] Which Cairo renderer to use for the clients
# It is hardcoded to cairo-image for now.
option(
'backend-drm',
type: 'boolean',
value: true,
description: 'Weston backend: DRM/KMS'
)
option(
'backend-drm-screencast-vaapi',
type: 'boolean',
value: true,
description: 'DRM/KMS backend support for VA-API screencasting'
)
option(
'backend-headless',
type: 'boolean',
value: true,
description: 'Weston backend: headless (testing)'
)
option(
'backend-rdp',
type: 'boolean',
value: true,
description: 'Weston backend: RDP remote screensharing'
)
option(
'screenshare',
type: 'boolean',
value: true,
description: 'Compositor: RDP screen-sharing support'
)
option(
'backend-wayland',
type: 'boolean',
value: true,
description: 'Weston backend: Wayland (nested)'
)
option(
'backend-x11',
type: 'boolean',
value: true,
description: 'Weston backend: X11 (nested)'
)
option(
'backend-fbdev',
type: 'boolean',
value: true,
description: 'Weston backend: fbdev'
)
option(
'backend-default',
type: 'combo',
choices: [ 'auto', 'drm', 'wayland', 'x11', 'fbdev', 'headless' ],
value: 'drm',
description: 'Default backend when no parent display server detected'
)
option(
'renderer-gl',
type: 'boolean',
value: true,
description: 'Weston renderer: EGL / OpenGL ES 2.x'
)
option(
'weston-launch',
type: 'boolean',
value: true,
description: 'Weston launcher for systems without logind'
)
option(
'xwayland',
type: 'boolean',
value: true,
description: 'Xwayland: support for X11 clients inside Weston'
)
option(
'xwayland-path',
type: 'string',
value: '/usr/bin/Xwayland',
description: 'Xwayland: path to installed Xwayland binary'
)
option(
'systemd',
type: 'boolean',
value: true,
description: 'systemd service plugin: state notify, watchdog, socket activation'
)
option(
'remoting',
type: 'boolean',
value: true,
description: 'Virtual remote output with GStreamer on DRM backend'
)
option(
'shell-desktop',
type: 'boolean',
value: true,
description: 'Weston shell UI: traditional desktop'
)
option(
'shell-fullscreen',
type: 'boolean',
value: true,
description: 'Weston shell UI: fullscreen/kiosk'
)
option(
'shell-ivi',
type: 'boolean',
value: true,
description: 'Weston shell UI: IVI (automotive)'
)
option(
'desktop-shell-client-default',
type: 'string',
value: 'weston-desktop-shell',
description: 'Weston desktop shell: default helper client selection'
)
option(
'color-management-lcms',
type: 'boolean',
value: true,
description: 'Compositor color management: lcms'
)
option(
'color-management-colord',
type: 'boolean',
value: true,
description: 'Compositor color management: colord (requires lcms)'
)
option(
'launcher-logind',
type: 'boolean',
value: true,
description: 'Compositor: support systemd-logind D-Bus protocol'
)
option(
'image-jpeg',
type: 'boolean',
value: true,
description: 'JPEG loading support'
)
option(
'image-webp',
type: 'boolean',
value: true,
description: 'WebP loading support'
)
option(
'tools',
type: 'array',
choices: [ 'calibrator', 'debug', 'info', 'terminal', 'touch-calibrator' ],
description: 'List of accessory clients to build and install'
)
option(
'simple-dmabuf-drm',
type: 'array',
choices: [ 'auto', 'intel', 'freedreno', 'etnaviv' ],
value: [ 'intel', 'freedreno', 'etnaviv' ],
description: 'List of DRM drivers to be supported by weston-simple-dmabuf-drm'
)
option(
'demo-clients',
type: 'boolean',
value: true,
description: 'Sample clients: toytoolkit demo programs'
)
option(
'simple-clients',
type: 'array',
choices: [ 'all', 'damage', 'im', 'egl', 'shm', 'touch', 'dmabuf-v4l' ],
value: [ 'all' ],
description: 'Sample clients: simple test programs'
)
option(
'resize-pool',
type: 'boolean',
value: true,
description: 'Sample clients: optimize window resize performance'
)
option(
'wcap-decode',
type: 'boolean',
value: true,
description: 'Tools: screen recording decoder tool'
)
option(
'test-junit-xml',
type: 'boolean',
value: true,
description: 'Tests: output JUnit XML results'
)

72
protocol/meson.build Normal file
View File

@ -0,0 +1,72 @@
dep_scanner = dependency('wayland-scanner', native: true)
prog_scanner = find_program(dep_scanner.get_pkgconfig_variable('wayland_scanner'))
dep_wp = dependency('wayland-protocols', version: '>= 1.14')
dir_wp_base = dep_wp.get_pkgconfig_variable('pkgdatadir')
install_data(
[
'weston-debug.xml',
],
install_dir: join_paths(dir_data, dir_protocol_libweston)
)
generated_protocols = [
[ 'input-method', 'v1' ],
[ 'input-timestamps', 'v1' ],
[ 'ivi-application', 'internal' ],
[ 'ivi-hmi-controller', 'internal' ],
[ 'fullscreen-shell', 'v1' ],
[ 'linux-dmabuf', 'v1' ],
[ 'presentation-time', 'stable' ],
[ 'pointer-constraints', 'v1' ],
[ 'relative-pointer', 'v1' ],
[ 'tablet', 'v2' ],
[ 'text-cursor-position', 'internal' ],
[ 'text-input', 'v1' ],
[ 'viewporter', 'stable' ],
[ 'weston-debug', 'internal' ],
[ 'weston-desktop-shell', 'internal' ],
[ 'weston-screenshooter', 'internal' ],
[ 'weston-test', 'internal' ],
[ 'weston-touch-calibration', 'internal' ],
[ 'xdg-output', 'v1' ],
[ 'xdg-shell', 'v6' ],
]
foreach proto: generated_protocols
proto_name = proto[0]
if proto[1] == 'internal'
base_file = proto_name
xml_path = '@0@.xml'.format(proto_name)
elif proto[1] == 'stable'
base_file = proto_name
xml_path = '@0@/stable/@1@/@1@.xml'.format(dir_wp_base, base_file)
else
base_file = '@0@-unstable-@1@'.format(proto_name, proto[1])
xml_path = '@0@/unstable/@1@/@2@.xml'.format(dir_wp_base, proto_name, base_file)
endif
foreach output_type: [ 'client-header', 'server-header', 'private-code' ]
if output_type == 'client-header'
output_file = '@0@-client-protocol.h'.format(base_file)
elif output_type == 'server-header'
output_file = '@0@-server-protocol.h'.format(base_file)
else
output_file = '@0@-protocol.c'.format(base_file)
if dep_scanner.version().version_compare('< 1.14.91')
output_type = 'code'
endif
endif
var_name = output_file.underscorify()
target = custom_target(
'@0@ @1@'.format(base_file, output_type),
command: [ prog_scanner, output_type, '@INPUT@', '@OUTPUT@' ],
input: xml_path,
output: output_file,
)
set_variable(var_name, target)
endforeach
endforeach

31
remoting/meson.build Normal file
View File

@ -0,0 +1,31 @@
if get_option('remoting')
user_hint = 'If you rather not build this, set "remoting=false".'
if not get_option('backend-drm')
error('Attempting to build the remoting plugin without the required DRM backend. ' + user_hint)
endif
depnames = [
'gstreamer-1.0', 'gstreamer-allocators-1.0',
'gstreamer-app-1.0', 'gstreamer-video-1.0'
]
deps_remoting = [ dep_libweston ]
foreach depname : depnames
dep = dependency(depname, required: false)
if not dep.found()
error('Remoting plugin requires @0@ which was not found. '.format(depname) + user_hint)
endif
deps_remoting += dep
endforeach
plugin_remoting = shared_library(
'remoting-plugin',
'remoting-plugin.c',
include_directories: include_directories('..', '../shared'),
dependencies: deps_remoting,
name_prefix: '',
install: true,
install_dir: dir_module_libweston
)
env_modmap += 'remoting-plugin.so=@0@;'.format(plugin_remoting.full_path())
endif

65
shared/meson.build Normal file
View File

@ -0,0 +1,65 @@
srcs_libshared = [
'config-parser.c',
'option-parser.c',
'file-util.c',
'os-compatibility.c',
'xalloc.c',
]
deps_libshared = dep_wayland_client
lib_libshared = static_library(
'shared',
srcs_libshared,
include_directories: include_directories('..'),
dependencies: deps_libshared,
install: false
)
dep_libshared = declare_dependency(
link_with: lib_libshared,
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')
deps_cairo_shared += cc.find_library('jpeg')
config_h.set('HAVE_JPEG', '1')
endif
if get_option('image-webp')
deps_cairo_shared += dependency('libwebp')
config_h.set('HAVE_WEBP', '1')
endif
lib_cairo_shared = static_library(
'cairo-shared',
srcs_cairo_shared,
include_directories: include_directories('..'),
dependencies: deps_cairo_shared,
install: false
)
dep_lib_cairo_shared = declare_dependency(
link_with: lib_cairo_shared,
dependencies: deps_cairo_shared
)

371
tests/meson.build Normal file
View File

@ -0,0 +1,371 @@
plugin_test_shell_desktop = shared_library(
'weston-test-desktop-shell',
'weston-test-desktop-shell.c',
include_directories: include_directories('..', '../shared'),
dependencies: [ dep_lib_desktop, dep_libweston ],
name_prefix: '',
install: false
)
env_modmap += 'weston-test-desktop-shell.so=@0@;'.format(plugin_test_shell_desktop.full_path())
lib_test_runner = static_library(
'test-runner',
'weston-test-runner.c',
include_directories: include_directories('..', '../shared'),
install: false,
)
dep_test_runner = declare_dependency(link_with: lib_test_runner)
lib_test_client = static_library(
'test-client',
'weston-test-client-helper.c',
weston_test_client_protocol_h,
weston_test_protocol_c,
include_directories: include_directories('..', '../shared'),
dependencies: [
dep_libshared,
dep_wayland_client,
dep_pixman,
dependency('cairo'),
],
install: false,
)
dep_test_client = declare_dependency(
link_with: lib_test_client,
dependencies: [
dep_test_runner,
dep_pixman,
]
)
exe_plugin_test = shared_library(
'test-plugin',
'weston-test.c',
weston_test_server_protocol_h,
weston_test_protocol_c,
include_directories: include_directories('..', '../shared'),
dependencies: [
dep_libweston,
dependency('egl'),
],
name_prefix: '',
install: false,
)
deps_zuc = [ dep_libshared ]
if get_option('test-junit-xml')
deps_zuc += [ dependency('libxml-2.0', version: '>= 2.6') ]
config_h.set('ENABLE_JUNIT_XML', '1')
endif
lib_zuc = static_library(
'zunitc',
'../tools/zunitc/inc/zunitc/zunitc.h',
'../tools/zunitc/inc/zunitc/zunitc_impl.h',
'../tools/zunitc/src/zuc_base_logger.c',
'../tools/zunitc/src/zuc_base_logger.h',
'../tools/zunitc/src/zuc_collector.c',
'../tools/zunitc/src/zuc_collector.h',
'../tools/zunitc/src/zuc_context.h',
'../tools/zunitc/src/zuc_event.h',
'../tools/zunitc/src/zuc_event_listener.h',
'../tools/zunitc/src/zuc_junit_reporter.c',
'../tools/zunitc/src/zuc_junit_reporter.h',
'../tools/zunitc/src/zuc_types.h',
'../tools/zunitc/src/zunitc_impl.c',
include_directories: include_directories('..', '../shared', '../tools/zunitc/inc'),
dependencies: deps_zuc,
)
dep_zuc = declare_dependency(
link_with: lib_zuc,
dependencies: dep_libshared,
include_directories: include_directories('../tools/zunitc/inc')
)
lib_zucmain = static_library(
'zunitcmain',
'../tools/zunitc/src/main.c',
include_directories: include_directories('..', '../shared', '../tools/zunitc/inc'),
dependencies: [ dep_libshared, dep_zuc ],
)
dep_zucmain = declare_dependency(
link_with: lib_zucmain,
dependencies: dep_zuc
)
tests_standalone = [
['config-parser', [], [ dep_zucmain ]],
['matrix', [ '../shared/matrix.c' ], [ dep_libm ]],
['string'],
[
'vertex-clip',
[
'../libweston/vertex-clipping.c'
]
],
['timespec', [], [ dep_zucmain ]],
['zuc',
[
'../tools/zunitc/test/fixtures_test.c',
'../tools/zunitc/test/zunitc_test.c'
],
[ dep_zucmain ]
],
]
tests_weston = [
['bad-buffer'],
['devices'],
['event'],
[
'keyboard',
[
'input-timestamps-helper.c',
input_timestamps_unstable_v1_client_protocol_h,
input_timestamps_unstable_v1_protocol_c,
]
],
['internal-screenshot'],
[
'presentation',
[
presentation_time_client_protocol_h,
presentation_time_protocol_c,
]
],
[
'pointer',
[
'input-timestamps-helper.c',
input_timestamps_unstable_v1_client_protocol_h,
input_timestamps_unstable_v1_protocol_c,
]
],
['roles'],
['subsurface'],
['subsurface-shot'],
[
'text',
[
text_input_unstable_v1_client_protocol_h,
text_input_unstable_v1_protocol_c,
]
],
[
'touch',
[
'input-timestamps-helper.c',
input_timestamps_unstable_v1_client_protocol_h,
input_timestamps_unstable_v1_protocol_c,
]
],
[
'viewporter',
[
viewporter_client_protocol_h,
viewporter_protocol_c,
]
],
]
if get_option('xwayland')
tests_weston += [ [ 'xwayland', [], dependency('x11') ] ]
endif
tests_weston_plugin = [
['plugin-registry'],
['surface'],
['surface-global'],
['surface-screenshot'],
]
if get_option('shell-ivi')
tests_weston += [
[
'ivi-shell-app',
[
ivi_application_client_protocol_h,
ivi_application_protocol_c,
]
]
]
tests_weston_plugin += [
['ivi-layout-internal'],
[
'ivi-layout',
[
'ivi-layout-test-plugin.c',
weston_test_server_protocol_h,
weston_test_protocol_c,
]
],
]
exe_ivi_layout_client = executable(
'ivi-layout-test-client',
'ivi-layout-test-client.c',
weston_test_client_protocol_h,
weston_test_protocol_c,
ivi_application_client_protocol_h,
ivi_application_protocol_c,
include_directories: include_directories('..', '../shared'),
dependencies: dep_test_client,
install: false
)
env_modmap += 'ivi-layout-test-client.ivi=@0@;'.format(exe_ivi_layout_client.full_path())
endif
env_test_weston = [
'WESTON_TEST_REFERENCE_PATH=@0@/reference'.format(meson.current_source_dir()),
'WESTON_MODULE_MAP=@0@'.format(env_modmap),
]
# FIXME: the multiple loops is lame. rethink this.
foreach t : tests_standalone
if t[0] != 'zuc'
srcs_t = [
'@0@-test.c'.format(t.get(0)),
weston_test_client_protocol_h,
]
else
srcs_t = []
endif
if t.length() > 1
srcs_t += t.get(1)
endif
if t.length() > 2
deps_t = t[2]
else
deps_t = [ dep_test_client ]
endif
exe_t = executable(
'test-@0@'.format(t.get(0)),
srcs_t,
c_args: [ '-DUNIT_TEST' ],
build_by_default: true,
include_directories: include_directories('..', '../shared', '../libweston'),
dependencies: deps_t,
install: false,
)
# matrix-test is a manual test
if t[0] != 'matrix'
test(t.get(0), exe_t)
endif
endforeach
foreach t : tests_weston
srcs_t = [
'@0@-test.c'.format(t.get(0)),
weston_test_client_protocol_h,
]
if t.length() > 1
srcs_t += t.get(1)
endif
deps_t = [
dep_test_client
]
if t.length() > 2
deps_t += t.get(2)
endif
args_t = [
'--backend=headless-backend.so',
'--socket=test-@0@'.format(t.get(0)),
'--modules=@0@'.format(exe_plugin_test.full_path()),
'--width=320',
'--height=240',
]
if t.get(0) == 'xwayland'
args_t += '--xwayland'
endif
# FIXME: Get this from the array ... ?
if t.get(0) == 'internal-screenshot'
args_t += [ '--config=@0@/internal-screenshot.ini'.format(meson.current_source_dir()) ]
args_t += [ '--use-pixman' ]
args_t += [ '--shell=desktop-shell.so' ]
elif t[0] == 'subsurface-shot'
args_t += [ '--no-config' ]
args_t += [ '--use-pixman' ]
args_t += [ '--width=320' ]
args_t += [ '--height=240' ]
args_t += [ '--shell=weston-test-desktop-shell.so' ]
elif t.get(0).startswith('ivi-')
args_t += [ '--config=@0@/../ivi-shell/weston-ivi-test.ini'.format(meson.current_build_dir()) ]
args_t += [ '--shell=ivi-shell.so' ]
else
args_t += [ '--no-config' ]
args_t += [ '--shell=desktop-shell.so' ]
endif
exe_t = executable(
'test-@0@'.format(t.get(0)),
srcs_t,
c_args: [ '-DUNIT_TEST' ],
include_directories:
include_directories('..', '../shared'),
dependencies: deps_t,
install: false,
)
env_t = [
'WESTON_TEST_CLIENT_PATH=@0@'.format(exe_t.full_path())
]
env_t += env_test_weston
test(t.get(0), exe_weston, env: env_t, args: args_t)
endforeach
foreach t : tests_weston_plugin
srcs_t = []
if t.length() > 1
srcs_t += t.get(1)
else
srcs_t += '@0@-test.c'.format(t.get(0))
endif
deps_t = [
dep_libweston,
]
if t.length() > 2
deps_t += t.get(2)
endif
exe_t = shared_library(
'test-@0@'.format(t.get(0)),
srcs_t,
include_directories: include_directories('..', '../shared'),
dependencies: deps_t,
name_prefix: '',
install: false,
)
args_t = [
'--backend=headless-backend.so',
'--socket=test-@0@'.format(t.get(0)),
]
# FIXME: Get this from the array ... ?
if t.get(0).startswith('ivi-')
args_t += [ '--config=@0@/../ivi-shell/weston-ivi-test.ini'.format(meson.current_build_dir()) ]
args_t += [ '--modules=@1@,@0@'.format(exe_plugin_test.full_path(),exe_t.full_path()) ]
args_t += [ '--shell=ivi-shell.so' ]
else
args_t += [ '--no-config' ]
args_t += [ '--shell=desktop-shell.so' ]
args_t += [ '--modules=@0@'.format(exe_t.full_path()) ]
endif
# surface-screenshot is a manual test
if t[0] != 'surface-screenshot'
test(t.get(0), exe_weston, env: env_test_weston, args: args_t)
endif
endforeach

21
wcap/meson.build Normal file
View File

@ -0,0 +1,21 @@
if not get_option('wcap-decode')
subdir_done()
endif
srcs_wcap = [
'main.c',
'wcap-decode.c',
]
deps_wcap = [
dep_libm,
dependency('cairo'),
]
executable(
'wcap-decode',
srcs_wcap,
include_directories: include_directories('..'),
dependencies: deps_wcap,
install: true
)

31
xwayland/meson.build Normal file
View File

@ -0,0 +1,31 @@
if get_option('xwayland')
srcs_xwayland = [
'launcher.c',
'window-manager.c',
'selection.c',
'dnd.c',
'hash.c',
]
deps_xwayland = [
dependency('xcb'),
dependency('xcb-composite'),
dependency('xcb-shape'),
dependency('xcb-xfixes'),
dependency('xcursor'),
dependency('cairo-xcb'),
dep_libweston,
]
plugin_xwayland = shared_library(
'xwayland',
srcs_xwayland,
link_with: lib_cairo_shared,
include_directories: include_directories('..', '../shared'),
dependencies: deps_xwayland,
name_prefix: '',
install: true,
install_dir: dir_module_libweston
)
env_modmap += 'xwayland.so=@0@;'.format(plugin_xwayland.full_path())
install_headers('xwayland-api.h', subdir: dir_include_libweston)
endif