summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJürg Billeter <j@bitron.ch>2018-03-02 12:34:44 +0100
committerJürg Billeter <j@bitron.ch>2018-08-07 12:07:54 +0200
commit2847855c81cbc1c6642872b9f7b9f39d0ded9e10 (patch)
treee2e4f58fce5e33b94fb1e0d5b952a245414dd01b
parenta1564c4a1cf077b1a8537d37e19d1748a0905b20 (diff)
downloadbuildstream-juerg/build-depends.tar.gz
_loader.py: Add build-dependsjuerg/build-depends
-rw-r--r--buildstream/_loader.py53
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