81def main(outdir=None, *inputs):
82 if not outdir or not inputs:
83 print(
"""Usage: %s OUTDIR INPUTS
84 OUTDIR is the war directory to copy to
85 INPUTS is a list of files or patterns used to specify the input
86 .dart files
87This script should be run from the client root directory.
88Files will be merged and copied to: OUTDIR/relative-path-of-file,
89except for dart files with absolute paths, which will be copied to
90 OUTDIR/absolute-path-as-directories""" % sys.argv[0])
91 return 1
92
93 entry_libraries = []
94 for i in inputs:
95 entry_libraries.extend(glob(i))
96
97 for entrypoint in entry_libraries:
98
99
100 worklist = [os.path.normpath(entrypoint)]
101 seen = set()
102 while len(worklist) > 0:
103 lib = worklist.pop()
104 if lib in seen:
105 continue
106
107 seen.add(lib)
108
109 if (dirname(dirname(lib)).endswith('dom/generated/src') or
110 dirname(lib).endswith('dom/src')):
111 continue
112
113 library = parseLibrary(lib)
114
115
116 outpath = join(outdir, lib[1:] if isabs(lib) else lib)
117 dstpath = dirname(outpath)
118 if not exists(dstpath):
119 os.makedirs(dstpath)
120
121
122 with open(outpath, 'w') as f:
123 prefix = os.environ.get('DART_HTML_PREFIX')
124 if prefix:
125 f.write(prefix + '\n')
126 if library.name:
127 if library.comment:
128 f.write('%s' % (''.join(library.comment)))
129 f.write("library %s;\n\n" % library.name)
130 else:
131 f.write("library %s;\n\n" % basename(lib))
132 for importfile in library.imports:
133 f.write("import %s;\n" % importfile)
134 f.write('%s' % (''.join(library.code)))
135 mergefiles([normjoin(dirname(lib), s) for s in library.sources],
136 f)
137
138 for suffix in library.imports:
139 m = re.match(r'[\'"]([^\'"]+)[\'"](\s+as\s+\w+)?.*$', suffix)
140 uri = m.group(1)
141 if not uri.startswith('dart:'):
142 worklist.append(normjoin(dirname(lib), uri))
143
144 return 0
145
146