#!/bin/sh
# Стенд TCI: сборка и прогон. Запускать откуда угодно — скрипт сам перейдёт
# в свой каталог. Возвращает ненулевой код, если хоть одна проверка провалена.
#
# Флаги те же, что у демона (см. build-ewsdrd.sh), и по тем же причинам:
#   -Mobjfpc   — командный режим по умолчанию: включает вложенные комментарии.
#                С -Mdelphi {$MODE Delphi} внутри шапки WebUtils.pas закрывает
#                комментарий раньше времени, и компиляция падает на
#                «illegal character». Юниты дальше сами ставят свой {$mode}.
#   -dHEADLESS — PlatformUtils не тянет Forms (LCL): стенду виджетсет не нужен,
#                а без этого сборка требует всю LCL.
# ★Каталог .ppu — свой, с именем НЕ «lib», и путь абсолютный. Относительное
# «lib/<cpu>-<os>» компилятор ищет и относительно -Fu, то есть находит units
# GUI-сборки в корне проекта — а там PlatformUtils собран с LCL, и стенд падает
# на линковке с «undefined reference to TC_$FORMS_$$_SCREEN».
# libwdsp нужна только части E (сквозной прогон через движок); без неё эта
# часть сообщает о пропуске, а остальные идут как обычно.
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 -O2 -dHEADLESS \
    -Fu../.. -FU"$OUTUNITS" -k-L/usr/local/lib \
    -o"$OUT/tcitest" tcitest.pas
exec "$OUT/tcitest" "$@"
