90 lines
4.3 KiB
Bash
90 lines
4.3 KiB
Bash
#!/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
|
|
}
|