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 |