aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/dependencies/base.py
diff options
context:
space:
mode:
authorDaniel Mensinger <daniel@mensinger-ka.de>2020-01-15 16:01:40 +0100
committerDaniel Mensinger <daniel@mensinger-ka.de>2020-01-23 20:57:17 +0100
commitbc27ebacc92fe0bc69bf6763533aca70850db02e (patch)
tree5aaaa61352440ed71b14620e87e30c8ba1daa00a /mesonbuild/dependencies/base.py
parenta11a28a98849e857c60a35e5cdecfc3a6ee49105 (diff)
downloadmeson-bc27ebacc92fe0bc69bf6763533aca70850db02e.zip
meson-bc27ebacc92fe0bc69bf6763533aca70850db02e.tar.gz
meson-bc27ebacc92fe0bc69bf6763533aca70850db02e.tar.bz2
cmake: Always Add C, CXX if no language is specified (fixes #6441)
Diffstat (limited to 'mesonbuild/dependencies/base.py')
-rw-r--r--mesonbuild/dependencies/base.py53
1 files changed, 24 insertions, 29 deletions
diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py
index ca6b874..282c314 100644
--- a/mesonbuild/dependencies/base.py
+++ b/mesonbuild/dependencies/base.py
@@ -1061,21 +1061,26 @@ class CMakeDependency(ExternalDependency):
return module
def __init__(self, name: str, environment: Environment, kwargs, language: str = None):
+ # Gather a list of all languages to support
+ self.language_list = [] # type: T.List[str]
if language is None:
+ compilers = None
if kwargs.get('native', False):
- if 'c' in environment.coredata.compilers.build.keys():
- language = 'c'
- elif 'cpp' in environment.coredata.compilers.build.keys():
- language = 'cpp'
- elif 'fortran' in environment.coredata.compilers.build.keys():
- language = 'fortran'
+ compilers = environment.coredata.compilers.build
else:
- if 'c' in environment.coredata.compilers.host.keys():
- language = 'c'
- elif 'cpp' in environment.coredata.compilers.host.keys():
- language = 'cpp'
- elif 'fortran' in environment.coredata.compilers.host.keys():
- language = 'fortran'
+ compilers = environment.coredata.compilers.host
+
+ candidates = ['c', 'cpp', 'fortran', 'objc', 'objcxx']
+ self.language_list += [x for x in candidates if x in compilers]
+ else:
+ self.language_list += [language]
+
+ # Add additional languages if required
+ if 'fortran' in self.language_list:
+ self.language_list += ['c']
+
+ # Ensure that the list is unique
+ self.language_list = list(set(self.language_list))
super().__init__('cmake', environment, language, kwargs)
self.name = name
@@ -1510,29 +1515,19 @@ class CMakeDependency(ExternalDependency):
# To make this general to
# any other language that might need this, we use a list for all
# languages and expand in the cmake Project(... LANGUAGES ...) statement.
- if self.language is None:
- cmake_language = ['NONE']
- elif self.language == 'c':
- cmake_language = ['C']
- elif self.language == 'cpp':
- cmake_language = ['CXX']
- elif self.language == 'cs':
- cmake_language = ['CSharp']
- elif self.language == 'cuda':
- cmake_language = ['CUDA']
- elif self.language == 'fortran':
- cmake_language = ['C', 'Fortran']
- elif self.language == 'objc':
- cmake_language = ['OBJC']
- elif self.language == 'objcpp':
- cmake_language = ['OBJCXX']
+ from ..cmake import language_map
+ cmake_language = [language_map[x] for x in self.language_list if x in language_map]
+ if not cmake_language:
+ cmake_language += ['NONE']
cmake_txt = """
cmake_minimum_required(VERSION ${{CMAKE_VERSION}})
project(MesonTemp LANGUAGES {})
""".format(' '.join(cmake_language)) + cmake_txt
- (build_dir / 'CMakeLists.txt').write_text(cmake_txt)
+ cm_file = build_dir / 'CMakeLists.txt'
+ cm_file.write_text(cmake_txt)
+ mlog.cmd_ci_include(cm_file.absolute().as_posix())
return str(build_dir)