STRCFLAGS = \
	-la stratego-lib \
	--format-check 0 \
    -Xcc -O2 -Xcc -mtune=generic

problems = ../../../../problems

basicrecfiles = \
  $(wildcard $(problems)/*/*.rec)
    
recfiles = \
  $(basicrecfiles) \
  $(wildcard */*/*.rec) 
  
badrecfiles =\
   $(problems)/cs/sieve.rec \
   $(problems)/trs/factorial.rec \
   $(problems)/ctrs/hanoi.rec \
 
slowrecfiles =\
    $(problems)/ctrs/closure.rec \
    $(problems)/ctrs/merge-sort.rec \
    $(problems)/ctrs/quick-sort.rec \
    $(problems)/modulo/tautHard.rec \
    $(problems)/trs/asf+sdf-benchmark.rec
 
removedrecfiles =  $(wildcard $(problems)/removed/*.rec)
skiprecfiles = $(badrecfiles) $(slowrecfiles) $(removedrecfiles)

strfiles=$(recfiles:.rec=.str)
binfiles=$(recfiles:.rec=)
runfiles=$(recfiles:.rec=.run)
tryrunfiles=$(recfiles:.rec=.tryrun)

cleanfiles=$(binfiles) $(strfiles) \
           $(recfiles:.rec=.c) $(recfiles:.rec=.o) $(recfiles:.rec=.dep) $(recfiles:.rec=.lo) \
           $(recfiles:.rec=.run) $(recfiles:.rec=.strast) $(recfiles:.rec=.recast)

check : quick-check

full-check :
	$(MAKE) clean  # HACK: first clean everything
	$(MAKE) full-check2

full-check2 : skip-removed             $(binfiles) $(strfiles) $(tryrunfiles)

quick-check : skip-removed skip-others $(binfiles) $(strfiles) $(runfiles)
	@echo
	@echo "Quick check completed, some tests were skipped that are included in full-check."

skip-removed :
	touch . $(removedrecfiles:.rec=.run) $(removedrecfiles:.rec=) $(removedrecfiles:.rec=.str)

skip-others :
	touch . $(skiprecfiles:.rec=.run) $(skiprecfiles:.rec=) $(skiprecfiles:.rec=.str)

clean :
	rm -f $(cleanfiles)

%.str : %.rec ../syntax/REC.tbl ../trans/recgen
	./timed-recgen.sh $(@:.str=)
	
% : %.str
	@echo
	@echo "===== Compiling generated Stratego source `basename $<` ====="
	time strc -i $< -o $@ $(STRCFLAGS)
	
%.run : %
	@echo
	@echo "===== Starting `basename $<` ====="
	@echo
	time $<
	@echo "===== Completed `basename $<` ====="
	
%.tryrun : %
	@echo
	@echo "===== Starting `basename $<` ====="
	@echo
	time $< || echo Failed.
	@echo "===== Completed `basename $<` ====="

