Index: build/config/mac/write_pkg_info.py |
diff --git a/build/config/mac/write_pkg_info.py b/build/config/mac/write_pkg_info.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b03e77928059d67cd8e20a82536faad81cc1847e |
--- /dev/null |
+++ b/build/config/mac/write_pkg_info.py |
@@ -0,0 +1,47 @@ |
+# 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 plistlib |
+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. |
+ if os.path.exists(args.output): |
+ os.unlink(args.output) |
+ |
+ plist = plistlib.readPlist(args.plist) |
+ package_type = plist['CFBundlePackageType'] |
+ if package_type != 'APPL': |
+ raise ValueError('Expected CFBundlePackageType to be %s, got %s' % \ |
+ ('AAPL', 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()) |