# Makefile for libpng
# 32-bit Borland C++ (Note: All modules are compiled in C mode)
# To build the library, do:
#       "make -fmakefile.bc32"
#
# -------------------- 32-bit Borland C++ --------------------

### Absolutely necessary for this makefile to work
.AUTODEPEND

## Where zlib.h, zconf.h and zlib.lib are
ZLIB_DIR=..\zlib

## Compiler, linker and lib stuff
CC=bcc32
LD=bcc32
LIB=tlib

# -3 = 386, -4 = 486, -5 = Pentium etc.
!ifndef TARGET_CPU
#TARGET_CPU=-6
!endif

# Use this if you don't want Borland's fancy exception handling
# (Caution: doesn't work with CBuilderX)
#NOEHLIB=noeh32.lib

!ifdef DEBUG
CDEBUG=-v
LDEBUG=-v
!else
CDEBUG=
LDEBUG=
!endif

# STACKOFLOW=1
!ifdef STACKOFLOW
CDEBUG=$(CDEBUG) -N
LDEBUG=$(LDEBUG) -N
!endif

# -O2 optimize for speed
# -d  merge duplicate strings
# -k- turn off standard stack frame
# -w  display all warnings
CFLAGS=-DPNG_CONFIGURE_LIBPNG -I$(ZLIB_DIR) -O2 -d -k- -w $(TARGET_CPU) $(CDEBUG)

# -M  generate map file
LDFLAGS=-L$(ZLIB_DIR) -M $(LDEBUG)

## Variables
OBJS = \
	png.obj \
	pngerror.obj \
	pngget.obj \
	pngmem.obj \
	pngpread.obj \
	pngread.obj \
	pngrio.obj \
	pngrtran.obj \
	pngrutil.obj \
	pngset.obj \
	pngtrans.obj \
	pngwio.obj \
	pngwrite.obj \
	pngwtran.obj \
	pngwutil.obj

LIBOBJS = \
	+png.obj \
	+pngerror.obj \
	+pngget.obj \
	+pngmem.obj \
	+pngpread.obj \
	+pngread.obj \
	+pngrio.obj \
	+pngrtran.obj \
	+pngrutil.obj \
	+pngset.obj \
	+pngtrans.obj \
	+pngwio.obj \
	+pngwrite.obj \
	+pngwtran.obj \
	+pngwutil.obj

LIBNAME=libpng.lib

## Implicit rules
# Braces let make "batch" calls to the compiler,
# 2 calls instead of 12; space is important.
.c.obj:
	$(CC) $(CFLAGS) -c {$*.c }

.c.exe:
	$(CC) $(CFLAGS) $(LDFLAGS) $*.c $(LIBNAME) zlib.lib $(NOEHLIB)

.obj.exe:
	$(LD) $(LDFLAGS) $*.obj $(LIBNAME) zlib.lib $(NOEHLIB)

## Major targets
all: libpng pngtest

libpng: $(LIBNAME)

pngtest: pngtest.exe

test: pngtest.exe
	pngtest

## Minor Targets

png.obj: png.c png.h pngconf.h pngpriv.h
pngerror.obj: pngerror.c png.h pngconf.h pngpriv.h
pngget.obj: pngget.c png.h pngconf.h pngpriv.h
pngmem.obj: pngmem.c png.h pngconf.h pngpriv.h
pngpread.obj: pngpread.c png.h pngconf.h pngpriv.h
pngread.obj: pngread.c png.h pngconf.h pngpriv.h
pngrio.obj: pngrio.c png.h pngconf.h pngpriv.h
pngrtran.obj: pngrtran.c png.h pngconf.h pngpriv.h
pngrutil.obj: pngrutil.c png.h pngconf.h pngpriv.h
pngset.obj: pngset.c png.h pngconf.h pngpriv.h
pngtrans.obj: pngtrans.c png.h pngconf.h pngpriv.h
pngwio.obj: pngwio.c png.h pngconf.h pngpriv.h
pngwrite.obj: pngwrite.c png.h pngconf.h pngpriv.h
pngwtran.obj: pngwtran.c png.h pngconf.h pngpriv.h
pngwutil.obj: pngwutil.c png.h pngconf.h pngpriv.h
pngtest.obj: pngtest.c png.h pngconf.h

$(LIBNAME): $(OBJS)
	-del $(LIBNAME)
	$(LIB) $(LIBNAME) @&&|
$(LIBOBJS), libpng
|

# Cleanup
clean:
	-del *.obj
	-del $(LIBNAME)
	-del pngtest.exe
	-del *.lst
	-del *.map
	-del *.tds
	-del pngout.png

# End of makefile for libpng
