diff options
Diffstat (limited to 'sbodl')
-rwxr-xr-x | sbodl | 88 |
1 files changed, 88 insertions, 0 deletions
@@ -0,0 +1,88 @@ +#!/bin/bash + +# sbodl, initial public release. + +SELF=$( basename $0 ) + +usage() { + cat <<EOF +$SELF - download the sources for a slackbuilds.org build. +version 20140421, public release +(c) 2014 B. Watson (yalhcru at gmail dawt cawm) +Licensed under the WTFPL: Do WTF you want with this. + +Usage: $SELF <wget-options> + +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 doesn't take any options itself (except --help), but any options +you pass to it will be passed to wget. +EOF + exit 0 +} + +die() { + echo "$SELF: $*" 2>&1 + exit 1 +} + +# check for our one argument +case "$*" in + -h|-help|-\?|--help) usage ;; +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=i486 ;; + 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,.*/,,' ) + + wget $WGETARGS $EXTRAWGETARGS "$dl" || die "Download failed" + + 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 + echo + shift +done |