#!/bin/sh
# <BEGIN COPYRIGHT>
# This file is part of the "Bad Penguin" GNU/Linux distribution
# Copyright (C) 1997-98-99 by Antonio GALLO
# Author of this file: Antonio GALLO aka AGX
# Home Page at ......: http://www.badpenguin.org
# Home Page at ......: http://www.linux.it/~agx/
# e-mail contact ....: mailto:agx@linux.it	mailto:agx@geocities.com
# This program is distributed under the GNU General Public License
# You are not allowed to remove the copyright notice
# <END COPYRIGHT>

#setup--finalize
#19990505 - Version 1.1.0 by AGX
#19990629 - Version 1.1.3 by AGX
#19990830 - Version 1.2.0 by AGX : Support for .bpp
# 1999-11-10, Version 1.5.9 by AGX

# --------------------------------------------------------

if [ "$SETUP_MODE" = "" ]; then
    echoc RED "This script cannot be launched interactively, use setup --help"
    USCITA=100 ; exit 100
fi
[ $SETUP_VERBOSE -gt 1 ] && echo "- Entro in setup--finalize"


# --- Temp Script ---
DEPSOURCE="$PKG_SPOOL/DEPENDENCIES"
INSTSOURCE="$PKG_SPOOL/TOBEINSTALLED"
DEPTEMP="$PKG_SPOOL/.dependencies.$$"
INSTTEMP="$PKG_SPOOL/.tobeinstaled.$$"
TEMPFILE="$PKG_SPOOL/.tempfile.$$"
trap 'rm -f $DEPTEMP  $INSTTEMP  $TEMPFILE ; exit $USCITA' 0


# Go ...
touch "$DEPSOURCE"
while [ -f "$DEPSOURCE" ]; do

  # Init
  touch "$DEPSOURCE"
  touch "$INSTSOURCE"
  rm -f "$TEMPFILE"  "$INSTTEMP"  "$DEPTEMP"

  # ===== Elabora dipendenze ==========
  mv "$DEPSOURCE"  "$TEMPFILE"
  grep -v "^#" "$TEMPFILE" | grep -v "^$" | sort | uniq > "$DEPTEMP"
  if [ -f "$DEPTEMP" ]; then
    [ $SETUP_VERBOSE -gt 0 ] && echo "- Lettura delle dipendenze"
    ( cat "$DEPTEMP" ; echo ) | while read R_CAT R_PKG R_LIBRARY
    do

      #Ignore comments and blank lines
      case "$R_CAT" in
        "#*") R_CAT="" ; continue ;;
        \#*)  R_CAT="" ; continue ;;
        "")   R_CAT="" ; continue ;;
      esac

      # Check if the needed package is already installed
      PKGFOUND=0
      if [ ! "$R_PKG" = "" ]; then
        for d in $PKG_SPOOL/$R_PKG*; do
          if [ -d $d ]; then
            echo "- Dipendenza da $R_PKG risolta dal pkg. `basename $d`"
            PKGFOUND=1
            break
          fi
        done
      fi
      [ $PKGFOUND -eq 1 ] && continue

      # Check if the needed library are already installed
      # if it is found into the default path then it skip to the next
      if [ ! "$R_LIBRARY" = "" ]; then
        if [ -f usr/lib/$R_LIBRARY -o -f lib/$R_LIBRARY -o -f usr/local/lib/$RLIBRARY -o -f usr/X11R6/lib/$R_LIBRARY -o -f ./$R_LIBRARY ]; then
          echo "- Dipendenza da $R_PKG risolta dalla lib. `basename $R_LIBRARY`"
          continue
        fi
      fi
        
      # Schedulo per l'installazione
      grep -q "^$R_CAT.*$R_PKG.*$R_LIBRARY"  "$INSTSOURCE"
      if [ $? -eq 0 ]; then
        echo "- Dipendenza $R_PKG gia' schedulata per l'installazione"
      else
        echoc YELLOW "- Dipendenza da ( $R_PKG $R_LIBRARY ) non risolta"
        echo "$R_CAT	$R_PKG	$R_LIBRARY" >>"$INSTSOURCE"
      fi

    done
    echo "- Analisi delle dipendenze ultimata"
    # //////////////////////////////////////
  else
    echoc RED "- Problema nel creare il file delle dipendenze"
  fi
  # FINE DEPS


  # ===== Elabora Installazione  ==========
  touch "$INSTSOURCE"
  mv  "$INSTSOURCE"  "$INSTTEMP"
  CONTA="`cat $INSTTEMP | wc -l | tr -d ' '`"
  [ "$CONTA" = "" ] && CONTA="ERRORE"
  echoc CYAN "- Auto installazione di $CONTA pacchetti ..."
  # Scan
  ( cat "$INSTTEMP" ; echo ) | while read CATEGORY FULLVERSION LIBRARY
  do
    [ "$CATEGORY" = "" ] && continue

    # Controlla se il pacchetto e' stato installato casualmente
    PKGFOUND=0
    for d in $PKG_SPOOL/$FULLVERSION*; do
      if [ -d $d ]; then
        echo "- Installazione di $FULLVERSION non necessaria causa `basename $d`"
        PKGFOUND=1
        break
      fi
    done
    [ $PKGFOUND -eq 1 ] && continue

    #O.K., cerchiamo il pacchetto da installare
    echo "- Ricerca del pacchetto $FULLVERSION in $CATEGORY ..."
    TEMPDIR="$SETUP_SOURCEDIR"
    INSTFOUND=""
    while [ "$TEMPDIR" != "" -a "$TEMPDIR" != "/" -a "$TEMPDIR" != "." ]; do
      INSTFOUND=`ls -1 $TEMPDIR/packages/$CATEGORY/$FULLVERSION* 2>/dev/null | tail -1`
      [ "$INSTFOUND" != "" ] && break
      INSTFOUND=`ls -1 $TEMPDIR/packages/$FULLVERSION* 2>/dev/null | tail -1`
      [ "$INSTFOUND" != "" ] && break
      TEMPDIR="`dirname $TEMPDIR`"
    done

    if [ ! "$INSTFOUND" = "" ]; then
      echo "---------------------------------------------------------------"
      echo "- Trovato [$INSTFOUND] che soddisfa la richiesta"
      echo "! DEBUG:  setup --install \"$INSTFOUND\" \"$SETUP_TARGETDIR\" --no-header"
      #setup --install "$INSTFOUND" "$SETUP_TARGETDIR" --no-header
      REPLY=$?
      if [ $REPLY -eq 0 ]; then
        echo "O.k."
      else
        echoc RED "Errore nr. $REPLY durante l'installazione del pacchetto"
        echo -n "Premi INVIO per continuare ... "
        read x  < /dev/tty
      fi
    else
      echoc YELLOW "- Impossibile soddisfare la dipendenza da $FULLVERSION"
      cat "$INSTSOURCE" 2>/dev/null | grep -q "^$CATEGORI.*$FULLVERSION.*$LIBRARY"
      if [ $? -ne 0 ]; then
        echo "$CATEGORY	$FULLVERSION	$LIBRARY"  >> "$INSTSOURCE"
      fi
    fi
  done
  # FINE FEST
done


# Finally, configure packages if running in interactive mode
if [ $SETUP_INTERACTIVE -eq 1 ]; then
  exec setup --post-install --no-header
  USCITA=2 ; exit 2
fi
USCITA=0 ; exit 0
