diff options
author | Martin Kelly <mkelly@xevo.com> | 2017-09-06 15:21:50 -0700 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2017-10-31 01:04:38 +0200 |
commit | 02bea7d5bf5c98c586e59e60357fc5ca11826172 (patch) | |
tree | 45657b5848ce1a30ff30451dc360e3ba3f39ee0a /mesonbuild/interpreter.py | |
parent | 68af8449d8576e27fb0390340f149f3001e8ea5f (diff) | |
download | meson-02bea7d5bf5c98c586e59e60357fc5ca11826172.zip meson-02bea7d5bf5c98c586e59e60357fc5ca11826172.tar.gz meson-02bea7d5bf5c98c586e59e60357fc5ca11826172.tar.bz2 |
namespace run_targets by subproject
Currently, run_target does not get namespaced for each subproject,
unlike executable and others. This means that two subprojects sharing
the same run_target name cause meson to crash.
Fix this by moving the subproject namespacing logic from the BuildTarget
class to the Target class.
Diffstat (limited to 'mesonbuild/interpreter.py')
-rw-r--r-- | mesonbuild/interpreter.py | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/mesonbuild/interpreter.py b/mesonbuild/interpreter.py index dd23070..b25aecd 100644 --- a/mesonbuild/interpreter.py +++ b/mesonbuild/interpreter.py @@ -606,9 +606,9 @@ class CustomTargetHolder(TargetHolder): raise InterpreterException('Cannot delete a member of a CustomTarget') class RunTargetHolder(InterpreterObject, ObjectHolder): - def __init__(self, name, command, args, dependencies, subdir): + def __init__(self, name, command, args, dependencies, subdir, subproject): InterpreterObject.__init__(self) - ObjectHolder.__init__(self, build.RunTarget(name, command, args, dependencies, subdir)) + ObjectHolder.__init__(self, build.RunTarget(name, command, args, dependencies, subdir, subproject)) def __repr__(self): r = '<{} {}: {}>' @@ -1060,10 +1060,10 @@ class CompilerHolder(InterpreterObject): return [] ModuleState = namedtuple('ModuleState', [ - 'build_to_src', 'subdir', 'current_lineno', 'environment', 'project_name', - 'project_version', 'backend', 'compilers', 'targets', 'data', 'headers', - 'man', 'global_args', 'project_args', 'build_machine', 'host_machine', - 'target_machine']) + 'build_to_src', 'subproject', 'subdir', 'current_lineno', 'environment', + 'project_name', 'project_version', 'backend', 'compilers', 'targets', + 'data', 'headers', 'man', 'global_args', 'project_args', 'build_machine', + 'host_machine', 'target_machine']) class ModuleHolder(InterpreterObject, ObjectHolder): def __init__(self, modname, module, interpreter): @@ -1085,6 +1085,7 @@ class ModuleHolder(InterpreterObject, ObjectHolder): state = ModuleState( build_to_src=os.path.relpath(self.interpreter.environment.get_source_dir(), self.interpreter.environment.get_build_dir()), + subproject=self.interpreter.subproject, subdir=self.interpreter.subdir, current_lineno=self.interpreter.current_lineno, environment=self.interpreter.environment, @@ -2303,7 +2304,7 @@ to directly access options of other subprojects.''') if len(args) != 1: raise InterpreterException('custom_target: Only one positional argument is allowed, and it must be a string name') name = args[0] - tg = CustomTargetHolder(build.CustomTarget(name, self.subdir, kwargs), self) + tg = CustomTargetHolder(build.CustomTarget(name, self.subdir, self.subproject, kwargs), self) self.add_target(name, tg.held_object) return tg @@ -2346,7 +2347,7 @@ to directly access options of other subprojects.''') cleaned_deps.append(d) command = cleaned_args[0] cmd_args = cleaned_args[1:] - tg = RunTargetHolder(name, command, cmd_args, cleaned_deps, self.subdir) + tg = RunTargetHolder(name, command, cmd_args, cleaned_deps, self.subdir, self.subproject) self.add_target(name, tg.held_object) return tg |