diff --git a/artifacts/runtime/env_sync.sh b/artifacts/runtime/env_sync.sh index cf8c1bb35..5c26e2341 100755 --- a/artifacts/runtime/env_sync.sh +++ b/artifacts/runtime/env_sync.sh @@ -73,9 +73,20 @@ sync_python_env() { return 1 fi PACKAGE_BUILD_PYTHONPATH="$BASE_SITE_PACKAGES:$VENV_SITE_PACKAGES" - UV_CACHE_DIR="$UV_CACHE_DIR" PYTHONPATH="$PACKAGE_BUILD_PYTHONPATH" PATH="/usr/local/venv/bin:/usr/bin:$PATH" \ + # The base AGNOS venv ships Eigen as a Python package instead of under + # /usr/include. rednose includes , so source-package + # builds need the package's install directory on the compiler include path. + # Resolve it through Python rather than pinning the Python minor version. + EIGEN_INCLUDE_ROOT="$(/usr/local/venv/bin/python3 -c \ + 'from pathlib import Path; import eigen; root = Path(eigen.__file__).resolve().parent / "install"; assert (root / "eigen3/Eigen/Dense").is_file(); print(root)' \ + 2>/dev/null || true)" + PACKAGE_BUILD_CPATH="${CPATH:-}" + if [ -n "$EIGEN_INCLUDE_ROOT" ]; then + PACKAGE_BUILD_CPATH="$EIGEN_INCLUDE_ROOT${PACKAGE_BUILD_CPATH:+:$PACKAGE_BUILD_CPATH}" + fi + UV_CACHE_DIR="$UV_CACHE_DIR" PYTHONPATH="$PACKAGE_BUILD_PYTHONPATH" CPATH="$PACKAGE_BUILD_CPATH" PATH="/usr/local/venv/bin:/usr/bin:$PATH" \ uv pip install --python "$DIR/.venv/bin/python" --no-build-isolation --no-deps --reinstall "$IQDBC_PACKAGE_SOURCE" || return 1 - UV_CACHE_DIR="$UV_CACHE_DIR" PYTHONPATH="$PACKAGE_BUILD_PYTHONPATH" PATH="/usr/local/venv/bin:/usr/bin:$PATH" \ + UV_CACHE_DIR="$UV_CACHE_DIR" PYTHONPATH="$PACKAGE_BUILD_PYTHONPATH" CPATH="$PACKAGE_BUILD_CPATH" PATH="/usr/local/venv/bin:/usr/bin:$PATH" \ uv pip install --python "$DIR/.venv/bin/python" --no-build-isolation --no-deps --reinstall "${PACKAGE_SOURCES[@]}" || return 1 printf '%s\n' "$PACKAGE_LOCK_SHA" > "$DIR/.iqpilot-package-lock-sha256" fi