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