# \ingroup builder
import SCons.Builder, SCons.Action, SCons.Environment, SCons.Node.FS
+try:
+ from SCons.Tool.install import installFunc, stringFunc
+except:
+ installFunc = SCons.Environment.installFunc
+ stringFunc = SCons.Environment.installString
def recursiveChildren(f):
rv = {}
map(rv.setdefault,f)
for c in f:
- map(rv.setdefault,recursiveChildren(c.children()))
+ if c is not None : map(rv.setdefault,recursiveChildren(c.children()))
return rv.keys()
def filterIncludes(files, extensions):
return [ f for f in files
- if f.get_suffix() in extensions ]
+ if f is not None and f.get_suffix() in extensions ]
+
+def filterIncludesInv(files, extensions):
+ return [ f for f in files
+ if f is not None and '.' + str(f).split('.',1)[-1] not in extensions ]
def filterDirectory(files, dir):
return [ f for f in files
- if f.abspath.startswith(dir.abspath) ]
+ if f is not None and f.abspath.startswith(dir.abspath) ]
def excludeDirectories(files, dirs):
return [ f for f in files
def emitter(target, source, env):
source = recursiveChildren(source)
source = filterIncludes(source, env['CPP_INCLUDE_EXTENSIONS'])
+ source = filterIncludesInv(source, env['CPP_EXCLUDE_EXTENSIONS'])
source = filterDirectory(source, env['INSTALL_BASE'])
source = excludeDirectories(source, env['INCLUDE_IGNORED_DIRECTORIES'])
self.source = source
def __call__(self, target, source, env):
- SCons.Environment.installFunc([self.target], [self.source], env)
+ installFunc([self.target], [self.source], env)
def generator(target, source, env, for_signature):
return [ SCons.Action.Action( Installer(trg, src),
- lambda a,b,c,s=SCons.Environment.installString([trg], [src], env):s )
+ lambda a,b,c,s=stringFunc([trg], [src], env):s )
for trg, src in zip(target,source) ]
InstallIncludes = SCons.Builder.Builder(emitter = emitter,