# The list of test is stored in a separate file, so that it can be shared with
# the Windows makefile, win.mak.

origdir = .

vpath %.c $(origdir)
vpath %.sh $(origdir)

include $(origdir)/tests

# The included file defined variable TESTBINS, which is a list of program
# names in format src/<testname>-test. Extract the base test names from it.
TESTNAMES = $(patsubst src/%-test,%, $(TESTBINS))

# Set by autoconf
LDFLAGS =  -L/usr/local/lib -L/usr/lib
CFLAGS = -g -O2 -Wall
ODBC_CONFIG = /usr/local/bin/odbc_config
PROVE = prove

LIBODBC := $(shell $(ODBC_CONFIG) --libs)

all: $(TESTBINS) runsuite reset-db

odbc.ini:
	./odbcini-gen.sh $(odbc_ini_extras)

installcheck: all odbc.ini reset-db runsuite
	rm -f regression.diffs
	@if test ! -d results; then mkdir -p results; fi
	ODBCSYSINI=. ODBCINSTINI=./odbcinst.ini ODBCINI=./odbc.ini ./reset-db < sampletables.sql
# If the perl 'prove' test running utility is available, use it. It produces
# nice output. But otherwise just run the plain suite, it's usable as is too.
ifdef PROVE
	prove -e ./runsuite $(TESTNAMES)
else
	./runsuite $(TESTNAMES)
endif

override CFLAGS += -Wno-pointer-sign $(CFLAGS_ADD)

runsuite: runsuite.c

reset-db: reset-db.c
	$(CC) $(CFLAGS) $(LDFLAGS) $< -o $@ $(LIBODBC)

src/common.o: src/common.c
	@if test ! -d src; then mkdir -p src; fi
	$(COMPILE.c) -c $< -o $@

# For each test, compile the .c file.
src/%-test: src/%-test.c src/common.o
	$(CC) $(CFLAGS) $(LDFLAGS) $^ -o src/$*-test $(LIBODBC)

# This target runs the regression tests with all combinations of
# UseDeclareFetch, UseServerSidePrepare and Protocol options.
installcheck-all:
	rm -f odbc.ini odbcinst.ini
	$(MAKE) installcheck odbc_ini_extras="UseDeclareFetch=0 UseServerSidePrepare=1 Protocol=7.4-2"
	rm -f odbc.ini odbcinst.ini
	$(MAKE) installcheck odbc_ini_extras="UseDeclareFetch=0 UseServerSidePrepare=1 Protocol=7.4-1"
	rm -f odbc.ini odbcinst.ini
	$(MAKE) installcheck odbc_ini_extras="UseDeclareFetch=0 UseServerSidePrepare=1 Protocol=7.4-0"

	rm -f odbc.ini odbcinst.ini
	$(MAKE) installcheck odbc_ini_extras="UseDeclareFetch=0 UseServerSidePrepare=0 Protocol=7.4-2"
	rm -f odbc.ini odbcinst.ini
	$(MAKE) installcheck odbc_ini_extras="UseDeclareFetch=0 UseServerSidePrepare=0 Protocol=7.4-1"
	rm -f odbc.ini odbcinst.ini
	$(MAKE) installcheck odbc_ini_extras="UseDeclareFetch=0 UseServerSidePrepare=0 Protocol=7.4-0"

	rm -f odbc.ini odbcinst.ini
	$(MAKE) installcheck odbc_ini_extras="UseDeclareFetch=1 UseServerSidePrepare=1 Protocol=7.4-2"
	rm -f odbc.ini odbcinst.ini
	$(MAKE) installcheck odbc_ini_extras="UseDeclareFetch=1 UseServerSidePrepare=1 Protocol=7.4-1"
	rm -f odbc.ini odbcinst.ini
	$(MAKE) installcheck odbc_ini_extras="UseDeclareFetch=1 UseServerSidePrepare=1 Protocol=7.4-0"

	rm -f odbc.ini odbcinst.ini
	$(MAKE) installcheck odbc_ini_extras="UseDeclareFetch=1 UseServerSidePrepare=0 Protocol=7.4-2"
	rm -f odbc.ini odbcinst.ini
	$(MAKE) installcheck odbc_ini_extras="UseDeclareFetch=1 UseServerSidePrepare=0 Protocol=7.4-1"
	rm -f odbc.ini odbcinst.ini
	$(MAKE) installcheck odbc_ini_extras="UseDeclareFetch=1 UseServerSidePrepare=0 Protocol=7.4-0"

clean:
	rm -f $(TESTBINS) src/*.o runsuite reset-db
	rm -f results/*
