# makefile for libpng, MACOS X
# Copyright (C) 2002 Glenn Randers-Pehrson
# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
# Modified by Karin Kosina <kyrah@sim.no> 20011010:
# build shared library (*.dylib)
# For conditions of distribution and use, see copyright notice in png.h

# where make install puts libpng.a and png.h
prefix=/usr/local

# Where the zlib library and include files are located
#ZLIBLIB=/usr/local/lib
#ZLIBINC=/usr/local/include
ZLIBLIB=../zlib
ZLIBINC=../zlib

CC=cc
CFLAGS=-fno-common -I$(ZLIBINC) -O # -g -DPNG_DEBUG=5
LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lz
LDSHARED=cc -lz -dynamiclib -compatibility_version $(VER) -current_version $(VER)

PNGMAJ = 0
PNGMIN = 1.2.2rc1
VER = $(PNGMAJ).$(PNGMIN)
LIBNAME=libpng12
SHAREDLIB_POSTFIX=dylib
LIBPATH=$(prefix)/lib
INCPATH=$(prefix)/include

#RANLIB=echo
RANLIB=ranlib

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

all: libpng.a pngtest shared

shared: $(LIBNAME).$(VER).$(SHAREDLIB_POSTFIX)

libpng.a: $(OBJS)
	ar rc $@  $(OBJS)
	$(RANLIB) $@

$(LIBNAME).$(VER).$(SHAREDLIB_POSTFIX): $(OBJS)
	$(LDSHARED) -o $@ $(OBJS)

pngtest: pngtest.o libpng.a
	$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)

test: pngtest
	./pngtest


install-headers: png.h pngconf.h
	-@if [ ! -d $(INCPATH) ]; then mkdir $(INCPATH); fi
	-@if [ ! -d $(INCPATH)/$(LIBNAME) ]; then mkdir $(INCPATH)/$(LIBNAME); fi
	cp png.h pngconf.h $(INCPATH)/$(LIBNAME)
	chmod 644 $(INCPATH)/$(LIBNAME)/png.h $(INCPATH)/$(LIBNAME)/pngconf.h
	-@/bin/rm -f $(INCPATH)/png.h $(INCPATH)/pngconf.h
	-@/bin/rm -f $(INCPATH)/libpng
	ln -f -s $(INCPATH)/$(LIBNAME) $(INCPATH)/libpng

install-static: install-headers libpng.a
	-@if [ ! -d $(LIBPATH) ]; then mkdir $(LIBPATH); fi
	cp libpng.a $(LIBPATH)/$(LIBNAME).a
	chmod 644 $(LIBPATH)/$(LIBNAME).a
	-@/bin/rm -f $(LIBPATH)/libpng.a
	ln -f -s $(LIBPATH)/$(LIBNAME).a $(LIBPATH)/libpng.a

install-shared: install-headers $(LIBNAME).$(PNGVER).$(SHAREDLIB_POSTFIX)
	-@if [ ! -d $(LIBPATH) ]; then mkdir $(LIBPATH); fi
	-@/bin/rm -f $(LIBPATH)/$(LIBNAME).$(PNGMAJ)*.$(SHAREDLIB_POSTFIX)
	-@/bin/rm -f $(LIBPATH)/$(LIBNAME).$(SHAREDLIB_POSTFIX)
	-@/bin/rm -f libpng.$(SHARED_POSTFIX)
	-@/bin/rm -f libpng.3.$(SHARED_POSTFIX)
	-@/bin/rm -f libpng.3.*.$(SHARED_POSTFIX)
	cp $(LIBNAME).$(PNGVER).$(SHAREDLIB_POSTFIX) $(LIBPATH)
	chmod 755 $(LIBPATH)/$(LIBNAME).$(PNGVER).$(SHAREDLIB_POSTFIX)
	(cd $(LIBPATH); \
	ln -f -s $(LIBNAME).$(PNGVER).$(SHARED_POSTFIX) ]
        libpng.$(SHARED_POSTFIX); \
	ln -f -s $(LIBNAME).$(PNGVER).$(SHARED_POSTFIX) ]
        libpng.3.$(SHARED_POSTFIX); \
	ln -f -s $(LIBNAME).$(PNGVER).$(SHARED_POSTFIX) ]
        libpng.3.$(PNGMIN).$(SHARED_POSTFIX); \
	ln -sf $(LIBNAME).$(PNGVER).$(SHAREDLIB_POSTFIX) \
	$(LIBNAME).$(PNGMAJ).$(SHAREDLIB_POSTFIX); \
	ln -sf $(LIBNAME).$(PNGMAJ).$(SHAREDLIB_POSTFIX) \
	$(LIBNAME).$(SHAREDLIB_POSTFIX))
	-@if [ ! -d $(LIBPATH)/pkgconfig ]; then mkdir $(LIBPATH)/pkgconfig; fi
	cat scripts/libpng.pc.in | sed -e s\!@PREFIX@!$(prefix)! > libpng.pc
	cp libpng.pc $(LIBPATH)/pkgconfig/libpng12.pc
	chmod 644 $(LIBPATH)/pkgconfig/libpng12.pc

install: install-shared

clean:
	rm -f *.o libpng.a pngtest pngout.png \
	$(LIBNAME).$(VER).$(SHAREDLIB_POSTFIX) \
	$(LIBNAME).$(SHAREDLIB_POSTFIX)

DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
writelock:
	chmod a-w *.[ch35] $(DOCS) scripts/*

# DO NOT DELETE THIS LINE -- make depend depends on it.

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

