xref: /aosp_15_r20/external/wayland-protocols/freedesktop.org/tests/meson.build (revision 6c119a463dd5c45dd05bbe67429293292dde15ee)
1*6c119a46SAndroid Build Coastguard Workerprog_scan_sh = find_program('scan.sh')
2*6c119a46SAndroid Build Coastguard Workerprog_scanner = find_program(dep_scanner.get_pkgconfig_variable('wayland_scanner'))
3*6c119a46SAndroid Build Coastguard Worker
4*6c119a46SAndroid Build Coastguard Workerlibwayland = [
5*6c119a46SAndroid Build Coastguard Worker	dependency('wayland-client'),
6*6c119a46SAndroid Build Coastguard Worker	dependency('wayland-server'),
7*6c119a46SAndroid Build Coastguard Worker]
8*6c119a46SAndroid Build Coastguard Worker
9*6c119a46SAndroid Build Coastguard Worker# Check that each protocol passes through the scanner
10*6c119a46SAndroid Build Coastguard Workerforeach protocol_file : protocol_files
11*6c119a46SAndroid Build Coastguard Worker	protocol_path = join_paths(wayland_protocols_srcdir, protocol_file)
12*6c119a46SAndroid Build Coastguard Worker	test_name = 'scan-@0@'.format(protocol_file.underscorify())
13*6c119a46SAndroid Build Coastguard Worker	test(test_name, prog_scan_sh,
14*6c119a46SAndroid Build Coastguard Worker		args: protocol_path,
15*6c119a46SAndroid Build Coastguard Worker		env: [
16*6c119a46SAndroid Build Coastguard Worker			'SCANNER=@0@'.format(prog_scanner.path()),
17*6c119a46SAndroid Build Coastguard Worker		]
18*6c119a46SAndroid Build Coastguard Worker	)
19*6c119a46SAndroid Build Coastguard Workerendforeach
20*6c119a46SAndroid Build Coastguard Worker
21*6c119a46SAndroid Build Coastguard Worker# Check buildability
22*6c119a46SAndroid Build Coastguard Worker
23*6c119a46SAndroid Build Coastguard Workeradd_languages('c', 'cpp', native: true)
24*6c119a46SAndroid Build Coastguard Workerreplace = find_program('replace.py')
25*6c119a46SAndroid Build Coastguard Worker
26*6c119a46SAndroid Build Coastguard Workerforeach protocol_file : protocol_files
27*6c119a46SAndroid Build Coastguard Worker	xml_file = fs.name(protocol_file)
28*6c119a46SAndroid Build Coastguard Worker	xml_components = xml_file.split('.')
29*6c119a46SAndroid Build Coastguard Worker	protocol_base_file_name = xml_components[0]
30*6c119a46SAndroid Build Coastguard Worker
31*6c119a46SAndroid Build Coastguard Worker	protocol_path = files(join_paths(wayland_protocols_srcdir, protocol_file))
32*6c119a46SAndroid Build Coastguard Worker	client_header_path = '@[email protected]'.format(protocol_base_file_name)
33*6c119a46SAndroid Build Coastguard Worker	server_header_path = '@[email protected]'.format(protocol_base_file_name)
34*6c119a46SAndroid Build Coastguard Worker	code_path = '@[email protected]'.format(protocol_base_file_name)
35*6c119a46SAndroid Build Coastguard Worker	client_header = custom_target(
36*6c119a46SAndroid Build Coastguard Worker		client_header_path,
37*6c119a46SAndroid Build Coastguard Worker		output: client_header_path,
38*6c119a46SAndroid Build Coastguard Worker		input: protocol_path,
39*6c119a46SAndroid Build Coastguard Worker		command: [
40*6c119a46SAndroid Build Coastguard Worker			prog_scanner,
41*6c119a46SAndroid Build Coastguard Worker			'--strict',
42*6c119a46SAndroid Build Coastguard Worker			'client-header',
43*6c119a46SAndroid Build Coastguard Worker			'@INPUT@',
44*6c119a46SAndroid Build Coastguard Worker			'@OUTPUT@',
45*6c119a46SAndroid Build Coastguard Worker		],
46*6c119a46SAndroid Build Coastguard Worker		install: false,
47*6c119a46SAndroid Build Coastguard Worker	)
48*6c119a46SAndroid Build Coastguard Worker	server_header = custom_target(
49*6c119a46SAndroid Build Coastguard Worker		server_header_path,
50*6c119a46SAndroid Build Coastguard Worker		output: server_header_path,
51*6c119a46SAndroid Build Coastguard Worker		input: protocol_path,
52*6c119a46SAndroid Build Coastguard Worker		command: [
53*6c119a46SAndroid Build Coastguard Worker			prog_scanner,
54*6c119a46SAndroid Build Coastguard Worker			'--strict',
55*6c119a46SAndroid Build Coastguard Worker			'server-header',
56*6c119a46SAndroid Build Coastguard Worker			'@INPUT@',
57*6c119a46SAndroid Build Coastguard Worker			'@OUTPUT@',
58*6c119a46SAndroid Build Coastguard Worker		],
59*6c119a46SAndroid Build Coastguard Worker		install: false,
60*6c119a46SAndroid Build Coastguard Worker	)
61*6c119a46SAndroid Build Coastguard Worker	code = custom_target(
62*6c119a46SAndroid Build Coastguard Worker		code_path,
63*6c119a46SAndroid Build Coastguard Worker		output: code_path,
64*6c119a46SAndroid Build Coastguard Worker		input: protocol_path,
65*6c119a46SAndroid Build Coastguard Worker		command: [
66*6c119a46SAndroid Build Coastguard Worker			prog_scanner,
67*6c119a46SAndroid Build Coastguard Worker			'--strict',
68*6c119a46SAndroid Build Coastguard Worker			'private-code',
69*6c119a46SAndroid Build Coastguard Worker			'@INPUT@',
70*6c119a46SAndroid Build Coastguard Worker			'@OUTPUT@',
71*6c119a46SAndroid Build Coastguard Worker		],
72*6c119a46SAndroid Build Coastguard Worker		install: false,
73*6c119a46SAndroid Build Coastguard Worker	)
74*6c119a46SAndroid Build Coastguard Worker
75*6c119a46SAndroid Build Coastguard Worker	replace_command = [
76*6c119a46SAndroid Build Coastguard Worker		replace,
77*6c119a46SAndroid Build Coastguard Worker		'@INPUT@',
78*6c119a46SAndroid Build Coastguard Worker		'@OUTPUT@',
79*6c119a46SAndroid Build Coastguard Worker		'PROTOCOL_CLIENT_INCLUDE_FILE',
80*6c119a46SAndroid Build Coastguard Worker		client_header.full_path(),
81*6c119a46SAndroid Build Coastguard Worker		'PROTOCOL_SERVER_INCLUDE_FILE',
82*6c119a46SAndroid Build Coastguard Worker		server_header.full_path(),
83*6c119a46SAndroid Build Coastguard Worker	]
84*6c119a46SAndroid Build Coastguard Worker
85*6c119a46SAndroid Build Coastguard Worker	# Check that header can be included by a pedantic C99 compiler
86*6c119a46SAndroid Build Coastguard Worker	test_name = 'test-build-pedantic-@0@'.format(protocol_file.underscorify())
87*6c119a46SAndroid Build Coastguard Worker	test_name_source = '@[email protected]'.format(test_name)
88*6c119a46SAndroid Build Coastguard Worker	test_source = custom_target(
89*6c119a46SAndroid Build Coastguard Worker		test_name_source,
90*6c119a46SAndroid Build Coastguard Worker		input: 'build-pedantic.c.in',
91*6c119a46SAndroid Build Coastguard Worker		output: test_name_source,
92*6c119a46SAndroid Build Coastguard Worker		command: replace_command,
93*6c119a46SAndroid Build Coastguard Worker	)
94*6c119a46SAndroid Build Coastguard Worker	pedantic_test_executable = executable(
95*6c119a46SAndroid Build Coastguard Worker		test_name,
96*6c119a46SAndroid Build Coastguard Worker		[
97*6c119a46SAndroid Build Coastguard Worker			test_source,
98*6c119a46SAndroid Build Coastguard Worker			client_header,
99*6c119a46SAndroid Build Coastguard Worker			server_header,
100*6c119a46SAndroid Build Coastguard Worker			code
101*6c119a46SAndroid Build Coastguard Worker		],
102*6c119a46SAndroid Build Coastguard Worker		link_args: [
103*6c119a46SAndroid Build Coastguard Worker			'-Wl,--unresolved-symbols=ignore-all',
104*6c119a46SAndroid Build Coastguard Worker		],
105*6c119a46SAndroid Build Coastguard Worker		dependencies: libwayland,
106*6c119a46SAndroid Build Coastguard Worker		c_args: [
107*6c119a46SAndroid Build Coastguard Worker			'-std=c99',
108*6c119a46SAndroid Build Coastguard Worker			'-pedantic',
109*6c119a46SAndroid Build Coastguard Worker			'-Wall',
110*6c119a46SAndroid Build Coastguard Worker			'-Werror' ],
111*6c119a46SAndroid Build Coastguard Worker		install: false,
112*6c119a46SAndroid Build Coastguard Worker		native: true,
113*6c119a46SAndroid Build Coastguard Worker	)
114*6c119a46SAndroid Build Coastguard Worker	test(test_name, pedantic_test_executable)
115*6c119a46SAndroid Build Coastguard Worker
116*6c119a46SAndroid Build Coastguard Worker	# Check that the header
117*6c119a46SAndroid Build Coastguard Worker	if not protocol_file.contains('xdg-foreign-unstable-v1')
118*6c119a46SAndroid Build Coastguard Worker		test_name = 'test-build-cxx-@0@'.format(protocol_file.underscorify())
119*6c119a46SAndroid Build Coastguard Worker		test_name_source = '@[email protected]'.format(test_name)
120*6c119a46SAndroid Build Coastguard Worker		test_source = custom_target(
121*6c119a46SAndroid Build Coastguard Worker			test_name_source,
122*6c119a46SAndroid Build Coastguard Worker			input: 'build-cxx.cc.in',
123*6c119a46SAndroid Build Coastguard Worker			output: test_name_source,
124*6c119a46SAndroid Build Coastguard Worker			command: replace_command,
125*6c119a46SAndroid Build Coastguard Worker		)
126*6c119a46SAndroid Build Coastguard Worker		cxx_test_executable = executable(
127*6c119a46SAndroid Build Coastguard Worker			test_name,
128*6c119a46SAndroid Build Coastguard Worker			[
129*6c119a46SAndroid Build Coastguard Worker				test_source,
130*6c119a46SAndroid Build Coastguard Worker				client_header,
131*6c119a46SAndroid Build Coastguard Worker				server_header,
132*6c119a46SAndroid Build Coastguard Worker			],
133*6c119a46SAndroid Build Coastguard Worker			link_args: [ '-Wl,--unresolved-symbols=ignore-all' ],
134*6c119a46SAndroid Build Coastguard Worker			dependencies: libwayland,
135*6c119a46SAndroid Build Coastguard Worker			cpp_args: [
136*6c119a46SAndroid Build Coastguard Worker				'-Wall',
137*6c119a46SAndroid Build Coastguard Worker				'-Werror',
138*6c119a46SAndroid Build Coastguard Worker			],
139*6c119a46SAndroid Build Coastguard Worker			install: false,
140*6c119a46SAndroid Build Coastguard Worker			native: true,
141*6c119a46SAndroid Build Coastguard Worker		)
142*6c119a46SAndroid Build Coastguard Worker		test(test_name, cxx_test_executable)
143*6c119a46SAndroid Build Coastguard Worker	endif
144*6c119a46SAndroid Build Coastguard Workerendforeach
145