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