tor-browser

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

create_bundle_wrapper_script.py (4763B)


      1 #!/usr/bin/env python3
      2 # Copyright 2018 The Chromium Authors
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 
      6 """Create a wrapper script to manage an Android App Bundle."""
      7 
      8 import argparse
      9 import os
     10 import string
     11 import sys
     12 
     13 from util import build_utils
     14 import action_helpers  # build_utils adds //build to sys.path.
     15 
     16 SCRIPT_TEMPLATE = string.Template("""\
     17 #!/usr/bin/env python3
     18 #
     19 # This file was generated by build/android/gyp/create_bundle_wrapper_script.py
     20 
     21 import os
     22 import sys
     23 
     24 def main():
     25  script_directory = os.path.dirname(__file__)
     26  resolve = lambda p: p if p is None else os.path.abspath(os.path.join(
     27      script_directory, p))
     28  sys.path.append(resolve(${WRAPPED_SCRIPT_DIR}))
     29  import apk_operations
     30 
     31  additional_apk_paths = [resolve(p) for p in ${ADDITIONAL_APK_PATHS}]
     32  apk_operations.RunForBundle(output_directory=resolve(${OUTPUT_DIR}),
     33                              bundle_path=resolve(${BUNDLE_PATH}),
     34                              bundle_apks_path=resolve(${BUNDLE_APKS_PATH}),
     35                              additional_apk_paths=additional_apk_paths,
     36                              aapt2_path=resolve(${AAPT2_PATH}),
     37                              keystore_path=resolve(${KEYSTORE_PATH}),
     38                              keystore_password=${KEYSTORE_PASSWORD},
     39                              keystore_alias=${KEY_NAME},
     40                              package_name=${PACKAGE_NAME},
     41                              command_line_flags_file=${FLAGS_FILE},
     42                              proguard_mapping_path=resolve(${MAPPING_PATH}),
     43                              target_cpu=${TARGET_CPU},
     44                              system_image_locales=${SYSTEM_IMAGE_LOCALES},
     45                              default_modules=${DEFAULT_MODULES},
     46                              is_official_build=${IS_OFFICIAL_BUILD})
     47 
     48 if __name__ == '__main__':
     49  sys.exit(main())
     50 """)
     51 
     52 def main(args):
     53  args = build_utils.ExpandFileArgs(args)
     54  parser = argparse.ArgumentParser()
     55  parser.add_argument('--script-output-path', required=True,
     56                      help='Output path for executable script.')
     57  parser.add_argument('--bundle-path', required=True)
     58  parser.add_argument('--bundle-apks-path', required=True)
     59  parser.add_argument(
     60      '--additional-apk-path',
     61      action='append',
     62      dest='additional_apk_paths',
     63      default=[],
     64      help='Paths to APKs to be installed prior to --apk-path.')
     65  parser.add_argument('--package-name', required=True)
     66  parser.add_argument('--aapt2-path', required=True)
     67  parser.add_argument('--keystore-path', required=True)
     68  parser.add_argument('--keystore-password', required=True)
     69  parser.add_argument('--key-name', required=True)
     70  parser.add_argument('--command-line-flags-file')
     71  parser.add_argument('--proguard-mapping-path')
     72  parser.add_argument('--target-cpu')
     73  parser.add_argument('--system-image-locales')
     74  parser.add_argument('--default-modules', nargs='*', default=[])
     75  parser.add_argument('--is-official-build', action='store_true')
     76  args = parser.parse_args(args)
     77 
     78  def relativize(path):
     79    """Returns the path relative to the output script directory."""
     80    if path is None:
     81      return path
     82    return os.path.relpath(path, os.path.dirname(args.script_output_path))
     83 
     84  wrapped_script_dir = os.path.join(os.path.dirname(__file__), os.path.pardir)
     85  wrapped_script_dir = relativize(wrapped_script_dir)
     86  with open(args.script_output_path, 'w') as script:
     87    script_dict = {
     88        'WRAPPED_SCRIPT_DIR':
     89        repr(wrapped_script_dir),
     90        'OUTPUT_DIR':
     91        repr(relativize('.')),
     92        'BUNDLE_PATH':
     93        repr(relativize(args.bundle_path)),
     94        'BUNDLE_APKS_PATH':
     95        repr(relativize(args.bundle_apks_path)),
     96        'ADDITIONAL_APK_PATHS':
     97        [relativize(p) for p in args.additional_apk_paths],
     98        'PACKAGE_NAME':
     99        repr(args.package_name),
    100        'AAPT2_PATH':
    101        repr(relativize(args.aapt2_path)),
    102        'KEYSTORE_PATH':
    103        repr(relativize(args.keystore_path)),
    104        'KEYSTORE_PASSWORD':
    105        repr(args.keystore_password),
    106        'KEY_NAME':
    107        repr(args.key_name),
    108        'MAPPING_PATH':
    109        repr(relativize(args.proguard_mapping_path)),
    110        'FLAGS_FILE':
    111        repr(args.command_line_flags_file),
    112        'TARGET_CPU':
    113        repr(args.target_cpu),
    114        'SYSTEM_IMAGE_LOCALES':
    115        repr(action_helpers.parse_gn_list(args.system_image_locales)),
    116        'DEFAULT_MODULES':
    117        repr(args.default_modules),
    118        'IS_OFFICIAL_BUILD':
    119        repr(args.is_official_build),
    120    }
    121    script.write(SCRIPT_TEMPLATE.substitute(script_dict))
    122  os.chmod(args.script_output_path, 0o750)
    123  return 0
    124 
    125 
    126 if __name__ == '__main__':
    127  sys.exit(main(sys.argv[1:]))