diff options
author | Jürg Billeter <j@bitron.ch> | 2018-03-02 12:34:44 +0100 |
---|---|---|
committer | Jürg Billeter <j@bitron.ch> | 2018-08-07 12:07:54 +0200 |
commit | 2847855c81cbc1c6642872b9f7b9f39d0ded9e10 (patch) | |
tree | e2e4f58fce5e33b94fb1e0d5b952a245414dd01b | |
parent | a1564c4a1cf077b1a8537d37e19d1748a0905b20 (diff) | |
download | buildstream-juerg/build-depends.tar.gz |
_loader.py: Add build-dependsjuerg/build-depends
-rw-r--r-- | buildstream/_loader.py | 53 |
1 files changed, 34 insertions, 19 deletions
diff --git a/buildstream/_loader.py b/buildstream/_loader.py index 2fc7d8f0c..4fbbd5234 100644 --- a/buildstream/_loader.py +++ b/buildstream/_loader.py @@ -46,6 +46,7 @@ class Symbol(): FILENAME = "filename" KIND = "kind" DEPENDS = "depends" + BUILD_DEPENDS = "build-depends" SOURCES = "sources" CONFIG = "config" VARIABLES = "variables" @@ -93,7 +94,7 @@ class LoadElement(): # Ensure the root node is valid _yaml.node_validate(self.data, [ - 'kind', 'depends', 'sources', 'sandbox', + 'kind', 'depends', 'build-depends', 'sources', 'sandbox', 'variables', 'environment', 'environment-nocache', 'config', 'public', 'description', ]) @@ -142,28 +143,42 @@ class LoadElement(): # After extracting depends, they are removed from the data node # # Returns a normalized array of Dependency objects -def extract_depends_from_node(data): - depends = _yaml.node_get(data, list, Symbol.DEPENDS, default_value=[]) +def extract_depends_from_node(data, *, key=None): + if key is None: + build_depends = extract_depends_from_node(data, key=Symbol.BUILD_DEPENDS) + depends = extract_depends_from_node(data, key=Symbol.DEPENDS) + return build_depends + depends + elif key == Symbol.BUILD_DEPENDS: + default_dep_type = Symbol.BUILD + elif key == Symbol.DEPENDS: + default_dep_type = None + + depends = _yaml.node_get(data, list, key, default_value=[]) output_deps = [] for dep in depends: - dep_provenance = _yaml.node_get_provenance(data, key=Symbol.DEPENDS, indices=[depends.index(dep)]) + dep_provenance = _yaml.node_get_provenance(data, key=key, indices=[depends.index(dep)]) if isinstance(dep, str): - dependency = Dependency(dep, provenance=dep_provenance) + dependency = Dependency(dep, provenance=dep_provenance, dep_type=default_dep_type) elif isinstance(dep, Mapping): - _yaml.node_validate(dep, ['filename', 'type', 'junction']) - - # Make type optional, for this we set it to None - dep_type = _yaml.node_get(dep, str, Symbol.TYPE, default_value=None) - if dep_type is None or dep_type == Symbol.ALL: - dep_type = None - elif dep_type not in [Symbol.BUILD, Symbol.RUNTIME]: - provenance = _yaml.node_get_provenance(dep, key=Symbol.TYPE) - raise LoadError(LoadErrorReason.INVALID_DATA, - "{}: Dependency type '{}' is not 'build', 'runtime' or 'all'" - .format(provenance, dep_type)) + if default_dep_type: + _yaml.node_validate(dep, ['filename', 'junction']) + + dep_type = default_dep_type + else: + _yaml.node_validate(dep, ['filename', 'type', 'junction']) + + # Make type optional, for this we set it to None + dep_type = _yaml.node_get(dep, str, Symbol.TYPE, default_value=None) + if not dep_type or dep_type == Symbol.ALL: + dep_type = None + elif dep_type not in [Symbol.BUILD, Symbol.RUNTIME]: + provenance = _yaml.node_get_provenance(dep, key=Symbol.TYPE) + raise LoadError(LoadErrorReason.INVALID_DATA, + "{}: Dependency type '{}' is not 'build', 'runtime' or 'all'" + .format(provenance, dep_type)) filename = _yaml.node_get(dep, str, Symbol.FILENAME) @@ -175,16 +190,16 @@ def extract_depends_from_node(data): else: index = depends.index(dep) - provenance = _yaml.node_get_provenance(data, key=Symbol.DEPENDS, indices=[index]) + provenance = _yaml.node_get_provenance(data, key=key, indices=[index]) raise LoadError(LoadErrorReason.INVALID_DATA, "{}: List '{}' element {:d} is not a list or dict" - .format(provenance, Symbol.DEPENDS, index)) + .format(provenance, key, index)) output_deps.append(dependency) # Now delete "depends", we dont want it anymore - del data[Symbol.DEPENDS] + del data[key] return output_deps |