#!/usr/bin/env python # # Copyright 2013 The Flutter Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """ Gather all the fuchsia artifacts to a destination directory. """ import argparse import errno import json import os import platform import shutil import subprocess import sys _ARTIFACT_PATH_TO_DST = { 'flutter_jit_runner': 'flutter_jit_runner', 'icudtl.dat': 'data/icudtl.dat', 'dart_runner': 'dart_runner', 'flutter_patched_sdk': 'flutter_patched_sdk' } def EnsureParentExists(path): dir_name, _ = os.path.split(path) if not os.path.exists(dir_name): os.makedirs(dir_name) def CopyPath(src, dst): try: EnsureParentExists(dst) shutil.copytree(src, dst) except OSError as exc: if exc.errno == errno.ENOTDIR: shutil.copy(src, dst) else: raise def CreateMetaPackage(dst_root, far_name): meta = os.path.join(dst_root, 'meta') if not os.path.isdir(meta): os.makedirs(meta) content = {} content['name'] = far_name content['version'] = '0' package = os.path.join(meta, 'package') with open(package, 'w') as out_file: json.dump(content, out_file) def GatherArtifacts(src_root, dst_root, create_meta_package=True): if not os.path.exists(dst_root): os.makedirs(dst_root) else: shutil.rmtree(dst_root) for src_rel, dst_rel in _ARTIFACT_PATH_TO_DST.iteritems(): src_full = os.path.join(src_root, src_rel) dst_full = os.path.join(dst_root, dst_rel) if not os.path.exists(src_full): print 'Unable to find artifact: ', str(src_full) sys.exit(1) CopyPath(src_full, dst_full) if create_meta_package: CreateMetaPackage(dst_root, 'flutter_runner') def main(): parser = argparse.ArgumentParser() parser.add_argument( '--artifacts-root', dest='artifacts_root', action='store', required=True) parser.add_argument( '--dest-dir', dest='dst_dir', action='store', required=True) args = parser.parse_args() assert os.path.exists(args.artifacts_root) dst_parent = os.path.abspath(os.path.join(args.dst_dir, os.pardir)) assert os.path.exists(dst_parent) GatherArtifacts(args.artifacts_root, args.dst_dir) return 0 if __name__ == '__main__': sys.exit(main())