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