diff options
Diffstat (limited to 'rules/data/RULES')
-rw-r--r-- | rules/data/RULES | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/rules/data/RULES b/rules/data/RULES new file mode 100644 index 0000000..ab5c92e --- /dev/null +++ b/rules/data/RULES @@ -0,0 +1,138 @@ +{ "staged": + { "doc": ["Stage data to a logical subdirectory."] + , "target_fields": ["srcs", "deps"] + , "string_fields": ["stage", "drop"] + , "field_doc": + { "srcs": ["The files to be staged"] + , "stage": + [ "The logical directory to stage the files to." + , "Individual directory components are joined with \"/\"." + ] + , "deps": + [ "Targets of with their runfiles should be added as well." + , "Their staging is not changed." + ] + , "drop": + [ "List of paths to drop from (each of) the \"srcs\" targets" + , "before joining and staging. In this way, GLOB constructs can" + , "be used is \"srcs\"." + ] + } + , "artifacts_doc": + [ "The runfiles and artifacts of the \"srcs\" targets, leaving out" + , "the ones with logical path in \"drop\", staged to the directory" + , "specified in \"stage\" together the runfiles of the targets" + , "specied in the field \"deps\" (in their original location)." + ] + , "runfiles_doc": ["Same as artifacts"] + , "imports": + { "runfiles": ["./", "..", "field_runfiles"] + , "artifacts": ["./", "..", "field_artifacts"] + , "runfiles w/o": "field_runfiles_without" + , "artifacts w/o": "field_artifacts_without" + } + , "expression": + { "type": "let*" + , "bindings": + [ [ "stage" + , { "type": "join" + , "separator": "/" + , "$1": {"type": "FIELD", "name": "stage"} + } + ] + , [ "exclude" + , { "type": "map_union" + , "$1": + { "type": "foreach" + , "range": {"type": "FIELD", "name": "drop"} + , "body": + { "type": "singleton_map" + , "key": {"type": "var", "name": "_"} + , "value": true + } + } + } + ] + , [ "srcs" + , { "type": "let*" + , "bindings": [["fieldname", "srcs"]] + , "body": + { "type": "map_union" + , "$1": + { "type": "if" + , "cond": {"type": "var", "name": "exclude"} + , "then": + [ {"type": "CALL_EXPRESSION", "name": "runfiles w/o"} + , {"type": "CALL_EXPRESSION", "name": "artifacts w/o"} + ] + , "else": + [ {"type": "CALL_EXPRESSION", "name": "runfiles"} + , {"type": "CALL_EXPRESSION", "name": "artifacts"} + ] + } + } + } + ] + , [ "staged" + , { "type": "to_subdir" + , "subdir": {"type": "var", "name": "stage"} + , "$1": {"type": "var", "name": "srcs"} + } + ] + , [ "dep stage" + , { "type": "let*" + , "bindings": [["fieldname", "deps"]] + , "body": {"type": "CALL_EXPRESSION", "name": "runfiles"} + } + ] + , [ "total" + , { "type": "disjoint_map_union" + , "msg": "Conflict between staged data and dependencies" + , "$1": + [ {"type": "var", "name": "dep stage"} + , {"type": "var", "name": "staged"} + ] + } + ] + ] + , "body": + { "type": "RESULT" + , "artifacts": {"type": "var", "name": "total"} + , "runfiles": {"type": "var", "name": "total"} + } + } + } +, "overlay": + { "doc": + ["Overlay the artifacts of \"deps\" targets in a latest-wins fashion."] + , "target_fields": ["deps"] + , "field_doc": {"deps": ["The targets of which to overlay the artifacts"]} + , "artifacts_doc": + [ "Artifacts of the targets specified in \"deps\". For conflicting" + , "logical paths, the artifact is taken from the latest target (in" + , "the \"deps\" field) that defines that logical path" + ] + , "runfiles_doc": ["Same as artifacts"] + , "expression": + { "type": "let*" + , "bindings": + [ [ "all" + , { "type": "map_union" + , "$1": + { "type": "foreach" + , "var": "dep" + , "range": {"type": "FIELD", "name": "deps"} + , "body": + {"type": "DEP_ARTIFACTS", "dep": {"type": "var", "name": "dep"}} + } + } + ] + ] + , "body": + { "type": "RESULT" + , "artifacts": {"type": "var", "name": "all"} + , "runfiles": {"type": "var", "name": "all"} + } + } + } +} |