# Copyright 1999-2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

inherit linux-mod eutils

SRC_URI="mirror://sourceforge/${PN}/${P}.tar.gz"

DESCRIPTION="KVM (for Kernel-based Virtual Machine) is a full virtualization solution for Linux on x86 hardware containing virtualization extensions (Intel VT or AMD-V)"
HOMEPAGE="http://kvm.qumranet.com/kvmwiki"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~x86 ~amd64"
IUSE=""
DEPEND=">=media-libs/libsdl-1.2.11
		>=media-libs/alsa-lib-1.0.13
		app-text/texi2html
		!app-emulation/qemu
		dev-lang/python
		>=sys-fs/e2fsprogs-1.39"
RDEPEND="${DEPEND}
	sys-apps/usermode-utilities"

RESTRICT="nostrip"

BUILD_TARGETS="all"
MODULE_NAMES="kvm(extra:"${S}"/kernel:"${S}"/kernel)
	      	kvm-intel(extra:"${S}"/kernel:"${S}"/kernel)
	      	kvm-amd(extra:"${S}"/kernel:"${S}"/kernel)"

QA_TEXTRELS="usr/bin/qemu
	usr/bin/qemu-system-sparc
	usr/bin/qemu-system-arm
	usr/bin/qemu-system-ppc
	usr/bin/qemu-system-mips
	usr/bin/qemu-system-x86_64"
QA_EXECSTACK="usr/share/kvm/openbios-sparc32"
QA_WX_LOAD="usr/share/kvm/openbios-sparc32"

src_unpack() {
	#Don't continue if the KVM modules that come with the kernel are compiled
	if linux_chkconfig_present KVM ; then
		eerror "kvm-${PV} doesn't work with the kernel modules"
		die "kvm module is included in the kernel"
	fi
        unpack ${A}
        cd "${S}"
        epatch ${FILESDIR}/kvm-kvm.patch
        epatch ${FILESDIR}/scripts-qemu-ifup.patch
	epatch ${FILESDIR}/qemu-vl.c.patch
	epatch ${FILESDIR}/qemu-configure.patch
}

src_compile() {
	#fix make install to not install modules
	sed -i '/$(kcmd)/d' ${WORKDIR}/${P}/Makefile

	conf_opts="--prefix=/usr --disable-gcc-check --qemu-cc=gcc"

	#Check if kvm is part of the kernel and continue with patched kernel flag
	if linux_chkconfig_present KVM; then
		conf_opts="${conf_opts} --with-patched-kernel"
	else
		linux-mod_pkg_setup
	fi
	./configure ${conf_opts} || die "Configure failed"
	if ! linux_chkconfig_present KVM; then
		linux-mod_src_compile
	fi
	emake user qemu || die "make failed"
}

src_install() {
	#fix make install to not install modules
	sed -i '/$(kcmd)/d' ${WORKDIR}/${P}/Makefile
	emake DESTDIR="${D}" install || die "make install failed"
	if ! linux_chkconfig_present KVM; then
		linux-mod_src_install
	fi
	exeinto /usr/bin/
	doexe ${S}/kvm ${S}/kvm_stat
	mv ${D}/usr/share/doc/qemu ${D}/usr/share/doc/kvm
	mv ${D}/usr/share/man/man1/qemu.1 ${D}/usr/share/man/man1/kvm.1
	insinto /etc/udev/rules.d/
	doins ${WORKDIR}/${P}/scripts/65-kvm.rules
	insinto /etc/kvm/
	insopts -m0755
	doins ${WORKDIR}/${P}/scripts/qemu-ifup

}

pkg_postinst() {
	if ! linux_chkconfig_present KVM; then
		linux-mod_pkg_postinst
	fi
	enewgroup kvm

	elog "If you don't have kvm compiled into the kernel, make sure you have the kernel" 
	elog "module loaded before running kvm. The easiest way to ensure that the kernel "
	elog "module is loaded is to load it on boot:"
	elog "For AMD CPUs:"
	elog "echo kvm-amd >> /etc/modules.autoload.d/kernel-2.6"
	elog "For Intel CPUs:"
	elog "echo kvm-intel >> /etc/modules.autoload.d/kernel-2.6"
	echo 
	elog "Make sure your user is in the 'kvm' group"
	elog "Just run 'gpasswd -a <USER> kvm', then have <USER> re-login."
	echo
	elog "If qemu complains about not having a 1024hz timer, then run this:"
	elog "echo dev.rtc.max-user-freq=1024 >> /etc/sysctl.conf"
	echo
	elog "If you want network support in the guest OS, you'll need to make"
	elog "sure you compile in support for 802.1d Ethernet Bridging in the "
	elog "kernel, set up a bridge network interface and make sure you"
	elog "compile Universal TUN/TAP device driver support as a kernel module"
	elog "and make it load on boot:"
	elog "echo tun >> /etc/modules.autoload.d/kernel-2.6"
}