| #!/usr/bin/env python3 | 
 | # Copyright 2017 The Dart project authors. All rights reserved. | 
 | # Use of this source code is governed by a BSD-style license that can be | 
 | # found in the LICENSE file. | 
 |  | 
 | # This script creates a qemu image manifest for Fuchsia that contains the | 
 | # Dart tree. In particular in contains Dart's test suite, and test harness. | 
 |  | 
 | import argparse | 
 | import json | 
 | import os | 
 | import sys | 
 | import utils | 
 |  | 
 | SCRIPT_DIR = os.path.dirname(sys.argv[0]) | 
 | DART_ROOT = os.path.realpath(os.path.join(SCRIPT_DIR, '..')) | 
 | FUCHSIA_ROOT = os.path.realpath(os.path.join(DART_ROOT, '..', '..')) | 
 |  | 
 | FUCHSIA_TEST_MANIFEST_PREFIX = os.path.join('test', 'dart') | 
 |  | 
 | EXCLUDE_DIRS = ['.git', 'out', '.jiri'] | 
 |  | 
 | BINARY_FILES = ['dart', 'run_vm_tests', 'process_test'] | 
 |  | 
 |  | 
 | def parse_args(args): | 
 |     args = args[1:] | 
 |     parser = argparse.ArgumentParser( | 
 |         description='A script that generates Dart/Fuchsia test commands.') | 
 |  | 
 |     parser.add_argument( | 
 |         '--arch', | 
 |         '-a', | 
 |         type=str, | 
 |         help='Target architectures (comma-separated).', | 
 |         metavar='[x64]', | 
 |         default='x64') | 
 |     parser.add_argument( | 
 |         '--mode', | 
 |         '-m', | 
 |         type=str, | 
 |         help='Build variant', | 
 |         metavar='[debug,release]', | 
 |         default='debug') | 
 |     parser.add_argument( | 
 |         '--output', '-o', type=str, help='Path to output file prefix.') | 
 |     parser.add_argument( | 
 |         "-v", | 
 |         "--verbose", | 
 |         help='Verbose output.', | 
 |         default=False, | 
 |         action="store_true") | 
 |  | 
 |     return parser.parse_args(args) | 
 |  | 
 |  | 
 | def fuchsia_arch(arch): | 
 |     if arch is 'x64': | 
 |         return 'x86-64' | 
 |     return None | 
 |  | 
 |  | 
 | def main(argv): | 
 |     args = parse_args(argv) | 
 |  | 
 |     manifest_output = args.output + '.manifest' | 
 |     with open(manifest_output, 'w') as manifest: | 
 |         # Write the Dart tree. | 
 |         for root, dirs, files in os.walk(DART_ROOT): | 
 |             dirs[:] = [d for d in dirs if d not in EXCLUDE_DIRS] | 
 |             for file in files: | 
 |                 filepath = os.path.join(root, file) | 
 |                 relpath = filepath[len(DART_ROOT) + 1:] | 
 |                 fuchsiapath = os.path.join(FUCHSIA_TEST_MANIFEST_PREFIX, | 
 |                                            relpath) | 
 |                 manifest.write( | 
 |                     '%s=%s\n' % (fuchsiapath, os.path.join(root, file))) | 
 |  | 
 |         dart_conf = utils.GetBuildConf(args.mode, args.arch) | 
 |         dart_out = os.path.join(FUCHSIA_TEST_MANIFEST_PREFIX, 'out', dart_conf) | 
 |         fuchsia_conf = '%s-%s' % (args.mode, fuchsia_arch(args.arch)) | 
 |         fuchsia_out = os.path.join(FUCHSIA_ROOT, 'out', fuchsia_conf) | 
 |         for file in BINARY_FILES: | 
 |             manifest.write('%s=%s\n' % (os.path.join(dart_out, file), | 
 |                                         os.path.join(fuchsia_out, file))) | 
 |  | 
 |     return 0 | 
 |  | 
 |  | 
 | if __name__ == '__main__': | 
 |     sys.exit(main(sys.argv)) |