#!/bin/sh
# check-each-file
# Used to narrow down a miscompilation to one .o file from a list. Please read
# the usage procedure, below, for command-line syntax (or run it with --help).
# This script depends on the llvm-native-gcc script.

if [ x$1 = x--make-linker-script ]
then
	program=$2
	linker=./link-$program
	echo "Building $program with llvm-native-gcc"
	rm -f $program
	gmake -e $program CC=llvm-native-gcc CXX=llvm-native-gxx
	echo "Erasing $program and re-linking it" 
	rm -f $program
	echo "rm -f $program" > $linker
	gmake -n $program >> $linker
	chmod 755 $linker
	echo "Linker script created in $linker; testing it out"
	output=`./$linker 2>&1`
	case "$output" in
		*undefined*reference*__main*) 
			echo "$program appears to need a dummy __main function; adding one"
			echo "void __main () { }" > __main.c
			gcc -c __main.c
			echo "Done; rebuilding $linker"
			echo "rm -f $program" > $linker
			gmake -n $program 2>&1 | sed '/gcc/s/$/__main.o/' >> $linker
			./$linker > /dev/null 2>&1
			if [ ! -x $program ]
			then
				echo "WARNING: linker script didn't work"
			fi
			;;
		*)
			if [ ! -x $program ]
			then
				echo "WARNING: linker script didn't work"
			fi
			;;
	esac
	echo "Linker script created in $linker; please check it manually"
	exit 0
fi

checkfiles="$1"
program="$2"
linker="$3"
checker="$4"

usage () {
	myname=`basename $0`
	echo "$myname --make-linker-script PROGRAM"
	echo "$myname OBJECTS-FILE PROGRAM LINKER CHECKER"
	echo ""
	echo "OBJECTS-FILE is a text file containing the names of all the .o files"
	echo "PROGRAM is the name of the executable under test"
	echo "(there must also exist a Makefile in the current directory which"
	echo "has PROGRAM as a target)"
	echo "LINKER is the script that builds PROGRAM; try --make-linker-script" 
	echo "to automatically generate it"
	echo "CHECKER is the script that exits 0 if PROGRAM is ok, 1 if it is not OK"
	echo "(LINKER and CHECKER must be in your PATH, or you should specify ./)"
	echo ""
	echo "Bugs to <gaeke@uiuc.edu>."
	exit 1
}

if [ x$1 = x--help ]
then
	usage
fi

if [ -z "$checkfiles" ]
then
	echo "ERROR: Must specify name of file w/ list of objects as 1st arg."
	echo "(got \"$checkfiles\")"
	usage
fi
if [ ! -f "$checkfiles" ]
then
	echo "ERROR: $checkfiles not found"
	usage
fi
if [ -z "$program" ]
then
	echo "ERROR: Must specify name of program as 2nd arg."
	usage
fi
if [ -z "$linker" ]
then
	echo "ERROR: Must specify name of link script as 3rd arg."
	usage
fi
if [ ! -x "$linker" ]
then
	echo "ERROR: $linker not found or not executable"
	echo "You may wish to try: $0 --make-linker-script $program"
	usage
fi
if [ -z "$checker" ]
then
	echo "ERROR: Must specify name of $program check script as 3rd arg."
	usage
fi
if [ ! -x "$checker" ]
then
	echo "ERROR: $checker not found or not executable"
	usage
fi

files=`cat $checkfiles`
echo "Recompiling everything with llvm-native-gcc"
for f in $files
do
	rm -f $f
	gmake $f CC=llvm-native-gcc CXX=llvm-native-gxx
done
rm -f $program
$linker
if $checker
then
	echo "Sorry, I can't help you, $program is OK when compiled with llvm-native-gcc"
	exit 1
fi
for f in $files
do
	echo Trying to compile $f with native gcc and rebuild $program
	mv ${f} ${f}__OLD__
	gmake ${f} CC=gcc > /dev/null 2>&1
	$linker
	echo Checking validity of new $program
	if $checker
	then
		echo Program is OK
		okfiles="$okfiles $f"
	else
		echo Program is not OK
		notokfiles="$notokfiles $f"
	fi
	mv ${f}__OLD__ ${f}
done
echo ""
echo "Program is OK when these files are recompiled with native gcc: "
echo "$okfiles"
echo ""
echo "Program is not OK when these files are recompiled with native gcc: "
echo "$notokfiles"
echo ""
exit 0
