From cb492ee682b8b49425c674b7dbca227ba9dfbdcd Mon Sep 17 00:00:00 2001 From: Martin Moene Date: Fri, 8 Mar 2019 16:42:05 +0100 Subject: [PATCH] [skip ci] Add Python script to create OpenCppCoverage report(nonstd-lite project issue 29, thanks to OpenCppCoverage) - https://github.com/martinmoene/nonstd-lite-project/issues/29 --- project/CodeBlocks/span-lite.cbp | 1 + script/create-cov-rpt.py | 114 +++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+) create mode 100644 script/create-cov-rpt.py diff --git a/project/CodeBlocks/span-lite.cbp b/project/CodeBlocks/span-lite.cbp index cc42875..6000388 100644 --- a/project/CodeBlocks/span-lite.cbp +++ b/project/CodeBlocks/span-lite.cbp @@ -35,6 +35,7 @@ Stephan T. Lavavej + diff --git a/script/create-cov-rpt.py b/script/create-cov-rpt.py new file mode 100644 index 0000000..ce116c1 --- /dev/null +++ b/script/create-cov-rpt.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python +# +# Copyright 2019-2019 by Martin Moene +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +# +# script/create-cov-rpt.py, Python 3.4 and later +# + +import argparse +import os +import re +import sys +import subprocess + +# Configuration: + +cfg_github_project = 'span-lite' +cfg_github_user = 'martinmoene' +cfg_prj_folder_level = 3 + +tpl_coverage_cmd = 'opencppcoverage --no_aggregate_by_file --sources {src} -- {exe}' + +# End configuration. + +def project_folder( f, args ): + """Project root""" + if args.prj_folder: + return args.prj_folder + return os.path.normpath( os.path.join( os.path.dirname( os.path.abspath(f) ), '../' * args.prj_folder_level ) ) + +def executable_folder( f ): + """Folder where the xecutable is""" + return os.path.dirname( os.path.abspath(f) ) + +def executable_name( f ): + """Folder where the executable is""" + return os.path.basename( f ) + +def createCoverageReport( f, args ): + print( "Creating coverage report for project '{usr}/{prj}', '{file}':". + format( usr=args.user, prj=args.project, file=f ) ) + cmd = tpl_coverage_cmd.format( folder=executable_folder(f), src=project_folder(f, args), exe=executable_name(f) ) + if args.verbose: + print( "> {}".format(cmd) ) + if not args.dry_run: + os.chdir( executable_folder(f) ) + subprocess.call( cmd, shell=False ) + os.chdir( project_folder(f, args) ) + +def createCoverageReports( args ): + for f in args.executable: + createCoverageReport( f, args ) + +def createCoverageReportFromCommandLine(): + """Collect arguments from the commandline and create coverage report.""" + parser = argparse.ArgumentParser( + description='Create coverage report.', + epilog="""""", + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + + parser.add_argument( + 'executable', + metavar='executable', + type=str, + nargs=1, + help='executable to report on') + + parser.add_argument( + '-n', '--dry-run', + action='store_true', + help='do not execute conan commands') + + parser.add_argument( + '-v', '--verbose', + action='count', + default=0, + help='level of progress reporting') + + parser.add_argument( + '--user', + metavar='u', + type=str, + default=cfg_github_user, + help='github user name') + + parser.add_argument( + '--project', + metavar='p', + type=str, + default=cfg_github_project, + help='github project name') + + parser.add_argument( + '--prj-folder', + metavar='f', + type=str, + default=None, + help='project root folder') + + parser.add_argument( + '--prj-folder-level', + metavar='n', + type=int, + default=cfg_prj_folder_level, + help='project root folder level from executable') + + createCoverageReports( parser.parse_args() ) + +if __name__ == '__main__': + createCoverageReportFromCommandLine() + +# end of file