forked from auxolotl/core
79 lines
1.7 KiB
Bash
79 lines
1.7 KiB
Bash
|
#! @shell@
|
||
|
# shellcheck shell=bash
|
||
|
|
||
|
set -eu -o pipefail +o posix
|
||
|
shopt -s nullglob
|
||
|
|
||
|
if (( "${NIX_DEBUG:-0}" >= 7 )); then
|
||
|
set -x
|
||
|
fi
|
||
|
|
||
|
source @signingUtils@
|
||
|
|
||
|
extraAfter=()
|
||
|
extraBefore=()
|
||
|
params=("$@")
|
||
|
|
||
|
output=
|
||
|
inputs=()
|
||
|
|
||
|
restAreFiles=
|
||
|
prev=
|
||
|
for p in \
|
||
|
${extraBefore+"${extraBefore[@]}"} \
|
||
|
${params+"${params[@]}"} \
|
||
|
${extraAfter+"${extraAfter[@]}"}
|
||
|
do
|
||
|
if [ "$restAreFiles" ]; then
|
||
|
inputs+=("$p")
|
||
|
else
|
||
|
case "$prev" in
|
||
|
-s|-R|-d|-arch)
|
||
|
# Unrelated arguments with values
|
||
|
;;
|
||
|
-o)
|
||
|
# Explicit output
|
||
|
output="$p"
|
||
|
;;
|
||
|
*)
|
||
|
# Any other orgument either takes no value, or is a file.
|
||
|
if [[ "$p" != -* ]]; then
|
||
|
inputs+=("$p")
|
||
|
fi
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
if [ "$p" == - ]; then
|
||
|
restAreFiles=1
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
prev="$p"
|
||
|
done
|
||
|
|
||
|
# Optionally print debug info.
|
||
|
if (( "${NIX_DEBUG:-0}" >= 1 )); then
|
||
|
# Old bash workaround, see above.
|
||
|
echo "extra flags before to @prog@:" >&2
|
||
|
printf " %q\n" ${extraBefore+"${extraBefore[@]}"} >&2
|
||
|
echo "original flags to @prog@:" >&2
|
||
|
printf " %q\n" ${params+"${params[@]}"} >&2
|
||
|
echo "extra flags after to @prog@:" >&2
|
||
|
printf " %q\n" ${extraAfter+"${extraAfter[@]}"} >&2
|
||
|
fi
|
||
|
|
||
|
@prog@ \
|
||
|
${extraBefore+"${extraBefore[@]}"} \
|
||
|
${params+"${params[@]}"} \
|
||
|
${extraAfter+"${extraAfter[@]}"}
|
||
|
|
||
|
if [ "$output" ]; then
|
||
|
# Single explicit output
|
||
|
signIfRequired "$output"
|
||
|
else
|
||
|
# Multiple inputs, rewritten in place
|
||
|
for input in "${inputs[@]}"; do
|
||
|
signIfRequired "$input"
|
||
|
done
|
||
|
fi
|