tor-browser

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

write_pkg_info.py (1700B)


      1 # Copyright 2016 The Chromium Authors
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import argparse
      6 import os
      7 import plist_util
      8 import sys
      9 
     10 # This script creates a PkgInfo file for an OS X .app bundle's plist.
     11 # Usage: python write_pkg_info.py --plist Foo.app/Contents/Info.plist \
     12 #           --output Foo.app/Contents/PkgInfo
     13 
     14 
     15 def Main():
     16  parser = argparse.ArgumentParser(
     17      description='A script to write PkgInfo files for .app bundles.')
     18  parser.add_argument('--plist',
     19                      required=True,
     20                      help='Path to the Info.plist for the .app.')
     21  parser.add_argument('--output',
     22                      required=True,
     23                      help='Path to the desired output file.')
     24  args = parser.parse_args()
     25 
     26  # Remove the output if it exists already.
     27  try:
     28    os.unlink(args.output)
     29  except FileNotFoundError:
     30    pass
     31 
     32  plist = plist_util.LoadPList(args.plist)
     33  package_type = plist['CFBundlePackageType']
     34  if package_type != 'APPL':
     35    raise ValueError('Expected CFBundlePackageType to be %s, got %s' % \
     36        ('APPL', package_type))
     37 
     38  # The format of PkgInfo is eight characters, representing the bundle type
     39  # and bundle signature, each four characters. If that is missing, four
     40  # '?' characters are used instead.
     41  signature_code = plist.get('CFBundleSignature', '????')
     42  if len(signature_code) != 4:
     43    raise ValueError('CFBundleSignature should be exactly four characters, ' +
     44                     'got %s' % signature_code)
     45 
     46  with open(args.output, 'w') as fp:
     47    fp.write('%s%s' % (package_type, signature_code))
     48  return 0
     49 
     50 
     51 if __name__ == '__main__':
     52  sys.exit(Main())