| 379 | |
| 380 | |
| 381 | def buildmodules(lst): |
| 382 | cfuncs.buildcfuncs() |
| 383 | outmess('Building modules...\n') |
| 384 | modules, mnames, isusedby = [], [], {} |
| 385 | for item in lst: |
| 386 | if '__user__' in item['name']: |
| 387 | cb_rules.buildcallbacks(item) |
| 388 | else: |
| 389 | if 'use' in item: |
| 390 | for u in item['use'].keys(): |
| 391 | if u not in isusedby: |
| 392 | isusedby[u] = [] |
| 393 | isusedby[u].append(item['name']) |
| 394 | modules.append(item) |
| 395 | mnames.append(item['name']) |
| 396 | ret = {} |
| 397 | for module, name in zip(modules, mnames): |
| 398 | if name in isusedby: |
| 399 | using_modules = ','.join(f'"{s}"' for s in isusedby[name]) |
| 400 | outmess(f'\tSkipping module "{name}" which is used by {using_modules}.\n') |
| 401 | else: |
| 402 | um = [] |
| 403 | if 'use' in module: |
| 404 | for u in module['use'].keys(): |
| 405 | if u in isusedby and u in mnames: |
| 406 | um.append(modules[mnames.index(u)]) |
| 407 | else: |
| 408 | outmess( |
| 409 | f'\tModule "{name}" uses nonexisting "{u}" ' |
| 410 | 'which will be ignored.\n') |
| 411 | ret[name] = {} |
| 412 | dict_append(ret[name], rules.buildmodule(module, um)) |
| 413 | return ret |
| 414 | |
| 415 | |
| 416 | def dict_append(d_out, d_in): |