# Makefile for Borland C++ 5.5 on NT
# If you have the Borland assembler, remove "-DUSE_GENERIC"
#
bc=	   c:\Borland\BCC55
bcbin=	   $(bc)\bin
bclib=	   $(bc)\lib
bcinclude= $(bc)\include

gcinclude1 = $(bc)\gc6.2\include
gcinclude2 = $(bc)\gc6.2\cord

cc=	 $(bcbin)\bcc32
rc=	 $(bcbin)\brc32
lib=	 $(bcbin)\tlib
link=	 $(bcbin)\ilink32
cflags=  -O2 -R -v- -vi -H -H=gc.csm -I$(bcinclude);$(gcinclude1);$(gcinclude2) -L$(bclib) \
	 -w-pro -w-aus -w-par -w-ccc -w-rch -a4 -D__STDC__=0
#defines= -DSILENT
defines= -DSMALL_CONFIG -DSILENT -DALL_INTERIOR_POINTERS -DUSE_GENERIC -DNO_GETENV -DJAVA_FINALIZATION -DGC_OPERATOR_NEW_ARRAY

.c.obj:
	$(cc) @&&|
	$(cdebug) $(cflags) $(cvars) $(defines) -o$* -c $*.c
|

.cpp.obj:
	$(cc) @&&|
	$(cdebug) $(cflags) $(cvars) $(defines) -o$* -c $*.cpp
|

.rc.res:
    $(rc) -i$(bcinclude) -r -fo$* $*.rc

XXXOBJS= XXXalloc.obj XXXreclaim.obj XXXallchblk.obj XXXmisc.obj \
    XXXmach_dep.obj XXXos_dep.obj XXXmark_rts.obj XXXheaders.obj XXXmark.obj \
    XXXobj_map.obj XXXblacklst.obj XXXfinalize.obj XXXnew_hblk.obj \
    XXXdbg_mlc.obj XXXmalloc.obj XXXstubborn.obj XXXdyn_load.obj \
    XXXtypd_mlc.obj XXXptr_chck.obj XXXgc_cpp.obj XXXmallocx.obj

OBJS= $(XXXOBJS:XXX=)

all: gctest.exe cord\de.exe test_cpp.exe

$(OBJS) test.obj: include\private\gc_priv.h include\private\gc_hdrs.h include\gc.h include\private\gcconfig.h MAKEFILE

gc.lib: $(OBJS)
	del gc.lib
	$(lib) $* @&&|
	$(XXXOBJS:XXX=+)
|

gctest.exe: tests\test.obj gc.lib
    $(cc) @&&|
	$(cflags) -W -e$* tests\test.obj gc.lib
|

cord\de.obj cord\de_win.obj: include\cord.h include\private\cord_pos.h cord\de_win.h \
    cord\de_cmds.h

cord\de.exe: cord\cordbscs.obj cord\cordxtra.obj cord\de.obj cord\de_win.obj \
	cord\de_win.res gc.lib
	$(cc) @&&|
	$(cflags) -W -e$* cord\cordbscs.obj cord\cordxtra.obj \
	cord\de.obj cord\de_win.obj gc.lib
|
    $(rc) cord\de_win.res cord\de.exe

gc_cpp.obj: include\gc_cpp.h include\gc.h

gc_cpp.cpp: gc_cpp.cc
	copy gc_cpp.cc gc_cpp.cpp

test_cpp.cpp: tests\test_cpp.cc
	copy tests\test_cpp.cc test_cpp.cpp

test_cpp.exe: test_cpp.obj include\gc_cpp.h include\gc.h gc.lib
    $(cc) @&&|
	$(cflags) -W -e$* test_cpp.obj gc.lib
|

scratch:
    -del *.obj *.res *.exe *.csm cord\*.obj cord\*.res cord\*.exe cord\*.csm

clean:
      del gc.lib
      del *.obj
      del tests\test.obj

