#!/usr/bin/env python # Copyright 2013 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Extracts information from a library.dsc file.""" import argparse import os import sys import parse_dsc def Error(msg): print >> sys.stderr, 'dsc_info: %s' % msg sys.exit(1) def FindTarget(tree, target_name): targets = tree['TARGETS'] for target in targets: if target['NAME'] == target_name: return target Error('Target %s not found' % target_name) def GetSources(lib_dir, tree, target_name): result = [] target = FindTarget(tree, target_name) for filename in target['SOURCES']: result.append('/'.join([lib_dir, filename])) return result def DoMain(args): """Entry point for gyp's pymod_do_main command.""" parser = argparse.ArgumentParser(description=__doc__) # Give a clearer error message when this is used as a module. parser.prog = 'dsc_info' parser.add_argument('-s', '--sources', help='Print a list of source files for the target', action='store_true', default=False) parser.add_argument('-l', '--libdir', help='Directory where the library.dsc file is located', metavar='DIR') parser.add_argument('target') options = parser.parse_args(args) libdir = options.libdir or '' tree = parse_dsc.LoadProject(os.path.join(libdir, 'library.dsc')) if options.sources: return '\n'.join(GetSources(libdir, tree, options.target)) parser.error('No action specified') def main(args): print DoMain(args) if __name__ == '__main__': try: sys.exit(main(sys.argv[1:])) except KeyboardInterrupt: Error('interrupted')