#!/usr/bin/env sh set -eu PYTHON_BIN="${PYTHON:-python3}" INSTALL_ROOT="${FLOW_INSTALL_ROOT:-$HOME/.local/share/flow}" BIN_DIR="${FLOW_BIN_DIR:-$HOME/.local/bin}" VENV_DIR="$INSTALL_ROOT/venv" SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) WHEELHOUSE="$SCRIPT_DIR/wheelhouse" if ! command -v "$PYTHON_BIN" >/dev/null 2>&1; then echo "python3 is required. Set PYTHON=/path/to/python3 to override." >&2 exit 1 fi if ! "$PYTHON_BIN" -m venv --help >/dev/null 2>&1; then echo "python3 was built without the venv module. Install Python's venv package." >&2 exit 1 fi if ! "$PYTHON_BIN" -m pip --version >/dev/null 2>&1; then echo "python3 pip module is required. Install pip for the selected python." >&2 exit 1 fi if [ ! -d "$WHEELHOUSE" ]; then echo "wheelhouse not found: $WHEELHOUSE" >&2 exit 1 fi FLOW_WHEELS_COUNT=0 FLOW_WHEEL="" for candidate in "$WHEELHOUSE"/flow-*.whl; do if [ -f "$candidate" ]; then FLOW_WHEELS_COUNT=$((FLOW_WHEELS_COUNT + 1)) if [ -z "$FLOW_WHEEL" ]; then FLOW_WHEEL="$candidate" fi fi done if [ "$FLOW_WHEELS_COUNT" -eq 0 ]; then echo "flow wheel not found in $WHEELHOUSE" >&2 exit 1 fi if [ "$FLOW_WHEELS_COUNT" -gt 1 ]; then echo "multiple flow wheels found in $WHEELHOUSE. Ensure exactly one release wheel is present." >&2 exit 1 fi mkdir -p "$INSTALL_ROOT" "$PYTHON_BIN" -m venv "$VENV_DIR" if ! "$VENV_DIR/bin/python" -m pip --version >/dev/null 2>&1; then echo "Created venv does not expose pip. Ensure Python's ensurepip is available." >&2 exit 1 fi "$VENV_DIR/bin/python" -m pip install --no-cache-dir --upgrade "$FLOW_WHEEL" mkdir -p "$BIN_DIR" cat > "$BIN_DIR/flow" <