# Makefile to build the SDL tests

srcdir  = @srcdir@

prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
libdir = @libdir@
libexecdir = @libexecdir@
includedir = @includedir@
datarootdir = @datarootdir@
datadir = @datadir@

CC      = @CC@
EXE	= @EXE@
CFLAGS  = @CFLAGS@ -g
LIBS	= @LIBS@

TARGETS = \
	checkkeys$(EXE) \
	checkkeysthreads$(EXE) \
	controllermap$(EXE) \
	loopwave$(EXE) \
	loopwavequeue$(EXE) \
	testatomic$(EXE) \
	testaudiocapture$(EXE) \
	testaudiohotplug$(EXE) \
	testaudioinfo$(EXE) \
	testautomation$(EXE) \
	testbounds$(EXE) \
	testcustomcursor$(EXE) \
	testdisplayinfo$(EXE) \
	testdraw2$(EXE) \
	testdrawchessboard$(EXE) \
	testdropfile$(EXE) \
	testerror$(EXE) \
	testevdev$(EXE) \
	testfile$(EXE) \
	testfilesystem$(EXE) \
	testgamecontroller$(EXE) \
	testgeometry$(EXE) \
	testgesture$(EXE) \
	testhaptic$(EXE) \
	testhittesting$(EXE) \
	testhotplug$(EXE) \
	testiconv$(EXE) \
	testime$(EXE) \
	testintersections$(EXE) \
	testjoystick$(EXE) \
	testkeys$(EXE) \
	testloadso$(EXE) \
	testlocale$(EXE) \
	testlock$(EXE) \
	testmessage$(EXE) \
	testmouse$(EXE) \
	testmultiaudio$(EXE) \
	testnative$(EXE) \
	testoverlay2$(EXE) \
	testplatform$(EXE) \
	testpower$(EXE) \
	testqsort$(EXE) \
	testrelative$(EXE) \
	testrendercopyex$(EXE) \
	testrendertarget$(EXE) \
	testresample$(EXE) \
	testrumble$(EXE) \
	testscale$(EXE) \
	testsem$(EXE) \
	testsensor$(EXE) \
	testshape$(EXE) \
	testsprite2$(EXE) \
	testspriteminimal$(EXE) \
	teststreaming$(EXE) \
	testsurround$(EXE) \
	testthread$(EXE) \
	testtimer$(EXE) \
	testurl$(EXE) \
	testver$(EXE) \
	testviewport$(EXE) \
	testvulkan$(EXE) \
	testwm2$(EXE) \
	testyuv$(EXE) \
	torturethread$(EXE) \


@OPENGL_TARGETS@ += testgl2$(EXE) testshader$(EXE)
@OPENGLES1_TARGETS@ += testgles$(EXE)
@OPENGLES2_TARGETS@ += testgles2$(EXE)


all: Makefile $(TARGETS) copydatafiles generatetestmeta

installedtestsdir = $(libexecdir)/installed-tests/SDL2
installedtestsmetadir = $(datadir)/installed-tests/SDL2

generatetestmeta:
	rm -f *.test
	set -e; for exe in $(noninteractive) $(needs_audio) $(needs_display); do \
		sed \
			-e 's#@installedtestsdir@#$(installedtestsdir)#g' \
			-e "s#@exe@#$$exe#g" \
			< $(srcdir)/template.test.in > $$exe.test; \
	done

install: all
	install -d $(DESTDIR)$(installedtestsdir)
	install $(TARGETS) $(DESTDIR)$(installedtestsdir)
	install -m644 $(DATA) $(DESTDIR)$(installedtestsdir)
	install -d $(DESTDIR)$(installedtestsmetadir)
	install -m644 *.test $(DESTDIR)$(installedtestsmetadir)

Makefile: $(srcdir)/Makefile.in
	$(SHELL) config.status $@

checkkeys$(EXE): $(srcdir)/checkkeys.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

checkkeysthreads$(EXE): $(srcdir)/checkkeysthreads.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

loopwave$(EXE): $(srcdir)/loopwave.c $(srcdir)/testutils.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

