blob: c10cc7792f5a7ba9bd3b7488f143885ce63bc7c4 [file] [log] [blame]
#!/usr/bin/env fuchsia-vendored-python
# Copyright 2019 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.
"""
Pre-processes the project.json file emitted by GN to only include target names.
This should be run as part of `fx set` with the flags
`--ide=json --json-ide-script=//scripts/prepare_targets.py`.
This generates a file `//out/default/project_lite.json` which contains a list of
target names available in the build. This file is read by `complete.py` to
provide completions for `fx build`.
Pre-processing the `project.json` file emitted by GN is crucial for completion
performance.
"""
import argparse
import json
import os
import sys
def eprint(*args, **kwargs):
print(*args, file=sys.stderr, **kwargs)
FUCHSIA_DIR = os.environ["FUCHSIA_DIR"]
DEFAULT_OUT_NAME = "project_lite.json"
try:
DEFAULT_OUT_DIR = os.environ["FUCHSIA_BUILD_DIR"]
except KeyError:
DEFAULT_OUT_DIR = os.path.join(FUCHSIA_DIR, "out", "default")
def main(args):
document_lite = {}
with open(args.project_file) as fin:
document = json.load(fin)
document_lite["targets"] = list(document["targets"].keys())
project_file = os.path.join(args.build_dir, args.out_name)
with open(project_file, "w+") as fout:
json.dump(document_lite, fout)
print(
"Wrote JSON targets file for shell completion: {}".format(
project_file
)
)
if __name__ == "__main__":
p = argparse.ArgumentParser(description=__doc__)
p.add_argument("--build_dir", default=DEFAULT_OUT_DIR)
p.add_argument("--out_name", default=DEFAULT_OUT_NAME)
p.add_argument("project_file")
try:
main(p.parse_args())
except Exception as e:
eprint("error: {}".format(e))
sys.exit(1)