#! /bin/sh
# Copyright (c) 2000-2004 International Business Machines
# Corporation and others. All Rights Reserved.
# postinst script for foo
#
# see: dh_installdeb(1)

set -e

# summary of how this script can be called:
#        * <postinst> `configure' <most-recently-configured-version>
#        * <old-postinst> `abort-upgrade' <new version>
#        * <conflictor's-postinst> `abort-remove' `in-favour' <package>
#          <new-version>
#        * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
#          <failed-install-package> <version> `removing'
#          <conflicting-package> <version>
# for details, see /usr/share/doc/packaging-manual/
#
# quoting from the policy:
#     Any necessary prompting should almost always be confined to the
#     post-installation script, and should be protected with a conditional
#     so that unnecessary prompting doesn't happen if a package's
#     installation fails and the `postinst' is called with `abort-upgrade',
#     `abort-remove' or `abort-deconfigure'.

case "$1" in
    configure)
	# Adjust the current ICU link in @libdir@/@PACKAGE@

	prefix=@prefix@
	exec_prefix=@exec_prefix@

	if [ -d @libdir@/@PACKAGE@ ]
	then
	    icucurrent=`2>/dev/null ls -dp @libdir@/@PACKAGE@/* | sed -n 's,.*/\([^/]*\)/$,\1,p'| sort -rn | head -1`
	    cd @libdir@/@PACKAGE@
	    rm -f current
	    if test x"$icucurrent" != x
	    then
	        ln -s "$icucurrent" current
	    fi

	    # Set ICU_DATA for ease of testing files. It is not necessary to
	    # export it as we are guaranteed that the binaries we invoke will
	    # use the right directory. But we're not taking chances with the
	    # future :)

	    ICU_DATA=@libdir@/@PACKAGE@/@VERSION@
	    export ICU_DATA

	fi
    ;;

    abort-upgrade|abort-remove|abort-deconfigure)

    ;;

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

# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.

#DEBHELPER#

exit 0

