#!/usr/local/bin/cbsd
#v11.1.16
CBSDMODULE="sys"
MYARG="destdir"
MYOPTARG="arch basename name target_arch ver"
MYDESC="Create base-in-pkg packages/distribution from buildworld/kernel"
ADDHELP="
${H3_COLOR}Description${N0_COLOR}:

Install FreeBSD base files to ~cbsd/basejail/ directory after 'cbsd buildworld'.

${H3_COLOR}Options${N0_COLOR}:

 ${N2_COLOR}arch=${N0_COLOR}              - <name>, use non-native architectures;
 ${N2_COLOR}basename=${N0_COLOR}          - Prefix for directory name, can be used for jail as alternative base;
 ${N2_COLOR}destdir=${N0_COLOR}           - <path> - pass as REPODIR variable, destination target directory;
 ${N2_COLOR}target_arch=${N0_COLOR}       - <name>, build non-native target arch.
 ${N2_COLOR}ver=${N0_COLOR}               - set version: '13.3', '14.1', '15';

${H3_COLOR}Examples${N0_COLOR}:

 # cbsd packages destdir=/tmp/testbase

${H3_COLOR}See also${N0_COLOR}:

  cbsd buildworld --help
  cbsd bases --help
  cbsd world --help
  cbsd install-pkg-world --help

"

. ${subrdir}/nc.subr
readconf buildworld.conf
destdir=
name=
. ${cbsdinit}
. ${subrdir}/universe.subr

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

# By default ver=current version
. ${subrdir}/build.subr

init_distcc
init_notify
init_target_arch
init_srcdir
init_supported_arch

if [ -n "${register_basename}" ]; then
	init_basedir -b ${register_basename}
else
	init_basedir
fi

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

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

[ ! -d "${destdir}" ] && ${MKDIR_CMD} -p ${destdir}
[ ! -f "${kernel_conf_path}" ] && err 1 "${N1_COLOR}No such config ${kernel_conf_path} in: ${N2_COLOR}${etcdir}${N0_COLOR}"

${CP_CMD} ${kernel_conf_path} ${SRC_DIR}/sys/${arch}/conf/${name}.CBSD

makelock ${BASE_DIR_LOCKFILE} "true"

# make base lock
echo $$ > ${BASE_DIR_LOCKFILE}

if [ -n "${register_basename}" ]; then
	_basename_args="basename=\"${register_basename}\""
else
	_basename_args=
fi

[ ! -r ${SRC_DIR} ] && err 1 "${N1_COLOR}No such Makefile in: ${N2_COLOR}${SRC_DIR}${N0_COLOR}"

# map amd64 -> x86_64 for DFLY
if [ "${platform}" = "DragonFly" ]; then
	case "${arch}" in
		amd64)
			build_arch="x86_64"
			build_target_arch="x86_64"
			;;
	esac
else
	build_arch="${arch}"
	build_target_arch="${target_arch}"
fi

cbsdlogger NOTICE ${CBSD_APP}: packages started: ${MAKE_CMD} -C ${SRC_DIR} packages DESTDIR=${BASE_DIR} TARGET=${build_arch} TARGET_ARCH=${build_target_arch}

st_time=$( ${DATE_CMD} +%s )

export REPODIR="${destdir}"
echo "${MAKE_CMD} -C ${SRC_DIR} packages DESTDIR=${BASE_DIR} TARGET=${build_arch} TARGET_ARCH=${build_target_arch} KERNCONF=${name}.CBSD"
${MAKE_CMD} -C ${SRC_DIR} packages DESTDIR=${BASE_DIR} TARGET=${build_arch} TARGET_ARCH=${build_target_arch} KERNCONF=${name}.CBSD
ret=$?
[ $? -ne 0 ] && err 1 "${W1_COLOR}packages error: ${N2_COLOR}${ret}${N0_COLOR}"

${RM_CMD} -f ${BASE_DIR_LOCKFILE}

. ${subrdir}/time.subr
end_time=$( ${DATE_CMD} +%s )
diff_time=$(( end_time - st_time ))
diff_time=$( displaytime ${diff_time} )

${ECHO} "${N1_COLOR}${CBSD_APP} to ${destdir} done ${N2_COLOR}in ${diff_time}${N0_COLOR}"
cbsdlogger NOTICE ${CBSD_APP}: packages to ${destdir} done in ${diff_time}

exit 0
