#!/bin/sh set -eu . "$(dirname "$0")/../lib.sh" main() { prefix="$1" shift COLOR="$(get_rand_color "$prefix")" prefix="$(setaf "$COLOR" "$prefix")" _echo "$prefix^:" "$*" # We need to make sure we exit with a non zero exit if the command fails. # /bin/sh does not support -o pipefail unfortunately. fifo="$(mktemp -d)/fifo" mkfifo "$fifo" # We add the prefix to all lines and remove any lines about recursive make. # We cannot silence these with -s which is unfortunate. sed -e "s#^#$prefix: #" -e "/make\[.\]: warning: -j/d" "$fifo" & exit_trap() { code="$?" end="$(awk 'BEGIN{srand(); print srand()}')" dur="$((end - start))" if [ "$code" -eq 0 ]; then _echo "$prefix\$:" "$(setaf 2 success)" "($(echo_dur $dur))" else _echo "$prefix\$:" "$(setaf 1 failure)" "($(echo_dur $dur))" fi } trap exit_trap EXIT start="$(awk 'BEGIN{srand(); print srand()}')" "$@" >"$fifo" 2>&1 } main "$@"