#
# Whatever you put in for $(CC) must be able to grok ANSI C.
#
CC = cl
LD = cl
AR = link /LIB
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 = /MTd /ZI /Od /FD /GZ /D "DEBUG" 
DEBUG_LFLAGS = /DEBUG /PDBTYPE:SEPT 
LIBS= libcmtd.lib kernel32.lib ws2_32.lib 
!else
DEBUG_CFLAGS = /MT /Ot /Oy /Ob1 /Gs /Gy /D "NDEBUG" 
DEBUG_LFLAGS = 
LIBS= libcmt.lib kernel32.lib ws2_32.lib 
!endif

DEFINES= /D "WIN32" /D "WIN32_LEAN_AND_MEAN" /D "_CONSOLE" /D "_MBCS" /D "TRACE"
OPTIM= /nologo /GX /W1 $(DEBUG_CFLAGS) /G$(PROCESSOR_LEVEL) 
CFLAGS= $(OPTIM) $(DEFINES)
LFLAGS = /link /NOLOGO /NODEFAULTLIB /SUBSYSTEM:CONSOLE $(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) $** $(LIBS) /Fe$@ $(LFLAGS)

testgdbm$(EXE) : testgdbm.obj $(GDBMLIB) $(GOLIB)
	$(LD) $** $(LIBS) /Fe$@ $(LFLAGS)

testndbm$(EXE) : testndbm.obj $(NDBMLIB) 
	$(LD) $** $(LIBS) /Fe$@ $(LFLAGS)

testdbm$(EXE) : testdbm.obj $(DBMLIB) 
	$(LD) $** $(LIBS) /Fe$@ $(LFLAGS)

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

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

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

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

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 *.pdb *.ilk *.idb $(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) 1>NUL
	@echo "Done."

.c.obj:
	$(CC) $(CFLAGS) /c /Tc$(<:\=/)