#!/bin/bash
# Package client.
# Mac OS X packages will be signed when the first argument is "-sign".
# Packages can only be signed by Aerospike.

set -e

signPackage="$1"  # "-sign" or empty string.

cd `dirname $0`
origin=`pwd`

platform=`./platform`

if [ $? -ne 0 ]
then
  echo "Invalid platform."
  exit 1
fi

version=`./version`
baseDir=`cd ..;pwd`

if [ "$platform" = "mac" ]
then
  # Mac OS X does not have /usr, so use /usr/local instead.
  installDir=/usr/local

  # Remove .DS_Store files generated by Mac finder.
  find $baseDir -name ".DS_Store" -exec rm {} \;
else
  installDir=/usr
fi

# Initialize stage dir.
stageDir=$baseDir/stage
rm -rf $stageDir
mkdir -p $stageDir
mkdir -p $stageDir/packages

# Remove target directories.
echo Make clean
make -C $baseDir clean

# Create separate package of source code.
echo Create source code zip package
srcDir=aerospike-client-c-src-$version
./package_src $baseDir $stageDir/SOURCE/$srcDir
cd $stageDir/SOURCE
zip -r $stageDir/packages/$srcDir.zip $srcDir
cd $origin

arch=`uname -m`

# Package each event library implementation for current platform.
for eventLib in sync libuv libev libevent
do
  echo Make $eventLib

  make -C $baseDir clean

  if [ "$eventLib" = "sync" ]
  then
    packageName=aerospike-client-c"_"$version"_"$platform"_"$arch
    make -C $baseDir all
  else
    packageName=aerospike-client-c-$eventLib"_"$version"_"$platform"_"$arch
    make EVENT_LIB=$eventLib -C $baseDir all
  fi

  stageFinalDir=$stageDir/final/$packageName
  mkdir -p $stageFinalDir

  # Copy files
  cp -p README.md $stageFinalDir
  cp -p $baseDir/LICENSE.md $stageFinalDir

  # Create devel package with static library and header files.
  ./package_type $signPackage devel $eventLib $baseDir $stageDir $stageFinalDir

  # Create runtime package with shared library.
  ./package_type $signPackage lib $eventLib $baseDir $stageDir $stageFinalDir

  # Retain copies of all client packages for individual distribution
  cp $stageFinalDir/aerospike-client-c* $stageDir/packages

  # Combine distribution into one final package.
  tar cf - -C $stageDir/final $packageName | gzip -c > $stageDir/packages/$packageName.tgz
done

# Create docs using last build.
echo Make docs
make -C $baseDir docs

# Initialize package directory
packageDir=$baseDir/target/packages
rm -rf $packageDir
mv $stageDir/packages $packageDir

# Cleanup temporary distribution.
rm -rf $stageDir
