#!/bin/sh
# 2010 (c) Etersoft www.etersoft.ru
# Author: Vitaly Lipatov <lav@etersoft.ru>
# Public domain

# load common functions, compatible with local and installed script
. `dirname $0`/../share/eterbuild/functions/common
load_mod gettext

if [ "$1" = "-h" ]; then
	echog "aptU - update package and all it requires"
	echo
	echog "Usage: aptU [-v] [-l] [package(s)]"
	echo
	echog "Options:"
	echog "  -v  verbose"
	echog "  -l  print list of required packages"
	exit 0
fi

if [ "$1" = "-v" ] ; then
	shift
else
	VERBOSE=">/dev/null"
fi

if [ "$1" = "-l" ] ; then
	LISTFLAG=1
	shift
fi

export LC_ALL=C


# Translate rpm requires to package names
rpmreqs_to_apt()
{
	local REQLIST="$@"
	local PACKAGES=`$SUDO apt-get install --print-uris $REQLIST | grep "is already the newest version" | cut -f1 -d" " | sort -u`
	estrlist exclude "$ALREADYHANDLEDAPT" "$PACKAGES"
}

install_by_requires()
{
	local RLIST="$@"
	docmd $SUDO apt-get install --no-remove $RLIST
	local ERROR=$?
	REQLIST="$RLIST"
	if [ "$ERROR" != "0" ] ; then
		local SKIPPACKAGES=`$SUDO apt-get install --print-uris $RLIST 2>&1 | grep "is a virtual package provided by" | cut -f2 -d" " | sort -u`
		if [ -z "$SKIPPACKAGES" ] ; then
			echog "Can't autohandle error"
			return 1
		fi

		echog "Autoskip $SKIPPACKAGES, try again..."
		RLIST=$(estrlist exclude "$SKIPPACKAGES" "$RLIST")
		install_by_requires "$RLIST"
	fi
}

ALREADYHANDLEDAPT="bash sh apt rpm filesystem alt-gpgkeys glibc-core glibc-locales"
ALREADYHANDLEDRPM="rpmlib.* rtld libgcc_s\..* libstdc\+\+.* libc\.so.* ld-linux\.so.* libpthread\.so.* librt\.so.*"

install_packages()
{
	local ERROR=
	local LIST="$@"
	test -n "$LIST" || { echog "There is no more packages to install" ; return ; }

	docmd $SUDO apt-get install $LIST
	ALREADYHANDLEDAPT="$ALREADYHANDLEDAPT $LIST"
	REQLIST="$($ETERBUILDBIN/rpmreqs $LIST)"
	REQLIST=$(estrlist reg_exclude "$ALREADYHANDLEDRPM" "$REQLIST")

	test -n "$REQLIST" || { echog "There is no more req packages to install" ; return ; }
	install_by_requires $REQLIST
	ALREADYHANDLEDRPM="$ALREADYHANDLEDRPM $REQLIST"

	echog "Translate rpm requires to package names..."
	install_packages $(rpmreqs_to_apt $REQLIST)
}

install_packages $@

[ -n "$LISTFLAG" ] && echo "Possible requires packages for '$@': $ALREADYHANDLEDAPT"