#!/bin/bash if [ "$1" = "--help" ]; then cat < [ ...] is an installable Slackware package (.tgz, etc). If no given, the .info and SlackBuild in the current directory are parsed to get a package filename. If this package exists, it will be installed. Actual package installation is done with: upgradepkg --reinstall --install-new EOF exit 0 fi die() { echo "$( basename $0 ): $@" 1>&2 exit 1 } OUTPUT=${OUTPUT:-/tmp} if [ -z "$ARCH" ]; then case "$( uname -m )" in i?86) ARCH=i686 ;; arm*) ARCH=arm ;; *) ARCH=$( uname -m ) ;; esac fi case "$ARCH" in i?86) ARCHES="i686 i586 i486 i386" ;; *) ARCHES="$ARCH" ;; esac # if no package name, see if we're in a SlackBuild dir. if so, # install the package for the current dir, if one exists in $OUTPUT. # If PRINT_PACKAGE_NAME is found in the script, use it to get # the package filename. Otherwise, read .info file for version number # and extract BUILD from the SlackBuild. if [ -z "$@" ]; then script="$( echo *.SlackBuild)" [ "$script" = '*.SlackBuild' ] && die "no .SlackBuild file in current dir" script1=$( echo *.SlackBuild | cut -d' ' -f1 ) [ "$script" != "$script1" ] && die "multiple .SlackBuild files found in current dir" if grep -q PRINT_PACKAGE_NAME $script; then pkgfile="$( PRINT_PACKAGE_NAME=1 sh $script )" if [ -e "$OUTPUT/$pkgfile" ]; then found="$OUTPUT/$pkgfile" else die "No $pkgfile found in $OUTPUT, build one!" fi else infofile=$( echo *.info ) [ "$infofile" = '*.info' ] && die "no .info file in current dir" infofile1=$( echo *.info | cut -d' ' -f1 ) [ "$infofile" != "$infofile1" ] && die "multiple .info files found in current dir" pkgname=$(basename $infofile .info) [ ! -e "$pkgname.SlackBuild" ] && die "$pkgname.SlackBuild not found in current dir" source ./$pkgname.info [ -z "$PRGNAM" -o -z "$VERSION" ] && die "bad/incomplete .info file, bailing" [ "$PRGNAM" != "$pkgname" ] && die "bad PRGNAM=$PRGNAM in $pkgname.info" buildline=$(grep "^ *BUILD=" $pkgname.SlackBuild) [ -z "$buildline" ] && die "missing BUILD= in $pkgname.SlackBuild" eval $buildline for myarch in noarch $ARCHES; do myglob="$OUTPUT/$PRGNAM-$VERSION-$myarch-$BUILD*.t?z" myfile=$( echo $myglob ) if [ "$myglob" = "$myfile" ]; then : # do naught elif [ "$( /bin/ls $myfile 2>/dev/null | wc -l )" -gt "1" ]; then die "Multiple packages match, not installing anything: $( /bin/ls $myfile )" else if [ -n "$found" ]; then die "Multiple packages/arches, not installing anything: $myfile $found" else found=$myfile echo found $found fi fi done fi [ -z "$found" ] && die "No $PRGNAM-$VERSION-(noarch|$ARCH)-$BUILD*.t?z package in $OUTPUT, build one!" set "$found" fi sudo /sbin/upgradepkg --reinstall --install-new "$@"