diff options
Diffstat (limited to 'site_scons/site_tools/chromium_builders.py')
-rw-r--r-- | site_scons/site_tools/chromium_builders.py | 136 |
1 files changed, 96 insertions, 40 deletions
diff --git a/site_scons/site_tools/chromium_builders.py b/site_scons/site_tools/chromium_builders.py index 01b8fcc..24b35f1 100644 --- a/site_scons/site_tools/chromium_builders.py +++ b/site_scons/site_tools/chromium_builders.py @@ -8,54 +8,110 @@ wrappers around Hammer builders. This gives us a central place for any customization we need to make to the different things we build. """ +import SCons.Node +import _Node_MSVS as MSVS + +class Null(object): + def __new__(cls, *args, **kwargs): + if '_inst' not in vars(cls): + cls._inst = super(type, cls).__new__(cls, *args, **kwargs) + return cls._inst + def __init__(self, *args, **kwargs): pass + def __call__(self, *args, **kwargs): return self + def __repr__(self): return "Null()" + def __nonzero__(self): return False + def __getattr__(self, name): return self + def __setattr__(self, name, val): return self + def __delattr__(self, name): return self + def __getitem__(self, name): return self + +class ChromeFileList(MSVS.FileList): + def Append(self, *args): + for element in args: + self.append(element) + def Extend(self, *args): + for element in args: + self.extend(element) + def Remove(self, *args): + for top, lists, nonlists in MSVS.FileListWalk(self, topdown=False): + for element in args: + try: + top.remove(element) + except ValueError: + pass + def Replace(self, old, new): + for top, lists, nonlists in MSVS.FileListWalk(self, topdown=False): + try: + i = top.index(old) + except ValueError: + pass + else: + top[i] = new + +import __builtin__ +__builtin__.ChromeFileList = ChromeFileList + +def compilable_files(sources): + if not hasattr(sources, 'entries'): + return [x for x in sources if not str(x).endswith('.h')] + result = [] + for top, folders, nonfolders in MSVS.FileListWalk(sources): + result.extend([x for x in nonfolders if not str(x).endswith('.h')]) + return result + +def ChromeProgram(env, target, source, *args, **kw): + source = compilable_files(source) + result = env.ComponentProgram(target, source, *args, **kw) + if env.get('INCREMENTAL'): + env.Precious(result) + return result + +def ChromeTestProgram(env, target, source, *args, **kw): + source = compilable_files(source) + result = env.ComponentTestProgram(target, source, *args, **kw) + if env.get('INCREMENTAL'): + env.Precious(*result) + return result + +def ChromeStaticLibrary(env, target, source, *args, **kw): + source = compilable_files(source) + kw['COMPONENT_STATIC'] = True + return env.ComponentLibrary(target, source, *args, **kw) + +def ChromeSharedLibrary(env, target, source, *args, **kw): + source = compilable_files(source) + kw['COMPONENT_STATIC'] = False + result = [env.ComponentLibrary(target, source, *args, **kw)[0]] + if env.get('INCREMENTAL'): + env.Precious(result) + return result + +def ChromeObject(env, *args, **kw): + return env.ComponentObject(*args, **kw) + +def ChromeMSVSFolder(env, *args, **kw): + if not env.Bit('msvs'): + return Null() + return env.MSVSFolder(*args, **kw) + +def ChromeMSVSProject(env, *args, **kw): + if not env.Bit('msvs'): + return Null() + return env.MSVSProject(*args, **kw) + +def ChromeMSVSSolution(env, *args, **kw): + if not env.Bit('msvs'): + return Null() + return env.MSVSSolution(*args, **kw) + def generate(env): - def ChromeProgram(env, *args, **kw): - result = env.ComponentProgram(*args, **kw) - if env.get('INCREMENTAL'): - env.Precious(result) - return result env.AddMethod(ChromeProgram) - - def ChromeTestProgram(env, *args, **kw): - result = env.ComponentTestProgram(*args, **kw) - if env.get('INCREMENTAL'): - env.Precious(*result) - return result env.AddMethod(ChromeTestProgram) - - def ChromeStaticLibrary(env, *args, **kw): - kw['COMPONENT_STATIC'] = True - return env.ComponentLibrary(*args, **kw) env.AddMethod(ChromeStaticLibrary) - - def ChromeSharedLibrary(env, *args, **kw): - kw['COMPONENT_STATIC'] = False - result = [env.ComponentLibrary(*args, **kw)[0]] - if env.get('INCREMENTAL'): - env.Precious(result) - return result env.AddMethod(ChromeSharedLibrary) - - def ChromeObject(env, *args, **kw): - return env.ComponentObject(*args, **kw) env.AddMethod(ChromeObject) - - def ChromeMSVSFolder(env, *args, **kw): - if env.Bit('msvs'): - return env.MSVSFolder(*args, **kw) - return [] env.AddMethod(ChromeMSVSFolder) - - def ChromeMSVSProject(env, *args, **kw): - if env.Bit('msvs'): - return env.MSVSProject(*args, **kw) - return [] env.AddMethod(ChromeMSVSProject) - - def ChromeMSVSSolution(env, *args, **kw): - if env.Bit('msvs'): - return env.MSVSSolution(*args, **kw) - return [] env.AddMethod(ChromeMSVSSolution) def exists(env): |