You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
1.8 KiB
Python
84 lines
1.8 KiB
Python
10 years ago
|
#!/usr/bin/python3
|
||
|
|
||
|
##
|
||
|
# read an MSVC solution file and generate the project dependency table
|
||
|
# syntax: tools/python/depend solution-file [format]
|
||
|
# - the argument 'format' can be anything!
|
||
|
##
|
||
|
|
||
|
import os
|
||
|
import sys
|
||
|
|
||
|
def main():
|
||
|
##
|
||
|
# no arguments, report and quit
|
||
|
if len(sys.argv)==1:
|
||
|
print('%s solutionfile' % sys.argv[0])
|
||
|
return
|
||
|
bFormat = len(sys.argv)>2
|
||
|
|
||
|
sln=sys.argv[1]
|
||
|
print(sln)
|
||
|
|
||
|
lines=open(sln).readlines()
|
||
|
|
||
|
project={}
|
||
|
depends={}
|
||
|
bDepends = False
|
||
|
for line in lines:
|
||
|
if line.find('Project(')>=0:
|
||
|
start = line.find(' = "')
|
||
|
end = line.find('"',start+4)
|
||
|
name = line[start+4:end]
|
||
|
start = line.find('{',end)
|
||
|
end = line.find('}',start)
|
||
|
uid = line[start+1:end]
|
||
|
project[uid] = name
|
||
|
if line.find('Global')>0:
|
||
|
break
|
||
|
|
||
|
# print(project)
|
||
|
|
||
|
for line in lines:
|
||
|
if line.find('Project(')>=0:
|
||
|
start = line.find(' = "')
|
||
|
end = line.find('"',start+4)
|
||
|
name = line[start+4:end]
|
||
|
depends[name]=set([])
|
||
|
|
||
|
if bDepends & (line.find('ProjectSectionEnd')>0):
|
||
|
bDepends=False
|
||
|
if (not bDepends) & (line.find('ProjectSection(ProjectDependencies)')>=0):
|
||
|
bDepends=True
|
||
|
if bDepends:
|
||
|
start = line.find('{')
|
||
|
end = line.find('}',start+1)
|
||
|
if (start>0) & (end>0):
|
||
|
uid = line[start+1:end]
|
||
|
# print('found uid = ',uid)
|
||
|
if not name in depends:
|
||
|
depends[name]=set([])
|
||
|
if uid in project:
|
||
|
depends[name].add(project[uid])
|
||
|
if line.find('Global')>0:
|
||
|
break
|
||
|
|
||
|
for p in sorted(depends.keys()):
|
||
|
if bFormat:
|
||
|
s=str(depends[p])
|
||
|
s=s.replace('{','[').replace('}',']')
|
||
|
s=s.replace('set()','[ ]')
|
||
|
P="project['" + p + "']"
|
||
|
print('%-30s = set(%s)' % (P,s) )
|
||
|
else:
|
||
|
print('%-20s %s' % (p,depends[p]) )
|
||
|
|
||
|
|
||
|
# project['xmpparser-test' ] = set(['libexiv2','xmpsdk' ])
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
main()
|
||
|
|
||
|
# That's all Folks
|
||
|
##
|