mk: add forx function for shorthand loops

Signed-off-by: Leah Rowe <leah@libreboot.org>
This commit is contained in:
Leah Rowe
2026-09-17 01:35:30 +01:00
parent 7c025e1036
commit 856551a36d
5 changed files with 30 additions and 29 deletions
+23 -7
View File
@@ -9,15 +9,27 @@
set -u -e
eval "`printf "LANG LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE \
LC_MONETARY LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE \
LC_MEASUREMENT LC_IDENTIFICATION LC_ALL\n" | \
awk '{ for (i=1; i<=NF; i++) $i = "export " $i "=C.UTF-8;"; print }'`"
findpath()
{
eval "$(printf '%s\n' "$@" | awk '{printf "readlink -f \"%s\" \
2>/dev/null || realpath \"%s\" 2>/dev/null || return 1;",$0,$0}')"
forx 'readlink -f \"%s\" 2>/dev/null || \
x_ realpath \"%s\" 2>/dev/null' "$@"
}
# WARNING: relies on -o option in grep.
# gnu, busybox, openbsd, netbsd and freebsd all have it
forx()
{
awkarg="{printf \"${1-};\""
shift 1 2>/dev/null || :
scount="$(printf "%s\n" "$awkarg" | grep -o "%s" | wc -l)"
while [ $scount -gt 0 ]; do
awkarg="$awkarg,\$0"
scount="$(expr $scount - 1 || :)"
done
eval "$(printf '%s\n' "$@" | awk "$awkarg}")"
}
x_()
@@ -33,6 +45,10 @@ err()
exit 1
}
forx 'export %s=\"C.UTF-8\"' LANG LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME \
LC_COLLATE LC_MONETARY LC_MESSAGES LC_PAPER LC_NAME LC_ADDRESS \
LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION LC_ALL
(
mk="$0"
[ "${mk##*/}" != "$mk" ] || \