| # Copyright 2018 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # Defines a config specifying the result of running pkg-config for the given |
| # packages. Put the package names you want to query in the "pkg_deps" variable |
| # inside the template invocation. |
| template("pkg_config") { |
| config(target_name) { |
| forward_variables_from(invoker, "*") |
| assert(defined(pkg_deps), "pkg_deps must be set") |
| |
| _pkg_config_result = exec_script("//common-mk/pkg-config_wrapper.py", |
| [ pkg_config ] + pkg_deps, |
| "json") |
| |
| if (_pkg_config_result.cflags != []) { |
| if (!defined(cflags)) { |
| cflags = [] |
| } |
| cflags += _pkg_config_result.cflags |
| } |
| if (_pkg_config_result.libs != []) { |
| if (!defined(libs)) { |
| libs = [] |
| } |
| libs += _pkg_config_result.libs |
| } |
| if (_pkg_config_result.lib_dirs != []) { |
| if (!defined(lib_dirs)) { |
| lib_dirs = [] |
| } |
| lib_dirs += _pkg_config_result.lib_dirs |
| } |
| if (_pkg_config_result.ldflags != []) { |
| if (!defined(ldflags)) { |
| ldflags = [] |
| } |
| ldflags += _pkg_config_result.ldflags |
| } |
| } |
| } |
| |
| # Generates a .pc file with given parameters. |
| # All parameters are optional. If missing, empty value is used unless there is |
| # explicit documentation. |
| # |
| # Parameters: |
| # deps: Dependency of the generated action. |
| # name: The name of library set in .pc file. If missing |
| # |target_name| is used. |
| # output_name: The stem (file name excluding the .pc extension) |
| # of the generated .pc file. If missing, |name| is used. |
| # descritption: Description to be embedded. |
| # version: Version to be embedded. |
| # requires: Package name list to be embedded into "Requires:". |
| # requires_private: Similar to requires, but into "Requires.private:". |
| # libs: Flags passed to ld to be embedded into "Libs:" E.g. [ "-lpthread" ]. |
| # libs_private: Similar to libs, butinto "Libs.private:". |
| # cflags: Compile flag list to be embedded into "Cflags:". |
| template("generate_pkg_config") { |
| action(target_name) { |
| forward_variables_from(invoker, |
| [ |
| "deps", |
| "testonly", |
| "name", |
| "output_name", |
| "description", |
| "version", |
| "requires", |
| "requires_private", |
| "libs", |
| "libs_private", |
| "cflags", |
| "defines", |
| ]) |
| if (!defined(name)) { |
| name = target_name |
| } |
| if (!defined(output_name)) { |
| output_name = name |
| } |
| outputs = [ "${target_out_dir}/${output_name}.pc" ] |
| |
| script = "//common-mk/generate-pc.py" |
| args = [ "--output" ] + outputs + [ "--name=" + name ] |
| if (defined(description)) { |
| args += [ "--description=" + description ] |
| } |
| if (defined(version)) { |
| args += [ "--version=" + version ] |
| } |
| if (defined(requires)) { |
| foreach(pkg, requires) { |
| args += [ "--requires=" + pkg ] |
| } |
| } |
| if (defined(requires_private)) { |
| foreach(pkg, requires_private) { |
| args += [ "--requires-private=" + pkg ] |
| } |
| } |
| if (defined(libs)) { |
| foreach(lib, libs) { |
| args += [ "--libs=" + lib ] |
| } |
| } |
| if (defined(libs_private)) { |
| foreach(lib, libs_private) { |
| args += [ "--libs-private=" + lib ] |
| } |
| } |
| if (defined(cflags)) { |
| foreach(cflag, cflags) { |
| args += [ "--cflags=" + cflag ] |
| } |
| } |
| if (defined(defines)) { |
| foreach(define, defines) { |
| args += [ "--cflags=-D" + define ] |
| } |
| } |
| } |
| } |