#!/bin/bash
# obtain dependency tree of package 
#
# Create 
# Jeon, Seungchul <sc.jun@samsung.com>
# 2012-06-02
#

known_packages="libc6 libdlog-0 libgcc1 libglib2.0-0 libstdc++6 libvconf-0 libsecurity-server-client-0 libmm-ta libmm-log libavsystem-0 \
		libappcore-common-0 libappcore-efl-0 libevas-engines libecore-evas libecore-input libecore-x libedje libeina libelm \
		libtiff4 libpng12-0 libpixman-1-0 libjpeg8 libslp-setting-0 iniparser \
		libpulse0 lsb-base libasound2 libdbus-1-0 libspeexdsp1 libslp-pm-0 libbluetooth3 bluez \
		libdevman-0 libslp-utilx-0 libcamsrcjpegenc libexif12 libmdm-0 libheynoti-0 \
		debconf base-files perl-modules"

declare -A package_deps

list_rdepends()
{
	local i root_package indent last_index rpackages prefix sub_indent
	root_package=$1
	indent=$2
	declare -a packages
	
	packages=(`apt-cache rdepends $root_package 2> /dev/null | sed -n '3,$ p'`)
	
	if [ "${#packages}" -gt "0" ]; then
		last_index=$(( ${#packages[@]} - 1 ))
		for(( i=0;i<${#packages[@]};i++))
		do
			if [ "$i" = "$last_index" ]; then
				prefix="\`-- "
				sub_indent="\040\040\040\040"
			else
				prefix="|-- "
				sub_indent="|\040\040\040"
			fi 
			echo -e $indent$prefix${packages[$i]}
			list_rdepends ${packages[$i]} "$indent$sub_indent"

		done
	fi
		
}

list_dependcy()
{
	local i root_package indent prefix sub_indent packages last_index
	
	root_package=$1
	indent=$2
	declare -a packages
	
	if [ ${#indent} -le 1 ] || [ "`echo $known_packages | grep -w $root_package`" = "" ]; then
	
		packages=(`apt-cache depends $root_package 2> /dev/null | grep Depends | awk ' { print $2 }'`)
		
		if [ "${#packages}" -gt "0" ]; then
			last_index=$(( ${#packages[@]} - 1 ))
			for(( i=0;i<${#packages[@]};i++))
			do
				if [ "$i" = "$last_index" ]; then
					prefix="\`-- "
					sub_indent="\040\040\040\040"
				else
					prefix="|-- "
					sub_indent="|\040\040\040"
				fi 
				echo -e $indent$prefix${packages[$i]}
				list_dependcy ${packages[$i]} "$indent$sub_indent"
	
			done
		fi
	fi
}

if [ "$1" = "" ]; then
	echo "usage: dtree [-r] <package>"
	echo "       Display package dependency tree. -r option display reverse dependency tree."
	echo "       ver 0.5, Jeon, Seungchul"
	echo 
	
	exit 0
fi

if [ "$1" = "-r" ]; then
	echo $2
	list_rdepends "$2" ""
	exit 0
fi

echo $1
list_dependcy "$1" ""
