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.
169 lines
4.1 KiB
Python
169 lines
4.1 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: Latin-1 -*-
|
|
|
|
""" setbuild - set the build environment you require """
|
|
|
|
##
|
|
def syntax():
|
|
"syntax - print syntax of setbuild.py "
|
|
print "syntax: python setbuild.py Win32|x64|all|reset"
|
|
##
|
|
|
|
##
|
|
# import modules
|
|
import os.path
|
|
import sys
|
|
import xml.dom.minidom
|
|
from xml.sax.saxutils import escape
|
|
|
|
##
|
|
# from PP3E/System/Filetools/cpall.py
|
|
maxfileload = 5 * 1024 * 1024
|
|
blksize = 100 * 1024
|
|
|
|
##
|
|
def cp(pathFrom, pathTo, maxfileload=maxfileload):
|
|
"""
|
|
copy file pathFrom to pathTo, byte for byte
|
|
"""
|
|
if os.path.getsize(pathFrom) <= maxfileload:
|
|
bytesFrom = open(pathFrom, 'rb').read() # read small file all at once
|
|
open(pathTo, 'wb').write(bytesFrom) # need b mode on Windows
|
|
else:
|
|
fileFrom = open(pathFrom, 'rb') # read big files in chunks
|
|
fileTo = open(pathTo, 'wb') # need b mode here too
|
|
while 1:
|
|
bytesFrom = fileFrom.read(blksize) # get one block, less at end
|
|
if not bytesFrom: break # empty after last chunk
|
|
fileTo.write(bytesFrom)
|
|
##
|
|
|
|
##
|
|
def save(path):
|
|
"""save - make a backup (or restore the backup)"""
|
|
orig = path+'.orig'
|
|
if os.path.exists(orig):
|
|
cp(orig,path)
|
|
else:
|
|
cp(path,orig)
|
|
##
|
|
|
|
##
|
|
def sln(path,remove):
|
|
"""sln - remove the x64 stuff from a sln"""
|
|
|
|
save(path)
|
|
|
|
if remove:
|
|
f = open(path, 'r')
|
|
lines = []
|
|
for line in f:
|
|
if line.find(remove)<0:
|
|
lines.append(line)
|
|
f.close()
|
|
|
|
f = open(path,'w')
|
|
for line in lines:
|
|
f.write(line)
|
|
f.close()
|
|
##
|
|
|
|
##
|
|
def vcproj(path,remove):
|
|
"""vcproj - remove the x64 stuff from a vcproj"""
|
|
|
|
save(path)
|
|
|
|
if remove:
|
|
f = open(path,'r')
|
|
dom = xml.dom.minidom.parseString(f.read())
|
|
f.close()
|
|
|
|
for tag in [ 'Platform','Configuration' ]:
|
|
tags = dom.getElementsByTagName(tag)
|
|
kills = []
|
|
for t in tags:
|
|
if t.getAttribute("Name").find(remove)>=0:
|
|
kills.append(t)
|
|
|
|
for kill in kills:
|
|
kill.parentNode.removeChild(kill)
|
|
|
|
# repair the command lines!
|
|
for tool in dom.getElementsByTagName('Tool'):
|
|
cl=tool.getAttribute('CommandLine')
|
|
if cl:
|
|
cl=escape(cl)
|
|
cl=cl.replace('\r','__CR__')
|
|
cl=cl.replace('\n','__LF__')
|
|
tool.setAttribute('CommandLine',cl)
|
|
# print '-----------',cl,'----------'
|
|
|
|
code=dom.toxml()
|
|
code=code.replace('__CR__','
')
|
|
code=code.replace('__LF__','
')
|
|
f = open(path,'w')
|
|
f.write(code)
|
|
f.close()
|
|
##
|
|
|
|
##
|
|
def visit(myData, directoryName, filesInDirectory): # called for each dir
|
|
"""visit - called by os.path.walk"""
|
|
# print "in visitor",directoryName, "myData = ",myData
|
|
# print "filesInDirectory => ",filesInDirectory
|
|
for filename in filesInDirectory: # do non-dir files here
|
|
pathname = os.path.join(directoryName, filename)
|
|
if not os.path.isdir(pathname):
|
|
global paths
|
|
paths.append(pathname)
|
|
##
|
|
|
|
##
|
|
def setbuild(remove):
|
|
"""setbuild - remove == None, means both x64 and Win32"""
|
|
if remove in set(['x64','Win32',None]):
|
|
directory = os.path.abspath(os.path.dirname(sys.argv[0]))
|
|
print "directory = ",directory
|
|
global paths
|
|
|
|
paths=[]
|
|
os.path.walk(directory, visit, None)
|
|
for path in paths:
|
|
# print path
|
|
handlers = { '.sln' : sln
|
|
, '.vcproj' : vcproj
|
|
} ;
|
|
ext=os.path.splitext(path)[1]
|
|
if handlers.has_key(ext):
|
|
handlers[ext](path,remove)
|
|
else:
|
|
syntax()
|
|
##
|
|
|
|
##
|
|
if __name__ == '__main__':
|
|
|
|
argc = len(sys.argv)
|
|
syntaxError = argc < 2
|
|
|
|
if not syntaxError:
|
|
option=sys.argv[1].lower()
|
|
removes = { 'x64' : 'Win32'
|
|
, 'win32' : 'x64'
|
|
, 'all' : None
|
|
, 'reset' : None
|
|
}
|
|
syntaxError = not removes.has_key(option)
|
|
if not syntaxError:
|
|
setbuild(removes[option])
|
|
|
|
if option=='reset':
|
|
os.system('del/s *.orig')
|
|
|
|
if syntaxError:
|
|
syntax()
|
|
|
|
# That's all Folks!
|
|
##
|