summaryrefslogtreecommitdiff
path: root/script/handle
diff options
context:
space:
mode:
authorLeah Rowe <leah@libreboot.org>2023-10-01 06:33:43 +0100
committerLeah Rowe <leah@libreboot.org>2023-10-01 22:47:02 +0100
commit8c03b886c4d4b9bcfb1cb30b3704b8af561c2f45 (patch)
tree828eb1ad589300517e9a41581eee4b5d9605d3e8 /script/handle
parent5f914a4d00da5ab9324c55eaecc40aa2ee000f63 (diff)
Greatly simplify error handling in shell scripts
Instead of having detailed error messages, run most commands through a function that calls err() under fault conditions. Where detail is still required, err() is still called manually. Where it isn't, the error message is simply whatever command was executed to cause the error. This results in a massive sloccount reduction for lbmk; specifically, 178 sloc reduction, or a 8.1% reduction. The total sloccount is now 2022, for shell scripts. Signed-off-by: Leah Rowe <leah@libreboot.org>
Diffstat (limited to 'script/handle')
-rwxr-xr-xscript/handle/make/config73
-rwxr-xr-xscript/handle/make/file11
2 files changed, 31 insertions, 53 deletions
diff --git a/script/handle/make/config b/script/handle/make/config
index 0ae7796f..d7d11bf1 100755
--- a/script/handle/make/config
+++ b/script/handle/make/config
@@ -56,8 +56,7 @@ handle_dependencies()
fail "Cannot get options for ${cfgsdir}"
[ $# -gt 0 ] && targets=$@
- [ -d "${elfdir}" ] || [ "${mode}" != "all" ] || \
- mkdir -p "${elfdir}/" || fail "can't create directory ${elfdir}"
+ [ "${mode}" = "all" ] && xx_ mkdir -p "${elfdir}/"
}
handle_targets()
@@ -67,8 +66,8 @@ handle_targets()
printf "Running 'make %s' for project '%s, target '%s''\n" \
"${mode}" "${project}" "${target}"
[ "${project}" != "coreboot" ] || [ "${mode}" != "all" ] || \
- ./update blobs download ${target} || fail "blobutil"
- handle_defconfig || fail "error handling config file"
+ xx_ ./update blobs download ${target}
+ xx_ handle_defconfig
done
[ "${mode}" = "all" ] || return 0
@@ -96,8 +95,7 @@ handle_defconfig()
handle_src_tree()
{
target_dir="${cfgsdir}/${target}"
- mkdir -p "${elfdir}/${target}" || \
- fail "handle_src_tree: !mkdir -p ${elfdir}/${target}"
+ xx_ mkdir -p "${elfdir}/${target}"
eval "$(setvars "undefined" arch tree)"
romtype="normal"
@@ -121,8 +119,7 @@ handle_src_tree()
"${codedir}" 1>&2
return 1
fi
- ./update project trees "${project}" "${target}" || \
- fail "handle_src_tree: can't fetch ${project}/${target}"
+ xx_ ./update project trees "${project}" "${target}"
elif [ "${mode}" = "distclean" ] || \
[ "${mode}" = "crossgcc-clean" ]; then
[ -f "${tmpclean}/${tree}" ] && return 1
@@ -134,8 +131,7 @@ handle_src_tree()
[ "${mode}" != "all" ] || check_cross_compiler || \
fail "handle_src_tree ${project}/${target}: crossgcc"
cbfstool="cbutils/${tree}/cbfstool"
- [ -f "${cbfstool}" ] || ./build coreboot utils "${tree}" || \
- fail "handle_src_tree: cannot build cbfstool"
+ [ -f "${cbfstool}" ] || xx_ ./build coreboot utils "${tree}"
fi
}
@@ -156,8 +152,7 @@ check_cross_compiler()
# only true if not building coreboot:
ctarget="${cbdir#coreboot/}"
[ -d "${cbdir}" ] || \
- ./update project trees coreboot ${ctarget} || \
- fail "check_cross_compiler: can't fetch coreboot/${ctarget}"
+ xx_ ./update project trees coreboot ${ctarget}
if [ "${arch}" = "x86_32" ] || [ "${arch}" = "x86_64" ]; then
[ -d "${cbdir}/util/crossgcc/xgcc/i386-elf/" ] || \
@@ -205,17 +200,13 @@ check_config()
printf "Build already exists, so skipping build\n" 1>&2
return 1
done
- mkdir -p "${dest_dir}" || \
- fail "check_config: cannot mkdir: ${dest_dir}"
+ xx_ mkdir -p "${dest_dir}"
}
run_make_command()
{
- ./handle make file -c "${codedir}" || \
- fail "run_make_command: make distclean/clean failed"
-
- cp "${config}" "${codedir}/.config" || \
- fail "run_make_command: can't copy config for: ${project}/${target}"
+ xx_ ./handle make file -c "${codedir}"
+ xx_ cp "${config}" "${codedir}/.config"
[ "${mode}" != "all" ] || make -C "${codedir}" silentoldconfig || \
make -C "${codedir}" oldconfig || : # don't error on oldconfig
@@ -223,30 +214,26 @@ run_make_command()
printf "%s\n" "${our_version}" >"${codedir}/.coreboot-version" \
|| fail "run_make_command: ${codedir}: can't set version"
fi
- make -C "${codedir}" -j$(nproc) ${mode} || \
- fail "run_make: !make-${mode}: ${codedir} (${project}/${target})"
+ xx_ make -C "${codedir}" -j$(nproc) ${mode}
+
if [ -e "${codedir}/.git" ] && [ "${project}" = "u-boot" ] && \
[ "${mode}" = "distclean" ]; then
- git -C "${codedir}" clean -fdx || \
- fail "run_make_command: ${codedir}: cannot clean u-boot git"
+ xx_ git -C "${codedir}" clean -fdx
elif [ "${mode}" = "oldconfig" ] || [ "${mode}" = "menuconfig" ]; then
- cp "${codedir}/.config" "${config}" || \
- fail "run_make: can't edit config: ${project}/${target}"
+ xx_ cp "${codedir}/.config" "${config}"
fi
}
copy_elf()
{
- [ "${project}" != "coreboot" ] || modify_coreboot_rom || \
- fail "copy_elf: cannot prepare coreboot image"
+ [ "${project}" != "coreboot" ] || xx_ modify_coreboot_rom
while read f; do
- [ ! -f "${codedir}/$f" ] || cp "${codedir}/${f}" \
- "${dest_dir}/" || fail "copy_elf: cannot copy elf file"
+ [ ! -f "${codedir}/$f" ] || \
+ xx_ cp "${codedir}/${f}" "${dest_dir}/"
done < ${listfile}
- ./handle make file -c "${codedir}" || \
- fail "copy_elf: clean: ${codedir} (${project}/${target})"
+ xx_ ./handle make file -c "${codedir}"
}
modify_coreboot_rom()
@@ -255,32 +242,26 @@ modify_coreboot_rom()
[ -f "${rompath}" ] || \
fail "modify_coreboot_rom: does not exist: ${rompath}"
tmprom="$(mktemp -t rom.XXXXXXXXXX)"
- rm -f "${tmprom}" || \
- fail "modify_coreboot_rom prep: cannot remove tmprom"
+ xx_ rm -f "${tmprom}"
if [ "${romtype}" = "d8d16sas" ]; then
# pike2008 roms hang seabios. an empty rom will override
# the built-in one, thus disabling all execution of it
- touch "${tmprom}" || \
- fail "modify_coreboot_rom: cannot create fake oprom"
+ xx_ touch "${tmprom}"
for deviceID in "0072" "3050"; do
- "${cbfstool}" "${rompath}" add -f "${tmprom}" \
- -n "pci1000,${deviceID}.rom" -t raw || \
- fail "modify_coreboot_rom: can't insert fake rom"
+ xx_ "${cbfstool}" "${rompath}" add -f "${tmprom}" \
+ -n "pci1000,${deviceID}.rom" -t raw
done
elif [ "${romtype}" = "i945 laptop" ]; then
# for bucts-based installation method from factory bios
- dd if="${rompath}" of="${tmprom}" bs=1 \
+ xx_ dd if="${rompath}" of="${tmprom}" bs=1 \
skip=$(($(stat -c %s "${rompath}") - 0x10000)) \
- count=64k || \
- fail "modify_coreboot_rom: can't read i945 bootblock"
- dd if="${tmprom}" of="${rompath}" bs=1 \
+ count=64k
+ xx_ dd if="${tmprom}" of="${rompath}" bs=1 \
seek=$(($(stat -c %s "${rompath}") - 0x20000)) \
- count=64k conv=notrunc || \
- fail "modify_coreboot_rom: can't write i945 bootblock"
+ count=64k conv=notrunc
fi
- rm -f "${tmprom}" || \
- fail "modify_coreboot_rom: cannot remove tmprom"
+ xx_ rm -f "${tmprom}"
}
fail()
diff --git a/script/handle/make/file b/script/handle/make/file
index b76eadcd..600b9f3d 100755
--- a/script/handle/make/file
+++ b/script/handle/make/file
@@ -29,14 +29,13 @@ main()
handle_dependencies()
{
- [ -d "${project}" ] || ./update project repo "${project%/*}" || \
- err "handle_dependencies: can't fetch ${project%/*}"
+ [ -d "${project}" ] || x_ ./update project repo "${project%/*}"
[ -d "${project}" ] || \
err "handle_dependencies: ${project%/*} not downloaded"
[ "${project}" = "uefitool" ] || return 0 # TODO: remove hardcoding
(
- cd uefitool || err "handle_dependencies: !cd uefitool"
+ x_ cd uefitool
cmake UEFIExtract/ || [ -f Makefile ] || \
err "handle_dependencies: !cmake UEFIExtract/"
)
@@ -45,11 +44,9 @@ handle_dependencies()
run_make_command()
{
if [ -z "${mode}" ]; then
- make -C "${project}" -j$(nproc) || \
- err "run_make_command: !make -C ${project}"
+ x_ make -C "${project}" -j$(nproc)
else
- make -C "${project}" clean || \
- err "run_make_command: ${project}: make-clean failed"
+ x_ make -C "${project}" clean
make -C "${project}" distclean || :
fi
}