# Makefile for Borland C++ 4.5 on NT
# For Borland 5.0, replace bc45 by bc5.
# If you have the Borland assembler, remove "-DUSE_GENERIC"
#
bc=        c:\bc45
bcbin=     $(bc)\bin
bclib=     $(bc)\lib
bcinclude= $(bc)\include

cc=      $(bcbin)\bcc32
rc=      $(bcbin)\brc32
lib=     $(bcbin)\tlib
link=    $(bcbin)\tlink32
cflags=  -R -v -vi -H -H=gc.csm -I$(bcinclude);cord -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

.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: gc_priv.h gc_hdrs.h gc.h gcconfig.h MAKEFILE

gc.lib: $(OBJS)
    -del gc.lib
	tlib $* @&&|
        $(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: cord\cord.h cord\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: gc_cpp.h 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 gc_cpp.h 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


