diff options
Diffstat (limited to 'build.py')
-rw-r--r-- | build.py | 32 |
1 files changed, 24 insertions, 8 deletions
@@ -248,14 +248,17 @@ class BuildTarget(): if 'link_with' in self.kwargs: self.kwargs['link_with'] = self.unpack_holder(self.kwargs['link_with']) - def extract_objects(self, srclist): + def extract_objects(self, srcargs): obj_src = [] - for src in srclist: - if not isinstance(src, str): - raise coredata.MesonException('Extraction arguments must be strings.') - if src not in self.sources: - raise coredata.MesonException('Tried to extract unknown source %s.' % src) - obj_src.append(src) + for srclist in srcargs: + if not isinstance(srclist, list): + srclist = [srclist] + for src in srclist: + if not isinstance(src, str): + raise coredata.MesonException('Extraction arguments must be strings.') + if src not in self.sources: + raise coredata.MesonException('Tried to extract unknown source %s.' % src) + obj_src.append(src) return ExtractedObjects(self, obj_src) def get_rpaths(self): @@ -552,6 +555,7 @@ class GeneratedList(): self.infilelist = [] self.outfilelist = [] self.outmap = {} + self.extra_depends = [] def add_file(self, newfile): self.infilelist.append(newfile) @@ -665,11 +669,14 @@ class CustomTarget: 'command' : True, 'install' : True, 'install_dir' : True, - 'build_always' : True} + 'build_always' : True, + 'depends' : True} + def __init__(self, name, subdir, kwargs): self.name = name self.subdir = subdir self.dependencies = [] + self.extra_depends = [] self.process_kwargs(kwargs) self.extra_files = [] self.install_rpath = '' @@ -741,6 +748,15 @@ class CustomTarget: self.build_always = kwargs.get('build_always', False) if not isinstance(self.build_always, bool): raise InvalidArguments('Argument build_always must be a boolean.') + extra_deps = kwargs.get('depends', []) + if not isinstance(extra_deps, list): + extra_deps = [extra_deps] + for ed in extra_deps: + while hasattr(ed, 'held_object'): + ed = ed.held_object + if not isinstance(ed, CustomTarget) and not isinstance(ed, BuildTarget): + raise InvalidArguments('Can only depend on toplevel targets.') + self.extra_depends.append(ed) def get_basename(self): return self.name |