meson.build 1.9 KB

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