# Copyright 1999-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/net-libs/axtls/axtls-1.4.8.ebuild,v 1.8 2012/09/23 08:09:43 phajdan.jr Exp $

EAPI="4"

inherit eutils multilib savedconfig toolchain-funcs user

################################################################################
# axtls CONFIG MINI-HOWTO
#
# Note: axtls is highly configurable and uses mconf, like the linux kernel.
# You can configure it in a couple of ways:
#
# 1) USE="-savedconfig" and set/unset the remaining flags to obtain the features
# you want, and possibly a lot more.
#
# 2) You can create your own configuration file by doing
#
#	FEATURES="keepwork" USE="savedconfig -*" emerge axtls
#	cd /var/tmp/portage/net-libs/axtls*/work/axTLS
#	make menuconfig
#
# Now configure axtls as you want.  Finally save your config file:
#
#	cp config/.config /etc/portage/savedconfig/net-libs/axtls-${PV}
#
# where ${PV} is the current version.  You can then run emerge again with
# your configuration by doing
#
#	USE="savedconfig" emerge axtls
#
################################################################################

MY_PN=${PN/tls/TLS}

DESCRIPTION="Embedded client/server TLSv1 SSL library and small HTTP(S) server"
HOMEPAGE="http://axtls.sourceforge.net/"
SRC_URI="mirror://sourceforge/axtls/${MY_PN}-${PV}.tar.gz"
S="${WORKDIR}/${MY_PN}"

LICENSE="BSD GPL-2"
SLOT="0"
KEYWORDS="amd64 arm hppa ~mips ppc ppc64 x86"

IUSE="httpd cgi-lua cgi-php static static-libs doc"

# TODO: add ipv6, and c#, java, lua, perl bindings
# Currently these all have some issue
DEPEND="doc? ( app-doc/doxygen )"
RDEPEND="
	httpd? (
		cgi-lua? ( dev-lang/lua )
		cgi-php? ( dev-lang/php[cgi] )
	)"

#Note1: static, cgi-* makes no sense if httpd is not given
REQUIRED_USE="
	static? ( httpd )
	cgi-lua? ( httpd )
	cgi-php? ( httpd )"

AXTLS_GROUP="axtls"
AXTLS_USER="axtls"

pkg_setup() {
	use httpd && {
		ebegin "Creating axtls user and group"
		enewgroup ${AXTLS_GROUP}
		enewuser ${AXTLS_USER} -1 -1 -1 ${AXTLS_GROUP}
	}
}

src_prepare() {
	tc-export CC

	epatch "${FILESDIR}/explicit-libdir.patch"

	sed -i -e 's:^LIBDIR.*/lib:LIBDIR = $(PREFIX)/'"$(get_libdir):" \
		"${S}"/Makefile

	#Use CC as the host compiler for mconf
	sed -i -e "s:^HOSTCC.*:HOSTCC=${CC}:" \
		"${S}"/config/Rules.mak

	#We want CONFIG_DEBUG to avoid stripping
	#but not for debugging info
	sed -i -e 's: -g::' \
		"${S}"/config/Rules.mak
	sed -i -e 's: -g::' \
		"${S}"/config/makefile.conf
}

use_flag_config() {
	cp "${FILESDIR}"/config "${S}"/config/.config

	#Respect CFLAGS/LDFLAGS
	sed -i -e "s:^CONFIG_EXTRA_CFLAGS_OPTIONS.*$:CONFIG_EXTRA_CFLAGS_OPTIONS=\"${CFLAGS}\":" \
		"${S}"/config/.config
	sed -i -e "s:^CONFIG_EXTRA_LDFLAGS_OPTIONS.*$:CONFIG_EXTRA_LDFLAGS_OPTIONS=\"${LDLAGS}\":" \
		"${S}"/config/.config

	#The logic is that the default config file enables everything and we disable
	#here with sed unless a USE flags says to keep it
	if use httpd; then
		if ! use static; then
			sed -i -e 's:^CONFIG_HTTP_STATIC_BUILD:# CONFIG_HTTP_STATIC_BUILD:' \
				"${S}"/config/.config
		fi
		if ! use cgi-php && ! use cgi-lua; then
			sed -i -e 's:^CONFIG_HTTP_HAS_CGI:# CONFIG_HTTP_HAS_CGI:' \
				"${S}"/config/.config
		fi
		if ! use cgi-php; then
			sed -i -e 's:,.php::' "${S}"/config/.config
		fi
		if ! use cgi-lua; then
			sed -i -e 's:\.lua,::' \
				-e 's:lua:php:' \
				-e 's:^CONFIG_HTTP_ENABLE_LUA:# CONFIG_HTTP_ENABLE_LUA:' \
				"${S}"/config/.config
		fi
	else
		sed -i -e 's:^CONFIG_AXHTTPD:# CONFIG_AXHTTPD:' \
			"${S}"/config/.config
	fi

	yes "n" | emake -j1 oldconfig > /dev/null
}

src_configure() {
	tc-export CC

	if use savedconfig; then
		restore_config config/.config
		if [ -f config/.config ]; then
			ewarn "Using saved config, all other USE flags ignored"
		else
			ewarn "No saved config, seeding with the default"
			cp "${FILESDIR}"/config "${S}"/config/.config
		fi
		yes "" | emake -j1 oldconfig > /dev/null
	else
		use_flag_config
	fi
}

src_compile() {
	default
	if use doc; then
		emake docs
		mv www README
	fi
}

src_install() {
	if use savedconfig; then
		save_config config/.config
	fi

	emake PREFIX="${ED}/usr" install

	if ! use static-libs; then
		rm -f "${ED}"/usr/$(get_libdir)/libaxtls.a
	fi

	if [ -f "${ED}"/usr/bin/htpasswd ]; then
		mv "${ED}"/usr/bin/{,ax}htpasswd
	fi

	if use httpd; then
		newinitd "${FILESDIR}"/axhttpd.initd axhttpd
		newconfd "${FILESDIR}"/axhttpd.confd axhttpd
	fi

	docompress -x /usr/share/doc/${PF}/README
	dodoc -r README

	if use doc; then
		dodoc -r docsrc/html
	fi
}