srcdir = @srcdir@
VPATH = @srcdir@

# PROGRAMS includes all test programs built on this platform.
# STDTEST_PORTABLE
#   test programs invoked via standard user interface, run on all platforms
# ALL_TESTS
#   test modules invoked through the abts suite (./testall)
# OTHER_PROGRAMS
#   programs such as sockperf, that have to be invoked in a special sequence
#   or with special parameters

INCLUDES = @APRUTIL_PRIV_INCLUDES@ @APR_INCLUDES@ @APRUTIL_INCLUDES@

STDTEST_PORTABLE = testall dbd

TESTS = teststrmatch.lo testuri.lo testuuid.lo testbuckets.lo testpass.lo \
	testmd4.lo testmd5.lo testldap.lo testdate.lo testdbm.lo testdbd.lo \
	testxml.lo testrmm.lo testreslist.lo testqueue.lo testxlate.lo \
	testmemcache.lo testcrypto.lo

PROGRAMS = $(STDTEST_PORTABLE)

TARGETS = $(PROGRAMS)

LOCAL_LIBS = ../lib@APRUTIL_LIBNAME@@APRUTIL_MAJOR_VERSION@.la

CLEAN_TARGETS = manyfile.bin testfile.txt data/sqlite*.db

# bring in rules.mk for standard functionality
@INCLUDE_RULES@
APRUTIL_LIBS = @APRUTIL_LIBS@
APRUTIL_LDFLAGS = $(ALL_LDFLAGS) @LT_NO_INSTALL@ @APRUTIL_LDFLAGS@

# link programs using -no-install to get real executables not
# libtool wrapper scripts which link an executable when first run.
LINK_PROG = $(LIBTOOL) $(LTFLAGS) --mode=link $(LT_LDFLAGS) $(COMPILE) \
	    $(APRUTIL_LDFLAGS) -o $@

# STDTEST_PORTABLE;

abts.lo: $(srcdir)/abts.c $(srcdir)/abts.h $(srcdir)/abts_tests.h \
	 $(srcdir)/testutil.h

testutil.lo: $(srcdir)/abts.c $(srcdir)/abts.h $(srcdir)/abts_tests.h \
	     $(srcdir)/testutil.h

OBJECTS_testall = abts.lo testutil.lo $(TESTS) $(LOCAL_LIBS)
testall: $(OBJECTS_testall)
	$(LINK_PROG) $(OBJECTS_testall) $(APRUTIL_LIBS) @LDADD_ldap@
# For VPATH builds; where we have no ./data, copy us some data
# if we wait until 'make check', then 'make; ./testall' fails;
	if test ! -d "./data"; then cp -r $(srcdir)/data data; fi

OBJECTS_dbd = dbd.lo $(LOCAL_LIBS)
dbd: $(OBJECTS_dbd)
	$(LINK_PROG) $(OBJECTS_dbd) $(APRUTIL_LIBS)

check: $(TESTALL_COMPONENTS) $(STDTEST_PORTABLE) $(STDTEST_NONPORTABLE)
	teststatus=0; \
	progfailed=""; \
	for prog in $(STDTEST_PORTABLE) $(STDTEST_NONPORTABLE); do \
	        if test "$$prog" = 'dbd'; then \
			for driver in none @apu_dbd_tests@; do \
				if test "$$driver" != 'none'; then \
					@apr_shlibpath_var@="`echo "../crypto/.libs:../dbd/.libs:../ldap/.libs:$$@apr_shlibpath_var@" | sed -e 's/::*$$//'`" \
					./$$prog $$driver; \
					status=$$?; \
					if test $$status != 0; then \
						teststatus=$$status; \
						progfailed="$$progfailed '$$prog $$driver'"; \
					fi; \
				fi; \
			done; \
	        else \
			@apr_shlibpath_var@="`echo "../crypto/.libs:../dbd/.libs:../ldap/.libs:$$@apr_shlibpath_var@" | sed -e 's/::*$$//'`" \
			./$$prog; \
			status=$$?; \
			if test $$status != 0; then \
				teststatus=$$status; \
				progfailed="$$progfailed $$prog"; \
			fi; \
		fi; \
	done; \
	if test $$teststatus != 0; then \
		echo "Programs failed:$$progfailed"; \
	fi; \
	exit $$teststatus

# DO NOT REMOVE
