#!/bin/bash
#
#   BuildAndSmoke — Build, create smoke DB if needed, run smoke tests.
#
#   Usage: cd testcases && ./tools/BuildAndSmoke [-f]
#
#   -f    Force Makesmoke even if smoke.flat is up to date.
#
set -euo pipefail

SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
TC=$(cd "$SCRIPT_DIR/.." && pwd)
cd "$TC"

FORCE_MAKESMOKE=false
if [ "${1:-}" = "-f" ]; then
    FORCE_MAKESMOKE=true
fi

# Build.
"$SCRIPT_DIR/Build.sh"

# Makesmoke if needed.
if $FORCE_MAKESMOKE || [ ! -f smoke.flat ]; then
    "$SCRIPT_DIR/Makesmoke"
elif [ -n "$(find . -maxdepth 1 -name '*.mux' -newer smoke.flat -print -quit 2>/dev/null)" ]; then
    "$SCRIPT_DIR/Makesmoke"
else
    echo "smoke.flat is up to date (use -f to force)."
fi

# Smoke.
"$SCRIPT_DIR/Smoke"
