rendered paste bodyIndex: engine/SConscript===================================================================--- engine/SConscript (revision 1726)+++ engine/SConscript (working copy)@@ -5,6 +5,7 @@ joinpath = os.path.join _sep = os.path.sep enginepath = upath('.')+extensionpath = upath('./extensions') def is_implfile(fname): return fname.endswith('.cpp') or fname.endswith('.cxx') or fname.endswith('.m')@@ -12,9 +13,9 @@ def is_headerfile(fname): return fname.endswith('.hpp') or fname.endswith('.h') -def generate_swig_wrappers(interfacefiles):+def generate_swig_wrappers(target, source, env): from string import Template- swigoutdir = 'swigwrappers'+ swigoutdir = joinpath('engine', 'swigwrappers') def generate_language_specifics(lang): @@ -28,22 +29,39 @@ templatefile = joinpath(langoutdir,"fife.i.templ") template = Template(open(templatefile).read())- inclusions = sorted(['%include ' + str(f) for f in interfacefiles])+ inclusions = sorted(['%include ' + str(f) for f in source]) inclusions = '\n'.join(inclusions)- open('fife.i', 'w').write(template.substitute(inclusions=inclusions))- - pipe = os.popen(swigpath +'swig -c++ -%s -Icore fife.i' % (lang))+ interfacefile = joinpath(langoutdir, 'fife.i')+ open(interfacefile, 'w').write(template.substitute(inclusions=inclusions))++ includepath = joinpath('engine', 'core')+ pipe = os.popen(swigpath +'swig -c++ -%s -I%s -outdir %s %s' % (lang, includepath, langoutdir, interfacefile)) if pipe.close(): print "\nError while running swig, stopped" Exit(1)- wrappers = enginepath.files('*fife*')- for wrapper in wrappers:- wrapper.move(langoutdir) print "Running swig..." generate_language_specifics(env['script']) print "Swig completed" +def swig_wrapper_emitter(target, source, env):+ target_append = []+ for t in target:+ t = str(t)+ if t.endswith('.py'):+ t = t[:-3]+ else:+ continue+ target_append.append(t + '.i')+ target_append.append(t + '_wrap.cxx')+ target_append.append(t + '_wrap.h')+ for t in target_append:+ target.append(t)+ return target, source++swig_wrapper_builder = Builder(action = generate_swig_wrappers, suffix = '.py', source_suffix = '.i', emitter = swig_wrapper_emitter)+env.Append(BUILDERS = {'SwigWrappers': swig_wrapper_builder})+ def remove_based_on_dir_filter(dirfilters, files): abspaths = [] for pathstr in dirfilters:@@ -76,22 +94,6 @@ for l in dupes: print l Exit(1) -def clean_generated_files():- print "Cleaning generated files ..."- for genfile in upath('swigwrappers').walkfiles():- if str(genfile.abspath()).find('.svn') != -1:- continue- if genfile.endswith('.i.templ'):- continue- genfile.remove()-- EXPLICIT_REMOVES = ('fife.i', 'fife.py', 'fife_wrap.cxx', 'fife_wrap.h')- for f in EXPLICIT_REMOVES:- try:- upath(f).remove()- except:- pass- def generate_msvc_project(projectfiles): def create_dict_tree(source_dict): for f in source_dict.keys():@@ -160,9 +162,10 @@ print "FIFE code::blocks project file succesfully created (%s)" % os.path.abspath(cbprojfilename) -clean_generated_files() variated_dirs = eval(open(joinpath('config', 'variated_dirs'), 'r').read())-filteredpaths = []+# filter out swigwrappers. fife_wrap.cxx is appended manually+# as it might not exist yet during SConscript parsing+filteredpaths = ['swigwrappers'] for flag, paths in variated_dirs.items(): value = None if flag.find('-') != -1:@@ -170,21 +173,23 @@ if (value and (not env[flag] == value)) or (not env[flag]): filteredpaths.extend(paths) -if not env.GetOption('clean'):- tmpfiles = remove_based_on_dir_filter(filteredpaths, list(enginepath.walkfiles('*.i')))- interfacefiles = []- for f in tmpfiles:- if f.startswith('.' + _sep):- interfacefiles.append(f[2:])- else:- interfacefiles.append(f)- generate_swig_wrappers(interfacefiles)+tmpfiles = remove_based_on_dir_filter(filteredpaths, list(enginepath.walkfiles('*.i')))+interfacefiles = []+for f in tmpfiles:+ if f.startswith('.' + _sep):+ interfacefiles.append(f[2:])+ else:+ interfacefiles.append(f) +swig = env.SwigWrappers('swigwrappers/python/fife', interfacefiles)+env.Install('$PREFIX/lib/python2.5/site-packages/fife', ['swigwrappers/python/fife.py'])+ allfiles = list(enginepath.walkfiles()) headerfiles = [f for f in allfiles if is_headerfile(f)] implfiles = [f for f in allfiles if is_implfile(f)]+extensionfiles = list(extensionpath.walkfiles('*.py')) -if not env.GetOption('clean'):+if not env.GetOption('clean') and env['projfiles']: filtered_prj_paths = eval(open(joinpath('config', 'removed_from_project_files'), 'r').read()) filtered_prj_paths = [joinpath(*p.split('/')) for p in filtered_prj_paths] projectfiles = remove_based_on_dir_filter(filtered_prj_paths, headerfiles + implfiles)@@ -194,9 +199,15 @@ generate_codeblocks_project(projectfiles) if not env['projfiles']:- print "Starting compilation" env.Append(CPPPATH = ['#/engine/core', '#/engine/swigwrappers']) compilefiles = [str(f) for f in remove_based_on_dir_filter(filteredpaths, implfiles)]+ compilefiles.append('./swigwrappers/%s/fife_wrap.cxx' % env['script'])+ if sys.platform == 'linux2':+ env.Replace(SHLIBPREFIX = '_') flib = env.SharedLibrary('fife', compilefiles, LINKFLAGS=['-Wl,-rpath,../ext/install/lib,-rpath,ext/install/lib'])+ if sys.platform == 'linux2':- env.Command('swigwrappers/%s/_fife.so' % env['script'], flib, [Copy('$TARGET', '$SOURCE')])+ # env.Command('swigwrappers/%s/_fife.so' % env['script'], flib, [Copy('$TARGET', '$SOURCE')])+ env.Install('$PREFIX/lib/python2.5/site-packages/fife', flib)+ env.Install('$PREFIX/lib/python2.5/site-packages/fife', [str(f) for f in extensionfiles])+Index: engine/swigwrappers/python/fife.i.templ===================================================================--- engine/swigwrappers/python/fife.i.templ (revision 1726)+++ engine/swigwrappers/python/fife.i.templ (working copy)@@ -9,4 +9,4 @@ $inclusions -%include swigwrappers/python/extensions.i.templ\ No newline at end of file+%include engine/swigwrappers/python/extensions.i.templIndex: SConstruct===================================================================--- SConstruct (revision 1726)+++ SConstruct (working copy)@@ -2,6 +2,7 @@ from utils.util_scripts.path import path as upath opts = Options('options.py', ARGUMENTS)+opts.Add(PathOption('PREFIX', 'Directory to install under', '/usr')) opts.Add(BoolOption('debug', 'Build with debuginfos and without optimisations', 1)) opts.Add(BoolOption('tests', 'Build testcases in unit_tests', 0)) opts.Add(BoolOption('noengine', 'Prevents building of engine, use e.g. for util/test tweaking', 0))@@ -161,4 +162,13 @@ if env['utils']: SConscript([str(p) for p in upath('utils').walkfiles('SConscript')]) +# techdemo installation+if sys.platform == 'linux2':+ source = [str(f) for f in upath('techdemo').walkfiles() if str(f).find('.svn') == -1]+ target = map(lambda x: '$PREFIX/share/games/fife-'+x, source)+ env.InstallAs(target, source)+ env.InstallAs('$PREFIX/bin/fife-techdemo', 'techdemo.py')++ env.Alias('install', '$PREFIX')+ # vim: set filetype=python: