| #!/usr/bin/env python3 |
| # Copyright 2018 The ChromiumOS Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """Wrapper of pkg-config command line to format output for gn. |
| |
| Parses the pkg-config output and format it into json, |
| so that it can be used in GN files easily. |
| |
| Usage: |
| pkg-config_wrapper.py pkg-config pkg1 pkg2 ... |
| |
| Specifically, this script does not expect any additional flags. |
| """ |
| |
| import json |
| import shlex |
| import subprocess |
| import sys |
| |
| |
| def get_shell_output(cmd): |
| """Run |cmd| and return output as a list.""" |
| result = subprocess.run( |
| cmd, encoding="utf-8", stdout=subprocess.PIPE, check=False |
| ) |
| if result.returncode: |
| sys.exit(result.returncode) |
| return shlex.split(result.stdout) |
| |
| |
| def main(argv): |
| if len(argv) < 2: |
| sys.exit(f"Usage: {sys.argv[0]} <pkg-config> <modules>") |
| |
| cflags = get_shell_output(argv + ["--cflags"]) |
| libs = [] |
| lib_dirs = [] |
| ldflags = [] |
| for ldflag in get_shell_output(argv + ["--libs"]): |
| if ldflag.startswith("-l"): |
| # Strip -l. |
| libs.append(ldflag[2:]) |
| elif ldflag.startswith("-L"): |
| # Strip -L. |
| lib_dirs.append(ldflag[2:]) |
| else: |
| ldflags.append(ldflag) |
| |
| # Set sort_keys=True for stabilization. |
| result = { |
| "cflags": cflags, |
| "libs": libs, |
| "lib_dirs": lib_dirs, |
| "ldflags": ldflags, |
| } |
| json.dump(result, sys.stdout, sort_keys=True) |
| |
| |
| if __name__ == "__main__": |
| sys.exit(main(sys.argv[1:])) |