import fnmatch import os def generate( env ): def Glob( env, includes = None, excludes = None, dir = '.' ): """Adds Glob( includes = Split( '*' ), excludes = None, dir = '.') helper function to environment. Glob both the file-system files. includes: list of file name pattern included in the return list when matched. excludes: list of file name pattern exluced from the return list. Example: sources = env.Glob( ("*.cpp", '*.h'), "~*.cpp", "#src" ) """ def filterFilename(path): abs_path = os.path.join( dir, path ) if not os.path.isfile(abs_path): return 0 fn = os.path.basename(path) match = 0 for include in includes: if fnmatch.fnmatchcase( fn, include ): match = 1 break if match == 1 and not excludes is None: for exclude in excludes: if fnmatch.fnmatchcase( fn, exclude ): match = 0 break return match if includes is None: includes = ('*',) elif type(includes) in ( type(''), type(u'') ): includes = (includes,) if type(excludes) in ( type(''), type(u'') ): excludes = (excludes,) dir = env.Dir(dir).abspath paths = os.listdir( dir ) def makeAbsFileNode( path ): return env.File( os.path.join( dir, path ) ) nodes = filter( filterFilename, paths ) return map( makeAbsFileNode, nodes ) from SCons.Script import Environment Environment.Glob = Glob def exists(env): """ Tool always exists. """ return True