# Makefile for png32bd.dll
# -------------------- 32-bit Borland C++ --------------------

# This makefile expects to find zlib.h and zlib32bd.lib in the
# $(ZLIBDIR) directory.

# The object files here are compiled with the "stdcall" calling convention.
# This DLL requires zlib32bd.lib to be compiled in the same way.

# Note that png32bd.dll exports the zlib functions adler32, crc32 and
# the deflate... and inflate... functions. It does not export the
# compress and uncompress functions, nor any of the gz... functions,
# since libpng does not call them.

.AUTODEPEND

ZLIBDIR=..\zlib
ZLIB=zlib32bd.lib
PNGDLL=png32bd.dll
PNGLIB=png32bd.lib

CC=bcc32
CFLAGS= -ps -O2 -N- -k- -d -r- -w-par -w-aus -I$(ZLIBDIR) \
  -DPNG_NO_GLOBAL_ARRAYS #-DPNG_DEBUG=5
#LINK=tlink32
#LINK=ilink32
LINK=bcc32
#LINKFLAGS= -Tpd -aa -c
LINKFLAGS= -WDE
IMPLIB=implib

# Use this if you don't want Borland's fancy exception handling
NOEHLIB=noeh32.lib

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

.c.exe:
	$(CC) $(CFLAGS) $< $(PNGLIB) $(NOEHLIB)


OBJ1=png.obj pngerror.obj pngget.obj pngmem.obj pngpread.obj
OBJ2=pngread.obj pngrio.obj pngrtran.obj pngrutil.obj pngset.obj
OBJ3=pngtrans.obj pngwio.obj pngwrite.obj pngwtran.obj pngwutil.obj

all: $(PNGDLL)

test: pngtest.exe
	pngtest


$(PNGDLL): $(OBJ1) $(OBJ2) $(OBJ3) $(ZLIBDIR)\$(ZLIB)
	$(LINK) @&&|
$(LINKFLAGS)
-e$(PNGDLL)
$(OBJ1)
$(OBJ2)
$(OBJ3)
$(ZLIBDIR)\$(ZLIB)
$(NOEHLIB)
|
	$(IMPLIB) -c $(@R).lib $@


# Clean up anything else you want
clean:
	-del *.obj
	-del *.dll
	-del *.exe
	-del *.lib
	-del *.lst
	-del *.map
	-del *.tds


# End of makefile for png32bd.dll
