From 84e2f014130fffef0a501d75cf45c7e545baf7d6 Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Fri, 25 Sep 2026 03:23:13 -0400 Subject: upkg: added (moved here from sbostuff repo). --- upkg | 105 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100755 upkg (limited to 'upkg') diff --git a/upkg b/upkg new file mode 100755 index 0000000..342b396 --- /dev/null +++ b/upkg @@ -0,0 +1,105 @@ +#!/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 "$@" -- cgit v1.2.3