some hdw-get improvements
[hdw-linux/hdw-linux.git] / misc / hdw-tools / hdw-get
index fa08cb1..7f2d1e6 100644 (file)
@@ -11,12 +11,14 @@ usage()     {
        echo "usage:"
        echo "$0 [install/remove] [root] [package]"
        echo "$0 [dist-install] [root] [dist file]"
+       echo "$0 [update]"
        echo
        echo "options:"
        echo "-v        tell me whats going on"
        echo "-a        auto resolve deps, do not prompt user"
        echo "-no-dep   do not care for dependencies (used by hdw-get itself)"
        echo "-s        simulation only, do not install/remove packages"
+       echo "-b        base package, not listed in hdw-get.db"
        echo
 }
 
@@ -26,6 +28,8 @@ d_install="" ; install=""
 verbose="" ; no_dep=""
 auto_resolve_deps=""
 simulate=""
+base=""
+answer="y"
 
 FL_DIR="var/adm/flists"
 DEPS_DIR="var/adm/deps/run"
@@ -46,6 +50,7 @@ while [ "$1" ] ; do
                -a)             auto_resolve_deps="1" ; shift 1 ;;
                -no-dep)        no_dep="1" ; shift 1 ;;
                -s)             simulate="1" ; shift 1 ;;
+               -b)             base="1" ; no_dep="1" ; shift 1;;
                *)              usage ; exit 1 ;;
        esac
 done
@@ -175,20 +180,23 @@ elif [ "$install" = "1" ] ; then
        fi
 
        # package in database?
-       if [ "`grep "^$pkg\ -" $DBF`" = "" ] ; then
-               echo "sorry, package $package not found ..."
-               echo "(use 'hdw-get update' to update database)"
-               exit 1
+       if [ -z $base ] ; then
+               if [ "`grep "^$pkg\ -" $DBF`" = "" ] ; then
+                       echo "sorry, package $package not found ..."
+                       echo "(use 'hdw-get update' to update database)"
+                       exit 1
+               fi
        fi
 
        # check for runtime deps
-       if [ -z $no_deps ] ; then
+       if [ -z $no_dep ] ; then
                deps="`grep "^$pkg\ -" $DBF | sed 's/.* -//'`"
                udeps=""
                tudeps=""
                for dep in $deps; do
-                       [ ! -f $inst_root/$FL_DIR/$dep-* ] && \
-                               udeps="$dep $udeps"
+                       [ ! -f $inst_root/$FL_DIR/$dep-[0-9]* ] && \
+                               [ "$pkg" != "$dep" ] && \
+                                       udeps="$dep $udeps"
                done
                while [ "$udeps" != "$tudeps" ] ; do
                        tudeps="$udeps"
@@ -202,26 +210,29 @@ elif [ "$install" = "1" ] ; then
                                                [ "$i" = "$dep" ] && exists=1
                                        done
                                        [ "$exists" = "0" ] && \
-                                               udeps="$udeps $dep"
+                                               [ "$dep" != "$pkg" ] && \
+                                                       udeps="$udeps $dep"
                                done
                        done
                done
-               echo "$pkg depends on the following uninstalled packages:"
-               echo "$udeps"
-               echo
-               echo "continue? [y,n] (default 'n')"
-               if [ -z $auto_resolve_deps ] ; then
-                       read answer
-                       if [ "$answer" = "y" ] ; then
-                               for i in $udeps; do
-                                       [ "$simulate" != "1" ] && \
-                                       $0 -no-dep install $inst_root $i
-                               done
+               if [ -n "$udeps" ] ; then
+                       echo "$pkg has unresolved dependencies:"
+                       echo "-> $udeps <-"
+                       echo
+                       echo "continue? [y,n] (default 'n')"
+                       if [ -z $auto_resolve_deps ] ; then
+                               read answer
+                               if [ "$answer" = "y" ] ; then
+                                       for i in $udeps; do
+                                               [ "$simulate" != "1" ] && \
+                                               $0 -no-dep install $inst_root $i
+                                       done
+                               fi
                        fi
                fi
        fi
        
-       if [ "$simulate" != "1" ] ; then
+       if [ "$simulate" != "1" -a "$answer" != "n" ] ; then
        
        # check/install package
        if [ -f $package ] ; then
@@ -271,7 +282,9 @@ elif [ "$d_install" = "1" ] ; then
                # install all distribution related packages
                for package in `cat $dist_file`; do
                        # execute myelf
-                       $0 install $inst_root $package
+                       auto=""
+                       [ "$auto_resolve_deps" = "1" ] && auto="-a"
+                       $0 $auto -b install $inst_root $package
                done
        fi
 fi