SRC_DIR	= $(SRC_TREE)/condor_test_suite
CFLAGS	= $(STD_C_FLAGS) -g


SRC = \
	coredump.c floats.c nomain.c printer.c reader.c registers.c files.c dup.c

VANILLA_PROGS = \
	floats printer reader registers files dup

CKPT_PROGS = \
	floats.local printer.local reader.local registers.local \
	files.local dup.local

REMOTE_PROGS = \
	coredump.remote floats.remote nomain.remote printer.remote \
	reader.remote registers.remote files.remote dup.remote

all_target( $(VANILLA_PROGS) $(CKPT_PROGS) $(CMD_FILES) $(REMOTE_PROGS) reader.cmd )
tags_target($(SRC),)
depend_target($(SRC))

simple_target_C(floats,floats.o fake_ckpt.o,$(NULL))
simple_target_C(printer,printer.o fake_ckpt.o,$(NULL))
simple_target_C(reader,reader.o fake_ckpt.o,$(NULL))
simple_target_C(registers,registers.o fake_ckpt.o,$(NULL))
simple_target_C(files,files.o fake_ckpt.o,$(NULL))
simple_target_C(dup,dup.o fake_ckpt.o,$(NULL))

ckpt_target_C(floats.local,floats.o,)
ckpt_target_C(printer.local,printer.o,)
ckpt_target_C(reader.local,reader.o,)
ckpt_target_C(registers.local,registers.o,)
ckpt_target_C(files.local,files.o,)
ckpt_target_C(dup.local,dup.o,)

remote_target_C(floats.remote,floats.o,)
remote_target_C(printer.remote,printer.o,)
remote_target_C(reader.remote,reader.o,)
remote_target_C(registers.remote,registers.o,)
remote_target_C(files.remote,files.o,)
remote_target_C(dup.remote,dup.o,)
remote_target_C(coredump.remote,coredump.o,)

#
# This is purposely linked incorrectly to see how condor will deal
# with programs that are not linked with the remote execution library.
simple_target_C(nomain.remote,nomain.o fake_ckpt.o,$(NULL))


clean::
	rm -f core *.ckpt

TST_DIR = /usr/tmp/condor_test
MKCKPT = $(RELEASE_DIR)/bin/mkckpt

#define run_test_2(prog,args,verify) \
	@echo ---------------- running prog ----------------					@@\
	-cd $(TST_DIR); $(MKCKPT) prog; ./prog.ckpt args; echo ""; verify 		@@\
	-cd $(TST_DIR); $(MKCKPT) prog.ckpt core; ./prog.ckpt; echo ""; verify	@@\
	@echo ""

#define run_test_3(prog,args,verify) \
	@echo ---------------- running prog ----------------					@@\
	-cd $(TST_DIR); $(MKCKPT) prog; ./prog.ckpt args; echo ""; verify 		@@\
	-cd $(TST_DIR); $(MKCKPT) prog.ckpt core; ./prog.ckpt; echo ""; verify	@@\
	-cd $(TST_DIR); $(MKCKPT) prog.ckpt core; ./prog.ckpt; echo ""; verify	@@\
	@echo ""

#define single_test(prog,datafile,tests)                                @@\
test.prog: prog.local $(TST_DIR) ALWAYS                                 @@\
	cp prog.local datafile $(TST_DIR)                                   @@\
	tests                                                               @@\
	rm -f $(TST_DIR)/core $(TST_DIR)/prog.*                             @@\
	@echo ""

single_test(printer,,run_test_2(printer.local,,cat results))
single_test(registers,,run_test_2(registers.local,,))
single_test(floats,,run_test_2(floats.local,,))
single_test(reader,,run_test_2(reader.local,UnixName 128,))
single_test(files,,run_test_3(files.local,*.local,))
single_test(dup,,run_test_3(dup.local,dup.local,))


$(TST_DIR):
	mkdir $(TST_DIR)

ckpt_test: test.printer test.registers test.floats test.reader test.files test.dup
	rm -rf $(TST_DIR)
	@echo ""; echo ""; echo ""

remote_test: $(REMOTE_PROGS) ALWAYS
	condor_submit printer.cmd
	condor_submit registers.cmd
	condor_submit floats.cmd
	condor_submit reader.cmd
	condor_submit files.cmd
	condor_submit dup.cmd
	condor_submit core_all.cmd
	condor_submit core_none.cmd
#if !IS_R6000_AIX31
	condor_submit nomain.cmd
#endif


#if IS_MIPS_ULTRIX42		/* Avoid an ULTRIX C compiler optimizer bug */
floats.o: floats.c
	cc $(CFLAGS) -O0 -c floats.c
#endif

reader.cmd:
	echo "executable      = reader.remote"	> reader.cmd
	echo "error           = reader.error"	>> reader.cmd
	echo "output          = reader.out"		>> reader.cmd
	echo "Environment = CHECKPOINT=false;"	>> reader.cmd
	echo ""									>> reader.cmd
	echo arguments = UnixName 1024			>> reader.cmd
	echo queue								>> reader.cmd
