1cb93a386Sopenharmony_ci#!/usr/bin/env python 2cb93a386Sopenharmony_ci 3cb93a386Sopenharmony_ci# Copyright 2019 Google LLC. All rights reserved. 4cb93a386Sopenharmony_ci# Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci# found in the LICENSE file. 6cb93a386Sopenharmony_ci 7cb93a386Sopenharmony_ci""" 8cb93a386Sopenharmony_ci Opens |base_manifest| and copies the contents to |manifest| then traverses 9cb93a386Sopenharmony_ci |root_dir| and appends every file as a Fuchsia package manifest entry to 10cb93a386Sopenharmony_ci |manifest|. 11cb93a386Sopenharmony_ci""" 12cb93a386Sopenharmony_ci 13cb93a386Sopenharmony_ciimport argparse 14cb93a386Sopenharmony_ciimport os 15cb93a386Sopenharmony_ciimport subprocess 16cb93a386Sopenharmony_ci 17cb93a386Sopenharmony_ciparser = argparse.ArgumentParser() 18cb93a386Sopenharmony_ciparser.add_argument('--root_dir', dest='root_dir', action='store', required=True) 19cb93a386Sopenharmony_ciparser.add_argument('--base_manifest', dest='base_manifest', action='store', required=True) 20cb93a386Sopenharmony_ciparser.add_argument('--manifest', dest='manifest', action='store', required=True) 21cb93a386Sopenharmony_ciparser.add_argument('--deps', dest='deps', action='store', required=True) 22cb93a386Sopenharmony_ciparser.add_argument('--root_build_dir', dest='root_build_dir', action='store', required=True) 23cb93a386Sopenharmony_ciargs = parser.parse_args() 24cb93a386Sopenharmony_ci 25cb93a386Sopenharmony_ciroot_dir = args.root_dir 26cb93a386Sopenharmony_ciif not os.path.exists(root_dir): 27cb93a386Sopenharmony_ci print "--root_dir path specified: " + root_dir + " doesn't exist.\n" 28cb93a386Sopenharmony_ci exit(1) 29cb93a386Sopenharmony_ci 30cb93a386Sopenharmony_cibase_manifest = args.base_manifest 31cb93a386Sopenharmony_ciif not os.path.exists(base_manifest): 32cb93a386Sopenharmony_ci print "--base_manifest specified: " + base_manifest + " doesn't exist.\n" 33cb93a386Sopenharmony_ci exit(1) 34cb93a386Sopenharmony_ci 35cb93a386Sopenharmony_cimanifest = args.manifest 36cb93a386Sopenharmony_ciroot_build_dir = args.root_build_dir 37cb93a386Sopenharmony_ci 38cb93a386Sopenharmony_ci# Prepend |base_manifest| contents to |manifest|. 39cb93a386Sopenharmony_cideps_file = open(args.deps, 'w') 40cb93a386Sopenharmony_cirelative_path = os.path.relpath(args.manifest, root_build_dir) 41cb93a386Sopenharmony_cideps_file.write('%s: ' % relative_path) 42cb93a386Sopenharmony_ci 43cb93a386Sopenharmony_ciout_file = open(manifest, 'w') 44cb93a386Sopenharmony_ciwith open(base_manifest, 'r') as in_file: 45cb93a386Sopenharmony_ci base_content = in_file.readlines() 46cb93a386Sopenharmony_ci 47cb93a386Sopenharmony_cifor base_line in base_content: 48cb93a386Sopenharmony_ci out_file.write(base_line) 49cb93a386Sopenharmony_ci base_line_list = base_line.split("=") 50cb93a386Sopenharmony_ci if len(base_line_list) != 2: 51cb93a386Sopenharmony_ci print "Error: Base manifest line format error. Expected \"lhs=rhs\" but got: " + base_line 52cb93a386Sopenharmony_ci exit(1) 53cb93a386Sopenharmony_ci base_line_rhs = base_line_list[1].strip() 54cb93a386Sopenharmony_ci relative_path = os.path.relpath(base_line_rhs, root_build_dir) 55cb93a386Sopenharmony_ci deps_file.write(relative_path + " ") 56cb93a386Sopenharmony_ci 57cb93a386Sopenharmony_ci# Append all files discovered under |root_dir| to |manifest|. 58cb93a386Sopenharmony_cifiles = subprocess.check_output(["find", root_dir, "-type", "f"]) 59cb93a386Sopenharmony_cifile_lines = files.splitlines() 60cb93a386Sopenharmony_ci 61cb93a386Sopenharmony_cifor file in file_lines: 62cb93a386Sopenharmony_ci source = file 63cb93a386Sopenharmony_ci if not source.startswith(root_dir): 64cb93a386Sopenharmony_ci print "Error: source path " + source + " is not under |root_dir|\n" 65cb93a386Sopenharmony_ci exit(1) 66cb93a386Sopenharmony_ci dest = source[len(root_dir):] 67cb93a386Sopenharmony_ci out_file.write('data%s=' % dest) 68cb93a386Sopenharmony_ci out_file.write('%s\n' % source) 69cb93a386Sopenharmony_ci relative_path = os.path.relpath(source, root_build_dir) 70cb93a386Sopenharmony_ci deps_file.write(relative_path + " ") 71cb93a386Sopenharmony_ci 72cb93a386Sopenharmony_ciout_file.close() 73cb93a386Sopenharmony_cideps_file.close() 74