summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier Claessens <xavier.claessens@collabora.com>2023-07-04 14:26:45 -0400
committerJussi Pakkanen <jpakkane@gmail.com>2023-07-05 21:34:25 +0300
commitd140342c148b91b16c39795f72ca09840d5fe54f (patch)
treeecaff7b0ee7aec1a73ed9919946dab45af961e7b
parent8369dbbfecafa87629f0624e6dc7c9cd235043a4 (diff)
downloadmeson-d140342c148b91b16c39795f72ca09840d5fe54f.tar.gz
comp.preprocess(): Do not treat every file as assembly
Fixes: #11940
-rw-r--r--mesonbuild/compilers/mixins/gnu.py19
-rw-r--r--test cases/common/259 preprocess/math.c3
-rw-r--r--test cases/common/259 preprocess/meson.build2
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())