| Index: site_scons/site_tools/chromium_load_component.py
|
| ===================================================================
|
| --- site_scons/site_tools/chromium_load_component.py (revision 0)
|
| +++ site_scons/site_tools/chromium_load_component.py (revision 0)
|
| @@ -0,0 +1,81 @@
|
| +# Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +"""
|
| +Tool module for managing conditional loading of components in a
|
| +Chromium build (i.e., the LOAD= command-line argument).
|
| +"""
|
| +
|
| +from SCons.Script import *
|
| +
|
| +def generate(env):
|
| +
|
| + class LoadComponent:
|
| + """
|
| + Class for deciding if a given component name is to be included
|
| + based on a list of included names, optionally prefixed with '-'
|
| + to exclude the name.
|
| + """
|
| + def __init__(self, load=[], names=[]):
|
| + """
|
| + Initialize a class with a list of names for possible loading.
|
| +
|
| + Arguments:
|
| + load: list of elements in the LOAD= specification
|
| + names: name(s) that represent this global collection
|
| + """
|
| + self.included = set([c for c in load if not c.startswith('-')])
|
| + self.excluded = set([c[1:] for c in load if c.startswith('-')])
|
| +
|
| + # Remove the global collection name(s) from the included list.
|
| + # This supports (e.g.) specifying 'webkit' so the top-level of the
|
| + # hierarchy will read up the subsystem, and then 'test_shell'
|
| + # as one specific sub-component within 'webkit'.
|
| + self.included = self.included - set(names)
|
| +
|
| + if not self.included:
|
| + self.included = ['all']
|
| +
|
| + def __call__(self, component):
|
| + """
|
| + Returns True if the specified component should be loaded,
|
| + based on the initialized included and excluded lists.
|
| + """
|
| + return (component in self.included or
|
| + ('all' in self.included and not component in self.excluded))
|
| +
|
| + def ChromiumLoadComponentSConscripts(env, *args, **kw):
|
| + """
|
| + Returns a list of SConscript files to load, based on LOAD=.
|
| +
|
| + SConscript files specified without keyword arguments are returned
|
| + unconditionally. SConscript files specified with a keyword arguments
|
| + (e.g. chrome = 'chrome.scons') are loaded only if the LOAD= line
|
| + indicates their keyword argument should be included in the load.
|
| + """
|
| + try:
|
| + load = ARGUMENTS.get('LOAD').split(',')
|
| + except AttributeError:
|
| + load = []
|
| +
|
| + try:
|
| + names = kw['LOAD_NAMES']
|
| + except KeyError:
|
| + names = []
|
| + else:
|
| + del kw['LOAD_NAMES']
|
| +
|
| + load_component = LoadComponent(load, names)
|
| +
|
| + result = list(args)
|
| + for module, sconscript in kw.items():
|
| + if load_component(module):
|
| + result.append(sconscript)
|
| +
|
| + return Flatten(result)
|
| +
|
| + env.AddMethod(ChromiumLoadComponentSConscripts)
|
| +
|
| +def exists(env):
|
| + return True
|
|
|
| Property changes on: site_scons/site_tools/chromium_load_component.py
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|