#!/usr/bin/env python3 # Copyright 2021 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Wrapper script around TraceEventAdder script.""" import argparse import logging import sys import tempfile import os from util import build_utils import action_helpers # build_utils adds //build to sys.path. # The real limit is generally >100kb, but 10k seems like a reasonable "it's big" # threshold. _MAX_CMDLINE = 10000 def main(argv): build_utils.InitLogging('TRACE_EVENT_REWRITER_DEBUG') argv = build_utils.ExpandFileArgs(argv[1:]) parser = argparse.ArgumentParser() action_helpers.add_depfile_arg(parser) parser.add_argument('--script', required=True, help='Path to the java binary wrapper script.') parser.add_argument('--stamp', help='Path to stamp to mark when finished.') parser.add_argument('--classpath', action='append', nargs='+') parser.add_argument('--input-jars', action='append', nargs='+') parser.add_argument('--output-jars', action='append', nargs='+') args = parser.parse_args(argv) args.classpath = action_helpers.parse_gn_list(args.classpath) args.input_jars = action_helpers.parse_gn_list(args.input_jars) args.output_jars = action_helpers.parse_gn_list(args.output_jars) for output_jar in args.output_jars: jar_dir = os.path.dirname(output_jar) if not os.path.exists(jar_dir): os.makedirs(jar_dir) cmd = [ args.script, '--classpath', ':'.join(args.classpath), ':'.join(args.input_jars), ':'.join(args.output_jars) ] if sum(len(x) for x in cmd) > _MAX_CMDLINE: # Cannot put --classpath in the args file because that is consumed by the # wrapper script. Keep the args file on disk when debugging. is_debug = logging.getLogger().isEnabledFor(logging.DEBUG) args_file = tempfile.NamedTemporaryFile(mode='w', delete=not is_debug) args_file.write('\n'.join(cmd[3:])) args_file.flush() cmd[3:] = ['@' + args_file.name] logging.debug(' '.join(cmd)) build_utils.CheckOutput(cmd, print_stdout=True) build_utils.Touch(args.stamp) all_input_jars = args.input_jars + args.classpath action_helpers.write_depfile(args.depfile, args.stamp, inputs=all_input_jars) if __name__ == '__main__': sys.exit(main(sys.argv))