summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOliver Reiche <oliver.reiche@huawei.com>2023-01-16 19:10:32 +0100
committerOliver Reiche <oliver.reiche@huawei.com>2023-01-20 16:02:11 +0100
commit4a8579a2a4ef252644df0c29893e70ad8438ae82 (patch)
treefa53e5d398c6dba59ed760fb3d802cc059f05821
parentd567b848e57686f631b0a0c081126bea578838c2 (diff)
downloadrules-cc-4a8579a2a4ef252644df0c29893e70ad8438ae82.tar.gz
Support flag-files for existing rules and expressions
-rw-r--r--CC/EXPRESSIONS129
-rw-r--r--CC/RULES28
-rw-r--r--CC/test/RULES8
3 files changed, 157 insertions, 8 deletions
diff --git a/CC/EXPRESSIONS b/CC/EXPRESSIONS
index c91c85d..5a425c7 100644
--- a/CC/EXPRESSIONS
+++ b/CC/EXPRESSIONS
@@ -440,6 +440,44 @@
}
}
}
+, "pkg-prefix-flag-paths":
+ { "doc": ["Detect flags referring to local flag files and prefix them."]
+ , "vars": ["flags", "pkg-flag-files", "flag-prefix"]
+ , "imports": {"contains": ["", "contains"]}
+ , "expression":
+ { "type": "let*"
+ , "bindings":
+ [ [ "list"
+ , {"type": "keys", "$1": {"type": "var", "name": "pkg-flag-files"}}
+ ]
+ , ["list_prefix", "@"]
+ ]
+ , "body":
+ { "type": "foreach"
+ , "var": "item"
+ , "range": {"type": "var", "name": "flags"}
+ , "body":
+ { "type": "let*"
+ , "bindings":
+ [["flag-file", {"type": "CALL_EXPRESSION", "name": "contains"}]]
+ , "body":
+ { "type": "if"
+ , "cond": {"type": "var", "name": "flag-file"}
+ , "then":
+ { "type": "join"
+ , "$1":
+ [ "@"
+ , {"type": "var", "name": "flag-prefix"}
+ , "/"
+ , {"type": "var", "name": "flag-file"}
+ ]
+ }
+ , "else": {"type": "var", "name": "item"}
+ }
+ }
+ }
+ }
+ }
, "pkg-config":
{ "vars":
[ "pkg-name"
@@ -447,10 +485,15 @@
, "pkg-version"
, "pkg-cflags"
, "pkg-ldflags"
+ , "pkg-flag-files"
, "pkg-libs"
, "flat-libs"
+ , "pc-install-dir"
]
- , "imports": {"pkg-prefix-lib-paths": "pkg-prefix-lib-paths"}
+ , "imports":
+ { "pkg-prefix-lib-paths": "pkg-prefix-lib-paths"
+ , "pkg-prefix-flag-paths": "pkg-prefix-flag-paths"
+ }
, "expression":
{ "type": "let*"
, "bindings":
@@ -458,6 +501,19 @@
, [ "pkg-ldflags"
, {"type": "CALL_EXPRESSION", "name": "pkg-prefix-lib-paths"}
]
+ , [ "flag-prefix"
+ , { "type": "join"
+ , "$1": ["${prefix}/", {"type": "var", "name": "pc-install-dir"}]
+ }
+ ]
+ , ["flags", {"type": "var", "name": "pkg-cflags"}]
+ , [ "pkg-cflags"
+ , {"type": "CALL_EXPRESSION", "name": "pkg-prefix-flag-paths"}
+ ]
+ , ["flags", {"type": "var", "name": "pkg-ldflags"}]
+ , [ "pkg-ldflags"
+ , {"type": "CALL_EXPRESSION", "name": "pkg-prefix-flag-paths"}
+ ]
]
, "body":
{ "type": "singleton_map"
@@ -533,6 +589,7 @@
, "hdrs"
, "private-hdrs"
, "compile-deps"
+ , "cflags-files"
]
, "expression":
{ "type": "let*"
@@ -586,6 +643,10 @@
, "key": {"type": "var", "name": "work src_name"}
, "value": {"type": "var", "name": "src_val"}
}
+ , { "type": "var"
+ , "name": "cflags-files"
+ , "default": {"type": "empty_map"}
+ }
]
}
]
@@ -754,6 +815,7 @@
, "stage"
, "compile-deps"
, "compile-args"
+ , "cflags-files"
, "defaults-transition"
]
, "imports":
@@ -887,6 +949,8 @@
, "link-args-deps": "link-args-deps"
, "run-libs-deps": "run-libs-deps"
, "run-libs-args-deps": "run-libs-args-deps"
+ , "cflags-files-deps": "cflags-files-deps"
+ , "ldflags-files-deps": "ldflags-files-deps"
, "lib artifact": "lib artifact"
}
, "expression":
@@ -906,6 +970,9 @@
}
}
]
+ , [ "cflags-files"
+ , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"}
+ ]
, ["link-deps", {"type": "CALL_EXPRESSION", "name": "link-deps"}]
, ["lib", {"type": "CALL_EXPRESSION", "name": "lib artifact"}]
, [ "link-args"
@@ -927,6 +994,9 @@
, "$1": {"type": "CALL_EXPRESSION", "name": "run-libs-args-deps"}
}
]
+ , [ "ldflags-files"
+ , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"}
+ ]
, ["deps-fieldnames", {"type": "var", "name": "public-fieldnames"}]
, ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}]
, [ "compile-args"
@@ -940,10 +1010,14 @@
}
}
]
+ , [ "cflags-files"
+ , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"}
+ ]
, [ "package"
- , { "type": "singleton_map"
- , "key": "name"
- , "value": {"type": "var", "name": "pkg-name"}
+ , { "type": "let*"
+ , "bindings": [["name", {"type": "var", "name": "pkg-name"}]]
+ , "body":
+ {"type": "env", "vars": ["name", "cflags-files", "ldflags-files"]}
}
]
]
@@ -997,6 +1071,8 @@
, "link-args"
, "run-libs"
, "run-libs-args"
+ , "cflags-files"
+ , "ldflags-files"
, "defaults-transition"
]
, "imports":
@@ -1088,6 +1164,14 @@
[ {"type": "var", "name": "objects"}
, {"type": "var", "name": "link-deps"}
, {"type": "var", "name": "run-libs"}
+ , { "type": "var"
+ , "name": "cflags-files"
+ , "default": {"type": "empty_map"}
+ }
+ , { "type": "var"
+ , "name": "ldflags-files"
+ , "default": {"type": "empty_map"}
+ }
]
}
, "env":
@@ -1153,6 +1237,8 @@
, "link-args-deps": "link-args-deps"
, "run-libs-deps": "run-libs-deps"
, "run-libs-args-deps": "run-libs-args-deps"
+ , "cflags-files-deps": "cflags-files-deps"
+ , "ldflags-files-deps": "ldflags-files-deps"
, "shared artifact": "shared artifact"
}
, "expression":
@@ -1172,6 +1258,9 @@
}
}
]
+ , [ "cflags-files"
+ , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"}
+ ]
, ["link-deps", {"type": "CALL_EXPRESSION", "name": "link-deps"}]
, ["link-args", {"type": "CALL_EXPRESSION", "name": "link-args-deps"}]
, ["run-libs", {"type": "CALL_EXPRESSION", "name": "run-libs-deps"}]
@@ -1187,6 +1276,9 @@
}
}
]
+ , [ "ldflags-files"
+ , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"}
+ ]
, ["lib", {"type": "CALL_EXPRESSION", "name": "shared artifact"}]
, ["deps-fieldnames", {"type": "var", "name": "public-fieldnames"}]
, ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}]
@@ -1201,6 +1293,9 @@
}
}
]
+ , [ "cflags-files"
+ , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"}
+ ]
, ["link-deps", {"type": "CALL_EXPRESSION", "name": "link-deps"}]
, ["link-args", {"type": "CALL_EXPRESSION", "name": "link-args-deps"}]
, [ "run-libs"
@@ -1223,6 +1318,9 @@
}
}
]
+ , [ "ldflags-files"
+ , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"}
+ ]
, [ "package"
, { "type": "let*"
, "bindings":
@@ -1239,7 +1337,10 @@
}
]
]
- , "body": {"type": "env", "vars": ["name", "version"]}
+ , "body":
+ { "type": "env"
+ , "vars": ["name", "version", "cflags-files", "ldflags-files"]
+ }
}
]
]
@@ -1294,6 +1395,8 @@
, "link-args"
, "run-libs"
, "run-libs-args"
+ , "cflags-files"
+ , "ldflags-files"
, "defaults-transition"
]
, "imports":
@@ -1378,6 +1481,14 @@
[ {"type": "var", "name": "objects"}
, {"type": "var", "name": "link-deps"}
, {"type": "var", "name": "run-libs"}
+ , { "type": "var"
+ , "name": "cflags-files"
+ , "default": {"type": "empty_map"}
+ }
+ , { "type": "var"
+ , "name": "ldflags-files"
+ , "default": {"type": "empty_map"}
+ }
]
}
, "cmd":
@@ -1431,6 +1542,8 @@
, "link-args-deps": "link-args-deps"
, "run-libs-deps": "run-libs-deps"
, "run-libs-args-deps": "run-libs-args-deps"
+ , "cflags-files-deps": "cflags-files-deps"
+ , "ldflags-files-deps": "ldflags-files-deps"
, "binary": "bin artifact"
}
, "expression":
@@ -1462,6 +1575,12 @@
, [ "run-libs-args"
, {"type": "CALL_EXPRESSION", "name": "run-libs-args-deps"}
]
+ , [ "cflags-files"
+ , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"}
+ ]
+ , [ "ldflags-files"
+ , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"}
+ ]
, ["package", {"type": "singleton_map", "key": "to_bin", "value": true}]
]
, "body":
diff --git a/CC/RULES b/CC/RULES
index 91fcf3d..730d45b 100644
--- a/CC/RULES
+++ b/CC/RULES
@@ -624,7 +624,8 @@
, "expression":
{ "type": "let*"
, "bindings":
- [ [ "install-stage"
+ [ ["pc-install-dir", "share/pkgconfig"]
+ , [ "install-stage"
, { "type": "disjoint_map_union"
, "msg": "install stages may not overlap"
, "$1":
@@ -770,11 +771,32 @@
]
}
]
+ , [ "pkg-flag-files"
+ , { "type": "map_union"
+ , "$1":
+ [ { "type": "lookup"
+ , "key": "cflags-files"
+ , "map": {"type": "var", "name": "package"}
+ , "default": {"type": "empty_map"}
+ }
+ , { "type": "lookup"
+ , "key": "ldflags-files"
+ , "map": {"type": "var", "name": "package"}
+ , "default": {"type": "empty_map"}
+ }
+ ]
+ }
+ ]
, ["pkg-libs", {"type": "var", "name": "libraries"}]
, ["flat-libs", {"type": "FIELD", "name": "flat-libs"}]
]
, "body":
- {"type": "CALL_EXPRESSION", "name": "pkg-config"}
+ { "type": "map_union"
+ , "$1":
+ [ {"type": "CALL_EXPRESSION", "name": "pkg-config"}
+ , {"type": "var", "name": "pkg-flag-files"}
+ ]
+ }
}
, "else": {"type": "empty_map"}
}
@@ -800,7 +822,7 @@
, "$1": {"type": "var", "name": "libraries"}
}
, { "type": "to_subdir"
- , "subdir": "share/pkgconfig"
+ , "subdir": {"type": "var", "name": "pc-install-dir"}
, "$1": {"type": "var", "name": "pkg-config"}
}
]
diff --git a/CC/test/RULES b/CC/test/RULES
index 60f33ab..b46d6b0 100644
--- a/CC/test/RULES
+++ b/CC/test/RULES
@@ -115,6 +115,8 @@
, "link-args-deps": ["./", "..", "link-args-deps"]
, "run-libs-deps": ["./", "..", "run-libs-deps"]
, "run-libs-args-deps": ["./", "..", "run-libs-args-deps"]
+ , "cflags-files-deps": ["./", "..", "cflags-files-deps"]
+ , "ldflags-files-deps": ["./", "..", "ldflags-files-deps"]
, "binary": ["./", "..", "bin artifact"]
, "host transition": ["transitions", "for host"]
}
@@ -163,6 +165,9 @@
, ["defaults-transition", {"type": "var", "name": "host-trans"}]
, ["deps-transition", {"type": "var", "name": "host-trans"}]
, ["deps-fieldnames", ["private-deps"]]
+ , [ "cflags-files"
+ , {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"}
+ ]
, ["compile-deps", {"type": "CALL_EXPRESSION", "name": "compile-deps"}]
, [ "compile-args"
, { "type": "++"
@@ -178,6 +183,9 @@
]
}
]
+ , [ "ldflags-files"
+ , {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"}
+ ]
, ["link-deps", {"type": "CALL_EXPRESSION", "name": "link-deps"}]
, [ "link-args"
, { "type": "++"