18        p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 
   19        stdout, stderr = p.communicate()
 
   21        p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 
   22        stdout, stderr = p.communicate(input=data)
 
   24    return stdout.decode(
'utf-8'), stderr.decode(
'utf-8'), p.returncode
 
 
   28    parser = argparse.ArgumentParser(description=
'llvm-coverage')
 
   29    parser.add_argument(
'--insights',       help=
'C++ Insights binary',      required=
True)
 
   30    parser.add_argument(
'--llvm-prof-dir',  help=
'LLVM profiles data dir',   default=
'')
 
   31    parser.add_argument(
'--llvm-prof',      help=
'llvm-profdata binary',     default=
'llvm-profdata')
 
   32    parser.add_argument(
'--llvm-cov',       help=
'llvm-cov binary',          default=
'llvm-cov')
 
   33    parser.add_argument(
'--format',         help=
'Output format: html/text', default=
'text')
 
   34    parser.add_argument(
'--output',         help=
'Output filename',          required=
True)
 
   35    parser.add_argument(
'args', nargs=argparse.REMAINDER)
 
   36    args = vars(parser.parse_args())
 
   38    insightsPath     = args[
'insights']
 
   39    rawProfiles      = glob.glob(os.path.join(args[
'llvm_prof_dir'], 
"*.profraw"))
 
   40    profilesManifest = os.path.join(args[
'llvm_prof_dir'], 
'profiles.manifest')
 
   41    profilesData     = os.path.join(args[
'llvm_prof_dir'], 
'insights.profdata')
 
   43    with open(profilesManifest, 
"w") 
as manifest:
 
   44        manifest.write(
"\n".join(rawProfiles))
 
   46    cmd = [args[
'llvm_prof'], 
'merge', 
'-sparse', 
'-f', profilesManifest, 
'-o', profilesData]
 
   47    stdout, stderr, returncode = 
runCmd(cmd)
 
   50    action = 
'show' if args[
'format'] != 
'lcov' else 'export' 
   52    cmd = [args[
'llvm_cov'], action, insightsPath, f
'-instr-profile={profilesData}', f
'--format={args["format"]}', 
'-ignore-filename-regex=build/']
 
   54    stdout, stderr, returncode = 
runCmd(cmd)
 
   57    open(args[
'output'], 
'w').write(stdout)