#!/usr/bin/env python # Copyright (c) 2021 Project CHIP Authors # # 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. """ Writes a JSON file containing build configuration information. See build/chip/java/tests/expected_output/* for example build configuration files. """ import json import optparse import os import sys def LoadBuildConfigs(paths): build_configs = [] for path in paths: with open(path, 'r') as file: build_configs.append(json.load(file)) return build_configs def ParseGnList(value): if not value: return [] if value.startswith('[') and value.endswith(']'): gn_list = value.strip("[]").replace( "\"", "").replace(" ", "").split(",") if not gn_list[0]: return [] else: return gn_list def GetAllDependentJars(deps_configs_data): configs_to_process = deps_configs_data deps_jars = set() while configs_to_process: deps_config = configs_to_process.pop() child_configs = LoadBuildConfigs( deps_config['deps_info']['deps_configs']) deps_jars.add(deps_config['deps_info']['jar_path']) configs_to_process += child_configs return deps_jars def main(argv): parser = optparse.OptionParser() parser.add_option('--build-config', help='Path to build_config output') parser.add_option('--deps-configs', help='GN-list of dependent build_config files') parser.add_option('--jar-path', help='Path to the .jar') options, args = parser.parse_args(argv) deps_configs_list = ParseGnList(options.deps_configs) deps_configs_data = LoadBuildConfigs(deps_configs_list) deps_jars_set = GetAllDependentJars(deps_configs_data) config = { "deps_info": { "name": os.path.basename(options.build_config), "jar_path": options.jar_path, # List of configs depended on by this config. Not recursive. "deps_configs": deps_configs_list, # List of all jars needed by all dependencies of this config (recursive). "deps_jars": list(deps_jars_set) } } with open(options.build_config, 'w') as file: json.dump(config, file) if __name__ == '__main__': sys.exit(main(sys.argv[1:]))