#!/bin/bash # sbodl, download slackbuilds.org source files # 20191222 bkw: handle broken symlinks in current dir. # change default cache dir. # 20170306 bkw: add caching SELF=$( basename $0 ) CACHEDIR=~/sbodl-cache usage() { cat < Execute $SELF in the directory that contains the .info and .SlackBuild files. It will use wget to download the source file(s), then check their md5sums. $SELF options: -h, --help: Show this help message. -f: Ignore locally cached files, always download. Any other options you pass to it will be passed to wget. EOF exit 0 } die() { echo "$SELF: $*" 2>&1 exit 1 } [ -d "$CACHEDIR/" ] || mkdir -p $CACHEDIR || die "Can't create $CACHEDIR" # check for our one argument case "$1" in -h|-help|-\?|--help) usage ;; -f) FORCEDL="yes" ; shift ;; esac source ./$( basename $( pwd ) ).info \ || die "No .info file, are you sure this is a SBo directory? Try '$SELF --help'" # This stanza copied from the SBo template for 14.1: if [ -z "$ARCH" ]; then case "$( uname -m )" in i?86) ARCH=i586 ;; arm*) ARCH=arm ;; *) ARCH=$( uname -m ) ;; esac fi if [ "$ARCH" = "x86_64" ]; then DL=${DOWNLOAD_x86_64:-$DOWNLOAD} SUM=${MD5SUM_x86_64:-$MD5SUM} else DL=$DOWNLOAD SUM=${MD5SUM} fi if [ -z "$DL" ]; then die "Bad .info file (no DOWNLOAD= or DOWNLOAD_x86_64=)." fi # save passed-in command line args for use with wget WGETARGS="$@" set $SUM for dl in $DL; do EXTRAWGETARGS="--content-disposition " case "$dl" in *sourceforge.net/*|*.sf.net/*) EXTRAWGETARGS="--user-agent wget" ;; *) ;; esac FILE=$( echo "$dl" | sed 's,.*/,,' ) # ignore (rm) broken symlinks [ -L "$FILE" ] && ! [ -e "$FILE" ] && FORCEDL=yes [ "$FORCEDL" = "yes" ] && rm -f "$FILE" if [ -f "$FILE" -a ! -L "$FILE" ]; then # file exists and is a regular file, cache it mv -b "$FILE" "$CACHEDIR" ln -s "$CACHEDIR/$FILE" "$FILE" elif [ -e "$FILE" ]; then # don't do anything : elif [ "$FORCEDL" != "yes" ] && [ -e "$CACHEDIR/$FILE" ]; then ln -s "$CACHEDIR/$FILE" "$FILE" else wget $EXTRAWGETARGS $WGETARGS "$dl" || die "Download failed" if [ -e "$FILE" ]; then mv -b "$FILE" "$CACHEDIR" ln -s "$CACHEDIR/$FILE" "$FILE" fi fi if [ -e "$FILE" ]; then GOTSUM="$( md5sum "$FILE" | cut -d' ' -f1 )" if [ "$1" != "$GOTSUM" ]; then echo "WARN: md5sum doesn't match, expected $1, got $GOTSUM" else echo "md5sum matches OK: $1" fi else echo "WARN: can't find downloaded file $FILE" fi shift done