summaryrefslogtreecommitdiff
path: root/CC/EXPRESSIONS
diff options
context:
space:
mode:
Diffstat (limited to 'CC/EXPRESSIONS')
-rw-r--r--CC/EXPRESSIONS187
1 files changed, 186 insertions, 1 deletions
diff --git a/CC/EXPRESSIONS b/CC/EXPRESSIONS
index 7a8c531..b33056e 100644
--- a/CC/EXPRESSIONS
+++ b/CC/EXPRESSIONS
@@ -326,6 +326,182 @@
, "body": {"type": "CALL_EXPRESSION", "name": "pkg-provider"}
}
}
+, "pkg-prefix-lib-paths":
+ { "doc": ["Detect ldflags referring to local libs and prefix them."]
+ , "vars": ["pkg-ldflags", "pkg-libs", "flat-libs", "lib-prefix"]
+ , "imports": {"contains": ["", "contains"]}
+ , "expression":
+ { "type": "let*"
+ , "bindings":
+ [["list", {"type": "keys", "$1": {"type": "var", "name": "pkg-libs"}}]]
+ , "body":
+ { "type": "foreach"
+ , "var": "item"
+ , "range": {"type": "var", "name": "pkg-ldflags"}
+ , "body":
+ { "type": "if"
+ , "cond": {"type": "CALL_EXPRESSION", "name": "contains"}
+ , "then":
+ { "type": "join"
+ , "$1":
+ { "type": "if"
+ , "cond": {"type": "var", "name": "flat-libs"}
+ , "then":
+ [ "-l:"
+ , {"type": "basename", "$1": {"type": "var", "name": "item"}}
+ ]
+ , "else":
+ [ {"type": "var", "name": "lib-prefix"}
+ , "/"
+ , {"type": "var", "name": "item"}
+ ]
+ }
+ }
+ , "else": {"type": "var", "name": "item"}
+ }
+ }
+ }
+ }
+, "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"
+ , "pkg-prefix"
+ , "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"
+ , "pkg-prefix-flag-paths": "pkg-prefix-flag-paths"
+ }
+ , "expression":
+ { "type": "let*"
+ , "bindings":
+ [ ["lib-prefix", "${libdir}"]
+ , [ "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"
+ , "key":
+ {"type": "join", "$1": [{"type": "var", "name": "pkg-name"}, ".pc"]}
+ , "value":
+ { "type": "BLOB"
+ , "data":
+ { "type": "join"
+ , "separator": "\n"
+ , "$1":
+ [ { "type": "join"
+ , "$1":
+ [ "prefix="
+ , {"type": "var", "name": "pkg-prefix", "default": "/"}
+ ]
+ }
+ , "libdir=${prefix}/lib"
+ , "includedir=${prefix}/include"
+ , { "type": "join"
+ , "$1": ["Name: ", {"type": "var", "name": "pkg-name"}]
+ }
+ , { "type": "join"
+ , "$1":
+ [ "Version: "
+ , {"type": "var", "name": "pkg-version", "default": "unknown"}
+ ]
+ }
+ , { "type": "join"
+ , "$1":
+ [ "Description: Pkg-config for "
+ , {"type": "var", "name": "pkg-name"}
+ , ", generated by JustBuild"
+ ]
+ }
+ , "URL: unknown"
+ , { "type": "join"
+ , "separator": " "
+ , "$1":
+ { "type": "++"
+ , "$1":
+ [ ["Cflags:", "-I${includedir}"]
+ , {"type": "var", "name": "pkg-cflags"}
+ ]
+ }
+ }
+ , { "type": "join"
+ , "separator": " "
+ , "$1":
+ { "type": "++"
+ , "$1":
+ [ ["Libs:"]
+ , { "type": "if"
+ , "cond": {"type": "var", "name": "flat-libs"}
+ , "then": ["-L${libdir}"]
+ }
+ , {"type": "var", "name": "pkg-ldflags"}
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ }
+ }
, "objects":
{ "vars":
[ "COMPILER"
@@ -661,6 +837,7 @@
, "private-cflags"
, "private-ldflags"
, "stage"
+ , "pkg-name"
, "extra-provides"
, "public-fieldnames"
, "private-fieldnames"
@@ -727,7 +904,13 @@
, [ "cflags-files"
, {"type": "CALL_EXPRESSION", "name": "cflags-files-deps"}
]
- , ["package", {"type": "env", "vars": ["cflags-files", "ldflags-files"]}]
+ , [ "package"
+ , { "type": "let*"
+ , "bindings": [["name", {"type": "var", "name": "pkg-name"}]]
+ , "body":
+ {"type": "env", "vars": ["name", "cflags-files", "ldflags-files"]}
+ }
+ ]
]
, "body":
{ "type": "RESULT"
@@ -932,10 +1115,12 @@
, [ "ldflags-files"
, {"type": "CALL_EXPRESSION", "name": "ldflags-files-deps"}
]
+ , ["package", {"type": "singleton_map", "key": "to_bin", "value": true}]
]
, "body":
{ "type": "RESULT"
, "artifacts": {"type": "CALL_EXPRESSION", "name": "binary"}
+ , "provides": {"type": "env", "vars": ["package"]}
}
}
}