diff --git a/include/rootston/desktop.h b/include/rootston/desktop.h index 0d6418481..aa74ad3ed 100644 --- a/include/rootston/desktop.h +++ b/include/rootston/desktop.h @@ -34,14 +34,17 @@ struct roots_desktop { struct wlr_compositor *compositor; struct wlr_wl_shell *wl_shell; struct wlr_xdg_shell_v6 *xdg_shell_v6; - struct wlr_xwayland *xwayland; struct wlr_gamma_control_manager *gamma_control_manager; struct wl_listener output_add; struct wl_listener output_remove; struct wl_listener xdg_shell_v6_surface; - struct wl_listener xwayland_surface; struct wl_listener wl_shell_surface; + +#ifdef HAS_XWAYLAND + struct wlr_xwayland *xwayland; + struct wl_listener xwayland_surface; +#endif }; struct roots_server; diff --git a/include/rootston/server.h b/include/rootston/server.h index 15e3a4ee2..a4eacb7f7 100644 --- a/include/rootston/server.h +++ b/include/rootston/server.h @@ -5,7 +5,9 @@ #include #include #include +#ifdef HAS_XWAYLAND #include +#endif #include "rootston/config.h" #include "rootston/desktop.h" #include "rootston/input.h" diff --git a/include/rootston/view.h b/include/rootston/view.h index 39ff80db6..2a90670eb 100644 --- a/include/rootston/view.h +++ b/include/rootston/view.h @@ -49,12 +49,16 @@ struct roots_view { union { struct wlr_wl_shell_surface *wl_shell_surface; struct wlr_xdg_surface_v6 *xdg_surface_v6; +#ifdef HAS_XWAYLAND struct wlr_xwayland_surface *xwayland_surface; +#endif }; union { struct roots_wl_shell_surface *roots_wl_shell_surface; struct roots_xdg_surface_v6 *roots_xdg_surface_v6; +#ifdef HAS_XWAYLAND struct roots_xwayland_surface *roots_xwayland_surface; +#endif }; struct wlr_surface *wlr_surface; // TODO: This would probably be better as a field that's updated on a diff --git a/meson.build b/meson.build index 57c26b0f3..e3205aaef 100644 --- a/meson.build +++ b/meson.build @@ -20,7 +20,6 @@ add_project_link_arguments( ) wlr_inc = include_directories('include') -install_subdir('include/wlr', install_dir: 'include') cc = meson.get_compiler('c') @@ -68,13 +67,36 @@ if elogind.found() and get_option('enable_elogind') add_project_arguments('-DHAS_ELOGIND', language: 'c') endif +exclude_files = [] +wlr_parts = [] +conf_data = configuration_data() +if get_option('enable_xwayland') + add_project_arguments('-DHAS_XWAYLAND', language: 'c') + subdir('xwayland') + wlr_parts += [lib_wlr_xwayland] + conf_data.set('WLR_HAS_XWAYLAND', true) +else + exclude_files += ['xwayland.h'] +endif +configure_file(output: 'config.h', install_dir: 'include/wlr', configuration: conf_data) +install_subdir('include/wlr', install_dir: 'include', exclude_files: exclude_files) + + subdir('protocol') subdir('backend') subdir('render') subdir('types') subdir('util') subdir('xcursor') -subdir('xwayland') + +wlr_parts += [ + lib_wl_protos, + lib_wlr_backend, + lib_wlr_render, + lib_wlr_types, + lib_wlr_util, + lib_wlr_xcursor, +] wlr_deps = [ wayland_server, @@ -100,15 +122,7 @@ wlr_deps = [ lib_wlr = library( 'wlroots', files('dummy.c'), - link_whole: [ - lib_wl_protos, - lib_wlr_backend, - lib_wlr_render, - lib_wlr_types, - lib_wlr_util, - lib_wlr_xcursor, - lib_wlr_xwayland, - ], + link_whole: wlr_parts, dependencies: wlr_deps, include_directories: wlr_inc, install: true, diff --git a/meson_options.txt b/meson_options.txt index a3f9ca453..b1e64bd97 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1,3 +1,4 @@ option('enable_libcap', type: 'boolean', value: true, description: 'Enable support for capabilities') option('enable_systemd', type: 'boolean', value: true, description: 'Enable support for logind') option('enable_elogind', type: 'boolean', value: true, description: 'Enable support for logind') +option('enable_xwayland', type: 'boolean', value: true, description: 'Enable support X11 applications') diff --git a/rootston/desktop.c b/rootston/desktop.c index 5e85fb324..f0f8320db 100644 --- a/rootston/desktop.c +++ b/rootston/desktop.c @@ -159,6 +159,7 @@ struct roots_desktop *desktop_create(struct roots_server *server, &desktop->wl_shell_surface); desktop->wl_shell_surface.notify = handle_wl_shell_surface; +#ifdef HAS_XWAYLAND if (config->xwayland) { desktop->xwayland = wlr_xwayland_create(server->wl_display, desktop->compositor); @@ -166,6 +167,7 @@ struct roots_desktop *desktop_create(struct roots_server *server, &desktop->xwayland_surface); desktop->xwayland_surface.notify = handle_xwayland_surface; } +#endif desktop->gamma_control_manager = wlr_gamma_control_manager_create( server->wl_display); diff --git a/rootston/meson.build b/rootston/meson.build index 1eb0704d9..7ff79f8e3 100644 --- a/rootston/meson.build +++ b/rootston/meson.build @@ -1,17 +1,20 @@ +sources = [ + 'config.c', + 'cursor.c', + 'desktop.c', + 'ini.c', + 'input.c', + 'keyboard.c', + 'main.c', + 'output.c', + 'pointer.c', + 'tablet_tool.c', + 'xdg_shell_v6.c', + 'wl_shell.c', +] +if get_option('enable_xwayland') + sources += ['xwayland.c'] +endif executable( - 'rootston', [ - 'config.c', - 'cursor.c', - 'desktop.c', - 'ini.c', - 'input.c', - 'keyboard.c', - 'main.c', - 'output.c', - 'pointer.c', - 'tablet_tool.c', - 'xdg_shell_v6.c', - 'xwayland.c', - 'wl_shell.c', - ], dependencies: wlroots + 'rootston', sources, dependencies: wlroots )