# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

EAPI="2"

inherit eutils multilib toolchain-funcs

S_DATE="20090302"

DESCRIPTION="Open Settlement Protocol development kit"
HOMEPAGE="http://www.transnexus.com/OSP%20Toolkit/OSP%20Toolkit%20Documents/OSP%20Toolkit%20Documents.htm"
SRC_URI="mirror://sourceforge/osp-toolkit/OSPToolkit-${PV}.tar.gz"

LICENSE="BSD"
SLOT="0"
KEYWORDS="amd64 x86"
IUSE=""

RDEPEND="dev-libs/openssl"
DEPEND="${RDEPEND}"

S="${WORKDIR}"/TK-${PV//./_}-${S_DATE}

# TODO:
# generate a shared lib

# NOTES:
# osptest isn't a test that can be used for src_test, it's part of the toolkit

src_prepare() {
	# remove -O and use users CFLAGS, see bug 241034
	sed -i -e "s/ -O//" -e "s/^CFLAGS =/CFLAGS +=/" src/Makefile test/Makefile \
		enroll/Makefile || die "patching Makefiles failed"

	# use users LDFLAGS
	sed -i -e "s:LFLAGS:LDFLAGS:" test/Makefile \
		|| die "patching test/Makefile failed"
	sed -i -e "s:\(\$(LIBS\):\$(LDFLAGS) \1:" enroll/Makefile \
		|| die "patching enroll/Makefile failed"

	# change lib dir to $(get_libdir)
	sed -i -e "s:\$(INSTALL_PATH)/lib:\$(INSTALL_PATH)/$(get_libdir):" \
		src/Makefile || die "patching src/Makefile failed"

	# test.cfg is located in /etc/${PN}/test.cfg
	sed -i -e \
		"s:\(^#define CONFIG_FILENAME.*\"\).*\(test.cfg\"\):\1/etc/${PN}/\2:" \
		test/test_app.c || die "patching test/test_app.c failed"

	# configure enroll.sh
	sed -i -e "s:^\(OPENSSL_CONF\).*:\1=/etc/${PN}/openssl.cnf:" \
		-e "s:^\(RANDFILE\).*:\1=\/etc/${PN}/.rnd:" \
		bin/enroll.sh || die "patching bin/enroll.sh failed"

	# change enroll path
	sed -i -e "s:^\(enroll\):/usr/lib/${PN}/\1:" \
		bin/enroll.sh || die "patching bin/enroll.sh failed"
}

src_compile() {
	local my_cc=$(tc-getCC)

	emake -C src CC="${my_cc}" build || die "emake libosp failed"
	emake -C enroll CC="${my_cc}" linux || die "emake enroll failed"
	emake -C test CC="${my_cc}" linux || die "emake test failed"
}

src_install() {
	local ospdir="/usr/$(get_libdir)/${PN}"

	emake -C src INSTALL_PATH="${D}"/usr install || die "emake install failed"

	insinto /etc/${PN}
	doins bin/test.cfg bin/.rnd bin/openssl.cnf || die "doins failed"

	# install enroll and enroll.sh in lib dir to prevent executing them
	dodir ${ospdir}
	exeinto ${ospdir}
	doexe bin/enroll bin/enroll.sh || die "doexe failed"

	# use the symlink to execute enroll.sh
	dosym ${ospdir}/enroll.sh /usr/bin/ospenroll || die "dosym failed"

	newbin bin/test_app osptest || die "newbin failed"

	dodoc README.txt RELNOTES.txt || die "dodoc failed"
}

pkg_postinst() {
	elog "OSP test application is now available with 'osptest' command"
	elog "OSP enroll application is now available with 'ospenroll' command"
	elog "ospenroll is using /etc/${PN}/openssl.cnf as an openssl configuration"
}
