1project('tryrun', 'c', 'cpp')
2
3# Complex to exercise all code paths.
4if meson.is_cross_build()
5  if meson.can_run_host_binaries()
6    compilers = [meson.get_compiler('c', native : false), meson.get_compiler('cpp', native : false)]
7  else
8    compilers = [meson.get_compiler('c', native : true), meson.get_compiler('cpp', native : true)]
9  endif
10else
11  compilers = [meson.get_compiler('c'), meson.get_compiler('cpp')]
12endif
13
14ok_code = '''#include<stdio.h>
15int main(void) {
16  printf("%s\n", "stdout");
17  fprintf(stderr, "%s\n", "stderr");
18  return 0;
19}
20'''
21
22error_code = '''int main(void) {
23  return 1;
24}
25'''
26
27no_compile_code = '''int main(void) {
28'''
29
30INPUTS = [
31  ['String', ok_code, error_code, no_compile_code],
32  ['File', files('ok.c'), files('error.c'), files('no_compile.c')],
33]
34
35foreach cc : compilers
36  foreach input : INPUTS
37    type = input[0]
38    ok = cc.run(input[1], name : type + ' should succeed')
39    err = cc.run(input[2], name : type + ' should fail')
40    noc = cc.run(input[3], name : type + ' does not compile')
41
42    if noc.compiled()
43      error(type + ' compilation fail test failed.')
44    else
45      message(type + ' fail detected properly.')
46    endif
47
48    if ok.compiled()
49      message(type + ' compilation worked.')
50    else
51      error(type + ' compilation did not work.')
52    endif
53
54    if ok.returncode() == 0
55      message(type + ' return code ok.')
56    else
57      error(type + ' return code fail')
58    endif
59
60    if err.returncode() == 1
61      message(type + ' bad return code ok.')
62    else
63      error(type + ' bad return code fail.')
64    endif
65
66    if ok.stdout().strip() == 'stdout'
67      message(type + ' stdout ok.')
68    else
69      message(type + ' bad stdout.')
70    endif
71
72    if ok.stderr().strip() == 'stderr'
73      message(type + ' stderr ok.')
74    else
75      message(type + ' bad stderr.')
76    endif
77  endforeach
78endforeach
79