diff options
author | Eli Schwartz <eschwartz@archlinux.org> | 2022-08-15 23:57:50 -0400 |
---|---|---|
committer | Eli Schwartz <eschwartz@archlinux.org> | 2022-08-24 23:49:14 -0400 |
commit | 27748f9cd16908f7806328cc0ffb6ba34f04588e (patch) | |
tree | c9ad701cab8e439d9b76a3cb5cffc6ee3cbf60f7 /mesonbuild/compilers/d.py | |
parent | 9e2d4994c4d8795619a8e0e819936cd48e4ebebf (diff) | |
download | meson-27748f9cd16908f7806328cc0ffb6ba34f04588e.zip meson-27748f9cd16908f7806328cc0ffb6ba34f04588e.tar.gz meson-27748f9cd16908f7806328cc0ffb6ba34f04588e.tar.bz2 |
fix linker regression for compilers that don't accept LDFLAGS directly
e.g. ldc -- the compiler needs to process args before consuming them.
Fixes #10693
Diffstat (limited to 'mesonbuild/compilers/d.py')
-rw-r--r-- | mesonbuild/compilers/d.py | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/mesonbuild/compilers/d.py b/mesonbuild/compilers/d.py index f4fd0cd..54f0d9a 100644 --- a/mesonbuild/compilers/d.py +++ b/mesonbuild/compilers/d.py @@ -283,7 +283,8 @@ class DmdLikeCompilerMixin(CompilerMixinBase): return super().build_rpath_args( env, build_dir, from_dir, rpath_paths, build_rpath, install_rpath) - def _translate_args_to_nongnu(self, args: T.List[str]) -> T.List[str]: + @classmethod + def _translate_args_to_nongnu(cls, args: T.List[str], info: MachineInfo, link_id: str) -> T.List[str]: # Translate common arguments to flags the LDC/DMD compilers # can understand. # The flags might have been added by pkg-config files, @@ -298,10 +299,10 @@ class DmdLikeCompilerMixin(CompilerMixinBase): for arg in args: # Translate OS specific arguments first. osargs = [] # type: T.List[str] - if self.info.is_windows(): - osargs = self.translate_arg_to_windows(arg) - elif self.info.is_darwin(): - osargs = self._translate_arg_to_osx(arg) + if info.is_windows(): + osargs = cls.translate_arg_to_windows(arg) + elif info.is_darwin(): + osargs = cls._translate_arg_to_osx(arg) if osargs: dcargs.extend(osargs) continue @@ -386,7 +387,7 @@ class DmdLikeCompilerMixin(CompilerMixinBase): continue # linker flag such as -L=/DEBUG must pass through - if self.linker.id == 'link' and self.info.is_windows() and suffix.startswith('/'): + if info.is_windows() and link_id == 'link' and suffix.startswith('/'): dcargs.append(arg) continue @@ -440,6 +441,10 @@ class DmdLikeCompilerMixin(CompilerMixinBase): args.append('-L=' + arg) return args + @classmethod + def _unix_args_to_native(cls, args: T.List[str], info: MachineInfo, link_id: str = '') -> T.List[str]: + return cls._translate_args_to_nongnu(args, info, link_id) + def get_debug_args(self, is_debug: bool) -> T.List[str]: ddebug_args = [] if is_debug: @@ -899,7 +904,7 @@ class LLVMDCompiler(DmdLikeCompilerMixin, DCompiler): return self._get_crt_args(crt_val, buildtype) def unix_args_to_native(self, args: T.List[str]) -> T.List[str]: - return self._translate_args_to_nongnu(args) + return self._unix_args_to_native(args, self.info, self.linker.id) def get_optimization_args(self, optimization_level: str) -> T.List[str]: return ldc_optimization_args[optimization_level] @@ -988,7 +993,7 @@ class DmdDCompiler(DmdLikeCompilerMixin, DCompiler): return self._get_crt_args(crt_val, buildtype) def unix_args_to_native(self, args: T.List[str]) -> T.List[str]: - return self._translate_args_to_nongnu(args) + return self._unix_args_to_native(args, self.info, self.linker.id) def get_optimization_args(self, optimization_level: str) -> T.List[str]: return dmd_optimization_args[optimization_level] |