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