diff options
Diffstat (limited to 'mesonbuild/backend/ninjabackend.py')
-rw-r--r-- | mesonbuild/backend/ninjabackend.py | 108 |
1 files changed, 29 insertions, 79 deletions
diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index ba249ed..086d4e1 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -613,13 +613,17 @@ int dummy; self.create_target_alias(target_name, outfile) self.processed_targets[target.get_id()] = True + def generate_coverage_command(self, elem, outputs): + elem.add_item('COMMAND', self.environment.get_build_command() + + ['--internal', 'coverage'] + + outputs + + [self.environment.get_source_dir(), + self.environment.get_build_dir(), + self.environment.get_log_dir()]) + def generate_coverage_rules(self, outfile): e = NinjaBuildElement(self.all_outputs, 'meson-coverage', 'CUSTOM_COMMAND', 'PHONY') - e.add_item('COMMAND', self.environment.get_build_command() + - ['--internal', 'coverage', - self.environment.get_source_dir(), - self.environment.get_build_dir(), - self.environment.get_log_dir()]) + self.generate_coverage_command(e, []) e.add_item('description', 'Generates coverage reports.') e.write(outfile) # Alias that runs the target defined above @@ -627,80 +631,26 @@ int dummy; self.generate_coverage_legacy_rules(outfile) def generate_coverage_legacy_rules(self, outfile): - (gcovr_exe, gcovr_new_rootdir, lcov_exe, genhtml_exe) = environment.find_coverage_tools() - added_rule = False - if gcovr_exe: - # gcovr >= 3.1 interprets rootdir differently - if gcovr_new_rootdir: - rootdir = self.environment.get_build_dir() - else: - rootdir = self.environment.get_source_dir(), - added_rule = True - elem = NinjaBuildElement(self.all_outputs, 'meson-coverage-xml', 'CUSTOM_COMMAND', '') - elem.add_item('COMMAND', [gcovr_exe, '-x', '-r', rootdir, - '-o', os.path.join(self.environment.get_log_dir(), 'coverage.xml')]) - elem.add_item('DESC', 'Generating XML coverage report.') - elem.write(outfile) - # Alias that runs the target defined above - self.create_target_alias('meson-coverage-xml', outfile) - elem = NinjaBuildElement(self.all_outputs, 'meson-coverage-text', 'CUSTOM_COMMAND', '') - elem.add_item('COMMAND', [gcovr_exe, '-r', rootdir, - '-o', os.path.join(self.environment.get_log_dir(), 'coverage.txt')]) - elem.add_item('DESC', 'Generating text coverage report.') - elem.write(outfile) - # Alias that runs the target defined above - self.create_target_alias('meson-coverage-text', outfile) - if lcov_exe and genhtml_exe: - added_rule = True - htmloutdir = os.path.join(self.environment.get_log_dir(), 'coveragereport') - covinfo = os.path.join(self.environment.get_log_dir(), 'coverage.info') - phony_elem = NinjaBuildElement(self.all_outputs, 'meson-coverage-html', 'phony', os.path.join(htmloutdir, 'index.html')) - phony_elem.write(outfile) - # Alias that runs the target defined above - self.create_target_alias('meson-coverage-html', outfile) - elem = NinjaBuildElement(self.all_outputs, os.path.join(htmloutdir, 'index.html'), 'CUSTOM_COMMAND', '') - - subproject_dir = self.build.get_subproject_dir() - command = [lcov_exe, - '--directory', self.environment.get_build_dir(), - '--capture', - '--output-file', covinfo, - '--no-checksum', - '&&', lcov_exe, - '--extract', - covinfo, - os.path.join(self.environment.get_source_dir(), '*'), - '--output-file', covinfo, - '&&', lcov_exe, - '--remove', - covinfo, - os.path.join(self.environment.get_source_dir(), subproject_dir, '*'), - '--output-file', covinfo, - '&&', genhtml_exe, - '--prefix', self.environment.get_build_dir(), - '--output-directory', htmloutdir, - '--title', 'Code coverage', - '--legend', - '--show-details', - covinfo] - elem.add_item('COMMAND', command) - elem.add_item('DESC', 'Generating HTML coverage report.') - elem.write(outfile) - elif gcovr_exe and gcovr_new_rootdir: - added_rule = True - htmloutdir = os.path.join(self.environment.get_log_dir(), 'coveragereport') - phony_elem = NinjaBuildElement(self.all_outputs, 'meson-coverage-html', 'phony', os.path.join(htmloutdir, 'index.html')) - phony_elem.write(outfile) - # Alias that runs the target defined above - self.create_target_alias('meson-coverage-html', outfile) - elem = NinjaBuildElement(self.all_outputs, os.path.join(htmloutdir, 'index.html'), 'CUSTOM_COMMAND', '') - command = [gcovr_exe, '--html', '--html-details', '-r', self.environment.get_build_dir(), - '-o', os.path.join(htmloutdir, 'index.html')] - elem.add_item('COMMAND', command) - elem.add_item('DESC', 'Generating HTML coverage report.') - elem.write(outfile) - if not added_rule: - mlog.warning('coverage requested but neither gcovr nor lcov/genhtml found.') + e = NinjaBuildElement(self.all_outputs, 'meson-coverage-xml', 'CUSTOM_COMMAND', 'PHONY') + self.generate_coverage_command(e, ['--xml']) + e.add_item('description', 'Generates XML coverage report.') + e.write(outfile) + # Alias that runs the target defined above + self.create_target_alias('meson-coverage-xml', outfile) + + e = NinjaBuildElement(self.all_outputs, 'meson-coverage-text', 'CUSTOM_COMMAND', 'PHONY') + self.generate_coverage_command(e, ['--text']) + e.add_item('description', 'Generates text coverage report.') + e.write(outfile) + # Alias that runs the target defined above + self.create_target_alias('meson-coverage-text', outfile) + + e = NinjaBuildElement(self.all_outputs, 'meson-coverage-html', 'CUSTOM_COMMAND', 'PHONY') + self.generate_coverage_command(e, ['--html']) + e.add_item('description', 'Generates HTML coverage report.') + e.write(outfile) + # Alias that runs the target defined above + self.create_target_alias('meson-coverage-html', outfile) def generate_install(self, outfile): install_data_file = os.path.join(self.environment.get_scratch_dir(), 'install.dat') |