#
# /emx/test/makefile
#
CFLAGS=-g -Wall
CC=gcc $(CFLAGS)
B=/emx/bin/
I=/emx/include/
S=$(I)sys/
IP=/emx/include.cpp/
L=/emx/lib/
SIGNAL=$(I)signal.h $(S)signal.h
FCNTL=$(I)fcntl.h $(S)fcntl.h
ERRNO=$(I)errno.h $(S)errno.h
LIBS=$(L)crt0.o $(L)c.a $(L)gcc.a
LIBP=$(L)iostream.a
LIBOS2=$(L)os2.a
LIBBSD=$(L)bsd.a

.SUFFIXES: .o .c .cc .s .exe

.c.o:
	$(CC) -c $<

.cc.o:
	$(CC) -c $<

.c.s:
	$(CC) -S $<

.o.exe:
	$(CC) -o $*.exe $<

default:        all

all:            tests plusplus os2only dosonly

tests:          access.exe alarm.exe args.exe bsdtest.exe conv.exe \
                coretest.exe coretst2.exe ctypetst.exe debug.exe divtest.exe \
                dttest.exe exec.exe explode.exe float.exe ftwtest.exe \
                fullpath.exe hexdump.exe hw_io.exe longlong.exe math.exe \
                mdecho.exe memory.exe memtest.exe mftest.exe nls.exe pack.exe \
                pid.exe printf.exe printf0.exe retcode.exe rndheap.exe \
                sbrktest.exe scanf.exe sig1.exe sig2.exe sig3.exe sig4.exe \
                sig5.exe sig6.exe sigsegv.exe splitarg.exe stack.exe \
                stdiotst.exe strtol.exe system.exe swaptest.exe termio.exe \
                timetest.exe tmpnam.exe trunc.exe uname.exe version.exe \
                vftest.exe video.exe wmftest.exe wm_test.exe

dosonly:        hw_mem.exe int10.exe

os2only:        dlltest1 dlltest2 c16 far16.exe eatest.exe fork.exe idle.exe \
                kbd.exe msgtest os2test.exe pm1.exe pipe.exe popen.exe \
                read_kbd.exe select.exe showmem1.exe threads.exe thunk.exe \
                vio.exe

c16:            c16.dll c16test1.exe c16test2.exe

dlltest1:       dlltest1.exe testdll1.dll

dlltest2:       dlltest2.exe testdll2.dll

dlltest3:       dlltest3.exe testdll3.dll

dlltest4:       dlltest4.exe testdll4.dll

plusplus:       hello.exe stdio.exe test1.exe test2.exe dlltest3

msgtest:        msgtest.exe msgtest.msg

clean:
	-del *.o $(DELOPT)
	-del *.exe $(DELOPT)
	-del *.dll $(DELOPT)
	-del *.obj $(DELOPT)
	-del *.map $(DELOPT)
	-del *.msg $(DELOPT)
	-del *.lib $(DELOPT)
	-del coretest $(DELOPT)
	-del coretest.cor $(DELOPT)
	-del mathtest.out $(DELOPT)
	-del pm1 $(DELOPT)
	-del pm1.res $(DELOPT)
	-del c16.a $(DELOPT)
	-del strtol.t1 $(DELOPT)
	-del strtol.t2 $(DELOPT)
	-del strtol.t3 $(DELOPT)
	-del strtol.t4 $(DELOPT)
	-del testdll3.def $(DELOPT)

access.o:       access.c $(I)stdio.h $(I)io.h $(I)string.h $(I)stdlib.h
alarm.o:        alarm.c $(I)stdio.h $(I)stdlib.h $(I)string.h $(SIGNAL)
args.o:         args.c $(I)stdio.h $(I)stdlib.h
bsdtest.o:      bsdtest.c $(I)stdio.h $(I)stdlib.h
conv.o:         conv.c $(I)stdio.h $(I)stdlib.h $(I)string.h
coretest.o:     coretest.c $(I)stdio.h $(I)stdlib.h $(I)io.h $(FCNTL) \
                $(S)types.h $(S)stat.h $(SIGNAL) $(I)string.h
ctypetst.o:     ctypetst.c $(I)stdio.h $(I)string.h $(I)ctype.h
debug.o:        debug.c $(I)stdio.h $(I)string.h $(I)process.h \
                $(S)ptrace.h $(S)reg.h $(S)user.h $(I)stdlib.h
