#!/bin/sh # shmake_testlib.sh - Test library cloning for shmake # Author: Emilia Marigold clone_test_library() { test_lib="$1" LIBRARY_DIR="external_code/test_only/source_code" LIB_URL="" LIB_NAME="" case "$test_lib" in Unity|unity) LIB_URL="https://github.com/ThrowTheSwitch/Unity.git" LIB_NAME="Unity" ;; CMocka|cmocka|CMOCKA) LIB_URL="https://github.com/clibs/cmocka.git" LIB_NAME="cmocka" ;; Check|check) LIB_URL="https://github.com/libcheck/check.git" LIB_NAME="check" ;; None|none) return 0 ;; *) printf "Warning: Unknown test library '%s'. Skipping auto-clone.\n" "$test_lib" return 0 ;; esac printf "\nAuto-cloning test library '%s' to %s...\n" "$test_lib" "$LIBRARY_DIR" if ! command -v git >/dev/null 2>&1; then printf "Warning: 'git' not found. Library '%s' will need to be added manually.\n" "$test_lib" printf "URL: %s\n" "$LIB_URL" mkdir -p "shmake_config" printf "%s\n" "$LIB_URL" > "shmake_config/project_external_libraries.config" return 1 fi if [ -d "$LIBRARY_DIR/$LIB_NAME" ]; then printf "Note: '%s' already exists in %s\n" "$LIB_NAME" "$LIBRARY_DIR" printf "Overwrite? [y/N]: " read -r overwrite case "$overwrite" in y|Y) rm -rf "$LIBRARY_DIR/$LIB_NAME" ;; *) printf "Keeping existing installation.\n" printf "%s\n" "$LIB_URL" > "shmake_config/project_external_libraries.config" return 0 ;; esac fi mkdir -p "$LIBRARY_DIR" printf "Cloning %s (shallow)...\n" "$LIB_NAME" if git clone "$LIB_URL" "$LIBRARY_DIR/$LIB_NAME"; then printf "Test library '%s' cloned successfully!\n" "$test_lib" printf "%s\n" "$LIB_URL" > "shmake_config/project_external_libraries.config" else printf "Warning: Failed to clone '%s'. You may need to add it manually.\n" "$test_lib" printf "URL: %s\n" "$LIB_URL" printf "%s\n" "$LIB_URL" > "shmake_config/project_external_libraries.config" return 1 fi }