#!/usr/bin/env python3 # Copyright (C) 2023 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """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]} ") 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:]))