svgui/pyjs/build.py
changeset 1782 5b6ad7a7fd9d
parent 1780 c52d1460cea8
child 1783 3311eea28d56
equal deleted inserted replaced
1781:b112bfdde5cc 1782:5b6ad7a7fd9d
   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()