| Index: client/tools/copy_dart.py
|
| diff --git a/client/tools/copy_dart.py b/client/tools/copy_dart.py
|
| deleted file mode 100755
|
| index 46412448b63860e1436761fac7b89c519a4d065a..0000000000000000000000000000000000000000
|
| --- a/client/tools/copy_dart.py
|
| +++ /dev/null
|
| @@ -1,151 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# Copyright (c) 2011, 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.
|
| -"""Used to merge and copy dart source files for deployment to AppEngine"""
|
| -
|
| -import fileinput
|
| -import sys
|
| -import shutil
|
| -import os
|
| -import re
|
| -from os.path import abspath, basename, dirname, exists, isabs, join
|
| -from glob import glob
|
| -
|
| -re_directive = re.compile(
|
| - r'^#(library|import|source|native|resource)\([\'"]([^\'"]*)[\'"](.*)\);$')
|
| -
|
| -class Library(object):
|
| - def __init__(self, name, imports, sources, natives, code):
|
| - self.name = name
|
| - self.imports = imports
|
| - self.sources = sources
|
| - self.natives = natives
|
| - self.code = code
|
| -
|
| -def parseLibrary(library):
|
| - """ Parses a .dart source file that is the root of a library, and returns
|
| - information about it: the name, the imports, included sources, and any
|
| - code in the file.
|
| - """
|
| - libraryname = None
|
| - imports = []
|
| - sources = []
|
| - natives = []
|
| - inlinecode = []
|
| - if exists(library):
|
| - # TODO(sigmund): stop parsing when import/source
|
| - for line in fileinput.input(library):
|
| - match = re_directive.match(line)
|
| - if match:
|
| - directive = match.group(1)
|
| - if directive == 'library':
|
| - assert libraryname is None
|
| - libraryname = match.group(2)
|
| - elif directive == 'source':
|
| - sources.append(match.group(2))
|
| - elif directive == 'import':
|
| - imports.append((match.group(2), match.group(3)))
|
| - elif directive == 'native':
|
| - natives.append(match.group(2))
|
| - elif directive == 'resource':
|
| - # currently ignored
|
| - pass
|
| - else:
|
| - raise 'unknown directive %s' % directive
|
| - else:
|
| - inlinecode.append(line)
|
| - fileinput.close()
|
| - return Library(libraryname, imports, sources, natives, inlinecode)
|
| -
|
| -def normjoin(*args):
|
| - return os.path.normpath(os.path.join(*args))
|
| -
|
| -def mergefiles(srcs, dstfile):
|
| - for src in srcs:
|
| - with open(src, 'r') as s:
|
| - dstfile.write(s.read())
|
| -
|
| -def copyfile(src, dst):
|
| - if not exists(dirname(dst)):
|
| - os.makedirs(dirname(dst))
|
| - with open(src, 'r') as s:
|
| - with open(dst, 'w') as d:
|
| - d.write(s.read())
|
| -
|
| -def main(outdir = None, *inputs):
|
| - if not outdir or not inputs:
|
| - print "Usage: %s OUTDIR INPUTS" % args[0]
|
| - print " OUTDIR is the war directory to copy to"
|
| - print " INPUTS is a list of files or patterns used to specify the input"
|
| - print " .dart files"
|
| - print "This script should be run from the client root directory."
|
| - print "Files will be merged and copied to: OUTDIR/relative-path-of-file,"
|
| - print "except for dart files with absolute paths, which will be copied to"
|
| - print " OUTDIR/absolute-path-as-directories"
|
| - return 1
|
| -
|
| - entry_libraries = []
|
| - for i in inputs:
|
| - entry_libraries.extend(glob(i))
|
| -
|
| - for entrypoint in entry_libraries:
|
| - # Get the transitive set of dart files this entrypoint depends on, merging
|
| - # each library along the way.
|
| - worklist = [os.path.normpath(entrypoint)]
|
| - seen = set()
|
| - while len(worklist) > 0:
|
| - lib = worklist.pop()
|
| - if lib in seen:
|
| - continue
|
| -
|
| - seen.add(lib)
|
| -
|
| - if lib.startswith('dart:'):
|
| - continue
|
| -
|
| - if (dirname(dirname(lib)).endswith('dom/generated/src')
|
| - or dirname(lib).endswith('dom/src')):
|
| - continue
|
| -
|
| - if lib.endswith('json/json.dart'):
|
| - # TODO(jmesserly): Dartium interprets "json.dart" as "dart_json.dart",
|
| - # so we need that add dart_json.dart here. This is hacky.
|
| - lib = lib.replace('json.dart', 'dart_json.dart')
|
| -
|
| - library = parseLibrary(lib)
|
| -
|
| - # Ensure output directory exists
|
| - outpath = join(outdir, lib[1:] if isabs(lib) else lib)
|
| - dstpath = dirname(outpath)
|
| - if not exists(dstpath):
|
| - os.makedirs(dstpath)
|
| -
|
| -
|
| - # Create file containing all imports, and inlining all sources
|
| - with open(outpath, 'w') as f:
|
| - if library.name:
|
| - f.write("#library('%s');\n\n" % library.name)
|
| - else:
|
| - f.write("#library('%s');\n\n" % basename(lib))
|
| - for (importfile, optional_prefix) in library.imports:
|
| - f.write("#import('%s'%s);\n" % (importfile, optional_prefix))
|
| - for native in library.natives:
|
| - if isabs(native):
|
| - npath = native[1:]
|
| - else:
|
| - npath = native
|
| - f.write("#native('%s');\n" % npath)
|
| - copyfile(normjoin(dirname(lib), native),
|
| - join(dirname(outpath), npath))
|
| - f.write('%s' % (''.join(library.code)))
|
| - mergefiles([normjoin(dirname(lib), s) for s in library.sources], f)
|
| -
|
| - for (i, prefix) in library.imports:
|
| - if not i.startswith('dart:'):
|
| - worklist.append(normjoin(dirname(lib), i));
|
| -
|
| - return 0
|
| -
|
| -if __name__ == '__main__':
|
| - sys.exit(main(*sys.argv[1:]))
|
|
|