From 8d3731162c2b3aae518f8d8b2d7190c4deec9911 Mon Sep 17 00:00:00 2001 From: Francesco Giudici Date: Thu, 27 Feb 2020 11:55:15 +0100 Subject: [PATCH 5/9] meson: add wayland protocols Generate wayland protocols: these will be used later for locking the mouse pointer and getting relative mouse movements when using the mouse in server mode in Wayland. The meson build steps have been freely taken and adapted from Weston source code: https://gitlab.freedesktop.org/wayland/weston/-/blob/master/protocol/meson.build Signed-off-by: Francesco Giudici Acked-by: Frediano Ziglio (cherry picked from commit d70044ab49728524c68796dd371d2bf7d94d27e5) --- meson.build | 20 +++++++++++++++ meson_options.txt | 4 +++ src/meson.build | 62 +++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 84 insertions(+), 2 deletions(-) diff --git a/meson.build b/meson.build index c442a0d..7426ea5 100644 --- a/meson.build +++ b/meson.build @@ -31,6 +31,7 @@ spice_gtk_config_data = configuration_data() spice_gtk_include = [include_directories('.')] spice_glib_deps = [] spice_gtk_deps = [] +spice_wayland_deps = [] spice_acl_deps = [] # @@ -152,6 +153,25 @@ if d.found() spice_gtk_has_gtk = true endif +# wayland protocols +spice_gtk_has_wayland_protocols = false +# Check if gtk is enabled and supports the wayland backend +if host_machine.system() != 'windows' and spice_gtk_has_gtk and compiler.has_header('gtk-3.0/gdk/gdkwayland.h') + d = dependency('wayland-protocols', version: '>= 1.17', required: get_option('wayland-protocols')) + if d.found() + spice_gtk_config_data.set('HAVE_WAYLAND_PROTOCOLS', '1') + dir_wp_base = d.get_pkgconfig_variable('pkgdatadir') + dep_scanner = dependency('wayland-scanner', native: true) + prog_scanner = find_program(dep_scanner.get_pkgconfig_variable('wayland_scanner')) + + wayland_libs_version_required = '1.17.0' + spice_wayland_deps += dependency('wayland-server', version : '>= @0@'.format(wayland_libs_version_required)) + spice_wayland_deps += dependency('wayland-cursor', version : '>= @0@'.format(wayland_libs_version_required)) + spice_wayland_deps += dependency('wayland-client', version : '>= @0@'.format(wayland_libs_version_required)) + spice_gtk_has_wayland_protocols = true + endif +endif + # webdav spice_gtk_has_phodav = false d = dependency('libphodav-2.0', required: get_option('webdav')) diff --git a/meson_options.txt b/meson_options.txt index 9804217..60b87ca 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -2,6 +2,10 @@ option('gtk', type : 'feature', description: 'Enable gtk+') +option('wayland-protocols', + type : 'feature', + description: 'Enable wayland protocols') + option('webdav', type : 'feature', description: 'Enable webdav support') diff --git a/src/meson.build b/src/meson.build index 654dab5..bdd2239 100644 --- a/src/meson.build +++ b/src/meson.build @@ -318,6 +318,64 @@ if spice_gtk_has_gtk command : cmd) endforeach + # + # Wayland protocols + # + if spice_gtk_has_wayland_protocols + + generated_protocols = [ + [ 'pointer-constraints', 'v1' ], + [ 'relative-pointer', 'v1' ], + #[ 'input-method', 'v1' ], + #[ 'input-timestamps', 'v1' ], + #[ 'fullscreen-shell', 'v1' ], + #[ 'linux-dmabuf', 'v1' ], + #[ 'linux-explicit-synchronization', 'v1' ], + #[ 'presentation-time', 'stable' ], + #[ 'tablet', 'v2' ], + #[ 'text-input', 'v1' ], + #[ 'viewporter', 'stable' ], + #[ 'xdg-output', 'v1' ], + #[ 'xdg-shell', 'v6' ], + #[ 'xdg-shell', 'stable' ], + ] + + 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 + + spice_client_gtk_sources += custom_target( + '@0@ @1@'.format(base_file, output_type), + command: [ prog_scanner, output_type, '@INPUT@', '@OUTPUT@' ], + input: xml_path, + output: output_file, + ) + message('@0@ @1@: @2@ -> @3@'.format(prog_scanner, output_type, xml_path, output_file)) + endforeach + endforeach + endif + # # libspice-client-gtk.so # @@ -343,11 +401,11 @@ if spice_gtk_has_gtk install : true, link_args : [spice_gtk_version_script], link_depends : spice_client_gtk_syms, - dependencies : [spice_client_glib_dep, spice_gtk_deps]) + dependencies : [spice_client_glib_dep, spice_gtk_deps, spice_wayland_deps]) spice_client_gtk_dep = declare_dependency(sources : spice_widget_enums[1], link_with : spice_client_gtk_lib, - dependencies : [spice_client_glib_dep, spice_gtk_deps]) + dependencies : [spice_client_glib_dep, spice_gtk_deps, spice_wayland_deps]) if spice_gtk_has_introspection # -- 2.26.2