blob: fcc24d69e59c6e9eed8e8c4ef54d23da35b23422 [file] [log] [blame]
#!/bin/bash
#
# 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.
# This script is used by c_utils.gni, which see.
#
# Usage: toolchain_utils_action.sh OUTPUT DEPFILE PROGRAM ARG...
#
# This runs PROGRAM ARG... with some special handling.
# It always writes DEPFILE with OUTPUT as its target.
#
# For each ARG that is "@RSPFILE", RSPFILE should contain nothing
# but file names, one per line. Each such file will be added as
# an input in the depfile.
#
# Most toolchain utilities handle "@RSPFILE" syntax themselves, so we let them
# do so after scanning RSPFILE to collect dependencies. However, for certain
# named tools known to be lacking the support, this script will splice the
# file contents into the argument list directly.
set -e
OUTPUT="$1"
DEPFILE="$2"
PROGRAM="$3"
shift 3
trap 'rm -f "$OUTPUT" "$DEPFILE"' ERR HUP INT TERM
if [ "${PROGRAM##*/}" = llvm-objcopy ]; then
expand_rspfile=true
else
expand_rspfile=false
fi
INPUTS=()
ARGS=()
read_rspfile() {
local file
while read file; do
INPUTS+=("$file")
if $expand_rspfile; then
ARGS+=("$file")
fi
done
}
for arg; do
if [[ "$arg" == @* ]]; then
rspfile="${arg#@}"
INPUTS+=("$rspfile")
read_rspfile < "$rspfile"
if $expand_rspfile; then
# Don't add $arg since its contents were already added.
continue
fi
fi
ARGS+=("$arg")
done
echo "$OUTPUT: ${INPUTS[*]}" > "$DEPFILE"
exec "$PROGRAM" "${ARGS[@]}"