easylibstorage/scripts/fetch-libstorage.sh

70 lines
1.8 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
set -euo pipefail
LIBSTORAGE_VERSION="v0.3.1"
# --- Detect OS ---
case "$(uname -s)" in
Linux) OS="linux" ;;
Darwin) OS="darwin" ;;
*) echo "Error: unsupported OS '$(uname -s)'" >&2; exit 1 ;;
esac
# --- Detect architecture ---
case "$(uname -m)" in
x86_64) ARCH="amd64" ;;
aarch64|arm64) ARCH="arm64" ;;
*) echo "Error: unsupported architecture '$(uname -m)'" >&2; exit 1 ;;
esac
# --- Check dependencies ---
for cmd in curl unzip; do
if ! command -v "$cmd" &>/dev/null; then
echo "Error: '$cmd' is required but not found" >&2
exit 1
fi
done
# --- Construct URL and destination ---
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
DEST_DIR="${SCRIPT_DIR}/../libstorage"
ZIP_NAME="libstorage-${OS}-${ARCH}-${LIBSTORAGE_VERSION}.zip"
URL="https://github.com/logos-storage/logos-storage-nim/releases/download/${LIBSTORAGE_VERSION}/${ZIP_NAME}"
echo "Fetching ${ZIP_NAME} ..."
# --- Download to temp file ---
TMPFILE="$(mktemp)"
trap 'rm -f "$TMPFILE"' EXIT
if ! curl -fSL -o "$TMPFILE" "$URL"; then
echo "Error: failed to download ${URL}" >&2
exit 1
fi
# --- Prepare destination ---
rm -rf "$DEST_DIR"
mkdir -p "${DEST_DIR}/library" "${DEST_DIR}/build"
# --- Extract ---
TMPDIR_EXTRACT="$(mktemp -d)"
trap 'rm -f "$TMPFILE"; rm -rf "$TMPDIR_EXTRACT"' EXIT
unzip -q -o "$TMPFILE" -d "$TMPDIR_EXTRACT"
# --- Place files into expected layout ---
# Determine shared library extension
case "$OS" in
linux) LIB_EXT="so" ;;
darwin) LIB_EXT="dylib" ;;
esac
cp "${TMPDIR_EXTRACT}/libstorage.h" "${DEST_DIR}/library/"
cp "${TMPDIR_EXTRACT}/libstorage.${LIB_EXT}" "${DEST_DIR}/build/"
echo ""
echo "libstorage ${LIBSTORAGE_VERSION} installed to: ${DEST_DIR}"
echo ""
echo "Use with cmake:"
echo " cmake -B build -S . -DLOGOS_STORAGE_NIM_ROOT=${DEST_DIR}"