# Copyright 1999-2004 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License v2
# $Header: /home/cvsroot/gentoo-x86/media-video/nvidia-kernel/nvidia-kernel-1.0.5336-r1.ebuild,v 1.3 2004/02/06 19:27:52 azarah Exp $

inherit eutils kernel-mod

PKG_V="pkg1"
NV_V="${PV/1.0./1.0-}"
NV_PACKAGE="NVIDIA-Linux-x86-${NV_V}"
S="${WORKDIR}/${NV_PACKAGE}-${PKG_V}/usr/src/nv"
DESCRIPTION="Linux kernel module for the NVIDIA's X driver"
HOMEPAGE="http://www.nvidia.com/"
SRC_URI="ftp://download.nvidia.com/XFree86/Linux-x86/${NV_V}/${NV_PACKAGE}-${PKG_V}.run
		http://dev.gentoo.org/~latexer/files/patches/${PN}-koutput.diff.gz"

# The slot needs to be set to $KV to prevent unmerges of modules for other kernels.
LICENSE="NVIDIA"
SLOT="0"
KEYWORDS="-* ~x86"
RESTRICT="nostrip"

DEPEND="virtual/linux-sources"
export _POSIX2_VERSION="199209"

KERNEL_MOD_SOURCES="none"
KERNEL_MOD_KOUTPUT_PATCH="${DISTDIR}/${PN}-koutput.diff.gz"

check_mtrr() {
	if egrep "^CONFIG_MTRR=[n]" ${KV_OUTPUT}/.config &>/dev/null
	then
		eerror "This version needs MTRR support for most chipsets!"
		eerror "Please enable MTRR support in your kernel config, found at:"
		eerror
		eerror "  Processor type and features -> [*] MTRR (Memory Type Range Register) support"
		eerror
		eerror "and recompile your kernel ..."
		die "MTRR support not detected!"
	fi
}

src_unpack() {
	# Let kernel-mod.eclass handle setting things up for us
	kernel-mod_src_unpack

	# Make sure MTRR support is enabled
	check_mtrr

	cd ${WORKDIR}
	bash ${DISTDIR}/${NV_PACKAGE}-${PKG_V}.run --extract-only

	# Need to call this after we unpack the annoying bash script
	kernel-mod_do_buildpatches

	# Next section applies patches for linux-2.5 kernel, and/or
	# bugfixes for linux-2.4.  All these are from:
	#
	#   http://www.minion.de/nvidia/
	#
	# Many thanks to Christian Zander <zander@minion.de> for bringing
	# these to us, and being so helpful to select which to use.

	cd ${S}
	einfo "Linux kernel ${KV_VERSION_FULL}"

	if [ "${KV_MINOR}" == 5 ] || [ "${KV_MINOR}" == 6 ]
	then
		EPATCH_SINGLE_MSG="Applying basic sysfs patch ..." \
		epatch ${FILESDIR}/${PV}/NVIDIA_kernel-${NV_V}-basic-sysfs-support.patch

		#if [ "${KV_OUTPUT}" != "/usr/src/linux" ]
		#then
			#EPATCH_SINGLE_MESSAGE="Patching for koutput compatibility ..." \
			#epatch ${DISTDIR}/${PN}-koutput.diff.gz
		#fi

		# Kbuild have issues currently (sandbox related).
#		ln -snf Makefile.nvidia Makefile
		ln -snf Makefile.kbuild Makefile
		rm ${S}/makefile
		#sed -e "s:5328:${NV_V/1.0-/}:g" \
			#${FILESDIR}/${PV}/Makefile > ${S}/makefile
	fi

	# if you set this then it's your own fault when stuff breaks :)
	[ ! -z "${USE_CRAZY_OPTS}" ] && sed -i "s:-O:${CFLAGS}:" Makefile
}

src_compile() {
	# IGNORE_CC_MISMATCH disables a sanity check that's needed when gcc has been
	# updated but the running kernel is still compiled with an older gcc.  This is
	# needed for chrooted building, where the sanity check detects the gcc of the
	# kernel outside the chroot rather than within.

	# SYSSRC is used because otherwise it looks in /lib/modules/`uname -r`/build
	# for things, which is not the gentoo way!

	if [ "${KV_MINOR}" == 5 ] || [ "${KV_MINOR}" == 6 ]
	then
		unset ARCH
		make IGNORE_CC_MISMATCH="yes" KERNDIR="/usr/src/linux" \
			SYSSRC="${KV_BUILD}" SYSSRC_OUTPUT="${KV_OUTPUT}" \
			clean module || die
			#clean nvidia.o || die
	else
		make IGNORE_CC_MISMATCH="yes" KERNDIR="/usr/src/linux" SYSSRC="/usr/src/linux" \
			clean module || die
	fi
}

src_install() {
	# The driver goes into the standard modules location
	insinto /lib/modules/${KV}/video

	# Install it to either .o or .ko depending on kernel version
	newins nvidia.o nvidia.${KV_OBJ}

	# Add the aliases
	insinto /etc/modules.d
	newins ${FILESDIR}/nvidia-1.1 nvidia

	# Docs
	dodoc ${S}/README

	# The device creation script
	into /
	newsbin ${S}/makedevices.sh NVmakedevices.sh
}

pkg_postinst() {
	if [ "${ROOT}" = "/" ]
	then
		# Update module dependency
		[ -x /usr/sbin/update-modules ] && /usr/sbin/update-modules
		if [ ! -e /dev/.devfsd ] && [ -x /sbin/NVmakedevices.sh ]
		then
			/sbin/NVmakedevices.sh >/dev/null 2>&1
		fi
	fi

	echo
	einfo "If you are not using devfs, loading the module automatically at"
	einfo "boot up, you need to add \"nvidia\" to your /etc/modules.autoload."
	echo
	ewarn "Please note that the driver name changed from \"NVdriver\""
	ewarn "to \"nvidia.o\"."
	echo
}