From f1caf89a286ff1888a6531f69c69befdaf778985 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sun, 9 Jun 2024 15:37:13 +0100 Subject: [PATCH] create a lock file during builds prevent duplicate main instances of the build system from running the lock file is deleted when the parent process exits, alongside the tmpdir deletion the build system must only ever be run ot one instance at a time, per work directory Signed-off-by: Leah Rowe --- .gitignore | 1 + build | 4 +++- include/lib.sh | 17 +++++++++-------- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index c15f1d1..ccf4d01 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,4 @@ /src/ /CHANGELOG /todo.txt +/lock diff --git a/build b/build index 8745b8a..74b337f 100755 --- a/build +++ b/build @@ -119,7 +119,8 @@ fetch_trees() fail() { - tmp_cleanup || printf "WARNING: can't rm tmpdir: %s\n" "$tmpdir" 1>&2 + tmp_cleanup || printf "WARNING: can't rm tmp files: %s\n" "$tmpdir" \ + 1>&2 err_ "${1}" } @@ -127,6 +128,7 @@ tmp_cleanup() { [ "$tmpdir_was_set" = "n" ] || return 0 rm -Rf "$tmpdir" || return 1 + rm -f lock || return 1 } main $@ diff --git a/include/lib.sh b/include/lib.sh index b3a7687..b41645f 100755 --- a/include/lib.sh +++ b/include/lib.sh @@ -65,27 +65,28 @@ install_packages() id -u 1>/dev/null 2>/dev/null || $err "suid check failed (id -u)" [ "$(id -u)" != "0" ] || $err "this command as root is not permitted" -# if "y": a coreboot target won't be built if target.cfg says release="n" -# (this is used to exclude certain build targets from releases) - -[ -z "${XBMK_RELEASE+x}" ] && xbmk_release="n" -[ -z "$xbmk_release" ] && xbmk_release="$XBMK_RELEASE" -[ "$xbmk_release" = "n" ] || [ "$xbmk_release" = "y" ] || xbmk_release="n" -export XBMK_RELEASE="$xbmk_release" - [ -z "${TMPDIR+x}" ] && tmpdir_was_set="n" if [ "$tmpdir_was_set" = "y" ]; then [ "${TMPDIR%_*}" = "/tmp/xbmk" ] || tmpdir_was_set="n" fi if [ "$tmpdir_was_set" = "n" ]; then + [ -f "lock" ] && $err "The 'lock' file exists. Is a build running?" export TMPDIR="/tmp" tmpdir="$(mktemp -d -t xbmk_XXXXXXXX)" export TMPDIR="$tmpdir" + touch lock || $err "cannot create 'lock' file" else export TMPDIR="$TMPDIR" tmpdir="$TMPDIR" fi +# if "y": a coreboot target won't be built if target.cfg says release="n" +# (this is used to exclude certain build targets from releases) +[ -z "${XBMK_RELEASE+x}" ] && xbmk_release="n" +[ -z "$xbmk_release" ] && xbmk_release="$XBMK_RELEASE" +[ "$xbmk_release" = "n" ] || [ "$xbmk_release" = "y" ] || xbmk_release="n" +export XBMK_RELEASE="$xbmk_release" + [ -z "${XBMK_THREADS+x}" ] || threads="$XBMK_THREADS" [ -z "$threads" ] && threads=1 expr "X$threads" : "X-\{0,1\}[0123456789][0123456789]*$" \