aboutsummaryrefslogtreecommitdiff
path: root/tools/cpm/download.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tools/cpm/download.sh')
-rwxr-xr-xtools/cpm/download.sh100
1 files changed, 100 insertions, 0 deletions
diff --git a/tools/cpm/download.sh b/tools/cpm/download.sh
new file mode 100755
index 0000000000..426f1f51e6
--- /dev/null
+++ b/tools/cpm/download.sh
@@ -0,0 +1,100 @@
+#!/bin/sh -e
+
+# SPDX-FileCopyrightText: 2025 crueter
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+# env vars:
+# - UPDATE: fix hashes if needed
+
+# shellcheck disable=SC1091
+. tools/cpm/common.sh
+
+download_package() {
+ FILENAME=$(basename "$DOWNLOAD")
+
+ OUTFILE="$TMP/$FILENAME"
+
+ LOWER_PACKAGE=$(echo "$PACKAGE_NAME" | tr '[:upper:]' '[:lower:]')
+ OUTDIR="${CPM_SOURCE_CACHE}/${LOWER_PACKAGE}/${KEY}"
+ [ -d "$OUTDIR" ] && return
+
+ curl "$DOWNLOAD" -sS -L -o "$OUTFILE"
+
+ ACTUAL_HASH=$("${HASH_ALGO}"sum "$OUTFILE" | cut -d" " -f1)
+ [ "$ACTUAL_HASH" != "$HASH" ] && echo "!! $FILENAME did not match expected hash; expected $HASH but got $ACTUAL_HASH" && exit 1
+
+ mkdir -p "$OUTDIR"
+
+ PREVDIR="$PWD"
+ cd "$OUTDIR"
+
+ case "$FILENAME" in
+ (*.7z)
+ 7z x "$OUTFILE" > /dev/null
+ ;;
+ (*.tar*)
+ tar xf "$OUTFILE" > /dev/null
+ ;;
+ (*.zip)
+ unzip "$OUTFILE" > /dev/null
+ ;;
+ esac
+
+ # basically if only one real item exists at the top we just move everything from there
+ # since github and some vendors hate me
+ DIRS=$(find . -maxdepth 1 -type d -o -type f)
+
+ # thanks gnu
+ if [ "$(echo "$DIRS" | wc -l)" -eq 2 ]; then
+ SUBDIR=$(find . -maxdepth 1 -type d -not -name ".")
+ mv "$SUBDIR"/* .
+ mv "$SUBDIR"/.* . 2>/dev/null || true
+ rmdir "$SUBDIR"
+ fi
+
+ if echo "$JSON" | grep -e "patches" > /dev/null; then
+ PATCHES=$(echo "$JSON" | jq -r '.patches | join(" ")')
+ for patch in $PATCHES; do
+ # shellcheck disable=SC2154
+ patch --binary -p1 < "$ROOTDIR/.patch/$PACKAGE/$patch"
+ done
+ fi
+
+ cd "$PREVDIR"
+}
+
+ci_package() {
+ [ "$REPO" = null ] && echo "-- ! No repo defined" && return
+
+ echo "-- CI package $PACKAGE_NAME"
+
+ for platform in windows-amd64 windows-arm64 android solaris-amd64 freebsd-amd64 linux-amd64 linux-aarch64 macos-universal; do
+ echo "-- * platform $platform"
+
+ case $DISABLED in
+ (*"$platform"*)
+ echo "-- * -- disabled"
+ continue
+ ;;
+ (*) ;;
+ esac
+
+ FILENAME="${NAME}-${platform}-${VERSION}.${EXT}"
+ DOWNLOAD="https://$GIT_HOST/${REPO}/releases/download/v${VERSION}/${FILENAME}"
+ KEY=$platform
+
+ LOWER_PACKAGE=$(echo "$PACKAGE_NAME" | tr '[:upper:]' '[:lower:]')
+ OUTDIR="${CPM_SOURCE_CACHE}/${LOWER_PACKAGE}/${KEY}"
+ [ -d "$OUTDIR" ] && continue
+
+ HASH_ALGO=$(value "hash_algo")
+ [ "$HASH_ALGO" = null ] && HASH_ALGO=sha512
+
+ HASH_SUFFIX="${HASH_ALGO}sum"
+ HASH_URL="${DOWNLOAD}.${HASH_SUFFIX}"
+
+ HASH=$(curl "$HASH_URL" -sS -q -L -o -)
+
+ download_package
+ done
+}