mirror of
https://github.com/levogevo/ffmpeg-builder.git
synced 2026-01-15 19:06:17 +00:00
126 lines
2.2 KiB
Bash
126 lines
2.2 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
# shellcheck disable=SC2034
|
|
|
|
# ANSI colors
|
|
RED='\e[0;31m'
|
|
CYAN='\e[0;36m'
|
|
GREEN='\e[0;32m'
|
|
YELLOW='\e[0;33m'
|
|
NC='\e[0m'
|
|
|
|
# echo wrappers
|
|
echo_fail() { echo -e "${RED}FAIL${NC}:" "$@"; }
|
|
echo_info() { echo -e "${CYAN}INFO${NC}:" "$@"; }
|
|
echo_pass() { echo -e "${GREEN}PASS${NC}:" "$@"; }
|
|
echo_warn() { echo -e "${YELLOW}WARN${NC}:" "$@"; }
|
|
echo_exit() {
|
|
echo_fail "$@"
|
|
exit 1
|
|
}
|
|
void() { echo "$@" >/dev/null; }
|
|
|
|
echo_if_fail() {
|
|
local cmd=("$@")
|
|
local out="${TMP_DIR}/.stdout-${RANDOM}"
|
|
local err="${TMP_DIR}/.stderr-${RANDOM}"
|
|
test -d "${TMP_DIR}" || mkdir -p "${TMP_DIR}"
|
|
|
|
# set trace to the cmdEvalTrace and open file descriptor
|
|
local cmdEvalTrace="${TMP_DIR}/.cmdEvalTrace-${RANDOM}"
|
|
exec 5>"${cmdEvalTrace}"
|
|
export BASH_XTRACEFD=5
|
|
|
|
set -x
|
|
"${cmd[@]}" >"${out}" 2>"${err}"
|
|
local retval=$?
|
|
|
|
# unset and close file descriptor
|
|
set +x
|
|
exec 5>&-
|
|
|
|
# parse out relevant part of the trace
|
|
local cmdEvalLines=()
|
|
cmd=()
|
|
while IFS= read -r line; do
|
|
cmdEvalLines+=("${line}")
|
|
done <"${cmdEvalTrace}"
|
|
local cmdEvalLineNum=${#cmdEvalLines[@]}
|
|
for ((i = 1; i < cmdEvalLineNum - 2; i++)); do
|
|
local trimmedCmd="${cmdEvalLines[${i}]}"
|
|
trimmedCmd="${trimmedCmd/+ /}"
|
|
cmd+=("${trimmedCmd}")
|
|
done
|
|
|
|
if ! test ${retval} -eq 0; then
|
|
echo
|
|
echo_fail "command failed:"
|
|
printf "%s\n" "${cmd[@]}"
|
|
echo_warn "command output:"
|
|
tail -n 10 "${out}"
|
|
tail -n 10 "${err}"
|
|
echo
|
|
fi
|
|
rm "${out}" "${err}" "${cmdEvalTrace}"
|
|
return ${retval}
|
|
}
|
|
|
|
dump_arr() {
|
|
arr_name="$1"
|
|
declare -n arr
|
|
arr="${arr_name}"
|
|
arr_exp=("${arr[@]}")
|
|
test "${#arr_exp}" -gt 0 || return 0
|
|
echo
|
|
echo_info "${arr_name}"
|
|
printf "\t%s\n" "${arr_exp[@]}"
|
|
}
|
|
|
|
has_cmd() {
|
|
local cmd="$1"
|
|
command -v "${cmd}" >/dev/null 2>&1
|
|
}
|
|
|
|
missing_cmd() {
|
|
local cmd="$1"
|
|
rv=1
|
|
if ! has_cmd "${cmd}"; then
|
|
echo_warn "missing ${cmd}"
|
|
rv=0
|
|
fi
|
|
return $rv
|
|
}
|
|
|
|
bash_dirname() {
|
|
local tmp=${1:-.}
|
|
|
|
[[ $tmp != *[!/]* ]] && {
|
|
printf '/\n'
|
|
return
|
|
}
|
|
|
|
tmp=${tmp%%"${tmp##*[!/]}"}
|
|
|
|
[[ $tmp != */* ]] && {
|
|
printf '.\n'
|
|
return
|
|
}
|
|
|
|
tmp=${tmp%/*}
|
|
tmp=${tmp%%"${tmp##*[!/]}"}
|
|
|
|
printf '%s\n' "${tmp:-/}"
|
|
}
|
|
|
|
bash_basename() {
|
|
local tmp
|
|
path="$1"
|
|
suffix="${2:-''}"
|
|
|
|
tmp=${path%"${path##*[!/]}"}
|
|
tmp=${tmp##*/}
|
|
tmp=${tmp%"${suffix/"$tmp"/}"}
|
|
|
|
printf '%s\n' "${tmp:-/}"
|
|
}
|