Home | History | Annotate | Download | only in scons-tools
      1 import fnmatch
      2 import os
      3 
      4 def generate( env ): 
      5    def Glob( env, includes = None, excludes = None, dir = '.' ):
      6       """Adds Glob( includes = Split( '*' ), excludes = None, dir = '.')
      7        helper function to environment.
      8 
      9        Glob both the file-system files.
     10 
     11        includes: list of file name pattern included in the return list when matched.
     12        excludes: list of file name pattern exluced from the return list.
     13 
     14        Example:
     15        sources = env.Glob( ("*.cpp", '*.h'), "~*.cpp", "#src" )
     16       """
     17       def filterFilename(path):
     18          abs_path = os.path.join( dir, path )
     19          if not os.path.isfile(abs_path):
     20             return 0
     21          fn = os.path.basename(path)
     22          match = 0
     23          for include in includes:
     24             if fnmatch.fnmatchcase( fn, include ):
     25                match = 1
     26                break
     27          if match == 1 and not excludes is None:
     28             for exclude in excludes:
     29                if fnmatch.fnmatchcase( fn, exclude ):
     30                   match = 0
     31                   break
     32          return match
     33       if includes is None:
     34          includes = ('*',)
     35       elif type(includes) in ( type(''), type(u'') ):
     36          includes = (includes,)
     37       if type(excludes) in ( type(''), type(u'') ):
     38          excludes = (excludes,)
     39       dir = env.Dir(dir).abspath
     40       paths = os.listdir( dir )
     41       def makeAbsFileNode( path ):
     42          return env.File( os.path.join( dir, path ) )
     43       nodes = filter( filterFilename, paths )
     44       return map( makeAbsFileNode, nodes )
     45 
     46    from SCons.Script import Environment
     47    Environment.Glob = Glob
     48 
     49 def exists(env):
     50     """
     51     Tool always exists.
     52     """
     53     return True
     54