#!/bin/sh
if [ "x$GCTLIB" = "x" ]
then
  GCTLIB=`pwd`/../../../
  PATH=.:`pwd`/../../..:$PATH
fi

ROOT=..
. $ROOT/run.source

# Override standard make_U to include dummy routines.
make_U()
{
  hush_cc -c $1.c
  hush_cc -c gct-ps-defs.c
  hush_cc -c gct-write.c
  hush_cc -c dummy.c
  hush_cc -o U $1.o gct-ps-defs.o test-driver.o gct-write.o dummy.o
}

# Override standard make_I to include checking routines. 
make_I()
{
	hush_gct -c -B$GCTLIB $1.c
	hush_cc -c T$1.c
	hush_cc -c gct-ps-defs.c
	hush_cc -c gct-write.c	
	hush_cc -c util.c
	hush_cc -o I T$1.o gct-ps-defs.o test-driver.o gct-write.o util.o
}



count_race_macros()
{
  # Change all macros to dollar signs.
  sed 's/GCT_RACE_GROUP/$$$/g' < T$1.c > dollar.out
  # Change everything else to a blank and count words.
  sed 's/[^$]/ /g' dollar.out | sed 's/\$\$\$/word/g' | sed 's/\$/ /g' |\
	wc -w | sed 's/.*/ &/' > count.out
  # Final sed adds a space on systems where 'wc' doesn't.  
}

race_test ()
{
	std_test $1
	count_race_macros $1; diff -b count.out $1.cref
}

clean
make_constant_objects


sed 's/#define GCT_THREAD.*>>>/#define GCT_THREAD Thread/' gct-defs.h > /tmp/G$$
/bin/rm -f gct-defs.h ; 
sed '/<<<TAG>>>/d' /tmp/G$$ > gct-defs.h

race_test race1  2> warning.out; diff warning.out race1.wref
# Check that right number of race groups have been allocated, just once.
grep NUM_RACE_GROUPS gct-ps-defs.h > groups.out
diff groups.out race1.gref

gsummary GCTLOG > summary.out; diff summary.out summary.ref
gsummary -f < GCTLOG > summaryf.out; diff summaryf.out summaryf.ref
gsummary -r GCTLOG > summaryr.out; diff summaryr.out summaryr.ref

race_test race2
race_test race3
race_test racemult
race_test longjmp 2> warning.out; diff warning.out longjmp.wref

# Checking whether inter-file communication works.
init pass
hush_gct -B$GCTLIB pass1.c
hush_gct -B$GCTLIB pass2.c
hush_cc -c Tpass1.c
hush_cc -c Tpass2.c
hush_cc -c gct-ps-defs.c
hush_cc -c util.c
hush_cc -o I Tpass1.o Tpass2.o gct-ps-defs.o test-driver.o gct-write.o util.o
hush_cc -c pass1.c
hush_cc -c pass2.c
hush_cc -c gct-ps-defs.c
hush_cc -c dummy.c
hush_cc -o U pass1.o pass2.o gct-ps-defs.o test-driver.o gct-write.o dummy.o
output_check
log_check pass
count_race_macros pass1; diff -b count.out pass1.cref
count_race_macros pass2; diff -b count.out pass2.cref
grep NUM_RACE_GROUPS gct-ps-defs.h > groups.out
diff groups.out pass.gref


exit 0
