| import pymake.data |
| import pymake.parser |
| import pymake.parserdata |
| import sys |
| |
| ''' |
| Modifies the output of Sun Studio's -xM to look more like the output |
| of gcc's -MD -MP, adding phony targets for dependencies. |
| ''' |
| |
| |
| def add_phony_targets(path): |
| print path |
| deps = set() |
| targets = set() |
| for stmt in pymake.parser.parsefile(path): |
| if isinstance(stmt, pymake.parserdata.Rule): |
| assert isinstance(stmt.depexp, pymake.data.StringExpansion) |
| assert isinstance(stmt.targetexp, pymake.data.StringExpansion) |
| for d in stmt.depexp.s.split(): |
| deps.add(d) |
| for t in stmt.targetexp.s.split(): |
| targets.add(t) |
| phony_targets = deps - targets |
| if not phony_targets: |
| return |
| with open(path, 'a') as f: |
| f.writelines('%s:\n' % d for d in phony_targets) |
| |
| |
| if __name__ == '__main__': |
| for f in sys.argv[1:]: |
| add_phony_targets(f) |