#!/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. import argparse import os import shutil import sys # The list of packages copied from the Dart SDK. PACKAGES = [ "vm", "build_integration", "kernel", "front_end", "dev_compiler", "flutter_frontend_server", "frontend_server", "dev_compiler", ] VM_PUBSPEC = r'''name: vm version: 0.0.1 environment: sdk: ">=2.2.2 <3.0.0" dependencies: dev_compiler: any front_end: any kernel: any meta: any build_integration: any ''' BUILD_INTEGRATION_PUBSPEC = r'''name: build_integration version: 0.0.1 environment: sdk: ">=2.2.2 <3.0.0" dependencies: front_end: any meta: any ''' FLUTTER_FRONTEND_SERVER_PUBSPEC = r'''name: flutter_frontend_server version: 0.0.1 environment: sdk: ">=2.2.2 <3.0.0" dependencies: args: any path: any vm: any ''' KERNEL_PUBSPEC = r'''name: kernel version: 0.0.1 environment: sdk: '>=2.2.2 <3.0.0' dependencies: args: any meta: any ''' FRONT_END_PUBSPEC = r'''name: front_end version: 0.0.1 environment: sdk: '>=2.2.2 <3.0.0' dependencies: kernel: any package_config: any meta: any ''' DEV_COMPILER_PUBSPEC = r'''name: dev_compiler version: 0.0.1 environment: sdk: '>=2.2.2 <3.0.0' dependencies: analyzer: any bazel_worker: any build_integration: any cli_util: any source_maps: any ''' FRONTEND_SERVER_PUBSPEC = r'''name: frontend_server version: 0.0.1 environment: sdk: '>=2.2.2 < 3.0.0' dependencies: build_integration: any vm: any dev_compiler: any front_end: any kernel: any args: any ''' PUBSPECS = { 'vm': VM_PUBSPEC, 'build_integration': BUILD_INTEGRATION_PUBSPEC, 'flutter_frontend_server': FLUTTER_FRONTEND_SERVER_PUBSPEC, 'kernel': KERNEL_PUBSPEC, 'front_end': FRONT_END_PUBSPEC, 'dev_compiler': DEV_COMPILER_PUBSPEC, 'frontend_server': FRONTEND_SERVER_PUBSPEC, } def main(): parser = argparse.ArgumentParser() parser.add_argument('--frontend-server', type=str, dest='frontend', action='store') parser.add_argument('--input-root', type=str, dest='input', action='store') parser.add_argument('--output-root', type=str, dest='output', action='store') args = parser.parse_args() for package in PACKAGES: base = args.input # Handle different path for frontend_server if package == 'flutter_frontend_server': base = args.frontend package_root = os.path.join(base, package) for root, directories, files in os.walk(package_root): # We only care about actual source files, not generated code or tests. for skip_dir in ['.git', 'gen', 'test']: if skip_dir in directories: directories.remove(skip_dir) # Ensure we have a dest directory if not os.path.isdir(os.path.join(args.output, package)): os.makedirs(os.path.join(args.output, package)) for filename in files: if filename.endswith('.dart') and not filename.endswith('_test.dart'): destination_file = os.path.join(args.output, package, os.path.relpath(os.path.join(root, filename), start=package_root)) parent_path = os.path.abspath(os.path.join(destination_file, os.pardir)) if not os.path.isdir(parent_path): os.makedirs(parent_path) shutil.copyfile(os.path.join(root, filename), destination_file) # Write the overriden pubspec for each package. pubspec_file = os.path.join(args.output, package, 'pubspec.yaml') with open(pubspec_file, 'w+') as output_file: output_file.write(PUBSPECS[package]) if __name__ == '__main__': sys.exit(main())