| 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 |