divtest.o:      divtest.c $(I)stdio.h $(I)stdlib.h
dttest.o:       dttest.c $(I)stdio.h $(I)stdlib.h $(I)getopt.h $(I)time.h \
                $(S)dirtree.h $(S)param.h
exec.o:         exec.c $(I)stdio.h $(I)string.h $(I)process.h $(SIGNAL)
explode.o:      explode.c $(I)stdio.h $(I)stdlib.h
far16.o:        far16.c $(I)stdio.h $(I)os2.h $(I)os2thunk.h
float.o:        float.c $(I)stdio.h $(I)float.h
fork.o:         fork.c $(I)process.h $(I)stdio.h $(I)string.h $(I)stdlib.h \
                $(I)getopt.h $(SIGNAL) $(I)time.h
ftwtest.o:      ftwtest.c $(I)stdio.h $(S)types.h $(S)stat.h \
                $(I)ftw.h
fullpath.o:     fullpath.c $(I)stdio.h $(I)stdlib.h $(S)param.h \
                $(I)getopt.h
hello.o:        hello.cc $(IP)iostream.h
hexdump.o:      hexdump.c $(I)stdio.h $(I)stdlib.h $(I)io.h $(FCNTL) \
                $(S)ioctl.h
hw_io.o:        hw_io.c $(I)stdio.h $(I)stdlib.h $(S)hw.h $(I)string.h
hw_mem.o:       hw_mem.c $(I)stdio.h $(I)stdlib.h $(S)hw.h $(I)memory.h \
                $(I)io.h
idle.o:         idle.c $(I)stdio.h $(I)process.h $(I)string.h $(I)os2emx.h \
                $(I)stdlib.h
eatest.o:       eatest.c $(I)stdio.h $(I)stdlib.h $(I)string.h $(I)getopt.h \
                $(I)io.h $(S)ea.h
math.o:         math.c $(I)stdio.h $(I)stdlib.h $(I)math.h
mdecho.o:       mdecho.c $(I)stdio.h $(S)moddef.h
memory.o:       memory.c $(I)stdio.h $(I)string.h
memtest.o:      memtest.c $(S)emx.h $(I)stdio.h $(I)stdlib.h \
                $(I)string.h $(I)io.h
mftest.o:       mftest.c $(I)stdio.h $(I)stdlib.h $(I)getopt.h $(ERRNO)
nls.o:          nls.c $(S)nls.h $(I)stdio.h $(I)string.h $(I)stdlib.h
os2test.o:      os2test.c $(I)stdio.h $(I)string.h $(I)os2emx.h
pack.o:         pack.c $(I)stdio.h
pid.o:          pid.c $(I)stdio.h $(I)process.h
pipe.o:         pipe.c $(I)stdio.h $(I)io.h $(I)process.h $(I)unistd.h \
                $(I)stdlib.h $(FCNTL) $(I)string.h $(SIGNAL)
pm1.o:          pm1.c pm1.h $(I)stdio.h $(I)os2emx.h
popen.o:        popen.c $(I)stdio.h $(I)stdlib.h $(I)string.h $(I)getopt.h
printf.o:       printf.c $(I)stdio.h
printf0.o:      printf0.c $(I)stdio.h
retcode.o:      retcode.c $(I)stdlib.h
rndheap.o:      rndheap.c $(I)stdio.h $(I)stdlib.h $(I)string.h $(I)malloc.h \
                $(I)getopt.h $(SIGNAL) $(ERRNO)
sbrktest.o:     sbrktest.c $(I)stdio.h $(I)stdlib.h $(I)string.h
scanf.o:        scanf.c $(I)stdio.h
select.o:       select.c $(I)stdio.h $(I)io.h $(I)process.h $(I)unistd.h \
                $(I)stdlib.h $(FCNTL) $(I)string.h $(SIGNAL) $(S)ioctl.h \
                $(S)types.h $(S)time.h
showmem.o:      showmem.c $(I)stdio.h $(I)stdlib.h $(I)os2emx.h
showmem1.o:     showmem1.c $(I)stdio.h $(I)stdlib.h
sig1.o:         sig1.c $(I)stdio.h $(SIGNAL)
sig2.o:         sig1.c $(I)stdio.h $(I)stdlib.h $(SIGNAL) $(I)setjmp.h \
                $(I)process.h
