#!/usr/bin/env bash
ghostty_minimum_zig_version() {
local repo_root="${1:-}"
if [[ -z "$repo_root" ]]; then
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
fi
local manifest="$repo_root/ghostty/build.zig.zon"
if [[ ! -f "$manifest" ]]; then
echo "error: Ghostty Zig manifest not found: $manifest" >&2
return 1
fi
local version
version="$(
sed -nE 's/^[[:space:]]*\.minimum_zig_version[[:space:]]*=[[:space:]]*"([^"]+)".*/\1/p' \
"$manifest" | head -1
)"
if [[ ! "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "error: invalid Ghostty minimum_zig_version in $manifest" >&2
return 1
fi
printf '%s\n' "$version"
}
ghostty_zig_version_is_compatible() {
local actual="${1:-}"
local required="${2:-}"
local actual_core="${actual%%[-+]*}"
local required_core="${required%%[-+]*}"
local actual_major actual_minor actual_patch actual_extra
local required_major required_minor required_patch required_extra
IFS=. read -r actual_major actual_minor actual_patch actual_extra <<< "$actual_core"
IFS=. read -r required_major required_minor required_patch required_extra <<< "$required_core"
if [[ -n "${actual_extra:-}" || -n "${required_extra:-}" ]] ||
[[ ! "$actual_major" =~ ^[0-9]+$ || ! "$actual_minor" =~ ^[0-9]+$ || ! "$actual_patch" =~ ^[0-9]+$ ]] ||
[[ ! "$required_major" =~ ^[0-9]+$ || ! "$required_minor" =~ ^[0-9]+$ || ! "$required_patch" =~ ^[0-9]+$ ]]; then
return 1
fi
(( 10#$actual_major == 10#$required_major &&
10#$actual_minor == 10#$required_minor &&
10#$actual_patch >= 10#$required_patch ))
}
if [[ "${BASH_SOURCE[0]}" == "$0" ]]; then
ghostty_minimum_zig_version "${1:-}"
fi