pingus-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Pingus-CVS] r4085 - trunk/pingus


From: grumbel at BerliOS
Subject: [Pingus-CVS] r4085 - trunk/pingus
Date: Mon, 9 Nov 2009 02:54:46 +0100

Author: grumbel
Date: 2009-11-09 02:54:45 +0100 (Mon, 09 Nov 2009)
New Revision: 4085

Modified:
   trunk/pingus/SConscript
Log:
Restructured Scons script a bit


Modified: trunk/pingus/SConscript
===================================================================
--- trunk/pingus/SConscript     2009-11-08 19:37:19 UTC (rev 4084)
+++ trunk/pingus/SConscript     2009-11-09 01:54:45 UTC (rev 4085)
@@ -57,31 +57,6 @@
         return (key, help, default, validator, converter)
 
 SpaceListOption = _SpaceListOptionClass()
-
-def DefineOptions(filename, args):
-    opts = Variables(filename, args)
-    opts.Add('CC', 'C Compiler', 'gcc')
-    opts.Add('CXX', 'C++ Compiler', 'g++')
-#   opts.Add('debug', 'Build with debugging options', 0)
-#   opts.Add('profile', 'Build with profiling support', 0)
-
-    opts.Add('CPPPATH',    'Additional preprocessor paths', [])
-    opts.Add('LIBPATH',    'Additional library paths',      [])
-    opts.Add('CPPFLAGS',   'Additional preprocessor flags', [])
-    opts.Add('CPPDEFINES', 'defined constants', [])
-    opts.Add('LIBS',       'Additional libraries', [])
-    opts.Add('CCFLAGS',    'C Compiler flags', [])
-    opts.Add('CXXFLAGS',   'C++ Compiler flags', [])
-    opts.Add('LINKFLAGS',  'Linker Compiler flags', [])
-
-    opts.Add(BoolVariable('with_opengl',        'Build with OpenGL support', 
True))
-    opts.Add(BoolVariable('with_xinput',        'Build with Xinput support', 
False))
-    opts.Add(BoolVariable('with_linuxusbmouse', 'Build with Linux USB mouse 
support', True))
-    opts.Add(BoolVariable('with_linuxevdev',    'Build with Linux evdev 
support', True))
-    opts.Add(BoolVariable('with_wiimote',       'Build with Wiimote support', 
False))
-    opts.Add(BoolVariable('ignore_errors',      'Ignore any fatal 
configuration errors', False))
-    opts.Add('optional_sources', 'Additional source files', [])
-    return opts
 
 def CheckSDLLib(context, sdllib):
     """
@@ -104,6 +79,7 @@
         return True
 
 def CheckIconv(context):
+    context.Message('Check how to call iconv...')
     text = """
 #include <iconv.h>
 int main() {
@@ -112,11 +88,9 @@
    return 0;
 }
 """
-    config.CheckLibWithHeader('iconv', 'iconv.h', 'c++') # Ok to fail
-    context.Message('Check how to call iconv...')
-
+    # config.CheckLibWithHeader(context, 'iconv', 'iconv.h', 'c++') # Ok to 
fail
     for i in ['', 'const']:
-        if config.TryCompile(text % i, ".cpp"):
+        if context.TryCompile(text % i, ".cpp"):
             context.Result("use '%s'" % i)
             return i
     context.Result("failed")
@@ -131,182 +105,257 @@
     context.Result("failed")
     return False
 
-Alias('configure')
+class Project:
+    def __init__(self):
+        Alias('configure')
+        Alias('install')
 
-if ('configure' in COMMAND_LINE_TARGETS) or \
-   not (File('config.py').exists() and File('config.h').exists()) and \
-   not GetOption('clean'):
-    opts = DefineOptions(None, ARGUMENTS)
-    env = Environment(options = opts)
-    Help(opts.GenerateHelpText(env))
+        if ('configure' in COMMAND_LINE_TARGETS) or \
+           not (File('config.py').exists() and File('config.h').exists()) and \
+           not GetOption('clean'):
+            self.configure()
+        elif ('install' in COMMAND_LINE_TARGETS):
+            self.install()
+        else:
+            self.build()
 
-    opts.Update(env)
+    def configure(self):
+        self.configure_begin()
+        self.configure_opengl()
+        self.configure_linuxusbmouse()
+        self.configure_linuxevdev()
+        self.configure_wiimote()
+        self.configure_xinput()
+        self.configure_boost()
+        self.configure_png()
+        self.configure_sdl()
+        self.configure_iconv()
+        self.configure_end()
 
-    if os.environ.has_key('PATH'):
-        env['ENV']['PATH'] = os.environ['PATH']
-    if os.environ.has_key('HOME'):
-        env['ENV']['HOME'] = os.environ['HOME']
+    def configure_begin(self):
+        self.define_options(None, ARGUMENTS)
+        self.env = Environment(options = self.opts)
+        Help(self.opts.GenerateHelpText(self.env))
 
-    if os.environ.has_key('PKG_CONFIG_PATH'):
-        env['ENV']['PKG_CONFIG_PATH'] = os.environ['PKG_CONFIG_PATH']
+        self.opts.Update(self.env)
 
-    env['CPPPATH'] += ['.', 'src/', 'external/']
+        if os.environ.has_key('PATH'):
+            self.env['ENV']['PATH'] = os.environ['PATH']
+        if os.environ.has_key('HOME'):
+            self.env['ENV']['HOME'] = os.environ['HOME']
 
-    config_h_defines = []      
+        if os.environ.has_key('PKG_CONFIG_PATH'):
+            self.env['ENV']['PKG_CONFIG_PATH'] = os.environ['PKG_CONFIG_PATH']
 
-    config = env.Configure(custom_tests = {
-       'CheckMyProgram' : CheckMyProgram,
-       'CheckSDLLib': CheckSDLLib,
-       'CheckIconv': CheckIconv,
-    })
-    fatal_error = ""
-    reports = ""
-
-    # FIXME: Seems to require a rather new version of SCons
-    # ret = config.CheckBuilder(context, None, "C++")
-    # if ret != "":
-    #   reports += "  * C++ Compiler missing: " + ret
-
-    if not env['with_opengl']:
-        reports += "  * OpenGL support: disabled\n"
-    else:
-        reports += "  * OpenGL support: enabled\n"
-        config_h_defines  += [('HAVE_OPENGL', 1)]
-        env['LIBS']       += ['GL']
-        env['optional_sources'] += 
['src/engine/display/opengl/opengl_framebuffer_surface_impl.cpp', 
-                                    
'src/engine/display/opengl/opengl_framebuffer.cpp' ]
-
-    if not env['with_linuxusbmouse']:
-        reports += "  * Linux USB mouse support: disabled\n"
-    else:
-        reports += "  * Linux USB mouse support: enabled\n"
-        config_h_defines  += [('HAVE_LINUXUSBMOUSE', 1)]
-        env['optional_sources'] += 
['src/engine/input/usbmouse/usbmouse_driver.cpp']
-    
-    if not env['with_linuxevdev']:
-        reports += "  * Linux evdev support: disabled\n"
-    else:
-        reports += "  * Linux evdev support: ok\n"
-        config_h_defines  += [('HAVE_LINUXEVDEV', 1)]
-        env['optional_sources'] += ['src/engine/input/evdev/evdev_driver.cpp',
-                                    'src/engine/input/evdev/evdev_device.cpp']
-    
-    if not env['with_wiimote']:
-        reports += "  * Wiimote support: disabled\n"        
-    elif config.CheckLibWithHeader('cwiid', 'cwiid.h', 'c++'):
-        reports += "  * Wiimote support: yes\n"
-        config_h_defines  += [('HAVE_CWIID', 1)]
-        env['LIBS']       += ['cwiid']
-        env['optional_sources'] += 
['src/engine/input/wiimote/wiimote_driver.cpp',
-                                    'src/engine/input/wiimote/wiimote.cpp']
-    else:
-        reports += "  * Wiimote support: no (libcwiid or cwiid.h not found)\n"
-
-    if not env['with_xinput']:
-        reports += "  * XInput support: disabled\n"
-    elif not config.CheckLibWithHeader('Xi', 'X11/extensions/XInput.h', 'c++'):
-        reports += "  * XInput support: no (library Xi not found)\n" ## FIXME: 
Need to set a define
-    else:
-        reports += "  * XInput support: yes\n"
-        config_h_defines  += [('HAVE_XINPUT', 1)]
-        env['LIBS'] += ['Xi']
-        env['optional_sources'] += 
['src/engine/input/xinput/xinput_driver.cpp',
-                                    
'src/engine/input/xinput/xinput_device.cpp']
-        
-    if not config.CheckLibWithHeader('boost_signals', 'boost/signals.hpp', 
'c++'):
-        if not config.CheckLibWithHeader('boost_signals-mt', 
'boost/signals.hpp', 'c++'):
-            fatal_error += "  * library 'boost_signals' not found\n"
+        self.env['CPPPATH'] += ['.', 'src/', 'external/']
 
-    if not config.CheckLibWithHeader('png', 'png.h', 'c++'):
-        fatal_error += "  * library 'png' not found\n"
-
-    if config.CheckMyProgram('sdl-config'):
-        env.ParseConfig('sdl-config  --cflags --libs')
-        for sdllib in ['image', 'mixer']:
-            if not config.CheckSDLLib(sdllib):
-                fatal_error += "  * SDL library '%s' not found\n" % sdllib
-    else:
-        fatal_error += "  * couldn't find sdl-config, SDL missing\n"
-
-    iconv_const = config.CheckIconv()
-    if iconv_const == False:
-        fatal_error += "  * can't call iconv\n"
-
-    env = config.Finish()
-    opts.Save("config.py", env)
+        self.config_h_defines = []      
 
-    print "Reports:"
-    print reports
+        self.config = self.env.Configure(custom_tests = {
+            'CheckMyProgram' : CheckMyProgram,
+            'CheckSDLLib': CheckSDLLib,
+            'CheckIconv': CheckIconv,
+            })
+        self.fatal_error = ""
+        self.reports = ""
 
-    if not fatal_error == "":
-        print "Fatal Errors:"
-        print fatal_error
-        if not env['ignore_errors']:
-            Exit(1)
+    def configure_end(self):
+        self.env = self.config.Finish()
+        self.opts.Save("config.py", self.env)
+
+        print "Reports:"
+        print self.reports
+
+        if not self.fatal_error == "":
+            print "Fatal Errors:"
+            print self.fatal_error
+            if not self.env['ignore_errors']:
+                Exit(1)
+            else:
+                print "\nError are being ignored, the build continues"
+
+        config_h = open('config.h', 'w')
+        config_h.write('#define VERSION "0.7.3"\n')
+        config_h.write('#define ENABLE_BINRELOC 1\n')
+        config_h.write('#define ICONV_CONST %s\n' % self.iconv_const)
+        for (v,k) in self.config_h_defines:
+            config_h.write('#define %s %s\n' % (v, k))
+        config_h.close()
+
+        if ('configure' in COMMAND_LINE_TARGETS):
+            print "Configuration written to config.h and config.py, run:"
+            print ""
+            print "  scons"
+            print ""
+            print "To start the compile"
         else:
-            print "\nError are being ignored, the build continues"
-
-    config_h = open('config.h', 'w')
-    config_h.write('#define VERSION "0.7.3"\n')
-    config_h.write('#define ENABLE_BINRELOC 1\n')
-    config_h.write('#define ICONV_CONST %s\n' % iconv_const)
-    for (v,k) in config_h_defines:
-        config_h.write('#define %s %s\n' % (v, k))
-    config_h.close()
-    if ('configure' in COMMAND_LINE_TARGETS):
-        print "Configuration written to config.h and config.py, run:"
-        print ""
-        print "  scons"
-        print ""
-        print "To start the compile"
-    else:
-        print "Configuration written to config.h and config.py"
-    ARGUMENTS = {}
-
-if not ('configure' in COMMAND_LINE_TARGETS):
-    if ARGUMENTS != {}:
-        print "Error: You must not supply arguments to the compile step."
-        print "Use:"
-        print ""
-        print "  scons configure [ARGUMENTS]..."
-        print ""
-        print "If you want to change the build configuration."
-        os.sys.exit(1)
+            print "Configuration written to config.h and config.py"
+        ARGUMENTS = {}
 
-    opts = DefineOptions("config.py", {})
-    env = Environment(options = opts)
-    Help(opts.GenerateHelpText(env))
+    def configure_gxx(self): 
+        # FIXME: Seems to require a rather new version of SCons
+        ret = config.CheckBuilder(context, None, "C++")
+        if ret != "":
+            reports += "  * C++ Compiler missing: " + ret
 
-    opts.Update(env)
-    env['CPPPATH'] += ['.', 'src/']
+    def configure_opengl(self):
+        if not self.env['with_opengl']:
+            self.reports += "  * OpenGL support: disabled\n"
+        else:
+            self.reports += "  * OpenGL support: enabled\n"
+            self.config_h_defines  += [('HAVE_OPENGL', 1)]
+            self.env['LIBS']       += ['GL']
+            self.env['optional_sources'] += 
['src/engine/display/opengl/opengl_framebuffer_surface_impl.cpp', 
+                                             
'src/engine/display/opengl/opengl_framebuffer.cpp' ]
 
-    Clean('pingus', ['config.py', 'config.h'])
+    def configure_linuxusbmouse(self):
+        if not self.env['with_linuxusbmouse']:
+            self.reports += "  * Linux USB mouse support: disabled\n"
+        else:
+            self.reports += "  * Linux USB mouse support: enabled\n"
+            self.config_h_defines  += [('HAVE_LINUXUSBMOUSE', 1)]
+            self.env['optional_sources'] += 
['src/engine/input/usbmouse/usbmouse_driver.cpp']
 
-    libpingus = env.StaticLibrary('pingus',
-                                  Glob('external/binreloc-2.0/*.c') + \
-                                  Glob('external/tinygettext/*.cpp') + \
-                                  Glob('src/editor/*.cpp') + \
-                                  Glob('src/engine/display/*.cpp') + \
-                                  Glob('src/engine/gui/*.cpp') + \
-                                  Glob('src/engine/input/*.cpp') + \
-                                  Glob('src/engine/screen/*.cpp') + \
-                                  Glob('src/engine/sound/*.cpp') + \
-                                  Glob('src/lisp/*.cpp') + \
-                                  Glob('src/math/*.cpp') + \
-                                  Glob('src/pingus/*.cpp') + \
-                                  Glob('src/pingus/actions/*.cpp') + \
-                                  Glob('src/pingus/colliders/*.cpp') + \
-                                  Glob('src/pingus/components/*.cpp') + \
-                                  Glob('src/pingus/movers/*.cpp') + \
-                                  Glob('src/pingus/particles/*.cpp') + \
-                                  Glob('src/pingus/screens/*.cpp') + \
-                                  Glob('src/pingus/worldmap/*.cpp') + \
-                                  Glob('src/pingus/worldobjs/*.cpp') + \
-                                  Glob('src/util/*.cpp') + \
-                                  env['optional_sources'])
-    env.Program('pingus', ['src/main.cpp', libpingus])
-    
-    for filename in Glob("test/*_test.cpp", strings=True):
-        env.Program(filename[:-4], [filename, libpingus])
-    
+    def configure_linuxevdev(self):
+        if not self.env['with_linuxevdev']:
+            reports += "  * Linux evdev support: disabled\n"
+        else:
+            self.reports += "  * Linux evdev support: ok\n"
+            self.config_h_defines  += [('HAVE_LINUXEVDEV', 1)]
+            self.env['optional_sources'] += 
['src/engine/input/evdev/evdev_driver.cpp',
+                                        
'src/engine/input/evdev/evdev_device.cpp']
+
+    def configure_wiimote(self):
+        if not self.env['with_wiimote']:
+            self.reports += "  * Wiimote support: disabled\n"        
+        elif config.CheckLibWithHeader('cwiid', 'cwiid.h', 'c++'):
+            self.reports += "  * Wiimote support: yes\n"
+            self.config_h_defines  += [('HAVE_CWIID', 1)]
+            self.env['LIBS']       += ['cwiid']
+            self.env['optional_sources'] += 
['src/engine/input/wiimote/wiimote_driver.cpp',
+                                             
'src/engine/input/wiimote/wiimote.cpp']
+        else:
+            self.reports += "  * Wiimote support: no (libcwiid or cwiid.h not 
found)\n"
+
+    def configure_xinput(self):
+        if not self.env['with_xinput']:
+            self.reports += "  * XInput support: disabled\n"
+        elif not config.CheckLibWithHeader('Xi', 'X11/extensions/XInput.h', 
'c++'):
+            self.reports += "  * XInput support: no (library Xi not found)\n" 
## FIXME: Need to set a define
+        else:
+            self.reports += "  * XInput support: yes\n"
+            self.config_h_defines  += [('HAVE_XINPUT', 1)]
+            self.env['LIBS'] += ['Xi']
+            self.env['optional_sources'] += 
['src/engine/input/xinput/xinput_driver.cpp',
+                                             
'src/engine/input/xinput/xinput_device.cpp']
+
+    def configure_boost(self):
+        if not self.config.CheckLibWithHeader('boost_signals', 
'boost/signals.hpp', 'c++'):
+            if not self.config.CheckLibWithHeader('boost_signals-mt', 
'boost/signals.hpp', 'c++'):
+                self.fatal_error += "  * library 'boost_signals' not found\n"
+
+    def configure_png(self):
+        if not self.config.CheckLibWithHeader('png', 'png.h', 'c++'):
+            self.fatal_error += "  * library 'png' not found\n"
+
+    def configure_sdl(self):
+        if self.config.CheckMyProgram('sdl-config'):
+            self.env.ParseConfig('sdl-config  --cflags --libs')
+            for sdllib in ['image', 'mixer']:
+                if not self.config.CheckSDLLib(sdllib):
+                    self.fatal_error += "  * SDL library '%s' not found\n" % 
sdllib
+        else:
+            fatal_error += "  * couldn't find sdl-config, SDL missing\n"
+
+    def configure_iconv(self):
+        self.iconv_const = self.config.CheckIconv()
+        if self.iconv_const == False:
+            self.fatal_error += "  * can't call iconv\n"
+
+    def define_options(self, filename, args):
+        self.opts = Variables(filename, args)
+        self.opts.Add('CC', 'C Compiler', 'gcc')
+        self.opts.Add('CXX', 'C++ Compiler', 'g++')
+    #   self.opts.Add('debug', 'Build with debugging options', 0)
+    #   self.opts.Add('profile', 'Build with profiling support', 0)
+
+        self.opts.Add('CPPPATH',    'Additional preprocessor paths', [])
+        self.opts.Add('LIBPATH',    'Additional library paths',      [])
+        self.opts.Add('CPPFLAGS',   'Additional preprocessor flags', [])
+        self.opts.Add('CPPDEFINES', 'defined constants', [])
+        self.opts.Add('LIBS',       'Additional libraries', [])
+        self.opts.Add('CCFLAGS',    'C Compiler flags', [])
+        self.opts.Add('CXXFLAGS',   'C++ Compiler flags', [])
+        self.opts.Add('LINKFLAGS',  'Linker Compiler flags', [])
+
+        self.opts.Add(BoolVariable('with_opengl',        'Build with OpenGL 
support', True))
+        self.opts.Add(BoolVariable('with_xinput',        'Build with Xinput 
support', False))
+        self.opts.Add(BoolVariable('with_linuxusbmouse', 'Build with Linux USB 
mouse support', True))
+        self.opts.Add(BoolVariable('with_linuxevdev',    'Build with Linux 
evdev support', True))
+        self.opts.Add(BoolVariable('with_wiimote',       'Build with Wiimote 
support', False))
+        self.opts.Add(BoolVariable('ignore_errors',      'Ignore any fatal 
configuration errors', False))
+        self.opts.Add('optional_sources', 'Additional source files', [])
+        
+    def build(self):
+        if not ('configure' in COMMAND_LINE_TARGETS):
+            if ARGUMENTS != {}:
+                print "Error: You must not supply arguments to the compile 
step."
+                print "Use:"
+                print ""
+                print "  scons configure [ARGUMENTS]..."
+                print ""
+                print "If you want to change the build configuration."
+                os.sys.exit(1)
+
+            self.define_options("config.py", {})
+            self.env = Environment(options = self.opts)
+            Help(self.opts.GenerateHelpText(self.env))
+
+            self.opts.Update(self.env)
+            self.env['CPPPATH'] += ['.', 'src/']
+
+            Clean('pingus', ['config.py', 'config.h'])
+
+            libpingus = self.env.StaticLibrary('pingus',
+                                               
Glob('external/binreloc-2.0/*.c') + \
+                                               
Glob('external/tinygettext/*.cpp') + \
+                                               Glob('src/editor/*.cpp') + \
+                                               
Glob('src/engine/display/*.cpp') + \
+                                               Glob('src/engine/gui/*.cpp') + \
+                                               Glob('src/engine/input/*.cpp') 
+ \
+                                               Glob('src/engine/screen/*.cpp') 
+ \
+                                               Glob('src/engine/sound/*.cpp') 
+ \
+                                               Glob('src/lisp/*.cpp') + \
+                                               Glob('src/math/*.cpp') + \
+                                               Glob('src/pingus/*.cpp') + \
+                                               
Glob('src/pingus/actions/*.cpp') + \
+                                               
Glob('src/pingus/colliders/*.cpp') + \
+                                               
Glob('src/pingus/components/*.cpp') + \
+                                               Glob('src/pingus/movers/*.cpp') 
+ \
+                                               
Glob('src/pingus/particles/*.cpp') + \
+                                               
Glob('src/pingus/screens/*.cpp') + \
+                                               
Glob('src/pingus/worldmap/*.cpp') + \
+                                               
Glob('src/pingus/worldobjs/*.cpp') + \
+                                               Glob('src/util/*.cpp') + \
+                                               self.env['optional_sources'])
+            self.env.Program('pingus', ['src/main.cpp', libpingus])
+
+            for filename in Glob("test/*_test.cpp", strings=True):
+                self.env.Program(filename[:-4], [filename, libpingus])
+
+    def install(self):
+        AddOption('--prefix',
+                  dest='prefix',
+                  type='string',
+                  nargs=1,
+                  action='store',
+                  metavar='DIR',
+                  help='installation prefix')
+        self.env = Environment(PREFIX = GetOption('prefix'))
+
+        for filename in []:
+            Default(env.Install('$PREFIX/bin', filename))
+
+project = Project()
+
 ## EOF ##





reply via email to

[Prev in Thread] Current Thread [Next in Thread]