332 for mname, name in app_translator.overrides.items(): |
332 for mname, name in app_translator.overrides.items(): |
333 pd = overrides.setdefault(mname, {}) |
333 pd = overrides.setdefault(mname, {}) |
334 pd[platform] = name |
334 pd[platform] = name |
335 |
335 |
336 print appcode |
336 print appcode |
337 #mod_code[platform][app_name] = appcode |
337 # mod_code[platform][app_name] = appcode |
338 |
338 |
339 # platform.Module.cache.js |
339 # platform.Module.cache.js |
340 |
340 |
341 modules_done = ['pyjslib', 'sys', '_pyjs.js'] |
341 modules_done = ['pyjslib', 'sys', '_pyjs.js'] |
342 #modules_to_do = [app_name] + app_translator.library_modules |
342 # modules_to_do = [app_name] + app_translator.library_modules |
343 modules_to_do = [app_name] + app_translator.library_modules |
343 modules_to_do = [app_name] + app_translator.library_modules |
344 |
344 |
345 dependencies = {} |
345 dependencies = {} |
346 |
346 |
347 deps = map(pyjs.strip_py, modules_to_do) |
347 deps = map(pyjs.strip_py, modules_to_do) |
348 for d in deps: |
348 for d in deps: |
349 sublist = add_subdeps(dependencies, d) |
349 sublist = add_subdeps(dependencies, d) |
350 modules_to_do += sublist |
350 modules_to_do += sublist |
351 deps = uniquify(deps) |
351 deps = uniquify(deps) |
352 #dependencies[app_name] = deps |
352 # dependencies[app_name] = deps |
353 |
353 |
354 modules[platform] = modules_done + modules_to_do |
354 modules[platform] = modules_done + modules_to_do |
355 |
355 |
356 while modules_to_do: |
356 while modules_to_do: |
357 |
357 |
358 #print "modules to do", modules_to_do |
358 # print "modules to do", modules_to_do |
359 |
359 |
360 mn = modules_to_do.pop() |
360 mn = modules_to_do.pop() |
361 mod_name = pyjs.strip_py(mn) |
361 mod_name = pyjs.strip_py(mn) |
362 |
362 |
363 if mod_name in modules_done: |
363 if mod_name in modules_done: |
387 if len(sd) > 1: |
387 if len(sd) > 1: |
388 deps += sd[:-1] |
388 deps += sd[:-1] |
389 while mod_name in deps: |
389 while mod_name in deps: |
390 deps.remove(mod_name) |
390 deps.remove(mod_name) |
391 |
391 |
392 #print |
392 # print |
393 #print |
393 # print |
394 #print "modname preadd:", mod_name, deps |
394 # print "modname preadd:", mod_name, deps |
395 #print |
395 # print |
396 #print |
396 # print |
397 for d in deps: |
397 for d in deps: |
398 sublist = add_subdeps(dependencies, d) |
398 sublist = add_subdeps(dependencies, d) |
399 modules_to_do += sublist |
399 modules_to_do += sublist |
400 modules_to_do += add_subdeps(dependencies, mod_name) |
400 modules_to_do += add_subdeps(dependencies, mod_name) |
401 #print "modname:", mod_name, deps |
401 # print "modname:", mod_name, deps |
402 deps = uniquify(deps) |
402 deps = uniquify(deps) |
403 #print "modname:", mod_name, deps |
403 # print "modname:", mod_name, deps |
404 dependencies[mod_name] = deps |
404 dependencies[mod_name] = deps |
405 |
405 |
406 # work out the dependency ordering of the modules |
406 # work out the dependency ordering of the modules |
407 |
407 |
408 mod_levels[platform] = make_deps(None, dependencies, modules_done) |
408 mod_levels[platform] = make_deps(None, dependencies, modules_done) |
412 for platform in app_platforms: |
412 for platform in app_platforms: |
413 |
413 |
414 early_app_libs_ = early_app_libs[platform] |
414 early_app_libs_ = early_app_libs[platform] |
415 app_libs_ = app_libs[platform] |
415 app_libs_ = app_libs[platform] |
416 app_code_ = app_code[platform] |
416 app_code_ = app_code[platform] |
417 #modules_ = filter_mods(app_name, modules[platform]) |
417 # modules_ = filter_mods(app_name, modules[platform]) |
418 mods = flattenlist(mod_levels[platform]) |
418 mods = flattenlist(mod_levels[platform]) |
419 mods.reverse() |
419 mods.reverse() |
420 modules_ = filter_mods(None, mods) |
420 modules_ = filter_mods(None, mods) |
421 |
421 |
422 for mod_name in modules_: |
422 for mod_name in modules_: |
486 # convert the overrides |
486 # convert the overrides |
487 |
487 |
488 overnames = map(lambda x: "'%s': '%s'" % x, pover[platform].items()) |
488 overnames = map(lambda x: "'%s': '%s'" % x, pover[platform].items()) |
489 overnames = "new pyjslib.Dict({\n\t\t%s\n\t})" % ',\n\t\t'.join(overnames) |
489 overnames = "new pyjslib.Dict({\n\t\t%s\n\t})" % ',\n\t\t'.join(overnames) |
490 |
490 |
491 #print "platform names", platform, overnames |
491 # print "platform names", platform, overnames |
492 #print pover |
492 # print pover |
493 |
493 |
494 # now write app.allcache including dependency-ordered list of |
494 # now write app.allcache including dependency-ordered list of |
495 # library modules |
495 # library modules |
496 |
496 |
497 file_contents = all_cache_html_template % dict( |
497 file_contents = all_cache_html_template % dict( |
547 |
547 |
548 def add_subdeps(deps, mod_name): |
548 def add_subdeps(deps, mod_name): |
549 sd = subdeps(mod_name) |
549 sd = subdeps(mod_name) |
550 if len(sd) == 1: |
550 if len(sd) == 1: |
551 return [] |
551 return [] |
552 #print "subdeps", mod_name, sd |
552 # print "subdeps", mod_name, sd |
553 #print "deps", deps |
553 # print "deps", deps |
554 res = [] |
554 res = [] |
555 for i in range(0, len(sd)-1): |
555 for i in range(0, len(sd)-1): |
556 parent = sd[i] |
556 parent = sd[i] |
557 child = sd[i+1] |
557 child = sd[i+1] |
558 k = deps.get(child, []) |
558 k = deps.get(child, []) |
559 k.append(parent) |
559 k.append(parent) |
560 deps[child] = k |
560 deps[child] = k |
561 if parent not in res: |
561 if parent not in res: |
562 res.append(parent) |
562 res.append(parent) |
563 #print deps |
563 # print deps |
564 return res |
564 return res |
565 |
565 |
566 |
566 |
567 def uniquify(md): |
567 def uniquify(md): |
568 """ |
568 """ |
626 deps = filter_deps(app_name, deps) |
626 deps = filter_deps(app_name, deps) |
627 |
627 |
628 if not mod_list: |
628 if not mod_list: |
629 return [] |
629 return [] |
630 |
630 |
631 #print mod_list |
631 # print mod_list |
632 #print deps |
632 # print deps |
633 |
633 |
634 ordered_deps = [] |
634 ordered_deps = [] |
635 last_len = -1 |
635 last_len = -1 |
636 while deps: |
636 while deps: |
637 l_deps = len(deps) |
637 l_deps = len(deps) |
638 #print l_deps |
638 # print l_deps |
639 if l_deps == last_len: |
639 if l_deps == last_len: |
640 for m, dl in deps.items(): |
640 for m, dl in deps.items(): |
641 for d in dl: |
641 for d in dl: |
642 if m in deps.get(d, []): |
642 if m in deps.get(d, []): |
643 raise Exception('Circular Imports found: \n%s %s -> %s %s' |
643 raise Exception('Circular Imports found: \n%s %s -> %s %s' |
644 % (m, dl, d, deps[d])) |
644 % (m, dl, d, deps[d])) |
645 #raise Exception('Could not calculate dependencies: \n%s' % deps) |
645 # raise Exception('Could not calculate dependencies: \n%s' % deps) |
646 break |
646 break |
647 last_len = l_deps |
647 last_len = l_deps |
648 #print "modlist", mod_list |
648 # print "modlist", mod_list |
649 nodeps = nodeps_list(mod_list, deps) |
649 nodeps = nodeps_list(mod_list, deps) |
650 #print "nodeps", nodeps |
650 # print "nodeps", nodeps |
651 mod_list = filter(lambda x: x not in nodeps, mod_list) |
651 mod_list = filter(lambda x: x not in nodeps, mod_list) |
652 newdeps = {} |
652 newdeps = {} |
653 for k in deps.keys(): |
653 for k in deps.keys(): |
654 depslist = deps[k] |
654 depslist = deps[k] |
655 depslist = filter(lambda x: x not in nodeps, depslist) |
655 depslist = filter(lambda x: x not in nodeps, depslist) |
656 if depslist: |
656 if depslist: |
657 newdeps[k] = depslist |
657 newdeps[k] = depslist |
658 #print "newdeps", newdeps |
658 # print "newdeps", newdeps |
659 deps = newdeps |
659 deps = newdeps |
660 ordered_deps.append(nodeps) |
660 ordered_deps.append(nodeps) |
661 #time.sleep(0) |
661 # time.sleep(0) |
662 |
662 |
663 if mod_list: |
663 if mod_list: |
664 ordered_deps.append(mod_list) # last dependencies - usually the app(s) |
664 ordered_deps.append(mod_list) # last dependencies - usually the app(s) |
665 |
665 |
666 ordered_deps.reverse() |
666 ordered_deps.reverse() |