#!/bin/sh
# Copyright (C) 2006 Nokia Corporation
#
# This is proprietary software owned by Nokia Corporation.
# 
# Contact: Maemo Integration <integration@maemo.org>
#
# Modified by Miko Nieminen <miko.nieminen@nomovok.com>
#


# Fail in case str is empty and print out message
# empty (str,msg)
function empty () {
        local str=$1
        local message=$2
        if [ "x$str" = "x" ] ; then
                echo "E: Program error. $message"
                echo "E: If this problem persists please report to <integration@maemo.org>"
                exit 1
        fi
}

# Generate virtual packages
# generate_virtual (workdir, virtual_packages)
function generate_virtual() {
	local workdir=$1
	local virtual_packages=$2
	if [ -z "$workdir" ]; then 
		"Virtual packages work directory  name must be non-empty."
		exit 1;
	fi
	echo -n "Generating virtual packages"
	cd $workdir

	for line in $virtual_packages ; do

		binary=$(echo $line | cut -f1 -d=)
		version=$(echo $line | cut -f2 -d=)+virtual1

		__deb_file=${binary}_${version}_all.deb
		if [ -r $__deb_file ]; then
			continue
		fi
	
		# build directory
		__deb_tmp=$(mktemp -d)
		__deb_root=${__deb_tmp}/data
		__deb_control=${__deb_tmp}/control
		mkdir ${__deb_tmp}/{control,data}
	
		cleanup() {
			rm -rf $__deb_tmp
		}
	
		trap cleanup EXIT INT
	
		# data
		mkdir -p ${__deb_root}/usr/share/doc/${binary}
		cat << COPYRIGHT > ${__deb_root}/usr/share/doc/${binary}/copyright
This is ${binary}, a virtually generated package. Functionality of this package
is provided by Scratchbox.

Contact: Maemo Integration <integration@maemo.org>
COPYRIGHT

		# control
		cat << CONTROL > ${__deb_control}/control
Package: ${binary}
Version: ${version}
Architecture: all
Installed-Size: 1
Maintainer: Maemo Integration <integration@maemo.org>
Source: ${binary}
Description: ${binary} from Scratchbox
 This is ${binary}, a virtually generated package. Functionality of this package
 is provided by Scratchbox.
CONTROL

		# deb package
		echo "2.0" > $__deb_tmp/debian-binary
		tar czf ${__deb_tmp}/data.tar.gz -C ${__deb_root} .
		tar czf ${__deb_tmp}/control.tar.gz -C ${__deb_control} .
		ar rc ${__deb_file} ${__deb_tmp}/debian-binary ${__deb_tmp}/control.tar.gz ${__deb_tmp}/data.tar.gz

		cleanup
		echo -n "."
	done
}

# Install packages found from virtual directory to target
# TODO Virtual packages workdir exists
# TODO Virtual packages workdir contains at least one package
# install_virtual (workdir)
function install_virtual() {
	local workdir=$1
	empty "$workdir" "Virtual packages work directory name must be non-empty."
	echo "Installing virtual packages on '$target'."

	fakeroot dpkg -i $workdir/*+virtual1_all.deb
	if [ $? != 0 ] ; then 
		echo "E: Installing packages failed, $?."
		exit 1
	fi
	echo
}

# Filter out some packages which should stay in target image
# TODO Remove unnecessary components from virtual packages list
__virtual=$(mktemp -d)
__virtual_packages=`/scratchbox/devkits/debian/sbox-list-packages.sh -l | grep -Ev "^(dpkg.*|apt.*|lib.*\-dev|gdb|fakeroot|linux\-kernel\-headers|base\-passwd|sysv\-rc|libncurses5|ncurses-bin)="  | tr '\n' ' '`

generate_virtual "$__virtual" "$__virtual_packages"
install_virtual "$__virtual"

# Remove virtual package files found from virtual directory
echo "Removing virtual package files."
rm -Rf $__virtual
