diff --git a/SConstruct b/SConstruct new file mode 100644 index 0000000..354328d --- /dev/null +++ b/SConstruct @@ -0,0 +1,77 @@ +#This file is part of Photon (http://photon.sourceforge.net) +#Copyright (C) 2004-2005 James Turk +# +# Author: +# James Turk (jpt2433@rit.edu) +# +# Version: +# $Id: SConstruct,v 1.1 2005/03/01 07:50:22 cozman Exp $ + +import os,os.path +import glob + +subDirs = ['', 'audio', 'math', 'util', 'util/filesys'] +libName = 'photon' + +class Builder: + def __init__(self, subDirs): + self.subDirs = subDirs + self.srcDirs = self.combine('src',self.subDirs) + self.incDirs = self.combine('include',self.subDirs) + self.srcFiles = Flatten([self.getFiles(d, '*.cpp') + for d in self.srcDirs]) + self.srcFiles = [f.replace('src','build') for f in self.srcFiles] + self.incFiles = Flatten([self.getFiles(d, '*.hpp') + for d in self.incDirs]) + + def combine(self, prefix, dirs): + """Add a prefix to all directories""" + return [os.path.join(prefix,d) for d in dirs] + + def getFiles(self, path, pat): + """Get all files which match a glob in a directory""" + return glob.glob( os.path.join(path,pat) ) + + def checkLibrary(self, name, lib, header): + """Check if a library/header pair exists, report and bail if not""" + if not self.conf.CheckLibWithHeader(lib, header, 'C++'): + print name,'not found, exiting.' + Exit(1) + + def checkDepends(self): + """Check all the dependencies for the current project""" + self.env = Environment(ENV = os.environ) + self.conf = Configure(self.env) + self.checkLibrary('OpenAL','OpenAL32','al.h') + self.checkLibrary('OpenGL','opengl32','gl/gl.h') + self.checkLibrary('GLFW','GLFW','glfw.h') + self.env = self.conf.Finish() + + def namedBuild(self, name, target, buildType, default=False, **extra): + """Add a build target which can be addressed by name on the command line + name - Name to give to the target (using Alias) + target - Actual build target + buildType - string describing what is being built (eg. Library, PDF) + [default - whether or not target is built by default (False)] + **extra - any options which should be given to the builder + (eg. source='foo.c', CPPPATH='/foo/bar/baz') + """ + # create a string with the desired buildType + regStr = "self.env."+buildType+"(target = target, **extra)" + # alias the build to the given name + reg = self.env.Alias(name, eval(regStr)) + if default: + self.env.Default(reg) + return reg + + def build(self): + BuildDir('build', 'src', duplicate=0) + self.checkDepends() + + self.namedBuild('photon', os.path.join('lib',libName), 'Library', + default=True, + source = self.srcFiles, CPPPATH = self.incDirs) + + +b = Builder(subDirs) +b.build()