We used to immediately try to use whatever exe_wrapper was defined in the cross file, but some people generate the cross file once and use it for several projects, most of which do not even need an exe wrapper to build. Now we're a bit more resilient. We quietly fall back to using non-exe-wrapper paths for compiler checks and skip the sanity check. However, if some code needs the exe wrapper, f.ex., if you run a built executable using custom_target() or run_target(), we will error out during setup. Tests will, of course, continue to error out when you run them if the exe wrapper was not found. We don't want people's tests to silently "pass" (aka skip) because of a bad CI setup. Closes https://github.com/mesonbuild/meson/issues/3562 This commit also adds a test for the behaviour of exe_wrapper in these cases, and refactors the unit tests a bit for it.pull/3850/head
parent
416a00308f
commit
e8dae2b966
12 changed files with 186 additions and 32 deletions
@ -0,0 +1,20 @@ |
||||
[binaries] |
||||
c = '/usr/bin/x86_64-w64-mingw32-gcc' |
||||
cpp = '/usr/bin/x86_64-w64-mingw32-g++' |
||||
ar = '/usr/bin/x86_64-w64-mingw32-ar' |
||||
strip = '/usr/bin/x86_64-w64-mingw32-strip' |
||||
pkgconfig = '/usr/bin/x86_64-w64-mingw32-pkg-config' |
||||
windres = '/usr/bin/x86_64-w64-mingw32-windres' |
||||
exe_wrapper = 'broken' |
||||
|
||||
[properties] |
||||
# Directory that contains 'bin', 'lib', etc |
||||
root = '/usr/x86_64-w64-mingw32' |
||||
# Directory that contains 'bin', 'lib', etc for the toolchain and system libraries |
||||
sys_root = '/usr/x86_64-w64-mingw32/sys-root/mingw' |
||||
|
||||
[host_machine] |
||||
system = 'windows' |
||||
cpu_family = 'x86_64' |
||||
cpu = 'x86_64' |
||||
endian = 'little' |
@ -0,0 +1,19 @@ |
||||
project('exe wrapper behaviour', 'c') |
||||
|
||||
assert(meson.is_cross_build(), 'not setup as cross build') |
||||
assert(meson.has_exe_wrapper(), 'exe wrapper not defined?') |
||||
|
||||
exe = executable('prog', 'prog.c') |
||||
|
||||
if get_option('custom-target') |
||||
custom_target('use-exe-wrapper', |
||||
build_by_default: true, |
||||
output: 'out.txt', |
||||
command: [exe, '@OUTPUT@']) |
||||
endif |
||||
|
||||
test('test-prog', exe) |
||||
|
||||
if get_option('run-target') |
||||
run_target('run-prog', command : exe) |
||||
endif |
@ -0,0 +1,2 @@ |
||||
option('custom-target', type: 'boolean', value: true) |
||||
option('run-target', type: 'boolean', value: true) |
@ -0,0 +1,17 @@ |
||||
#include <stdio.h> |
||||
|
||||
int main (int argc, char * argv[]) |
||||
{ |
||||
const char *out = "SUCCESS!"; |
||||
|
||||
if (argc != 2) { |
||||
printf ("%s\n", out); |
||||
} else { |
||||
int ret; |
||||
FILE *f = fopen (argv[1], "w"); |
||||
ret = fwrite (out, sizeof (out), 1, f); |
||||
if (ret != 1) |
||||
return -1; |
||||
} |
||||
return 0; |
||||
} |
Loading…
Reference in new issue