#!/bin/sh -e
# This script can be called in the following ways:
#
# Before the package is installed:
#	<new-preinst> install
#
# Before removed package is upgraded:
#	<new-preinst> install <old-version>
#
# Before the package is upgraded:
#	<new-preinst> upgrade <old-version>
#
#
# If postrm fails during upgrade or fails on failed upgrade:
#	<old-preinst> abort-upgrade <new-version>

# Handle upgrades from pre-conffile dpkg.cfg
upgrade_dpkg_non_conffile()
{
    if [ -r /etc/dpkg/dpkg.cfg ]; then
	dpkg_cfg_md5="535552ad5ee9145dbc7a34c264df4e59  /etc/dpkg/dpkg.cfg"
	if echo "$dpkg_cfg_md5" | md5sum -c >/dev/null 2>&1; then
	    echo "Removing non-modified dpkg.cfg to be replaced by a conffile ..."
	    rm -f /etc/dpkg/dpkg.cfg
	fi
    fi
}

kill_bad_alternatives () {
    local IFS=""
    admindir=${DPKG_ADMINDIR:-/var/lib/dpkg}
    ALTDIR="$admindir/alternatives"
    for alt in $ALTDIR/*; do
        if [ ! -f $alt ]; then
            # In case it's been removed by the code below, or in case
            # it's not a real file
            continue
        fi
        {
            read mode || continue
            read mainlink || continue
            while true; do
                read slave || break
                if [ "$slave" = "" ]; then
                    break
                fi
                if [ -e "$ALTDIR/$slave" ]; then
                    echo "Removing conflicting master alternative $slave (it is slave of $(basename $alt))..."
                    rm -f "$ALTDIR/$slave"
                fi
                read slavelink || break
            done
        } <$alt
    done
}

case "$1" in
    install)
	;;

    upgrade)
	if dpkg --compare-versions "$2" lt 1.16.0~ubuntu4 \
	   && dpkg --compare-versions "$2" ge 1.16.0~ubuntu1; then
	    # Transitional support for the provisional multiarch db format,
	    # not supported in the current dpkg.
	    arch=$(dpkg --print-architecture)
	    infodir="/var/lib/dpkg/info/"
	    if [ -d "$infodir/$arch" ] && ! [ -L "$infodir/$arch" ]; then
		cp -a "$infodir/$arch"/* "$infodir"
	    fi
	    if ! [ -L "$infodir/$arch" ]; then
		if [ -d "$infodir/$arch" ]; then
		    mv "$infodir/$arch" "$infodir/${arch}.dpkg-bak"
		fi
		ln -sf . "$infodir/$arch"
	    fi
	    rm -rf "$infodir/${arch}.dpkg-bak"
	fi


        # Cleanup bad alternatives that would choke with new
        # update-alternatives (see #530633, #531611, #532739, #521760)
        if dpkg --compare-versions "$2" lt 1.15.3; then
            kill_bad_alternatives
        fi

	case "$2" in
	    # Upgrade from pre-conffile dpkg.cfg
	    1.9.21 | 1.10.* )
		upgrade_dpkg_non_conffile
		;;
	esac
	;;

    abort-upgrade)
	;;


    *)
	echo "$0 called with unknown argument \`$1'" 1>&2
	exit 1
	;;
esac


exit 0
