#!/bin/bash
# Building the installer is only tested and supported on 10.9+ with Xcode 6.0.1
# Built package targets 10.10
# Building should also work on older versions with older revisions or slight changes, YMMV

# You need to have  the following from homebrew or macports or fink:
# autoconf automake libtool pkg-config

set -ex
test -x ./configure || ./bootstrap
BUILDPATH=${PWD}

# Locate the latest OSX SDK
SDK_PATH=$(xcrun --sdk macosx --show-sdk-path)

# Set SDK path
export CFLAGS="$CFLAGS -isysroot $SDK_PATH -arch x86_64 -mmacosx-version-min=10.10"

export SED=/usr/bin/sed
PREFIX=/Library/OpenSC
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/pkgconfig

if ! pkg-config libcrypto --atleast-version=1.0.1; then
	# OpenSSL is not installed
	if ! test -e $BUILDPATH/openssl_bin/$PREFIX/lib/pkgconfig; then
		# Build OpenSSL manually, because Apple's binaries are deprecated
		if ! test -e openssl; then
			git clone --depth=1 https://github.com/openssl/openssl.git -b OpenSSL_1_0_2-stable
		fi
		cd openssl
		KERNEL_BITS=64 ./config --prefix=$PREFIX -mmacosx-version-min=10.10
		make clean
		make update
		make depend
		make
		make INSTALL_PREFIX=$BUILDPATH/openssl_bin install_sw
		cd ..
	fi
	export OPENSSL_CFLAGS="`env PKG_CONFIG_PATH=$BUILDPATH/openssl_bin/$PREFIX/lib/pkgconfig PKG_CONFIG_SYSROOT_DIR=$BUILDPATH/openssl_bin pkg-config --static --cflags libcrypto`"
	export OPENSSL_LIBS="`  env PKG_CONFIG_PATH=$BUILDPATH/openssl_bin/$PREFIX/lib/pkgconfig PKG_CONFIG_SYSROOT_DIR=$BUILDPATH/openssl_bin pkg-config --static --libs   libcrypto`"
fi

if ! test -e $BUILDPATH/openpace_bin/$PREFIX/lib/pkgconfig; then
	if ! test -e openpace; then
		git clone --depth=1 https://github.com/frankmorgner/openpace.git
	fi
	cd openpace
	autoreconf -vis
	./configure --disable-shared --prefix=$PREFIX CRYPTO_CFLAGS="$OPENSSL_CFLAGS" CRYPTO_LIBS="$OPENSSL_LIBS"
	make DESTDIR=$BUILDPATH/openpace_bin install
	cd ..
	export OPENPACE_CFLAGS="`env PKG_CONFIG_PATH=$BUILDPATH/openpace_bin/$PREFIX/lib/pkgconfig PKG_CONFIG_SYSROOT_DIR=$BUILDPATH/openpace_bin pkg-config --static --cflags libeac` $OPENSSL_CFLAGS"
	export OPENPACE_LIBS="`  env PKG_CONFIG_PATH=$BUILDPATH/openpace_bin/$PREFIX/lib/pkgconfig PKG_CONFIG_SYSROOT_DIR=$BUILDPATH/openpace_bin pkg-config --static --libs   libeac` $OPENSSL_LIBS"
fi

if ! test -e ${BUILDPATH}/target/$PREFIX/lib/pkgconfig; then
	./configure --prefix=$PREFIX \
		--sysconfdir=$PREFIX/etc \
		--enable-cvcdir=$PREFIX/etc/cvc \
		--enable-x509dir=$PREFIX/etc/x509 \
		--disable-dependency-tracking \
		--enable-shared \
		--disable-static \
		--enable-strict \
		--disable-assert \
		--enable-sm # TODO: remove this (must be sensible default in master)

	# always make clean
	make clean

	# compile
	make -j 2

	# copy files
	rm -rf target
	make install DESTDIR=${BUILDPATH}/target

	# remove garbage
	rm -f target/$PREFIX/lib/*.la

	# generate .bundle (required by Adobe Acrobat)
	./MacOSX/libtool-bundle target/$PREFIX/lib/opensc-pkcs11.so target/$PREFIX/lib
fi

# Check out OpenSC.tokend, if not already fetched.
if ! test -e OpenSC.tokend; then
	git clone http://github.com/OpenSC/OpenSC.tokend.git
fi

# Create the symlink to OpenSC sources
test -L OpenSC.tokend/build/opensc-src || ln -sf ${BUILDPATH}/src OpenSC.tokend/build/opensc-src

# Build and copy OpenSC.tokend
xcodebuild -target OpenSC -configuration Deployment -project OpenSC.tokend/Tokend.xcodeproj install DSTROOT=${PWD}/target

# Prepare target root
# The "UnInstaller"
mkdir -p target/usr/local/bin
cp MacOSX/opensc-uninstall target/usr/local/bin

# Build package
pkgbuild --root target --scripts MacOSX/scripts --identifier org.opensc-project.mac --version @PACKAGE_VERSION@ --install-location / OpenSC.pkg
# Build product
productbuild --distribution MacOSX/Distribution.xml --package-path . --resources MacOSX/resources "OpenSC @PACKAGE_VERSION@.pkg"

# Build "uninstaller"
osacompile -o "OpenSC Uninstaller.app" "MacOSX/OpenSC_Uninstaller.applescript"

# Create .dmg
rm -f OpenSC-@PACKAGE_VERSION@.dmg
i=0
while ! hdiutil create -srcfolder "OpenSC @PACKAGE_VERSION@.pkg" -srcfolder "OpenSC Uninstaller.app" -volname "@PACKAGE_NAME@" OpenSC-@PACKAGE_VERSION@.dmg
do
	i=$[$i+1]
	if [ $i -gt 2 ]
	then
		exit 1
	fi
done
