Skip to content

Commit 04fc19c

Browse files
committed
Add --emit-makefile option to list-dependent-make-targets
1 parent b10a18f commit 04fc19c

1 file changed

Lines changed: 34 additions & 7 deletions

File tree

src/pymakeutils/list_dependent_make_targets.py

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import argparse
66
from pymakeutils.common import list_dependents
7+
import sys
78

89

910
def parse_args():
@@ -18,6 +19,13 @@ def parse_args():
1819
'--recursive',
1920
action='store_true',
2021
help="Recursively include transitive dependents")
22+
parser.add_argument(
23+
'-M',
24+
'--emit-makefrag',
25+
action='store_true',
26+
help="Instead of outputting a list of Make targets, emit a Makefile fragment "
27+
"conditionally including each prerequisite if MAKE_CMD_GOALS includes "
28+
"any of its dependent targets.")
2129
parser.add_argument(
2230
'-d',
2331
'--debug',
@@ -26,19 +34,38 @@ def parse_args():
2634
return parser.parse_args()
2735

2836

29-
def main():
30-
args = parse_args()
37+
def emit_makefrag(prerequisites, recursive, debug):
38+
s = "-include "
39+
for p in sorted(set(prerequisites)):
40+
targets = list_dependents(p, recursive=recursive, debug=debug)
41+
42+
if not targets:
43+
print(f'Warning: no targets depend on prerequisite {p}.', file=sys.stderr)
44+
continue
45+
46+
target_list = " ".join(sorted(targets))
47+
s += f"$(if $(filter {target_list},$(MAKECMDGOALS)),{p}) "
48+
print(s.strip())
3149

50+
51+
def emit_targets(prerequisites, recursive, debug):
3252
# Take the union of all dependent targets for the given prerequisites
3353
all_deps = set()
34-
for p in args.prerequisites:
54+
for p in prerequisites:
3555
all_deps.update(
36-
list_dependents(p, recursive=args.recursive, debug=args.debug)
56+
list_dependents(p, recursive=recursive, debug=debug)
3757
)
38-
dependents = sorted(all_deps)
58+
print('\n'.join(sorted(all_deps)))
59+
60+
61+
def main():
62+
args = parse_args()
3963

40-
# Print the list of dependent targets
41-
print('\n'.join(dependents))
64+
if args.emit_makefrag:
65+
emit = emit_makefrag
66+
else:
67+
emit = emit_targets
68+
emit(args.prerequisites, args.recursive, args.debug)
4269

4370

4471
if __name__ == "__main__":

0 commit comments

Comments
 (0)