# makefile for libpng on Linux ELF with gcc using MMX assembler code
# Copyright 1996-1997 Andreas Dilger
# Copyright 1998-2000 Greg Roelofs
# For conditions of distribution and use, see copyright notice in png.h

# CAUTION: Do not use this makefile with gcc versions 2.7.2.2 and earlier.

CC=gcc

# where "make install" puts libpng.a, libpng.so*, png.h and pngconf.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

ALIGN=
# for i386:
#ALIGN=-malign-loops=2 -malign-functions=2

WARNMORE=-Wwrite-strings -Wpointer-arith -Wshadow \
	-Wmissing-declarations -Wtraditional -Wcast-align \
	-Wstrict-prototypes -Wmissing-prototypes #-Wconversion

# for pgcc version 2.95.1, -O3 is buggy; don't use it.

CFLAGS=-DPNG_USE_PNGGCCRD -I$(ZLIBINC) -Wall -O3 $(ALIGN) -funroll-loops \
	-fomit-frame-pointer  # $(WARNMORE) -g -DPNG_DEBUG=5
LDFLAGS=-L. -Wl,-rpath,. -L$(ZLIBLIB) -Wl,-rpath,$(ZLIBLIB) -lpng -lz -lm
LDFLAGS_A=-L$(ZLIBLIB) -Wl,-rpath,$(ZLIBLIB) libpng.a -lz -lm

RANLIB=ranlib
#RANLIB=echo

# read libpng.txt or png.h to see why PNGMAJ is 2.  You should not
# have to change it.
PNGMAJ = 2
PNGMIN = 1.0.9beta5
PNGVER = $(PNGMAJ).$(PNGMIN)

INCPATH=$(prefix)/include
LIBPATH=$(prefix)/lib

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 pnggccrd.o

OBJSDLL = $(OBJS:.o=.pic.o)

.SUFFIXES:      .c .o .pic.o

.c.pic.o:
	$(CC) -c $(CFLAGS) -fPIC -o $@ $*.c

all: libpng.a libpng.so pngtest pngtest-static

pnggccrd.o:	pnggccrd.c png.h pngconf.h pngasmrd.h
	@echo ""
	@echo '    You can ignore the single "control reaches end of non-void function"'
	@echo '    warning and multiple "<variable> defined but not used" warnings:'
	@echo ""
	$(CC) -c $(CFLAGS) -o $@ $*.c

pnggccrd.pic.o:	pnggccrd.c png.h pngconf.h pngasmrd.h
	@echo ""
	@echo '    You can ignore the single "control reaches end of non-void function"'
	@echo '    warning and multiple "<variable> defined but not used" warnings:'
	@echo ""
	$(CC) -c $(CFLAGS) -fPIC -o $@ pnggccrd.c

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

libpng.so: libpng.so.$(PNGMAJ)
	ln -sf libpng.so.$(PNGMAJ) libpng.so

libpng.so.$(PNGMAJ): libpng.so.$(PNGVER)
	ln -sf libpng.so.$(PNGVER) libpng.so.$(PNGMAJ)

libpng.so.$(PNGVER): $(OBJSDLL)
	$(CC) -shared -Wl,-soname,libpng.so.$(PNGMAJ) -o libpng.so.$(PNGVER) \
	 $(OBJSDLL) -L$(ZLIBLIB) -lz -lm -lc

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

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

test: pngtest pngtest-static
	@echo ""
	@echo "   Testing dynamically linked version:"
	@echo ""
	./pngtest
	@echo ""
	@echo "   Testing statically linked version:"
	@echo ""
	./pngtest-static

install: libpng.a libpng.so.$(PNGVER)
	-@if [ ! -d $(INCPATH)  ]; then mkdir $(INCPATH); fi
	-@if [ ! -d $(LIBPATH) ]; then mkdir $(LIBPATH); fi
	cp png.h pngconf.h $(INCPATH)
	chmod 644 $(INCPATH)/png.h $(INCPATH)/pngconf.h
	cp libpng.a libpng.so.$(PNGVER) $(LIBPATH)
	chmod 755 $(LIBPATH)/libpng.so.$(PNGVER)
	-@/bin/rm -f $(LIBPATH)/libpng.so.$(PNGMAJ) $(LIBPATH)/libpng.so
	(cd $(LIBPATH); ln -sf libpng.so.$(PNGVER) libpng.so.$(PNGMAJ); \
	 ln -sf libpng.so.$(PNGMAJ) libpng.so)

clean:
	/bin/rm -f *.o libpng.a libpng.so* pngtest pngout.png

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

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

pngtest.o:			png.h pngconf.h pngtest.c
