#!/usr/bin/env python # Copyright (c) 2013 Google Inc. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. from optparse import OptionParser import glob import os import subprocess parser = OptionParser() parser.add_option('--exe', dest='exe') parser.add_option('--vcbindir', dest='vcbindir') parser.add_option('--pgd', dest='pgd') (options, args) = parser.parse_args() # Instrumented binaries fail to run unless the Visual C++'s bin dir is included # in the PATH environment variable. os.environ['PATH'] = os.environ['PATH'] + os.pathsep + options.vcbindir # Run Instrumented binary. The profile will be recorded into *.pgc file. subprocess.call([options.exe]) # Merge *.pgc files into a *.pgd (Profile-Guided Database) file. subprocess.call(['pgomgr', '/merge', options.pgd]) # *.pgc files are no longer necessary. Clear all of them. pgd_file = os.path.abspath(options.pgd) pgd_dir = os.path.dirname(pgd_file) (pgd_basename, _) = os.path.splitext(os.path.basename(pgd_file)) pgc_filepattern = os.path.join(pgd_dir, '%s!*.pgc' % pgd_basename) pgc_files= glob.glob(pgc_filepattern) for pgc_file in pgc_files: os.unlink(pgc_file)