aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild
diff options
context:
space:
mode:
Diffstat (limited to 'mesonbuild')
-rw-r--r--mesonbuild/backend/vs2010backend.py26
-rw-r--r--mesonbuild/build.py34
2 files changed, 41 insertions, 19 deletions
diff --git a/mesonbuild/backend/vs2010backend.py b/mesonbuild/backend/vs2010backend.py
index 7bbd2b6..82891cd 100644
--- a/mesonbuild/backend/vs2010backend.py
+++ b/mesonbuild/backend/vs2010backend.py
@@ -272,17 +272,25 @@ class Vs2010Backend(backends.Backend):
all_deps[ldep.get_id()] = ldep
for obj_id, objdep in self.get_obj_target_deps(target.objects):
all_deps[obj_id] = objdep
- for gendep in target.get_generated_sources():
- if isinstance(gendep, build.CustomTarget):
- all_deps[gendep.get_id()] = gendep
- elif isinstance(gendep, build.CustomTargetIndex):
- all_deps[gendep.target.get_id()] = gendep.target
- else:
- gen_exe = gendep.generator.get_exe()
- if isinstance(gen_exe, build.Executable):
- all_deps[gen_exe.get_id()] = gen_exe
else:
raise MesonException('Unknown target type for target %s' % target)
+
+ for gendep in target.get_generated_sources():
+ if isinstance(gendep, build.CustomTarget):
+ all_deps[gendep.get_id()] = gendep
+ elif isinstance(gendep, build.CustomTargetIndex):
+ all_deps[gendep.target.get_id()] = gendep.target
+ else:
+ generator = gendep.get_generator()
+ gen_exe = generator.get_exe()
+ if isinstance(gen_exe, build.Executable):
+ all_deps[gen_exe.get_id()] = gen_exe
+ for d in generator.depends:
+ if isinstance(d, build.CustomTargetIndex):
+ all_deps[d.get_id()] = d.target
+ else:
+ all_deps[d.get_id()] = d
+
if not t or not recursive:
return all_deps
ret = self.get_target_deps(all_deps, recursive)
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index de8d94b..b6ded5e 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -1571,17 +1571,31 @@ class Generator:
return relpath.parts[0] != '..' # For subdirs we can only go "down".
def process_files(self, name, files, state, preserve_path_from=None, extra_args=None):
+ new = False
output = GeneratedList(self, state.subdir, preserve_path_from, extra_args=extra_args if extra_args is not None else [])
- for f in files:
- if isinstance(f, str):
- f = File.from_source_file(state.environment.source_dir, state.subdir, f)
- elif not isinstance(f, File):
- raise InvalidArguments('{} arguments must be strings or files not {!r}.'.format(name, f))
- if preserve_path_from:
- abs_f = f.absolute_path(state.environment.source_dir, state.environment.build_dir)
- if not self.is_parent_path(preserve_path_from, abs_f):
- raise InvalidArguments('When using preserve_path_from, all input files must be in a subdirectory of the given dir.')
- output.add_file(f, state)
+ for e in unholder(files):
+ fs = [e]
+ if isinstance(e, (CustomTarget, CustomTargetIndex, GeneratedList)):
+ self.depends.append(e)
+ fs = []
+ for f in e.get_outputs():
+ fs.append(File.from_built_file(state.subdir, f))
+ new = True
+ elif isinstance(e, str):
+ fs = [File.from_source_file(state.environment.source_dir, state.subdir, e)]
+ elif not isinstance(e, File):
+ raise InvalidArguments('{} arguments must be strings, files or CustomTargets, not {!r}.'.format(name, e))
+
+ for f in fs:
+ if preserve_path_from:
+ abs_f = f.absolute_path(state.environment.source_dir, state.environment.build_dir)
+ if not self.is_parent_path(preserve_path_from, abs_f):
+ raise InvalidArguments('generator.process: When using preserve_path_from, all input files must be in a subdirectory of the given dir.')
+ output.add_file(f, state)
+ if new:
+ FeatureNew.single_use(
+ 'Calling "{}" with CustomTaget or Index of CustomTarget.'.format(name),
+ '0.57.0', state.subproject)
return output