weston/libweston/meson.build
Pekka Paalanen b40e051858 build: make libinput-backend a helper lib
Rather than having fbdev and drm backends include the libinput files ad hoc,
wrap them in a static library. Using the dependency object for that helper
library will then automatically pull in any necerray include dirs for the
users.

This helps with moving the backends into subdirectories.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
2019-05-16 13:32:34 +01:00

475 lines
13 KiB
Meson

deps_libweston = [
dep_wayland_server,
dep_pixman,
dep_libm,
dep_libdl,
dep_libdrm_headers,
dep_xkbcommon,
]
srcs_libweston = [
git_version_h,
'animation.c',
'bindings.c',
'clipboard.c',
'compositor.c',
'data-device.c',
'input.c',
'linux-dmabuf.c',
'linux-explicit-synchronization.c',
'linux-sync-file.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,
linux_explicit_synchronization_unstable_v1_protocol_c,
linux_explicit_synchronization_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,
]
if get_option('renderer-gl')
dep_egl = dependency('egl', required: false)
if not dep_egl.found()
error('libweston + gl-renderer requires egl which was not found. Or, you can use \'-Drenderer-gl=false\'.')
endif
deps_libweston += dep_egl
endif
lib_weston = shared_library(
'weston-@0@'.format(libweston_major),
srcs_libweston,
include_directories: [ include_directories('..', '../shared'), public_inc ],
install: true,
version: '0.0.@0@'.format(libweston_revision),
link_whole: lib_libshared,
dependencies: deps_libweston
)
dep_libweston = declare_dependency(
link_with: lib_weston,
include_directories: [ include_directories('.'), public_inc ],
dependencies: deps_libweston
)
# XXX: We should be able to use dep_libweston.partial_dependency() instead
# of this, but a Meson bug makes it not work. It will be fixed with
# https://github.com/mesonbuild/meson/pull/5167
# in hopefully Meson 0.51.
dep_libweston_h = declare_dependency(
include_directories: [ include_directories('.'), public_inc ],
dependencies: [
dep_pixman.partial_dependency(compile_args: true),
dep_xkbcommon.partial_dependency(compile_args: true),
dep_wayland_server.partial_dependency(compile_args: true)
]
)
pkgconfig.generate(
lib_weston,
filebase: 'libweston-@0@'.format(libweston_major),
name: 'libweston API',
version: version_weston,
description: 'Header files for libweston compositors development',
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 = [ dep_libweston_h ]
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', required: false)
if not systemd_dep.found()
error('logind support requires libsystemd or libsystemd-login but neither was found. Or, you can use \'-Dlauncher-logind=false\'')
endif
endif
dbus_dep = dependency('dbus-1', version: '>= 1.6', required: false)
if not dbus_dep.found()
error('logind support requires dbus-1 >= 1.6 which was not found. Or, you can use \'-Dlauncher-logind=false\'')
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 += [
dbus_dep,
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)
lib_libinput_backend = static_library(
'libinput-backend',
[
'libinput-device.c',
'libinput-seat.c'
],
dependencies: [
dep_libweston,
dep_libinput,
dependency('libudev', version: '>= 136')
],
include_directories: include_directories('..'),
install: false
)
dep_libinput_backend = declare_dependency(
link_with: lib_libinput_backend,
include_directories: include_directories('.')
)
if get_option('backend-drm')
config_h.set('BUILD_DRM_COMPOSITOR', '1')
srcs_drm = [
'compositor-drm.c',
'libbacklight.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_backend,
dependency('libudev', version: '>= 136'),
]
# XXX: Actually let DRM-backend build without GBM, it really should
if true # get_option('renderer-gl')
dep_gbm = dependency('gbm', required: false)
if not dep_gbm.found()
error('drm-backend requires gbm which was not found. Or, you can use \'-Dbackend-drm=false\'.')
endif
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')
foreach name : [ 'libva', 'libva-drm' ]
d = dependency(name, version: '>= 0.34.0', required: false)
if not d.found()
error('VA-API recorder requires @0@ >= 0.34.0 which was not found. Or, you can use \'-Dbackend-drm-screencast-vaapi=false\'.'.format(name))
endif
deps_drm += d
endforeach
srcs_drm += 'vaapi-recorder.c'
deps_drm += 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(backend_drm_h, subdir: dir_include_libweston_install)
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(backend_headless_h, subdir: dir_include_libweston_install)
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()
error('RDP-backend requires freerdp2 which was not found. Or, you can use \'-Dbackend-rdp=false\'.')
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(backend_rdp_h, subdir: dir_include_libweston_install)
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_server_protocol_h,
xdg_shell_protocol_c,
]
deps_wlwl = [
dependency('wayland-client'),
dependency('wayland-cursor'),
dep_pixman,
dep_libweston,
dep_lib_cairo_shared,
]
if get_option('renderer-gl')
d = dependency('wayland-egl', required: false)
if not d.found()
error('wayland-backend + gl-renderer requires wayland-egl which was not found. Or, you can use \'-Dbackend-wayland=false\' or \'-Drenderer-gl=false\'.')
endif
deps_wlwl += d
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(backend_wayland_h, subdir: dir_include_libweston_install)
endif
if get_option('backend-x11')
config_h.set('BUILD_X11_COMPOSITOR', '1')
srcs_x11 = [
'compositor-x11.c',
presentation_time_server_protocol_h,
]
dep_x11_xcb = dependency('xcb', version: '>= 1.8', required: false)
if not dep_x11_xcb.found()
error('x11-backend requires xcb >= 1.8 which was not found. Or, you can use \'-Dbackend-x11=false\'.')
endif
deps_x11 = [
dep_libweston,
dep_x11_xcb,
dep_lib_cairo_shared,
dep_pixman,
]
foreach name : [ 'xcb-shm', 'x11', 'x11-xcb' ]
d = dependency(name, required: false)
if not d.found()
error('x11-backend requires @0@ which was not found. Or, you can use \'-Dbackend-x11=false\'.'.format(name))
endif
deps_x11 += d
endforeach
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')
if not dep_egl.found()
error('x11-backend + gl-renderer requires egl which was not found. Or, you can use \'-Dbackend-x11=false\' or \'-Drenderer-gl=false\'.')
endif
deps_x11 += dep_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(backend_x11_h, subdir: dir_include_libweston_install)
endif
if get_option('backend-fbdev')
config_h.set('BUILD_FBDEV_COMPOSITOR', '1')
srcs_fbdev = [
'compositor-fbdev.c',
presentation_time_server_protocol_h,
]
deps_fbdev = [
dep_libweston,
dep_session_helper,
dep_libinput_backend,
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(backend_fbdev_h, subdir: dir_include_libweston_install)
endif
dep_vertex_clipping = declare_dependency(
sources: 'vertex-clipping.c',
include_directories: include_directories('.')
)
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
)
meson.add_install_script('echo', 'REMINDER: You are installing weston-launch, please make it setuid-root.')
endif
subdir('renderer-gl')