| #!/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 |