# Makefile for libpng
# TurboC++ 3.0 (Note: All modules are compiled in C mode)

# To use, do "make -fmakefile.tc3"

# ------------- Turbo C++ 3.0 -------------
MODEL=-ml
CFLAGS=-O2 -Z $(MODEL) -I..\zlib
CC=tcc
LD=tcc
LIB=tlib
LDFLAGS=$(MODEL) -L..\zlib
O=.obj
E=.exe

# variables
OBJS1 = png$(O) pngset$(O) pngget$(O) pngrutil$(O) pngtrans$(O) pngwutil$(O)
OBJS2 = pngmem$(O) pngpread$(O) pngread$(O) pngerror$(O) pngwrite$(O)
OBJS3 = pngrtran$(O) pngwtran$(O) pngrio$(O) pngwio$(O)
OBJSL1 = +png$(O) +pngset$(O) +pngget$(O) +pngrutil$(O) +pngtrans$(O)
OBJSL2 = +pngwutil$(O) +pngmem$(O) +pngpread$(O) +pngread$(O) +pngerror$(O)
OBJSL3 = +pngwrite$(O) +pngrtran$(O) +pngwtran$(O) +pngrio$(O) +pngwio$(O)

all: libpng.lib pngtest.exe

png$(O): png.h pngconf.h
		  $(CC) -c $(CFLAGS) $*.c

pngset$(O): png.h pngconf.h
		  $(CC) -c $(CFLAGS) $*.c

pngget$(O): png.h pngconf.h
		  $(CC) -c $(CFLAGS) $*.c

pngread$(O): png.h pngconf.h
		  $(CC) -c $(CFLAGS) $*.c

pngpread$(O): png.h pngconf.h
		  $(CC) -c $(CFLAGS) $*.c

pngrtran$(O): png.h pngconf.h
		  $(CC) -c $(CFLAGS) $*.c

pngrutil$(O): png.h pngconf.h
		  $(CC) -c $(CFLAGS) $*.c

pngerror$(O): png.h pngconf.h
	$(CC) -c $(CFLAGS) $*.c

pngmem$(O): png.h pngconf.h
	$(CC) -c $(CFLAGS) $*.c

pngrio$(O): png.h pngconf.h
	$(CC) -c $(CFLAGS) $*.c

pngwio$(O): png.h pngconf.h
	$(CC) -c $(CFLAGS) $*.c

pngtest$(O): png.h pngconf.h
	$(CC) -c $(CFLAGS) $*.c

pngtrans$(O): png.h pngconf.h
	$(CC) -c $(CFLAGS) $*.c

pngwrite$(O): png.h pngconf.h
	$(CC) -c $(CFLAGS) $*.c

pngwtran$(O): png.h pngconf.h
	$(CC) -c $(CFLAGS) $*.c

pngwutil$(O): png.h pngconf.h
	$(CC) -c $(CFLAGS) $*.c

libpng.lib: $(OBJS1) $(OBJS2) $(OBJS3)
	$(LIB) libpng +$(OBJSL1)
	$(LIB) libpng +$(OBJSL2)
	$(LIB) libpng +$(OBJSL3)

pngtest$(E): pngtest$(O) libpng.lib
	$(CC) $(LDFLAGS) pngtest.obj libpng.lib zlib.lib

# End of makefile for libpng
