summaryrefslogtreecommitdiff
path: root/src/3rd_party-static/jsoncpp/scons-tools/globtool.py
blob: 811140e8aab620e44d9aeea8c509a56730f80964 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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