sig3.o:         sig3.c $(I)stdio.h $(I)stdlib.h $(SIGNAL) $(I)setjmp.h
sig4.o:         sig4.c $(I)stdio.h $(I)stdlib.h $(SIGNAL)
sig5.o:         sig5.c $(I)stdio.h $(SIGNAL)
sig6.o:         sig6.c $(I)stdio.h $(I)stdlib.h $(I)string.h $(SIGNAL) \
                $(I)setjmp.h $(I)float.h
sigsegv.o:      sigsegv.c $(I)stdio.h $(I)stdlib.h $(SIGNAL)
splitarg.o:     splitarg.c $(I)stdio.h $(I)stdlib.h $(I)string.h
stack.o:        stack.c $(I)stdio.h $(I)stdlib.h $(I)string.h $(SIGNAL) \
                $(I)alloca.h
stdio.o:        stdio.cc $(I)stdio.h $(IP)iostream.h
stdiotst.o:     stdiotst.c $(I)stdio.h $(I)stdlib.h
strtol.o:       strtol.c $(I)stdio.h $(I)stdlib.h $(I)string.h $(I)errno.h
system.o:       system.c $(I)stdio.h $(I)stdlib.h $(I)string.h $(I)process.h
swaptest.o:     swaptest.c $(I)stdio.h $(I)stdlib.h $(I)io.h
termio.o:       termio.c $(I)stdio.h $(I)stdlib.h $(I)string.h $(I)io.h \
                $(ERRNO) $(SIGNAL) $(I)process.h $(I)setjmp.h \
                $(S)types.h $(S)time.h $(S)termio.h $(I)fcntl.h \
                $(S)ioctl.h
test1.o:        test1.cc $(I)stdio.h $(IP)iostream.h
test2.o:        test2.cc $(IP)iostream.h
timetest.o:     timetest.c $(I)stdio.h $(I)time.h $(S)types.h \
                $(S)stat.h $(I)io.h $(I)stdlib.h $(I)ctype.h $(I)string.h \
                $(I)getopt.h
tmpnam.o:       tmpnam.c $(I)stdio.h
trunc.o:        trunc.c $(I)stdio.h $(I)stdlib.h $(I)io.h $(I)getopt.h \
                $(I)fcntl.h
uname.o:        uname.c $(I)stdio.h $(S)utsname.h
version.o:      version.c $(I)stdio.h $(I)stdlib.h $(I)string.h $(S)emx.h
video.o:        video.c $(I)stdio.h $(I)stdlib.h $(S)video.h
int10.o:        int10.c $(I)stdio.h $(I)stdlib.h $(I)dos.h
wm_test.o:      wm_test.c $(I)stdio.h $(I)stdlib.h $(I)string.h \
                $(S)video.h $(S)winmgr.h $(S)kbdscan.h

longlong.o:     longlong.c $(I)stdio.h $(I)stdlib.h
	@echo 2 warnings expected
	$(CC) -c longlong.c

imp1.o:         testdll1.imp
	emximp -a testdll1.imp

msgtest.obj:    msgtest.c
	gcc -c msgtest.c -Zomf

#
# Regression test for strtol() and strtoul()
#
strtol:         strtol.exe strtol.in1 strtol.in2 strtol.in3 strtol.in4 \
		strtol.ok1 strtol.ok2 strtol.ok3 strtol.ok4
	strtol s 0 <strtol.in1 >strtol.t1
	strtol u 0 <strtol.in2 >strtol.t2
	strtol s 1 <strtol.in3 >strtol.t3
	strtol u 2 <strtol.in4 >strtol.t4
	diff strtol.ok1 strtol.t1
	diff strtol.ok2 strtol.t2
	diff strtol.ok3 strtol.t3
	diff strtol.ok4 strtol.t4

#
# _cdecl thunks
#
# Required tools: Microsoft C 6.00A and MASM 6.00A
#
c16test1.exe: c16test1.o c16.a
	$(CC) -o c16test1.exe c16test1.o c16.a

c16test2.exe: c16test2.o c16.a
	$(CC) -o c16test2.exe c16test2.o c16.a

c16test1.o: c16test1.c
	$(CC) -c c16test1.c

