Skip to content

Commit 558e19a

Browse files
committed
Add --flags argument to pass flags to make -pq command
Consider the scenario in which list-dependent-make-targets is used within a Makefile. Here it is desired that the flags passed to the invoking Make target are passed down to `make -pq`, ensuring that all target names are aligned, of this would lead to conflicts. This flag achieves this purpose.
1 parent 04fc19c commit 558e19a

2 files changed

Lines changed: 17 additions & 9 deletions

File tree

src/pymakeutils/common.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,13 @@
1313

1414
# Function to parse all rules from 'make -pq' output
1515
@lru_cache(maxsize=4)
16-
def _parse_makefile():
16+
def _parse_makefile(flags=''):
1717
# Run 'make -pq' and capture its output
18+
cmd = ['make', '-pq']
19+
if flags:
20+
cmd.extend(flags.split())
1821
result = subprocess.run(
19-
['make', '-pq'],
22+
cmd,
2023
capture_output=True,
2124
text=True)
2225

@@ -108,10 +111,10 @@ def _get_dependents_recursive(prerequisite, prerequisites, recursive=False):
108111

109112
# Return a sorted list of targets that depend on `prerequisite`.
110113
# If `recursive` is False, only direct dependents are returned.
111-
def list_dependents(prerequisite, recursive=False, debug=False):
114+
def list_dependents(prerequisite, recursive=False, debug=False, flags=''):
112115

113116
# Parse the makefile
114-
targets = _parse_makefile()
117+
targets = _parse_makefile(flags)
115118
prerequisites = _build_reverse_dict(targets)
116119

117120
# Handle non-existing prerequisite

src/pymakeutils/list_dependent_make_targets.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,17 @@ def parse_args():
3131
'--debug',
3232
action='store_true',
3333
help="Enable debug output to show intermediate steps")
34+
parser.add_argument(
35+
'-f',
36+
'--flags',
37+
help="Flags to pass to `make -pq`")
3438
return parser.parse_args()
3539

3640

37-
def emit_makefrag(prerequisites, recursive, debug):
41+
def emit_makefrag(prerequisites, recursive, debug, flags):
3842
s = "-include "
3943
for p in sorted(set(prerequisites)):
40-
targets = list_dependents(p, recursive=recursive, debug=debug)
44+
targets = list_dependents(p, recursive=recursive, debug=debug, flags=flags)
4145

4246
if not targets:
4347
print(f'Warning: no targets depend on prerequisite {p}.', file=sys.stderr)
@@ -48,24 +52,25 @@ def emit_makefrag(prerequisites, recursive, debug):
4852
print(s.strip())
4953

5054

51-
def emit_targets(prerequisites, recursive, debug):
55+
def emit_targets(prerequisites, recursive, debug, flags):
5256
# Take the union of all dependent targets for the given prerequisites
5357
all_deps = set()
5458
for p in prerequisites:
5559
all_deps.update(
56-
list_dependents(p, recursive=recursive, debug=debug)
60+
list_dependents(p, recursive=recursive, debug=debug, flags=flags)
5761
)
5862
print('\n'.join(sorted(all_deps)))
5963

6064

6165
def main():
6266
args = parse_args()
67+
print('Flags:', args.flags)
6368

6469
if args.emit_makefrag:
6570
emit = emit_makefrag
6671
else:
6772
emit = emit_targets
68-
emit(args.prerequisites, args.recursive, args.debug)
73+
emit(args.prerequisites, args.recursive, args.debug, args.flags)
6974

7075

7176
if __name__ == "__main__":

0 commit comments

Comments
 (0)