diff options
Diffstat (limited to 'CC/pkgconfig')
-rw-r--r-- | CC/pkgconfig/EXPRESSIONS | 108 | ||||
-rw-r--r-- | CC/pkgconfig/RULES | 71 | ||||
-rw-r--r-- | CC/pkgconfig/TARGETS | 2 |
3 files changed, 160 insertions, 21 deletions
diff --git a/CC/pkgconfig/EXPRESSIONS b/CC/pkgconfig/EXPRESSIONS index d6bdf08..72d66fd 100644 --- a/CC/pkgconfig/EXPRESSIONS +++ b/CC/pkgconfig/EXPRESSIONS @@ -4,6 +4,7 @@ { "default-ENV": ["./", "..", "default-ENV"] , "default-PATH": ["./", "..", "default-PATH"] , "stage": ["", "stage_singleton_field"] + , "list_provider": ["", "field_list_provider"] , "map_provider": ["", "field_map_provider"] , "sh": ["shell", "sh"] , "sh-PATH": ["shell", "PATH"] @@ -25,32 +26,86 @@ , "key": "PATH" } ] + , [ "ENV_PKG_CONFIG_PATH" + , { "type": "lookup" + , "map": {"type": "var", "name": "ENV"} + , "key": "PKG_CONFIG_PATH" + } + ] , [ "sh-PATH" , { "type": "let*" , "bindings": [["fieldname", "shell defaults"]] , "body": {"type": "CALL_EXPRESSION", "name": "sh-PATH"} } ] + , [ "pkgconfig PATH" + , { "type": "let*" + , "bindings": + [["fieldname", "pkgconfig defaults"], ["provider", "PATH"]] + , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} + } + ] + , [ "PKG_CONFIG_PATH" + , { "type": "let*" + , "bindings": + [ ["fieldname", "pkgconfig defaults"] + , ["provider", "PKG_CONFIG_PATH"] + ] + , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} + } + ] + , [ "final PATH" + , { "type": "join" + , "separator": ":" + , "$1": + { "type": "++" + , "$1": + [ {"type": "var", "name": "pkgconfig PATH"} + , {"type": "CALL_EXPRESSION", "name": "default-PATH"} + , {"type": "var", "name": "sh-PATH"} + , { "type": "if" + , "cond": {"type": "var", "name": "ENV_PATH"} + , "then": [{"type": "var", "name": "ENV_PATH"}] + } + ] + } + } + ] + , [ "final PKG_CONFIG_PATH" + , { "type": "join" + , "separator": ":" + , "$1": + { "type": "++" + , "$1": + [ {"type": "var", "name": "PKG_CONFIG_PATH"} + , { "type": "if" + , "cond": {"type": "var", "name": "ENV_PKG_CONFIG_PATH"} + , "then": [{"type": "var", "name": "ENV_PKG_CONFIG_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": "var", "name": "sh-PATH"} - , { "type": "if" - , "cond": {"type": "var", "name": "ENV_PATH"} - , "then": [{"type": "var", "name": "ENV_PATH"}] - } - ] - } + , { "type": "if" + , "cond": {"type": "var", "name": "final PATH"} + , "else": {"type": "empty_map"} + , "then": + { "type": "singleton_map" + , "key": "PATH" + , "value": {"type": "var", "name": "final PATH"} + } + } + , { "type": "if" + , "cond": {"type": "var", "name": "final PKG_CONFIG_PATH"} + , "else": {"type": "empty_map"} + , "then": + { "type": "singleton_map" + , "key": "PKG_CONFIG_PATH" + , "value": {"type": "var", "name": "final PKG_CONFIG_PATH"} } } ] @@ -77,6 +132,23 @@ , "body": {"type": "CALL_EXPRESSION", "name": "sh"} } ] + , [ "pkg-config" + , { "type": "join" + , "$1": + { "type": "let*" + , "bindings": + [["fieldname", "pkgconfig defaults"], ["provider", "pkg-config"]] + , "body": {"type": "CALL_EXPRESSION", "name": "list_provider"} + } + } + ] + , [ "pkg-config" + , { "type": "if" + , "cond": {"type": "var", "name": "pkg-config"} + , "then": {"type": "var", "name": "pkg-config"} + , "else": "pkg-config" + } + ] , [ "cflags-filename" , {"type": "join", "$1": [{"type": "var", "name": "name"}, ".cflags"]} ] @@ -94,7 +166,7 @@ , "$1": { "type": "++" , "$1": - [ ["pkg-config"] + [ [{"type": "var", "name": "pkg-config"}] , [ { "type": "join_cmd" , "$1": { "type": "++" @@ -141,7 +213,7 @@ , "$1": { "type": "++" , "$1": - [ ["pkg-config"] + [ [{"type": "var", "name": "pkg-config"}] , [ { "type": "join_cmd" , "$1": { "type": "++" diff --git a/CC/pkgconfig/RULES b/CC/pkgconfig/RULES index f51d949..f72fdf6 100644 --- a/CC/pkgconfig/RULES +++ b/CC/pkgconfig/RULES @@ -1,10 +1,74 @@ -{ "system_library": +{ "defaults": + { "doc": ["A rule to provide defaults for pkgconfig"] + , "string_fields": ["pkg-config", "PATH", "PKG_CONFIG_PATH"] + , "target_fields": ["base"] + , "field_doc": + { "pkg-config": + ["The name of the pkg-config binary to use, potentially with full path."] + , "PATH": ["Additional paths to add to \"PATH\" when calling pkg-config"] + , "PKG_CONFIG_PATH": + [ "Additional paths to add to \"PKG_CONFIG_PATH\" when calling pkg-config" + ] + , "base": ["Other targets (using the same rule) to inherit from."] + } + , "imports": + { "base-provides": ["./", "..", "defaults-base-provides"] + , "base-provides-++": ["./", "..", "defaults-base-provides-++"] + } + , "expression": + { "type": "let*" + , "bindings": + [ ["pkg-config", {"type": "FIELD", "name": "pkg-config"}] + , ["provider", "pkg-config"] + , [ "pkg-config" + , { "type": "if" + , "cond": {"type": "var", "name": "pkg-config"} + , "then": {"type": "var", "name": "pkg-config"} + , "else": {"type": "CALL_EXPRESSION", "name": "base-provides"} + } + ] + , ["PATH", {"type": "FIELD", "name": "PATH"}] + , ["provider", "PATH"] + , [ "PATH" + , { "type": "nub_left" + , "$1": + { "type": "++" + , "$1": + [ {"type": "var", "name": "PATH"} + , {"type": "CALL_EXPRESSION", "name": "base-provides-++"} + ] + } + } + ] + , ["PKG_CONFIG_PATH", {"type": "FIELD", "name": "PKG_CONFIG_PATH"}] + , ["provider", "PKG_CONFIG_PATH"] + , [ "PKG_CONFIG_PATH" + , { "type": "nub_left" + , "$1": + { "type": "++" + , "$1": + [ {"type": "var", "name": "PKG_CONFIG_PATH"} + , {"type": "CALL_EXPRESSION", "name": "base-provides-++"} + ] + } + } + ] + ] + , "body": + { "type": "RESULT" + , "provides": + {"type": "env", "vars": ["pkg-config", "PATH", "PKG_CONFIG_PATH"]} + } + } + } +, "system_library": { "doc": ["A system library via pkg-config"] , "string_fields": ["name", "args", "stage"] , "implicit": { "defaults": [["./", "..", "defaults"]] , "shell defaults": [["shell", "defaults"]] , "add_rpath": ["add_rpath"] + , "pkgconfig defaults": ["defaults"] } , "config_vars": ["PKG_CONFIG_ARGS", "ENV"] , "field_doc": @@ -15,6 +79,7 @@ ] , "stage": ["The stage of the internally created flag files."] , "defaults": ["The C/C++ toolchain to use"] + , "pkgconfig defaults": ["The pkgconfig configuration to use"] } , "config_doc": { "PKG_CONFIG_ARGS": @@ -23,7 +88,9 @@ ] , "ENV": [ "The environment for any action generated. May contain colon-separated" - , "\"PKG_CONFIG_PATH\" for looking up pkg-config files." + , "\"PKG_CONFIG_PATH\" for looking up pkg-config files; this variable," + , "as well as \"PATH\", is prefixed by the values provided in" + , "the \"defaults\"." ] } , "imports": {"pkgconfig result": "pkgconfig result"} diff --git a/CC/pkgconfig/TARGETS b/CC/pkgconfig/TARGETS index 0967ef4..705d1d7 100644 --- a/CC/pkgconfig/TARGETS +++ b/CC/pkgconfig/TARGETS @@ -1 +1 @@ -{} +{"defaults": {"type": "defaults"}} |