#!/usr/local/bin/cbsd
#v11.1.16
MYARG="arch ver"
MYOPTARG="name platform target_arch source"
MYDESC="Register kernels for jails in the datakernels"
CBSDMODULE="build"

. ${subrdir}/nc.subr

source=
name=
. ${cbsdinit}

[ -z "${source}" ] && source="unknown"
[ -z "${name}" ] && name="GENERIC"

. ${tools}
. ${strings}
. ${system}

[ -z "${target_arch}" ] && target_arch="${arch}"

. ${subrdir}/universe.subr

strpos --str="${ver}" --search="."
# auto-detect for stable/release
pos=$?
if [ ${pos} -eq 0 ]; then
	stable=1
	ostable=1
else
	stable=0
	ostable=0
fi

case "${platform}" in
	DragonFly)
		[ "${target_arch}" = "amd64" ] && target_arch="x86_64"
		;;
	esac

init_kerneldir

[ ! -r "${KERNEL_DIR}/boot/kernel/kernel" -a ! -r "${KERNEL_DIR}/boot/kernel/kernel.gz" ] && err 1 "${N1_COLOR}no such kernels here: ${N2_COLOR}${KERNEL_DIR}/boot/kernel/kernel (or ${KERNEL_DIR}/boot/kernel/kernel.gz)${N0_COLOR}"

idx=$( get_kernelidx -a ${arch} -p ${platform} -s ${stable} -t ${target_arch} -v ${ver} )

if [ -n "${idx}" ]; then
	cbsdsqlrw local "UPDATE bsdkernel SET date=datetime('now','localtime'),source='${source}' WHERE idx='${idx}'"
	dt=$( cbsdsqlro local "SELECT date FROM bsdkernel WHERE idx='${idx}'" )
	date=$( ${DATE_CMD} -j -f "%Y-%m-%d %H:%M:%S" "${dt}" "+%s" )
	${ECHO} "${N1_COLOR}kernels updated: ${N2_COLOR}${KERNEL_DIR}${N0_COLOR}"
else
	cbsdsqlrw local "INSERT INTO bsdkernel ( platform,name,arch,targetarch,ver,stable,source ) VALUES ( '${platform}', 'kernel', '${arch}', '${target_arch}', '${ver}', '${stable}', '${source}' )"
	${ECHO} "${N1_COLOR}kernel registered: ${N2_COLOR}${KERNEL_DIR}${N0_COLOR}"
fi

# auto kernelupdate? for stable=0 only
if [ "${stable}" = "0" ]; then
	readconf ${platform}-kernels.conf
	if [ "${auto_kernelupdate}" = "1" ]; then
		${ECHO} "${N1_COLOR}register_kernel: ${H5_COLOR}auto_kernelupdate=1${N1_COLOR} via ${platform}-kernels.conf, trying to perform kernelupdate, please wait...${N0_COLOR}"
		kernelupdate arch=${arch} ver=${ver} target_arch=${TARGET_ARCH}
	else
		${ECHO} "${N1_COLOR}register_kernel: ${H5_COLOR}auto_kernelupdate=0${N1_COLOR} via ${platform}-kernels.conf, updates disabled${N0_COLOR}"
		${ECHO} "${N1_COLOR}register_kernel: you might want to do ${N2_COLOR}cbsd kernelupdate${N1_COLOR} by hand to fetch latest patches${N0_COLOR}"
	fi
fi

exit 0
