lbmk script: always clean up /tmp files
export TMPDIR to scripts, and handle it in a way that we know lbmk set it delete it at the end of the parent process, but not child processes; when the lbmk script calls itself, child processes will not delete the tmp directory. some scripts in lbmk weren't cleaning up the tmpfiles they made, and they still don't, but this mitigates that. now in follow-up commits, i can start cleaning up those scripts too. not handled by this patch: if the user cancels lbmk (ctrl+c), the tmp directory will still be there. this too will be handled, in subsequent patches Signed-off-by: Leah Rowe <leah@libreboot.org>btrfsvols
parent
225e2609fa
commit
12b33eb8c1
72
lbmk
72
lbmk
|
@ -26,6 +26,26 @@ set -u -e
|
|||
|
||||
. "include/err.sh"
|
||||
|
||||
tmpdir=""
|
||||
tmpdir_was_set="y"
|
||||
set | grep TMPDIR 1>/dev/null 2>/dev/null || tmpdir_was_set="n"
|
||||
if [ "${tmpdir_was_set}" = "y" ]; then
|
||||
tmpdir="${TMPDIR##*/}"
|
||||
tmpdir="${TMPDIR%_*}"
|
||||
if [ "${tmpdir}" = "lbmk" ]; then
|
||||
tmpdir=""
|
||||
tmpdir_was_set="n"
|
||||
fi
|
||||
fi
|
||||
if [ "${tmpdir_was_set}" = "n" ]; then
|
||||
export TMPDIR="/tmp"
|
||||
tmpdir="$(mktemp -d -t lbmk_XXXXXXXX)"
|
||||
export TMPDIR="${tmpdir}"
|
||||
else
|
||||
export TMPDIR="${TMPDIR}"
|
||||
fi
|
||||
tmpdir="${TMPDIR}"
|
||||
|
||||
projectname="$(cat projectname)"
|
||||
buildpath=""
|
||||
mode=""
|
||||
|
@ -34,10 +54,10 @@ option=""
|
|||
main()
|
||||
{
|
||||
id -u 1>/dev/null 2>/dev/null || \
|
||||
err "cannot ascertain user id"
|
||||
fail "cannot ascertain user id"
|
||||
|
||||
[ "${0##*/}" = "lbmk" ] && err "Don't run this script directly."
|
||||
[ $# -lt 1 ] && err "Too few arguments. Try: ${0} help"
|
||||
[ "${0##*/}" = "lbmk" ] && fail "Don't run this script directly."
|
||||
[ $# -lt 1 ] && fail "Too few arguments. Try: ${0} help"
|
||||
|
||||
mode="${1}"
|
||||
if [ "${mode}" = "dependencies" ]; then
|
||||
|
@ -46,13 +66,13 @@ main()
|
|||
printf "Look at files under resources/dependencies/\n" \
|
||||
1>&2
|
||||
printf "Example: ./build dependencies debian\n" 1>&2
|
||||
err "target not specified"
|
||||
fail "target not specified"
|
||||
fi
|
||||
install_dependencies $@ || err "Could not install dependencies"
|
||||
exit 0
|
||||
install_dependencies $@ || fail "Could not install dependencies"
|
||||
lbmk_exit 0
|
||||
fi
|
||||
if [ "$(id -u)" = "0" ]; then
|
||||
err "running this command as root is not permitted"
|
||||
fail "running this command as root is not permitted"
|
||||
fi
|
||||
|
||||
buildpath="./script/${0##*/}"
|
||||
|
@ -62,13 +82,13 @@ main()
|
|||
exit 0
|
||||
[ $# -lt 2 ] && usage ${0} && exit 1
|
||||
|
||||
./checkgit || err "Please read: https://libreboot.org/docs/build/"
|
||||
./checkgit || fail "Please read: https://libreboot.org/docs/build/"
|
||||
|
||||
option="${2}"
|
||||
shift 2
|
||||
|
||||
./script/misc/versioncheck || \
|
||||
err "Cannot check lbmk version"
|
||||
fail "Cannot check lbmk version"
|
||||
|
||||
case "${option}" in
|
||||
list)
|
||||
|
@ -77,31 +97,33 @@ main()
|
|||
for option in $(./build command options "${buildpath}/${mode}")
|
||||
do
|
||||
"${buildpath}/${mode}/${option}" $@ || \
|
||||
err "script fail: ${buildpath}/${mode}/${option} $@"
|
||||
fail "script fail: ${buildpath}/${mode}/${option} $@"
|
||||
done
|
||||
;;
|
||||
*)
|
||||
if [ ! -d "${buildpath}/${mode}" ]; then
|
||||
usage $0
|
||||
err "Invalid mode '${mode}'. Run: ${0} help"
|
||||
fail "Invalid mode '${mode}'. Run: ${0} help"
|
||||
elif [ ! -f "${buildpath}/${mode}/${option}" ]; then
|
||||
usage $0
|
||||
printf "Invalid option for '%s'." ${mode}
|
||||
err "Run: ${0} ${mode} list'."
|
||||
fail "Run: ${0} ${mode} list'."
|
||||
fi
|
||||
"${buildpath}/${mode}/${option}" $@ || err "lbmk error"
|
||||
"${buildpath}/${mode}/${option}" $@ || fail "lbmk error"
|
||||
esac
|
||||
|
||||
lbmk_exit 0
|
||||
}
|
||||
|
||||
install_dependencies()
|
||||
{
|
||||
[ -f "resources/dependencies/${2}" ] || err "Unsupported target"
|
||||
[ -f "resources/dependencies/${2}" ] || fail "Unsupported target"
|
||||
|
||||
aur_notice=""
|
||||
. "resources/dependencies/${2}"
|
||||
|
||||
${pkg_add} ${pkglist} || \
|
||||
err "install_dependencies: Error installing dependencies"
|
||||
fail "install_dependencies: Error installing dependencies"
|
||||
[ "${aur_notice}" = "" ] || \
|
||||
printf "You must install AUR packages: %s\n" "${aur_notice}" 1>&2
|
||||
}
|
||||
|
@ -124,4 +146,24 @@ usage()
|
|||
EOF
|
||||
}
|
||||
|
||||
lbmk_exit()
|
||||
{
|
||||
tmp_cleanup || err "could not remove tmpdir on lbmk exit: ${tmpdir}"
|
||||
exit $1
|
||||
}
|
||||
|
||||
fail()
|
||||
{
|
||||
tmp_cleanup || printf "WARNING: could not remove tmpdir: %s\n" \
|
||||
"${tmpdir}" 1>&2
|
||||
err "${1}"
|
||||
}
|
||||
|
||||
tmp_cleanup()
|
||||
{
|
||||
if [ "${tmpdir_was_set}" = "n" ]; then
|
||||
rm -Rf "${tmpdir}" || return 1
|
||||
fi
|
||||
}
|
||||
|
||||
main $@
|
||||
|
|
Loading…
Reference in New Issue