diff options
| author | B. Watson <urchlay@slackware.uk> | 2023-05-13 03:28:23 -0400 | 
|---|---|---|
| committer | B. Watson <urchlay@slackware.uk> | 2023-05-13 03:28:23 -0400 | 
| commit | a7d41216611852b969e30b30c3fe6cd5b46602cf (patch) | |
| tree | 270876518d114ae5e9a2c2856ef31eaa49df602c | |
| parent | d95bccfe8259f87eee5c63b70d1d04e08f167659 (diff) | |
| download | sbo-maintainer-tools-a7d41216611852b969e30b30c3fe6cd5b46602cf.tar.gz | |
add sbodl (moved from the sbostuff repo).
| -rwxr-xr-x | sbodl | 156 | 
1 files changed, 156 insertions, 0 deletions
| @@ -0,0 +1,156 @@ +#!/bin/bash + +# sbodl, download slackbuilds.org source files + +# 20230513 bkw: move to the sbo-maintainer-tools repo, clean up for release. +# 20191222 bkw: handle broken symlinks in current dir. +#               change default cache dir. +# 20170306 bkw: add caching + +VERSION=0.8.0 + +SELF=$( basename $0 ) + +DEFCACHEDIR=~/sbodl-cache +CACHEDIR=${SBODL_CACHEDIR:-$DEFCACHEDIR} + +ARCHIVE=https://slackware.uk/sbosrcarch + +RED="\033[1;31m" +GREEN="\033[1;32m" +COLOR_OFF="\033[0m" + + +usage() { +	cat <<EOF +$SELF v$VERSION - Download the sources for a SlackBuilds.org build. +(c) 2014, 2023 B. Watson (urchlay@slackware.uk) +Licensed under the WTFPL: Do WTF you want with this. + +Usage: $SELF [-f] <wget-options> + +Execute $SELF in the directory that contains the .info and .SlackBuild +files. If the files are not found in the current directory, they'll be +looked for in the cache directory, and symlinked to the current dir if +found there. If they're not in the cache, they'll be downloaded with wget. + +Each file's md5sum is checked against the .info file in the current directory. + +Options: + +-h, --help: Show this help message. + +-f: Ignore locally cached files, always download. + +-a: Download from sbosrcarch (Source Archive). + +Any other options you pass to it will be passed to wget. + +By default, --content-disposition is used. If you want to disable it, use +the --no-content-disposition wget option. + +The default cache directory is $DEFCACHEDIR, +but you can override this by setting SBODL_CACHEDIR in the environment. + +If you need to download files for a different architecture +(e.g. 32-bit files when running on a 64-bit OS), you can override ARCH +in the environment: "ARCH=i686 sbodl" would download the 32-bit source +file(s). + +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 ;; +	-a) USEARCHIVE="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 +	if [ "$USEARCHIVE" = "yes" ]; then +		file="$( echo "$dl" | sed 's,.*/,,' )" +		a=$( echo $1 | cut -b1 ) +		b=$( echo $1 | cut -b2 ) +		dl="$ARCHIVE/by-md5/$a/$b/$1/$file" +	fi + +	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 -e "${RED}WARN: md5sum doesn't match${COLOR_OFF}\\n     expected: $1\\n           got: $GOTSUM" +		else +			echo -e "${GREEN}md5sum matches OK${COLOR_OFF}: $1" +		fi +	else +		echo -e "${RED}WARN${COLOR_OFF}: can't find downloaded file $FILE" +	fi +	shift +done | 