c16test2.o: c16test2.c
	$(CC) -c c16test2.c

c16.dll: c16init.obj c16.obj c16.def
	link c16init c16 /align:16 /nod,c16.dll,nul,,c16.def

c16init.obj: c16init.asm
	ml -c -W3 c16init.asm

c16.obj: c16.c
	cl -c -Lp -Alfu -G2s -W4 c16.c

c16.a: c16.imp
	emximp -o c16.a c16.imp

#
# mkmsgf comes with the "IBM Developer's Toolkit for OS/2 2.0"
#
msgtest.msg:    msgtest.txt
	mkmsgf msgtest.txt msgtest.msg

#
#
#
testdll1.o: testdll1.c
	$(CC) -Zdll -c testdll1.c

testdll1.dll: testdll1.o testdll1.def $(LIBS) $(LIBOS2)
	$(CC) -Zdll -o testdll1.dll testdll1.o -s

dlltest1.o:     dlltest1.c

dlltest1.exe:   dlltest1.o imp1.o
	$(CC) -o dlltest1.exe dlltest1.o imp1.o


#
# Test shared/instance data
#
testdll2.obj: testdll2.c
	$(CC) -Zomf -Zdll -c testdll2.c

private.obj: private.c
	$(CC) -Zdll -c private.c
	emxomf -DPRIV private.o

testdll2.dll: testdll2.obj private.obj testdll2.def
	$(CC) -Zomf -Zdll -o testdll2.dll testdll2.obj private.obj testdll2.def

testdll2.lib: testdll2.def
	emximp -o testdll2.lib testdll2.def

dlltest2.obj: dlltest2.c
	$(CC) -Zomf -c dlltest2.c

dlltest2.exe: dlltest2.obj testdll2.lib
	$(CC) -Zomf -o dlltest2.exe dlltest2.obj testdll2.lib

#
# Test constructors/destructors in DLLs
#
testdll3.obj: testdll3.cc testdll3.h
	$(CC) -Zomf -Zdll -Zmtd -c testdll3.cc

testdll3.def: testdll3.df testdll3.obj
	copy testdll3.df testdll3.def
	emxexp testdll3.obj >>testdll3.def

testdll3.dll: testdll3.obj testdll3.def
	$(CC) -Zomf -Zdll -Zmtd -o testdll3.dll testdll3.obj testdll3.def -lwrap

testdll3.lib: testdll3.def
	emximp -o testdll3.lib testdll3.def

dlltest3.obj: dlltest3.cc testdll3.h
	$(CC) -Zomf -Zmtd -c dlltest3.cc

dlltest3.exe: dlltest3.obj testdll3.lib
	$(CC) -Zomf -Zmtd -o dlltest3.exe dlltest3.obj testdll3.lib

#
# Test building custom C library DLL
#
# Note: SET LIB=\emx\lib
#
testdll4.obj: testdll4.c testdll4.h
	$(CC) -Zomf -Zdll -Zmts -c testdll4.c

testdll4.dll: testdll4.obj testdll4.def
	link386 /nol /noi dll0 testdll4,testdll4.dll,nul,cdllobj gcc emxmt emx2 os2,testdll4

testdll4.lib: testdll4.def
	emximp -o testdll4.lib testdll4.def

dlltest4.obj: dlltest4.c testdll4.h
	$(CC) -Zomf -Zmtd -c dlltest4.c

dlltest4.exe: dlltest4.obj testdll4.lib
	link386 /nol /noi crt0 dlltest4,dlltest4,nul,testdll4 emx2;

#
#
#

access.exe:     access.o $(LIBS)
	$(CC) -o access.exe access.o

alarm.exe:      alarm.o $(LIBS)
	$(CC) -o alarm.exe alarm.o

args.exe:       args.o $(LIBS)
	$(CC) -o args.exe args.o

bsdtest.exe:    bsdtest.o $(LIBS) $(LIBBSD)
	$(CC) -o bsdtest.exe bsdtest.o -lbsd

conv.exe:       conv.o $(LIBS)
	$(CC) -o conv.exe conv.o

coretest:       coretest.o $(LIBS)
	$(CC) -o coretest coretest.o

coretest.exe:   coretest
	emxbind $(B)emxl coretest

coretest.cor:   coretest.exe
	coretest

