# Makefile for libpng
# Borland C++ 4.5 (Note: All modules are compiled in C mode)
# Will work with C++ 4.02 also
# To build the library, do: 
#       "make -fmakefile.bor -DMODEL=m"
# or:   "make -fmakefile.bor -DMODEL=l"
#
# ------------- Borland C++ 4.5 -------------

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

## Useful user options

# Usually defined in builtins.mak or the environment
# Currently unused.
!ifndef BCROOT
BCROOT=N:\BC45
!endif

# Where zlib.h and zconf.h and zlib.lib are
ZLIB_PATH=..\zlib

!ifndef MODEL
MODEL=l
!endif

#TARGET_CPU=3
# 2 = 286, 3 = 386, etc.
!ifndef TARGET_CPU
TARGET_CPU=2
!endif


# Use this if you don't want Borland's fancy exception handling.
NOEHLIB=noeh$(MODEL).lib

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

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


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

MODELARG=-m$(MODEL)

# -X- turns on dependency generation in the object file
# -w  sets all warnings on
# -O2 optimize for speed
# -Z  global optimization
CFLAGS=-O2 -Z -X- -w -I$(ZLIB_PATH) -$(TARGET_CPU) $(MODELARG) $(CDEBUG)

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

O=obj

## variables
OBJS = \
	png.$(O) \
	pngerror.$(O) \
	pngmem.$(O) \
	pngpread.$(O) \
	pngset.$(O) \
	pngget.$(O) \
	pngread.$(O) \
	pngrio.$(O) \
	pngrtran.$(O) \
	pngrutil.$(O) \
	pngtrans.$(O) \
	pngwrite.$(O) \
	pngwtran.$(O) \
	pngwio.$(O) \
	pngwutil.$(O)

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

LIBNAME=libpng$(MODEL).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


## Major targets
libpng: $(LIBNAME)

pngtest: pngtest$(MODEL).exe

test: pngtest$(MODEL).exe
	pngtest$(MODEL)


## Minor Targets

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


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


pngtest$(MODEL).obj: pngtest.c
	$(CC) $(CFLAGS) -opngtest$(MODEL) -c pngtest.c

pngtest$(MODEL).exe: pngtest$(MODEL).obj
	$(CC) $(MODELARG) $(LDFLAGS) -L$(ZLIB_PATH) pngtest$(MODEL).obj $(LIBNAME) zlib$(MODEL).lib $(NOEHLIB)


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


# End of makefile for libpng
