From d246c53e66b22c7a5b2bb273be5478dba2467357 Mon Sep 17 00:00:00 2001 From: Klaus Aehlig Date: Mon, 13 May 2024 11:07:43 +0200 Subject: Add shell defaults So far, our rules, where depending on the shell, implicitly use "normal" defaults, hard-coded in the rules. Support configuring those in a default target, in the same way we do so for other tools, like the C compiler. In this, it is also possible to bring your own shell, built as a (compiled) target. --- shell/EXPRESSIONS | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 shell/EXPRESSIONS (limited to 'shell/EXPRESSIONS') diff --git a/shell/EXPRESSIONS b/shell/EXPRESSIONS new file mode 100644 index 0000000..6ab6c7c --- /dev/null +++ b/shell/EXPRESSIONS @@ -0,0 +1,87 @@ +{ "default-sh": + { "vars": ["defaults-transition", "fieldname"] + , "imports": {"list_provider": ["./", "..", "field_list_provider"]} + , "expression": + { "type": "let*" + , "bindings": + [ [ "fieldname" + , {"type": "var", "name": "fieldname", "default": "defaults"} + ] + , ["provider", "sh"] + , ["transition", {"type": "var", "name": "defaults-transition"}] + , [ "provided sh" + , { "type": "join" + , "$1": {"type": "CALL_EXPRESSION", "name": "list_provider"} + } + ] + , [ "sh" + , { "type": "if" + , "cond": {"type": "var", "name": "provided sh"} + , "then": {"type": "var", "name": "provided sh"} + , "else": "sh" + } + ] + ] + , "body": {"type": "var", "name": "sh"} + } + } +, "NON_SYSTEM": + { "vars": ["defaults-transition", "fieldname"] + , "expression": + { "type": "map_union" + , "$1": + { "type": "foreach" + , "var": "x" + , "range": + { "type": "FIELD" + , "name": {"type": "var", "name": "fieldname", "default": "defaults"} + } + , "body": + { "type": "DEP_PROVIDES" + , "dep": {"type": "var", "name": "x"} + , "provider": "NON_SYSTEM_TOOLS" + , "transition": + { "type": "var" + , "name": "defaults-transition" + , "default": {"type": "empty_map"} + } + , "default": {"type": "empty_map"} + } + } + } + } +, "sh": + { "vars": ["defaults-transition", "TOOLCHAIN_DIR", "fieldname"] + , "imports": {"default-sh": "default-sh", "NON_SYSTEM": "NON_SYSTEM"} + , "expression": + { "type": "let*" + , "bindings": + [ ["sh", {"type": "CALL_EXPRESSION", "name": "default-sh"}] + , ["NON_SYSTEM", {"type": "CALL_EXPRESSION", "name": "NON_SYSTEM"}] + , [ "sh" + , { "type": "if" + , "cond": + { "type": "lookup" + , "key": "sh" + , "map": {"type": "var", "name": "NON_SYSTEM"} + } + , "then": + { "type": "join" + , "separator": "/" + , "$1": + [ "." + , { "type": "var" + , "name": "TOOLCHAIN_DIR" + , "default": "toolchain" + } + , {"type": "var", "name": "sh"} + ] + } + , "else": {"type": "var", "name": "sh"} + } + ] + ] + , "body": {"type": "var", "name": "sh"} + } + } +} -- cgit v1.2.3