loopwavequeue$(EXE): $(srcdir)/loopwavequeue.c $(srcdir)/testutils.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testsurround$(EXE): $(srcdir)/testsurround.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testresample$(EXE): $(srcdir)/testresample.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testaudioinfo$(EXE): $(srcdir)/testaudioinfo.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testautomation$(EXE): $(srcdir)/testautomation.c \
		      $(srcdir)/testautomation_audio.c \
		      $(srcdir)/testautomation_clipboard.c \
		      $(srcdir)/testautomation_events.c \
		      $(srcdir)/testautomation_guid.c \
		      $(srcdir)/testautomation_hints.c \
		      $(srcdir)/testautomation_joystick.c \
		      $(srcdir)/testautomation_keyboard.c \
		      $(srcdir)/testautomation_main.c \
		      $(srcdir)/testautomation_math.c \
		      $(srcdir)/testautomation_mouse.c \
		      $(srcdir)/testautomation_pixels.c \
		      $(srcdir)/testautomation_platform.c \
		      $(srcdir)/testautomation_rect.c \
		      $(srcdir)/testautomation_render.c \
		      $(srcdir)/testautomation_rwops.c \
		      $(srcdir)/testautomation_sdltest.c \
		      $(srcdir)/testautomation_stdlib.c \
		      $(srcdir)/testautomation_surface.c \
		      $(srcdir)/testautomation_syswm.c \
		      $(srcdir)/testautomation_timer.c \
		      $(srcdir)/testautomation_video.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS) 

testmultiaudio$(EXE): $(srcdir)/testmultiaudio.c $(srcdir)/testutils.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testaudiohotplug$(EXE): $(srcdir)/testaudiohotplug.c $(srcdir)/testutils.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testaudiocapture$(EXE): $(srcdir)/testaudiocapture.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testatomic$(EXE): $(srcdir)/testatomic.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testintersections$(EXE): $(srcdir)/testintersections.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testrelative$(EXE): $(srcdir)/testrelative.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testhittesting$(EXE): $(srcdir)/testhittesting.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testdraw2$(EXE): $(srcdir)/testdraw2.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testdrawchessboard$(EXE): $(srcdir)/testdrawchessboard.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testdropfile$(EXE): $(srcdir)/testdropfile.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testerror$(EXE): $(srcdir)/testerror.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testevdev$(EXE): $(srcdir)/testevdev.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testfile$(EXE): $(srcdir)/testfile.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testgamecontroller$(EXE): $(srcdir)/testgamecontroller.c $(srcdir)/testutils.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testgeometry$(EXE): $(srcdir)/testgeometry.c $(srcdir)/testutils.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testgesture$(EXE): $(srcdir)/testgesture.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS) @MATHLIB@

testgl2$(EXE): $(srcdir)/testgl2.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS) @MATHLIB@

testgles$(EXE): $(srcdir)/testgles.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS) @GLESLIB@ @MATHLIB@

testgles2$(EXE): $(srcdir)/testgles2.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS) @MATHLIB@

testgles2_sdf$(EXE): $(srcdir)/testgles2_sdf.c $(srcdir)/testutils.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS) @MATHLIB@

testhaptic$(EXE): $(srcdir)/testhaptic.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testhotplug$(EXE): $(srcdir)/testhotplug.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testrumble$(EXE): $(srcdir)/testrumble.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testthread$(EXE): $(srcdir)/testthread.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testiconv$(EXE): $(srcdir)/testiconv.c $(srcdir)/testutils.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testime$(EXE): $(srcdir)/testime.c $(srcdir)/testutils.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS) @SDL_TTF_LIB@

testjoystick$(EXE): $(srcdir)/testjoystick.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testkeys$(EXE): $(srcdir)/testkeys.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testloadso$(EXE): $(srcdir)/testloadso.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testlock$(EXE): $(srcdir)/testlock.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

ifeq (@ISMACOSX@,true)
testnative$(EXE): $(srcdir)/testnative.c \
			$(srcdir)/testnativecocoa.m \
			$(srcdir)/testutils.c \
			$(srcdir)/testnativex11.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS) -framework Cocoa @XLIB@
endif

ifeq (@ISWINDOWS@,true)
testnative$(EXE): $(srcdir)/testnative.c \
			$(srcdir)/testutils.c \
			$(srcdir)/testnativew32.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)
endif

ifeq (@ISUNIX@,true)
testnative$(EXE): $(srcdir)/testnative.c \
			$(srcdir)/testutils.c \
			$(srcdir)/testnativex11.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS) @XLIB@
endif

ifeq (@ISOS2@,true)
testnative$(EXE): $(srcdir)/testnative.c \
			$(srcdir)/testnativeos2.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)
endif

#there's probably a better way of doing this
ifeq (@ISMACOSX@,false)
ifeq (@ISWINDOWS@,false)
ifeq (@ISUNIX@,false)
ifeq (@ISOS2@,false)
testnative$(EXE): ;
endif
endif
endif
endif

