# Makefile for libpng
# Watcom C/C++ 10.0 and later, 32-bit protected mode, flat memory model

# Copyright (C) 2000, Pawel Mrochen, based on makefile.msc which is
# copyright 1995 Guy Eric Schalnat, Group 42, Inc.
#
# This code is released under the libpng license.
# For conditions of distribution and use, see the disclaimer
# and license in png.h

# To use, do "wmake /f scripts\makefile.watcom"


# ---------------------- Watcom C/C++ 10.0 and later -----------------------

# Where the zlib library and include files are located
ZLIBLIB=..\zlib
ZLIBINC=..\zlib

# Target OS
OS=DOS
#OS=NT

# Target CPU
CPU=6		# Pentium Pro
#CPU=5		# Pentium

# Calling convention
CALLING=r	# registers
#CALLING=s	# stack

# Uncomment next to put error messages in a file
#ERRFILE=>>pngerrs

# --------------------------------------------------------------------------


CC=wcc386
CFLAGS=-$(CPU)$(CALLING) -fp$(CPU) -fpi87 -oneatx -mf -bt=$(OS) -i=$(ZLIBINC) -zq
LD=wcl386
LDFLAGS=-zq

O=.obj

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)


all: test

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

libpng.lib: $(OBJS1) $(OBJS2) $(OBJS3)
	wlib -b -c -n -q libpng.lib $(OBJS1)
	wlib -b -c -q libpng.lib $(OBJS2)
	wlib -b -c -q libpng.lib $(OBJS3)

pngtest.exe: pngtest.obj libpng.lib
	$(LD) $(LDFLAGS) pngtest.obj libpng.lib $(ZLIBLIB)\zlib.lib

test: pngtest.exe .symbolic
	pngtest.exe


# End of makefile for libpng
