# Makefile of GDBM for VC++ and BCC
srcdir = ..
winsrcdir = .

INSTALL = copy
INSTALL_PROGRAM = $(INSTALL)
INSTALL_DATA = $(INSTALL)

!ifdef __MAKE__
CC = bcc32 -q
AR = tlib
ARFLAGS = /a
MAKE = make
CFLAGS = -w-
LOCAL_CFLAGS = 
CPPFLAGS = 
!else
CC = cl -nologo
AR = lib
ARFLAGS = -out:
MAKE = nmake
CFLAGS = -MD
LOCAL_CFLAGS =
CPPFLAGS = 
!endif

!if "$(DLL)" == "0"
TARGET = static
!else
TARGET = shared
DLL = 1
!endif

RM = del
CP = copy
MV = mv

!ifndef prefix
prefix = /usr/local
!endif
exec_prefix = $(prefix)

bindir = $(exec_prefix)/bin
libdir = $(exec_prefix)/lib
mandir = $(prefix)/man
includedir = $(prefix)/include

infodir = $(prefix)/info

man3dir = $(mandir)/man3


DEFS =
LOCAL_DEFS = -DGDBM_STATIC

# For libraries which include headers from other libraries.
INCLUDES = -I$(winsrcdir) -I$(srcdir) -I$(includedir)

CCFLAGS = $(DEFS) $(LOCAL_DEFS) $(CPPFLAGS) $(INCLUDES:/=\) $(LOCAL_CFLAGS) $(CFLAGS)

.c.obj:
	$(CC) -c $(CCFLAGS) $<

{$(winsrcdir)}.c.obj:
	$(CC) -c $(CCFLAGS) $<

{$(srcdir)}.c.obj:
	$(CC) -c $(CCFLAGS) $<

# The name of the main library target.
LIBRARY_NAME = gdbm-static.lib
STATIC_LIBS = gdbm-static.lib

# The C code source files for this library.
SRCS =	$(srcdir)/bucket.c $(srcdir)/close.c $(srcdir)/dbmclose.c \
	$(srcdir)/dbmdelete.c $(srcdir)/dbmdirfno.c $(srcdir)/dbmfetch.c \
	$(srcdir)/dbminit.c $(srcdir)/dbmopen.c $(srcdir)/dbmpagfno.c \
	$(srcdir)/dbmrdonly.c $(srcdir)/dbmseq.c $(srcdir)/dbmstore.c \
	$(srcdir)/delete.c $(srcdir)/falloc.c $(srcdir)/fetch.c \
	$(srcdir)/findkey.c $(srcdir)/gdbmclose.c $(srcdir)/gdbmdelete.c \
	$(srcdir)/gdbmerrno.c $(srcdir)/gdbmexists.c $(srcdir)/gdbmfdesc.c \
	$(srcdir)/gdbmfetch.c $(srcdir)/gdbmopen.c $(srcdir)/gdbmreorg.c \
	$(srcdir)/gdbmseq.c $(srcdir)/gdbmsetopt.c $(srcdir)/gdbmstore.c \
	$(srcdir)/gdbmsync.c $(srcdir)/global.c $(srcdir)/hash.c \
	$(srcdir)/seq.c $(srcdir)/store.c $(srcdir)/update.c \
	$(srcdir)/version.c $(winsrcdir)/win32.c

HDRS =	$(srcdir)/dbm.h $(srcdir)/extern.h $(srcdir)/gdbmconst.h \
	$(srcdir)/gdbmdefs.h $(srcdir)/gdbmerrno.h $(srcdir)/getopt.h \
	$(srcdir)/ndbm.h $(srcdir)/proto.h $(srcdir)/systems.h \
	$(winsrcdir)/gdbm.h $(winsrcdir)/autoconf.h

OBJS =	bucket.obj close.obj dbmclose.obj dbmdelete.obj dbmdirfno.obj \
	dbmfetch.obj dbminit.obj dbmopen.obj dbmpagfno.obj dbmrdonly.obj \
	dbmseq.obj dbmstore.obj delete.obj falloc.obj fetch.obj findkey.obj \
	gdbmclose.obj gdbmdelete.obj gdbmerrno.obj gdbmexists.obj \
	gdbmfdesc.obj gdbmfetch.obj gdbmopen.obj gdbmreorg.obj gdbmseq.obj \
	gdbmsetopt.obj gdbmstore.obj gdbmsync.obj global.obj hash.obj \
	seq.obj store.obj update.obj version.obj win32.obj

INSTALLED_HEADERS = dbm.h ndbm.h gdbm.h

##########

all: $(TARGET)

install: install-$(TARGET)

uninstall: uninstall-$(TARGET)

static: $(STATIC_LIBS)

shared:	force
	cd shlib
	$(MAKE) -$(MAKEFLAGS) prefix=$(prefix) all
	cd ..

gdbm-static.lib: $(OBJS)
	if exist $@ $(RM) $@
	$(AR) $(ARFLAGS)"$@" $(OBJS)

force: nul

install-static: installdirs $(STATIC_LIBS)
	$(INSTALL_DATA) $(LIBRARY_NAME) $(libdir:/=\) /Y >nul
	$(INSTALL_DATA) $(srcdir:/=\)\dbm.h $(includedir:/=\) /y >nul
	$(INSTALL_DATA) $(srcdir:/=\)\ndbm.h $(includedir:/=\) /y >nul
	$(INSTALL_DATA) $(winsrcdir:/=\)\gdbm.h $(includedir:/=\) /y >nul

