#!/bin/sh # setup — configure, build, test, and install Comet without requiring root. # # Usage: # ./setup [key=value ...] # ./setup help # # Options are passed to meson setup as -Dkey=value. # If prefix= is not supplied, defaults to ~/ircd. # The build directory is always 'build'. set -e die() { echo "ERROR: $*" >&2; exit 1; } command -v meson >/dev/null 2>&1 || die "meson not found in PATH" BUILDDIR="build" if [ $# -eq 1 ] && [ "$1" = "help" ]; then echo "Usage: ./setup [key=value ...]" echo "" echo "Available options (from meson_options.txt):" echo "" OPTFILE="$(dirname "$0")/meson_options.txt" [ -f "$OPTFILE" ] || die "meson_options.txt not found" awk ' { gsub(/\r/, ""); line = $0 } /option\(/ { block = line next } block != "" { block = block " " line } block != "" && /\)/ { # name s = block; sub(/.*option\('"'"'/, "", s); sub(/'"'"'.*/, "", s) name = s # description s = block; sub(/.*description:[[:space:]]*'"'"'/, "", s); sub(/'"'"'.*/, "", s) desc = s # default value (string/boolean/feature) defval = "" s = block if (match(s, /value:[[:space:]]*'"'"'[^'"'"']*'"'"'/)) { v = substr(s, RSTART, RLENGTH) sub(/value:[[:space:]]*'"'"'/, "", v); sub(/'"'"'.*/, "", v) defval = v } else if (match(s, /value:[[:space:]]*[0-9]+/)) { v = substr(s, RSTART, RLENGTH) sub(/value:[[:space:]]*/, "", v) defval = v } else if (match(s, /value:[[:space:]]*(true|false)/)) { v = substr(s, RSTART, RLENGTH) sub(/value:[[:space:]]*/, "", v) defval = v } printf " %-20s %s", name, desc if (defval != "") printf " (default: %s)", defval printf "\n" block = "" name = "" } ' "$OPTFILE" echo "" echo "Example: ./setup topiclen=390 nicklen=30 prefix=/opt/ircd" exit 0 fi has_prefix=0 MESON_OPTS="" for arg in "$@"; do case "$arg" in prefix=*) has_prefix=1; MESON_OPTS="$MESON_OPTS -D$arg" ;; *=*) MESON_OPTS="$MESON_OPTS -D$arg" ;; *) die "Unrecognised argument '$arg' (expected key=value)" ;; esac done if [ "$has_prefix" -eq 0 ]; then DEFAULT_PREFIX="$HOME/ircd" echo "No prefix= given; defaulting to $DEFAULT_PREFIX" MESON_OPTS="$MESON_OPTS -Dprefix=$DEFAULT_PREFIX" mkdir -p "$DEFAULT_PREFIX" else for arg in "$@"; do case "$arg" in prefix=*) mkdir -p "${arg#prefix=}" ;; esac done fi echo "==> meson setup $BUILDDIR $MESON_OPTS" meson setup "$BUILDDIR" --optimization 2 $MESON_OPTS echo "==> meson compile -C $BUILDDIR" meson compile -C "$BUILDDIR" echo "==> meson test -C $BUILDDIR" meson test -C "$BUILDDIR" echo "==> meson install -C $BUILDDIR" exec meson install -C "$BUILDDIR"