tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

pgomerge.py (1832B)


      1 #!/usr/bin/python
      2 # This Source Code Form is subject to the terms of the Mozilla Public
      3 # License, v. 2.0. If a copy of the MPL was not distributed with this
      4 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
      5 
      6 # Usage: pgomerge.py <binary basename> <dist/bin>
      7 # Gathers .pgc files from dist/bin and merges them into
      8 # $PWD/$basename.pgd using pgomgr, then deletes them.
      9 # No errors if any of these files don't exist.
     10 
     11 import sys, os, os.path, subprocess
     12 if not sys.platform == "win32":
     13    raise Exception("This script was only meant for Windows.")
     14 
     15 def MergePGOFiles(basename, pgddir, pgcdir):
     16  """Merge pgc files produced from an instrumented binary
     17     into the pgd file for the second pass of profile-guided optimization
     18     with MSVC.  |basename| is the name of the DLL or EXE without the
     19     extension.  |pgddir| is the path that contains <basename>.pgd
     20     (should be the objdir it was built in).  |pgcdir| is the path
     21     containing basename!N.pgc files, which is probably dist/bin.
     22     Calls pgomgr to merge each pgc file into the pgd, then deletes
     23     the pgc files."""
     24  if not os.path.isdir(pgddir) or not os.path.isdir(pgcdir):
     25    return
     26  pgdfile = os.path.abspath(os.path.join(pgddir, basename + ".pgd"))
     27  if not os.path.isfile(pgdfile):
     28    return
     29  for file in os.listdir(pgcdir):
     30    if file.startswith(basename+"!") and file.endswith(".pgc"):
     31      try:
     32        pgcfile = os.path.normpath(os.path.join(pgcdir, file))
     33        subprocess.call(['pgomgr', '-merge',
     34                         pgcfile,
     35                         pgdfile])
     36        os.remove(pgcfile)
     37      except OSError:
     38        pass
     39 
     40 if __name__ == '__main__':
     41  if len(sys.argv) != 3:
     42      print >>sys.stderr, "Usage: pgomerge.py <binary basename> <dist/bin>"
     43      sys.exit(1)
     44  MergePGOFiles(sys.argv[1], os.getcwd(), sys.argv[2])