mirror of
				https://gitlab.freedesktop.org/wlroots/wlroots.git
				synced 2025-11-03 09:01:40 -05:00 
			
		
		
		
	Makes it easier to work on Xwayland and wlroots features in parallel. References: https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1048
		
			
				
	
	
		
			98 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Meson
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Meson
		
	
	
	
	
	
xwayland_libs = []
 | 
						|
xwayland_required = [
 | 
						|
	'xcb',
 | 
						|
	'xcb-composite',
 | 
						|
	'xcb-ewmh',
 | 
						|
	'xcb-icccm',
 | 
						|
	'xcb-render',
 | 
						|
	'xcb-res',
 | 
						|
	'xcb-xfixes',
 | 
						|
]
 | 
						|
xwayland_optional = {
 | 
						|
	'xcb-errors': 'Required for printing X11 errors.',
 | 
						|
}
 | 
						|
 | 
						|
msg = []
 | 
						|
if get_option('xwayland').enabled()
 | 
						|
	msg += 'Install "@0@" or pass "-Dxwayland=disabled".'
 | 
						|
endif
 | 
						|
if not get_option('xwayland').disabled()
 | 
						|
	msg += 'Required for Xwayland support.'
 | 
						|
endif
 | 
						|
 | 
						|
xwayland = dependency(
 | 
						|
	'xwayland',
 | 
						|
	required: get_option('xwayland'),
 | 
						|
	fallback: 'xserver',
 | 
						|
	default_options: [
 | 
						|
		'werror=false',
 | 
						|
		'xorg=false',
 | 
						|
		'xephyr=false',
 | 
						|
		'xwayland=true',
 | 
						|
		'xnest=false',
 | 
						|
		'xvfb=false',
 | 
						|
	],
 | 
						|
)
 | 
						|
if not xwayland.found()
 | 
						|
	subdir_done()
 | 
						|
endif
 | 
						|
 | 
						|
foreach lib : xwayland_required
 | 
						|
	dep = dependency(lib,
 | 
						|
		required: get_option('xwayland'),
 | 
						|
		not_found_message: '\n'.join(msg).format(lib),
 | 
						|
	)
 | 
						|
	if not dep.found()
 | 
						|
		subdir_done()
 | 
						|
	endif
 | 
						|
 | 
						|
	xwayland_libs += dep
 | 
						|
endforeach
 | 
						|
 | 
						|
foreach lib, desc : xwayland_optional
 | 
						|
	msg = []
 | 
						|
	if get_option(lib).enabled()
 | 
						|
		msg += 'Install "@0@" or pass "-D@0@=disabled".'
 | 
						|
	endif
 | 
						|
	if not get_option(lib).disabled()
 | 
						|
		msg += desc
 | 
						|
	endif
 | 
						|
 | 
						|
	dep = dependency(lib,
 | 
						|
		required: get_option(lib),
 | 
						|
		not_found_message: '\n'.join(msg).format(lib),
 | 
						|
	)
 | 
						|
 | 
						|
	internal_features += { lib: dep.found() }
 | 
						|
	xwayland_libs += dep
 | 
						|
endforeach
 | 
						|
 | 
						|
xwayland_feature_names = [
 | 
						|
	'listenfd',
 | 
						|
	'no_touch_pointer_emulation',
 | 
						|
	'force_xrandr_emulation',
 | 
						|
	'terminate_delay',
 | 
						|
]
 | 
						|
 | 
						|
internal_config.set_quoted('XWAYLAND_PATH', xwayland.get_variable('xwayland'))
 | 
						|
foreach name : xwayland_feature_names
 | 
						|
	have = xwayland.get_variable('have_' + name, default_value: 'false') == 'true'
 | 
						|
	internal_config.set10('HAVE_XWAYLAND_' + name.to_upper(), have)
 | 
						|
endforeach
 | 
						|
 | 
						|
wlr_files += files(
 | 
						|
	'selection/dnd.c',
 | 
						|
	'selection/incoming.c',
 | 
						|
	'selection/outgoing.c',
 | 
						|
	'selection/selection.c',
 | 
						|
	'server.c',
 | 
						|
	'shell.c',
 | 
						|
	'sockets.c',
 | 
						|
	'xwayland.c',
 | 
						|
	'xwm.c',
 | 
						|
)
 | 
						|
wlr_deps += xwayland_libs
 | 
						|
features += { 'xwayland': true }
 | 
						|
 | 
						|
have = cc.has_function('xcb_xfixes_set_client_disconnect_mode', dependencies: xwayland_libs)
 | 
						|
internal_config.set10('HAVE_XCB_XFIXES_SET_CLIENT_DISCONNECT_MODE', have)
 |