1# Copyright (c) 2013 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import("//build/config/sysroot.gni")
6
7# Defines a config specifying the result of running pkg-config for the given
8# packages. Put the package names you want to query in the "packages" variable
9# inside the template invocation.
10#
11# You can also add defines via the "defines" variable. This can be useful to
12# add this to the config to pass defines that the library expects to get by
13# users of its headers.
14#
15# Example:
16#   pkg_config("mything") {
17#     packages = [ "mything1", "mything2" ]
18#     defines = [ "ENABLE_AWESOME" ]
19#   }
20#
21# You can also use "extra args" to filter out results (see pkg-config.py):
22#   extra_args = [ "-v, "foo" ]
23# To ignore libs and ldflags (only cflags/defines will be set, which is useful
24# when doing manual dynamic linking), set:
25#   ignore_libs = true
26
27declare_args() {
28  # A pkg-config wrapper to call instead of trying to find and call the right
29  # pkg-config directly. Wrappers like this are common in cross-compilation
30  # environments.
31  # Leaving it blank defaults to searching PATH for 'pkg-config' and relying on
32  # the sysroot mechanism to find the right .pc files.
33  pkg_config = ""
34}
35
36template("pkg_config") {
37  assert(defined(invoker.packages),
38        "Variable |packages| must be defined to be a list in pkg_config.")
39  config(target_name) {
40    if (sysroot != "") {
41      # Pass the sysroot if we're using one (it requires the CPU arch also).
42      args = ["-s", sysroot, "-a", cpu_arch] + invoker.packages
43    } else if (pkg_config != "") {
44      args = ["-p", pkg_config] + invoker.packages
45    } else {
46      args = invoker.packages
47    }
48
49    if (defined(invoker.extra_args)) {
50      args += invoker.extra_args
51    }
52
53    pkgresult = exec_script("//build/config/linux/pkg-config.py",
54                            args, "value")
55    include_dirs = pkgresult[0]
56    cflags = pkgresult[1]
57
58    if (!defined(invoker.ignore_libs) || !invoker.ignore_libs) {
59      libs = pkgresult[2]
60      lib_dirs = pkgresult[3]
61      ldflags = pkgresult[4]
62    }
63
64    if (defined(invoker.defines)) {
65      defines = invoker.defines
66    }
67    if (defined(invoker.visibility)) {
68      visibility = invoker.visibility
69    }
70  }
71}
72