installdirs:
	-if not exist $(includedir:/=\)\nul mkdir $(includedir:/=\)
	-if not exist $(libdir:/=\)\nul mkdir $(libdir:/=\)

uninstall-static:
	for %i in ($(INSTALLED_HEADERS)) do @del $(includedir:/=\)\%i >nul
	cd $(libdir:/=\)
	$(RM) $(LIBRARY_NAME)

install-shared: installdirs shared
	cd shlib
	$(MAKE) -$(MAKEFLAGS) prefix=$(prefix) install
	cd ..

uninstall-shared:
	cd shlib
	$(MAKE) -$(MAKEFLAGS) prefix=$(prefix) uninstall
	cd ..

TAGS:	force
	$(ETAGS) $(CSOURCES) $(HSOURCES)

clean:	force
	if exist *.obj $(RM) *.obj
	if exist *~ $(RM) *~
	if exist *.lib $(RM) *.lib
	cd shlib
	-$(MAKE) -$(MAKEFLAGS) prefix=$(prefix) $@
	cd ..
	cd examples
	-$(MAKE) -$(MAKEFLAGS) prefix=$(prefix) $@
	cd ..

examples: force
	cd examples
	$(MAKE) -$(MAKEFLAGS) DLL=$(DLL) prefix=$(prefix) all
	cd ..

## depends (FIX ME!!!)
bucket.obj: {$(srcdir)}bucket.c {$(winsrcdir)}autoconf.h
close.obj: {$(srcdir)}close.c {$(winsrcdir)}autoconf.h
dbmclose.obj: {$(srcdir)}dbmclose.c {$(winsrcdir)}autoconf.h
dbmdelete.obj: {$(srcdir)}dbmdelete.c {$(winsrcdir)}autoconf.h
dbmdirfno.obj: {$(srcdir)}dbmdirfno.c {$(winsrcdir)}autoconf.h
dbmfetch.obj: {$(srcdir)}dbmfetch.c {$(winsrcdir)}autoconf.h
dbminit.obj: {$(srcdir)}dbminit.c {$(winsrcdir)}autoconf.h
dbmopen.obj: {$(srcdir)}dbmopen.c {$(winsrcdir)}autoconf.h
dbmpagfno.obj: {$(srcdir)}dbmpagfno.c {$(winsrcdir)}autoconf.h
dbmrdonly.obj: {$(srcdir)}dbmrdonly.c {$(winsrcdir)}autoconf.h
dbmseq.obj: {$(srcdir)}dbmseq.c {$(winsrcdir)}autoconf.h
dbmstore.obj: {$(srcdir)}dbmstore.c {$(winsrcdir)}autoconf.h
delete.obj: {$(srcdir)}delete.c {$(winsrcdir)}autoconf.h
falloc.obj: {$(srcdir)}falloc.c {$(winsrcdir)}autoconf.h
fetch.obj: {$(srcdir)}fetch.c {$(winsrcdir)}autoconf.h
findkey.obj: {$(srcdir)}findkey.c {$(winsrcdir)}autoconf.h
gdbmclose.obj: {$(srcdir)}gdbmclose.c {$(winsrcdir)}autoconf.h
gdbmdelete.obj: {$(srcdir)}gdbmdelete.c {$(winsrcdir)}autoconf.h
gdbmerrno.obj: {$(srcdir)}gdbmerrno.c {$(winsrcdir)}autoconf.h
gdbmexists.obj: {$(srcdir)}gdbmexists.c {$(winsrcdir)}autoconf.h
gdbmfdesc.obj: {$(srcdir)}gdbmfdesc.c {$(winsrcdir)}autoconf.h
gdbmfetch.obj: {$(srcdir)}gdbmfetch.c {$(winsrcdir)}autoconf.h
gdbmopen.obj: {$(srcdir)}gdbmopen.c {$(winsrcdir)}autoconf.h
gdbmreorg.obj: {$(srcdir)}gdbmreorg.c {$(winsrcdir)}autoconf.h
gdbmseq.obj: {$(srcdir)}gdbmseq.c {$(winsrcdir)}autoconf.h
gdbmsetopt.obj: {$(srcdir)}gdbmsetopt.c {$(winsrcdir)}autoconf.h
gdbmstore.obj: {$(srcdir)}gdbmstore.c {$(winsrcdir)}autoconf.h
gdbmsync.obj: {$(srcdir)}gdbmsync.c {$(winsrcdir)}autoconf.h
global.obj: {$(srcdir)}global.c {$(winsrcdir)}autoconf.h
hash.obj: {$(srcdir)}hash.c {$(winsrcdir)}autoconf.h
seq.obj: {$(srcdir)}seq.c {$(winsrcdir)}autoconf.h
store.obj: {$(srcdir)}store.c {$(winsrcdir)}autoconf.h
update.obj: {$(srcdir)}update.c {$(winsrcdir)}autoconf.h
version.obj: {$(srcdir)}version.c {$(winsrcdir)}autoconf.h
win32.obj: {$(winsrcdir)}win32.c {$(winsrcdir)}autoconf.h
