# Open Watcom makefile to build SDL2 tests for OS/2
# wmake -f Makefile.os2

INCPATH = -I"$(%WATCOM)/h/os2" -I"$(%WATCOM)/h" -I"../include"

CFLAGS = $(INCPATH) -bt=os2 -d0 -q -bm -5s -fp5 -fpi87 -sg -oteanbmier -ei
CFLAGS+= -wx -wcd=303

LIBPATH = ..
LIBS    = SDL2.lib $(TESTLIB)

#CFLAGS+= -DHAVE_SDL_TTF
#TTFLIBS = SDL2ttf.lib

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

# SDL2test.lib sources (../src/test)
CSRCS = SDL_test_assert.c SDL_test_common.c SDL_test_compare.c &
        SDL_test_crc32.c SDL_test_font.c SDL_test_fuzzer.c SDL_test_harness.c &
        SDL_test_imageBlit.c SDL_test_imageBlitBlend.c SDL_test_imageFace.c &
        SDL_test_imagePrimitives.c SDL_test_imagePrimitivesBlend.c &
        SDL_test_log.c SDL_test_md5.c SDL_test_random.c SDL_test_memory.c
TESTLIB = SDL2test.lib

# testautomation sources
TASRCS = testautomation.c testautomation_audio.c testautomation_clipboard.c &
         testautomation_events.c testautomation_hints.c &
         testautomation_keyboard.c testautomation_main.c &
         testautomation_mouse.c testautomation_pixels.c &
         testautomation_platform.c testautomation_rect.c &
         testautomation_render.c testautomation_rwops.c &
         testautomation_sdltest.c testautomation_stdlib.c &
         testautomation_surface.c testautomation_syswm.c &
         testautomation_timer.c testautomation_video.c

OBJS = $(TARGETS:.exe=.obj)
COBJS = $(CSRCS:.c=.obj)
TAOBJS = $(TASRCS:.c=.obj)

all: $(TARGETS)

.c: ../src/test

$(TESTLIB): $(COBJS)
  wlib -q -b -n -c $@ $(COBJS)

.obj.exe:
  @%make $(TESTLIB)
  wlink SYS os2v2 libpath $(LIBPATH) lib {$(LIBS)} op q op el file {$<} name $@

.c.obj:
  wcc386 $(CFLAGS) -fo=$^@ $<

# specials
testautomation.exe: $(TAOBJS)
  @%make $(TESTLIB)
  wlink SYS os2v2 libpath $(LIBPATH) lib {$(LIBS)} op q op el file {$<} name $@

testnative.exe: testnative.obj testnativeos2.obj
  @%make $(TESTLIB)
  wlink SYS os2v2 libpath $(LIBPATH) lib {$(LIBS)} op q op el file {$<} name $@

testoverlay2.exe: testoverlay2.obj testyuv_cvt.obj
  @%make $(TESTLIB)
  wlink SYS os2v2 libpath $(LIBPATH) lib {$(LIBS)} op q op el file {$<} name $@

testyuv.exe: testyuv.obj testyuv_cvt.obj
  @%make $(TESTLIB)
  wlink SYS os2v2 libpath $(LIBPATH) lib {$(LIBS)} op q op el file {$<} name $@

testime.exe: testime.obj
  @%make $(TESTLIB)
  wlink SYS os2v2 libpath $(LIBPATH) lib {$(LIBS) $(TTFLIBS)} op q op el file {$<} name $@

clean: .SYMBOLIC
  @if exist *.obj rm *.obj
  @if exist *.err rm *.err

distclean: .SYMBOLIC clean
  @if exist *.exe rm *.exe
  @if exist $(TESTLIB) rm $(TESTLIB)
