#!/usr/bin/env bash set -euo pipefail _get_path_separator() { local platform="${1:-$(uname -s)}" case "$platform" in MINGW* | MSYS* | CYGWIN* | Windows) echo ";" ;; *) echo ":" ;; esac } setup_onnx_paths() { local ort_lib="${ORT_LIB_LOCATION:-}" [ -z "$ort_lib" ] && return 0 local platform="${RUNNER_OS:-$(uname -s)}" case "$platform" in Linux) export LD_LIBRARY_PATH="${ort_lib}:${LD_LIBRARY_PATH:-}" echo "✓ Set LD_LIBRARY_PATH for ONNX Runtime" ;; macOS | Darwin) export DYLD_LIBRARY_PATH="${ort_lib}:${DYLD_LIBRARY_PATH:-}" export DYLD_FALLBACK_LIBRARY_PATH="${ort_lib}:${DYLD_FALLBACK_LIBRARY_PATH:-}" echo "✓ Set DYLD_LIBRARY_PATH for ONNX Runtime on macOS" ;; Windows | MINGW* | MSYS* | CYGWIN*) export PATH="${ort_lib};${PATH:-}" echo "✓ Set PATH for ONNX Runtime on Windows" ;; esac } setup_rust_ffi_paths() { local repo_root="${1:-${REPO_ROOT:-}}" [ -z "$repo_root" ] && return 0 local ffi_lib="$repo_root/target/release" local ffi_lib_gnu="$repo_root/target/x86_64-pc-windows-gnu/release" local platform="${RUNNER_OS:-$(uname -s)}" case "$platform" in Linux) [ ! -d "$ffi_lib" ] && return 0 export LD_LIBRARY_PATH="${ffi_lib}:${LD_LIBRARY_PATH:-}" echo "✓ Set LD_LIBRARY_PATH for Rust FFI" ;; macOS | Darwin) [ ! -d "$ffi_lib" ] && return 0 export DYLD_LIBRARY_PATH="${ffi_lib}:${DYLD_LIBRARY_PATH:-}" export DYLD_FALLBACK_LIBRARY_PATH="${ffi_lib}:${DYLD_FALLBACK_LIBRARY_PATH:-}" echo "✓ Set DYLD_LIBRARY_PATH for Rust FFI on macOS" ;; Windows | MINGW* | MSYS* | CYGWIN*) # Check for short path CI directories first local cargo_target="${CARGO_TARGET_DIR:-}" if [ -n "$cargo_target" ] && [ -d "$cargo_target/release" ]; then export PATH="${cargo_target}/release;${PATH:-}" echo "✓ Set PATH for Rust FFI (using CARGO_TARGET_DIR=$cargo_target)" fi # Add GNU target path if it exists if [ -d "$ffi_lib_gnu" ]; then export PATH="${ffi_lib_gnu};${PATH:-}" echo "✓ Set PATH for Rust FFI GNU target" fi # Add standard target path if it exists if [ -d "$ffi_lib" ]; then export PATH="${ffi_lib};${PATH:-}" echo "✓ Set PATH for Rust FFI on Windows" fi ;; esac } verify_pkg_config() { if pkg-config --exists kreuzberg-ffi 2>/dev/null; then return 0 else { echo "Error: pkg-config cannot find kreuzberg-ffi" echo "PKG_CONFIG_PATH=${PKG_CONFIG_PATH:-}" echo "Run 'pkg-config --list-all' to see available packages" } >&2 return 1 fi } setup_go_paths_windows() { local repo_root="${1:-${REPO_ROOT:-}}" [ -z "$repo_root" ] && return 0 local gnu_target="${repo_root}/target/x86_64-pc-windows-gnu/release" local release_target="${repo_root}/target/release" export PKG_CONFIG_PATH="${repo_root}/crates/kreuzberg-ffi:${PKG_CONFIG_PATH:-}" export PATH="${gnu_target};${release_target};${PATH:-}" export CGO_ENABLED=1 export CGO_CFLAGS="-I${repo_root}/crates/kreuzberg-ffi/include" export CGO_LDFLAGS="-L${gnu_target} -L${release_target} -lkreuzberg_ffi -static-libgcc -static-libstdc++" echo "✓ Configured Go cgo environment for Windows" } # NOTE: CGO_LDFLAGS is set by setup-go-cgo-env action on Windows in CI, or by this script on Unix setup_go_paths() { local repo_root="${1:-${REPO_ROOT:-}}" [ -z "$repo_root" ] && return 0 local pc_path="${repo_root}/crates/kreuzberg-ffi/kreuzberg-ffi.pc" if [ ! -f "$pc_path" ]; then local version="" version="$(sed -n 's/^version = \"\\(.*\\)\"/\\1/p' "${repo_root}/Cargo.toml" | head -n 1 || true)" [ -z "$version" ] && version="unknown" local platform="${RUNNER_OS:-$(uname -s)}" local libs_private="" case "$platform" in Linux) libs_private="-lpthread -ldl -lm" ;; macOS | Darwin) libs_private="-framework CoreFoundation -framework Security -lpthread" ;; Windows | MINGW* | MSYS* | CYGWIN*) libs_private="-lws2_32 -luserenv -lbcrypt" ;; esac mkdir -p "$(dirname "$pc_path")" cat >"$pc_path" <