blob: ba3c54dee7f765718955c78b64ab382e08ae7909 [file] [log] [blame]
#!/usr/bin/python
# Copyright Bruno da Silva de Oliveira 2003. Use, modification and
# distribution is subject to the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
import os
import glob
import shutil
import sys
import time
#=============================================================================
# win32 configuration
#=============================================================================
if sys.platform == 'win32':
includes = '-ID:/programming/libraries/boost-cvs/boost -ID:/Bin/Python/include'
build_pyste_cmd = 'python ../src/Pyste/pyste.py --pyste-ns=pyste --cache-dir=cache %s ' % includes
compile_single_cmd = 'cl /nologo /GR /GX -c %s -I. ' % includes
link_single_cmd = 'link /nologo /DLL '\
'/libpath:D:/programming/libraries/boost-cvs/lib /libpath:D:/Bin/Python/libs '\
'boost_python.lib python24.lib /out:_%s.dll '
obj_ext = 'obj'
#=============================================================================
# linux configuration
#=============================================================================
elif sys.platform == 'linux2':
build_pyste_cmd = 'python ../src/Pyste/pyste.py -I. '
compile_single_cmd = 'g++ -shared -c -I. -I/usr/include/python2.4 '
link_single_cmd = 'g++ -shared -o _%s.so -lboost_python '
obj_ext = 'o'
def build_pyste(multiple, module):
rest = '%s --module=_%s %s.pyste' % (multiple, module, module)
execute(build_pyste_cmd + rest)
def compile_single(module):
module_obj = ''
if os.path.isfile(module+'.cpp'):
execute(compile_single_cmd + module+'.cpp')
module_obj = module + '.' + obj_ext
execute(compile_single_cmd + ('_%s.cpp' % module))
link = link_single_cmd % module
execute(link + ('_%s.%s ' % (module, obj_ext)) + module_obj)
def compile_multiple(module):
module_obj = ''
if os.path.isfile(module+'.cpp'):
execute(compile_single_cmd + module+'.cpp')
module_obj = module + '.' + obj_ext
files = glob.glob('_%s/*.cpp' % module)
for f in files:
execute(compile_single_cmd + f)
def basename(name):
return os.path.basename(os.path.splitext(name)[0])
objs = [basename(x) + '.' + obj_ext for x in files]
objs.append(module_obj)
execute((link_single_cmd % module) + ' '.join(objs))
def execute(cmd):
os.system(cmd)
def run_tests():
if os.system('python runtests.py') != 0:
raise RuntimeError, 'tests failed'
def cleanup():
modules = get_modules()
extensions = '*.dll *.pyc *.obj *.exp *.lib *.o *.so'
files = []
for module in modules:
files.append('_' + module + '.cpp')
for ext in extensions.split():
files += glob.glob(ext)
files.append('build.log')
for file in files:
try:
os.remove(file)
except OSError: pass
for module in modules:
try:
shutil.rmtree('_' + module)
except OSError: pass
def main(multiple, module=None):
if module is None:
modules = get_modules()
else:
modules = [module]
start = time.clock()
for module in modules:
build_pyste(multiple, module)
print '-'*50
print 'Building pyste files: %0.2f seconds' % (time.clock()-start)
print
start = time.clock()
for module in modules:
if multiple:
compile_multiple(module)
else:
compile_single(module)
print '-'*50
print 'Compiling files: %0.2f seconds' % (time.clock()-start)
print
if len(modules) == 1:
os.system('python %sUT.py' % modules[0])
else:
run_tests()
#cleanup()
def get_modules():
def getname(file):
return os.path.splitext(os.path.basename(file))[0]
return [getname(x) for x in glob.glob('*.pyste')]
if __name__ == '__main__':
if len(sys.argv) > 1:
module = sys.argv[1]
else:
module = None
try:
# main('--multiple', module)
main('', module)
except RuntimeError, e:
print e