summaryrefslogtreecommitdiff
path: root/CC/pkgconfig
diff options
context:
space:
mode:
Diffstat (limited to 'CC/pkgconfig')
-rw-r--r--CC/pkgconfig/EXPRESSIONS108
-rw-r--r--CC/pkgconfig/RULES71
-rw-r--r--CC/pkgconfig/TARGETS2
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"}}