# Install language-c 
# ( cd .. ; cabal install -p )
# Install language-c-test-framework
# ( cd ../test-framework ; cabal install -p )

# Makefile for test drivers

ifndef HC
	HC=ghc
endif

ifndef OPT
	OPT=-O
endif

ifdef PROFILE
	OPTS += -prof -auto-all
	SUFFIX=_p
endif

BUILD_DIR_BASE=build$(SUFFIX)

OPT += -package language-c -package language-c-test-framework

all: c_test test_drivers check_args render_tests

# neat GNU make extension
profile : OPT += -prof -auto-all
profile : SUFFIX = _p
profile : c_test test_drivers
         
test_drivers: parse round_trip equiv report_fatal

INCLUDE=-isrc

c_test: 
	@mkdir -p $(BUILD_DIR_BASE)/$(@)/
	$(HC) $(OPT) -odir $(BUILD_DIR_BASE)/$(@)/ -o bin/CTest$(SUFFIX) $(INCLUDE) --make src/CTest.hs

parse: 
	@mkdir -p $(BUILD_DIR_BASE)/$(@)/
	$(HC) $(OPT) -odir $(BUILD_DIR_BASE)/$(@)/ -o bin/CParse$(SUFFIX) $(INCLUDE) --make src/CParse.hs

round_trip:
	@mkdir -p $(BUILD_DIR_BASE)/$(@)/
	$(HC) $(OPT) -odir $(BUILD_DIR_BASE)/$(@)/ -o bin/CRoundTrip$(SUFFIX) $(INCLUDE) --make src/CRoundTrip.hs

equiv:
	@mkdir -p $(BUILD_DIR_BASE)/$(@)/
	$(HC) $(OPT) -odir $(BUILD_DIR_BASE)/$(@)/ -o bin/CEquiv$(SUFFIX) $(INCLUDE) --make src/CEquiv.hs

render_tests:
	@mkdir -p $(BUILD_DIR_BASE)/$(@)/
	$(HC) $(OPT) -odir $(BUILD_DIR_BASE)/$(@)/ -o bin/RenderTests$(SUFFIX) $(INCLUDE) --make src/RenderTests.hs

report_fatal:
	@mkdir -p $(BUILD_DIR_BASE)/$(@)/
	$(HC) $(OPT) -odir $(BUILD_DIR_BASE)/$(@)/ -o bin/ReportFatal$(SUFFIX) $(INCLUDE) --make src/ReportFatal.hs

check_args:
	@mkdir -p $(BUILD_DIR_BASE)/$(@)/
	$(HC) $(OPT) -odir $(BUILD_DIR_BASE)/$(@)/ -o bin/CheckGccArgs$(SUFFIX) $(INCLUDE) --make src/CheckGccArgs.hs

clean:
	rm -rf build/*
	rm -rf build_p/*