#!/bin/sh
# Стенд CAT: сборка и прогон. Запускать откуда угодно — скрипт сам перейдёт
# в свой каталог. Возвращает ненулевой код, если хоть одна проверка провалена.
#
# Флаги:
#   -Mobjfpc  — командный режим по умолчанию (юниты сами ставят свой {$mode});
#               с -Mdelphi выключаются вложенные комментарии, и шапки юнитов
#               закрывают комментарий раньше времени.
#   -Criot    — проверки диапазонов, ввода-вывода, переполнения и приведения
#               типов. Часть B стенда ищет именно их: разбор мусора из сети
#               обязан не падать даже со всеми проверками.
# ★Каталог .ppu — свой и по абсолютному пути (см. test/tci/run.sh): иначе
# компилятор находит units GUI-сборки в корне проекта.
set -e
cd "$(dirname "$0")"
HERE=$(pwd)
CPU=$(fpc -iTP)
OS=$(fpc -iTO)
OUTUNITS="$HERE/units/${CPU}-${OS}"
OUT="$HERE/bin/${CPU}-${OS}"
mkdir -p "$OUTUNITS" "$OUT"
# ★-B (пересобрать всё) обязателен, а не «для чистоты»: fpc сверяет .ppu с
# исходником по времени с точностью до секунды, и правка, попавшая в ту же
# секунду, что и прошлая сборка, молча не подхватывается. Стенд тогда выносит
# ВЕРДИКТ О СТАРОМ КОДЕ — хуже, чем не запускаться вовсе (ловится это обычно на
# негативном контроле, когда исходник меняют туда-обратно). Полная пересборка
# графа стенда занимает около секунды.
fpc -B -Mobjfpc -Criot -O1 \
    -Fu../.. -FU"$OUTUNITS" \
    -o"$OUT/cattest" cattest.pas
exec "$OUT/cattest" "$@"
