compilers: add logging to obscure compiler defines scraper

If this command fails, for example when CXX is something not generic
enough to be a valid universal compiler command (clang -std=c++11
perhaps), we end up with two problems:

- it's impossible to figure out what Meson ran to get that error

- the error report isn't clear on what is stdout and what is stderr, or
  even that that is what the message is about.

  ```
  meson.build:1:0: ERROR: Unable to get clang pre-processor defines:
  error: invalid argument '-std=c++11' not allowed with 'C'
  ```

  What's C doing there and why is Meson talking about it? Answer: that's
  compiler stdout. Say so.
pull/10598/head
Eli Schwartz 2 years ago
parent 1f527550c6
commit 0eed99318b
No known key found for this signature in database
GPG Key ID: CEB167EFB5722BD6
  1. 10
      mesonbuild/compilers/detect.py

@ -1230,9 +1230,12 @@ def _get_gnu_compiler_defines(compiler: T.List[str]) -> T.Dict[str, str]:
# Arguments to output compiler pre-processor defines to stdout
# gcc, g++, and gfortran all support these arguments
args = compiler + ['-E', '-dM', '-']
mlog.debug(f'Running command: {join_args(args)}')
p, output, error = Popen_safe(args, write='', stdin=subprocess.PIPE)
if p.returncode != 0:
raise EnvironmentException('Unable to detect GNU compiler type:\n' + output + error)
raise EnvironmentException('Unable to detect GNU compiler type:\n'
f'Compiler stdout:\n{output}\n-----\n'
f'Compiler stderr:\n{error}\n-----\n')
# Parse several lines of the type:
# `#define ___SOME_DEF some_value`
# and extract `___SOME_DEF`
@ -1254,9 +1257,12 @@ def _get_clang_compiler_defines(compiler: T.List[str]) -> T.Dict[str, str]:
Get the list of Clang pre-processor defines
"""
args = compiler + ['-E', '-dM', '-']
mlog.debug(f'Running command: {join_args(args)}')
p, output, error = Popen_safe(args, write='', stdin=subprocess.PIPE)
if p.returncode != 0:
raise EnvironmentException('Unable to get clang pre-processor defines:\n' + output + error)
raise EnvironmentException('Unable to get clang pre-processor defines:\n'
f'Compiler stdout:\n{output}\n-----\n'
f'Compiler stderr:\n{error}\n-----\n')
defines: T.Dict[str, str] = {}
for line in output.split('\n'):
if not line:

Loading…
Cancel
Save