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 5 import("//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 27 declare_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 # CrOS systemroots place pkgconfig files at <systemroot>/usr/share/pkgconfig 36 # and one of <systemroot>/usr/lib/pkgconfig or <systemroot>/usr/lib64/pkgconfig 37 # depending on whether the systemroot is for a 32 or 64 bit architecture. 38 # 39 # When build under GYP, CrOS board builds specify the 'system_libdir' variable 40 # as part of the GYP_DEFINES provided by the CrOS emerge build or simple 41 # chrome build scheme. This variable permits controlling this for GN builds 42 # in similar fashion by setting the `system_libdir` variable in the build's 43 # args.gn file to 'lib' or 'lib64' as appropriate for the target architecture. 44 system_libdir = "lib" 45 } 46 47 pkg_config_script = "//build/config/linux/pkg-config.py" 48 49 # Define the args we pass to the pkg-config script for other build files that 50 # need to invoke it manually. 51 if (sysroot != "") { 52 # Pass the sysroot if we're using one (it requires the CPU arch also). 53 pkg_config_args = [ 54 "-s", 55 rebase_path(sysroot), 56 "-a", 57 current_cpu, 58 ] 59 } else if (pkg_config != "") { 60 pkg_config_args = [ 61 "-p", 62 pkg_config, 63 ] 64 } else { 65 pkg_config_args = [] 66 } 67 68 # Only use the custom libdir when building with the target sysroot. 69 if (target_sysroot != "" && sysroot == target_sysroot) { 70 pkg_config_args += [ 71 "--system_libdir", 72 system_libdir, 73 ] 74 } 75 76 template("pkg_config") { 77 assert(defined(invoker.packages), 78 "Variable |packages| must be defined to be a list in pkg_config.") 79 config(target_name) { 80 args = pkg_config_args + invoker.packages 81 if (defined(invoker.extra_args)) { 82 args += invoker.extra_args 83 } 84 85 pkgresult = exec_script(pkg_config_script, args, "value") 86 include_dirs = pkgresult[0] 87 cflags = pkgresult[1] 88 89 if (!defined(invoker.ignore_libs) || !invoker.ignore_libs) { 90 libs = pkgresult[2] 91 lib_dirs = pkgresult[3] 92 ldflags = pkgresult[4] 93 } 94 95 forward_variables_from(invoker, 96 [ 97 "defines", 98 "visibility", 99 ]) 100 } 101 } 102