1import fnmatch
2import os
3
4def 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
49def exists(env):
50    """
51    Tool always exists.
52    """
53    return True
54