#!/usr/local/bin/cbsd
#v11.1.16
globalconf="${workdir}/cbsd.conf";
CBSDMODULE="build"
MYARG=""
MYOPTARG="ver arch target_arch basename stable destdir"
MYDESC="Installbase from obj"
ADDHELP="ver=head for current.\n\
stable=1 for RELENG_X\n\
destdir= for alternative install path in root dir\n"

set -e
. ${globalconf}
set +e

. ${subr}
readconf buildworld.conf
. ${workdir}/universe.subr
init $*

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

# By default ver=current version
. ${buildconf}

init_distcc
init_notify
init_target_arch
init_srcdir
init_supported_arch
init_basedir

#TARGET_ARCH="${target_arch}"

[ ! -d "${BASE_DIR}" ] && /bin/mkdir -p ${BASE_DIR}
LOCKFILE=${ftmpdir}/$( /sbin/md5 -qs ${MAKEOBJDIRPREFIX} ).lock
makelock ${LOCKFILE} "cleanup_bases"

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

#  work-around for:
# rm -rf /tmp/install.PazxMxWt
# make[2]: "/usr/jails/src/src_11/src/share/mk/bsd.compiler.mk" line 37: Unable to determine compiler type for cc.  Consider setting COMPILER_TYPE.
# *** Error code 1
[ "$arch" = "arm" ] && export COMPILER_TYPE="clang"

register_base arch=${arch} ver=${ver}

if [ -x "${BASE_DIR}/bin/sh" ]; then
	baseelf=$( ${miscdir}/elf_tables --ver ${BASE_DIR}/bin/sh 2>/dev/null )
	[ -z "${baseelf}" ] && baseelf="0"
	register_base arch=${arch} ver=${ver}	# again: update elf
	base_status_is_maintenance_soft
else
	base_status_is_maintenance_hard
fi

[ ! -r ${SRC_DIR} ] && err 1 "${MAGENTA}No such Makefile in: ${GREEN}${SRC_DIR}${NORMAL}"

[ ! -r ${SRC_DIR}/etc/sendmail/freebsd.cf ] && make -C ${SRC_DIR}/etc/sendmail >/dev/null 2>&1 ||true

/usr/bin/make -C ${SRC_DIR} installworld DESTDIR=${BASE_DIR} TARGET=${arch} TARGET_ARCH=${target_arch}
/usr/bin/make -C ${SRC_DIR}/etc distribution DESTDIR=${BASE_DIR} TARGET=${arch} TARGET_ARCH=${target_arch}

cleanup_bases

[ $? -ne 0 ] && err 1 "${MAGENTA}Installworld error${NORMAL}"
preparebase dst=${BASE_DIR} emulator=${emulator}

[ ! -f ${BASE_DIR}/bin/sh ] && err 1 "${MAGENTA}No such /bin/sh in ${BASE_DIR}. Try to rebuild world${NORMAL}"

#idx platform name arch ver stable elf date
baseelf=
baseelf=$( ${miscdir}/elf_tables --ver ${BASE_DIR}/bin/sh 2>/dev/null )

[ -z "${baseelf}" ] && baseelf="0"
register_base arch=${arch} ver=${ver}

/bin/rm -f ${BASE_DIR_LOCKFILE}
