summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mesonbuild/backend/backends.py5
-rw-r--r--mesonbuild/cmake/toolchain.py3
-rw-r--r--mesonbuild/compilers/compilers.py6
-rw-r--r--mesonbuild/compilers/detect.py4
-rw-r--r--mesonbuild/compilers/rust.py2
-rw-r--r--mesonbuild/dependencies/dev.py2
-rw-r--r--mesonbuild/interpreter/interpreter.py7
-rw-r--r--mesonbuild/linkers/linkers.py6
8 files changed, 23 insertions, 12 deletions
diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py
index a960537a8..8a7887837 100644
--- a/mesonbuild/backend/backends.py
+++ b/mesonbuild/backend/backends.py
@@ -2078,9 +2078,8 @@ class Backend:
Some backends don't support custom compilers. This is a convenience
method to convert a Compiler to a Generator.
'''
- exelist = compiler.get_exelist()
- exe = programs.ExternalProgram(exelist[0])
- args = exelist[1:]
+ exe = programs.ExternalProgram(compiler.get_exe())
+ args = compiler.get_exe_args()
commands = self.compiler_to_generator_args(target, compiler)
generator = build.Generator(exe, args + commands.to_native(),
[output_templ], depfile='@PLAINNAME@.d',
diff --git a/mesonbuild/cmake/toolchain.py b/mesonbuild/cmake/toolchain.py
index 9eb961c52..d410886ec 100644
--- a/mesonbuild/cmake/toolchain.py
+++ b/mesonbuild/cmake/toolchain.py
@@ -9,6 +9,7 @@ from ..envconfig import CMakeSkipCompilerTest
from .common import language_map, cmake_get_generator_args
from .. import mlog
+import os.path
import shutil
import typing as T
from enum import Enum
@@ -198,7 +199,7 @@ class CMakeToolchain:
if compiler.get_argument_syntax() == 'msvc':
return arg.startswith('/')
else:
- if compiler.exelist[0] == 'zig' and arg in {'ar', 'cc', 'c++', 'dlltool', 'lib', 'ranlib', 'objcopy', 'rc'}:
+ if os.path.basename(compiler.get_exe()) == 'zig' and arg in {'ar', 'cc', 'c++', 'dlltool', 'lib', 'ranlib', 'objcopy', 'rc'}:
return True
return arg.startswith('-')
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],
diff --git a/mesonbuild/dependencies/dev.py b/mesonbuild/dependencies/dev.py
index 0c8886b81..8f0f1baae 100644
--- a/mesonbuild/dependencies/dev.py
+++ b/mesonbuild/dependencies/dev.py
@@ -593,7 +593,7 @@ class JNISystemDependency(SystemDependency):
self.java_home = environment.properties[self.for_machine].get_java_home()
if not self.java_home:
- self.java_home = pathlib.Path(shutil.which(self.javac.exelist[0])).resolve().parents[1]
+ self.java_home = pathlib.Path(shutil.which(self.javac.get_exe())).resolve().parents[1]
if m.is_darwin():
problem_java_prefix = pathlib.Path('/System/Library/Frameworks/JavaVM.framework/Versions')
if problem_java_prefix in self.java_home.parents:
diff --git a/mesonbuild/interpreter/interpreter.py b/mesonbuild/interpreter/interpreter.py
index a17c76c5f..24c63bc1a 100644
--- a/mesonbuild/interpreter/interpreter.py
+++ b/mesonbuild/interpreter/interpreter.py
@@ -798,13 +798,12 @@ class Interpreter(InterpreterBase, HoldableObject):
if not cmd.found():
raise InterpreterException(f'command {cmd.get_name()!r} not found or not executable')
elif isinstance(cmd, compilers.Compiler):
- exelist = cmd.get_exelist()
- cmd = exelist[0]
+ expanded_args = cmd.get_exe_args()
+ cmd = cmd.get_exe()
prog = ExternalProgram(cmd, silent=True)
if not prog.found():
raise InterpreterException(f'Program {cmd!r} not found or not executable')
cmd = prog
- expanded_args = exelist[1:]
else:
if isinstance(cmd, mesonlib.File):
cmd = cmd.absolute_path(srcdir, builddir)
@@ -823,7 +822,7 @@ class Interpreter(InterpreterBase, HoldableObject):
expanded_args.append(a.get_path())
elif isinstance(a, compilers.Compiler):
FeatureNew.single_use('Compiler object as a variadic argument to `run_command`', '0.61.0', self.subproject, location=self.current_node)
- prog = ExternalProgram(a.exelist[0], silent=True)
+ prog = ExternalProgram(a.get_exe(), silent=True)
if not prog.found():
raise InterpreterException(f'Program {cmd!r} not found or not executable')
expanded_args.append(prog.get_path())
diff --git a/mesonbuild/linkers/linkers.py b/mesonbuild/linkers/linkers.py
index 45eb6e8c3..58753e63b 100644
--- a/mesonbuild/linkers/linkers.py
+++ b/mesonbuild/linkers/linkers.py
@@ -31,6 +31,9 @@ class StaticLinker:
def get_id(self) -> str:
return self.id
+ def get_exe(self) -> str:
+ return self.exelist[0]
+
def compiler_args(self, args: T.Optional[T.Iterable[str]] = None) -> CompilerArgs:
return CompilerArgs(self, args)
@@ -152,6 +155,9 @@ class DynamicLinker(metaclass=abc.ABCMeta):
def get_id(self) -> str:
return self.id
+ def get_exe(self) -> str:
+ return self.exelist[0]
+
def get_version_string(self) -> str:
return f'({self.id} {self.version})'