#!/bin/sh # Стенд TCI: сборка и прогон. Запускать откуда угодно — скрипт сам перейдёт # в свой каталог. Возвращает ненулевой код, если хоть одна проверка провалена. # # Флаги те же, что у демона (см. build-ewsdrd.sh), и по тем же причинам: # -Mobjfpc — командный режим по умолчанию: включает вложенные комментарии. # С -Mdelphi {$MODE Delphi} внутри шапки WebUtils.pas закрывает # комментарий раньше времени, и компиляция падает на # «illegal character». Юниты дальше сами ставят свой {$mode}. # -dHEADLESS — PlatformUtils не тянет Forms (LCL): стенду виджетсет не нужен, # а без этого сборка требует всю LCL. # ★Каталог .ppu — свой, с именем НЕ «lib», и путь абсолютный. Относительное # «lib/-» компилятор ищет и относительно -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" "$@"