| 1479 | ############ Auxiliary functions for sorting needs ################### |
| 1480 | |
| 1481 | def append_needs(need, flag=1): |
| 1482 | # This function modifies the contents of the global `outneeds` dict. |
| 1483 | if isinstance(need, list): |
| 1484 | for n in need: |
| 1485 | append_needs(n, flag) |
| 1486 | elif isinstance(need, str): |
| 1487 | if not need: |
| 1488 | return |
| 1489 | if need in includes0: |
| 1490 | n = 'includes0' |
| 1491 | elif need in includes: |
| 1492 | n = 'includes' |
| 1493 | elif need in typedefs: |
| 1494 | n = 'typedefs' |
| 1495 | elif need in typedefs_generated: |
| 1496 | n = 'typedefs_generated' |
| 1497 | elif need in cppmacros: |
| 1498 | n = 'cppmacros' |
| 1499 | elif need in cfuncs: |
| 1500 | n = 'cfuncs' |
| 1501 | elif need in callbacks: |
| 1502 | n = 'callbacks' |
| 1503 | elif need in f90modhooks: |
| 1504 | n = 'f90modhooks' |
| 1505 | elif need in commonhooks: |
| 1506 | n = 'commonhooks' |
| 1507 | else: |
| 1508 | errmess(f'append_needs: unknown need {repr(need)}\n') |
| 1509 | return |
| 1510 | if need in outneeds[n]: |
| 1511 | return |
| 1512 | if flag: |
| 1513 | tmp = {} |
| 1514 | if need in needs: |
| 1515 | for nn in needs[need]: |
| 1516 | t = append_needs(nn, 0) |
| 1517 | if isinstance(t, dict): |
| 1518 | for nnn in t.keys(): |
| 1519 | if nnn in tmp: |
| 1520 | tmp[nnn] = tmp[nnn] + t[nnn] |
| 1521 | else: |
| 1522 | tmp[nnn] = t[nnn] |
| 1523 | for nn in tmp.keys(): |
| 1524 | for nnn in tmp[nn]: |
| 1525 | if nnn not in outneeds[nn]: |
| 1526 | outneeds[nn] = [nnn] + outneeds[nn] |
| 1527 | outneeds[n].append(need) |
| 1528 | else: |
| 1529 | tmp = {} |
| 1530 | if need in needs: |
| 1531 | for nn in needs[need]: |
| 1532 | t = append_needs(nn, flag) |
| 1533 | if isinstance(t, dict): |
| 1534 | for nnn in t.keys(): |
| 1535 | if nnn in tmp: |
| 1536 | tmp[nnn] = t[nnn] + tmp[nnn] |
| 1537 | else: |
| 1538 | tmp[nnn] = t[nnn] |