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

EAPI=2

inherit eutils linux-mod

DESCRIPTION="A memory analysis kernel module with userland tool"
HOMEPAGE="http://www.berthels.co.uk/exmap/"
SRC_URI="http://www.berthels.co.uk/${PN}/download/${P}.tgz"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="gtk"

RDEPEND="dev-libs/libpcre
	gtk? ( dev-cpp/gtkmm:2.4
		x11-libs/gtk+:2 )"
DEPEND="${RDEPEND}
	dev-libs/boost
	virtual/pkgconfig"

MODULE_NAMES="exmap(misc:${S}/kernel)"
BUILD_TARGETS="clean kernel_modules"

src_prepare() {
	# patch find_task_by_pid to pid_task and &proc_root to NULL
	epatch "${FILESDIR}/${P}-kernel.patch"

	# use $(MAKE), remove -g on CXXFLAGS, clean up CXX/LD invocations
	# remove -Werror, bug 468246
	epatch "${FILESDIR}/${PF}-makefiles.patch"

	# somthing strange between linux-mod supplied ARCH and old kernels
	# which leads to arch/x86/Makefile: file/dir x86 not found
	if kernel_is lt 2 6 25 ; then
		sed -i -e 's:\$(MAKE):unset ARCH ; \$(MAKE):' kernel/Makefile || die
	fi

	# new gcc include behavior
	epatch "${FILESDIR}/${P}-gcc.patch"

	# gcc4.5 fails on return false as std::string
	epatch "${FILESDIR}/${P}-gcc45.patch"

	# fix for 64bit from http://www.kdedevelopers.org/node/4166
	epatch "${FILESDIR}/${P}-fix64bit.patch"

	# fix underlinking with -Wl,--as-needed
	epatch "${FILESDIR}/${P}-as-needed.patch"

	# no longer call make clean in kernel source dir
	epatch "${FILESDIR}/${P}-kernel-3.5.patch"

	rm -v src/{*.so,munged-ls-threeloads,prelinked-amule} || die
}

src_compile() {
	export KERNEL_DIR
	linux-mod_src_compile

	emake CXX="$(tc-getCXX)" LD="$(tc-getLD)" -C jutil || die
	emake CXX="$(tc-getCXX)" LD="$(tc-getLD)" -C src $(use gtk || echo exmtool) || die
}

src_install() {
	linux-mod_src_install

	dobin src/exmtool || die
	use gtk && { dobin src/gexmap || die ; }
	dodoc TODO README || die
}

pkg_postinst() {
	linux-mod_pkg_postinst

	elog "Please load the exmap kernel module before running exmtool or gexmap."
}
