blob: c336143736737c946a046fd1102746cf8193669f [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import argparse
import json
import os
import sys
class Library(object):
def __init__(self, name, path, file):
self.name = name
self.path = path
self.file = file
def __str__(self):
return '%s[%s]' % (self.name, self.path)
def __hash__(self):
return hash((self.name, self.path))
def __eq__(self, other):
return self.name == other.name and self.path == other.path
def get_libraries(dep_files, extra_library=None):
# Aggregate library data from dependencies.
libraries = set()
if extra_library:
libraries.add(extra_library)
for dep in dep_files:
with open(dep, 'r') as dep_file:
for name, path in json.load(dep_file).iteritems():
libraries.add(Library(name, path, dep))
# Verify duplicates.
libs_by_name = {}
for lib in libraries:
libs_by_name.setdefault(lib.name, []).append(lib)
for name, libs in libs_by_name.iteritems():
if len(libs) <= 1:
continue
print('Error: library "%s" has multiple paths.' % name)
for lib in libs:
print(' - %s (%s)' % (lib.path, lib.file))
raise Exception('Could not aggregate libraries')
return dict([(l.name, l.path) for l in libraries])
def main():
parser = argparse.ArgumentParser()
name_group = parser.add_mutually_exclusive_group(required=True)
name_group.add_argument('--name',
help='Name of the current library')
name_group.add_argument('--name-file',
help='Path to a file containing the name of the current library')
parser.add_argument('--source-dir',
help='Path to the library\'s source directory',
required=True)
parser.add_argument('--output',
help='Path to the file to generate',
required=True)
parser.add_argument('--deps',
help='Dependencies of the current library',
nargs='*')
args = parser.parse_args()
if args.name:
name = args.name
elif args.name_file:
with open(args.name_file, 'r') as name_file:
name = name_file.read()
current_library = Library(name, args.source_dir, args.output)
result = get_libraries(args.deps, extra_library=current_library)
with open(args.output, 'w') as output_file:
json.dump(result, output_file, indent=2, sort_keys=True)
if __name__ == '__main__':
sys.exit(main())