X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;ds=sidebyside;f=SConstruct;h=d071c5c0c9eb3525643ff66b8e18237e97a25106;hb=546364c9567ef212ea9276201facf73f5ada696a;hp=93a0383b1a17ec4dafa095c54459f3c0842a3478;hpb=bc08c7c2623386a9430b681087d6636e197d85f9;p=supertux.git diff --git a/SConstruct b/SConstruct index 93a0383b1..d071c5c0c 100644 --- a/SConstruct +++ b/SConstruct @@ -1,85 +1,106 @@ # -# A simple SConstruct file. -# See http://www.scons.org/ for more information about what SCons is and how it -# may help you... :-) -# I've never done anything with SCons before. Quite obviously this script is in -# a non-working state!! Maybe someone with more knowledge of the materia who -# thinks that SCons might be better suited than make can take over.... -# - Benjamin P. 'litespeed' Jung - -# +# SConstruct build file. See http://www.scons.org for details. +import os + +def Glob(dirs, pattern = '*' ): + import os, fnmatch + files = [] + for dir in dirs: + try: + for file in os.listdir( Dir(dir).srcnode().abspath ): + if fnmatch.fnmatch(file, pattern) : + files.append( os.path.join( dir, file ) ) + except Exception, e: + print "Warning, couldn't find directory '%s': %s" % (dir, str(e)) + + return files + +# thanks to Michael P Jung +def CheckSDLConfig(context, minVersion): + context.Message('Checking for sdl-config >= %s... ' % minVersion) + from popen2 import Popen3 + p = Popen3(['sdl-config', '--version']) + ret = p.wait() + out = p.fromchild.readlines() + if ret != 0: + context.Result(False) + return False + if len(out) != 1: + # unable to parse output! + context.Result(False) + return False + # TODO validate output and catch exceptions + version = map(int, out[0].strip().split('.')) + minVersion = map(int, minVersion.split('.')) + # TODO comparing versions that way only works for pure numeric version + # numbers and fails for custom extensions. I don't care about this at + # the moment as sdl-config never used such version numbers afaik. + ret = (version >= minVersion) + context.Result(ret) + return ret + + +opts = Options('build_config.py') +opts.Add('CXX', 'The C++ compiler', 'g++') +opts.Add('CXXFLAGS', 'Additional C++ compiler flags', '') +opts.Add('CPPPATH', 'Additional preprocessor paths', '') +opts.Add('CPPFLAGS', 'Additional preprocessor flags', '') +opts.Add('CPPDEFINES', 'defined constants', '') +opts.Add('LIBPATH', 'Additional library paths', '') +opts.Add('LIBS', 'Additional libraries', '') +opts.Add('DESTDIR', \ + 'destination directory for installation. It is prepended to PREFIX', '') +opts.Add('PREFIX', 'Installation prefix', '/usr/local') +opts.Add(EnumOption('VARIANT', 'Build variant', 'optimize', + ['optimize', 'debug', 'profile'])) + +env = Environment(options = opts) + +if not os.path.exists("build_config.py"): + print "build_config.py doesn't exist - Generating new build config..." + + conf = Configure(env, custom_tests = { + 'CheckSDLConfig' : CheckSDLConfig + }) + + if not conf.CheckSDLConfig('1.2.4'): + print "Couldn't find libSDL >= 1.2.4" + Exit(1) + if not conf.CheckLib('SDL_mixer'): + print "Couldn't find SDL_mixer library!" + Exit(1) + if not conf.CheckLib('SDL_image'): + print "Couldn't find SDL_image library!" + Exit(1) + if not conf.CheckLib('GL'): + print "Couldn't find OpenGL library!" + Exit(1) + + env = conf.Finish() + env.ParseConfig('sdl-config --cflags --libs') + env.Append(CPPDEFINES = \ + {'DATA_PREFIX':"'\"" + env['PREFIX'] + "/share/supertux\"'" , + 'LOCALEDIR' :"'\"" + env['PREFIX'] + "/locales\"'"}) + opts.Save("build_config.py", env) +else: + print "Using build_config.py" + -# TODO: such a static entry is obviously not what we want. -# Using 'sdl-config --prefix' to obtain parameters would be muuuuuch -# better. -SDL_INCLUDE_PATH='/usr/include/SDL' +if env['VARIANT'] == "optimize": + env.Append(CXXFLAGS = "-O2 -g -Wall") +elif env['VARIANT'] == "debug": + env.Append(CXXFLAGS = "-O0 -g3 -Wall -Werror") + env.Append(CPPDEFINES = { "DEBUG":"1" }) +elif env['VARIANT'] == "profile": + env.Append(CXXFLAGS = "-pg -O2") -libsupertux_src=[ - 'lib/app/globals.cpp', - 'lib/app/setup.cpp', - 'lib/audio/musicref.cpp', - 'lib/audio/sound_manager.cpp', - 'lib/gui/button.cpp', - 'lib/gui/menu.cpp', - 'lib/gui/mousecursor.cpp', - 'lib/math/physic.cpp', - 'lib/math/vector.cpp', - 'lib/special/game_object.cpp', - 'lib/special/moving_object.cpp', - 'lib/special/sprite.cpp', - 'lib/special/sprite_manager.cpp', - 'lib/special/timer.cpp', - 'lib/special/frame_rate.cpp', - 'lib/utils/configfile.cpp', - 'lib/utils/lispreader.cpp', - 'lib/utils/lispwriter.cpp', - 'lib/video/drawing_context.cpp', - 'lib/video/font.cpp', - 'lib/video/screen.cpp', - 'lib/video/surface.cpp' -] +build_dir="build/" + env['PLATFORM'] + "/" + env['VARIANT'] -supertux_src=[ - 'src/background.cpp', - 'src/badguy.cpp', - 'src/badguy_specs.cpp', - 'src/bitmask.cpp', - 'src/camera.cpp', - 'src/collision.cpp', - 'src/door.cpp', - 'src/gameloop.cpp', - 'src/gameobjs.cpp', - 'src/high_scores.cpp', - 'src/interactive_object.cpp', - 'src/intro.cpp', - 'src/level.cpp', - 'src/level_subset.cpp', - 'src/leveleditor.cpp', - 'src/misc.cpp', - 'src/particlesystem.cpp', - 'src/player.cpp', - 'src/resources.cpp', - 'src/scene.cpp', - 'src/sector.cpp', - 'src/special.cpp', - 'src/statistics.cpp', - 'src/supertux.cpp', - 'src/tile.cpp' - 'src/tile_manager.cpp', - 'src/tilemap.cpp', - 'src/title.cpp', - 'src/worldmap.cpp' -] - -SharedLibrary( - target="lib/supertux", - source=libsupertux_src, - CPPPATH=SDL_INCLUDE_PATH -) +env.Append(CPPPATH = ["#", "#/src", "#/lib"]) +env.Append(LIBS = ["supertux"]) +env.Append(LIBPATH=["#" + build_dir + "/lib"]) -Program( - target="src/supertux", - source=supertux_src, - CPPPATH=[SDL_INCLUDE_PATH, 'lib', '.'], - LIBS='lib/libsupertux' -) +env.Export(["env", "Glob"]) +env.SConscript("lib/SConscript", build_dir=build_dir + "/lib", duplicate=0) +env.SConscript("src/SConscript", build_dir=build_dir + "/src", duplicate=0)