# Windows GDBM,DBM,NDBM and Getopt makefile 
.AUTODEPEND
BCCROOT = $(MAKEDIR)\..
CC = $(BCCROOT)\bin\bcc32
LD = $(BCCROOT)\bin\ilink32
AR = $(BCCROOT)\bin\tlib
WINZIP = C:\apps\Winzip\wzzip

# The suffix appended to executables.  
# This should be set for Cygwin and Windows.
EXE = .exe 
#EXE =

# Compiler directives for debugging
!ifdef DEBUG
DEBUG_CFLAGS = -v -y -Od -r- 
DEBUG_LFLAGS = -v 
!else
DEBUG_CFLAGS = -v- -O2 -$(PROCESSOR_LEVEL) 
DEBUG_LFLAGS = -v- 
!endif
INCDIRS = -I$(BCCROOT)\include

# Compiler/linker directives for linking static or dynamic
!ifdef STATIC
STATIC_CFLAGS =
LIBS      = import32.lib cw32mt.lib 
!else
STATIC_CFLAGS = -tWR
LIBS      = import32.lib cw32mti.lib 
!endif
BCC32STARTUP = c0x32.obj

DEFINES= -DWIN32 -DWIN32_LEAN_AND_MEAN -D_NO_VCL  
WARNMSG = -w -w-pia -w-par -w-aus -w-rch -w-sig -w-use
OPTIM= $(STATIC_CFLAGS) $(DEBUG_CFLAGS) -tWM -tWC $(WARNMSG) 
CFLAGS= $(OPTIM) $(DEFINES)
LFLAGS = -Tpe -ap -c -Gn $(DEBUG_LFLAGS) 

# GDBM
GDBMLIB = gdbm.lib
GDBMSRC = version.c falloc.c findkey.c bucket.c update.c global.c \
	gdbmclose.c gdbmdelete.c gdbmerrno.c gdbmexists.c gdbmfdesc.c \
	gdbmfetch.c gdbmopen.c gdbmreorg.c gdbmseq.c gdbmsetopt.c \
	gdbmstore.c gdbmsync.c 
GDBMOBJ = $(GDBMSRC:.c=.obj)
GDBMHDR = gdbm.h 
GDBMIHDR = gdbmdefs.h gdbmerrno.h extern.h 
GDBMXTRA = NEWS README INSTALL COPYING Changelog makefile.bor makefile.vc gdbm.html 

# NDBM
NDBMLIB = ndbm.lib
NDBMSRC = ndbm.c 
NDBMOBJ = $(NDBMSRC:.c=.obj)
NDBMHDR = ndbm.h 

# DBM
DBMLIB = dbm.lib
DBMSRC = dbm.c 
DBMOBJ = $(DBMSRC:.c=.obj)
DBMHDR = dbm.h 

# GETOPT
GOLIB = getopt.lib
GOSRC = getopt.c 
GOOBJ = $(GOSRC:.c=.obj)
GOHDR = getopt.h

# Utilities and test programs
UTILSRC = conv2gdbm.c testgdbm.c testndbm.c testdbm.c

# Files in the standard distribution
DISTFILES = $(GDBMSRC) $(GDBMHDR) $(GDBMIHDR) $(GDBMXTRA) $(NDBMSRC) \
	$(NDBMHDR) $(DBMSRC) $(DBMHDR) $(GOSRC) $(GOHDR) $(UTILSRC)
!ifndef RELEASE
RELEASE = dist
!endif

INSTFILES = $(GDBMLIB) $(NDBMLIB) $(DBMLIB) $(GOLIB) \
	$(GDBMHDR) $(NDBMHDR) $(DBMHDR) $(GOHDR)

# Dependency information - used for clean here
OBJDEPENDS = $(GDBMOBJ) $(NDBMOBJ) $(DBMOBJ) $(GOOBJ) \
	conv2gdbm.obj testgdbm.obj testndbm.obj testdbm.obj

TARGETS = $(GDBMLIB) $(NDBMLIB) $(DBMLIB) $(GOLIB) \
	conv2gdbm$(EXE) testgdbm$(EXE) testndbm$(EXE) testdbm$(EXE)

all: $(TARGETS)

conv2gdbm$(EXE) : conv2gdbm.obj $(GDBMLIB) $(DBMLIB) $(GOLIB)
	$(LD) $(LFLAGS) $(BCC32STARTUP) $**, $<,, $(LIBS) 

testgdbm$(EXE) : testgdbm.obj $(GDBMLIB) $(GOLIB)
	$(LD) $(LFLAGS) $(BCC32STARTUP) $**, $<,, $(LIBS) 

testndbm$(EXE) : testndbm.obj $(NDBMLIB) 
	$(LD) $(LFLAGS) $(BCC32STARTUP) $**, $<,, $(LIBS) 

testdbm$(EXE) : testdbm.obj $(DBMLIB) 
	$(LD) $(LFLAGS) $(BCC32STARTUP) $**, $<,, $(LIBS) 

$(GDBMLIB) : $(GDBMOBJ)
	@echo "making GDBM library..."
	-@del $< 2>NUL
	$(AR) $< /a $**

$(NDBMLIB) : $(NDBMOBJ) $(GDBMLIB)
	@echo "making NDBM library..."
	-@del $< 2>NUL
	$(AR) $< /a $**

$(DBMLIB) : $(DBMOBJ) $(GDBMLIB)
	@echo "making DBM library..."
	-@del $< 2>NUL
	$(AR) $< /a $**

$(GOLIB) : $(GOOBJ)
	@echo "making Getopt library..."
	-@del $< 2>NUL
	$(AR) $< /a $**

dist : $(DISTFILES)
	@echo "Building distribution..."
	@md wingdbm
	@&copy /y $** wingdbm 1>NUL
	@$(WINZIP) -Pr wingdbm-$(RELEASE).zip wingdbm 1>NUL 2>NUL
	@rd /s /q wingdbm
	@echo "Done."

clean :
	@echo "Cleaning..."
	@-del *.tds *.map *.TR2 $(TARGETS) $(OBJDEPENDS) 2>NUL
	@echo "Done."

inst : $(INSTFILES)
	@echo "Installing..."
	@if not exist $(INSTDIR) echo Install directory [$(INSTDIR)] does not exist.
	@if not exist $(INSTDIR) echo creating...
	@if not exist $(INSTDIR) mkdir $(INSTDIR)
	@&copy $** $(INSTDIR) 2>NUL 1>NUL
	@echo "Done."

.c.obj:
	$(CC) $(CFLAGS) $(INCDIRS) -c -n$(@D) $<