Skip to content

Commit

Permalink
compilers: add logging to obscure compiler defines scraper
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
eli-schwartz authored and nirbheek committed Aug 8, 2022
1 parent 15e5830 commit 988890c
Showing 1 changed file with 8 additions and 2 deletions.
10 changes: 8 additions & 2 deletions mesonbuild/compilers/detect.py
Expand Up @@ -1232,9 +1232,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`
Expand All @@ -1256,9 +1259,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:
Expand Down

0 comments on commit 988890c

Please sign in to comment.