#!/bin/sh
# This file is part of the coreboot project.
#
# Copyright (C) 2011 Patrick Georgi <patrick@georgi-clan.de>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# DESCR: Check that build directories can be chosen freely

# $1: command to test for GNU make
search_make() {
if [ -n "`$1 --version 2>&1 | grep GNU`" ]; then MAKE=$1; fi
}

# if $1 and $2 differ, exit with failure
compare_output() {
if ! [ "$1" = "$2" ]; then
	echo \'$1\' should be \'$2\'
	exit 1
fi
}

# $1: object directory
run_printall() {
$MAKE CONFIG_USE_BLOBS=n CONFIG_CCACHE=n CONFIG_SCANBUILD_ENABLE=n NOMKDIR=1 \
	DOTCONFIG=$TMPCONFIG obj=$1 printall |        \
	sed -e "s,^ *,," -e "s,^r.mstage-objs:=,,"    \
	    -e "s,mainboard/[^/]*/[^/]*/,.../,g" |    \
	tr " " "\n" | GREP_OPTIONS= grep "/static.*\.[co]" | sort | \
	tr '\012\015' '  ' | sed -e "s,  *, ,g" -e "s, *$,,"
}

# find GNU make
MAKE=
search_make make
[ -z $MAKE ] && search_make gmake
[ -z $MAKE ] && search_make gnumake

if [ "$MAKE" = "" ]; then
	echo Could not identify GNU make
	exit 1
fi

# prepare a config to use
TMPCONFIG=`mktemp .tmpconfig.XXXXXX`
rm -f $TMPCONFIG
$MAKE DOTCONFIG=$TMPCONFIG allyesconfig >/dev/null

# look up parent directory
CURRENTDIR=`pwd -P`
PARENTDIR=`dirname $CURRENTDIR`

compare_output "`run_printall build`" "build/.../static.c build/.../static.c build/.../static.romstage.o"
compare_output "`run_printall ../obj`" "$PARENTDIR/obj/.../static.c $PARENTDIR/obj/.../static.c $PARENTDIR/obj/.../static.romstage.o"
compare_output "`run_printall /tmp`" "/tmp/.../static.c /tmp/.../static.c /tmp/.../static.romstage.o"
compare_output "`run_printall /../tmp`" "/tmp/.../static.c /tmp/.../static.c /tmp/.../static.romstage.o"

rm -f $TMPCONFIG

