diff options
author | Daniel Mensinger <daniel@mensinger-ka.de> | 2020-12-26 14:27:11 +0100 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2021-01-04 20:16:30 +0000 |
commit | 6b515c432109cf7ab488da37cddeb1752e91fa5c (patch) | |
tree | 6dec9820aba10bd56ed919c1b4ea17a26f3d4aa2 /mesonbuild/cmake/interpreter.py | |
parent | 67ee65f47ed0872040fcce3db68a34005af9a03d (diff) | |
download | meson-6b515c432109cf7ab488da37cddeb1752e91fa5c.zip meson-6b515c432109cf7ab488da37cddeb1752e91fa5c.tar.gz meson-6b515c432109cf7ab488da37cddeb1752e91fa5c.tar.bz2 |
cmake: fix missing languages from CMake (fixes #8132)
Diffstat (limited to 'mesonbuild/cmake/interpreter.py')
-rw-r--r-- | mesonbuild/cmake/interpreter.py | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/mesonbuild/cmake/interpreter.py b/mesonbuild/cmake/interpreter.py index d4f7fba..8aaeb19 100644 --- a/mesonbuild/cmake/interpreter.py +++ b/mesonbuild/cmake/interpreter.py @@ -231,7 +231,7 @@ class ConverterTarget: if target.install_paths: self.install_dir = target.install_paths[0] - self.languages = [] # type: T.List[str] + self.languages = set() # type: T.Set[str] self.sources = [] # type: T.List[Path] self.generated = [] # type: T.List[Path] self.generated_ctgt = [] # type: T.List[CustomTargetReference] @@ -250,19 +250,40 @@ class ConverterTarget: self.name = _sanitize_cmake_name(self.name) self.generated_raw = [] # type: T.List[Path] + for i in target.files: - # Determine the meson language + languages = set() # type: T.Set[str] + src_suffixes = set() # type: T.Set[str] + + # Insert suffixes + for j in i.sources: + if not j.suffix: + continue + src_suffixes.add(j.suffix[1:]) + + # Determine the meson language(s) + # Extract the default language from the explicit CMake field lang_cmake_to_meson = {val.lower(): key for key, val in language_map.items()} - lang = lang_cmake_to_meson.get(i.language.lower(), 'c') - if lang not in self.languages: - self.languages += [lang] - if lang not in self.compile_opts: - self.compile_opts[lang] = [] + languages.add(lang_cmake_to_meson.get(i.language.lower(), 'c')) + + # Determine missing languages from the source suffixes + for sfx in src_suffixes: + for key, val in lang_suffixes.items(): + if sfx in val: + languages.add(key) + break + + # Register the new languages and initialize the compile opts array + for lang in languages: + self.languages.add(lang) + if lang not in self.compile_opts: + self.compile_opts[lang] = [] # Add arguments, but avoid duplicates args = i.flags args += ['-D{}'.format(x) for x in i.defines] - self.compile_opts[lang] += [x for x in args if x not in self.compile_opts[lang]] + for lang in languages: + self.compile_opts[lang] += [x for x in args if x not in self.compile_opts[lang]] # Handle include directories self.includes += [x.path for x in i.includes if x.path not in self.includes and not x.isSystem] |