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

EAPI=5

inherit toolchain-funcs multilib git-2

# TODO: FHS https://github.com/luvit/luvit/issues/379

DESCRIPTION="Takes node.js' architecture and dependencies and fits it in the Lua language"
HOMEPAGE="http://luvit.io/"
EGIT_REPO_URI="git://github.com/luvit/luvit.git"

KEYWORDS=""
SLOT="0"
IUSE="bundled-libs examples"
# luvit Apache-2.0
# luajit MIT
# yajl BSD
LICENSE="Apache-2.0 bundled-libs? ( BSD MIT )"

# fails in portage environment
# succeeds if run manually
RESTRICT="test"

RDEPEND="
	dev-libs/openssl:0
	sys-libs/zlib
	!bundled-libs? (
		dev-lang/luajit:2[lua52compat]
		>=dev-libs/yajl-2.0.4
	)"
DEPEND="${RDEPEND}
	virtual/pkgconfig"

EGIT_HAS_SUBMODULES=1

src_prepare() {
	rm -r deps/{openssl,zlib} || die

	if use bundled-libs ; then
		MY_YAJL_VERSION=$(git --git-dir deps/yajl/.git describe --tags)
		MY_LUAJIT_VERSION=$(git --git-dir deps/luajit/.git describe --tags)
	else
		rm -r deps/{luajit,yajl} || die
		MY_YAJL_VERSION=$($(tc-getPKG_CONFIG) --modversion yajl)
		MY_LUAJIT_VERSION=$($(tc-getPKG_CONFIG) --modversion luajit)
	fi

	MY_HTTP_VERSION=$(git --git-dir deps/http-parser/.git describe --tags)
	MY_UV_VERSION=$(git --git-dir deps/uv/.git describe --all --long | cut -f 3 -d -)

	sed \
		-e "s:^YAJL_VERSION=.*:YAJL_VERSION=${MY_YAJL_VERSION}:" \
		-e "s:^LUAJIT_VERSION=.*:LUAJIT_VERSION=${MY_LUAJIT_VERSION}:" \
		-e "s:^HTTP_VERSION=.*:HTTP_VERSION=${MY_HTTP_VERSION}:" \
		-e "s:^UV_VERSION.*:UV_VERSION=${MY_UV_VERSION}:" \
		-i Makefile || die "sed failed"

	sed -i \
		-e "s/-Werror//" \
		-e "s/-O3//" \
		deps/http-parser/Makefile || die "fixing flags failed!"
}

src_configure() {
	# skip retarded gyp build system
	:
}

src_compile() {
	tc-export CC AR

	emake -C deps/cares

	myemakeargs=(
		DEBUG=0
		WERROR=0
		USE_SYSTEM_SSL=1
		USE_SYSTEM_ZLIB=1
		# bundled luajit is compiled with special flags
		USE_SYSTEM_LUAJIT=$(usex bundled-libs "0" "1")
		USE_SYSTEM_YAJL=$(usex bundled-libs "0" "1")
		PREFIX=/usr
		LIBDIR="${D}"/usr/$(get_libdir)/${PN}
		DESTDIR="${D}"
	)

	emake "${myemakeargs[@]}" all
}

src_install() {
	emake "${myemakeargs[@]}" install
	dodoc TODO ChangeLog README.markdown errors.markdown

	if use examples ; then
		dodoc -r examples
		docompress -x /usr/share/doc/${PF}/examples
	fi
}
