#!/bin/sh

set -e
vardir="$1"
method=$2
option=$3

cd "$vardir/methods/disk"

. ./shvar.$option

xit=1
trap '
	if [ -n "$umount" ]
	then
		umount "$umount" >/dev/null 2>&1
	fi
	exit $xit
' 0

if [ -n "$p_blockdev" ]
then
	umount="$p_mountpoint"
	mount -rt "$p_fstype" -o nosuid,nodev "$p_blockdev" "$p_mountpoint"
fi

if [ -n "$p_nfs" ]
then
	umount="$p_mountpoint"
	mount -rt nfs "$p_nfs" -o nosuid,nodev "$p_mountpoint"
fi

predep="$vardir/predep-package"
while true
do
	set +e
	dpkg --admindir "$vardir" --predep-package >"$predep"
	rc=$?
	set -e
	if test $rc = 1; then break; fi
	test $rc = 0

	perl -e '
		($binaryprefix,$predep) = @ARGV;
		$binaryprefix =~ s,/*$,/, if length($binaryprefix);
		open(P,"< $predep") || die "cannot open $predep: $!\n";
		while (<P>) {
			s/\s*\n$//;
			$package= $_ if s/^Package: //i;
			@filename= split(/ /,$_) if s/^Filename: //i;
			@msdosfilename= split(/ /,$_) if s/^MSDOS-Filename: //i;
		}
		length($package) || die "internal error - no package";
		@filename || die "internal error - no filename";
		@filename==@msdosfilename || !@filename || !@msdosfilename ||
			die "internal error - mismatch >@filename< >@msdosfilename<";
		@invoke=(); $|=1;
		for ($i=0; $i<=$#filename; $i++) {
			$ppart= $i+1;
			print "Looking for part $ppart of $package ... ";
			if (-f "$binaryprefix$filename[$i]") {
				$print= $filename[$i];
				$invoke= "$binaryprefix$filename[$i]";
			} elsif (-f "$binaryprefix$msdosfilename[$i]") {
				$print= $msdosfilename[$i];
				$invoke= "$binaryprefix$msdosfilename[$i]";
			} else {
				$base= $filename[$i]; $base =~ s,.*/,,;
				$msdosbase= $msdosfilename[$i]; $msdosbase =~ s,.*/,,;
				defined($c= open(X,"-|")) ||
					die "failed to fork for find: $!\n";
				if (!$c) {
					exec("find", "-L",
					     length($binaryprefix) ?
					     $binaryprefix : ".",
					     "-name",$base,"-o","-name",$msdosbase);
					die "failed to exec find: $!\n";
				}
				while (chop($invoke= <X>)) { last if -f $invoke; }
				$print= $invoke;
				if (substr($print,0,length($binaryprefix)+1) eq
				    "$binaryprefix/") {
					$print= substr($print,length($binaryprefix));
				}
			}
			if (!length($invoke)) {
				print STDERR "

Oh dear, I need to install or upgrade $package, but I don'\''t see
the appropriate file(s) anywhere.  I'\''m expecting version $version or
later, as that is listed in the Packages file.

Perhaps you downloaded it with an unexpected name, or something.
In any case, you must find the file(s) and then either place it with
the correct filename(s) (as listed in the Packages file or in
$vardir/available) and rerun the installation, or upgrade the
package by using `dpkg --install --auto-deconfigure'\'' by hand.

";
				exit(1);
			}
			print "$print\n";
			push(@invoke,$invoke);
		}
		print "Running dpkg -iB for $package ...\n";
		exec("dpkg","--admindir",$vardir,"-iB","--",@invoke);
		die "failed to exec dpkg: $!\n";
	' -- "$p_mountpoint$p_main_binary" "$predep"
done

for f in main ctb nf nus lcl
do
	eval 'this_binary=$p_'$f'_binary'
	if [ -z "$this_binary" ]; then continue; fi
	echo Running dpkg --admindir $vardir -iGROEB "$p_mountpoint$this_binary"
	dpkg --admindir $vardir -iGROEB "$p_mountpoint$this_binary"
done

echo -n 'Installation OK.  Hit RETURN.  '
read response

xit=0
