aboutsummaryrefslogtreecommitdiff
path: root/ninjabackend.py
diff options
context:
space:
mode:
Diffstat (limited to 'ninjabackend.py')
-rw-r--r--ninjabackend.py29
1 files changed, 26 insertions, 3 deletions
diff --git a/ninjabackend.py b/ninjabackend.py
index ebf0a94..3e15a31 100644
--- a/ninjabackend.py
+++ b/ninjabackend.py
@@ -312,9 +312,32 @@ class NinjaBackend(backends.Backend):
def generate_run_target(self, target, outfile):
runnerscript = os.path.join(self.environment.get_script_dir(), 'commandrunner.py')
- elem = NinjaBuildElement(target.name, 'CUSTOM_COMMAND', [])
- cmd = [sys.executable, runnerscript, self.environment.get_source_dir(), self.environment.get_build_dir(),
- target.subdir, target.command] + target.args
+ deps = []
+ arg_strings = []
+ for i in target.args:
+ if isinstance(i, str):
+ arg_strings.append(i)
+ elif isinstance(i, build.BuildTarget):
+ deps.append(self.get_target_filename(i))
+ else:
+ raise MesonException('Unreachable code.')
+ elem = NinjaBuildElement(target.name, 'CUSTOM_COMMAND', deps)
+ cmd = [sys.executable, runnerscript, self.environment.get_source_dir(), self.environment.get_build_dir(), target.subdir]
+ texe = target.command
+ try:
+ texe = texe.held_object
+ except AttributeError:
+ pass
+ if isinstance(texe, build.Executable):
+ deps.append(self.get_target_filename(texe))
+ if self.environment.is_cross_build() \
+ and wrapper is not self.environment.cross_info.config['binaries'].get('exe_wrapper', None):
+ cmd += [self.environment.cross_info.config['binaries']['exe_wrapper'], self.get_target_filename(texe)]
+ else:
+ cmd += [os.path.join(self.environment.get_build_dir(), self.get_target_filename(texe))]
+ else:
+ cmd.append(target.command)
+ cmd += target.args
elem.add_item('COMMAND', cmd)
elem.add_item('description', 'Running external command %s.' % target.name)
elem.add_item('pool', 'console')