Chromium Code Reviews| Index: test/lib/TestGyp.py |
| =================================================================== |
| --- test/lib/TestGyp.py (revision 1787) |
| +++ test/lib/TestGyp.py (working copy) |
| @@ -6,6 +6,8 @@ |
| TestGyp.py: a testing framework for GYP integration tests. |
| """ |
| +import collections |
| +import itertools |
| import os |
| import re |
| import shutil |
| @@ -532,6 +534,108 @@ |
| kw['match'] = self.match_single_line |
| return self.build(gyp_file, target, **kw) |
| + |
| +class TestGypCMake(TestGypBase): |
| + """ |
| + Subclass for testing the GYP CMake generator. |
|
Nico
2013/11/19 16:35:28
", using cmake's ninja backend"?
bungeman-chromium
2013/11/20 20:54:51
Done. Way back when I had this set up so it could
|
| + """ |
| + format = 'cmake' |
| + build_tool_list = ['cmake'] |
| + ALL = 'all' |
| + |
| + def cmake_build(self, gyp_file, target=None, **kw): |
| + arguments = kw.get('arguments', [])[:] |
| + |
| + self.build_tool_list = ['cmake'] |
| + self.initialize_build_tool() |
| + |
| + chdir = os.path.join(kw.get('chdir', '.'), |
| + 'out', |
| + self.configuration_dirname()) |
| + kw['chdir'] = chdir |
| + |
| + arguments.append('-G') |
| + arguments.append('Ninja') |
| + |
| + kw['arguments'] = arguments |
| + |
| + stderr = kw.get('stderr', None) |
| + if stderr: |
| + kw['stderr'] = stderr.split('$$$')[0] |
| + |
| + self.run(program=self.build_tool, **kw) |
| + |
| + def ninja_build(self, gyp_file, target=None, **kw): |
| + arguments = kw.get('arguments', [])[:] |
| + |
| + self.build_tool_list = ['ninja'] |
| + self.initialize_build_tool() |
| + |
| + # Add a -C output/path to the command line. |
| + arguments.append('-C') |
| + arguments.append(os.path.join('out', self.configuration_dirname())) |
| + |
| + if target not in (None, self.DEFAULT): |
| + arguments.append(target) |
| + |
| + kw['arguments'] = arguments |
| + |
| + stderr = kw.get('stderr', None) |
| + if stderr: |
| + stderrs = stderr.split('$$$') |
| + kw['stderr'] = stderrs[1] if len(stderrs) > 1 else '' |
| + |
| + return self.run(program=self.build_tool, **kw) |
| + |
| + def build(self, gyp_file, target=None, status=0, **kw): |
| + # Two tools must be run to build, cmake and the ninja. |
| + # Allow cmake to succeed when the overall expectation is to fail. |
| + if status is None: |
| + kw['status'] = None |
| + else: |
| + if not isinstance(status, collections.Iterable): status = (status,) |
| + kw['status'] = list(itertools.chain((0,), status)) |
| + self.cmake_build(gyp_file, target, **kw) |
| + kw['status'] = status |
| + self.ninja_build(gyp_file, target, **kw) |
| + |
| + def run_built_executable(self, name, *args, **kw): |
| + # Enclosing the name in a list avoids prepending the original dir. |
| + program = [self.built_file_path(name, type=self.EXECUTABLE, **kw)] |
| + if sys.platform == 'darwin': |
| + configuration = self.configuration_dirname() |
| + os.environ['DYLD_LIBRARY_PATH'] = os.path.join('out', configuration) |
| + return self.run(program=program, *args, **kw) |
| + |
| + 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()) |
| + if type == self.STATIC_LIB: |
| + if sys.platform != 'darwin': |
| + result.append('obj.target') |
| + elif type == self.SHARED_LIB: |
| + if sys.platform != 'darwin' and sys.platform != 'win32': |
| + result.append('lib.target') |
| + 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.ninja_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 |
| + |
| + |
| class TestGypMake(TestGypBase): |
| """ |
| Subclass for testing the GYP Make generator. |
| @@ -993,6 +1097,7 @@ |
| format_class_list = [ |
| TestGypGypd, |
| TestGypAndroid, |
| + TestGypCMake, |
| TestGypMake, |
| TestGypMSVS, |
| TestGypNinja, |