#!/bin/sh
# *************************************************************
#
#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing,
#  software distributed under the License is distributed on an
#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#  KIND, either express or implied.  See the License for the
#  specific language governing permissions and limitations
#  under the License.
#
# *************************************************************

linenum=LINENUMBERPLACEHOLDER

UNPACKDIR=/var/tmp/unpack_PRODUCTNAMEPLACEHOLDER
diskSpaceRequired=DISCSPACEPLACEHOLDER
checksum=CHECKSUMPLACEHOLDER

EXTRACTONLY="no"
if [ "$1" = "-x" ]
then
    EXTRACTONLY=yes
fi

# Determining current platform

platform=`uname -s`

case $platform in
SunOS)
  tail_prog="tail"
  ;;
Linux)
  tail_prog="tail -n"
  ;;
*)
  tail_prog="tail"
  ;;
esac

# Asking for the unpack directory

echo
echo "Select the directory in which to save the unpacked files. [$UNPACKDIR] "
read reply leftover
if [ "x$reply" != "x" ]
then
  UNPACKDIR="$reply"
fi

if [ -d $UNPACKDIR ]; then
    printf "Directory $UNPACKDIR already exists.\n"
    printf "Please select a new directory name.\n"
    exit 1
fi

# Unpacking

mkdir -m 700 $UNPACKDIR

diskSpace=`df -k $UNPACKDIR | $tail_prog -1 | awk '{if ( $4 ~ /%/) { print $3 } else { print $4 } }'`
if [ $diskSpace -lt $diskSpaceRequired ]; then
    printf "The selected drive does not have enough disk space available.\n"
    printf "PRODUCTNAMEPLACEHOLDER requires at least %s kByte.\n" $diskSpaceRequired
    exit 1
fi

trap 'rm -rf $UNPACKDIR; exit 1' HUP INT QUIT TERM

if [ -x /usr/bin/sum ] ; then
    echo "File is being checked for errors ..."

	sum=`$tail_prog +$linenum $0 | /usr/bin/sum`
    sum=`echo $sum | awk '{ print $1 }'`

    if [ $sum != $checksum ]; then
		echo "The download file appears to be corrupted. Please download PRODUCTNAMEPLACEHOLDER again."
		exit 1
	fi
fi

echo "Unpacking ..."

$tail_prog +$linenum $0 | (cd $UNPACKDIR; tar xf -)

echo "All files have been successfully unpacked."

if [ "$EXTRACTONLY" != "yes" ]
then
  if [ -f $UNPACKDIR/setup ]
  then
      chmod 775 $UNPACKDIR/setup
      $UNPACKDIR/setup
  fi
fi

exit 0
