#!/bin/sh
#v10.0.3
globalconf="${workdir}/cbsd.conf";
CBSDMODULE="build"
MYARG=""
MYOPTARG="ver arch target_arch maxjobs clean name stable basename stable destdir"
MYDESC="Build kernel from sources"
ADDHELP="10.0 for FreeBSD 10.0-R or ver=. for current.\n\
stable=1 for RELENG_X\n\
destdir= for alternative install path in root dir\n"

set -e
. ${globalconf}
set +e

. ${subr}
init $*

over="${ver}"
oarch="${arch}"

. ${buildconf}
readconf buildworld.conf
. ${system}
. ${workdir}/universe.subr
. ${workdir}/emulator.subr

destdir_arg="${destdir}"
unset destdir # this variable used in init_kerneldir

init_distcc
init_notify
init_target_arch
init_srcdir
init_supported_arch
init_basedir

LOCKFILE=${ftmpdir}/$( /sbin/md5 -qs ${MAKEOBJDIRPREFIX} ).lock

init_kerneldir

kernel_conf="${platform}-kernel-${name}-${arch}-${ver}"

if [ -f "${etcdir}/${kernel_conf}" ]; then
	kernel_conf_path="${etcdir}/${kernel_conf}"
else
	kernel_conf_path="${etcdir}/defaults/${kernel_conf}"
fi

[ ! -f "${kernel_conf_path}" ] && err 1 "${MAGENTA}No such config ${kernel_conf_path} in: ${GREEN}${etcdir}${NORMAL}"

cp ${kernel_conf_path} ${SRC_DIR}/sys/${arch}/conf/${name}.CBSD
#makelock $LOCKFILE "rm -f ${SRC_DIR}/sys/${arch}/conf/${name}.CBSD"

## preparing chroot
TMPDST="${basejaildir}/tempbase.$$"
mkdir -p ${TMPDST}

makelock $LOCKFILE "rm -f ${SRC_DIR}/sys/${arch}/conf/${name}.CBSD && umount -f ${TMPDST}${MAKEOBJDIRPREFIX} && umount -f ${TMPDST}/dev && umount -f ${TMPDST}/${SRC_DIR} && ${CHFLAGS_CMD} -R noschg ${TMPDST} && /bin/rm -rf ${TMPDST}"

baserw=1
populate_cdir ${BASE_DIR} ${TMPDST}
cp ${kernel_conf_path} ${SRC_DIR}/sys/${arch}/conf/${name}.CBSD

# place for rewrite to mountbase from system.subr
mkdir -p ${TMPDST}/${SRC_DIR}
${MOUNT_NULL_CMD} -o ro ${SRC_DIR} ${TMPDST}/${SRC_DIR}
mkdir -p ${MAKEOBJDIRPREFIX} ${TMPDST}${MAKEOBJDIRPREFIX}
mkdir -p ${TMPDST}${etcdir}
[ -f "${__MAKE_CONF}" ] && cp ${__MAKE_CONF} ${TMPDST}${etcdir}
[ -f "${SRCCONF}" ] && cp ${SRCCONF} ${TMPDST}${etcdir}
${MOUNT_NULL_CMD} ${MAKEOBJDIRPREFIX} ${TMPDST}${MAKEOBJDIRPREFIX}
mount -t devfs devfs ${TMPDST}/dev
#

/usr/sbin/chroot ${TMPDST} /usr/bin/make -C ${SRC_DIR} installkernel KERNCONF=${name}.CBSD ${NOCLEANUP} TARGET=${arch} TARGET_ARCH="${target_arch}"

[ -n "${destdir_arg}" ] && KERNEL_DIR="${destdir_arg}"
[ -d "${KERNEL_DIR}/boot/kernel" ] && rm -rf ${KERNEL_DIR}/boot/kernel
[ ! -d "${KERNEL_DIR}/boot" ] && mkdir -p ${KERNEL_DIR}/boot
mv ${TMPDST}/boot/kernel ${KERNEL_DIR}/boot/kernel
#/usr/bin/make -C ${SRC_DIR} installkernel TARGET=${arch} KERNCONF=${name}.CBSD DESTDIR=${KERNEL_DIR} TARGET_ARCH="${target_arch}"
