12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- # Copyright 2016 The Chromium Authors. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- import argparse
- import os
- import plist_util
- import sys
- # This script creates a PkgInfo file for an OS X .app bundle's plist.
- # Usage: python write_pkg_info.py --plist Foo.app/Contents/Info.plist \
- # --output Foo.app/Contents/PkgInfo
- def Main():
- parser = argparse.ArgumentParser(
- description='A script to write PkgInfo files for .app bundles.')
- parser.add_argument('--plist',
- required=True,
- help='Path to the Info.plist for the .app.')
- parser.add_argument('--output',
- required=True,
- help='Path to the desired output file.')
- args = parser.parse_args()
- # Remove the output if it exists already.
- try:
- os.unlink(args.output)
- except FileNotFoundError:
- pass
- plist = plist_util.LoadPList(args.plist)
- package_type = plist['CFBundlePackageType']
- if package_type != 'APPL':
- raise ValueError('Expected CFBundlePackageType to be %s, got %s' % \
- ('APPL', package_type))
- # The format of PkgInfo is eight characters, representing the bundle type
- # and bundle signature, each four characters. If that is missing, four
- # '?' characters are used instead.
- signature_code = plist.get('CFBundleSignature', '????')
- if len(signature_code) != 4:
- raise ValueError('CFBundleSignature should be exactly four characters, ' +
- 'got %s' % signature_code)
- with open(args.output, 'w') as fp:
- fp.write('%s%s' % (package_type, signature_code))
- return 0
- if __name__ == '__main__':
- sys.exit(Main())
|