All pastes #737959 Raw Edit

Diff

public text v1 · immutable
·published 2007-10-15 21:49 UTC
rendered paste body
Index: 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: