#!/bin/sh
# Serialize builds that target the same CCL Git checkout.
set -eu
cd "$(dirname "$0")/.."
unset GIT_DIR GIT_WORK_TREE GIT_COMMON_DIR GIT_INDEX_FILE
unset GIT_OBJECT_DIRECTORY GIT_ALTERNATE_OBJECT_DIRECTORIES

if [ "$#" -lt 2 ]; then
    echo "usage: scripts/with-ccl-lock CCL-SOURCE COMMAND [ARGUMENT...]" >&2
    exit 2
fi

ccl_source=$(realpath -e "$1")
shift
git_directory=$(git -C "$ccl_source" rev-parse --absolute-git-dir)
lock_file=$git_directory/cclsh-kernel-build.lock
lock_timeout=${CCLSH_BUILD_LOCK_TIMEOUT:-30}
if [ -e "$lock_file" ] || [ -L "$lock_file" ]; then
    if [ ! -f "$lock_file" ] || [ -L "$lock_file" ]; then
        echo "cclsh build: CCL source lock is not a regular file" >&2
        exit 1
    fi
else
    (umask 077; : >"$lock_file")
fi
chmod 600 "$lock_file"
exec 7<>"$lock_file"
if ! flock -w "$lock_timeout" 7; then
    echo "cclsh build: timed out waiting for the CCL source" >&2
    exit 1
fi

CCLSH_CCL_LOCK_PATH=$lock_file
export CCLSH_CCL_LOCK_PATH
exec "$@"
