blob: 8dedb190f3c4bdd5307b30455d263d067d35bfd7 [file] [log] [blame]
#!/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:]))