summaryrefslogtreecommitdiff
path: root/rules/CC/pkgconfig/RULES
blob: 363136f6c981cd0c0ca2e8a3714da7d1ffaa1dae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
{ "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-++"]
    , "nub_left": ["", "nub_left"]
    }
  , "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": "++"
          , "$1":
            [ {"type": "var", "name": "PATH"}
            , {"type": "CALL_EXPRESSION", "name": "base-provides-++"}
            ]
          }
        ]
      , [ "PATH"
        , { "type": "let*"
          , "bindings": [["list", {"type": "var", "name": "PATH"}]]
          , "body": {"type": "CALL_EXPRESSION", "name": "nub_left"}
          }
        ]
      , ["PKG_CONFIG_PATH", {"type": "FIELD", "name": "PKG_CONFIG_PATH"}]
      , ["provider", "PKG_CONFIG_PATH"]
      , [ "PKG_CONFIG_PATH"
        , { "type": "++"
          , "$1":
            [ {"type": "var", "name": "PKG_CONFIG_PATH"}
            , {"type": "CALL_EXPRESSION", "name": "base-provides-++"}
            ]
          }
        ]
      , [ "PKG_CONFIG_PATH"
        , { "type": "let*"
          , "bindings": [["list", {"type": "var", "name": "PKG_CONFIG_PATH"}]]
          , "body": {"type": "CALL_EXPRESSION", "name": "nub_left"}
          }
        ]
      ]
    , "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":
    { "name": ["The pkg-config name of the library."]
    , "args":
      [ "Additional pkg-config arguments (e.g., \"--define-prefix\" or"
      , "\"--static\"), appended to the config variable \"PKG_CONFIG_ARGS\"."
      ]
    , "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":
      [ "Additional pkg-config arguments (e.g., \"--define-prefix\" or"
      , "\"--static\")."
      ]
    , "ENV":
      [ "The environment for any action generated. May contain colon-separated"
      , "\"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"}
  , "expression":
    { "type": "let*"
    , "bindings":
      [ [ "name"
        , { "type": "assert_non_empty"
          , "msg": "system_library requires non-empty name"
          , "$1": {"type": "join", "$1": {"type": "FIELD", "name": "name"}}
          }
        ]
      , [ "args"
        , { "type": "++"
          , "$1":
            [ {"type": "var", "name": "PKG_CONFIG_ARGS", "default": []}
            , {"type": "FIELD", "name": "args"}
            ]
          }
        ]
      , [ "stage"
        , { "type": "join"
          , "separator": "/"
          , "$1": {"type": "FIELD", "name": "stage"}
          }
        ]
      ]
    , "body": {"type": "CALL_EXPRESSION", "name": "pkgconfig result"}
    }
  }
}