diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2018-04-25 22:25:55 +0300 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2018-05-02 22:50:15 +0300 |
commit | 1918c0d231f0c04b1a57c2fdf057b50c8aa7312b (patch) | |
tree | 074fd9ede2fe8ee8c3e63822b1c89de39cd967ff /mesonbuild/build.py | |
parent | 77b72e8573bbd8d6d04cb11aacdba604b8649f4d (diff) | |
download | meson-1918c0d231f0c04b1a57c2fdf057b50c8aa7312b.zip meson-1918c0d231f0c04b1a57c2fdf057b50c8aa7312b.tar.gz meson-1918c0d231f0c04b1a57c2fdf057b50c8aa7312b.tar.bz2 |
Can combine D and C++ in a single target. Closes #3125.
Diffstat (limited to 'mesonbuild/build.py')
-rw-r--r-- | mesonbuild/build.py | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py index a2d024a..5d1163b 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -989,6 +989,8 @@ You probably should put it in link_with instead.''') langs = [] # Check if any of the external libraries were written in this language for dep in self.external_deps: + if dep.language is None: + continue if dep.language not in langs: langs.append(dep.language) # Check if any of the internal libraries this target links to were @@ -999,7 +1001,7 @@ You probably should put it in link_with instead.''') langs.append(language) return langs - def get_clike_dynamic_linker(self): + def get_clike_dynamic_linker_and_stdlibs(self): ''' We use the order of languages in `clike_langs` to determine which linker to use in case the target has sources compiled with multiple @@ -1021,12 +1023,19 @@ You probably should put it in link_with instead.''') for l in clike_langs: if l in self.compilers or l in dep_langs: try: - return all_compilers[l] + linker = all_compilers[l] except KeyError: raise MesonException( 'Could not get a dynamic linker for build target {!r}. ' 'Requires a linker for language "{}", but that is not ' 'a project language.'.format(self.name, l)) + stdlib_args = [] + added_languages = set() + for dl in itertools.chain(self.compilers, dep_langs): + if dl != linker.language: + stdlib_args += all_compilers[dl].language_stdlib_only_link_flags() + added_languages.add(dl) + return linker, stdlib_args m = 'Could not get a dynamic linker for build target {!r}' raise AssertionError(m.format(self.name)) @@ -1049,7 +1058,8 @@ You probably should put it in link_with instead.''') 2. If the target contains only objects, process_compilers guesses and picks the first compiler that smells right. ''' - linker = self.get_clike_dynamic_linker() + linker, _ = self.get_clike_dynamic_linker_and_stdlibs() + # Mixing many languages with MSVC is not supported yet so ignore stdlibs. if linker and linker.get_id() == 'msvc': return True return False |