diff options
author | Daniel Mensinger <daniel@mensinger-ka.de> | 2020-01-15 16:01:40 +0100 |
---|---|---|
committer | Daniel Mensinger <daniel@mensinger-ka.de> | 2020-01-23 20:57:17 +0100 |
commit | bc27ebacc92fe0bc69bf6763533aca70850db02e (patch) | |
tree | 5aaaa61352440ed71b14620e87e30c8ba1daa00a /mesonbuild/dependencies/base.py | |
parent | a11a28a98849e857c60a35e5cdecfc3a6ee49105 (diff) | |
download | meson-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.py | 53 |
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) |