| Index: build/toolchain/mac/copy_bundle_data.py
|
| diff --git a/build/toolchain/mac/copy_bundle_data.py b/build/toolchain/mac/copy_bundle_data.py
|
| deleted file mode 100644
|
| index 170e8c3eaff445525d327a90a5f63dc0f45b8507..0000000000000000000000000000000000000000
|
| --- a/build/toolchain/mac/copy_bundle_data.py
|
| +++ /dev/null
|
| @@ -1,132 +0,0 @@
|
| -# 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 errno
|
| -import os
|
| -import shutil
|
| -import subprocess
|
| -import sys
|
| -
|
| -# Copies a macOS or iOS resource into a bundle. Special handling is given to
|
| -# .strings files.
|
| -#
|
| -# Usage: python copy_bundle_data.py path/to/source path/of/destination
|
| -#
|
| -# Note that if |source| is a directory, its contents will be copied to |dest|,
|
| -# rather than copying the |source| directory itself. Example:
|
| -# copy_bundle_data.py out/Release/Foo.framework out/Release/App/Foo.framework
|
| -# The contents of Foo.framwork will be copied into the destination path, which
|
| -# includes the name of the destination framework, which is also Foo.framework.
|
| -
|
| -def DetectEncoding(data, default_encoding='UTF-8'):
|
| - """Detects the encoding used by |data| from the Byte-Order-Mark if present.
|
| -
|
| - Args:
|
| - data: string whose encoding needs to be detected
|
| - default_encoding: encoding returned if no BOM is found.
|
| -
|
| - Returns:
|
| - The encoding determined from the BOM if present or |default_encoding| if
|
| - no BOM was found.
|
| - """
|
| - if data.startswith('\xFE\xFF'):
|
| - return 'UTF-16BE'
|
| -
|
| - if data.startswith('\xFF\xFE'):
|
| - return 'UTF-16LE'
|
| -
|
| - if data.startswith('\xEF\xBB\xBF'):
|
| - return 'UTF-8'
|
| -
|
| - return default_encoding
|
| -
|
| -
|
| -def CopyStringsFile(source, dest, strings_format):
|
| - """Copies a .strings file from |source| to |dest| and convert it to UTF-16.
|
| -
|
| - Args:
|
| - source: string, path to the source file
|
| - dest: string, path to the destination file
|
| - """
|
| - with open(source, 'rb') as source_file:
|
| - data = source_file.read()
|
| -
|
| - # Xcode's CpyCopyStringsFile / builtin-copyStrings seems to call
|
| - # CFPropertyListCreateFromXMLData() behind the scenes; at least it prints
|
| - # CFPropertyListCreateFromXMLData(): Old-style plist parser: missing
|
| - # semicolon in dictionary.
|
| - # on invalid files. Do the same kind of validation.
|
| - import CoreFoundation as CF
|
| - cfdata = CF.CFDataCreate(None, data, len(data))
|
| - plist, error = CF.CFPropertyListCreateFromXMLData(None, cfdata, 0, None)
|
| - if error:
|
| - raise ValueError(error)
|
| -
|
| - if strings_format == 'legacy':
|
| - encoding = DetectEncoding(data)
|
| - with open(dest, 'wb') as dest_file:
|
| - dest_file.write(data.decode(encoding).encode('UTF-16'))
|
| - else:
|
| - cfformat = {
|
| - 'xml1': CF.kCFPropertyListXMLFormat_v1_0,
|
| - 'binary1': CF.kCFPropertyListBinaryFormat_v1_0,
|
| - }[strings_format]
|
| - cfdata, error = CF.CFPropertyListCreateData(
|
| - None, plist, CF.kCFPropertyListBinaryFormat_v1_0,
|
| - 0, None)
|
| - if error:
|
| - raise ValueError(error)
|
| -
|
| - data = CF.CFDataGetBytes(
|
| - cfdata, CF.CFRangeMake(0, CF.CFDataGetLength(cfdata)), None)
|
| - with open(dest, 'wb') as dest_file:
|
| - dest_file.write(data)
|
| -
|
| -
|
| -def CopyFile(source, dest, strings_format):
|
| - """Copies a file or directory from |source| to |dest|.
|
| -
|
| - Args:
|
| - source: string, path to the source file
|
| - dest: string, path to the destination file
|
| - """
|
| - try:
|
| - shutil.rmtree(dest)
|
| - except OSError as e:
|
| - if e.errno == errno.ENOENT:
|
| - pass
|
| - elif e.errno == errno.ENOTDIR:
|
| - os.unlink(dest)
|
| - else:
|
| - raise
|
| -
|
| - _, extension = os.path.splitext(source)
|
| - if extension == '.strings':
|
| - CopyStringsFile(source, dest, strings_format)
|
| - return
|
| -
|
| - # If the source is a directory, add a trailing slash so its contents get
|
| - # copied, rather than copying the directory itself.
|
| - if os.path.isdir(source) and not source.endswith('/'):
|
| - source += '/'
|
| -
|
| - subprocess.check_call(
|
| - ['rsync', '--recursive', '--perms', '--links', source, dest])
|
| -
|
| -
|
| -def Main():
|
| - parser = argparse.ArgumentParser(
|
| - description='copy source to destination for the creation of a bundle')
|
| - parser.add_argument('--strings-format',
|
| - choices=('xml1', 'binary1', 'legacy'), default='legacy',
|
| - help='convert .strings file to format (default: %(default)s)')
|
| - parser.add_argument('source', help='path to source file or directory')
|
| - parser.add_argument('dest', help='path to destination')
|
| - args = parser.parse_args()
|
| -
|
| - CopyFile(args.source, args.dest, args.strings_format)
|
| -
|
| -if __name__ == '__main__':
|
| - sys.exit(Main())
|
|
|