#!/bin/sh # shmake_library.sh - External library addition for shmake # Author: Emilia Marigold - 2026 download_library() { check_project_root if [ $# -lt 1 ]; then printf "Usage: %s library [url]\n" "$SCRIPT_NAME" exit 1 fi LIBRARY_URL="$1" LIBRARY_DIR="external_code/shared_libraries/source_code" printf "Adding library from '%s' to %s...\n" "$LIBRARY_URL" "$LIBRARY_DIR" LIBRARY_NAME=$(printf "%s" "$LIBRARY_URL" | sed 's|.*/||' | sed 's|.git$||') if [ -d "$LIBRARY_DIR/$LIBRARY_NAME" ]; then printf "Warning: '%s' already exists in %s\n" "$LIBRARY_NAME" "$LIBRARY_DIR" printf "Overwrite? [y/N]: " read -r overwrite case "$overwrite" in y|Y) rm -rf "$LIBRARY_DIR/$LIBRARY_NAME" ;; *) printf "Aborted.\n" && exit 0 ;; esac fi case "$LIBRARY_URL" in *.git) printf "Detected Git repository. Using git clone (shallow)...\n" if command -v git >/dev/null 2>&1; then mkdir -p "$LIBRARY_DIR" git clone "$LIBRARY_URL" "$LIBRARY_DIR/$LIBRARY_NAME" if [ $? -eq 0 ]; then printf "Library '%s' cloned successfully!\n" "$LIBRARY_NAME" printf "%s\n" "$LIBRARY_URL" >> "shmake_config/project_external_libraries.config" else printf "Error: Git clone failed.\n" exit 1 fi else printf "Error: 'git' not found. Please install git.\n" exit 1 fi ;; *) printf "Detected file download. Trying wget/curl...\n" if command -v wget >/dev/null 2>&1; then printf "Using wget...\n" mkdir -p "$LIBRARY_DIR" wget "$LIBRARY_URL" -O "$LIBRARY_DIR/${LIBRARY_NAME}.tar.gz" 2>/dev/null if [ $? -eq 0 ]; then tar -xzf "$LIBRARY_DIR/${LIBRARY_NAME}.tar.gz" -C "$LIBRARY_DIR" 2>/dev/null rm "$LIBRARY_DIR/${LIBRARY_NAME}.tar.gz" printf "Library '%s' downloaded successfully!\n" "$LIBRARY_NAME" printf "%s\n" "$LIBRARY_URL" >> "shmake_config/project_external_libraries.config" else printf "Error: wget download failed.\n" exit 1 fi elif command -v curl >/dev/null 2>&1; then printf "Using curl...\n" mkdir -p "$LIBRARY_DIR" curl -L "$LIBRARY_URL" -o "$LIBRARY_DIR/${LIBRARY_NAME}.tar.gz" 2>/dev/null if [ $? -eq 0 ]; then tar -xzf "$LIBRARY_DIR/${LIBRARY_NAME}.tar.gz" -C "$LIBRARY_DIR" 2>/dev/null rm "$LIBRARY_DIR/${LIBRARY_NAME}.tar.gz" printf "Library '%s' downloaded successfully!\n" "$LIBRARY_NAME" printf "%s\n" "$LIBRARY_URL" >> "shmake_config/project_external_libraries.config" else printf "Error: curl download failed.\n" exit 1 fi else printf "Error: Neither 'wget' nor 'curl' found. Please install one.\n" exit 1 fi ;; esac }