EAPI="3"

# drbd-kernel-8.3.9999.ebuild
GIT=$([[ ${PVR} = *.9999 ]] && echo "git-2")
EGIT_REPO_URI="git://git.drbd.org/drbd-${PV%.9999}.git"

inherit eutils versionator linux-mod ${GIT}

LICENSE="GPL-2"
KEYWORDS="~amd64 ~x86"

MY_PN="${PN/-kernel/}"
MY_P="${MY_PN}-${PV/_rc/rc}"
MY_MAJ_PV="$(get_version_component_range 1-2 ${PV})"

HOMEPAGE="http://www.drbd.org"
DESCRIPTION="mirror/replicate block-devices across a network-connection"
SRC_URI="http://oss.linbit.com/drbd/${MY_MAJ_PV}/${MY_P}.tar.gz"

IUSE=""

DEPEND="virtual/linux-sources"
RDEPEND="~sys-cluster/drbd-${PV}"
SLOT="0"

S="${WORKDIR}/${MY_P}"

CONFIG_CHECK="~!DRBD CONNECTOR"
CONNECTOR_ERROR="You must enable \"CONNECTOR - unified userspace <-> kernelspace linker\" in your kernel configuration, because drbd needs it."
DRBD_ERROR="drbd module alredy included into kernel: this module must overlap kernel's"

if [[ "${GIT}" == git* ]]; then
	SRC_URI=""
	export EGIT_PROJECT="${EGIT_PROJECT//-kernel}"
fi

src_prepare(){
	local i=true
	cd "${S}/drbd" || die
	sed -i -e 's:PATCHLEVEL),12345:PATCHLEVEL),-:' Makefile
	elog "Compatibility fixes"
	grep -q "^int cn_add_callback(.* const char" "${KERNEL_DIR}/include/linux/connector.h" && sed -i -e 's:^\(typedef int .*cn_add_callback.*,\) \(char \*.*\)$:\1 const \2:' drbd_nl.c
	grep -q "^#define current_cap()" "${KERNEL_DIR}/include/linux/cred.h" && sed -i -e 's:nsp->eff_cap:current_cap():' drbd_nl.c
	[[ -e "${KERNEL_DIR}/include/linux/smp_lock.h" ]] || sed -i -e 's:#include ::' *.c
	[[ -e "${KERNEL_DIR}/include/linux/bitops.h" ]] && sed -i -e 's:^#include "compat/bitops\.h":#include :' *.c || i=false
	[[ -e "${KERNEL_DIR}/include/generated/autoconf.h" ]] && sed -i -e 's:::' *.{c,h} || i=false
#	$i && rm -Rf compat
	elog "Replacing includes to local headers"
	for i in linux/*; do
		sed -i -e "s:#include <$i>:#include \"$i\":g" *.c *.h linux/*.h
	done
}

pkg_setup() {
	if ! kernel_is 2 6 && ! kernel_is 3; then
		die "Unsupported kernel, drbd-${PV} needs kernel >=2.6 ."
	fi
	[[ "$PV" == 8.3.* ]] || CONFIG_CHECK="${CONFIG_CHECK//\~}"
	linux-mod_pkg_setup
	MODULE_NAMES="drbd(block:${S}/drbd)"
	BUILD_TARGETS="default"
	BUILD_PARAMS="-j1 KDIR=${KERNEL_DIR} O=${KERNEL_DIR}"
}

pkg_postinst() {
	linux-mod_pkg_postinst

	einfo ""
	einfo "Please remember to re-emerge drbd when you upgrade your kernel!"
	einfo ""
}