#!/bin/sh # Проверка ветвей PlatformUtils под Windows и macOS БЕЗ этих платформ. # # Зачем. Кросс-RTL обычно не установлен, поэтому ветки {$IFDEF WINDOWS} и # {$IFDEF DARWIN} на Linux не компилируются ВООБЩЕ — ошибка в них всплывает # только на сборочной машине, через полчаса после коммита. Так и вышло: unit # Windows, добавленный ради QueryPerformanceCounter, перекрыл однопараметрический # SysUtils.GetEnvironmentVariable, и win64-сборка легла на трёх вызовах. # # Как. Копию PlatformUtils.pas переписываем так, чтобы платформенные условия # читались как наши собственные (-dSIMWIN / -dSIMMAC), и компилируем БЕЗ # ЛИНКОВКИ (-Cn): системных функций на Linux нет, но синтаксис, типы и — главное — # разрешение имён проверяются по-настоящему. Для Windows подкладывается # заглушка unit Windows с теми же перекрывающими объявлениями (win_stub/). # # Чего проверка НЕ делает: живых вызовов системных счётчиков. Их правильность # доказывает только прогон на самой платформе. set -e cd "$(dirname "$0")" SRC=../../PlatformUtils.pas WORK=$(mktemp -d) trap 'rm -rf "$WORK"' EXIT # ── Windows ── mkdir -p "$WORK/win" cp win_stub/Windows.pas "$WORK/win/" sed -e 's/{\$IFDEF WINDOWS}/{$IFDEF SIMWIN}/g' \ -e 's/{\$IFNDEF WINDOWS}/{$IFNDEF SIMWIN}/g' "$SRC" > "$WORK/win/PlatformUtils.pas" ( cd "$WORK/win" && fpc -B -Mobjfpc -dHEADLESS -dSIMWIN -Fu. -FU. -Cn PlatformUtils.pas >"$WORK/win.log" 2>&1 ) \ || { echo "WINDOWS-ветка НЕ компилируется:"; cat "$WORK/win.log"; exit 1; } echo " ok PlatformUtils: ветка WINDOWS компилируется (заглушка unit Windows перекрывает SysUtils, как настоящий)" # ── macOS ── mkdir -p "$WORK/mac" sed -e 's/{\$IFDEF LINUX}/{$IFDEF SIMLINUX}/g' \ -e 's/{\$IFDEF DARWIN}/{$IFDEF SIMMAC}/g' \ -e 's/{\$IF DEFINED(DARWIN) AND NOT DEFINED(HEADLESS)}/{$IF DEFINED(SIMMAC) AND NOT DEFINED(HEADLESS)}/g' \ "$SRC" > "$WORK/mac/PlatformUtils.pas" ( cd "$WORK/mac" && fpc -B -Mobjfpc -dHEADLESS -dSIMMAC -Fu. -FU. -Cn PlatformUtils.pas >"$WORK/mac.log" 2>&1 ) \ || { echo "DARWIN-ветка НЕ компилируется:"; cat "$WORK/mac.log"; exit 1; } echo " ok PlatformUtils: ветка DARWIN компилируется (mach_absolute_time, без линковки)" echo echo "Итого: 2 проверки, провалено 0"