Index: test/lib/TestGyp.py |
diff --git a/test/lib/TestGyp.py b/test/lib/TestGyp.py |
index ff954189da93048ef6964d3d44d840a8dfa37686..04e773dff42b3abe6acff5cf8a2a45eff0e9053c 100644 |
--- a/test/lib/TestGyp.py |
+++ b/test/lib/TestGyp.py |
@@ -1325,6 +1325,74 @@ class TestGypXcode(TestGypBase): |
return self.workpath(*result) |
+class TestGypXcodeNinja(TestGypXcode): |
+ """ |
+ Subclass for testing the GYP Xcode Ninja generator. |
+ """ |
+ format = 'xcode-ninja' |
+ |
+ def initialize_build_tool(self): |
+ super(TestGypXcodeNinja, self).initialize_build_tool() |
+ # When using '--build', make sure ninja is first in the format list. |
+ self.formats.insert(0, 'ninja') |
+ |
+ def build(self, gyp_file, target=None, **kw): |
+ """ |
+ Runs an xcodebuild using the .xcodeproj generated from the specified |
+ gyp_file. |
+ """ |
+ build_config = self.configuration |
+ if build_config and build_config.endswith(('-iphoneos', |
+ '-iphonesimulator')): |
+ build_config, sdk = self.configuration.split('-') |
+ kw['arguments'] = kw.get('arguments', []) + ['-sdk', sdk] |
+ |
+ with self._build_configuration(build_config): |
+ return super(TestGypXcodeNinja, self).build( |
+ gyp_file.replace('.gyp', '.ninja.gyp'), target, **kw) |
+ |
+ @contextmanager |
+ def _build_configuration(self, build_config): |
+ config = self.configuration |
+ self.configuration = build_config |
+ try: |
+ yield |
+ finally: |
+ self.configuration = config |
+ |
+ def built_file_path(self, name, type=None, **kw): |
+ result = [] |
+ chdir = kw.get('chdir') |
+ if chdir: |
+ result.append(chdir) |
+ result.append('out') |
+ result.append(self.configuration_dirname()) |
+ subdir = kw.get('subdir') |
+ if subdir and type != self.SHARED_LIB: |
+ result.append(subdir) |
+ result.append(self.built_file_basename(name, type, **kw)) |
+ return self.workpath(*result) |
+ |
+ def up_to_date(self, gyp_file, target=None, **kw): |
+ result = self.build(gyp_file, target, **kw) |
+ if not result: |
+ stdout = self.stdout() |
+ if 'ninja: no work to do' not in stdout: |
+ self.report_not_up_to_date() |
+ self.fail_test() |
+ return result |
+ |
+ def run_built_executable(self, name, *args, **kw): |
+ """ |
+ Runs an executable built by xcodebuild + ninja. |
+ """ |
+ configuration = self.configuration_dirname() |
+ os.environ['DYLD_LIBRARY_PATH'] = os.path.join('out', configuration) |
+ # Enclosing the name in a list avoids prepending the original dir. |
+ program = [self.built_file_path(name, type=self.EXECUTABLE, **kw)] |
+ return self.run(program=program, *args, **kw) |
+ |
+ |
format_class_list = [ |
TestGypGypd, |
TestGypAndroid, |
@@ -1334,6 +1402,7 @@ format_class_list = [ |
TestGypMSVSNinja, |
TestGypNinja, |
TestGypXcode, |
+ TestGypXcodeNinja, |
] |
def TestGyp(*args, **kw): |