# 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

PNGMAJ = 0
PNGMIN = 1.2.3rc4
PNGVER = $(PNGMAJ).$(PNGMIN)

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

LIBNAME=libpng12
SHAREDLIB_POSTFIX=dylib
INCPATH=$(prefix)/include
LIBPATH=$(prefix)/lib
MANPATH=$(prefix)/man
BINPATH=$(prefix)/bin

# override DESTDIR= on the make install command line to easily support
# installing into a temporary location.  Example:
#
#    make install DESTDIR=/tmp/build/libpng
#
# If you're going to install into a temporary location
# via DESTDIR, that location must already exist before
# you execute make install.
DESTDIR=

#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 libpng.pc

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

libpng.pc:
	cat scripts/libpng.pc.in | sed -e s\!@PREFIX@!$(prefix)! > libpng.pc

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

$(LIBNAME).$(PNGVER).$(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 $(DESTDIR)$(INCPATH) ]; then mkdir $(DESTDIR)$(INCPATH); fi
	-@if [ ! -d $(DESTDIR)$(INCPATH)/$(LIBNAME) ]; then \
	mkdir $(DESTDIR)$(INCPATH)/$(LIBNAME); fi
	cp png.h pngconf.h $(DESTDIR)$(INCPATH)/$(LIBNAME)
	chmod 644 $(DESTDIR)$(INCPATH)/$(LIBNAME)/png.h \
	$(DESTDIR)$(INCPATH)/$(LIBNAME)/pngconf.h
	-@/bin/rm -f $(DESTDIR)$(INCPATH)/png.h $(DESTDIR)$(INCPATH)/pngconf.h
	-@/bin/rm -f $(DESTDIR)$(INCPATH)/libpng
	(cd $(DESTDIR)$(INCPATH); ln -f -s $(LIBNAME) libpng; \
	ln -f -s $(LIBNAME)/* .)

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

install-shared: install-headers $(LIBNAME).$(PNGVER).$(SHAREDLIB_POSTFIX) libpng.pc
	-@if [ ! -d $(DESTDIR)$(LIBPATH) ]; then mkdir $(DESTDIR)$(LIBPATH); fi
	-@/bin/rm -f \
	$(DESTDIR)$(LIBPATH)/$(LIBNAME).$(PNGMAJ)*.$(SHAREDLIB_POSTFIX)
	-@/bin/rm -f $(DESTDIR)$(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) $(DESTDIR)$(LIBPATH)
	chmod 755 $(DESTDIR)$(LIBPATH)/$(LIBNAME).$(PNGVER).$(SHAREDLIB_POSTFIX)
	(cd $(DESTDIR)$(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 -f -s $(LIBNAME).$(PNGVER).$(SHAREDLIB_POSTFIX) \
	$(LIBNAME).$(PNGMAJ).$(SHAREDLIB_POSTFIX); \
	ln -f -s $(LIBNAME).$(PNGMAJ).$(SHAREDLIB_POSTFIX) \
	$(LIBNAME).$(SHAREDLIB_POSTFIX))
	-@if [ ! -d $(DESTDIR)$(LIBPATH)/pkgconfig ]; then \
	mkdir $(DESTDIR)$(LIBPATH)/pkgconfig; fi
	-@/bin/rm -f $(DESTDIR)$(LIBPATH)/pkgconfig/libpng12.pc
	-@/bin/rm -f $(DESTDIR)$(LIBPATH)/pkgconfig/libpng.pc
	cp libpng.pc $(DESTDIR)$(LIBPATH)/pkgconfig/libpng12.pc
	chmod 644 $(DESTDIR)$(LIBPATH)/pkgconfig/libpng12.pc
	(cd $(DESTDIR)$(LIBPATH)/pkgconfig; ln -f -s libpng12.pc libpng.pc)

install-man: libpng.3 libpngpf.3 png.5
	-@if [ ! -d $(DESTDIR)$(MANPATH) ]; then mkdir $(DESTDIR)$(MANPATH); fi
	-@if [ ! -d $(DESTDIR)$(MANPATH)/man3 ]; then \
	mkdir $(DESTDIR)$(MANPATH)/man3; fi
	-@/bin/rm -f $(DESTDIR)$(MANPATH)/man3/libpng.3
	-@/bin/rm -f $(DESTDIR)$(MANPATH)/man3/libpngpf.3
	cp libpng.3 $(DESTDIR)$(MANPATH)/man3
	cp libpngpf.3 $(DESTDIR)$(MANPATH)/man3
	-@if [ ! -d $(DESTDIR)$(MANPATH)/man5 ]; then \
	mkdir $(DESTDIR)$(MANPATH)/man5; fi
	-@/bin/rm -f $(DESTDIR)$(MANPATH)/man5/png.5
	cp png.5 $(DESTDIR)$(MANPATH)/man5

install-config: scripts/libpng-config
	-@if [ ! -d $(DESTDIR)$(BINPATH) ]; then \
	mkdir $(DESTDIR)$(BINPATH); fi
	-@/bin/rm -f $(DESTDIR)$(BINPATH)/libpng-config
	-@/bin/rm -f $(DESTDIR)$(BINPATH)/libpng12-config
	cp scripts/libpng-config $(DESTDIR)$(BINPATH)/libpng12-config
	chmod 755 $(DESTDIR)$(BINPATH)/libpng12-config
	(cd $(DESTDIR)$(BINPATH); ln -sf libpng12-config libpng-config)

install: install-static install-shared install-man install-config

clean:
	rm -f *.o libpng.a pngtest pngout.png \
	$(LIBNAME).$(PNGVER).$(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