coretst2.exe:   coretest coretest.cor
	emxbind -ccoretest.cor $(B)emxl coretest coretst2

ctypetst.exe:   ctypetst.o $(LIBS)
	$(CC) -o ctypetst.exe ctypetst.o

debug.exe:      debug.o $(LIBS)
	$(CC) -o debug.exe debug.o

divtest.exe:    divtest.o $(LIBS)
	$(CC) -o divtest.exe divtest.o

dttest.exe:     dttest.o $(LIBS)
	$(CC) -o dttest.exe dttest.o

exec.exe:       exec.o $(LIBS)
	$(CC) -o exec.exe exec.o
	emxbind -aq exec -p

explode.exe:    explode.o $(LIBS)
	$(CC) -o explode.exe explode.o

far16.exe:      far16.o $(LIBS) $(LIBOS2)
	$(CC) -o far16.exe far16.o

float.exe:      float.o $(LIBS)
	$(CC) -o float.exe float.o

fork.exe:       fork.o $(LIBS)
	$(CC) -o fork.exe fork.o

ftwtest.exe:    ftwtest.o $(LIBS)
	$(CC) -o ftwtest.exe ftwtest.o

fullpath.exe:   fullpath.o $(LIBS)
	$(CC) -o fullpath.exe fullpath.o

hello.exe:      hello.o $(LIBS) $(LIBP)
	$(CC) -o hello.exe hello.o -liostream

hexdump.exe:    hexdump.o $(LIBS)
	$(CC) -o hexdump.exe hexdump.o

hw_io.exe:      hw_io.o $(LIBS)
	$(CC) -o hw_io.exe hw_io.o
	emxbind -aq hw_io -ai

hw_mem.exe:     hw_mem.o $(LIBS)
	$(CC) -o hw_mem.exe hw_mem.o
	emxbind -aq hw_mem -am -p

idle.exe:       idle.o $(LIBS) $(LIBOS2)
	$(CC) -o idle.exe idle.o

kbd.exe:        kbd.c $(LIBS) $(LIBOS2)
	$(CC) -o kbd.exe kbd.c -Zomf -Zsys

eatest.exe:     eatest.o $(LIBS) $(LIBOS2)
	$(CC) -o eatest.exe eatest.o

longlong.exe:   longlong.o $(LIBS)
	$(CC) -o longlong.exe longlong.o

math.exe:       math.o $(LIBS)
	$(CC) -o math.exe math.o

mdecho.exe:     mdecho.o $(LIBS) $(L)moddef.a
	$(CC) -o mdecho.exe mdecho.o -lmoddef

memory.exe:     memory.o $(LIBS)
	$(CC) -o memory.exe memory.o

memtest.exe:    memtest.o $(LIBS)
	$(CC) -o memtest.exe memtest.o

mftest.exe:      mftest.o $(LIBS)
	$(CC) -o mftest.exe mftest.o

msgtest.exe:    msgtest.obj
	$(CC) -o msgtest.exe msgtest.obj -Zomf

nls.exe:        nls.o $(LIBS)
	$(CC) -o nls.exe nls.o

os2test.exe:    os2test.o $(LIBS) $(LIBOS2)
	$(CC) -o os2test.exe os2test.o

pack.exe:       pack.o $(LIBS)
	$(CC) -o pack.exe pack.o

pid.exe:        pid.o $(LIBS)
	$(CC) -o pid.exe pid.o

pipe.exe:       pipe.o $(LIBS)
	$(CC) -o pipe.exe pipe.o

pm1.res:        pm1.rc pm1.h
	rc -r -i \emx\include pm1.rc

pm1:            pm1.o $(LIBS) $(LIBOS2)
	$(CC) -o pm1 pm1.o

pm1.exe:        pm1 pm1.res
	emxbind -bpq -rpm1.res /emx/bin/emxl pm1

popen.exe:      popen.o $(LIBS)
	$(CC) -o popen.exe popen.o

printf.exe:     printf.o $(LIBS)
	$(CC) -o printf.exe printf.o

printf0.exe:    printf0.o $(LIBS)
	$(CC) -o printf0.exe printf0.o

read_kbd.exe:   read_kbd.c
	$(CC) -O -o read_kbd.exe read_kbd.c -Zomf -Zsys

retcode.exe:    retcode.o $(LIBS)
	$(CC) -o retcode.exe retcode.o

