#!/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" "$@"