# makefile for libpng (.a and .so), SGI IRIX with 'cc'
# Copyright (C) 2001 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

# Where the zlib library and include files are located
# You can add the -n32 option; then zlib must also be compiled with -n32
#ZLIBLIB=/usr/local/lib32
#ZLIBINC=/usr/local/include
#ZLIBLIB=/usr/local/lib
#ZLIBINC=/usr/local/include
ZLIBLIB=../zlib
ZLIBINC=../zlib

CC=cc

WARNMORE=-fullwarn
# You can add the -n32 option; then zlib must also be compiled with -n32
# Note: -KPIC is the default anyhow
#CFLAGS=-I$(ZLIBINC) -O $(WARNMORE) -KPIC -DPNG_USE_PNGGCCRD # -g -DPNG_DEBUG=5
CFLAGS=-I$(ZLIBINC) -O $(WARNMORE) -DPNG_USE_PNGGCCRD -DPNG_NO_ASSEMBLER_CODE
LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lz -lm
LDSHARED=cc -shared

VER=1.0.11beta2
SONUM=2
SHAREDLIB=libpng.so
libdir=$(prefix)
#libdir=$(prefix)/lib32

RANLIB=echo
#RANLIB=ranlib

OBJS = pnggccrd.o 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: $(SHAREDLIB).$(SONUM).$(VER)

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

$(SHAREDLIB).$(SONUM).$(VER): $(OBJS)
	$(LDSHARED) -o $@ $(OBJS)
	rm -f $(SHAREDLIB) $(SHAREDLIB).?
	ln -s $@ $(SHAREDLIB)
	ln -s $@ $(SHAREDLIB).$(SONUM)

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

test: pngtest
	./pngtest

install: libpng.a
	-@mkdir $(prefix)/include
	-@mkdir $(prefix)/lib
	cp png.h $(prefix)/include
	cp pngconf.h $(prefix)/include
	chmod 644 $(prefix)/include/png.h
	chmod 644 $(prefix)/include/pngconf.h
	cp libpng.a $(prefix)/lib
	chmod 644 $(prefix)/lib/libpng.a

install-shared: $(SHAREDLIB).$(SONUM).$(VER)
	cp $(SHAREDLIB).$(SONUM).$(VER) $(libdir)
	chmod 755 $(SHAREDLIB).$(SONUM).$(VER)
	(cd $(libdir)
	rm -f $(SHAREDLIB) $(SHAREDLIB).$(SONUM)
	ln -s $(SHAREDLIB).$(SONUM).$(VER) $(SHAREDLIB).$(SONUM)
	ln -s $(SHAREDLIB).$(SONUM) $(SHAREDLIB))

clean:
	rm -f *.o libpng.a pngtest pngout.png $(SHAREDLIB).*

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
pnggccrd.o: png.h pngconf.h

