summaryrefslogtreecommitdiff
path: root/mesonbuild/compilers
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2024-11-21 09:50:36 +0100
committerDylan Baker <dylan@pnwbakers.com>2025-04-02 08:44:37 -0700
commit2c10d77c3c7b2b9ad3464ef37bc6eb01fb34deb0 (patch)
tree97ea5b2d1a35055aa4421d8f068d710a79b6e032 /mesonbuild/compilers
parentdfefd838a846dd944d8a3f91200b6c54f0ffd198 (diff)
downloadmeson-2c10d77c3c7b2b9ad3464ef37bc6eb01fb34deb0.tar.gz
compilers: introduce get_exe() and get_exe_args()
This will be used by rustdoc tests because the Test objects takes a single string for the command and everything else goes in the args. But apart from this, the need to split the executable from the arguments is common so create new methods to do it. While at it, fix brokenness in the handling of the zig compiler, which is checking against "zig" but failing to detect e.g. "/usr/bin/zig". Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'mesonbuild/compilers')
-rw-r--r--mesonbuild/compilers/compilers.py6
-rw-r--r--mesonbuild/compilers/detect.py4
-rw-r--r--mesonbuild/compilers/rust.py2
3 files changed, 9 insertions, 3 deletions
diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py
index a73697cdd..9fbde0e49 100644
--- a/mesonbuild/compilers/compilers.py
+++ b/mesonbuild/compilers/compilers.py
@@ -521,6 +521,12 @@ class Compiler(HoldableObject, metaclass=abc.ABCMeta):
def get_modes(self) -> T.List[Compiler]:
return self.modes
+ def get_exe(self) -> str:
+ return self.exelist[0]
+
+ def get_exe_args(self) -> T.List[str]:
+ return self.exelist[1:]
+
def get_linker_id(self) -> str:
# There is not guarantee that we have a dynamic linker instance, as
# some languages don't have separate linkers and compilers. In those
diff --git a/mesonbuild/compilers/detect.py b/mesonbuild/compilers/detect.py
index bce0be8a8..9dab06a85 100644
--- a/mesonbuild/compilers/detect.py
+++ b/mesonbuild/compilers/detect.py
@@ -1099,7 +1099,7 @@ def detect_rust_compiler(env: 'Environment', for_machine: MachineChoice) -> Rust
extra_args: T.Dict[str, T.Union[str, bool]] = {}
always_args: T.List[str] = []
if is_link_exe:
- compiler.extend(cls.use_linker_args(cc.linker.exelist[0], ''))
+ compiler.extend(cls.use_linker_args(cc.linker.get_exe(), ''))
extra_args['direct'] = True
extra_args['machine'] = cc.linker.machine
else:
@@ -1131,7 +1131,7 @@ def detect_rust_compiler(env: 'Environment', for_machine: MachineChoice) -> Rust
# inserts the correct prefix itself.
assert isinstance(linker, linkers.VisualStudioLikeLinkerMixin)
linker.direct = True
- compiler.extend(cls.use_linker_args(linker.exelist[0], ''))
+ compiler.extend(cls.use_linker_args(linker.get_exe(), ''))
else:
# On linux and macos rust will invoke the c compiler for
# linking, on windows it will use lld-link or link.exe.
diff --git a/mesonbuild/compilers/rust.py b/mesonbuild/compilers/rust.py
index 210544ed8..17908860e 100644
--- a/mesonbuild/compilers/rust.py
+++ b/mesonbuild/compilers/rust.py
@@ -314,7 +314,7 @@ class RustCompiler(Compiler):
exelist = rustup_exelist + [name]
else:
exelist = [name]
- args = self.exelist[1:]
+ args = self.get_exe_args()
from ..programs import find_external_program
for prog in find_external_program(env, self.for_machine, exelist[0], exelist[0],