#!/usr/bin/env bash # Build-only sweep of every example PRG. Doesn't run them (many are # interactive / database / network). Just checks the compiler accepts # them cleanly. set -e cd /Users/charleskwon/Projects/fivedev/five work=$(mktemp -d) trap 'rm -rf "$work"' EXIT pass=0 fail=0 declare -a failed for src in examples/*.prg; do name=$(basename "$src" .prg) if ./five build "$src" -o "$work/$name" >"$work/$name.out" 2>&1; then # Check for parse / preprocessor errors even when build "succeeded" if grep -qE '^(five: [0-9]+ (parse|preprocessor) error|panic:)' "$work/$name.out"; then echo "FAIL $name (build returned 0 but errors detected)" tail -5 "$work/$name.out" | sed 's/^/ /' fail=$((fail+1)) failed+=("$name") else pass=$((pass+1)) fi else echo "FAIL $name" tail -5 "$work/$name.out" | sed 's/^/ /' fail=$((fail+1)) failed+=("$name") fi done echo echo "================================================================" echo " Build sweep: $pass / $((pass+fail)) examples build cleanly" echo "================================================================" if [ ${#failed[@]} -gt 0 ]; then echo "Failed:" for n in "${failed[@]}"; do echo " $n"; done fi