blob: 96040bfd8d66f9cc23b821885f6e01b5fd34ae2b [file] [log] [blame]
#!/usr/bin/env fuchsia-vendored-python
# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Lint as: python3
import argparse
import json
import os
import sys
# Generates shebang files for binaries so they can be invoked from the shell.
# Generated files look like this:
# #!resolve fuchsia-pkg://fuchsia.com/<package-name>#bin/<bin-name>
def main():
parser = argparse.ArgumentParser(
"Generate shebang files for shell binaries"
)
parser.add_argument("--package-name", required=True)
parser.add_argument(
"--input-distribution-manifest",
required=True,
type=argparse.FileType("r"),
help="Path to a distribution manifest with all shell binaries",
)
parser.add_argument(
"--output-directory",
required=True,
help="Path to a directory to store generated shebang files",
)
parser.add_argument(
"--output-distribution-manifest",
required=True,
help="Path to write output distribution manifest",
)
parser.add_argument(
"--depfile",
required=True,
help="Depfile for listing generated shebang files as additional inputs",
)
args = parser.parse_args()
input_dist = json.load(args.input_distribution_manifest)
output_dist = []
shebang_files = []
for dist in input_dist:
dest = dist["destination"]
if not dest.startswith("bin/"):
continue
shebang_file = os.path.join(
args.output_directory, "__untraced_shebangs__", dest
)
shebang_files.append(shebang_file)
os.makedirs(os.path.dirname(shebang_file), exist_ok=True)
with open(shebang_file, "w") as f:
f.write(
f"#!resolve fuchsia-pkg://fuchsia.com/{args.package_name}#{dest}\n"
)
output_dist.append(dict(dist, source=shebang_file))
with open(
args.output_distribution_manifest, "w"
) as output_distribution_manifest:
json.dump(
output_dist,
output_distribution_manifest,
indent=2,
sort_keys=True,
separators=(",", ": "),
)
with open(args.depfile, "w") as depfile:
depfile.write(
"{}: {}\n".format(
args.output_distribution_manifest.name, " ".join(shebang_files)
)
)
return 0
if __name__ == "__main__":
sys.exit(main())