diff options
| author | Xavier Claessens <xavier.claessens@collabora.com> | 2023-07-04 14:26:45 -0400 |
|---|---|---|
| committer | Jussi Pakkanen <jpakkane@gmail.com> | 2023-07-05 21:34:25 +0300 |
| commit | d140342c148b91b16c39795f72ca09840d5fe54f (patch) | |
| tree | ecaff7b0ee7aec1a73ed9919946dab45af961e7b | |
| parent | 8369dbbfecafa87629f0624e6dc7c9cd235043a4 (diff) | |
| download | meson-d140342c148b91b16c39795f72ca09840d5fe54f.tar.gz | |
comp.preprocess(): Do not treat every file as assembly
Fixes: #11940
| -rw-r--r-- | mesonbuild/compilers/mixins/gnu.py | 19 | ||||
| -rw-r--r-- | test cases/common/259 preprocess/math.c | 3 | ||||
| -rw-r--r-- | test cases/common/259 preprocess/meson.build | 2 |
3 files changed, 14 insertions, 10 deletions
diff --git a/mesonbuild/compilers/mixins/gnu.py b/mesonbuild/compilers/mixins/gnu.py index f51460d30..93b367b2c 100644 --- a/mesonbuild/compilers/mixins/gnu.py +++ b/mesonbuild/compilers/mixins/gnu.py @@ -327,18 +327,18 @@ gnu_objc_warning_args = { ], } # type: T.Dict[str, T.List[str]] +_LANG_MAP = { + 'c': 'c', + 'cpp': 'c++', + 'objc': 'objective-c', + 'objcpp': 'objective-c++' +} @functools.lru_cache(maxsize=None) def gnulike_default_include_dirs(compiler: T.Tuple[str, ...], lang: str) -> 'ImmutableListProtocol[str]': - lang_map = { - 'c': 'c', - 'cpp': 'c++', - 'objc': 'objective-c', - 'objcpp': 'objective-c++' - } - if lang not in lang_map: + if lang not in _LANG_MAP: return [] - lang = lang_map[lang] + lang = _LANG_MAP[lang] env = os.environ.copy() env["LC_ALL"] = 'C' cmd = list(compiler) + [f'-x{lang}', '-E', '-v', '-'] @@ -558,7 +558,8 @@ class GnuLikeCompiler(Compiler, metaclass=abc.ABCMeta): # We want to allow preprocessing files with any extension, such as # foo.c.in. In that case we need to tell GCC/CLANG to treat them as # assembly file. - return self.get_preprocess_only_args() + ['-x', 'assembler-with-cpp'] + lang = _LANG_MAP.get(self.language, 'assembler-with-cpp') + return self.get_preprocess_only_args() + [f'-x{lang}'] class GnuCompiler(GnuLikeCompiler): diff --git a/test cases/common/259 preprocess/math.c b/test cases/common/259 preprocess/math.c new file mode 100644 index 000000000..37d3cc649 --- /dev/null +++ b/test cases/common/259 preprocess/math.c @@ -0,0 +1,3 @@ +// Verify we preprocess as C language, otherwise including math.h would fail. +// See https://github.com/mesonbuild/meson/issues/11940. +#include <math.h> diff --git a/test cases/common/259 preprocess/meson.build b/test cases/common/259 preprocess/meson.build index 5107427c1..10e8b0984 100644 --- a/test cases/common/259 preprocess/meson.build +++ b/test cases/common/259 preprocess/meson.build @@ -15,7 +15,7 @@ bar_x = custom_target( dep = declare_dependency(compile_args: '-DPLOP=0') -pp_files = cc.preprocess('foo.c', bar_x, output: '@PLAINNAME@.c', dependencies: dep) +pp_files = cc.preprocess('foo.c', bar_x, 'math.c', output: '@PLAINNAME@.c', dependencies: dep) foreach f : pp_files message(f.full_path()) |
