|
1 | 1 | import os
|
2 | 2 | import re
|
| 3 | +import sys |
3 | 4 | import glob
|
4 | 5 | import subprocess
|
5 | 6 | from collections import OrderedDict
|
@@ -336,31 +337,62 @@ def disable_module(self):
|
336 | 337 | self.disabled_modules.append(self.current_module)
|
337 | 338 |
|
338 | 339 |
|
339 |
| -def module_check_dependencies(self, module, dependencies, silent=False): |
| 340 | +def module_add_dependencies(self, module, dependencies, optional=False): |
| 341 | + """ |
| 342 | + Adds dependencies for a given module. |
| 343 | + Meant to be used in module `can_build` methods. |
| 344 | + """ |
| 345 | + if module not in self.module_dependencies: |
| 346 | + self.module_dependencies[module] = [[], []] |
| 347 | + if optional: |
| 348 | + self.module_dependencies[module][1].extend(dependencies) |
| 349 | + else: |
| 350 | + self.module_dependencies[module][0].extend(dependencies) |
| 351 | + |
| 352 | + |
| 353 | +def module_check_dependencies(self, module): |
340 | 354 | """
|
341 | 355 | Checks if module dependencies are enabled for a given module,
|
342 | 356 | and prints a warning if they aren't.
|
343 | 357 | Meant to be used in module `can_build` methods.
|
344 | 358 | Returns a boolean (True if dependencies are satisfied).
|
345 | 359 | """
|
346 | 360 | missing_deps = []
|
347 |
| - for dep in dependencies: |
| 361 | + required_deps = self.module_dependencies[module][0] if module in self.module_dependencies else [] |
| 362 | + for dep in required_deps: |
348 | 363 | opt = "module_{}_enabled".format(dep)
|
349 | 364 | if not opt in self or not self[opt]:
|
350 | 365 | missing_deps.append(dep)
|
351 | 366 |
|
352 | 367 | if missing_deps != []:
|
353 |
| - if not silent: |
354 |
| - print( |
355 |
| - "Disabling '{}' module as the following dependencies are not satisfied: {}".format( |
356 |
| - module, ", ".join(missing_deps) |
357 |
| - ) |
| 368 | + print( |
| 369 | + "Disabling '{}' module as the following dependencies are not satisfied: {}".format( |
| 370 | + module, ", ".join(missing_deps) |
358 | 371 | )
|
| 372 | + ) |
359 | 373 | return False
|
360 | 374 | else:
|
361 | 375 | return True
|
362 | 376 |
|
363 | 377 |
|
| 378 | +def sort_module_list(env): |
| 379 | + out = OrderedDict() |
| 380 | + deps = {k: v[0] + list(filter(lambda x: x in env.module_list, v[1])) for k, v in env.module_dependencies.items()} |
| 381 | + |
| 382 | + frontier = list(env.module_list.keys()) |
| 383 | + explored = [] |
| 384 | + while len(frontier): |
| 385 | + cur = frontier.pop() |
| 386 | + deps_list = deps[cur] if cur in deps else [] |
| 387 | + if len(deps_list) and any([d not in explored for d in deps_list]): |
| 388 | + # Will explore later, after its dependencies |
| 389 | + frontier.insert(0, cur) |
| 390 | + continue |
| 391 | + explored.append(cur) |
| 392 | + for k in explored: |
| 393 | + env.module_list.move_to_end(k) |
| 394 | + |
| 395 | + |
364 | 396 | def use_windows_spawn_fix(self, platform=None):
|
365 | 397 |
|
366 | 398 | if os.name != "nt":
|
|
0 commit comments