rndheap.exe:    rndheap.o $(LIBS)
	$(CC) -o rndheap.exe rndheap.o

sbrktest.exe:   sbrktest.o showmem.o $(LIBS)
	$(CC) -o sbrktest.exe sbrktest.o showmem.o

scanf.exe:      scanf.o $(LIBS)
	$(CC) -o scanf.exe scanf.o

select.exe:     select.o $(LIBS)
	$(CC) -o select.exe select.o

showmem1.exe:    showmem1.o showmem.o $(LIBS) $(LIBOS2)
	$(CC) -o showmem1.exe showmem1.o showmem.o

sig1.exe:       sig1.o $(LIBS)
	$(CC) -o sig1.exe sig1.o

sig2.exe:       sig2.o $(LIBS)
	$(CC) -o sig2.exe sig2.o

sig3.exe:       sig3.o $(LIBS)
	$(CC) -o sig3.exe sig3.o

sig4.exe:       sig4.o $(LIBS)
	$(CC) -o sig4.exe sig4.o

sig5.exe:       sig5.o $(LIBS)
	$(CC) -o sig5.exe sig5.o

sig6.exe:       sig6.o $(LIBS)
	$(CC) -o sig6.exe sig6.o

sigsegv.exe:    sigsegv.o $(LIBS)
	$(CC) -o sigsegv.exe sigsegv.o

splitarg.exe:   splitarg.o $(LIBS)
	$(CC) -o splitarg.exe splitarg.o

stack.exe:      stack.o $(LIBS)
	$(CC) -o stack.exe stack.o

stdio.exe:      stdio.o $(LIBS) $(LIBP)
	$(CC) -o stdio.exe stdio.o -liostream

stdiotst.exe:   stdiotst.o $(LIBS)
	$(CC) -o stdiotst.exe stdiotst.o

strtol.exe:     strtol.o $(LIBS)
	$(CC) -o strtol.exe strtol.o

system.exe:     system.o $(LIBS)
	$(CC) -o system.exe system.o
	emxbind -aq system -p

swaptest.exe:   swaptest.o $(LIBS)
	$(CC) -o swaptest.exe swaptest.o

termio.exe:     termio.o $(LIBS)
	$(CC) -o termio.exe termio.o

test1.exe:      test1.o $(LIBS) $(LIBP)
	$(CC) -o test1.exe test1.o -liostream

test2.exe:      test2.o $(LIBS) $(LIBP)
	$(CC) -o test2.exe test2.o -liostream

threads.exe:    threads.c $(I)stdio.h $(I)stdlib.h $(I)string.h \
                $(I)ctype.h $(I)getopt.h $(I)os2emx.h
	$(CC) -o threads.exe threads.c -Zomf -Zmts

thunk.exe:      thunk.c $(I)os2thunk.h
	$(CC) -o thunk.exe thunk.c

timetest.exe:   timetest.o $(LIBS)
	$(CC) -o timetest.exe timetest.o

tmpnam.exe:     tmpnam.o $(LIBS)
	$(CC) -o tmpnam.exe tmpnam.o

trunc.exe:      trunc.o $(LIBS)
	$(CC) -o trunc.exe trunc.o

uname.exe:      uname.o $(LIBS)
	$(CC) -o uname.exe uname.o

version.exe:    version.o $(LIBS)
	$(CC) -o version.exe version.o

vftest.exe:     vftest.o $(LIBS) $(L)video.a
	$(CC) -o vftest.exe vftest.o -lvideo
	emxbind -aq vftest -acm

video.exe:      video.o $(LIBS) $(L)video.a
	$(CC) -o video.exe video.o -lvideo
	emxbind -aq video -acm

vio.exe:        vio.c
	$(CC) -O -o vio.exe vio.c -Zomf -Zmtd

int10.exe:      int10.o $(LIBS)
	$(CC) -o int10.exe int10.o
	emxbind -aq int10 -ac

wmftest.exe:    wmftest.o $(LIBS) $(L)video.a
	$(CC) -o wmftest.exe wmftest.o -lvideo
	emxbind -aq wmftest -acm

wm_test.exe:    wm_test.o $(LIBS) $(L)video.a
	$(CC) -o wm_test.exe wm_test.o -lvideo
	emxbind -aq wm_test -acm
