#!/bin/sh
# $Id: setup-savebuild,v 1.15 2025/05/26 20:34:41 tom Exp $
# vi:ts=4 sw=4
#
# save the built-stuff from configuring & building, to make it simpler
# to do rebuilds
#

# calling script must override this
PROG=

# $* = extra/custom files to save
save_build() {
	echo "save_build $*"
	SRC=`pwd`

	if [ ! -n "$EGREP" ]
	then
		case x"`partition`" in
		*solaris10)
			EGREP=egrep
			;;
		*)
			EGREP="grep -E"
			;;
		esac
	fi
	export EGREP

	: ${PROG=unknown}
	: ${BUILD_DIR=$PROG}

	THIS=`basename $SRC`
	THAT=`echo $THIS|sed -e "s,$BUILD_DIR,,"`
	if [ "$THIS" = "$THAT" ]
	then
		THIS=`dirname $SRC`
		THIS=`basename $THIS`
		THAT=`echo $THIS|sed -e "s,$BUILD_DIR,,"`
		if [ "$THIS" = "$THAT" ]
		then
			echo '? cannot save '$SRC
			exit 1
		fi
	fi

	for f in config.status
	do
		if [ ! -f $f ]
		then
			echo '? nothing to save: '$f
			exit 1
		fi
	done

	for dst in .. ../..
	do
		DST=$dst/save-$PROG
		[ -d $DST ] && break
		[ -w $dst ] && mkdir $DST && break
	done
	if [ ! -d $DST ]
	then
		echo 'Cannot make save-directory'
		exit 1
	fi

	cd $SRC

	FILES="config.status"
	if ( $EGREP '^s%@prefix@%.*%g' config.status >/dev/null 2>/dev/null )
	then
		# autoconf 2.13
		GRPL='^s%@'
		GRPR='@%.*%g'
		SED1='s/s%@'
		SED2='@%//'
		SED3='s/%g//'
		FILES="$FILES config.cache"
	elif ( $EGREP '^s,@host_alias@,.*,;t' config.status >/dev/null 2>/dev/null )
	then
		# autoconf 2.52
		GRPL='^s,@'
		GRPR='@,.*,;t'
		SED1='s/s,@'
		SED2='@,//'
		SED3='s/,;t t//'
	elif ( $EGREP '^s,@host_alias@,.*,g' config.status >/dev/null 2>/dev/null )
	then
		# autoconf 2.61, used with PDCurses 3.4
		GRPL='^s,@'
		GRPR='@,.*,g'
		SED1='s/s,@'
		SED2='@,|#_!!_#|//'
		SED3='s/,g$//'
	elif ( $EGREP 'S\["host_alias"\]=".*"' config.status >/dev/null 2>/dev/null )
	then
		# autoconf 2.69
		GRPL='^S\["'
		GRPR='"\]=".*$'
		SED1='s/^S\["'
		SED2='"\]="//'
		SED3='s/"$//'
	else
		echo 'Cannot parse config.status'
		exit 1
	fi

	TEMP=${TMPDIR:-/tmp}/save$$
	cat >$TEMP <<"EOF"
s/ -[IUD][^ ]*/ /g
s/ -[QWf][a-z0-9_=-]*/ /g
s/ -[fgm][^ ]*/ /g
s/ -dynamic/ /g
s/ -pipe/ /g
s/ -specs=[^ ]*/ /g
s/ -O[0-9]*/ /g
EOF

	Host=`$EGREP "${GRPL}host_os${GRPR}" config.status | sed -e "${SED1}host_os${SED2}" -e "${SED3}" -e 's/ //g'`
	Comp=`$EGREP "${GRPL}CC${GRPR}"     config.status  | sed -e "${SED1}CC${SED2}"      -e "${SED3}" -e 's/ //g'`
	Opts=`$EGREP "${GRPL}CFLAGS${GRPR}" config.status  | sed -e "${SED1}CFLAGS${SED2}"  -e "${SED3}" | sed -f $TEMP | sed -e 's/ //g'`

	rm -f $TEMP

	if [ -f /usr/local/bin/partition ] ; then
		Host=`partition`
	fi
	[ -z "$Host" ] && Host=`uname`
	[ -z "$Comp" ] && Comp=noarch

	cat <<-EOF
	** Host: $Host
	** Comp: $Comp
	** Opts: $Opts
	EOF

	OUT=${Host}-${Comp}${Opts}

	echo Creating $DST/${OUT}.tgz

	chmod u+wx $DST
	rm -f $DST/${OUT}.tgz
	rm -rf $DST/$OUT

	mkdir $DST/$OUT
	for check in *.out config.log config.h "$@"
	do
		[ -f "$check" ] && FILES="$FILES $check"
	done
	tar cvf - $FILES |(cd $DST/$OUT; tar xf -)

	cd $DST
	archive $OUT
	chmod -w .
	echo "... save_build $*"
}
