summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeah Rowe <leah@libreboot.org>2024-06-09 15:37:13 +0100
committerLeah Rowe <leah@libreboot.org>2024-06-09 15:37:13 +0100
commite80c4b73ceb10c38a93c769e681afb947d9dfb1c (patch)
tree9d684ceb33bfe1229b4efec39dfa4f5d156dbbcd
parenta0710ef9cac6e9f27852676d1bafa5d8c5f8ac47 (diff)
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 <leah@libreboot.org>
-rw-r--r--.gitignore1
-rwxr-xr-xbuild4
-rwxr-xr-xinclude/lib.sh17
3 files changed, 13 insertions, 9 deletions
diff --git a/.gitignore b/.gitignore
index 25c27d4c..d6c27f5d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,3 +30,4 @@
/src/
/CHANGELOG
/todo.txt
+/lock
diff --git a/build b/build
index 74ea1de6..bfd865c2 100755
--- a/build
+++ b/build
@@ -124,7 +124,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}"
}
@@ -132,6 +133,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 b3a76879..b41645fb 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]*$" \