Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(43)

Unified Diff: site_scons/site_tools/chromium_load_component.py

Issue 11430: Fix use of LOAD= with WantSystemLib()... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698