OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # | 2 # |
3 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 3 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
4 # for details. All rights reserved. Use of this source code is governed by a | 4 # for details. All rights reserved. Use of this source code is governed by a |
5 # BSD-style license that can be found in the LICENSE file. | 5 # BSD-style license that can be found in the LICENSE file. |
6 # | 6 # |
7 # A script which will be invoked from gyp to create an SDK. | 7 # A script which will be invoked from gyp to create an SDK. |
8 # | 8 # |
9 # Usage: create_sdk.py sdk_directory | 9 # Usage: create_sdk.py sdk_directory |
10 # | 10 # |
11 # The SDK will be used either from the command-line or from the editor. | 11 # The SDK will be used either from the command-line or from the editor. |
12 # Top structure is | 12 # Top structure is |
13 # | 13 # |
14 # ..dart-sdk/ | 14 # ..dart-sdk/ |
15 # ....bin/ | 15 # ....bin/ |
16 # ......dart or dart.exe (executable) | 16 # ......dart or dart.exe (executable) |
17 # ......dart.lib (import library for VM native extensions on Windows) | 17 # ......dart.lib (import library for VM native extensions on Windows) |
18 # ......frogc.dart | 18 # ......dart2js |
19 # ......pub | 19 # ......pub |
20 # ....include/ | 20 # ....include/ |
21 # ......dart_api.h | 21 # ......dart_api.h |
22 # ......dart_debugger_api.h | 22 # ......dart_debugger_api.h |
23 # ....lib/ | 23 # ....lib/ |
24 # ......builtin/ | 24 # ......builtin/ |
25 # ........builtin_runtime.dart | 25 # ........builtin_runtime.dart |
26 # ......io/ | 26 # ......io/ |
27 # ........io_runtime.dart | 27 # ........io_runtime.dart |
28 # ........runtime/ | 28 # ........runtime/ |
| 29 # ......compiler/ |
29 # ......core/ | 30 # ......core/ |
30 # ........core_{frog, runtime}.dart | 31 # ........core_{frog, runtime}.dart |
31 # ........{frog, runtime}/ | 32 # ........{frog, runtime}/ |
32 # ......coreimpl/ | 33 # ......coreimpl/ |
33 # ........coreimpl_{frog, runtime}.dart | 34 # ........coreimpl_{frog, runtime}.dart |
34 # ........{frog, runtime}/ | 35 # ........{frog, runtime}/ |
| 36 # ......dart2js/ |
35 # ......dartdoc/ | 37 # ......dartdoc/ |
36 # ......isolate/ | 38 # ......isolate/ |
37 # ........isolate_{frog, runtime}.dart | 39 # ........isolate_{frog, runtime}.dart |
38 # ........{frog, runtime}/ | 40 # ........{frog, runtime}/ |
39 # ......dom/ | 41 # ......dom/ |
40 # ........dom.dart | 42 # ........dom.dart |
41 # ......frog/ | |
42 # ......html/ | 43 # ......html/ |
43 # ........html_frog.dart | 44 # ........html_frog.dart |
44 # ........html_dartium.dart | 45 # ........html_dartium.dart |
45 # ......crypto/ | 46 # ......crypto/ |
46 # ........crypto.dart | 47 # ........crypto.dart |
47 # ........(implementation files) | 48 # ........(implementation files) |
48 # ......json/ | 49 # ......json/ |
49 # ........json_frog.dart | 50 # ........json_frog.dart |
50 #.........json.dart | 51 #.........json.dart |
51 # ........{frog}/ | 52 # ........{frog}/ |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 | 165 |
165 # TODO(dgrove) - deal with architectures that are not ia32. | 166 # TODO(dgrove) - deal with architectures that are not ia32. |
166 | 167 |
167 if exists(SDK): | 168 if exists(SDK): |
168 rmtree(SDK) | 169 rmtree(SDK) |
169 | 170 |
170 # Create and populate sdk/bin. | 171 # Create and populate sdk/bin. |
171 BIN = join(SDK_tmp, 'bin') | 172 BIN = join(SDK_tmp, 'bin') |
172 os.makedirs(BIN) | 173 os.makedirs(BIN) |
173 | 174 |
174 # Copy the Dart VM binary, frogc and Windows dart VM link library | 175 # Copy the Dart VM binary and the Windows Dart VM link library |
175 # into sdk/bin. | 176 # into sdk/bin. |
176 # | 177 # |
177 # TODO(dgrove) - deal with architectures that are not ia32. | 178 # TODO(dgrove) - deal with architectures that are not ia32. |
178 build_dir = os.path.dirname(argv[1]) | 179 build_dir = os.path.dirname(argv[1]) |
179 dart_file_extension = '' | 180 dart_file_extension = '' |
180 if utils.GuessOS() == 'win32': | 181 if utils.GuessOS() == 'win32': |
181 dart_file_extension = '.exe' | 182 dart_file_extension = '.exe' |
182 dart_import_lib_src = join(HOME, build_dir, 'dart.lib') | 183 dart_import_lib_src = join(HOME, build_dir, 'dart.lib') |
183 dart_import_lib_dest = join(BIN, 'dart.lib') | 184 dart_import_lib_dest = join(BIN, 'dart.lib') |
184 copyfile(dart_import_lib_src, dart_import_lib_dest) | 185 copyfile(dart_import_lib_src, dart_import_lib_dest) |
185 dart_src_binary = join(HOME, build_dir, 'dart' + dart_file_extension) | 186 dart_src_binary = join(HOME, build_dir, 'dart' + dart_file_extension) |
186 dart_dest_binary = join(BIN, 'dart' + dart_file_extension) | 187 dart_dest_binary = join(BIN, 'dart' + dart_file_extension) |
187 copyfile(dart_src_binary, dart_dest_binary) | 188 copyfile(dart_src_binary, dart_dest_binary) |
188 copymode(dart_src_binary, dart_dest_binary) | 189 copymode(dart_src_binary, dart_dest_binary) |
189 | 190 |
190 frogc_src_binary = join(HOME, 'frog', 'scripts', 'bootstrap', 'frogc') | |
191 CopyShellScript(frogc_src_binary, BIN) | |
192 | |
193 # Create sdk/bin/frogc.dart, and hack as needed. | |
194 frog_src_dir = join(HOME, 'frog') | |
195 | |
196 # Convert frogc.dart's imports from import('*') -> import('frog/*'). | |
197 frogc_contents = open(join(frog_src_dir, 'frogc.dart')).read() | |
198 frogc_dest = open(join(BIN, 'frogc.dart'), 'w') | |
199 frogc_dest.write( | |
200 re.sub(r"#import\('([^.])", r"#import('../lib/frog/\1", frogc_contents)) | |
201 frogc_dest.close() | |
202 | |
203 # Create pub shell script. | 191 # Create pub shell script. |
204 pub_src_script = join(HOME, 'utils', 'pub', 'sdk', 'pub') | 192 pub_src_script = join(HOME, 'utils', 'pub', 'sdk', 'pub') |
205 CopyShellScript(pub_src_script, BIN) | 193 CopyShellScript(pub_src_script, BIN) |
206 | 194 |
207 # TODO(dgrove): copy and fix up frog.dart, minfrogc.dart. | |
208 | |
209 # | 195 # |
210 # Create and populate sdk/include. | 196 # Create and populate sdk/include. |
211 # | 197 # |
212 INCLUDE = join(SDK_tmp, 'include') | 198 INCLUDE = join(SDK_tmp, 'include') |
213 os.makedirs(INCLUDE) | 199 os.makedirs(INCLUDE) |
214 copyfile(join(HOME, 'runtime', 'include', 'dart_api.h'), | 200 copyfile(join(HOME, 'runtime', 'include', 'dart_api.h'), |
215 join(INCLUDE, 'dart_api.h')) | 201 join(INCLUDE, 'dart_api.h')) |
216 copyfile(join(HOME, 'runtime', 'include', 'dart_debugger_api.h'), | 202 copyfile(join(HOME, 'runtime', 'include', 'dart_debugger_api.h'), |
217 join(INCLUDE, 'dart_debugger_api.h')) | 203 join(INCLUDE, 'dart_debugger_api.h')) |
218 | 204 |
219 # | 205 # |
220 # Create and populate sdk/lib. | 206 # Create and populate sdk/lib. |
221 # | 207 # |
222 | 208 |
223 LIB = join(SDK_tmp, 'lib') | 209 LIB = join(SDK_tmp, 'lib') |
224 os.makedirs(LIB) | 210 os.makedirs(LIB) |
225 corelib_dest_dir = join(LIB, 'core') | 211 corelib_dest_dir = join(LIB, 'core') |
226 os.makedirs(corelib_dest_dir) | 212 os.makedirs(corelib_dest_dir) |
227 os.makedirs(join(corelib_dest_dir, 'frog')) | 213 os.makedirs(join(corelib_dest_dir, 'frog')) |
228 os.makedirs(join(corelib_dest_dir, 'runtime')) | 214 os.makedirs(join(corelib_dest_dir, 'runtime')) |
229 | 215 |
230 coreimpl_dest_dir = join(LIB, 'coreimpl') | 216 coreimpl_dest_dir = join(LIB, 'coreimpl') |
231 os.makedirs(coreimpl_dest_dir) | 217 os.makedirs(coreimpl_dest_dir) |
232 os.makedirs(join(coreimpl_dest_dir, 'frog')) | 218 os.makedirs(join(coreimpl_dest_dir, 'frog')) |
233 os.makedirs(join(coreimpl_dest_dir, 'frog', 'node')) | |
234 os.makedirs(join(coreimpl_dest_dir, 'runtime')) | 219 os.makedirs(join(coreimpl_dest_dir, 'runtime')) |
235 | 220 |
236 | 221 |
237 # | 222 # |
238 # Create and populate lib/builtin. | 223 # Create and populate lib/builtin. |
239 # | 224 # |
240 builtin_dest_dir = join(LIB, 'builtin') | 225 builtin_dest_dir = join(LIB, 'builtin') |
241 os.makedirs(builtin_dest_dir) | 226 os.makedirs(builtin_dest_dir) |
242 assert len(builtin_runtime_sources) == 1 | 227 assert len(builtin_runtime_sources) == 1 |
243 assert builtin_runtime_sources[0] == 'builtin.dart' | 228 assert builtin_runtime_sources[0] == 'builtin.dart' |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 copytree(compiler_src_dir, compiler_dest_dir, ignore=ignore_patterns('.svn')) | 271 copytree(compiler_src_dir, compiler_dest_dir, ignore=ignore_patterns('.svn')) |
287 | 272 |
288 # Remap imports in lib/compiler/* . | 273 # Remap imports in lib/compiler/* . |
289 for (dirpath, subdirs, filenames) in os.walk(compiler_dest_dir): | 274 for (dirpath, subdirs, filenames) in os.walk(compiler_dest_dir): |
290 for filename in filenames: | 275 for filename in filenames: |
291 if filename.endswith('.dart'): | 276 if filename.endswith('.dart'): |
292 filename = join(dirpath, filename) | 277 filename = join(dirpath, filename) |
293 file_contents = open(filename).read() | 278 file_contents = open(filename).read() |
294 file = open(filename, 'w') | 279 file = open(filename, 'w') |
295 file_contents = re.sub(r"\.\./lib", "..", file_contents) | 280 file_contents = re.sub(r"\.\./lib", "..", file_contents) |
296 file_contents = re.sub(r"\.\./frog/", "frog/", file_contents) | |
297 file.write(file_contents) | 281 file.write(file_contents) |
298 file.close() | 282 file.close() |
299 | 283 |
300 # | 284 # |
301 # Create and populate lib/frog. | |
302 # | |
303 # TODO(dgrove): Frog is not a dart library and should not live in lib. | |
304 # | |
305 frog_dest_dir = join(LIB, 'frog') | |
306 os.makedirs(frog_dest_dir) | |
307 | |
308 for filename in os.listdir(frog_src_dir): | |
309 if filename == 'frog_options.dart': | |
310 # change config from 'dev' to 'sdk' in frog_options.dart | |
311 frog_options_contents = open(join(frog_src_dir, filename)).read() | |
312 frog_options_dest = open(join(frog_dest_dir, filename), 'w') | |
313 frog_options_dest.write(re.sub("final config = \'dev\';", | |
314 "final config = \'sdk\';", | |
315 frog_options_contents)) | |
316 frog_options_dest.close() | |
317 elif filename.endswith('.dart'): | |
318 copyfile(join(frog_src_dir, filename), join(frog_dest_dir, filename)) | |
319 | |
320 | |
321 copytree(join(frog_src_dir, 'server'), join(frog_dest_dir, 'server'), | |
322 ignore=ignore_patterns('.svn')) | |
323 | |
324 # Remap imports in frog/... . | |
325 for (dirpath, subdirs, filenames) in os.walk(frog_dest_dir): | |
326 for filename in filenames: | |
327 if filename.endswith('.dart'): | |
328 file_contents = open(join(dirpath, filename)).read() | |
329 file = open(join(dirpath, filename), 'w') | |
330 file.write(re.sub(r"\.\./lib/", "../", file_contents)) | |
331 file.close() | |
332 | |
333 # | |
334 # Create and populate lib/html. | 285 # Create and populate lib/html. |
335 # | 286 # |
336 html_src_dir = join(HOME, 'lib', 'html') | 287 html_src_dir = join(HOME, 'lib', 'html') |
337 html_dest_dir = join(LIB, 'html') | 288 html_dest_dir = join(LIB, 'html') |
338 os.makedirs(html_dest_dir) | 289 os.makedirs(html_dest_dir) |
339 | 290 |
340 copyfile(join(html_src_dir, 'frog', 'html_frog.dart'), | 291 copyfile(join(html_src_dir, 'frog', 'html_frog.dart'), |
341 join(html_dest_dir, 'html_frog.dart')) | 292 join(html_dest_dir, 'html_frog.dart')) |
342 copyfile(join(html_src_dir, 'dartium', 'html_dartium.dart'), | 293 copyfile(join(html_src_dir, 'dartium', 'html_dartium.dart'), |
343 join(html_dest_dir, 'html_dartium.dart')) | 294 join(html_dest_dir, 'html_dartium.dart')) |
(...skipping 21 matching lines...) Expand all Loading... |
365 | 316 |
366 for filename in os.listdir(src_dir): | 317 for filename in os.listdir(src_dir): |
367 if filename.endswith('.dart'): | 318 if filename.endswith('.dart'): |
368 copyfile(join(src_dir, filename), join(dest_dir, filename)) | 319 copyfile(join(src_dir, filename), join(dest_dir, filename)) |
369 | 320 |
370 # Create and populate lib/dartdoc | 321 # Create and populate lib/dartdoc |
371 dartdoc_src_dir = join(HOME, 'lib', 'dartdoc') | 322 dartdoc_src_dir = join(HOME, 'lib', 'dartdoc') |
372 dartdoc_dest_dir = join(LIB, 'dartdoc') | 323 dartdoc_dest_dir = join(LIB, 'dartdoc') |
373 copytree(dartdoc_src_dir, dartdoc_dest_dir, | 324 copytree(dartdoc_src_dir, dartdoc_dest_dir, |
374 ignore=ignore_patterns('.svn', 'docs')) | 325 ignore=ignore_patterns('.svn', 'docs')) |
375 ReplaceInFiles([ | 326 |
| 327 # Copy frog into lib/dartdoc and fixup dependencies. |
| 328 # TODO(johnniwinther): This should not be necessary long term. |
| 329 frog_src_dir = join(HOME, 'frog') |
| 330 frog_dest_dir = join(dartdoc_dest_dir, 'frog') |
| 331 os.makedirs(frog_dest_dir) |
| 332 for filename in os.listdir(frog_src_dir): |
| 333 if filename == 'frog_options.dart': |
| 334 # Change config from 'dev' to 'sdk' in frog_options.dart. |
| 335 frog_options_contents = open(join(frog_src_dir, filename)).read() |
| 336 frog_options_dest = open(join(frog_dest_dir, filename), 'w') |
| 337 frog_options_dest.write(re.sub("final config = \'dev\';", |
| 338 "final config = \'sdk\';", |
| 339 frog_options_contents)) |
| 340 frog_options_dest.close() |
| 341 elif filename.endswith('.dart'): |
| 342 dest = join(frog_dest_dir, filename) |
| 343 copyfile(join(frog_src_dir, filename), dest) |
| 344 ReplaceInFiles([dest], [("../lib/", "../../")]) |
| 345 ReplaceInFiles([ |
376 join(LIB, 'dartdoc', 'dartdoc.dart') | 346 join(LIB, 'dartdoc', 'dartdoc.dart') |
377 ], [ | 347 ], [ |
378 ("#import\('../../frog", "#import('../frog"), | 348 ("#import\('../../frog", |
| 349 "#import('frog"), |
379 ("joinPaths\(scriptDir, '../../frog/'\)", | 350 ("joinPaths\(scriptDir, '../../frog/'\)", |
380 "joinPaths(scriptDir, '../frog/')"), | 351 "joinPaths(scriptDir, 'frog/')"), |
381 ("joinPaths\(frogPath, 'lib'\)", "joinPaths(frogPath, '..')"), | 352 ("joinPaths\(frogPath, 'lib'\)", |
| 353 "joinPaths(scriptDir, '../')"), |
382 ("joinPaths\(frogPath, 'minfrog'\)", | 354 ("joinPaths\(frogPath, 'minfrog'\)", |
383 "joinPaths(scriptDir, '../../bin/frogc')") | 355 "joinPaths(scriptDir, '../../bin/dart2js')"), |
384 ]) | 356 ]) |
385 ReplaceInFiles([ | 357 ReplaceInFiles([ |
386 join(LIB, 'dartdoc', 'classify.dart'), | 358 join(LIB, 'dartdoc', 'classify.dart'), |
387 join(LIB, 'dartdoc', 'client-live-nav.dart'), | 359 join(LIB, 'dartdoc', 'client-live-nav.dart'), |
388 join(LIB, 'dartdoc', 'client-static.dart') | 360 join(LIB, 'dartdoc', 'client-static.dart') |
389 ], [ | 361 ], [ |
390 ("#import\('../../frog", "#import('../frog") | 362 ("#import\('../../frog", "#import('frog") |
391 ]) | 363 ]) |
392 | 364 |
393 # Create and populate lib/isolate | 365 # Create and populate lib/isolate |
394 copytree(join(HOME, 'lib', 'isolate'), join(LIB, 'isolate'), | 366 copytree(join(HOME, 'lib', 'isolate'), join(LIB, 'isolate'), |
395 ignore=ignore_patterns('.svn')) | 367 ignore=ignore_patterns('.svn')) |
396 | 368 |
397 isolate_runtime_dir = join(LIB, 'isolate', 'runtime') | 369 isolate_runtime_dir = join(LIB, 'isolate', 'runtime') |
398 # path seems to exist when run locally, but not on builder | 370 # path seems to exist when run locally, but not on builder |
399 if not exists(isolate_runtime_dir): | 371 if not exists(isolate_runtime_dir): |
400 os.makedirs(isolate_runtime_dir) | 372 os.makedirs(isolate_runtime_dir) |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
484 dest_file = open(join(coreimpl_dest_dir, 'coreimpl_runtime.dart'), 'w') | 456 dest_file = open(join(coreimpl_dest_dir, 'coreimpl_runtime.dart'), 'w') |
485 dest_file.write('#library("dart:coreimpl");\n') | 457 dest_file.write('#library("dart:coreimpl");\n') |
486 for filename in coreimpl_sources: | 458 for filename in coreimpl_sources: |
487 dest_file.write('#source("runtime/' + filename + '");\n') | 459 dest_file.write('#source("runtime/' + filename + '");\n') |
488 for filename in coreimpl_runtime_sources: | 460 for filename in coreimpl_runtime_sources: |
489 if filename.endswith('.dart'): | 461 if filename.endswith('.dart'): |
490 dest_file.write('#source("runtime/' + filename + '");\n') | 462 dest_file.write('#source("runtime/' + filename + '");\n') |
491 dest_file.close() | 463 dest_file.close() |
492 | 464 |
493 # Create and copy tools. | 465 # Create and copy tools. |
494 | |
495 UTIL = join(SDK_tmp, 'util') | 466 UTIL = join(SDK_tmp, 'util') |
496 os.makedirs(UTIL) | 467 os.makedirs(UTIL) |
497 | 468 |
498 # Create and populate util/pub | 469 # Create and populate util/pub. |
499 pub_src_dir = join(HOME, 'utils', 'pub') | 470 pub_src_dir = join(HOME, 'utils', 'pub') |
500 pub_dst_dir = join(UTIL, 'pub') | 471 pub_dst_dir = join(UTIL, 'pub') |
501 copytree(pub_src_dir, pub_dst_dir, | 472 copytree(pub_src_dir, pub_dst_dir, |
502 ignore=ignore_patterns('.svn', 'sdk')) | 473 ignore=ignore_patterns('.svn', 'sdk')) |
503 | 474 |
504 # Copy import maps | 475 # Copy import maps. |
505 PLATFORMS = ['any', 'vm', 'dartium', 'dart2js', 'frog' ] | 476 PLATFORMS = ['any', 'vm', 'dartium', 'dart2js' ] |
506 os.makedirs(join(LIB, 'config')) | 477 os.makedirs(join(LIB, 'config')) |
507 for platform in PLATFORMS: | 478 for platform in PLATFORMS: |
508 import_src = join(HOME, 'lib', 'config', 'import_' + platform + '.config') | 479 import_src = join(HOME, 'lib', 'config', 'import_' + platform + '.config') |
509 import_dst = join(LIB, 'config', 'import_' + platform + '.config') | 480 import_dst = join(LIB, 'config', 'import_' + platform + '.config') |
510 copyfile(import_src, import_dst); | 481 copyfile(import_src, import_dst); |
511 | 482 |
| 483 # Copy dart2js. |
512 CopyDart2Js(build_dir, SDK_tmp) | 484 CopyDart2Js(build_dir, SDK_tmp) |
513 | 485 |
514 # Write the 'revision' file | 486 # Write the 'revision' file |
515 revision = utils.GetSVNRevision() | 487 revision = utils.GetSVNRevision() |
516 if revision is not None: | 488 if revision is not None: |
517 with open(os.path.join(SDK_tmp, 'revision'), 'w') as f: | 489 with open(os.path.join(SDK_tmp, 'revision'), 'w') as f: |
518 f.write(revision + '\n') | 490 f.write(revision + '\n') |
519 f.close() | 491 f.close() |
520 | 492 |
521 move(SDK_tmp, SDK) | 493 move(SDK_tmp, SDK) |
522 utils.Touch(os.path.join(SDK, 'create.stamp')) | 494 utils.Touch(os.path.join(SDK, 'create.stamp')) |
523 | 495 |
524 if __name__ == '__main__': | 496 if __name__ == '__main__': |
525 sys.exit(Main(sys.argv)) | 497 sys.exit(Main(sys.argv)) |
OLD | NEW |