Chromium Code Reviews| Index: pylib/gyp/generator/xcode.py | 
| diff --git a/pylib/gyp/generator/xcode.py b/pylib/gyp/generator/xcode.py | 
| index 7e5f79f1704871eab663fd7c877ea838a3f8cab4..499308934baf0722e72046e0529d61859678baa4 100644 | 
| --- a/pylib/gyp/generator/xcode.py | 
| +++ b/pylib/gyp/generator/xcode.py | 
| @@ -73,6 +73,8 @@ generator_additional_non_configuration_keys = [ | 
| 'mac_framework_headers', | 
| 'mac_framework_private_headers', | 
| 'xcode_create_dependents_test_runner', | 
| + 'xctest_bundle', | 
| + 'xctest_host', | 
| ] | 
| # We want to let any rules apply to files that are resources also. | 
| @@ -642,6 +644,7 @@ def GenerateOutput(target_list, target_dicts, data, params): | 
| 'static_library': 'com.apple.product-type.library.static', | 
| 'executable+bundle': 'com.apple.product-type.application', | 
| 'loadable_module+bundle': 'com.apple.product-type.bundle', | 
| + 'loadable_module+xctest': 'com.apple.product-type.bundle.unit-test', | 
| 'shared_library+bundle': 'com.apple.product-type.framework', | 
| } | 
| @@ -652,10 +655,17 @@ def GenerateOutput(target_list, target_dicts, data, params): | 
| type = spec['type'] | 
| is_bundle = int(spec.get('mac_bundle', 0)) | 
| + is_xctest = int(spec.get('xctest_bundle', 0)) | 
| if type != 'none': | 
| type_bundle_key = type | 
| if is_bundle: | 
| type_bundle_key += '+bundle' | 
| + if is_xctest: | 
| + type_bundle_key += '+xctest' | 
| 
 
Mark Mentovai
2013/10/30 16:40:27
This code snippet seems to say that loadable_modul
 
jonwall
2013/10/30 19:07:38
Done.
 
 | 
| + assert type == 'loadable_module', ( | 
| + 'xctest_bundle targets must have type loadable_module (target %s)' % | 
| + target_name) | 
| + | 
| xctarget_type = gyp.xcodeproj_file.PBXNativeTarget | 
| try: | 
| target_properties['productType'] = _types[type_bundle_key] | 
| @@ -668,6 +678,9 @@ def GenerateOutput(target_list, target_dicts, data, params): | 
| assert not is_bundle, ( | 
| 'mac_bundle targets cannot have type none (target "%s")' % | 
| target_name) | 
| + assert not is_xctest, ( | 
| + 'xctest_bundle targets cannot have type none (target "%s")' % | 
| + target_name) | 
| target_product_name = spec.get('product_name') | 
| if target_product_name is not None: | 
| @@ -709,6 +722,20 @@ def GenerateOutput(target_list, target_dicts, data, params): | 
| # by the generator during Finalize. | 
| xct.support_target = support_xct | 
| + if is_xctest and 'xctest_host' in spec: | 
| + test_host = spec['xctest_host'] | 
| + test_host_qualified_target = gyp.common.QualifiedTarget( | 
| + build_file, test_host, toolset) | 
| + assert test_host_qualified_target in spec['dependencies'], ( | 
| + 'xctest_host (%s) must be listed as a dependency. (target %s)' % | 
| 
 
Mark Mentovai
2013/10/30 16:40:27
Why? Can’t it be an indirect dependency?
 
jonwall
2013/10/30 19:07:38
It looks like spec['dependencies'] includes indire
 
Mark Mentovai
2013/10/30 19:57:31
jonwall wrote:
 
jonwall
2013/10/30 21:04:57
Yes.
 
 | 
| + (test_host, target_name)) | 
| + test_host_target = target_dicts[test_host_qualified_target] | 
| + assert test_host_target['type'] == 'executable', ( | 
| + 'xctest_host must have type executable (target %s)' % target_name) | 
| + # Prune any duplicated dependencies. | 
| 
 
Mark Mentovai
2013/10/30 16:40:27
Why?
 
jonwall
2013/10/30 19:07:38
If you comment out this line, you'll see the test
 
Mark Mentovai
2013/10/30 19:57:31
This sounds like a generic problem with making any
 
jonwall
2013/10/30 21:04:57
Okay. It looks like I can get this to work by clon
 
 | 
| + spec['dependencies'] = [dep for dep in spec['dependencies'] | 
| + if dep not in test_host_target['dependencies']] | 
| + | 
| prebuild_index = 0 | 
| # Add custom shell script phases for "actions" sections. |