shake
minimal build system that generates Ninja build files
git clone https://9o.is/git/shake.git
commit 2731d5bc1edbd44d8a3c8a534bea5e836a5ef3bd parent 203aa3084895b7a63ed5cf5d5b52061a8cd6faa1 Author: Jul <jul@9o.is> Date: Thu, 12 Mar 2026 13:51:50 +0800 revert shake lib path Diffstat:
| M | install | | | 10 | +++++++++- |
| M | shake | | | 12 | ++++++++++++ |
2 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/install b/install @@ -4,11 +4,13 @@ set -eu SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" DESTDIR="${DESTDIR-}" PREFIX="${PREFIX:-/usr/local}" +SHAKE_LIB="/share/shake" usage() { printf "usage: install.sh [options] --prefix=DIR installation prefix (default: /usr/local) --destdir=DIR staging directory (for packaging) + --shakelib=DIR path to shake lib (default: $SHAKE_LIB) --help show this help " >&2 exit 1 @@ -25,6 +27,10 @@ while [ $# -gt 0 ]; do DESTDIR="${1#*=}" shift ;; + --shakelib=*) + SHAKE_LIB="${1#*=}" + shift + ;; --help|-h) usage ;; @@ -38,5 +44,7 @@ done set -x mkdir -p "${DESTDIR}${PREFIX}/bin" -cp -f "$SCRIPT_DIR/shake" "${DESTDIR}${PREFIX}/bin/shake" +mkdir -p "${DESTDIR}${PREFIX}${SHAKE_LIB}" +sed "s|%%SHAKE_LIB%%|${DESTDIR}${PREFIX}${SHAKE_LIB}|" \ + "$SCRIPT_DIR/shake" > "${DESTDIR}${PREFIX}/bin/shake" chmod 0755 "${DESTDIR}${PREFIX}/bin/shake" diff --git a/shake b/shake @@ -2,6 +2,7 @@ set -eu SHAKE_BIN="$0" +SHAKE_LIB="%%SHAKE_LIB%%" TARGET= TARGET_ROUTE= BUILDDIR=.shake @@ -14,6 +15,7 @@ GEN_OUTS=$DIR/$NINJA_FILE usage() { printf "usage: shake [options] [target] + -l dir override shake lib path (default: $SHAKE_LIB) -C dir change to dir before doing anything -o dir set the output directory -h show this help @@ -23,6 +25,11 @@ usage() { while [ $# -gt 0 ]; do case "$1" in + -l) + [ $# -lt 2 ] && usage + SHAKE_LIB="${2%/}" + shift 2 + ;; -o) [ $# -lt 2 ] && usage OUTDIR="${2%/}" @@ -265,6 +272,11 @@ foreach() { GEN_FILES="$GEN_FILES $DIR/$1" } +if [ ! -d "$SHAKE_LIB" ]; then + printf 'shake: cannot find path: %s\n' "$SHAKE_LIB" >&2 + exit 1 +fi + if [ "$TARGET" ] && [ ! -f "$TARGET/Shakefile" ]; then printf "shake: target is missing Shakefile: %s\n" "$TARGET" >&2 exit 1