# Makefile for libpng (static)
# IBM C version 3.x for Win32 and OS/2
# Copyright (C) 2006 Glenn Randers-Pehrson
# Copyright (C) 2000 Cosmin Truta
# For conditions of distribution and use, see copyright notice in png.h
# Notes:
#   Derived from makefile.std
#   All modules are compiled in C mode
#   Tested under Win32, expected to work under OS/2
#   Can be easily adapted for IBM VisualAge/C++ for AIX

# Location of the zlib library and include files
ZLIBINC = ../zlib
ZLIBLIB = ../zlib

# Compiler, linker, lib and other tools
CC = icc
LD = ilink
AR = ilib
RM = del

CFLAGS = -I$(ZLIBINC) -Mc -O2 -W3
LDFLAGS =

# File extensions
O=.obj
A=.lib
E=.exe

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

LIBS = libpng$(A) $(ZLIBLIB)/zlib$(A)

# Targets
all: libpng$(A) pngtest$(E) pngdefs.h

pngdefs.h:
	echo "/* pngdefs.h was built by makefile.ibmc */" > pngdefs.h

libpng$(A): $(OBJS)
	$(AR) -out:$@ $(OBJS)

test: pngtest$(E)
	pngtest$(E)

pngtest: pngtest$(E)

pngtest$(E): pngtest$(O) libpng$(A)
	$(LD) $(LDFLAGS) pngtest$(O) $(LIBS)

clean:
	$(RM) *$(O)
	$(RM) libpng$(A)
	$(RM) pngtest$(E)
	$(RM) pngout.png
	$(RM) pngdefs.h

png$(O):      png.h pngconf.h pngdefs.h pngpriv.h
pngerror$(O): png.h pngconf.h pngdefs.h pngpriv.h
pnggccrd$(O): png.h pngconf.h pngdefs.h pngpriv.h
pngget$(O):   png.h pngconf.h pngdefs.h pngpriv.h
pngmem$(O):   png.h pngconf.h pngdefs.h pngpriv.h
pngpread$(O): png.h pngconf.h pngdefs.h pngpriv.h
pngread$(O):  png.h pngconf.h pngdefs.h pngpriv.h
pngrio$(O):   png.h pngconf.h pngdefs.h pngpriv.h
pngrtran$(O): png.h pngconf.h pngdefs.h pngpriv.h
pngrutil$(O): png.h pngconf.h pngdefs.h pngpriv.h
pngset$(O):   png.h pngconf.h pngdefs.h pngpriv.h
pngtest$(O):  png.h pngconf.h pngdefs.h pngpriv.h
pngtrans$(O): png.h pngconf.h pngdefs.h pngpriv.h
pngwio$(O):   png.h pngconf.h pngdefs.h pngpriv.h
pngwrite$(O): png.h pngconf.h pngdefs.h pngpriv.h
pngwtran$(O): png.h pngconf.h pngdefs.h pngpriv.h
pngwutil$(O): png.h pngconf.h pngdefs.h pngpriv.h
pngtest$(O):  png.h pngconf.h pngdefs.h
