#! /bin/bash -e

shopt -s nullglob

### global variables

# version of this package
version="0.14"

working_dir="$( pwd )"
program_name="$( basename "$0" )"
program_dir="$( cd "$( dirname "$( type -p "$0" )" )" ; pwd )"

lib_dir="/usr/share/java-package"
[ "$J2SE_PACKAGE_LIBDIR" ] && lib_dir="$J2SE_PACKAGE_LIBDIR"

maintainer_name="$J2SE_PACKAGE_FULL_NAME"
maintainer_email="$J2SE_PACKAGE_EMAIL"
genchanges=""


### Parse options

function print_usage() {
	cat << EOF
Usage: $program_name [OPTION]... FILE

j2se-package builds Debian packages from Java(TM) 2 binary distributions.

  --full-name NAME   full name used in the maintainer field of the package
  --email EMAIL      email address used in the maintainer field of the package
  --changes          create a .changes file

  --help             display this help and exit
  --version          output version information and exit

EOF
}

function unrecognized_option() {
    cat >&2 << EOF
$program_name: unrecognized option \`$1'
Try \`$program_name --help' for more information.
EOF
    exit 1
}

function missing_argument() {
    cat >&2 << EOF
$program_name: missing argument for option \`$1'
Try \`$program_name --help' for more information.
EOF
    exit 1
}

# options
while [[ $# -gt 0 && "x$1" == x--* ]]; do
    if [[ "x$1" == x--version ]]; then
	echo "j2se-package $version"
	exit 0
    elif [[ "x$1" == x--help ]]; then
	print_usage
	exit 0
    elif [[ "x$1" == x--full-name ]]; then
	[ $# -le 1 ] && missing_argument "$1"
	shift
	maintainer_name="$1"
    elif [[ "x$1" == x--email ]]; then
	[ $# -le 1 ] && missing_argument "$1"
	shift
	maintainer_email="$1"
    elif [[ "x$1" == x--changes ]]; then
	genchanges="true"
    else
	unrecognized_option "$1"
    fi
    shift
done

# last argument
if [[ $# -ne 1 ]]; then
    cat >&2 << EOF
$program_name: missing pathname
Try \`$program_name --help' for more information.
EOF
    exit 1
fi
archive="$1"

if [[ ! -e "$archive" ]]; then
    echo "Error: The file \"$archive\" does not exist."
    exit 1
elif [[ ! -r "$archive" ]]; then
    echo "Error: The file \"$archive\" is not readable."
    exit 1
fi

archive_name="$( basename "$archive" )"
archive_dir="$( cd "$( dirname "$archive" )" ; pwd )"
archive_path="$archive_dir/$archive_name"


# must be run as root
if ! dh_testroot; then
    exit 1
fi


### Error handling

success=
failed=
tmp=

# function is called when script terminates
function on_exit() {
    lastcmd="$_"
    if [[ -z "$success" && -z "$failed" ]]; then
	cat >&2 << EOF

Aborted ($lastcmd).

EOF
    fi
    # remove temporary directory
    if [ -n "$tmp" -a -d "$tmp" ]; then
	echo -n "Removing temporary directory: "
	rm -rf "$tmp"
	echo "done"
    fi
}
trap on_exit EXIT

# print error message and terminate
function error_exit() {
    cat >&2 << EOF

Aborted.

EOF
    failed=true
    exit 1
}



# The environment variable tmp points to a secure temporary directory.
# There should be enough free disk space.
echo -n "Creating temporary directory: "
tmp="$( mktemp -d -t "$program_name.XXXXXXXXXX" )"
echo "$tmp"

debian_dir="$tmp/debian"
install -d -m 755 "$debian_dir"

install_dir="$tmp/install"
install -d -m 755 "$install_dir"



### load and execute plugins
echo -n "Loading plugins:"
cd "$lib_dir"
files=(*.sh)
for file in "${files[@]}"; do
    echo -n " $file"
    source "$lib_dir/$file"
done
echo

j2se_found=
for var in ${!j2se_detect_*}; do 
    eval "\$$var"
    if [[ "$j2se_found" == "true" ]]; then
	break;
    fi
done
echo

if [[ -z "$j2se_found" ]]; then
    echo "No matching plugin was found."
fi



### exit
success=true
exit 0
