aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Schwartz <eschwartz@archlinux.org>2022-08-15 23:57:50 -0400
committerNirbheek Chauhan <nirbheek@centricular.com>2022-09-02 13:48:40 +0530
commit4ac68bed5cad1fe9a366b3d3afcbc4a256a96ea4 (patch)
tree723c979d702e3baa50f9a06c80e2c90e780edd25
parent1c270b78374167f8cead9bb96b41f813f24f927f (diff)
downloadmeson-4ac68bed5cad1fe9a366b3d3afcbc4a256a96ea4.zip
meson-4ac68bed5cad1fe9a366b3d3afcbc4a256a96ea4.tar.gz
meson-4ac68bed5cad1fe9a366b3d3afcbc4a256a96ea4.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
-rw-r--r--mesonbuild/compilers/compilers.py6
-rw-r--r--mesonbuild/compilers/d.py21
-rw-r--r--mesonbuild/compilers/mixins/ccrx.py4
-rw-r--r--mesonbuild/compilers/mixins/compcert.py5
-rw-r--r--mesonbuild/compilers/mixins/ti.py4
-rw-r--r--mesonbuild/compilers/mixins/xc16.py4
-rw-r--r--mesonbuild/linkers/detect.py4
7 files changed, 34 insertions, 14 deletions
diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py
index 18ba6e9..20e35ee 100644
--- a/mesonbuild/compilers/compilers.py
+++ b/mesonbuild/compilers/compilers.py
@@ -690,10 +690,14 @@ class Compiler(HoldableObject, metaclass=abc.ABCMeta):
"""
raise EnvironmentException('Language %s does not support function checks.' % self.get_display_language())
- def unix_args_to_native(self, args: T.List[str]) -> T.List[str]:
+ @classmethod
+ def _unix_args_to_native(cls, args: T.List[str], info: 'MachineInfo') -> T.List[str]:
"Always returns a copy that can be independently mutated"
return args.copy()
+ def unix_args_to_native(self, args: T.List[str]) -> T.List[str]:
+ return self._unix_args_to_native(args, self.info)
+
@classmethod
def native_args_to_unix(cls, args: T.List[str]) -> T.List[str]:
"Always returns a copy that can be independently mutated"
diff --git a/mesonbuild/compilers/d.py b/mesonbuild/compilers/d.py
index 35ab024..046d05b 100644
--- a/mesonbuild/compilers/d.py
+++ b/mesonbuild/compilers/d.py
@@ -281,7 +281,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,
@@ -296,10 +297,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
@@ -384,7 +385,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
@@ -438,6 +439,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:
@@ -897,7 +902,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]
@@ -986,7 +991,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]
diff --git a/mesonbuild/compilers/mixins/ccrx.py b/mesonbuild/compilers/mixins/ccrx.py
index d87769e..f4c5e06 100644
--- a/mesonbuild/compilers/mixins/ccrx.py
+++ b/mesonbuild/compilers/mixins/ccrx.py
@@ -11,6 +11,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+from __future__ import annotations
"""Representations specific to the Renesas CC-RX compiler family."""
@@ -20,6 +21,7 @@ import typing as T
from ...mesonlib import EnvironmentException
if T.TYPE_CHECKING:
+ from ...envconfig import MachineInfo
from ...environment import Environment
from ...compilers.compilers import Compiler
else:
@@ -105,7 +107,7 @@ class CcrxCompiler(Compiler):
return ccrx_debug_args[is_debug]
@classmethod
- def unix_args_to_native(cls, args: T.List[str]) -> T.List[str]:
+ def _unix_args_to_native(cls, args: T.List[str], info: MachineInfo) -> T.List[str]:
result = []
for i in args:
if i.startswith('-D'):
diff --git a/mesonbuild/compilers/mixins/compcert.py b/mesonbuild/compilers/mixins/compcert.py
index 5e2ba0d..f1de8f1 100644
--- a/mesonbuild/compilers/mixins/compcert.py
+++ b/mesonbuild/compilers/mixins/compcert.py
@@ -11,6 +11,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+from __future__ import annotations
"""Representations specific to the CompCert C compiler family."""
@@ -19,6 +20,7 @@ import re
import typing as T
if T.TYPE_CHECKING:
+ from envconfig import MachineInfo
from ...environment import Environment
from ...compilers.compilers import Compiler
else:
@@ -87,7 +89,8 @@ class CompCertCompiler(Compiler):
def get_pch_use_args(self, pch_dir: str, header: str) -> T.List[str]:
return []
- def unix_args_to_native(self, args: T.List[str]) -> T.List[str]:
+ @classmethod
+ def _unix_args_to_native(cls, args: T.List[str], info: MachineInfo) -> T.List[str]:
"Always returns a copy that can be independently mutated"
patched_args = [] # type: T.List[str]
for arg in args:
diff --git a/mesonbuild/compilers/mixins/ti.py b/mesonbuild/compilers/mixins/ti.py
index cbad300..a98e6d0 100644
--- a/mesonbuild/compilers/mixins/ti.py
+++ b/mesonbuild/compilers/mixins/ti.py
@@ -11,6 +11,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+from __future__ import annotations
"""Representations specific to the Texas Instruments compiler family."""
@@ -20,6 +21,7 @@ import typing as T
from ...mesonlib import EnvironmentException
if T.TYPE_CHECKING:
+ from ...envconfig import MachineInfo
from ...environment import Environment
from ...compilers.compilers import Compiler
else:
@@ -120,7 +122,7 @@ class TICompiler(Compiler):
return ['-I=' + path]
@classmethod
- def unix_args_to_native(cls, args: T.List[str]) -> T.List[str]:
+ def _unix_args_to_native(cls, args: T.List[str], info: MachineInfo) -> T.List[str]:
result = []
for i in args:
if i.startswith('-D'):
diff --git a/mesonbuild/compilers/mixins/xc16.py b/mesonbuild/compilers/mixins/xc16.py
index 2433561..db7a337 100644
--- a/mesonbuild/compilers/mixins/xc16.py
+++ b/mesonbuild/compilers/mixins/xc16.py
@@ -11,6 +11,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
+from __future__ import annotations
"""Representations specific to the Microchip XC16 C compiler family."""
@@ -20,6 +21,7 @@ import typing as T
from ...mesonlib import EnvironmentException
if T.TYPE_CHECKING:
+ from ...envconfig import MachineInfo
from ...environment import Environment
from ...compilers.compilers import Compiler
else:
@@ -104,7 +106,7 @@ class Xc16Compiler(Compiler):
return xc16_debug_args[is_debug]
@classmethod
- def unix_args_to_native(cls, args: T.List[str]) -> T.List[str]:
+ def _unix_args_to_native(cls, args: T.List[str], info: MachineInfo) -> T.List[str]:
result = []
for i in args:
if i.startswith('-D'):
diff --git a/mesonbuild/linkers/detect.py b/mesonbuild/linkers/detect.py
index 684328b..9080444 100644
--- a/mesonbuild/linkers/detect.py
+++ b/mesonbuild/linkers/detect.py
@@ -140,7 +140,9 @@ def guess_nix_linker(env: 'Environment', compiler: T.List[str], comp_class: T.Ty
"""
env.coredata.add_lang_args(comp_class.language, comp_class, for_machine, env)
extra_args = extra_args or []
- extra_args += env.coredata.get_external_link_args(for_machine, comp_class.language)
+
+ ldflags = env.coredata.get_external_link_args(for_machine, comp_class.language)
+ extra_args += comp_class._unix_args_to_native(ldflags, env.machines[for_machine])
if isinstance(comp_class.LINKER_PREFIX, str):
check_args = [comp_class.LINKER_PREFIX + '--version'] + extra_args