| 1 | #!/usr/bin/env bash
|
| 2 | set -euo pipefail
|
| 3 |
|
| 4 | INSTALL_DIR="${HOME}/.local/bin"
|
| 5 | BIN_NAME="pas"
|
| 6 |
|
| 7 | echo "Building Pascal's Discrete Attractor (release)..."
|
| 8 | cargo build -p attractor-cli --release
|
| 9 |
|
| 10 | # Create install directory if needed
|
| 11 | mkdir -p "${INSTALL_DIR}"
|
| 12 |
|
| 13 | # Copy binary
|
| 14 | cp "target/release/${BIN_NAME}" "${INSTALL_DIR}/${BIN_NAME}"
|
| 15 |
|
| 16 | # Sign with Apple Developer identity (prevents macOS SIGKILL on unsigned binaries)
|
| 17 | if [[ -z "${CODESIGN_IDENTITY:-}" ]]; then
|
| 18 | echo "ERROR: CODESIGN_IDENTITY is not set."
|
| 19 | echo "Set it in your .envrc (see .envrc.example) or export it before running install.sh"
|
| 20 | exit 1
|
| 21 | fi
|
| 22 | if security find-identity -v -p codesigning 2>/dev/null | grep -q "${CODESIGN_IDENTITY}"; then
|
| 23 | codesign --force --sign "${CODESIGN_IDENTITY}" "${INSTALL_DIR}/${BIN_NAME}"
|
| 24 | echo "Signed ${BIN_NAME} with ${CODESIGN_IDENTITY}"
|
| 25 | else
|
| 26 | echo "WARNING: Signing identity not found, skipping codesign"
|
| 27 | fi
|
| 28 |
|
| 29 | echo "Installed ${BIN_NAME} to ${INSTALL_DIR}/${BIN_NAME}"
|
| 30 |
|
| 31 | # Check if install dir is in PATH
|
| 32 | if ! echo "${PATH}" | tr ':' '\n' | grep -qx "${INSTALL_DIR}"; then
|
| 33 | echo ""
|
| 34 | echo "WARNING: ${INSTALL_DIR} is not in your PATH."
|
| 35 | echo "Add it to your shell config:"
|
| 36 | echo ""
|
| 37 | echo " # bash (~/.bashrc)"
|
| 38 | echo " export PATH=\"${INSTALL_DIR}:\${PATH}\""
|
| 39 | echo ""
|
| 40 | echo " # zsh (~/.zshrc)"
|
| 41 | echo " export PATH=\"${INSTALL_DIR}:\${PATH}\""
|
| 42 | echo ""
|
| 43 | echo " # fish (~/.config/fish/config.fish)"
|
| 44 | echo " fish_add_path ${INSTALL_DIR}"
|
| 45 | fi
|
| 46 |
|
| 47 | echo ""
|
| 48 | "${INSTALL_DIR}/${BIN_NAME}" --version
|