blob: c6c7a56cdb6fc15b47f4e7e9c052d7079f821cd2 [file] [log] [blame]
import os
sourceFiles = ['c','cxx','l','y','ll','yy', 'crc']
headerFiles = ['h', 'hxx', 'hrc']
patchFiles = ['patch']
makefileExtensions = ['mk','pmk','GB']
makefileNames = ['Makefile','makefile']
makefileValues = ['PRJNAME','TARGET','SLOFILES','OBJFILES','LINKLINKFILES','LINKADDEDFILES'
,'LINKNAME','LINKADDEDDEPS','BUILD_ACTION','CONFIGURE_ACTION']
outputDir = 'capstone-output'
def main(curdir,startDir):
os.chdir(curdir)
print curdir
name = curdir.rsplit('\\',1)
outputFile = open(startDir+'\\' + outputDir + '\\'+name[len(name)-1] + ".txt","w+")
printAndOutput("Name:",outputFile)
printAndOutput(name[1],outputFile)
printAndOutput('',outputFile)
try:
file = open('prj/d.lst')
except IOError:
print 'prj.lst not found, skipping folder'
outputFile.close()
return
printDeps('prj/build.lst',outputFile)
buildrules = file.read()
printAndOutput("Build Rules:",outputFile)
printAndOutput(buildrules,outputFile)
printAndOutput("Source Files:",outputFile)
loadFileTypes(sourceFiles,curdir,"",False,outputFile)
printAndOutput('',outputFile)
printAndOutput("Header Files:",outputFile)
loadFileTypes(headerFiles,curdir,"",False,outputFile)
printAndOutput('',outputFile)
printAndOutput("Patch Files:",outputFile)
loadFileTypes(patchFiles,curdir,"",False,outputFile)
printAndOutput('',outputFile)
printAndOutput("Makefiles:",outputFile)
loadFileTypes(makefileExtensions,curdir,makefileNames,True,outputFile)
outputFile.close()
def printDeps(path,outputFile):
file = open(path)
deps = file.readline()
print deps
while ':' not in deps:
deps = file.readline()
if deps == '':
return
deps = deps.split(':',1)
printAndOutput("Dependencies:",outputFile)
printAndOutput(deps[1].strip(),outputFile)
printAndOutput('',outputFile)
file.close()
def parseMakefile(name,basePath,outputFile):
printAndOutput('',outputFile)
printAndOutput(name.replace(basePath+"\\",""),outputFile)
#f = open(name,"r")
#print f
printLine = False
for line in open(name,"r"):
newline = line.split("=")
if any(k == newline[0].strip() for k in makefileValues):
if '\\' in line:
printLine = True
else:
printLine = False
for c in ['\n','\t','\r','\\',' ']:
line = line.replace(c,'')
printAndOutput('\t' + line,outputFile)
elif printLine == True:
if not '\\' in line:
printLine = False
for c in ['\n','\t','\r','\\',' ']:
line = line.replace(c,'')
printAndOutput('\t' + line,outputFile)
def checkFilename(inputName,names,extensions):
temp = inputName.split(".")
if temp[0] in names:
return True
elif len(temp) > 1 and temp[1] in extensions:
return True
else:
return False
def directories(path):
for file in os.listdir(path):
if os.path.isdir(os.path.join(path, file)):
yield file
def printAndOutput(out,outputFile):
print out
outputFile.write(out + '\r\n')
def loadFileTypes(extensions,path,matchName,isMakefile,outputFile):
for root, dirs, files in os.walk(path):
for name in files:
tempName = name.rsplit('\\',1)
p = os.path.join(root,name)
if checkFilename(tempName[len(tempName)-1],matchName,extensions):
if not isMakefile:
printAndOutput(p.replace(path+"\\",""),outputFile)
else:
parseMakefile(p,path,outputFile)
def runEveryFolder(startDir):
try:
os.mkdir(startDir + '\\' + outputDir)
except:
pass
for d in directories(startDir):
print '######################'
main(os.path.join(startDir + '\\' + d),startDir)
print '######################'
runEveryFolder('C:\\Users\\Desktop\\Desktop\\main')