# makefile for libpng on DEC Alpha Unix
# Copyright (C) 2000-2002 Glenn Randers-Pehrson
# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
# For conditions of distribution and use, see copyright notice in png.h

# where make install puts libpng.a and png.h
prefix=/usr/local
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=

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

# read libpng.txt or png.h to see why PNGMAJ is 0.  You should not
# have to change it.
PNGMAJ = 0
PNGMIN = 1.2.3rc4
PNGVER = $(PNGMAJ).$(PNGMIN)
LIBNAME = libpng12

CC=cc
CFLAGS=-std -w1 -I$(ZLIBINC) -O # -g -DPNG_DEBUG=1
LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lz -lm

#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: $(LIBNAME).so libpng.a pngtest libpng.pc

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

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

$(LIBNAME).so: $(LIBNAME).so.$(PNGMAJ)
	ln -f -s $(LIBNAME).so.$(PNGMAJ) $(LIBNAME).so

$(LIBNAME).so.$(PNGMAJ): $(LIBNAME).so.$(PNGVER)
	ln -f -s $(LIBNAME).so.$(PNGVER) $(LIBNAME).so.$(PNGMAJ)

$(LIBNAME).so.$(PNGVER): $(OBJS)
	$(CC) -shared -o $@ $(OBJS) -L$(ZLIBLIB) -lz -lm

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 -sf $(LIBNAME) libpng; ln -sf $(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 -sf $(LIBNAME).a libpng.a)

install-shared: install-headers $(LIBNAME).so.$(PNGVER) libpng.pc
	-@if [ ! -d $(DESTDIR)$(LIBPATH) ]; then mkdir $(DESTDIR)$(LIBPATH); fi
	-@/bin/rm -f $(DESTDIR)$(LIBPATH)/$(LIBNAME).so.$(PNGMAJ)* \
	$(DESTDIR)$(LIBPATH)/$(LIBNAME).so
	-@/bin/rm -f $(DESTDIR)$(LIBPATH)/libpng.so
	-@/bin/rm -f $(DESTDIR)$(LIBPATH)/libpng.so.3
	-@/bin/rm -f $(DESTDIR)$(LIBPATH)/libpng.so.3.*
	cp $(LIBNAME).so.$(PNGVER) $(DESTDIR)$(LIBPATH)
	chmod 755 $(DESTDIR)$(LIBPATH)/$(LIBNAME).so.$(PNGVER)
	(cd $(DESTDIR)$(LIBPATH); \
	ln -sf $(LIBNAME).so.$(PNGVER) libpng.so; \
	ln -sf $(LIBNAME).so.$(PNGVER) libpng.so.3; \
	ln -sf $(LIBNAME).so.$(PNGVER) libpng.so.3.$(PNGMIN); \
	ln -sf $(LIBNAME).so.$(PNGVER) $(LIBNAME).so.$(PNGMAJ); \
	ln -sf $(LIBNAME).so.$(PNGMAJ) $(LIBNAME).so)
	-@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 -sf 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:
	/bin/rm -f *.o libpng.a $(LIBNAME).so $(LIBNAME).so.$(PNGMAJ)* pngtest pngout.png

# 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