testoverlay2$(EXE): $(srcdir)/testoverlay2.c $(srcdir)/testyuv_cvt.c $(srcdir)/testutils.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testplatform$(EXE): $(srcdir)/testplatform.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testpower$(EXE): $(srcdir)/testpower.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testfilesystem$(EXE): $(srcdir)/testfilesystem.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testrendertarget$(EXE): $(srcdir)/testrendertarget.c $(srcdir)/testutils.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testscale$(EXE): $(srcdir)/testscale.c $(srcdir)/testutils.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testsem$(EXE): $(srcdir)/testsem.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testsensor$(EXE): $(srcdir)/testsensor.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testshader$(EXE): $(srcdir)/testshader.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS) @GLLIB@ @MATHLIB@

testshape$(EXE): $(srcdir)/testshape.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testsprite2$(EXE): $(srcdir)/testsprite2.c $(srcdir)/testutils.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testspriteminimal$(EXE): $(srcdir)/testspriteminimal.c $(srcdir)/testutils.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS) @MATHLIB@

teststreaming$(EXE): $(srcdir)/teststreaming.c $(srcdir)/testutils.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS) @MATHLIB@

testtimer$(EXE): $(srcdir)/testtimer.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testurl$(EXE): $(srcdir)/testurl.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testver$(EXE): $(srcdir)/testver.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testviewport$(EXE): $(srcdir)/testviewport.c $(srcdir)/testutils.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testwm2$(EXE): $(srcdir)/testwm2.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testyuv$(EXE): $(srcdir)/testyuv.c $(srcdir)/testyuv_cvt.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

torturethread$(EXE): $(srcdir)/torturethread.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testrendercopyex$(EXE): $(srcdir)/testrendercopyex.c $(srcdir)/testutils.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS) @MATHLIB@

testmessage$(EXE): $(srcdir)/testmessage.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testdisplayinfo$(EXE): $(srcdir)/testdisplayinfo.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testqsort$(EXE): $(srcdir)/testqsort.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testbounds$(EXE): $(srcdir)/testbounds.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testcustomcursor$(EXE): $(srcdir)/testcustomcursor.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

controllermap$(EXE): $(srcdir)/controllermap.c $(srcdir)/testutils.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testvulkan$(EXE): $(srcdir)/testvulkan.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)

testlocale$(EXE): $(srcdir)/testlocale.c
	$(CC) -o $@ $? $(CFLAGS) $(LIBS)

testmouse$(EXE): $(srcdir)/testmouse.c
	$(CC) -o $@ $^ $(CFLAGS) $(LIBS)


clean:
	rm -f $(TARGETS) *.test

distclean: clean
	rm -f Makefile
	rm -f config.status config.cache config.log
	rm -rf $(srcdir)/autom4te*

noninteractive = \
	testatomic$(EXE) \
	testerror$(EXE) \
	testevdev$(EXE) \
	testfilesystem$(EXE) \
	testkeys$(EXE) \
	testlocale$(EXE) \
	testplatform$(EXE) \
	testpower$(EXE) \
	testqsort$(EXE) \
	testthread$(EXE) \
	testtimer$(EXE) \
	testver$(EXE) \
	$(NULL)

needs_audio = \
	testaudioinfo$(EXE) \
	testsurround$(EXE) \
	$(NULL)

needs_display = \
	testbounds$(EXE) \
	testdisplayinfo$(EXE) \
	$(NULL)

TESTS = $(noninteractive) $(needs_audio) $(needs_display)

check:
	@set -e; \
	status=0; \
	export SDL_AUDIODRIVER=dummy; \
	export SDL_VIDEODRIVER=dummy; \
	for exe in $(TESTS); do \
		echo "$$exe..."; \
		if ./"$$exe"; then \
			echo "$$exe: OK"; \
		else \
			echo "$$exe: FAILED: $$?"; \
			status=1; \
		fi; \
	done; \
	exit "$$status"

DATA = \
	axis.bmp \
	button.bmp \
	controllermap.bmp \
	controllermap_back.bmp \
	icon.bmp \
	moose.dat \
	sample.bmp \
	sample.wav \
	testgles2_sdf_img_normal.bmp \
	testgles2_sdf_img_sdf.bmp \
	testyuv.bmp \
	unifont-13.0.06.hex \
	utf8.txt \
	$(NULL)

ifneq ($(srcdir), .)
$(DATA) : %: $(srcdir)/% Makefile
	cp $< $@
endif

copydatafiles: $(DATA)
.PHONY : copydatafiles