| #!/usr/bin/env python |
| # |
| # Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| # for details. All rights reserved. Use of this source code is governed by a |
| # BSD-style license that can be found in the LICENSE file. |
| # |
| # Create the compiler_unsupported package. This will copy the |
| # sdk/lib/_internal/compiler directory and the libraries.dart file into lib/. |
| # |
| # Usage: create_library.py |
| |
| import os |
| import re |
| import shutil |
| import sys |
| |
| from os.path import dirname, join |
| |
| |
| def ReplaceInFiles(paths, subs): |
| '''Reads a series of files, applies a series of substitutions to each, and |
| saves them back out. subs should be a list of (pattern, replace) tuples.''' |
| for path in paths: |
| contents = open(path).read() |
| for pattern, replace in subs: |
| contents = re.sub(pattern, replace, contents) |
| dest = open(path, 'w') |
| dest.write(contents) |
| dest.close() |
| |
| |
| def RemoveFile(f): |
| if os.path.exists(f): |
| os.remove(f) |
| |
| |
| def Main(argv): |
| # pkg/compiler_unsupported |
| HOME = dirname(dirname(os.path.realpath(__file__))) |
| |
| # pkg/compiler_unsupported/lib |
| TARGET = join(HOME, 'lib') |
| |
| # sdk/lib/_internal |
| SOURCE = join(dirname(dirname(HOME)), 'sdk', 'lib', '_internal') |
| |
| # pkg |
| PKG_SOURCE = join(dirname(dirname(HOME)), 'pkg') |
| |
| # clean compiler_unsupported/lib |
| if not os.path.exists(TARGET): |
| os.mkdir(TARGET) |
| shutil.rmtree(join(TARGET, 'src'), True) |
| RemoveFile(join(TARGET, 'compiler.dart')) |
| RemoveFile(join(TARGET, 'libraries.dart')) |
| |
| # copy dart2js code |
| shutil.copy(join(PKG_SOURCE, 'compiler', 'lib', 'compiler.dart'), TARGET) |
| shutil.copy(join(SOURCE, 'libraries.dart'), TARGET) |
| shutil.copytree( |
| join(PKG_SOURCE, 'compiler', 'lib', 'src'), |
| join(TARGET, 'src')) |
| |
| # patch up the libraries.dart references |
| replace = [(r'\.\./\.\./libraries\.dart', r'\.\./libraries\.dart')] |
| |
| for root, dirs, files in os.walk(join(TARGET, 'src')): |
| for name in files: |
| if name.endswith('.dart'): |
| ReplaceInFiles([join(root, name)], replace) |
| |
| |
| if __name__ == '__main__': |
| sys.exit(Main(sys.argv)) |