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

Unified Diff: pylib/gyp/generator/xcode.py

Issue 99223: - Use a local flag to tell if the project already has an 'All' target, and do... (Closed) Base URL: http://gyp.googlecode.com/svn/trunk/
Patch Set: '' Created 11 years, 8 months 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
« no previous file with comments | « no previous file | pylib/gyp/input.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pylib/gyp/generator/xcode.py
===================================================================
--- pylib/gyp/generator/xcode.py (revision 452)
+++ pylib/gyp/generator/xcode.py (working copy)
@@ -130,6 +130,9 @@
# targets is full list of targets in the project.
targets = []
+ # does the it define it's own "all"?
+ has_custom_all = False
+
# targets_for_all is the list of ordinary_targets that should be listed
# in this project's "All" target. It includes each non_runtest_target
# that does not have suppress_wildcard set.
@@ -148,6 +151,9 @@
if not target.get('suppress_wildcard', False):
targets_for_all.append(xcode_target)
+ if target_name == 'All':
Mark Mentovai 2009/04/30 17:56:37 Maybe check target_name.lower() == 'all'? This ha
+ has_custom_all = True;
+
# If this is a test target, add its test runner target.
if target.get('test', 0):
# Make a target to run the test. It should have one dependency, the
@@ -187,11 +193,10 @@
self.project.SortGroups()
# Create an "All" target if there's more than one target in this project
- # file. Put the "All" target it first so that people opening up the
- # project for the first time will build everything by default. Note that
- # the "All" target may have no dependencies if each target has
- # suppress_wildcard set.
- if len(targets) > 1:
+ # file and the project didn't define its own "All" target. Put a generated
+ # "All" target it first so that people opening up the project for the first
Mark Mentovai 2009/04/30 17:56:37 Get rid of "it"
+ # time will build everything by default.
+ if len(targets_for_all) > 1 and not has_custom_all:
xccl = gyp.xcodeproj_file.XCConfigurationList({'buildConfigurations': []})
for configuration in configurations:
xcbc = gyp.xcodeproj_file.XCBuildConfiguration({'name': configuration})
@@ -254,53 +259,57 @@
# and once all project files are sorted, Finalize2 can come in and update
# these references.
- # TODO(mark): Make more general?
- # As a special case for Chromium, add a "Run All Tests" target in
- # all.gyp:All to depend on all tests and run them.
- if os.path.basename(self.gyp_path) == 'all.gyp' and \
- len(self.build_file_dict['targets']) == 1 and \
- self.build_file_dict['targets'][0]['target_name'] == 'All':
- qualified_target = gyp.common.QualifiedTarget(self.gyp_path, 'All')
- xcode_target = xcode_targets[qualified_target]
- if isinstance(xcode_target, gyp.xcodeproj_file.PBXAggregateTarget):
- # Collect all the test targets.
- all_tests = []
- pbxtds = xcode_target.GetProperty('dependencies')
- for pbxtd in pbxtds:
- pbxcip = pbxtd.GetProperty('targetProxy')
- dependency_xct = pbxcip.GetProperty('remoteGlobalIDString')
- target_dict = xcode_target_to_target_dict[dependency_xct]
- if target_dict and target_dict.get('test', 0):
- all_tests.append(dependency_xct)
+ # To support making a "test runner" target that will run all the test that
Mark Mentovai 2009/04/30 17:56:37 all the tests (s)
+ # are dependencies of any given target, we look for
Mark Mentovai 2009/04/30 17:56:37 Say "direct dependents". Dependencies go the othe
+ # xcode_create_dependents_test_runner being set on an Aggregate target,
+ # and generate a second target that will run the tests found under the
+ # marked target.
+ for bf_tgt in self.build_file_dict['targets']:
+ if bf_tgt.get('xcode_create_dependents_test_runner', 0):
+ tgt_name = bf_tgt['target_name']
+ qualified_target = gyp.common.QualifiedTarget(self.gyp_path,
+ tgt_name)
+ xcode_target = xcode_targets[qualified_target]
+ if isinstance(xcode_target, gyp.xcodeproj_file.PBXAggregateTarget):
+ # Collect all the test targets.
+ all_tests = []
+ pbxtds = xcode_target.GetProperty('dependencies')
+ for pbxtd in pbxtds:
+ pbxcip = pbxtd.GetProperty('targetProxy')
+ dependency_xct = pbxcip.GetProperty('remoteGlobalIDString')
+ target_dict = xcode_target_to_target_dict[dependency_xct]
+ if target_dict and target_dict.get('test', 0):
+ all_tests.append(dependency_xct)
- # We have to directly depend on all tests and then directly run
- # them all ourselves. If we used the runners, it would allow them
- # to be run in parallel, and as noted on the runner creation, that
- # could cause things to fail.
- if len(all_tests) > 0:
- run_all_target = gyp.xcodeproj_file.PBXAggregateTarget({
- 'name': 'Run All Tests',
- 'productName': 'All',
- },
- parent=self.project)
- for test_target in all_tests:
- # TODO(tvl): chromium specific
- run_all_target.AddDependency(test_target)
- ttpn = test_target.GetProperty('productName')
- proj_name = test_target.PBXProjectAncestor().Name()
- nice_name = '"' + ttpn + '" from "' + proj_name + '"'
- script = 'echo note: running ' + nice_name + '\n' + \
- 'exec "${BUILT_PRODUCTS_DIR}/' + ttpn + \
- '" --gtest_print_time\nexit 1\n'
- ssbp = gyp.xcodeproj_file.PBXShellScriptBuildPhase({
- 'name': 'Run ' + nice_name,
- 'shellScript': script,
- 'showEnvVarsInLog': 0,
- })
- run_all_target.AppendProperty('buildPhases', ssbp)
+ # We have to directly depend on all tests and then directly run
+ # them all ourselves. If we used the runners, it would allow them
+ # to be run in parallel, and as noted on the runner creation, that
+ # could cause things to fail.
+ if len(all_tests) > 0:
+ run_all_target = gyp.xcodeproj_file.PBXAggregateTarget({
+ 'name': 'Run %s Tests' % tgt_name,
+ 'productName': tgt_name,
+ },
+ parent=self.project)
+ for test_target in all_tests:
+ # TODO(tvl): chromium specific
+ run_all_target.AddDependency(test_target)
+ ttpn = test_target.GetProperty('productName')
+ proj_name = test_target.PBXProjectAncestor().Name()
+ nice_name = '"' + ttpn + '" from "' + proj_name + '"'
+ script = 'echo note: running ' + nice_name + '\n' + \
+ 'exec "${BUILT_PRODUCTS_DIR}/' + ttpn + \
+ '" --gtest_print_time\nexit 1\n'
+ ssbp = gyp.xcodeproj_file.PBXShellScriptBuildPhase({
+ 'name': 'Run ' + nice_name,
+ 'shellScript': script,
+ 'showEnvVarsInLog': 0,
+ })
+ run_all_target.AppendProperty('buildPhases', ssbp)
- # Add the test runner target to the project file.
- self.project.AppendProperty('targets', run_all_target)
+ # Insert after the target this was generated from.
Mark Mentovai 2009/04/30 17:56:37 Awkward. "Insert the test runner after the relate
+ idx = self.project._properties['targets'].index(xcode_target)
+ self.project._properties['targets'].insert(idx + 1, run_all_target)
# Update all references to other projects, to make sure that the lists of
# remote products are complete. Otherwise, Xcode will fill them in when
« no previous file with comments | « no previous file | pylib/gyp/input.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698