#!/bin/sh
# $Id: build-xterm,v 1.40 2024/05/04 10:18:23 tom Exp $
# vile:ts=4 sw=4
#
# Use "build-xterm --srcdir=FOO" to test out-of-tree builds.

. no-rcs

with_srcdir() {
	BUILD_SRC=.
	BUILD_TOP=`pwd`

	for opt in "$@"
	do
		case x$opt in #(vi
		x--srcdir*)
			BUILD_SRC=`echo "x$opt"|sed -e 's/^[^=]*=//'`
			if test -h "$BUILD_SRC"/RCS
			then
				cd "$BUILD_SRC" || exit
				rcs_save
				trap 'rc=$?; cd $BUILD_SRC && rcs_restore; exit $rc' EXIT INT QUIT TERM
				cd "$BUILD_TOP" || exit
			fi
			;;
		esac
	done
	test "$BUILD_SRC" = . && rcs_save
	export BUILD_SRC
}

clean() {
	if test -f "$BUILD_SRC"/charproc.c
	then
		test -d BUILD && rm -rf BUILD
		setup-clean
		rm -f terminfo.cdb
	fi
}

old_build() {
	test -d bin   || mkdir bin
	test -d BUILD || mkdir BUILD
	test -d LOGS  || mkdir LOGS

	BIN=$1
	shift 1

	if xmkmf
	then
		if test -n "$CC"
		then
			"${MAKE-make}" CC="$CC" &&
			"${MAKE-make}" install CC="$CC" DESTDIR=BUILD && \
			cp xterm bin/"$BIN" && \
			setup-clean
		else
			"${MAKE-make}" &&
			"${MAKE-make}" install DESTDIR=BUILD && \
			cp xterm bin/"$BIN" && \
			setup-clean
		fi
	fi
	test "$BUILD_SRC" = . || rm -f ./Imakefile
	rm -f Makefile.bak
	rm -f Makefile
}

build() {
	test -d bin   || mkdir bin
	test -d BUILD || mkdir BUILD
	test -d LOGS  || mkdir LOGS

	unset TERM
	unset TERMCAP
	unset TERMINFO_DIRS
	TERMINFO=`pwd`/BUILD/terminfo
	test -d "$TERMINFO" || mkdir "$TERMINFO"
	export TERMINFO

	BIN=$1
	shift 1

	test -z "$CC" && BIN="$BIN"-cc
	test -n "$CC" && BIN="$BIN"-gcc

	CFG=$1
	shift 1

	OPT=
	case `partition` in
	*freebsd12*)
		case "${CC:-cc}" in
		c89|*/c89|c99|*/c99)
			OPT="$OPT --without-pkg-config"
			;;
		esac
		;;
	esac

	with_srcdir "$@"

	BUILD=`pwd`/BUILD
	echo "Building BIN=$BIN, $*"
	"cfg-$CFG" "$@" \
		--with-app-defaults="$BUILD"/etc \
		--with-icondir="$BUILD"/share/icons \
		--with-pixmapdir="$BUILD"/share/pixmaps \
		--exec-prefix="$BUILD" \
		--prefix="$BUILD" $OPT "$@" && \
	${MAKE-make} && \
	${MAKE-make} install-full && \
		( find BUILD -type f -print |csort ) && \
		${MAKE-make} uninstall-full && \
		cp xterm bin/"$BIN" &&
		save-xterm
	[ "$CFG" = xterm-wide ] && "${MAKE-make}" check
	clean
}

savelog() {
	echo "..savelog $BUILD_LOG"
	sed -e "s%`pwd`%SRCDIR%g" -e "s%$VER%-VER%g" -e 's/\$\(XTermId:[^$]\+\)\$/@\1@/g' run.log >"$BUILD_LOG"
	rm -f run.log
}

if test -z "$BUILD_LOG" ; then
	with_srcdir "$@"

	clean

	test -d bin   && rm -rf bin 

	DESKTOP_FLAGS="$DESKTOP_FLAGS --dir=`pwd`/BUILD/lib"
	export DESKTOP_FLAGS

	VER=`pwd|sed -e 's,^.*xterm,,' -e 's/+//' -e 's/-[1-9]$//'`

	BUILD_LOG=LOGS/`partition`-${CC-cc}-run.log
	BUILD_LOG="$BUILD_LOG" run-log "$0" "$@"
	savelog

else
	if test "$BUILD_SRC" = . ; then
		# xmkmf/imake do not work with VPATH
		old_build            xterm-imake "$@" --enable-imake
	fi
	build xterm-min          xterm-min "$@"
	build xterm-narrow       xterm-narrow "$@"
	case `partition` in
	*openbsd*)
		;;
	*)
		build xterm-wide     xterm-wide "$@" --with-pcre2
		;;
	esac
	build xterm-wide-noimake xterm-wide "$@" --disable-imake
	build xterm-wide-16bits  xterm-wide "$@" --enable-16bit-chars
fi
