aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/backend/backends.py
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2019-07-12 17:32:58 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2019-07-19 00:17:29 +0200
commit2912f44e9c21aa7578bdceb0d78ba53a555c6397 (patch)
tree06d662ae63a9e2cf9e738155a0e8ad084244b4bd /mesonbuild/backend/backends.py
parentf95c965043221b2fc0e40c9410bd9efa88f31832 (diff)
downloadmeson-2912f44e9c21aa7578bdceb0d78ba53a555c6397.zip
meson-2912f44e9c21aa7578bdceb0d78ba53a555c6397.tar.gz
meson-2912f44e9c21aa7578bdceb0d78ba53a555c6397.tar.bz2
backends: always serialize custom targets if they need a wrapper
Diffstat (limited to 'mesonbuild/backend/backends.py')
-rw-r--r--mesonbuild/backend/backends.py41
1 files changed, 21 insertions, 20 deletions
diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py
index b016fe5..4e6c259 100644
--- a/mesonbuild/backend/backends.py
+++ b/mesonbuild/backend/backends.py
@@ -336,8 +336,28 @@ class Backend:
else:
extra_paths = []
+ if isinstance(exe, dependencies.ExternalProgram):
+ exe_cmd = exe.get_command()
+ exe_for_machine = exe.for_machine
+ elif isinstance(exe, (build.BuildTarget, build.CustomTarget)):
+ exe_cmd = [self.get_target_filename_abs(exe)]
+ exe_for_machine = exe.for_machine
+ else:
+ exe_cmd = [exe]
+ exe_for_machine = MachineChoice.BUILD
+ is_cross_built = not self.environment.machines.matches_build_machine(exe_for_machine)
+ if is_cross_built and self.environment.need_exe_wrapper():
+ exe_wrapper = self.environment.get_exe_wrapper()
+ if not exe_wrapper.found():
+ msg = 'The exe_wrapper {!r} defined in the cross file is ' \
+ 'needed by target {!r}, but was not found. Please ' \
+ 'check the command and/or add it to PATH.'
+ raise MesonException(msg.format(exe_wrapper.name, tname))
+ else:
+ exe_wrapper = None
+
force_serialize = force_serialize or extra_paths or capture or workdir or \
- any('\n' in c for c in cmd_args)
+ exe_wrapper or any('\n' in c for c in cmd_args)
if not force_serialize:
return None
@@ -359,25 +379,6 @@ class Backend:
scratch_file = 'meson_exe_{0}_{1}.dat'.format(basename, digest)
exe_data = os.path.join(self.environment.get_scratch_dir(), scratch_file)
with open(exe_data, 'wb') as f:
- if isinstance(exe, dependencies.ExternalProgram):
- exe_cmd = exe.get_command()
- exe_for_machine = exe.for_machine
- elif isinstance(exe, (build.BuildTarget, build.CustomTarget)):
- exe_cmd = [self.get_target_filename_abs(exe)]
- exe_for_machine = exe.for_machine
- else:
- exe_cmd = [exe]
- exe_for_machine = MachineChoice.BUILD
- is_cross_built = not self.environment.machines.matches_build_machine(exe_for_machine)
- if is_cross_built and self.environment.need_exe_wrapper():
- exe_wrapper = self.environment.get_exe_wrapper()
- if not exe_wrapper.found():
- msg = 'The exe_wrapper {!r} defined in the cross file is ' \
- 'needed by target {!r}, but was not found. Please ' \
- 'check the command and/or add it to PATH.'
- raise MesonException(msg.format(exe_wrapper.name, tname))
- else:
- exe_wrapper = None
es = ExecutableSerialisation(basename, exe_cmd, cmd_args, env,
is_cross_built, exe_wrapper, workdir,
extra_paths, capture,