summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOliver Reiche <oliver.reiche@huawei.com>2023-08-16 15:10:31 +0200
committerOliver Reiche <oliver.reiche@huawei.com>2023-08-16 15:37:37 +0200
commit54bb2a33b3e36123f8f411f77ec8e76f5b021e3d (patch)
treef1ccc4416475df33a9e494cf8e27d5843bbc6a3f
parentebf3cf04bc80ae7bf083220e63e739bf32151c95 (diff)
downloadrules-cc-54bb2a33b3e36123f8f411f77ec8e76f5b021e3d.tar.gz
rules: Propagate PATH list from defaults
... instead of creating an ENV from it and propagating this. The idea is to keep PATH entries separate and only join them with ":" when we need it. In this way, we can accumulate PATHs from multiple defaults later, and perform a deduplication ("nub_left") to shorten the final string length.
-rw-r--r--CC/EXPRESSIONS31
-rw-r--r--CC/foreign/EXPRESSIONS31
-rw-r--r--CC/foreign/cmake/EXPRESSIONS29
-rw-r--r--CC/foreign/make/EXPRESSIONS29
-rw-r--r--CC/prebuilt/EXPRESSIONS31
5 files changed, 145 insertions, 6 deletions
diff --git a/CC/EXPRESSIONS b/CC/EXPRESSIONS
index 2a5011d..b718f76 100644
--- a/CC/EXPRESSIONS
+++ b/CC/EXPRESSIONS
@@ -1223,6 +1223,7 @@
, "flags": "flags"
, "objects": "objects"
, "default-ENV": "default-ENV"
+ , "default-PATH": "default-PATH"
, "default-LDFLAGS": "default-LDFLAGS"
, "default-TOOLCHAIN": "default-TOOLCHAIN"
, "default-NON_SYSTEM_TOOLS": "default-NON_SYSTEM_TOOLS"
@@ -1271,6 +1272,36 @@
]
}
]
+ , [ "ENV_PATH"
+ , { "type": "lookup"
+ , "map": {"type": "var", "name": "ENV"}
+ , "key": "PATH"
+ }
+ ]
+ , [ "ENV"
+ , { "type": "map_union"
+ , "$1":
+ [ {"type": "var", "name": "ENV"}
+ , { "type": "singleton_map"
+ , "key": "PATH"
+ , "value":
+ { "type": "join"
+ , "separator": ":"
+ , "$1":
+ { "type": "++"
+ , "$1":
+ [ {"type": "CALL_EXPRESSION", "name": "default-PATH"}
+ , { "type": "if"
+ , "cond": {"type": "var", "name": "ENV_PATH"}
+ , "then": [{"type": "var", "name": "ENV_PATH"}]
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ ]
, ["objects", {"type": "CALL_EXPRESSION", "name": "objects"}]
, [ "base name"
, { "type": "if"
diff --git a/CC/foreign/EXPRESSIONS b/CC/foreign/EXPRESSIONS
index 64e0e27..1692f83 100644
--- a/CC/foreign/EXPRESSIONS
+++ b/CC/foreign/EXPRESSIONS
@@ -43,6 +43,7 @@
, "imports":
{ "compiler-cc": ["CC", "compiler-cc"]
, "default-ENV": ["CC", "default-ENV"]
+ , "default-PATH": ["CC", "default-PATH"]
, "default-TOOLCHAIN": ["CC", "default-TOOLCHAIN"]
, "default-NON_SYSTEM_TOOLS": ["CC", "default-NON_SYSTEM_TOOLS"]
}
@@ -69,6 +70,36 @@
]
}
]
+ , [ "ENV_PATH"
+ , { "type": "lookup"
+ , "map": {"type": "var", "name": "ENV"}
+ , "key": "PATH"
+ }
+ ]
+ , [ "ENV"
+ , { "type": "map_union"
+ , "$1":
+ [ {"type": "var", "name": "ENV"}
+ , { "type": "singleton_map"
+ , "key": "PATH"
+ , "value":
+ { "type": "join"
+ , "separator": ":"
+ , "$1":
+ { "type": "++"
+ , "$1":
+ [ {"type": "CALL_EXPRESSION", "name": "default-PATH"}
+ , { "type": "if"
+ , "cond": {"type": "var", "name": "ENV_PATH"}
+ , "then": [{"type": "var", "name": "ENV_PATH"}]
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ ]
, [ "expand_exec.c"
, { "type": "singleton_map"
, "key": "expand_exec.c"
diff --git a/CC/foreign/cmake/EXPRESSIONS b/CC/foreign/cmake/EXPRESSIONS
index 2266f61..ac7039c 100644
--- a/CC/foreign/cmake/EXPRESSIONS
+++ b/CC/foreign/cmake/EXPRESSIONS
@@ -27,6 +27,7 @@
]
, "imports":
{ "artifacts": ["", "field_artifacts"]
+ , "nub_left": ["", "nub_left"]
, "flags-cc": ["CC", "flags-cc"]
, "flags-cxx": ["CC", "flags-cxx"]
, "compiler-cc": ["CC", "compiler-cc"]
@@ -34,6 +35,7 @@
, "default-LDFLAGS": ["CC", "default-LDFLAGS"]
, "default-AR": ["CC", "default-AR"]
, "default-ENV": ["CC", "default-ENV"]
+ , "default-PATH": ["CC", "default-PATH"]
, "default-TOOLCHAIN": ["CC", "default-TOOLCHAIN"]
, "default-NON_SYSTEM_TOOLS": ["CC", "default-NON_SYSTEM_TOOLS"]
, "expand_exec_tool": ["./", "..", "expand_exec_tool"]
@@ -136,14 +138,25 @@
}
}
]
+ , [ "PATH"
+ , { "type": "join"
+ , "separator": ":"
+ , "$1":
+ { "type": "let*"
+ , "bindings":
+ [["list", {"type": "CALL_EXPRESSION", "name": "default-PATH"}]]
+ , "body": {"type": "CALL_EXPRESSION", "name": "nub_left"}
+ }
+ }
+ ]
, [ "ENV"
, { "type": "map_union"
, "$1":
- [ {"type": "CALL_EXPRESSION", "name": "default-ENV"}
- , {"type": "var", "name": "ENV", "default": {"type": "empty_map"}}
- , { "type": "env"
+ [ { "type": "env"
, "vars": ["CC", "CXX", "CXXFLAGS", "CFLAGS", "LDFLAGS", "AR"]
}
+ , {"type": "CALL_EXPRESSION", "name": "default-ENV"}
+ , {"type": "var", "name": "ENV", "default": {"type": "empty_map"}}
]
}
]
@@ -190,7 +203,17 @@
, "mkdir scratch"
, "readonly ROOT=\"$(pwd)\""
, "export TMPDIR=\"$(pwd)/scratch\""
+ , "export TOOLCHAIN=\"$(pwd)/toolchain\""
, "export LOCALBASE=\"$(pwd)/localbase\""
+ , { "type": "join"
+ , "$1":
+ [ "export PATH=\"$(./expand_exec TOOLCHAIN -- echo "
+ , { "type": "join_cmd"
+ , "$1": [{"type": "var", "name": "PATH"}]
+ }
+ , ")\":$PATH"
+ ]
+ }
]
, { "type": "if"
, "cond": {"type": "var", "name": "pre_cmds"}
diff --git a/CC/foreign/make/EXPRESSIONS b/CC/foreign/make/EXPRESSIONS
index ba98154..133b775 100644
--- a/CC/foreign/make/EXPRESSIONS
+++ b/CC/foreign/make/EXPRESSIONS
@@ -29,6 +29,7 @@
]
, "imports":
{ "artifacts": ["", "field_artifacts"]
+ , "nub_left": ["", "nub_left"]
, "flags-cc": ["CC", "flags-cc"]
, "flags-cxx": ["CC", "flags-cxx"]
, "compiler-cc": ["CC", "compiler-cc"]
@@ -36,6 +37,7 @@
, "default-LDFLAGS": ["CC", "default-LDFLAGS"]
, "default-AR": ["CC", "default-AR"]
, "default-ENV": ["CC", "default-ENV"]
+ , "default-PATH": ["CC", "default-PATH"]
, "default-TOOLCHAIN": ["CC", "default-TOOLCHAIN"]
, "default-NON_SYSTEM_TOOLS": ["CC", "default-NON_SYSTEM_TOOLS"]
, "expand_exec_tool": ["./", "..", "expand_exec_tool"]
@@ -132,15 +134,26 @@
, "else": {"type": "var", "name": "PREFIX", "default": "/"}
}
]
+ , [ "PATH"
+ , { "type": "join"
+ , "separator": ":"
+ , "$1":
+ { "type": "let*"
+ , "bindings":
+ [["list", {"type": "CALL_EXPRESSION", "name": "default-PATH"}]]
+ , "body": {"type": "CALL_EXPRESSION", "name": "nub_left"}
+ }
+ }
+ ]
, [ "ENV"
, { "type": "map_union"
, "$1":
- [ {"type": "CALL_EXPRESSION", "name": "default-ENV"}
- , {"type": "var", "name": "ENV", "default": {"type": "empty_map"}}
- , { "type": "env"
+ [ { "type": "env"
, "vars":
["CC", "CXX", "CFLAGS", "CXXFLAGS", "LDFLAGS", "AR", "PREFIX"]
}
+ , {"type": "CALL_EXPRESSION", "name": "default-ENV"}
+ , {"type": "var", "name": "ENV", "default": {"type": "empty_map"}}
]
}
]
@@ -188,7 +201,17 @@
, "readonly ROOT=\"$(pwd)\""
, "export TMPDIR=\"$(pwd)/scratch\""
, "export DESTDIR=\"$(pwd)/install\""
+ , "export TOOLCHAIN=\"$(pwd)/toolchain\""
, "export LOCALBASE=\"$(pwd)/localbase\""
+ , { "type": "join"
+ , "$1":
+ [ "export PATH=\"$(./expand_exec TOOLCHAIN -- echo "
+ , { "type": "join_cmd"
+ , "$1": [{"type": "var", "name": "PATH"}]
+ }
+ , ")\":$PATH"
+ ]
+ }
]
, { "type": "if"
, "cond": {"type": "var", "name": "pre_cmds"}
diff --git a/CC/prebuilt/EXPRESSIONS b/CC/prebuilt/EXPRESSIONS
index c404bec..7b35c21 100644
--- a/CC/prebuilt/EXPRESSIONS
+++ b/CC/prebuilt/EXPRESSIONS
@@ -111,6 +111,7 @@
, "cflags-files-deps": ["./", "..", "cflags-files-deps"]
, "ldflags-files-deps": ["./", "..", "ldflags-files-deps"]
, "default-ENV": ["./", "..", "default-ENV"]
+ , "default-PATH": ["./", "..", "default-PATH"]
}
, "expression":
{ "type": "let*"
@@ -239,6 +240,36 @@
]
}
]
+ , [ "ENV_PATH"
+ , { "type": "lookup"
+ , "map": {"type": "var", "name": "ENV"}
+ , "key": "PATH"
+ }
+ ]
+ , [ "ENV"
+ , { "type": "map_union"
+ , "$1":
+ [ {"type": "var", "name": "ENV"}
+ , { "type": "singleton_map"
+ , "key": "PATH"
+ , "value":
+ { "type": "join"
+ , "separator": ":"
+ , "$1":
+ { "type": "++"
+ , "$1":
+ [ {"type": "CALL_EXPRESSION", "name": "default-PATH"}
+ , { "type": "if"
+ , "cond": {"type": "var", "name": "ENV_PATH"}
+ , "then": [{"type": "var", "name": "ENV_PATH"}]
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ ]
, [ "main-pkg-config"
, { "type": "foldl"
, "range":