#!/usr/bin/env python # # Copyright 2013 The Flutter Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """ Genrate a Fuchsia FAR Archive from an asset manifest and a signing key. """ import argparse import collections import json import os import subprocess import sys # Generates the manifest and returns the file. def GenerateManifest(package_dir): full_paths = [] for root, dirs, files in os.walk(package_dir): for f in files: common_prefix = os.path.commonprefix([root, package_dir]) rel_path = os.path.relpath(os.path.join(root, f), common_prefix) from_package = os.path.abspath(os.path.join(package_dir, rel_path)) full_paths.append('%s=%s' % (rel_path, from_package)) parent_dir = os.path.abspath(os.path.join(package_dir, os.pardir)) manifest_file_name = os.path.basename(package_dir) + '.manifest' manifest_path = os.path.join(parent_dir, manifest_file_name) with open(manifest_path, 'w') as f: for item in full_paths: f.write("%s\n" % item) return manifest_path def CreateFarPackage(pm_bin, package_dir, signing_key, dst_dir): manifest_path = GenerateManifest(package_dir) pm_command_base = [ pm_bin, '-m', manifest_path, '-k', signing_key, '-o', dst_dir ] # Build the package subprocess.check_call(pm_command_base + ['build']) # Archive the package subprocess.check_call(pm_command_base + ['archive']) return 0 def main(): parser = argparse.ArgumentParser() parser.add_argument('--pm-bin', dest='pm_bin', action='store', required=True) parser.add_argument( '--package-dir', dest='package_dir', action='store', required=True) parser.add_argument( '--signing-key', dest='signing_key', action='store', required=True) parser.add_argument( '--manifest-file', dest='manifest_file', action='store', required=True) args = parser.parse_args() assert os.path.exists(args.pm_bin) assert os.path.exists(args.package_dir) assert os.path.exists(args.signing_key) assert os.path.exists(args.manifest_file) pm_command_base = [ args.pm_bin, '-o', args.package_dir, '-k', args.signing_key, '-m', args.manifest_file, ] # Build the package subprocess.check_call(pm_command_base + ['build']) # Archive the package subprocess.check_call(pm_command_base + ['archive']) return 0 if __name__ == '__main__': sys.exit(main())