summaryrefslogtreecommitdiff
path: root/rules/data/RULES
diff options
context:
space:
mode:
Diffstat (limited to 'rules/data/RULES')
-rw-r--r--rules/data/RULES138
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"}
+ }
+ }
+ }
+}