cpp_photon/SConstruct

78 lines
2.9 KiB
Python
Raw Normal View History

2005-03-01 07:50:22 +00:00
#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()