зеркало из https://github.com/mozilla/gecko-dev.git
34 строки
940 B
Python
34 строки
940 B
Python
|
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)
|