Files
lbmk/include/lib.sh
T
Leah Rowe 69875b8e10 xbmk: general cleanup
note: mecleaner check removed in vendor.sh, because
it's already guaranteed to be fetched. the check will
never indicate failure, so we can just assume that
the me cleaner python script exists.

Signed-off-by: Leah Rowe <leah@libreboot.org>
2026-09-17 10:33:43 +01:00

166 lines
3.4 KiB
Bash

# SPDX-License-Identifier: GPL-3.0-only
# Copyright (c) 2022 Caleb La Grange <thonkpeasant@protonmail.com>
# Copyright (c) 2022 Ferass El Hafidi <vitali64pmemail@protonmail.com>
# Copyright (c) 2020-2026 Leah Rowe <leah@libreboot.org>
# Copyright (c) 2025 Alper Nebi Yasak <alpernebiyasak@gmail.com>
cbfstool="elf/coreboot/default/cbfstool"
rmodtool="elf/coreboot/default/rmodtool"
newvar()
{
printf "%s\n" "$*" | \
awk '{ for (i=1; i<=NF; i++) $i = $i "=;"; print }'; :
}
mkrom_tarball()
{
update_xbmkver "$1"
mktarball "$1" "${1%/*}/${relname}_${1##*/}.tar.xz"
x_ rm -Rf "$1"
}
update_xbmkver()
{
xbmk_sanitize_version
if [ -z "${version-}" ] || [ -z "${versiondate-}" ]; then
err "version and/or versiondate unset" "update_xbmkver" "$@"
fi
printf "%s\n" "$version" > "$1/.version" || \
err "can't write '$1'" "update_xbmkver" "$@"; :
printf "%s\n" "$versiondate" > "$1/.versiondate" || \
err "can't write '$versiondate'" "update_xbmkver" "$@"; :
}
version()
{
printf "%s\nWebsite: %s\n" "$relname" "$projectsite"
}
xbmk_sanitize_version()
{
[ -n "$version" ] && version="`printf '%s\n' "$version" | sed \
's/[[:space:]]//g; s/\.\.//g; s/\.\///g; s/\//-/g; s/^-//'`" \
&& [ -z "$version" ] && \
err "'version' empty after sanitization" \
"xbmk_sanitize_version" "$@"; :
}
mktarball()
{
printf "Creating tar archive '%s' from directory '%s'\n" "$2" "$1"
[ "${2%/*}" != "$2" ] && \
x_ mkdir -p "${2%/*}"
x_ tar -c "$1" | xz -T$XBMK_THREADS -9e > "$2" || \
err "can't make tarball '$1'" "mktarball" "$@"
}
e()
{
es_t="e"
[ $# -gt 1 ] && \
es_t="$2"
es2="already exists"
estr="[ -$es_t \"\$1\" ] || return 1"
if [ $# -gt 2 ]; then
estr="[ -$es_t \"\$1\" ] && return 1"
es2="missing"
fi
eval "$estr"
printf "%s %s\n" "$1" "$es2" 1>&2
}
singletree()
{
( fx_ "eval exit 1 && err" find "config/$1/"*/ -type f \
-name "target.cfg" ) || return 1; :
}
pad_one_byte()
{
paddedfile="`mktemp || err "mktemp pad_one_byte"`" || \
err "can't make tmp file" "pad_one_byte" "$@"
x_ cat "$1" config/data/coreboot/0 > "$paddedfile" || \
err "could not pad file '$paddedfile'" "pad_one_byte" "$1"; :
x_ mv "$paddedfile" "$1"
}
unpad_one_byte()
{
xromsize="$(expr $(stat -c '%s' "$1") - 1)" || \
err "can't increment file size" "unpad_one_byte" "$@"
[ $xromsize -lt 524288 ] && \
err "too small, $xromsize: $1" "unpad_one_byte" "$@"
unpaddedfile="`mktemp || err "mktemp unpad_one_byte"`" || \
err "can't make tmp file" "unpad_one_byte" "$@"
x_ dd if="$1" of="$unpaddedfile" bs=$xromsize count=1
x_ mv "$unpaddedfile" "$1"
}
build_sbase()
{
[ ! -f "$sha512sum" ] && x_ make -C "$xbmkpwd/util/sbase"; :
}
remkdir()
{
x_ rm -Rf "$@"
x_ mkdir -p "$@"
}
fx_()
{
xchk fx_ "$@"
xcmd="$1"
xfile="`mktemp || err "can't create tmpfile"`" || \
err "can't make tmpfile" "fx_" "$@"
x_ rm -f "$xfile"
x_ touch "$xfile"
shift 1
"$@" 2>/dev/null | sort 1>"$xfile" 2>/dev/null || \
err "can't sort to '$xfile'" "fx_" "$xcmd" "$@"
dx_ "$xcmd" "$xfile" || :
x_ rm -f "$xfile"
}
dx_()
{
xchk dx_ "$@"
[ ! -f "$2" ] && \
return 0
while read -r fx; do
$1 "$fx" || return 1; :
done < "$2" || err "cannot read '$2'" "dx_" "$@"; :
}
xchk()
{
if [ $# -lt 3 ]; then
err "$1 needs at least two arguments" "xchk" "$@"
elif [ -z "$2" ] || [ -z "$3" ]; then
err "arguments must not be empty" "xchk" "$@"
fi
}