|  | #!/usr/bin/env python3.8 | 
|  | # Copyright 2016 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 os | 
|  | import stat | 
|  | import string | 
|  | import sys | 
|  |  | 
|  |  | 
|  | def main(): | 
|  | parser = argparse.ArgumentParser( | 
|  | description='Generate a script that invokes the Dart analyzer') | 
|  | parser.add_argument( | 
|  | '--out', help='Path to the invocation file to generate', required=True) | 
|  | parser.add_argument( | 
|  | '--source-file', help='Path to the list of sources', required=True) | 
|  | parser.add_argument( | 
|  | '--dot-packages', help='Path to the .packages file', required=True) | 
|  | parser.add_argument( | 
|  | '--dartanalyzer', | 
|  | help='Path to the Dart analyzer executable', | 
|  | required=True) | 
|  | parser.add_argument( | 
|  | '--dart-sdk', help='Path to the Dart SDK', required=True) | 
|  | parser.add_argument( | 
|  | '--package-name', help='Name of the analyzed package', required=True) | 
|  | parser.add_argument('--options', help='Path to analysis options') | 
|  | args = parser.parse_args() | 
|  |  | 
|  | with open(args.source_file, 'r') as source_file: | 
|  | sources = source_file.read().strip().split('\n') | 
|  |  | 
|  | analyzer_file = args.out | 
|  | analyzer_path = os.path.dirname(analyzer_file) | 
|  | if not os.path.exists(analyzer_path): | 
|  | os.makedirs(analyzer_path) | 
|  |  | 
|  | script_template = string.Template( | 
|  | '''#!/bin/sh | 
|  |  | 
|  | echo "Package : $package_name" | 
|  | $dartanalyzer \\ | 
|  | --packages=$dot_packages \\ | 
|  | --dart-sdk=$dart_sdk \\ | 
|  | --fatal-warnings \\ | 
|  | --fatal-hints \\ | 
|  | --fatal-lints \\ | 
|  | $options_argument \\ | 
|  | $sources_argument \\ | 
|  | "$$@" | 
|  | ''') | 
|  | with open(analyzer_file, 'w') as file: | 
|  | file.write( | 
|  | script_template.substitute( | 
|  | args.__dict__, | 
|  | package_name=args.package_name, | 
|  | sources_argument=' '.join(sources), | 
|  | options_argument='--options=' + | 
|  | args.options if args.options else '')) | 
|  | permissions = ( | 
|  | stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR | stat.S_IRGRP | | 
|  | stat.S_IWGRP | stat.S_IXGRP | stat.S_IROTH) | 
|  | os.chmod(analyzer_file, permissions) | 
|  |  | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | sys.exit(main()) |