Index: dart/tools/compiler_scripts/generate_source_list.py |
diff --git a/dart/tools/compiler_scripts/generate_source_list.py b/dart/tools/compiler_scripts/generate_source_list.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d0dfa5bae16c47b8904a9c2ac953ccc2145e1591 |
--- /dev/null |
+++ b/dart/tools/compiler_scripts/generate_source_list.py |
@@ -0,0 +1,129 @@ |
+#!/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. |
+ |
+from __future__ import with_statement |
+import StringIO |
+import os |
+import sys |
+ |
+class GenerateError(Exception): |
+ |
+ def __init__(self, value): |
+ self.value = value |
+ |
+ def __str__(self): |
+ return repr(self.value) |
+ |
+ |
+class Generator: |
+ |
+ def __init__(self, base_directory, name, output, path, *excludes): |
+ self.base_directory = base_directory |
+ self.name = name |
+ self.output = output |
+ self.path = path |
+ self.excludes = set() |
+ for x in excludes: |
+ self.excludes.add(x) |
+ self.sources = [] |
+ self.resources = [] |
+ |
+ def _list_files(self): |
+ start_directory = os.path.join(self.base_directory, self.path) |
+ for fullpath, dirs, filenames in os.walk(start_directory): |
+ path = fullpath[len(start_directory) + 1:] |
+ remove_me = [d for d in dirs if d.startswith('.') or |
+ d == 'CVS' or |
+ (d in self.excludes)] |
+ for d in remove_me: |
+ dirs.remove(d) |
+ for filename in filenames: |
+ if (filename.endswith('.java')): |
+ self.sources.append(os.path.join(path, filename)) |
+ elif (filename.endswith('~')): |
+ pass |
+ elif (filename.endswith('.pyc')): |
+ pass |
+ else: |
+ self.resources.append(os.path.join(path, filename)) |
+ self.sources.sort() |
+ self.resources.sort() |
+ |
+ def _print_gypi_files(self, out, name, files): |
+ out.write(" '%s': [\n" % name) |
+ for filename in files: |
+ out.write(''' r'%s/%s',%s''' % (self.path, filename,'\n')) |
+ out.write(" ],\n") |
+ |
+ def _print_txt_files(self, out, files): |
+ for filename in files: |
+ out.write('%s\n' % os.path.join(self.path, filename)) |
+ |
+ def _print_ant_files(self, out, name, files): |
+ out.write(" <filelist id='%s' dir='%s'>\n" % (name, self.path)) |
+ for filename in files: |
+ out.write(" <file name='%s'/>\n" % filename) |
+ out.write(" </filelist>\n") |
+ out.write(" <pathconvert pathsep=',' property='%s' refid='%s'>\n" |
+ % (name, name)) |
+ out.write(" <map from='${basedir}/%s/' to=''/>\n" % self.path) |
+ out.write(" </pathconvert>\n") |
+ |
+ def _make_output(self, file_name): |
+ if os.path.exists(file_name): |
+ return StringIO.StringIO() |
+ else: |
+ return file(file_name, 'w') |
+ |
+ def _close(self, file_name, output): |
+ if not isinstance(output, StringIO.StringIO): |
+ output.close() |
+ return |
+ new_text = output.getvalue() |
+ output.close() |
+ with open(file_name, 'r') as f: |
+ old_text = f.read() |
+ if old_text == new_text: |
+ return |
+ sys.stderr.write('Updating %s\n' % file_name) |
+ with open(file_name, 'w') as f: |
+ f.write(new_text) |
+ |
+ def generate(self): |
+ self._list_files() |
+ |
+ file_name = self.output + '.gypi'; |
+ gypi = self._make_output(file_name) |
+ gypi.write("{\n 'variables': {\n") |
+ self._print_gypi_files(gypi, self.name + '_sources', self.sources) |
+ self._print_gypi_files(gypi, self.name + '_resources', self.resources) |
+ gypi.write(" },\n}\n") |
+ self._close(file_name, gypi) |
+ |
+ file_name = self.output + '.xml' |
+ ant = self._make_output(file_name) |
+ ant.write("<project>\n") |
+ self._print_ant_files(ant, self.name + '_sources', self.sources) |
+ self._print_ant_files(ant, self.name + '_resources', self.resources) |
+ ant.write("</project>\n") |
+ self._close(file_name, ant) |
+ |
+ file_name = self.output + '.txt'; |
+ txt = self._make_output(file_name) |
+ self._print_txt_files(txt, self.sources) |
+ self._close(file_name, txt) |
+ |
+ |
+def Main(script_name = None, name = None, output = None, path = None, |
+ *rest): |
+ if not path: |
+ raise GenerateError("usage: %s NAME OUTPUT PATH EXCLUDE_DIR_NAME ..." |
+ % script_name) |
+ base_directory = os.path.dirname(output) |
+ Generator(base_directory, name, output, path, *rest).generate() |
+ |
+ |
+if __name__ == '__main__': |
+ sys.exit(Main(*sys.argv)) |